Development: Todo List

From WxWiki
Revision as of 06:48, 25 December 2008 by VZ (talk | contribs) (→‎Improvements to Existing Code: Add generic wxListCtrl refactoring to use wxHeaderCtrl item)
Jump to navigation Jump to search

This is a collection of the various things which it would be nice to include in wxWidgets. They may or may not be scheduled or funded. If you're interested in helping with wxWidgets development, one of the small projects below could be a great way to join the team!

New Development

High priority

  • Provide a possibility to use individual wxUniv controls from the native ports.
  • Give wxFileSystem a better API and further integrate it with wxWidgets (currently only wxHtml uses it but it could be also used by many other classes)
  • wxHTML2, using native HTML renderers where available.
  • Add image support to wxButton (Jamie Gadd has the patch for wxMSW, with a bit work it should be extended to others ports) merging wxBitmapButton with wxButton, see this thread for more information.
  • Provide character classification and string case conversion, sorting and comparison functions working on full Unicode range and not just on characters in the current locale (either using native API of each platform or ICU as discussed in this thread).
  • Implement wxMaskedTextCtrl in C++ (it's already available in wxPython)
  • STLization: this involves providing optional wxString implementation using std::string and doing the same for all our containers with the exception of wxHashMap which should simply be rewritten using templates (but keeping the old version for backwards compatibility -- ideally wx 3.0 would still be usable without templates, even if not all of its features would be available then)
  • Exceptions: we are not going to use exceptions in wxWidgets itself but our code should become exception safe. This is a very difficult task as it means that no resource allocations (including memory, files, whatever) should be done without using a smart pointer-like object to store the result as it is the only way to prevent resource leaks in presence of exceptions
  • Real RTTI: optionally use the real RTTI instead of wx emulation of it. Keep the current stuff for backwards compatibility. See also the XTI issue.
  • Use wxEventLoop in all builds: wxApp and wxDialog should use wxEventLoop objects (the exact class can be customized by user code by overriding some wxApp::CreateEventLoop()) instead of duplicating the same code
  • Remove wxCOMPATIBILITY: wxDEPRECATED() should be used with everything inside WXWIN_COMPATIBILITY_2_4. The stuff inside WXWIN_COMPATIBILITY_2_6 probably should not be deprecated (yet?) because this would give thousands of warnings for the existing code. Exception is api documented as obsolete in 2.6 release already.
  • Properties/Member-Metadata, 2-Step Init with virtual create
  • Change Idle Handling: Current Implementation is using too many CPU cycles
  • Loose Coupling Event-Source Event-Sink: kind of the NextStep/C# very performant coupling, exposing events via Metadata
  • Add Lazy Init of Eventtables

Medium priority

Low priority

  • Write wxConfig implementation using XML as backend:
    • portable wxXMLConfig for all platforms (there is a version doing it here and here but it duplicates too much of wxFileConfig code unfortunately)
    • wxApplePrefConfig for working with .pref files on Mac OS X
  • wxStaticBox: Hide the platform problems (GTK: 'children' must be siblings) in encapsulation in order to avoid problems on ports where the hierarchy must be 'correct'.
  • Standard menu and toolbar customization dialogs
  • Extend wxLocale to return more information, e.g. currency formatting, list separator, ...
  • Improve wxSpinCtrl to allow showing something else than just its value in the text field. This should be done by implementing support for wxSpinCtrlFormatter class which would have Format() and Parse() virtual methods which could be implemented by a user-defined class which the user coode would associate with the control and which would mediate the conversion between the value and the text field contents.
  • Fix alpha handling in wxIconBundle under MSW (see this thread)
  • Update the coding standards guide
  • Complete replacing TRUE/FALSE with true/false

Everything else

Most of the following items need to be discussed before being implemented.

  • Synchronisation API between mobile and desktop.
  • Extend and unify drag and drop handling (e.g. we need to specify multiple drop targets that can handle multiple formats).
  • Serial and parallel port support.
  • Modem and telephony support.
  • Improve accessibility support.
  • wxDC Support for point to char-position with text rendering

Other miscellaneous items to review:

  • wxDC Support for point to char-position with text rendering
  • wxLocale Extension (eg Currency)
  • wxStreams review
  • wxURL?
  • a way to tell wxWidgets to check for any non-portable usage, for a given set of platforms. Sometimes you want to be able to get away with non-portable usage, and sometimes not. This is probably way too time-consuming to implement.- In headers, don't silently omit contents if the features for this header is switched off. Instead, emit an error message.
  • Implement native tree view and colour dialog in wxGTK.
  • Better way to specify About, Preferences menu ids under wxMac.
  • Must be able to portably specify relaying out a frame after the toolbar has been destroyed or recreated. On wxMSW, this is done in ~wxToolBar. On wxGTK, in SetToolBar. In wxMac, not at all, but sending a wxSizeEvent will do it.
  • Need wxRect wxToolBar::GetToolRect(int id) or similar so we can align a popup menu with a toolbar button.
  • wxMac font selector dialog is the generic font selector - horrible.
  • No Append(wxArrayString&) for wxChoice and wxComboBox in wxGTK. Probably other functions too. Consider adding Insert to these classes, as per the patch on SF.
  • Add wxArrayString methods to wxTextValidator and any other class that needs them.
  • Add wxNotebook::GetTabRect or similar so we can estimate page size better in wxNotebookBase::CalcSizeFromPage.
  • Add function to clear all wxNotebook tabs without destroying the pages.
  • Add individual setters to wxScrollBar and other classes that use a combined setter.
  • Remove traces of old resource system from wxWizard.
  • Have wxDirCtrl as alias for wxGenericDirCtrl.
  • Allow instant reaction to left-up in a wxGrid cell (extend editor API) to work around bad checkbox behaviour (click, click, click, click away...) and reduce checkbox size on non-Windows platforms.
  • Add wxNotebook::HitTest for non-Windows platforms.
  • Implement rebar for all platforms. This will help us get closer to native look and feel, e.g. the gradient shadow on XP toolbars.

Platform Specific Todo Lists

wxCocoa

  • Classes that are still complete stubs: wxPen, wxRegion, wxIcon ,wxCursor, wxFont, wxFontEnumerator
  • Dynamically linked library
  • wxCocoa doesn't yet have enough implementation to compile to a dylib.

wxMac

  • Implement toggle buttons
  • Implement popup windows
  • Implement joystick support
  • Fix wxGetKeyState using HID and GetKeys and low memory keymap
  • Add sound manager part to wxSound and commit it as classic also
  • Focus rectangles are off on smaller text controls on 10.2 (10.3 also?)

wxMotif

General comment: see the following site for useful Motif widgets: ftp://ftp.x.org/contrib/widgets/motif

Also, grep for TODO comments in source.

High Priority:

  • Have a central/per app file for colour settings, with a wxWinapp to allow changing settings interactively.
  • Implementation of default event processing (i.e. passing on an interceptedevent such as OnChar to the system). Currently, such events are processed anyway, so for example intercepting left-click in a widget doesn't disable the default behaviour. See TODOs in window.cpp.
  • wxToolTip
  • Miscellaneous events.
  • Allow wxFrame and other widgets to have mouse event handlers.

Low Priority:

  • Painting a retained window could be optimized further (see wxWindow::DoPaint).
  • Visuals: how to select an appropriate one? See Thomas Runge's visual patch for 1.68 -- should be straightforward to port to 2.0.
  • Work out why XFreeFont in font.cpp produces a segv. This is currently commented out, which presumably causes a memory leak.
  • New wxHelp version: try using the XmHTML widget at http://www.xs4all.nl/~ripley/XmHTML/. We need to:
    • Make a minimal distribution under wx/src/xmhtml, just enough to compile the source.
    • Add XMHTML_C_SRC to src/motif/makefile.unx with the source files listed.
    • Make sure we can compile the sources, passing the correct flags for zlib/png compilation.
    • Make a wxHTMLWindow class from e.g. examples/example_2.c. Should probably make the cache and history facilities part of the class.
    • Add the driver code to src/motif/helphtml.cpp (a frame, toolbar, history list).
  • Drag and drop. Use a standard X drag and drop standard - see http://www.cco.caltech.edu/~jafl/xdnd/ or use Motif drag and drop as described here: http://www.motifzone.com/tmd/articles/DnD/dnd.html
  • Optimize colour management so we don't get clashes when e.g. Netscape is running. See: http://www.motifzone.com/tmd/articles/John_Cwikla/index.html
  • wxRCConfig (a config class using X .rc files). Could simply implement it in terms of current wxGet/WriteResource functions.
  • Miscellaneous classes e.g. wxJoystick (identical to GTK's one for Linux)
  • Work out why wxTextCtrl doesn't work as a stream buffer under gcc

wxUniversal

  • Renderers within native ports.

wxGTK

  • wxStaticBox: hide the platform problems (GTK: 'children' must be siblings) in encapsulation in order to avoid problems on ports where the hierarchy must be 'correct'.

Improvements to Existing Code

This page lists many of the classes/methods which are not implemented under all platforms. In addition, our bug tracker page has an almost unlimited supply of bugs to fix.

A list of improvements needed for wxWidgets documentation is maintained in the manual.

Refactoring

  • Use wxHeaderCtrl in the generic wxListCtrl implementation to avoid code duplication and to add more features to wxListCtrl (notably columns reordering via drag and drop).

Architecture

  • We aim to arrive at a lazy initialization of modules only when they are first needed. Dependency information between modules is needed. Dynamic Plug-In loading and unloading must be compatible with that.

Printing

  • Page preflighting capabilities in order to determine number of pages.
  • Preview UI enhancement.

Infrastructure

  • Set up a machine to automatically spin at least some of the releases using a specification of the type of release, tag to use, etc.
  • Make building Debian packages less painful, in particular try to make it possible to build them in the source tree instead of current roundabout way; automate building of both ANSI and Unicode packages (the former doesn't work with dpkg-buildpackage as there is no way to pass WX_UNICODE=0 to debian/rules when using it).