Kuix Changelog

Version 1.1.0 (2009-02-10)

  • Bug fix : avoid the bug when setting a very small value in Gauge
  • Bug fix : avoid a NullPointerException when define null border multi color
  • Bug fix : avoid lack of clean up in Menu widget when calling the removeAll() method
  • Bug fix : avoid TextField tooltip style inheritance problem
  • Bug fix : '/' character are no more ignored while CSS parse
  • Bug fix : action parameters can now contains space characters
  • Bug fix : in style cache

  • The Tablelayout was rewrited to use correctly the weight values

    • weight style property not need fixed-point integer values (ie. 0.5 for 50%)
  • Remove all deprecated methods/functions

  • Remove all static method in KuixConverter. Use Kuix.getConverter() instead.
  • Remove the ScrollPane useMarkers attribute. This notion is now manged automaticaly
  • Replace focusedwidget keyword detection in Kuix.parseMethod() function by a default focusedwidget read only attribute on all widget. Example : onAction="doMyAction(#myRootWidgetId.focusedwidget)

  • Add a new Jad attribute : KUIX-Deskop-Bounds to customize the desktop size and position (the value is something like : x,y,w,h)

  • Add widget path capabilities in Kuix.parseMethod(..) function. It's now possible to do :
  • Add KuixCanvas.addUnpaintableWidget(Widget widget), KuixCanvas.removeUnpaintableWidget(Widget widget)and KuixCanvas.clearUnpaintableWidgets() methods to mask region of display from Kuix repaint process.

  • Add a new transform attribute to the Picture widget to be able to apply rot and mirror transform on the source image

  • Add a new autoscroll attribute to the ScrollPane widget. The autoScroll attribute force the scroll position to the max value each time the {@link ScrollPane} content change or is invalidated.
  • Add a new editonallkeys attribute to the TextField widget. The editOnAllKeys attribute define if the J2ME native edit dialog is opened when any valid key is hit when the widget has the focus.
  • Add a new title attribute to the Choice widget. The title is used as title of the choice screen.
  • Picture src attribute accept now clipped image like url(x,y,width,height,transform) in css file

  • Add a new grayed-color style property on all widget used when the is displayed as popup.

  • StyleProperty now convert its value (Color, Margin, Layout, ...) only on first use to save some memory

  • The PopupBox widget has been completly rewrited. It works now more than a Screen widget with a BottomBar were buttons are placed.

    • A popupBox can now be defined from an XML definition like <popupBox> My content here <popupBoxFirstMenuItem>Ok</popupBoxFirstMenuItem> </popupBox>
    • new Kuix.showPopupBox(InputStream, Dataprovider) and Kuix.showPopupBox(String, Dataprovider)
    • new Kuix.customizeAlertLabels(ByteArrayInputStream, ByteArrayInputStream, ByteArrayInputStream, ByteArrayInputStream) to customize alert labels with special rendrers (XML input streams) (Ok, cancel, yes, no).
    • new Kuix.customizeScreenMenuLabels(Widget, Widget) to customize screen menu labels with special rendrers (XML input streams) (select and cancel).

