Saturday, August 16, 2008
The week in qooxdoo (2008-08-15)
We're gearing up for the final release of 0.8!
Releases
Plans are to have a first release candidate of qooxdoo 0.8 available during the week, with the final release to be shipped this August. As we are approaching those next milestones, we really appreciate your feedback. Please do not hesitate to file bug reports.
Framework
Image Handling
Working with images in 0.8 has arrived at a very powerful level. For instance, a new low-level class has been added to create images for decoration purposes that takes care of all the images combination (a.k.a image slices), alpha transparent PNGs, various new repeat modes like scale-x or scale-y, etc. Full support for alpha transparent PNGs in IE6 in decorators and icons is included. Images in qooxdoo can now be scaled to the size given explicitly. This auto-scaling is disabled by default, but can easily be enabled with the boolean property "scale".
Hints are being output during app development when using images which qualify as good candidates for being combined. This is another smart helper to support the developer in creating low-latency applications. What such a combined image could look like? See some combined radio buttons and check boxes (taken from the List demo).
Polishing
A permanent task towards the 0.8 release. A few highlights: A lot of decoration images of the "Modern" theme are now combined for better application performance and reduced latency at load time. Many widget demos have got a lot of love. Code should be more concise, functionality be fixed where needed. API documentation is more complete, particularly by adding a lot of new class descriptions which were missing previously. To mention a few widgets explicitly that improved during the week: SelectBox, ComboBox, GroupBox, Spinner, Splitpane
More improvements
- Decorators are now fully compatible to both box models and therefore are independent of the doctype.
- Added support for centering Atoms. For instance this is used by buttons that center the label when more space is available (e.g. typical "OK" buttons).
- Property inheritance has been modified a bit to convert the "inherit" value automatically to "null". Previously, apply routines and getters may have received a string value "inherit", which caused some problems and made code more complex than needed in some cases.
- Performance and memory usage tweaks for Widget and qx.html.Element, being core components of any qooxdoo GUI application.
- Moved widget specific layout managers from qx.ui.layout to more specific namespaces (e.g. menu, splitpane, ...).
- Refactored and cleaned up static resources of qooxdoo, now only including blank.gif and blank.html, which are theme-independent and used by more than one class.
Unit Testing
All framework test classes have been moved from their old name space under testrunner.test to the framework class hierarchy itself. They dwell now under qx.test.
Applications
Apiviewer and Testrunner have been revamped to include a smaller amount of application data (class documentation and test classes, respectively) in their local builds. This makes development of the apps easier. Application data for the Apiviewer now only encompasses the Apiviewer's own classes and the framework classes they inherit from. The Testrunner only loads a small demo unit test class, which is maintained locally. Formerly, both apps included larger amounts of data pertaining to the framework library. This data is now available under the framework itself (see further down).
Tool chain
Downloads
We reviewed our release deliverables and refactored the kits to include just one: an enhanced SDK.
The build kit which contained pre-build applications and the quickstart kit which essentially contained an all-encompassing qooxdoo framework library were seen as of little practical value. The applications are easily evaluated through their online versions, and the new build system can create custom libraries to anybody's content. A pre-built package of the low-level layer is expected for a future release, though, that will be an alternative to other DOM-oriented libraries like Prototype or jQuery.
The many download variants occasionally stirred confusion as to which kit to choose. The reduction to one makes it trivial to pick the right kit to download.
The new SDK mirrors the new repository structure and will include a pre-build version of the Apiviewer, including all the framework classes, so people have a reference immediately at hand. The other applications have to be built first, as usual. Apiviewer and Testrunner components have been stripped down to contain only limited application data for their local development. They previously used framework data and this data is now re-created running the api and test jobs in the framework directly. The ensuing SDK will be around 20MB download size which still seems feasible for an enhanced framework package.
Skeleton and Application Creation
A script has been added to our tool chain that will create a new application from the Skeleton for you. If you invoke tool/bin/create-application.py with a few parameters, a skeleton will be copied to the desired location with all settings already adapted. You can immediately create source and build versions of it, and expand it into your envisioned application.
To this end, the skeleton will be included as source tree in future SDK packages. It is not intended to be usable in place though, since many files are only templates and need expansion through the create-application script.
We hope this will ease the process of getting up to speed when creating custom applications.
Generator
The generic job target test has been implemented and can be used by Skeleton-based applications (with a source-oriented test-source shortly to follow). Running the test job in an application will create an application-specific Testrunner application in a local test folder, which allows you to run application-specific unit test classes. An example is the application of this job to the qooxdoo framework itself.
Locales processing has been revamped. An independent translate key will re-create your .po files at any time you invoke it. A locales key in the config controls which locales will be processed. New translation files are created on the fly, but old files pretaining to a locale not listed are left intact. The code generating jobs compile-source/compile-dist also evaluate a locales key, and the data is included in the generated code accordingly. The old localize config key has been removed.
Contributions
qooxdoo-contrib is the framework's infrastructure for contributions as well as experimental features. It allows for easy and convenient setup, development, maintenance and release management of contributed sub projects. It is constantly being improved, so you might want to check-out the currently available contributions.
Most of the contributions are not labeled "ready for 0.8", yet. Some of them are rather independent of the mostly GUI-related changes of 0.8, so they could rather easily be adjusted. Others, like additional widgets, will of course need to be migrated. Don't expect many authors and maintainers to start looking into migration before a final 0.8 is available and/or they actually start to migrate their custom applications that involve their contributions.
Given the recent and also the anticipated future improvements (including better integration with the framework and better outside visibility and promotion), qooxdoo-contrib is a key ingredient for an ongoing healthy and flexible growth of the project. If you consider adding a new contribution or improving an existing one, check out the preliminary documentation, and don't hesitate to get in touch if you have any questions or suggestions.
Outlook
Again a very productive week is over. Stay tuned for the upcoming first release candidate of qooxdoo 0.8. ![]()

