Release Notes

Highlights - Cascades beta 2

How the new core UI controls look.

Core UI: Changes and additions

The core UI controls received an exciting facelift, changing from a dark theme to a light one. Many controls have been reworked, giving them more features or making them easier to use. There are also some new controls for you to try out in your apps, such as the title bar, application menu, and sheet control.

The multimedia additions.

Multimedia API

Create visually astonishing UIs for your mobile apps with fully functioning multimedia support for both video and audio. Capture video and audio with record functionality, and allow users to play back audio and video files as well as streams. The multimedia APIs support most of the popular video and audio file formats and streaming protocols.

The new layouts and scrolling for lists.

Lists: New layouts and scrolling

Lists have been updated with some new layouts that you can use. You can create a grid layout to arrange your list items, or you can use a flow layout to simply position list items one after another. There's also support for programmatic scrolling, so you can direct your list to scroll to the position of a specific item as your app is running.

New in this release

Cascades UI framework

Built-in controls

  • Action bar - The action bar now supports a compact mode (making the sidebar only partially visible), splat symbols to identify new or updated content, and numbers for the tabs. You can now determine if items should appear on the action bar or in one of the menus, and you can also populate the action bar dynamically from within your apps, giving you more flexibility in your designs. New visibility modes have been added; show the action bar on top of your app's UI, or even hide it completely. Your users can also peek into the compact sidebar by dragging the sidebar button. Multi-selection mode can now be triggered from the action bar, showing a context menu with multi-selection capabilities.
  • Context menu - The context menu has now a compact mode and fully expanded mode with two separate layouts. Compact mode shows only the icons of the menu items, while fully expanded mode is scrollable and displays both icons and item titles. Touch behavior has been improved and it's now possible to expand item-by-item by dragging your finger along the actions. Multi-selection mode has been added, and users can perform context-sensitive actions on the selected set of items.
  • Application menu - This is a new control in this release, and appears at the top of your app's UI. With the ability to hold up to 5 visible items, you can use the application menu to provide access to help, settings, or other custom actions that your app provides. When it's enabled, users can swipe or drag down from the top of the screen to display the menu, and swipe or drag up to dismiss it. This control is currently available only in C++, but support for QML will be added in a later release.
  • Custom dialog - A custom dialog is a full-screen view that's displayed as a transparent layer on top of the current screen context. It's a new control that lets you show anything you want on top of the current application.
  • Container and ScrollView - A new ScrollView class has been added, and scrolling functionality from the Container class has been moved to this new class. You can now scroll containers programmatically and the container animates to the new scroll position. You can also use the ScrollView class to support zooming using pinch gestures. There's also support for painting tiled images on a container; use this approach when you need to save memory in your apps instead of loading a background image.
  • Sheets - A sheet is a new type of control that, when it's opened, appears on top of all other controls in your app. Think of a sheet as a pop-up that can display a NavigationPane, TabbedPane or Page.
  • Buttons with images - You can use two new controls to show an image that behaves like a button. No border is displayed on these controls, only the image itself, which gives you an easy way to create custom buttons. These features are available in two flavors: standard button behavior and toggle button behavior.
  • Focus handling for controls - The approaches to focus handling are being updated. This is a work-in-progress, but will allow controls to become focusable and have a region of interest that is connected to scrolling and the virtual keyboard. Stay tuned for more updates!
  • Title bar - This is a new control that's shown at the top of your app's content area. The title bar includes support for plain title text, actions, segmented control, or a combination of these elements.
  • Progress indicator - An additional state has been added that you can use to indicate when an error occurred during progress (hint: it's red).
  • Segmented control - You can now add images to a segmented control.
  • Check box - You can now combine a check box with a label in a pre-packaged way.
  • Date and time picker - An additional mode, timer mode, has been added to the date and time picker control. This mode displays hours, minutes, and seconds.
  • Sharing and invocation from context menus and the action bar - There's a new type of action item, InvokeActionItem, that you can use in your context menus and on the action bar. These items support sharing data with other registered applications, viewers, or services. Two categories of action items are supported:
    • Bound action - This action is associated with a specific target application or service. You can add this item and specify the MIME type and target application. An example is a "Share on Facebook" item.
    • Unbound action - This action lets users choose from a list of target applications or services. When users select this item, a list of targets appears, depending on what's installed. An example is a "Share as" item, which might expand to a list that includes "Facebook", "Twitter", or other applications.
    You can add this new type of item to the action bar or a context menu just like any other action item; specify the position you want it to be shown in, whether you want it to appear on the action bar or inside menus, and more. If there aren't any applications or services installed on the platform that match your action item, then the action item won't be shown.
The context menu while dragging a list item.

Context menu: Dragging an item from list to the menu.


A custom dialog and title bar

A custom dialog, with a titlebar visible at the top.

Lists

  • Grid list layout - This is a list style where the rows in the list can be divided into a number of columns, resulting in a grid of cells. This just changes the layout of the list items; your list still benefits from properties such as kinetic scrolling and population from an associated data model.
  • Flow list layout - In this list style, items are arranged row-by-row (left-to-right, right-to-left) or column-by-column (top-to-bottom, bottom-to-top), trying to fit as many items as possible before moving to the next row or column.
  • Padding - You can now specify padding parameters on a list view to create a more spacious design.
  • Programmatic scrolling - Support has been added for more advanced scrolling behaviors. You can direct your list to scroll to a specific item, position, or pixel location programmatically in your app.
  • Leading visual - Using this feature, you can specify a set of items to be placed in an area directly above the list that can be pulled into view and interacted with, then dismissed back out of view. For example, you might create an inbox that contains a list of email messages, with calendar events in the leading visuals area.

Text

  • Emoticons - There is now support for emoticons in text fields and text areas.
  • Password masking - Text fields now support password masking.
A grid list layout.

A grid list layout.

Cascades platform APIs

  • Notifications - Present a notification as a vibration, an LED flashing, a sound playing, or an entry added to the Universal Inbox. Notifications can also be a dialog box that gives the user choices, such as Cancel or OK.
  • System dialogs, prompts, and toasts - Display standard dialog boxes with user confirmation, prompts with text input from the user, credentials prompts, or simple dialogs that time out without any user interaction required.
  • Device info - Retrieve information about the configuration or availability of a device, as well as general information about the device hardware, such as PIN and serial number.
  • Home screen - Interact with the home screen from your application, such as change the wallpaper and set the icon of an application. Note that depending on the version of device software you are running, some features might not be available. For more information, see the Known Issues section.
  • Geographics - Access base geographic elements that can be put on a map, definitions for points in geographic space (longitude and latitude), lists of geographic entities, and geographic boundaries (2-dimensional axis-aligned bounding boxes).
  • Places - Display a place (a location on a map, an address, a point of interest) in a fullscreen UI component and let the user browse, edit, or save place details in the Places database. You can use this with Location APIs to create map-based apps.
  • Multimedia API - Capture video and audio with record functionality, and allow users to play back audio and video files as well as streams. The multimedia APIs support most of the popular video and audio file formats and streaming protocols.
  • Invocation framework - Provide the ability for the user to perform an action on an item identified as content. This framework enables the client (applications, services, or viewers) to send a message to a target (applications, services, or viewers) to perform a particular action. The framework also offers the capability to discover what targets are available on the device.
  • Barcode processing and creation - Initiate a barcode scanner that uses the camera viewfinder; scan and decode QR codes, 1-D barcodes, and 2-D barcodes using the ZXing library; create QR codes from a string message (URI).
  • Vibration control - Determine whether vibration is supported on a device, control the vibration of the device by starting and stopping vibrations with a specified duration and intensity.
  • Clipboard - Add data to or remove data from a clipboard that's shared between applications on a device; copy and paste data in different locations in the same app, or between different apps; store multiple types of data in the clipboard, including plain text, HTML, RTF, or types that you define yourself.
  • NFC - Support basic NDEF handling in your apps. Some of the classes have been copied from the Qt Connectivity API, modified, and renamed. Other classes are new, and all are located in the QtMobilitySubset library. The NFC API includes the following classes:
    • QNdefUriRecord – This class is a renamed copy of the QNdefNfcUriRecord class in the Qt Connectivity API, and provides an NFC RTD-URI. The NFC RTD-URI uses the NFC Record Type Definition to encapsulate a URI.
    • QNdefTextRecord – This class is a renamed copy of the QNdefNfcTextRecord class in the Qt Connectivity API, and provides an NFC RTD-Text. NFC RTD-Text encapsulates text that can be displayed to the user.
    • QNdefSpRecord – This class handles smart poster records. It is new, and not copied from the Qt Connectivity API.
    • QNdefRecord – This class is a modified copy of the QNdefRecord class in the Qt Connectivity API, and can be used to create and read NDEF records. Changes from Qt Connectivity include renaming of enumeration members, and addition of enumeration members. The copy constructor has also been modified to allow the type to be ignored when comparing instances of the QNdefSpRecord class.
    • QNdefMessage – This class is a copy of the QNdefMessage class in the Qt Connectivity API, and can be used to provide NDEF messages. It has not been renamed or modified.

Cascades Builder

  • Color settings for highlighting - You can now specify your own colors for elements such as keywords, comments, errors, and so on.
  • Improved QML validation - Cascades Builder provides additional information when validating your QML code. For example, unknown properties and signals are now marked as errors. Errors are also shown for read-only properties, when there are duplicate properties, and for an invalid format of the id property. Warnings are displayed for id properties with quotes. Unknown components are also identified.
  • Design view improvements - Previously, only a subtle green/red color cue was used to indicate when the design view could not render the content of a QML file. Now, rendering problems are more clearly indicated, and an error description is displayed. In addition to a set of predefined zoom levels, there is now a "fit to window" option.
  • New project templates - A new and improved set of project templates have been added, which cover more UI patterns that are common in BlackBerry 10 applications.
  • Outline view edit actions - There is support for drag-and-drop from the Components palette into the Outline view to add controls to the scene. You can also drag-and-drop to reorder the components that are displayed in the outline view. You can also right-click to access "Add", "Move Up/Move Down", and "Delete" actions.
  • Editing of translation source files - When you double-click a translation source (.ts) file, it is now opened with an Eclipse text editor.

Cascades Exporter plug-in for Adobe Photoshop

  • UI controls palette - A subset of the BlackBerry 10 controls are available in a palette and can be used in your designs. When you export your design, these controls are preserved as actual controls, instead of being exported as bitmaps. This means that when you import your design into Cascades Builder, a button in the Photoshop document will become a Button control in the QML file.
  • Performance improvements - Previously, switching between layers became slow for Photoshop documents with a large number of layers (more than 100). Now, this action is instant, even for very large documents. In addition, the export action is now faster. The bigger the document, the more you'll notice this performance improvement; increases of as much as 20% can be achieved for large documents.
The new improved project templates.

Many new project templates to help you get started.

Fixed in this release

Cascades UI Framework

3630712

UIObject.attachedObjects.length returned a value of 0, even if objects had been attached.

3628516

The first option of a SegmentedControl was not being selected when the selectedIndex had a value of 0. The first option should be selected by default when the selectedIndex is 0.

3622193

Replacing an ImageView image caused the heap size to grow as if both images were still present. Replacing an ImageView image should delete the previous image and adjust the heap size accordingly.

3593375

StandardListItem.imageSource property returns an empty string when called, instead of returning the path to the source image.

3582296

Scrolling past the top bounds of a scrollable container caused the entire container area to turn white.

3558816

SqlConnection transactions did not function correctly unless a transaction has already been executed.

3556268

When using a TabbedPane, the first tabpage appeared on the ActionBar when showTabsOnActionBar was set to 'false'.

3545884

SqlConnection::execute/executeAndWait(Insert Statement) was being executed twice, causing the database to be updated twice with new entries.

3523678

Attempting to use NavigationPanes in a TabbedPane did not work correctly. The tabs were not displayed.

3515020

Using horizontalAlignment: HorizontalAlignment.Fill on a button in a DockLayout did not fill the width of the screen, and caused text used in the button to be clipped.

3514830

Using horizontalAlignment: HorizontalAlignment.Fill on a button in a StackLayout dif not fill the width of the screen with the button.

3512901

Using spaceQuota on a button in a StackLayout used to cause text to overlap the button.

3481382

The attachedChanged signal did not fire when an attached window was destroyed.

3469198

If ActionSet->setTitle was called when the ActionSet menu was visible, the UI was not updated.

3428673

The header files for FontStyle, FontWeight, and FontStyleHint did not exist and caused the following error when you attempted to compile: "error: bb/cascades/FontStyle: No such file or directory".

3427602

SegmentedControl::resetSelectedIndex and SegementedControl::resetSelectedOption did not reset the control when used. These are intended to reset the control and select the first option in the list.

3427080

An imageSourceChanged signal was not fired when an imageSource was set, or reset.

3415323

Animations appeared to stutter or jump if Cascades was idle.

3414323

Adding two ActionItems to a page, then adding that page to a tabbedPane, caused the Action Bar to not be visible to the user.

3405801

A selectedIndexChanged signal was not being fired when an option was set, reset, or set by index.

3398536

The text assigned to a drop-down option was not updating on the UI when another option was selected. The selectedIndex of the drop-down option was changing, but the text reflected on the UI was not.

3373861

Attempting to insert a tabPane by using TabbedPane:Invoking insert(0, tabPane) resulted in a tabpage that appeared empty.

3245777

Attempting to add/insert a duplicate RadioGroupOption would cause RadioGroup->optionCount() to increase by 1, but the RadioGroupOption was not added visually to the control.

3231101

RadioGroupOption isSelected returned false when an option was selected via the RadioGroup setSelectedOption or setSelectedIndex APIs. RadioGroupOption isSelected now returns true when an option is selected.

3228156

The QML RadioGroup Q_INVOKABLE_at function returned 'undefined' when invoked in QML

3223580

Attempting to add/insert a tabPane which was already assigned to an existing TabbedPane resulted in the ownership remaining with the source TabbedPane.

3212523

QListDataModel::move triggered DataModel:updatedItem twice, when it should trigger DataModel:updatedItem only once.

3207098

Image assets assigned to drop-down options were not being displayed in the drop-down list.

3198300

When you got the file path from xmlDataModel using source(), the file path returned began with two forward slash characters (//) it should not have prepended the path.

3193126

QML - scrollMode was not registered in QML for container objects, and would return "QMetaProperty::read: Unable to handle unregistered datatype 'bb::cascades::ScrollMode::Type' for property 'QDeclarativeBoundSignalParameters::newScrollMode'" if called.

3193101

QML - resetScrollMode was not available in QML for container objects.

3192970

The bb::Cascades::Paint type was not registered in QML, and would return the following error message if called: QMetaProperty::read: Unable to handle unregistered datatype 'bb::cascades::Paint' for property 'QDeclarativeBoundSignalParameters::background'.

3178884

resetLayout() resets the container layout to StackLayout by default, instead before it returned a 'NULL' value.

3176692

PreferredSize, PreferredHeight, LeftMargin, RightMargin, MinWidth did not function correctly with DateTimePicker if the values were lower than the defaults are given.

3160688

A three second UI lag occurred the first time you changed the DateTimePicker's mode to 'DateTime'.

3159146

More than one pane could be pushed from the same source pane simultaneously if you tapped the control buttons quickly, which caused the previous pane to be painted in the background of the current pane.

3158040

The resetTopMargin(), resetBottomMargin(), resetLeftMargin(), resetRightMargin() did not trigger signals from topMarginChanged(), bottomMarginChanged(), leftMarginChanged(), rightMarginChanged() respectively for ProgressIndicator.

3156065

In QML, the imageTracker.source always returned an empty string value, even if a source had been defined.

3150612

Previously painted content could be seen briefly when the virtual keyboard opened.

3128997

Both setSelected and resetSelected do not update the UI with changes made to drop-down menu items, which can result in an empty drop-down being displayed.

3091660

Setting the font color of a label that did not have a font size defined caused a resizing of the font when two or more labels were present.

3090247

The ScalingMethod type was not registered in QML, and led to the following error if the onScalingMethodChanged signal handler was invoked: "QMetaProperty::read: Unable to handle unregistered datatype ' bb::cascades::ScalingMethod::Type' for property 'QDeclarativeBoundSignalParameters::scalingMethod".

2999639

Some options used to be still selectable after having their 'Option Enabled' status set to false.

2992360

Attempting to call Application::setScene() to pass a setting's root caused a segmentation fault error to be thrown.

2988579

A Control::layoutPropertiesChanged signal was not being fired when resetLayoutProperties() was called, even though the layout properties had been reset in the control.

2985208

Inserting a second tabPage by using myTabPane->insert(0,secPage); resulted in the second tabPage replacing the position of the first tabPage.

2983994

Previously, Pages could not be pushed to the NavigationPage more than once, and would display 'Cannot access memory at address 0x0' in the debug window upon multiple attempts.

2981253

When a container was disabled, its ChildObjectsEnabled property remained set to true.

2981241

A TextField did not render special characters properly.

2981175

Tapping a TextField that is disabled/non-editable used to still display the virtual keyboard.

2981171

The first time a user tapped a TextField in a Cascades application, the area above the TextField was painted white until the user forced a re-paint.

2981143

The clear control of a default TextField did not clear the text when pressed.

Cascades Platform APIs

3606249

Attempting to run a readyRead() signal on a PpsObject containing a large amount of data (/pps/services/wifi/status for example) resulted in no data being placed in the buffer.

3590400

The bb::device::Led::colorChanged() signal was not being fired when the color of an LED was changed while the LED was flashing. The signal was detected when the color of an LED was changed when the LED was not flashing.

3558709

Using bb::platform::Homescreen.setWallpaper() to set a .GIF file as wallpaper did not function correctly. The .GIF was not displayed, and the previous wallpaper was removed leaving no wallpaper on the home screen.

3558122

NetworkStatus objects used to emit a networkConnectedChanged() signal on the registered slot immediately when executing a connect statement. The registered slot should not have been called immediately when executing the connect statement.

3483069

Attempting to post two notification instances with prompt choices resulted in neither dialog being displayed.

Cascades Builder

3633870

Attempting to create and package a project with a name length greater than 25 characters used to throw the following error: "Packaging failed:1 ... Error: Attribute Application-Name: value exceeds 25 chars", even though the name creation notification states that a project name was 3 to 126 characters in length.

3633745

In Cascades Builder, importing a .TMZ file with a text layer used to cause Cascades to crash.

3629363

The QML wizard does not display the 'Finish' button, or an error message, if you attempt to create a file with a duplicate name in different case (a.qml and A.qml for example). The user is given no indication of the naming conflict, and cannot finish the file creation.

3613963

Invoking code assist after 'background: Color' used to not display the 'Color' context property. The user should have been shown options (Red, Green, and Yellow), but nothing was displayed.

3613016

Including a period (.) or a space in the project name used to cause a binary error when you attempted to build the project as a simulator debug. A warning was not provided in the file creation wizard.

3601213

Attempting to open a Cascades project in a VMware virtual environment used to cause the IDE to crash unexpectedly

3596131

Invoking code assist after 'propertyBinding = SystemDefaults.TextStyles' returned a 'Null Pointer Exception' error instead of displaying the static properties of SystemDefaults.TextStyles.

3560257

Temporary preview files (.preview######qml.qml) used to be included in the .bar file during packaging.

3560254

Temporary preview files (.preview######qml.qml) used to be included in the .ts translation files.

3160891

In Windows 7 (64-bit), the NVIDIA graphics card driver v191.25 used to not support design mode in the QML editing perspective. 

2981167

Attempting to display the values of Cascades specific objects in variables view or watch expression view during a debug used to not display the values.

Cascades Exporter

3547445

In Photoshop, in the rescaling dialog box, including a space in the scaling value ("2 4" for example) returned a 'Problem Null' error instead of informing the user that special characters were an invalid input parameter.

3540237

[MAC] When working on two or more projects, attempting to undock one of the projects from the design window used to cause Photoshop to crash.

3225698

When exporting a .TMZ file that has a BB10 or Playbook button included, the .TMZ preview only displayed a preview of the button. Also, if multiple buttons are added, the preview only showed the last button that was added to the file.

3216416

When using the 9-slice tool in Photoshop, dragging the left guide over the right guide used to result in errors with the positioning and errors with values returned by the 9-slice tool. Also, if you deleted the layer being sliced and only displayed the background layer, sections of the 9-slice tool used to still be seen.

3200157

When exporting any file type from Photoshop, the 'Cancel' button cannot be clicked, and the operation cannot be stopped.

3199307

Importing a BB10 or Playbook button with no specified text into Cascades caused the 'Text Property' to default to 'Null', when no 'Text Property' should be declared.

Known limitations

  • Foreign Window

    When the ForeignWindow control has its windowFrameUpdateEnabled property set to true, applications that use the ForeignWindow control to display media, or a camera viewfinder may find that the content being displayed does not scale to the dimensions of the ForeignWindow control as expected.
    Workaround: To work around the above issue the application must set the windowFrameUpdateEnabled property to false, and update the position and size of the ForeignWindow in response to a controlFrameChanged signal.

    // In QML:
    ForeignWindow {
        windowId: "VideoSurface"
        windowFrameUpdateEnabled: false
        onControlFrameChanged: {
            app.updateProperties(windowHandle, x, y, width, height);
        }
    }
    // In C++:
    #include <screen/screen.h>
    void App::updateProperties(unsigned long windowHandle, int x, int y,
    int width, int height) {
        screen_window_t win = (screen_window_t)windowHandle;
        int pos[2] = { x, y };
        int size[2] = { width, height };
        screen_set_window_property_iv(win, SCREEN_PROPERTY_POSITION, pos);
        screen_set_window_property_iv(win, SCREEN_PROPERTY_SIZE, size);
    }
    

    void App::updateProperties(unsigned long windowHandle, float x, float y, float width, float height) {
    
            screen_window_t win = (screen_window_t)windowHandle;
            //prepare the array for position parameter
            int positionParam[2];
            positionParam[0] = x;
            positionParam[1] = y;
    
            int result = -1;
            result = screen_set_window_property_iv(win, SCREEN_PROPERTY_POSITION, positionParam);
            if ( result != 0) {
                    //TODO: Error handling
                    fprintf(stderr,"ERROR : screen_set_window_property_iv : SCREEN_PROPERTY_POSITION = %d \n",
                            result );
            } //if
    
            //prepare the array for size parameter
            int sizeParam[2];
            sizeParam[0] = width;
            sizeParam[1] = height;
    
            result = -1;
            result = screen_set_window_property_iv(win, SCREEN_PROPERTY_SIZE, sizeParam);
    
            if ( result != 0) {
                    //TODO: Error handling
                    fprintf(stderr,"ERROR : screen_set_window_property_iv : SCREEN_PROPERTY_SIZE = %d \n",
                            result );
            } //if
    }
    
  • Multimedia

    The multimedia APIs currently require a set of libraries to be linked in the application project (.pro file). The libraries required are: –lbbmultimedia –lmmrndclient –lstrm –lasound.

    The MediaPlayer class and MediaError class do not execute properly on the BlackBerry 10 Dev Alpha simulator. Subsequently, the VideoPlayback sample app does not run properly on the simulator. The simulator does not have the decoders for these APIs.
    Workaround: If your application uses these classes, run them on a device.

  • Invocation framework

    The Invocation Framework is currently not functional on the simulator.

  • OrientationHandler

    Orientation is not fully functional when using OrientationHandler. An application can still set the orientation mode to be fixed in portrait or landscape. It can also set the orientation programmatically (for example, in response to clicking a button). However, actively changing the orientation in response to device orientation changes will likely result in mismatched pixels and distorted screen components (on alternating orientation changes).

  • QML preview

    Currently, navigational controls like NavigationPane and TabbedPane do not display correctly. Their content is visible, but the navigational features are not. Some of the new Cascades controls, such as the TitleBar and ImageButton, also do not display correctly.

Known issues

Cascades UI Framework

When a Page is popped off of a NavigationPane using the pop() function, the Page is sometimes deleted by the garbage collector. The pop() function incorrectly sets the parent of the Page to NULL, which makes it a viable candidate for destruction by the garbage collector. This issue also occurs when garbage collection is triggered manually.
Workaround: Use the deprecated push() function instead.

4689076

If using a WebView component, your application can sometimes fail or become unresponsive at runtime.

4389394

When using the Croatian or Kazakh character sets, some characters are missing.

4286336

When using a TextArea with content exceeding one screen in height, the TextArea becomes difficult to scroll.

4278679

Adding or removing ActionItems from a hidden (immersive) ActionBar causes the ActionBar to be shown on the screen.
Workaround: Add ActionItems to a visible ActionBar.

4245734

When using the deprecated Orientation messages API, your application can become unresponsive at run-time if the Orientation is altered by the user.
Workaround: Use the new Orientation messages API.

4050102

When you're using a QML Container with a LeftToRight stack layout with one element aligned to the left and the second aligned to the right (using the HorizontalAlignment.Right property), both elements are aligned side-by-side instead of to each side.
Workaround: In this situation, do not use a LeftToRight stack layout and align the elements manually.

3861787

When using an ImageView object, the ScalingMethod.AspectFit enumeration does not scale the ImageView correctly when used to resize an ImageView between portrait and landscape mode.

3859167

When receiving onTouch events from applications that use child classes of CustomControl, unexpected values might be returned on the events. An example would be positional change between touch events of over 300 pixels in under 70 ms.

3747253

In a scrollable Container that includes a button to toggle orientation, a scroll event is sometimes emitted when the button is pressed. A button-click event should be emitted instead.

3745033

Calling QListDataModel::Move(x, y) moves x to index y-1 instead of index y.
Workaround: Adjust your moves accordingly, so if you want to move x to y, then move x to y+1.

3669945

The defaultImageSource property of ImageButton does not prefix the file path with "file://", but the imageSource property does.
Workaround: Add the "file://" prefix manually.

3637004

A ListView with a StackListLayout containing DropDown components, each having a layout direction set to LeftToRight or RightToLeft, can cause the application to become unresponsive and fail with a 'SIGSEGV' error.

3633517

When using a Label object with large font sizes, text might be rendered incorrectly.

3630528

A ListView component with a GridListLayout displays only the grid header and does not display data within each cell.

3625051

A ToggleImageButton is not visible if the dimensions are not specified.
Workaround: Specify the dimensions of the ToggleImageButton.

3623776

A displayDirectionChanged signal is only emitted on the first instance of a display direction change, when it should be triggered on each rotation.

3622819

When using a Slider control, a touchUp event can contain incorrect information about the positional value of the slider. An example would be receiving a previous touchUp event value even though the user did not touch the same area as before.

3621228

The API documentation indicates that the TextField.resetHintText() slot function resets hint text to an empty string, but the function actually resets hint text to "Enter text".

3598628

A parent Container's maxHeight can be overwritten by a child Container's minHeight when the parent Container uses a DockLayout or the parent Container is contained within an empty Container.

3596128

TextStyle.base components cannot be set to null, even though in the API reference the default is stated as a null TextStyle. Also, altering TextStyle.base does not emit the onBaseChanged signal.

3596121

When the TextStyle.resetBase() function is called, the changeListener signal emits the new base as a defined TextStyle object instead of the default value of NULL.

3596112

The TextStyle.onBasedChanged signal is emitted after setting the same base value.

3593657

The default value of TextStyle.base is specified as null in the API documentation, but at runtime the value is undefined.

3556364

When using a GridListLayout object, calling the GridListLayout.setSpacingAfterHeader() function does not add spacing after the header. If the spacingAfterHeader property is connected to a slot function, a signal is not emitted when the setSpacingAfterHeader() function is called, as it should.

3555874

When using HeaderListItem with layoutDirection set to LeftToRight or RightToLeft, the parent ListView has infinite scrolling and non-header items are hidden.

3555132

The ImageTracker.onImageChanged signal is emitted even when setting the image to the same image.

3552793

Public headers for WebLoadRequest and WebSettings are missing.

3542367

Using nested StackLayout layouts may cause overlapping elements.

3527827

Sometimes, the leftmost edge of the first letter of text in a Label can be clipped.

3524418

When two Pages with no background are programmatically pushed to a NavigationPane at the same time, both are displayed on top of each other.
Workaround: Programmatically push one Page at a time to the NavigationPane.

3514817

When using a Button with HorizontalAlignment set to Fill inside an Container with a LeftToRight stack layout, sometimes text is displayed improperly and does not fill the width of the screen.

3484797

Inserting items into and removing items from a QListDataModel can result in an incorrect DataModel size and incorrect number of items displayed in the associated ListView.
Workaround: If you add separate Buttons for data model removal and data model addition, this issue does not occur. Also, if QListDataModel::clear() is called to remove all values in the model, this issue does not occur.

3469244

The TextField.onTextChanging signal is emitted after the onTextChanged signal if you change focus to another UI element, even if no text has changed in the original TextField.

3467064

SegmentedControl does not update the display when an option has been moved from one control to another. The option remains in the initial control, and is placed in the target control.

3428181

When setting SupportedDisplayOrientation to All, the supportedDisplayOrientationChanged signal is not emitted and the connected slot function is not invoked.
Workaround: Set a specific display orientation using DisplayLandscape, DisplayPortrait, DeviceNorth, or CurrentLocked enumerations instead of specifying All as supported.

3428166

Using SupportedDisplayOrientation::All can cause application orientation to be unresponsive when the device is rotated.
Workaround: Set a specific display orientation using DisplayLandscape, DisplayPortrait, DeviceNorth, or CurrentLocked enumerations instead of specifying All as supported.

3244920

The GroupDataModel::RemoveAt function returns true even when removing the header is unsuccessful.

3228577

RadioGroup.SelectedIndexNone returns 'undefined' in QML. The expected return for RadioGroup.SelectedIndexNone is '-1'.

3213907

Attempting to use "QVariantList() << (negative integer)" as a parameter for DataModel::childCount, hasChildren, itemType, and data causes the application to terminate unexpectedly.

3206167

The QListDataModel::append() function emits an itemAdded signal with an incorrect indexPath value.

3193875

The clipContentToBounds property has no effect when it is set from QML, and can cause objects within a Container to be clipped if their size exceeds the bounds of the Container.

3190445

Attempting to quickly stop and restart an animation returns the following error message: "ERROR: Animation: Failed to stop animation."

3190444

The resetLayout() function should reset a container's layout to StackLayout by default, but instead it returns a 'NULL' value.

3163347

The titleChanged, valueChanged, and modeChanged signals for DateTimePicker are not being emitted correctly, or at all, when their respective changes occur.

3139275

Default-size TextFields in Containers with LeftToRight layouts can push some Labels out of view by exceeding the bounds of the Container.

2983165

With nested Containers and touch behavior set to start tracking on a touch down event, touching the child Container causes the parent Container to respond as if it had been touched.

2981126

A TextArea does not scroll up to display all entered characters when the virtual keyboard is displayed.

2981125

Tapping a TextArea after hiding the virtual keyboard does not display the virtual keyboard a second time.

Cascades Platform APIs

5781921

When you're using AudioRecorderPrivate::setMediaState slot function connected to mediaStateChanged signal, the mediaState can sometimes be set to "Unprepared" even if another state is expected.

5561615

The ForeignWindow::controlFrameChanged signal is not emitted on rotation changes of the device. The signal is emitted on the first layout but not subsequent rotations.

5521813

When using the bb::platform::Homescreen class, the boolean value returned from the lockState() function returns an incorrect, unknown state. Also, the lockStateChanged signals are not being emitted properly.

5521788

When using the bb::platform::Homescreen class, if you alter the boolean that indicates if a wallpaper is set through the setWallpaper() function, the device stops responding and must be reset. After the reset, the wallpaper is not set to the wallpaper passed into setWallpaper().

5505884

The API documentation is missing a description for the bb::platform::osVersion() function.
Workaround: Look at the \target\qnx6\usr\include\bb\platform\Version.hpp file, relative to where you installed the BlackBerry 10 Native SDK.

5503768

The bb::utility::i18n::Formatting class is missing API reference documentation.
Workaround: Look at the \target\qnx6\usr\include\bb\utility\i18n\Formatting.hpp, relative to where you installed the BlackBerry 10 Native SDK.

5502272

The API reference documentation is missing descriptions of the bb::system::locale::Type class.
Workaround: Look at the \target\qnx6\usr\include\bb\system\locale\Type.hpp, relative to where you installed the BlackBerry 10 Native SDK.

5485722

In the bb::platform::Homescreen class, the WindowCover API and signals are not working correctly. This includes the setWindowCover() function, the windowCoverSize() function, the windowCoverModeEntered() signal, the windowCoverExited() signal, and the ImageWindowCover child class.

5456354

The InvokeManager::invoke(InvokeRequest) function does not invoke the target when only the mime-type is specified in the InvokeRequest parameter.

5438620

Notifications cannot trigger the LED/sound/vibration effects specified in the settings.

5347148

When the user performs a swipe down gesture, the swipeDown signal is not emitted.

5327958

In the Homescreen class, the setIconBadge() function places the icon badge in an incorrect position. The icon badge is placed in the middle of your application's icons as opposed to directly on top of the icon.

5296601

When you're using the Homescreen class, the setWindowCover() function does not set any cover when working on the BlackBerry 10 simulator.

5266178

Using the Homescreen class, the addShortCut() function scales up the image icon if the icon passed is smaller than the expected size, opposed to not scaling the icon as stated in the documentation.

5177696

When using bb::device::Led, the red LED flashes, but the green and yellow LEDs do not flash.

5177452

When opening an encrypted database with bb::Data::SqlConnection with an SqlWorker, an OperationFailure error is thrown. The error should be a ConnectionFailure error.

5156596

In the Homescreen class, the setTransition() function, when passed WindowCoverTransition::Slide or WindowCoverTransition::Fade, does not cause a window transition effect to be enabled.

5148962,
5147742

When free storage on the device is less than 1 GB and video is recorded until the device storage is full, the videoCaptureStopped signal is not received when the device storage is full. Also, when this occurs, the videoCaptureFailed signal is received with an error set to RecordingSpaceFull.

4407225

In the Homescreen class, the setBadgesDisplayed(true) function and setWindowCover() function do not show an image with a badge.

4244961

The bb::Application class does not allow for delayed exits, but instead exits the application immediately. Sending the PPS message "extendTerminate" to the Navigator to extend the exit does not work either.

4242355

Using Clipboard.insert() to insert an empty string or NULL statement is not allowed, and is not stated in the documentation.

3640476

In your application, if you call Toast.setIcon( const QUrl& ) and then call Toast.show(), the icon previously set is not shown.

3621151

In the bb::platform::DigitalGoodResponse class, the methods digitalGoodId() and digitalGoodSku() return an empty string value, instead of the digital good ID. The header file states that these methods will return the digital good ID if passed in the original request.

3606315

On a BlackBerry 10 Dev Alpha device, using the PaymentService API to make a purchase in Test Mode results in a cut-off configuration dialog for digital goods, in which only the bottom part of the dialog is shown.

3527483

Using the Display API, it is not possible to receive signals from the secondary display when signals are connected to the primary display.

Cascades Builder

5815502
(3212426)

When using Cascades Builder on Windows XP, overwriting or replacing an image in Cascades is not reflected in the design canvas.

5632672

"The navigation and tabbing features are not displaying properly in the QML preview. Also some of the new Cascades controls, such as the TitleBar and ImageButton do not display correctly in the QML preview.
Workaround: Use the device to display them."

5273759

QML ImageTracker is marked as an unknown component in the QML properties view.

5145761

When installing Cascades Builder on Mac OS, the soft links reference invalid/missing files.

3674748

The debugger displays errors when watching expression values on Cascades objects.

3665573

When using the Debug Perspective on a Mac, variable information does not appear in the 'Variables View' after you debug an application.

3633843

Adding a Container component to an empty Cascades project will cause the QML editor to notify the user of parsing errors, when no parsing errors exist.
Workaround: Close, then re-open the file.

3633743

When using the Debug Perspective on a Mac, stepping into the code during a debug can cause the debug session to stop responding.

3628816

It's not possible to browse for a file in the 'Image Source' text field of the Properties View.
Workaround: Specify the path manually.

3608228

On a BlackBerry 10 Dev Alpha device, attempting to debug a Cascades application over Wi-Fi can result in a timeout error, which stops the debug session.

3596004

Invoking code assist after 'TextStyleDefinition' does not display 'onBaseChanged' as an option in the property list.

3540124

If the BlackBerry 10 Native SDK is installed in a non-default location, the compiler is unable to build projects.

3284040

When running the SpeedWriter sample app, the QML preview does not work and produces an error indicating that MyControl is not installed.

3255622

The QML status button in the QML editing perspective always displays as red, indicating invalid QML code even when the QML code is valid.

3147605

Attempting to use code assist for the first time in a project can cause code assist to function incorrectly, or not at all.
Workaround: Save, close, and re-open the project.

Cascades Exporter

3179521

Using the 9-slice tool in Photoshop can cause window margins to decrease in size unexpectedly.

Looking for beta 1 release notes?

You can find the release notes for the last beta release on this page.

  1. 1. Choose your focus

    This is the focus controller. Use this controller to choose your primary development approach (Cascades or Core).

    By selecting a focus, you get to decide what content should be front and center on the site.

  2. 2. Download the tools

    Before you start developing, you'll need to visit the Downloads tab. Here you'll find downloads for the BlackBerry 10 Native SDK, BlackBerry 10 Device Simulator, and some other useful tools.

  3. 3. Try the sample apps

    Now featuring a filter control, the Sample apps tab allows you to search for samples by name or by feature.

    Select either the Core or Cascades check boxes to display the samples relevant to your focus.

  4. 4. Educate yourself

    The Documentation tab contains tons of examples, tutorials, and best practices to guide you along the path towards building an awesome app.

    The documentation for your preferred focus always appears at the top of the left-hand navigation, but you can still access the rest of the documentation at the bottom.

  5. 5. Start developing

    The Reference tab is where you'll find essential details about how to use our APIs.

    You can use the left-hand navigation to choose how you would like to browse the reference: by module, by topic, or alphabetically. If you have an idea of what you are looking for, start typing it in the Filter box.