-Enhancements for wxWindows 3.0
+Enhancements for wxWidgets 3.0
==============================
-RCS-ID: $Id$
+This table contains the brief summary of the issues below. Priority and
+Difficulty are values from 1 to 10 with 1 being the least important/difficult
+and 10 the most.
+
+Item Prio Diff
+----------------------------------------------------------------------------
+Namespaces 8 6
+STLization 10 8
+Making code exception-friendly 8 10
+Native RTTI 7 7
+TRUE/true 9 1
+
C++ Features
============
-- Namespaces.
-- STL containers compatibility (including using STL-like
- adapters for wxWindows containers).
-- Exception Handling: making the code exception-safe, and
- also _using_ exceptions throughout the code.
+- Namespaces:
+ We want to have all wxWidgets identifiers in "wx" namespace but provide
+ typedefs/#defines for backwards compatibility. This can be done easily
+ for the classes and the only real problem are the enums as they would
+ all have to be duplicated at both the global scope (with "wx" prefix) and
+ in wx namespace (without it)
+
+- 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.
+
+- Complete replacing TRUE/FALSE with true/false
+ Trivial
+
Core
====
-- Use wxEventLoop in all builds.
-- Remove wxCOMPATIBILITY (1.X).
-- Modularization/Build System/Project File Generation.
-- A configuration tool to generate setup.h and configure
- commands.
-- RTTI native Support, Properties/Member-Metadata, 2-Step Init with
- virtual create: e.g. Create(const wxArrayVariant&).
+- 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 (1.X)
+ At least WXWIN_COMPATIBILITY and maybe WXWIN_COMPATIBILITY_2 code should be
+ removed from the library. wxDEPRECATED() should be used with everything
+ inside WXWIN_COMPATIBILITY_2_2. The stuff inside WXWIN_COMPATIBILITY_2_4
+ probably should not be deprecated (yet?) because this would give thousands
+ of warnings for the existing code.
+
+- Modularization/Build System
+ Candidates for components:
+ + contrib widgets (and maybe some of the ones currently in the core)
+ + wxHTML
+ + network stuff
+ + printing (?)
+ + ODBC classes
+ + ...
+
+- Project File Generation
+ We need a (GUI) tool to generate the project/makefiles for all supported
+ platforms/compilers. Not sure if it should be used for the library itself
+ (would be nice to have something like "make menuconfig" for Linux kernel
+ which allows you to navigate easily among all of the configure/setup.h
+ options but there is a problem with distributing such tool as it can't be
+ compiled by the user because it is needed before the library is built) but
+ we definitely need it for the users makefiles.
+
+- Properties/Member-Metadata, 2-Step Init with virtual create
+
+- Tidy code and add comments to headers (possibly in
+ Doxygen/Javadoc style)
+
Documentation
=============
- 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.
+- Update the coding standards guide
+
wxEvents
========
-Change Idle Handling
---------------------
-Current Implementation is using too many CPU cycles.
+- 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.
+- Loose Coupling Event-Source Event-Sink
+ kind of the NextStep/C# very performant coupling, exposing events via
+ Metadata
-Remove Lazy Init of Eventtables
--------------------------------
-Was introduced as a bug-fix, not needed anymore, consumes
-considerable CPU time.
+- Add Lazy Init of Eventtables
Modules/Plugins
Architecture
------------
-We aim to arrive at a lazy initializiation of modules only when they are first
+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.
+
wxUniversal
===========
- Renderers within native ports.
+
wxPrinting
==========
of pages.
- Preview UI enhancement.
+
wxStaticBox
===========
in order to avoid problems on ports where the hierarchy must be
'correct'.
-Miscellaneous
-=============
-- wxDC Support for point to char-position with text rendering.
-- wxLocale Extension (eg currency).
-- wxStreams review.
+Removal of old code
+===================
+
+In addition to wxCOMPATIBILITY code:
+- contrib/src/mmedia
+- contrib/src/applet?
+- Dialog Editor
+
+wxMiscellaneous
+===============
+- 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.
+- Rewrite wxFileHistory using wxString and wxArrayString, and
+ put in separate file.
+- 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.
+
+Version: $Id$