qooxdoo 0.8-beta1 (2008-08-01)
GUI Toolkit
Core
- Completely refactored and reworked implementation for supporting drag&drop, including elegant data exchange. It is the first time during 0.8 development that it nicely supports drag&drop. The new API was closely modeled according to the WHATWG specification of HTML5.
- Support for focus roots is now complete. Focus roots keep the focus within the currently active pane or window while pressing the TAB key. Keyboard users will like this feature (that was also available in 0.7)
- Added
tabFocussupport to form fields to make them select all text when reaching the field using the TAB key.
- Added support for global cursors. These are now used during drag sessions, window resize or window move as well as by the new drag&drop layer.
- New placement utility to position widgets relative to each other, to DOM event coordinates or to classical DOM nodes. This new feature is used by many widgets, e.g. SelectBox, Menu, ToolTip, Popup, etc., and reduces complexity and code size significantly.
- Added methods
setDomLeft(),setDomTop()andsetDomPosition()to all widgets as an easily usable public API to control widget position explicitly. This is particularly handy when dragging widgets around (e.g. Slider, Window, ...). - Added methods
getContainerLocation()andgetContentLocation()to all widgets as a convenient way to detect the location of a widget as seen by the document (computed coordinates). This is particularly useful to align widgets (e.g. Popup, Menu, ...) to each other. - Added
keepActivefeature toqx.ui.core.Widgetto allow widgets to be non-activateable, what means that they don’t take away activation from the current widget. For instance this is used by the menu popups (keeping the opening menu button active).
- Experimental support for separators was introduced. Separators are currently supported by VBox and HBox layouts and render a configureable element between every child (but not at the ends). This is an alternative to assigning each child a decoration
border-leftor similar. This new feature is in no way final regarding API or feature set, but it is expected to become one of those handy features that make constructing an UI very easy. It has grown from some testing code and is already quite usable, despite any potential modifications in future releases.
- Fixed an ugly IE specific issue, where elements, that are excluded at the same moment (using display=none) while being cascaded into each other, are not correctly updated when shown again afterwards. This was solved by a work-around for IE in
qx.html.Element, so now this fixes all such issues at a central location. - Major improvements were made to the fallback handling when trying to find a valid target for keyboard events. With the new version lost keyboard events are history (hopefully).
- Various disposer fixes were made. There are still some issues, but a lot of them are fixed in this version.
- Fixed missing resolve call when resetting decorators.
- Fixed appearance of outline border on initial click/focus of a widget, quite an ugly effect.
- Added method
getApplicationRoot()to all widgets to have a direct access to the application’s root widget.
- Fixed issues with Firefox text selection, noticed while implementing drag&drop. The new version successfully resolves all known issues where text was selected unintentionally. The major issue with this was that when such a unintended selection existed, Firefox went into some native drag mode in which it set the target of all mouse events to the element originally clicked onto.
- Selection handling (e.g. in List, Tree, ...) was improved to keep the current selection when dragging the selection to another widget. Clicking on an already selected range keeps the selection during
mousedown, but clears it whenmouseupis fired. - Added a lot of missing
stopPropagation()calls to prevent an event to bubble up the parent chain when it is already being processed by the current one. Previously this negatively affected all types of buttons.
- Some widget core features were improved to reduce memory consumption
Table
- The table has been ported from 0.7
- The table API, that means all methods not inherited from qx.core.Widget, has been kept untouched
- All features of the old table are still supported
Menu / Tooltips / Popups
- New menu system in place (complete rewrite with some borrowed ideas from the 0.7 implementation) with support for all kind of openers like normal menu buttons, menu bar buttons and split buttons. Major improvements to timer interval handling. Compared to 0.7.x with reduced memory consumption and improved stability and flexibility.
- Major improvements to ToolTip and Popup. Both are now API documentation-complete as well. Usage of timers and intervals was reduced. This leads to reduced memory consumption and improved responsiveness.
- Fixed ugly offset (of two pixels) in location detection (
qx.bom.element.Location) when using IE in some specific doctype combinations. Menus and popups of SelectBoxes are now aligned pixel-perfect in IE as well. - All
Popupinstances are now automatically added to the application root and are excluded by default. They behave identically to ToolTips, Menus and Windows now. - The tooltip classes were moved into the namespace
qx.ui.tooltip. Both, popup and tooltip classes got shorter names.
Forms
- Slider has got some great improvements in reacting on mouse clicks. It should now behave identical to MS Windows.
- Added a menu button widget to
qx.ui.form. This allows menus to be used much easier outside a classical toolbar. - Added new SplitButton widget as a combination of a classical Button with a MenuButton. This widget is often used as a history navigation button, commonly seen in web browsers.
- The default size of the
TextAreawidget was increased to a more common size. - More finishing touches to Spinner and SelectBox
Window / Resizer
- The
MResizablemixin now only supports a booleanresizableproperty. The propertiesresizableNorth,resizableWest,resizableSouthandresizableEastwere removed in accordance with the original implementor. There was not seen a good reason for keeping them. Please get back to us if you have a strong use case for this feature. - The
translucentmove and resize features (via API) were removed. These features should better be realized by appearance properties. The propertiesresizeMethodandmoveMethodwhere replaced with boolean propertiesuseResizeFrameoruseMoveFrameas these are functional, whereas thetranslucentvalues are rather visual. - The move feature originally implemented in the
Windowclass is now located in the to theMMovablemixin and can be added to any widget now. - The
Resizerwidget is now a container and can be found underqx.ui.container. - Splitted out implementation for moveable widgets into the
MMoveablemixin inqx.ui.core. This reduces complexity and code size of theqx.ui.window.Windowclass. - Minor improvements to the window implementation to correctly support maximize/restore.
Controls
- The
DateChooserwidget has been ported and moved from theqx.ui.componentpackage to a newqx.ui.contolpackage. - The
DateChooserButtonwidget has been replaced with a new widget calledDateFieldwhich can be found in the form package atqx.ui.form.dateField. The new widget is more like aComboBoxwidget with a calender as popup. - Port of the
ColorSelectorwidget is almost done. It is not finished yet, and needs some more work and polishing.
Text Selection
- Implemented the first basic part of the low-level text selection API
- Added text selection methods to high level widgets like
TextField,TextAreaandComboBox - Fix the
getValue()method of the ComboBox
Themes
- Continued work on the Modern Theme
- Added inverted arrows to qooxdoo’s decoration themes. This improves appearance of menus when buttons are hovered using a dark background color.
- Added Modern appearance for TabView
Miscellaneous
- Added support for first/last tab states to the TabView. This allows us to style overlapping TabButtons which is needed by most modern screen designs.
- Decouple layout system from the queue manager. This allows us to reuse layout managers in non widget code. It is used e.g. in the table’s resize column manager.
- Text inside HTMLEmbed can be selected now
- Iframe’s property “source” is now nullable
- Fixed #1023: TabView should use Stack container
- Fixed #1053: Toolbar page in showcase has errors
- Added support for the methods
scrollToandscrollByto theSlideBarwidget (used by the TabView for example)
Framework
- Make multiple inclusion of a mixin a warning and not an error
- Fixed #786: qx.client.Timer.once should have a return value
- Fixed #871: complete i18n support
- always include the default locale “C” into any application
- Fixed #1109: Remove @type declarations from API doc comments
- Fixed
qx.dev.ObjectSummary.getInfo - Fixed Logger’s
clearmethod
- Add supported for cloning and serialization to qooxdoo objects, layout items and widgets. These features are still in testing phase.
- Improved usage of document fragments in
qx.html.Element(qooxdoo’s low-level DOM element layer), not using them when inserting less than three elements.
qx.Classgot a new methodgetProperties()to get a list of all supported properties- Fixed detection of iPhone’s Mobile Safari browser
- Fixed deregistration of events. Previously the deregistration at the handler happend even if the removed listener was not the last one. This was the source of some crazy effects during development of drag&drop and may have affected other parts as well.
- Fixed an event system issue where
preventDefault()was not correctly propagated from the widget event to the low-level event.
Tool Chain
- Removal of Makefiles in standard applications, skeleton, quickstart
Build commands (’source’, ‘build’) now only depend on Python - Configuration files: Support for new keys “include” and “block” in top-level “include” maps, to select/reject certain jobs during imports
- Each application now contains a drop-in replacement for the old ‘make’ command named ‘generate.py’
- Removal of dependency to ‘wget’ command; ‘cache://’ manifest files are downloaded with standard Python modules, but version check is still disabled (due to frequent Sourceforge ViewVC availability during the last two weeks)
- Handling of default locale has been fixed
- Handling of relative paths in configuration files has been overhauled
- Fixed #755: added parsing of accessors into Map and Array literals
- Updated ‘frontend/tool/data/config/example.json’ config file
- Various adaptions to ‘frontend/Makefile’ (shouldn’t affect end users, but is still used for maintaining and release management)
Applications
API Viewer
- API Viewer was ported to 0.8.
- Search feature now uses Table instead of the deprecated ListView
Demo Browser
- Demo Browser was ported to 0.8.
- Demos can be switched between Modern and Classic styling
Feed Reader
- Feedreader works with 0.8.again
Showcase
- The showcase application was removed, deemed not appropriate for all the new glory of the 0.8 GUI toolkit. The
widgetsection of the demo browser sports better examples and better documented and more modern code. Some time after 0.8 there should be something like a showcase application again, but currently work concentrates on finishing 0.8, including all the nice samples for testing and demonstration in demobrowser.