Version 1.0.1 (2008-10-01)

  • Bug fix : avoid the OutOfMemoryException while closing a MenuPopup
  • Bug fix : fix some detection problem on Motorola phones
  • Bug fix : FlowLayout and StaticLayout size computation problem
  • Bug fix : Avoid a bug on DataBinding on TabFolderDefaultTabItem when invoke removeAllItems() method

  • Add Blackberry platform detection support and Soft keys emulation through action menu.

  • Add a processDebugInfosKeyEvent() method to KuixMIDlet to be able to customize debug infos key event action. By default it displays Kuix debug infos on the screen.

  • Add KuixMIDlet.fatal(String) and KuixMIDlet.fatal(String, Throwable) methods to display fatal error LCDUI alert messages.
  • Add default kuix actions available in xml actions (like onAction="...") :
    • !exit : exits the application by calling KuixMIDlet.getDefault().destroyImpl()
  • Add onselect and onunselect method attribute on CheckBox, RadioButton and TabItemButton.
  • Add animation capabilities on Picture accessible from new attributes (frameWidth, frameHeight, frameSequence, frameDuration).
  • Add "Multi" DataProvider capabilities. A DataProvider can now be a slave of an other, to be able to load a Screen with more thant one data model.
  • Add backwardTabKey and forwardTabKey attribute on TabFilder widget to be able to change the default left and right keys of tab navigation.
  • Add multi border-color capabilities on widgets. You can now set a different color for the 4 borders.
  • Add focusedwidget keyword detection in Kuix.parseMethod() function. It is now, for example, possible to retrieve the focused widget in onAction="doMyAction(focusedwidget)".

  • Add a new KuixInitializer interface which KuixMIDlet implements to be able to use Kuix engine without creating a KuixMIDlet. @see org.kalmeo.kuix.core.KuixInitializer javadoc comment for further informations.

  • Add Kuix.loadMenuContent(Menu, String, DataProvider) and Kuix.loadMenuContent(Menu, InputStream, DataProvider) methods to reload menu content on the fly.

  • Add a new parameter (mergeRootWidget) to the Kuix.loadXml(Widget rootWidget, InputStream inputStream, DataProvider dataProvider, boolean append, boolean mergeRootWidget) method to be able to control the root merging.
  • Kuix.loadWidget(...) functions now return the real loaded XML root widget.

  • Remove unuseful List.newItemWidgetInstance(DataProvider item) method. Dynamic list can now be any kind of widget.

  • Remove unuseful Widget.drawBorder(...) and Widget.drawBackground(...) methods.
  • Remove unuseful MenuItem.hideMenuTree() method

  • Visible attribute on widgets now hide completly the widget and its children and revalidate the layout on change.

  • Default "Please select" text is displayed when a Choice has no selected radioButton.

  • Methods refactoring :

    • Kuix.extractStyleSheets(...) has been moved to KuixConverter.convertStyleSheets(...)
    • Widget.bringToBack(...) become Widget.sendToBack(...)
    • Widget.getBorderColors(...) now returns a Color[] (array length is 4)
    • Widget.getBorderImages(...) become Widget.getBorderImage(...) to be conform to the style property name.
    • Widget.getBorderAlignments(...) become Widget.getBorderAlign(...) to be conform to the style property name.
    • Widget.getBackgroundAlignment(...) become Widget.getBackgroundAlign(...) to be conform to the style property name.
    • KuixMIDlet.getCanvas() is now deprecated and replaced by Kuix.getCanvas()
    • KuixMIDlet.showPopupBox(...) is now deprecated and replaced by Kuix.showPopupBox(...)
    • KuixMIDlet.alert(...) are now deprecated and replaced by Kuix.alert(...)
  • Widget tags refactoring :

    • tabbutton become tabitembutton and is an internal widget of tabitem

