Difference between revisions of "Development: Todo List"

From WxWiki
Jump to navigation Jump to search
m (Reverted edits by 141.74.1.1 (Talk) to last revision by Chowette)
(47 intermediate revisions by 12 users not shown)
Line 1: Line 1:
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 [[Development:How_To_Contribute|join the team]]!
+
{{ToC Right}}
  
 +
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 [[Development: How To Contribute|join the team]]!
  
== General ==
+
== New Development ==
  
 
=== High priority ===
 
=== High priority ===
 
* Make it possible to build wx in UTF-8 mode in addition to the current ANSI/Unicode ones.
 
  
 
* Provide a possibility to use individual wxUniv controls from the native ports.
 
* 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)
 
* 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)
 
* Finish wxDataViewControl:
 
** Add support for hierarchical structure (so that it could replace wxTreeCtrl as well as wxListCtrl)
 
** Write native wxMSW and wxMac implementations
 
 
 
* wxHTML2, using native HTML renderers where available.
 
* wxHTML2, using native HTML renderers where available.
 +
* 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 [http://www.icu-project.org/ ICU] as discussed in [http://thread.gmane.org/gmane.comp.lib.wxwidgets.general/57972 this thread]).
 +
* Implement wxMaskedTextCtrl in C++ (it's already available in wxPython)
 +
* 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.
 +
* 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
  
 
=== Medium priority ===
 
=== Medium priority ===
 
* Fix multiple (real or perceived) problems with wxScrolledWindow resulting in extra borders or unneeded scrollbars and so on
 
* Change wxBoxSizer to distribute just extra space between the stretchable items instead of all non-fixed space, otherwise some items can not even get their minimal size when there is enough space (see [http://article.gmane.org/gmane.comp.lib.wxwidgets.devel/81525 this post])
 
  
 
* MIME types code needs a cleanup and a GUI interface to allow setting the MIME types and related information from the program itself  
 
* MIME types code needs a cleanup and a GUI interface to allow setting the MIME types and related information from the program itself  
* Masked text editor control; time entry control implemented using it
+
* wxReBar control (moveable toolbars, menubars) - see http://wxcode.sourceforge.net/showcomp.php?name=wxCoolBar for an already existing implementation
* wxReBar control (moveable toolbars, menubars)
+
* Native implementation of wxCalendarCtrl for wxMac (see http://developer.apple.com/documentation/Carbon/Reference/Control_Manager/Reference/reference.html#//apple_ref/c/func/CreateClockControl and/or http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSDatePicker_Class/Reference/Reference.html#//apple_ref/occ/cl/NSDatePicker)
 +
* Improve IPv6 support, currently some functionality is simply missing for IPv6 sockets and we also don't have any tests for them.
 
* Avoid calling the wxYield family of functions in internal code. wxYield causes problems in combination with pending events leading to all sorts of strange side-effects.
 
* Avoid calling the wxYield family of functions in internal code. wxYield causes problems in combination with pending events leading to all sorts of strange side-effects.
 
* Move wxApp::Yield() to wxEventLoop::Yield(), where it logically belongs (see wxDFB port for partial step in this direction)
 
* Move wxApp::Yield() to wxEventLoop::Yield(), where it logically belongs (see wxDFB port for partial step in this direction)
 +
* Add persistent control support: see [[PersistentControls]] page for more info
 +
* Add wxFont::SetAntiAliasingMode(enum { Default, On, Off }) method which can be implemented easily at least for MSW by using the corresponding LOGFONT::lfQuality values.
 +
* Add wxUSE_HOTKEY and any other missing options to configure.
  
 
=== Low priority ===
 
=== Low priority ===
  
* Write wxConfg implementation using XML as backend:
+
* Write wxConfig implementation using XML as backend:
** portable wxXMLConfig for all platforms
+
** portable wxXMLConfig for all platforms (there is a version doing it [http://www.nicdex.com/dev/files/wxXMLConfig.h here] and [http://www.nicdex.com/dev/files/wxXMLConfig.cpp here] but it duplicates too much of wxFileConfig code unfortunately)
 
** wxApplePrefConfig for working with .pref files on Mac OS X  
 
** 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'.
 
* 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
 
* Standard menu and toolbar customization dialogs
 
 
* Extend wxLocale to return more information, e.g. currency formatting, list separator, ...
 
* 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 code 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 [http://thread.gmane.org/gmane.comp.lib.wxwidgets.devel/95990 this thread])
 +
* Update the coding standards guide
 +
* Complete replacing TRUE/FALSE with true/false
  
* Remove wxUSE_PROLOGIO stuff from contrib/src/ogl sources to suppress warnings about wxUSE_PROLOGIO not being defined (this is trivial)
+
=== Everything else ===
  
=== Everything else ===
+
Most of the following items need to be discussed before being implemented.
  
 
* Synchronisation API between mobile and desktop.
 
* Synchronisation API between mobile and desktop.
Line 52: Line 54:
 
* wxDC Support for point to char-position with text rendering
 
* wxDC Support for point to char-position with text rendering
  
 +
Other miscellaneous items to review:
 +
 +
* 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 ==
 +
 +
[[Development: Incomplete API|This page]] lists many of the classes/methods which are not implemented under all platforms. In addition, our [http://trac.wxwidgets.org/report/1 bug tracker] page has an almost unlimited supply of bugs to fix.
 +
 +
A list of improvements needed for wxWidgets documentation is maintained [http://docs.wxwidgets.org/trunk/todo.html 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).
  
== Documentation ==
+
=== Architecture ===
  
* The possibility of moving doc into header files with tool support, or translation to XML with support from scripts (comparison of headers and documentation).
+
* 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.
* Detailed review of doc accuracy.
 
* wxDC: Precise definition of default/initial state.
 
* wxDC: Pixelwise definition of operations (e.g. last point of a line not drawn).
 
* Events: for all controls state clearly when calling a member function results in an event being generated and when it doesn't.
 
* Document all wxUSE_XXX settings (it would be also nice to centralize their definitions in a single file instead of having them in several different setup.h)
 
* Update the coding standards guide
 
  
 +
=== Printing ===
  
 +
* Page preflighting capabilities in order to determine number of pages.
 +
* Preview UI enhancement.
  
 
== Infrastructure ==
 
== Infrastructure ==
  
* Set up [[http://buildbot.sf.net/ buildbot]] or similar system for continuous build tests
+
* 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.
* Use SourceForge compile farm (or other facilities) 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 <tt>dpkg-buildpackage</tt> as there is no way to pass <tt>WX_UNICODE=0</tt> to <tt>debian/rules</tt> when using it).
* 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 <tt>dpkg-buildpackage</tt> as there is no way to pass <tt>WX_UNICODE=0</tt> to <tt>debian/rules</tt> when using it)
 

Revision as of 11:36, 30 June 2010

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.
  • 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)
  • 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.
  • 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

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 code 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:

  • 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).