The Big Picture: ---------------- Release 0.1: Basic functionality and main API Release 0.2: Refactoring, menus, full event set, graphics, native dialogs; more complete functionality Release 0.3: Less API change, focus on robustness and stability Remaining objectives for version 0.1: ------------------------------------- * Fix remaining bugs and make sure the tests work in all backends * Make sure all backends convert attribute values so they are acceptable to the backend widgets * All backends should now use modify() rather than setting attributes directly. (ListBox.selection needs some rewriting here) * Decide whether programmatic changes to widgets (e.g. setting the selection of a ListBox) should generate the same events as when these changes are caused by the user * Make passive attributes (like text selection) active through basic event handling (Move to 0.2?) * Make send(foo) send out the default event type (e.g. 'click') in addition to 'default', just as the symmetric case (e.g. send(btn, 'click') will send a 'default' event). Objectives for version 0.2: --------------------------- * Refactor to reduce code duplication (by moving things to the core), simplify the backend API, and reduce coupling between core and backends (having only the bare necessities actually _in_ the backends). Reevaluate the _ensure_foo strategy? Methods like _tk_clicked, which contain no backend-specific code, should be lifted to the front-end, and linked to event triggers in the backend's _ensure_events. Should backends access frontend attributes through their internal or external names? A standard should be decided on. All methods named _refresh_foo should refer to attributes named foo. Most _ensure_foo methods should be renamed to _refresh_foo, though some (like _ensure_created) should be given some other names (or left alone), and some (like _ensure_state) should be renamed to reflect the attribute they are refreshing (e.g. _refresh_on). * Fix the relationship btw. size, position, and geometry wrt. MVC etc. This should be done by making size, position, and geometry ordinary attributes, and synchronise them with x, y, width, and height through refresh(). * Adjust defaults, and improve window staggering (needs a mechanism to find the top window) * Add support for __delattr__ (in the form of _del_foobar) in Mixins.Attrib, and make sure it's used where applicable in the various modules. * Remove some redundante _ensure_foo calls, due to update() * Add a dialog class * Add support for native dialogs (e.g. file dialogs) * Add menus (including popup menus?) * Add full event system, based on messaging mechanism * Add a grid-based layout mechanism (May require minimum_size and preferred_size properties) * Add a Canvas widget for full graphics support * Add an optional status bar to Window * Create a Container mixin for add() and remove(), and either a contents or items attribute. (With items it could be used with ListBox too, giving the possibility of adding and removing items...) * Change Assignee to SmartValue, which also has support for Container objects. * Change add() signature? * Add support for complex widgets ("megawidgets") with default implementations in the basic Anygui API (in the vein of the piddle/sping API) In other words, give a standardised way of integrating backend-specific features into Anygui programs. * Add tree widget and notebook widget * Add a combobox with a default implementation in terms of simpler components * Add "applets" -- e.g. for the Gnope panel, KDE kpanel, WindowMaker dock, MacOS menu, Windows tray, etc. with a small window as fallback? * Add font, alignment, and colour (etc.) attributes to all relevant components. * Move main event loop to a separate GUI thread? Longer term goals: ------------------ * Add table support with default implementation * Add tabbed pane support with default implementation * Add more alignment options etc. to labels * Add advanced support for default, including default "shrink-wrapping" of windows and frames that aren't given an explicit size; will require a "preferred size" for all widgets, based on font sizes etc. * Support accessibility standards * Add support for styled text * Add support for importing xml files through xslt? (E.g. XUL) * Add instant model update for text widgets, not just on "focus lost"? * Make Anygui more thread-safe * Add constructive area geometry to Canvas * Add toolbars (button bars) with menu shortcuts etc. Smaller issues: --------------- * Add support for borders? * Add a linkMethods (or something) function for callback support? * Add more distribution types (e.g. windows installers, rpms etc.)