Version 1.0.0 (2008-07-25)

  • This release need kutil 1.0.1

  • Bug fix : avoid a NoClassDefFoundException on SonyEricsson

  • Bug fix : avoid an exception when loading a CCS file with comment on SonyEricsson
  • Bug fix : avoid TextFiled with password contraints edition crash
  • Bug fix : avoid a memory leak when displaying a lot of Screens that contain menus
  • Bug fix : avoid a style inheritance bug when a widget was included in a same tag widget.
  • Bug fix : avoid invisible button bug on Error alert

  • Improve render speed by adding a cache system on style values

  • Add #inc (include) statement capabilities in XML files.

    • syntax : #inc(<absolute file path>)
    • between two widget tags, include file's content is parsed as a normal xml file and add content to current widget.
    • between two attribute tags (name starts with '_'), include file's content is convert to string as attribute value.
  • Add a new Choice widget (it extends the RadioGroup capabilities to be able to use it as comboBox)
    • Usage : <choice><choiceRadioGroup><radioButton>Choice1</radioButton><radioButton>Choice2</radioButton></choiceRadioGroup></choice>
  • Add filter capabilities to DataProvider
  • Add a Kuix.loadWidget(String, Class, DataProvider) method
  • Add a getter on the CheckBox's selected attribute. Caution, a boolean string representation is returned and not a real boolean. Use org.kalmeo.util.BooleanUtil.parseBoolean(String) method to convert it.
  • Add a focused attribute on AbstractFocusableWidget
  • Add title and maxsize attribute on TextField
  • Add FocusManager.removeShortcutHandler(Widget widget) method
  • Add a border-align style property
  • Add a min-size style property
  • Add multi bg-image capabilities (e.g. container { bg-image: url(img1.png)|url(img2.png) }
  • Add barsontop attribute on Screen widget. It defines if topBar and bottomBar are displayed on top of screen's content.
  • Add a Widget.getInheritedTag() method that permit for a widget to have it's own tag and inherit all style properties from and other tag. In this case choiceScreen can now inherit style properties from screen.

  • Change Kuix.parseMethod signature from Kuix.parseMethod(String data, Widget owner, Desktop desktop) to Kuix.parseMethod(String data, Widget owner)

  • Change Widget.clearCachedStyle() signature to Widget.clearCachedStyle(boolean propagateToChildren)

  • List changes :

    • Remove the ListItem restriction on List
    • addItem, RemoveItem methods now returns Widget istead of ListItem
  • Menu / PopupMenu changes :

    • PopupMenu now extends List, to be able to build PopupMenu content from a DataProvider like lists (create only MenuItem, not Menu).
    • MenuItem now extends ListItem.
    • Right key shortcut to open a submenu now search forward and backward submenus.
  • TabFolder changes :

    • TabFolder now extends List, to be able to build child TabItems from a DataProvider like lists (with renderer).
    • Change TabFolder's defaultTabItem as an internal widget. The XML syntax doesn't change.
    • Use TabItem.setSelected(boolean) to select a tabItem on widget loading.
    • TabButtonsContainer now extends an horizontal scrollContainer
  • RadioGroup changes :

    • RadioGroup now extends List, to be able to build child RadioButtons from a DataProvider like lists (with renderer).
  • ScrollPane changes :

    • ScrollPane can be horizontal
    • You can hide scrollBar through the showScrollBar attribute
    • You can now access to the ScrollPaneContainer inner widget
  • Picture changes:

    • Picture now accept javax.microedition.lcdui.Image input image.
  • Class refactoring :

    • AbstractFocusableWidget become FocusableWidget
    • AbstractActionWidget become ActionWidget
    • AbstractTextWidget become TextWidget
  • Method refactoring :

    • DataProvider.getValue(String property) is now final. Override DataProvider.getUserDefinedValue(String property) instead.
    • Widget.cleanUpAll() become Widget.cleanUpChildren().
    • Picture.setImageData(byte[]) become Picture.setImage(Image).
  • Style properties refactoring :

    • border-images become border-image
  • Widget tags refactoring :

    • scrollbar's bar become scrollbarbar

    • scrollcontainer become scrollpane

    • scrollcontainercontainer become scrollpanecontainer

    • screen's topbar become screentopbar

    • screen's bottombar become screenbottombar

    • choice's screen become choicescreen

    • choice's radiobutton become choiceradiobutton

    • tabbuttonscontainer become tabfolderbuttonscontainer

    • defaulttabitem become tabfolderdefaulttabitem
    • tabitemcontainer become tabfoldercontainer

    • popupmenu become menupopup

Version 1.0.0RC3 (2008-05-27)

  • This release need kutil 1.0.0

  • Bug fix : Text widget new respects margin to draw text value

  • Bug fix : Remove a NullPointerException in TextField.getDisplayedText() when text was null
  • Bug fix : Repaint region is now correctly computed in ScrollContainer widget

  • Add Screen.setCurrent() method to set the screen as current Desktop screen

  • Add animated transitions (like slide or fade) on screen. The transition is executed when a screen appear. You can implements your own transitions. Screen's transition is defined via CSS with a new transition style property.
  • Add "cleanUpWhenRemoved" attribute on Screen widget. If you set this attribute to true the Screen.cleanUp() method is called when the screen is removed frome the widget tree. Useful only if the screen need to be destroy after.

  • Switch from protected to public : Widget.paint(...), Widget.paintBackground(...), Widget.paintBorder(...), Widget.paintImpl(...) methods

  • Remove the Kuix.getI18nErrorMessage() method.

  • Focus navigation was rewrited :

    • Widget.getNextFocus(...) and Widget.getPreviousFocus(...) was replaced by Widget.getOtherFocus(...)
    • New smart focus navigation
  • Screen menus now switch soft keys to "Select" (same action as FIRE) and "Cancel" (close the popupMenu) when a popupMenu is opened
    • You can now choice if the order of firstMenu and secondMenu (left or right) by using the 'firstIsLeft="true"' attribute on a Screen widget
    • You can customize "Select" and "Cancel" default texts by adding respectively SELECT and CANCEL key in i18n files

Version 1.0.0RC2 (2008-05-06)

  • Bug fix : TextField 'enabled' attribute enabled or disabled the TextField Widget
  • Bug fix : KuixMIDlet.isFullScreen() is now called when creating the KuixCanvas
  • Bug fix : avoid endless loop while using 'focusLoop="true"' on an empty list

  • Optimize redraw process by invalidate only specific screen region through Widget.invalidateAppearance() method

  • Startup locale could be set with JAD parameter : 'KUIX-Locale'
  • Widget.isFocused() and Widget.isFocusable() is now public
  • 'setFocusable(false)' now unfocused the widget
  • org.kalmeo.widget.Screen now extends Widget
  • Widget's shortcuts can now call independant actions. (eg <button onAction="myActionZero" shortcuts="0|#=myActionPound|*=myActionStar"/>)
  • Add slide text animation en Text widget if text content is bigger than widget width
  • Add Screen.getTopBar() and Screen.getBottomBar() to retrieve topBar and bottomBar instances
  • Remove Screen.setFirstMenu() and Screen.setSecondMenu() methods. Use Screen.getFirstMenu() or Screen.getSecondMenu() to create/retrieve menus instances.
  • org.kalmeo.kuix.widget.SystemMenu class has been moved and renamed as Screen internal class : ScreenMenu
  • Internals widgets (like Screen's TopBar / BottomBar) could be accesed via xml like other widgets (eg '<screen><topbar>Foo</topbar></screen>')

Version 1.0.0RC1 (2008-04-25)

  • Kuix is now released under GPL license
  • Bug fix : RadioGroup value could be set before adding RadioButton to defined the default selected RadioButton

  • Optimize memory use for drawing

  • Optimize screen size change processing
  • Worker tasks are no more removed while the application is paused
  • Add public access to FocusManager.setLoop() and FocusManager.isLoop()
  • Add 'focusLoop' attribute to Screen widget to enabled or disabled loop parameter on screen's focus manager.
  • Add repaintNextFrame(x, y, width, height) to repaint a specific region of the screen
  • Add 'invalidateAppearance' method on Widget class to repaint only the widget screen region
  • It's now possible to change the "Debug Infos key" (@see KuixCanvas.setDebugInfosKey()) from JAD file through 'KUIX-Debug-Infos-Key' paramter

Version 0.9.1 (2008-04-11)

  • Startup optimzations : loading capabilities
  • KuixCanvas is now final and could not be overrided
  • 'desktop' parameter in 'initDesktopStyles' method has been removed
  • 'initDesktopStyles' and 'initDesktopContent' have been moved to KuixMIDlet
  • 'onStart' has been changed to 'onStarted' and moved to KuixMIDlet
  • 'onResume' has been changed to 'onResumed' and moved to KuixMIDlet
  • 'onPause' has been moved to KuixMIDlet
  • 'onDestroy' has been moved to KuixMIDlet
  • 'getInitializationBackgroundColor', 'getInitializationMessageColor', 'getInitializationMessage', 'getInitializationImageFile' method were added on KuixMIDlet to customize loading screen
  • It is now possible to hide style by setting 'none'
  • Rename 'ProgressBar' widget to 'Gauge' and add interactive capatibilities on it
  • Add 'onChange' on 'Gauge' widget call only if it is focusable
  • Move 'enable' capabilities from 'AbstractActionWidget' to 'AbstractFocusableWidget'
  • Add custom widget capabilities in xml files. Use this syntax <MyWidget package="com.mypackage" /> to load com.mypackage.MyWidget class. This class need to extend org.kalmeo.kuix.widget.Widget. This syntax is case sensitive.
  • getTag() on new widgets created by "new Widget()" or all similar constructors returns now "widget" and not null.

Version 0.9 (2008-03-12)

  • First public release