]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/propgrid.h
another fix for wxUSE_DRAG_AND_DROP==0 build
[wxWidgets.git] / include / wx / propgrid / propgrid.h
index 7bcba570a7c94f2af2a091be0e9ee80e2b7e0125..e0edca337dbb371483c177ffb3cc626fca97ce28 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2004-09-25
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2004-09-25
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 
 #ifndef SWIG
 
 
 #ifndef SWIG
-extern WXDLLIMPEXP_PROPGRID const wxChar *wxPropertyGridNameStr;
+extern WXDLLIMPEXP_DATA_PROPGRID(const char) wxPropertyGridNameStr[];
 #endif
 
 #endif
 
+class wxPGComboBox;
 
 // -----------------------------------------------------------------------
 // Global variables
 
 // -----------------------------------------------------------------------
 // Global variables
@@ -49,7 +50,7 @@ public:
     wxPGHashMapS2P      m_mapEditorClasses;
 
 #if wxUSE_VALIDATORS
     wxPGHashMapS2P      m_mapEditorClasses;
 
 #if wxUSE_VALIDATORS
-    wxArrayPtrVoid      m_arrValidators; // These wxValidators need to be freed
+    wxVector<wxValidator*>  m_arrValidators; // These wxValidators need to be freed
 #endif
 
     wxPGHashMapS2P      m_dictPropertyClassInfo; // PropertyName -> ClassInfo
 #endif
 
     wxPGHashMapS2P      m_dictPropertyClassInfo; // PropertyName -> ClassInfo
@@ -241,12 +242,6 @@ wxPG_EX_AUTO_UNSPECIFIED_VALUES         = 0x00200000,
 */
 wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES    = 0x00400000,
 
 */
 wxPG_EX_WRITEONLY_BUILTIN_ATTRIBUTES    = 0x00400000,
 
-/**
-    With this style Validators on properties will work same as in
-    wxPropertyGrid 1.2.
-*/
-wxPG_EX_LEGACY_VALIDATORS               = 0x00800000,
-
 /** Hides page selection buttons from toolbar.
 */
 wxPG_EX_HIDE_PAGE_BUTTONS               = 0x01000000
 /** Hides page selection buttons from toolbar.
 */
 wxPG_EX_HIDE_PAGE_BUTTONS               = 0x01000000
@@ -353,7 +348,7 @@ typedef wxByte wxPGVFBFlags;
     actually perform validation. Mostly used in custom property
     classes.
 */
     actually perform validation. Mostly used in custom property
     classes.
 */
-class wxPGValidationInfo
+class WXDLLIMPEXP_PROPGRID wxPGValidationInfo
 {
     friend class wxPropertyGrid;
 public:
 {
     friend class wxPropertyGrid;
 public:
@@ -361,7 +356,8 @@ public:
         @return Returns failure behavior which is a combination of
                @ref propgrid_vfbflags.
     */
         @return Returns failure behavior which is a combination of
                @ref propgrid_vfbflags.
     */
-    wxPGVFBFlags GetFailureBehavior();
+    wxPGVFBFlags GetFailureBehavior() const
+        { return m_failureBehavior; }
 
     /**
         Returns current failure message.
 
     /**
         Returns current failure message.
@@ -389,7 +385,8 @@ public:
     /**
         Set current failure message.
     */
     /**
         Set current failure message.
     */
-    void SetFailureMessage(const wxString& message);
+    void SetFailureMessage(const wxString& message)
+        { m_failureMessage = message; }
 
 private:
     /** Value to be validated.
 
 private:
     /** Value to be validated.
@@ -422,9 +419,7 @@ enum wxPG_KEYBOARD_ACTIONS
     wxPG_ACTION_EXPAND_PROPERTY,
     wxPG_ACTION_COLLAPSE_PROPERTY,
     wxPG_ACTION_CANCEL_EDIT,
     wxPG_ACTION_EXPAND_PROPERTY,
     wxPG_ACTION_COLLAPSE_PROPERTY,
     wxPG_ACTION_CANCEL_EDIT,
-    wxPG_ACTION_CUT,
-    wxPG_ACTION_COPY,
-    wxPG_ACTION_PASTE,
+    wxPG_ACTION_PRESS_BUTTON,  // Causes editor button (if any) to be pressed
     wxPG_ACTION_MAX
 };
 
     wxPG_ACTION_MAX
 };
 
@@ -486,8 +481,6 @@ enum wxPG_KEYBOARD_ACTIONS
 #define wxPG_FL_IN_MANAGER                  0x00020000
 // Set after wxPropertyGrid is shown in its initial good size
 #define wxPG_FL_GOOD_SIZE_SET               0x00040000
 #define wxPG_FL_IN_MANAGER                  0x00020000
 // Set after wxPropertyGrid is shown in its initial good size
 #define wxPG_FL_GOOD_SIZE_SET               0x00040000
-// Next navigation key event will get ignored
-#define wxPG_FL_IGNORE_NEXT_NAVKEY          0x00080000
 // Set when in SelectProperty.
 #define wxPG_FL_IN_SELECT_PROPERTY          0x00100000
 // Set when help string is shown in status bar
 // Set when in SelectProperty.
 #define wxPG_FL_IN_SELECT_PROPERTY          0x00100000
 // Set when help string is shown in status bar
@@ -496,14 +489,14 @@ enum wxPG_KEYBOARD_ACTIONS
 #define wxPG_FL_SPLITTER_PRE_SET            0x00400000
 // Validation failed. Clear on modify event.
 #define wxPG_FL_VALIDATION_FAILED           0x00800000
 #define wxPG_FL_SPLITTER_PRE_SET            0x00400000
 // Validation failed. Clear on modify event.
 #define wxPG_FL_VALIDATION_FAILED           0x00800000
-// Set if selected is fully painted (ie. both image and text)
-//#define wxPG_FL_SELECTED_IS_FULL_PAINT      0x01000000
+// Auto sort is enabled (for categorized mode)
+#define wxPG_FL_CATMODE_AUTO_SORT           0x01000000
 // Set after page has been inserted to manager
 #define wxPG_MAN_FL_PAGE_INSERTED           0x02000000
 // Active editor control is abnormally large
 #define wxPG_FL_ABNORMAL_EDITOR             0x04000000
 // Set after page has been inserted to manager
 #define wxPG_MAN_FL_PAGE_INSERTED           0x02000000
 // Active editor control is abnormally large
 #define wxPG_FL_ABNORMAL_EDITOR             0x04000000
-// Recursion guard for OnCustomEditorEvent
-#define wxPG_FL_IN_ONCUSTOMEDITOREVENT      0x08000000
+// Recursion guard for HandleCustomEditorEvent
+#define wxPG_FL_IN_HANDLECUSTOMEDITOREVENT  0x08000000
 #define wxPG_FL_VALUE_CHANGE_IN_EVENT       0x10000000
 // Editor control width should not change on resize
 #define wxPG_FL_FIXED_WIDTH_EDITOR          0x20000000
 #define wxPG_FL_VALUE_CHANGE_IN_EVENT       0x10000000
 // Editor control width should not change on resize
 #define wxPG_FL_FIXED_WIDTH_EDITOR          0x20000000
@@ -622,19 +615,21 @@ public:
 
     /** The default constructor. The styles to be used are styles valid for
         the wxWindow and wxScrolledWindow.
 
     /** The default constructor. The styles to be used are styles valid for
         the wxWindow and wxScrolledWindow.
-        @see @link wndflags Additional Window Styles@endlink
+
+        @see @link wndflags Additional Window Styles @endlink
     */
     wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY,
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& size = wxDefaultSize,
                     long style = wxPG_DEFAULT_STYLE,
     */
     wxPropertyGrid( wxWindow *parent, wxWindowID id = wxID_ANY,
                     const wxPoint& pos = wxDefaultPosition,
                     const wxSize& size = wxDefaultSize,
                     long style = wxPG_DEFAULT_STYLE,
-                    const wxChar* name = wxPropertyGridNameStr );
+                    const wxString& name = wxPropertyGridNameStr );
 
     /** Destructor */
     virtual ~wxPropertyGrid();
 #endif
 
     /** Adds given key combination to trigger given action.
 
     /** Destructor */
     virtual ~wxPropertyGrid();
 #endif
 
     /** Adds given key combination to trigger given action.
+
         @param action
             Which action to trigger. See @link pgactions List of list of
             wxPropertyGrid actions@endlink.
         @param action
             Which action to trigger. See @link pgactions List of list of
             wxPropertyGrid actions@endlink.
@@ -701,7 +696,7 @@ public:
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
                  long style = wxPG_DEFAULT_STYLE,
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
                  long style = wxPG_DEFAULT_STYLE,
-                 const wxChar* name = wxPropertyGridNameStr );
+                 const wxString& name = wxPropertyGridNameStr );
 
     /**
         Call when editor widget's contents is modified.
 
     /**
         Call when editor widget's contents is modified.
@@ -790,9 +785,9 @@ public:
     /**
         Returns number of columns currently on grid.
     */
     /**
         Returns number of columns currently on grid.
     */
-    int GetColumnCount() const
+    unsigned int GetColumnCount() const
     {
     {
-        return m_pState->m_colWidths.size();
+        return (unsigned int) m_pState->m_colWidths.size();
     }
 
     /** Returns colour of empty space below properties. */
     }
 
     /** Returns colour of empty space below properties. */
@@ -837,11 +832,13 @@ public:
     /** Returns background colour of margin. */
     wxColour GetMarginColour() const { return m_colMargin; }
 
     /** Returns background colour of margin. */
     wxColour GetMarginColour() const { return m_colMargin; }
 
-    /** Returns cell background colour of a property. */
-    wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const;
-
-    /** Returns cell background colour of a property. */
-    wxColour GetPropertyTextColour( wxPGPropArg id ) const;
+    /**
+        Returns most up-to-date value of selected property. This will return
+        value different from GetSelectedProperty()->GetValue() only when text
+        editor is activate and string edited by user represents valid,
+        uncommitted property value.
+    */
+    wxVariant GetUncommittedPropertyValue();
 
     /** Returns "root property". It does not have name, etc. and it is not
         visible. It is only useful for accessing its children.
 
     /** Returns "root property". It does not have name, etc. and it is not
         visible. It is only useful for accessing its children.
@@ -938,15 +935,6 @@ public:
         return DoSelectProperty(p,focus?wxPG_SEL_FOCUS:0);
     }
 
         return DoSelectProperty(p,focus?wxPG_SEL_FOCUS:0);
     }
 
-    /** Changes keyboard shortcut to push the editor button.
-        @remarks
-        You can set default with keycode 0. Good value for the platform is
-        guessed, but don't expect it to be very accurate.
-    */
-    void SetButtonShortcut( int keycode,
-                            bool ctrlDown = false,
-                            bool altDown = false );
-
     /** Sets category caption background colour. */
     void SetCaptionBackgroundColour(const wxColour& col);
 
     /** Sets category caption background colour. */
     void SetCaptionBackgroundColour(const wxColour& col);
 
@@ -996,22 +984,6 @@ public:
     /** Sets background colour of margin. */
     void SetMarginColour(const wxColour& col);
 
     /** Sets background colour of margin. */
     void SetMarginColour(const wxColour& col);
 
-    /** Sets background colour of property and all its children. Colours of
-        captions are not affected. Background brush cache is optimized for often
-        set colours to be set last.
-    */
-    void SetPropertyBackgroundColour( wxPGPropArg id, const wxColour& col );
-
-    /** Resets text and background colours of given property.
-    */
-    void SetPropertyColoursToDefault( wxPGPropArg id );
-
-    /** Sets text colour of property and all its children.
-    */
-    void SetPropertyTextColour( wxPGPropArg id,
-                                const wxColour& col,
-                                bool recursively = true );
-
     /**
         Sets selection background colour - applies to selected property name
         background.
     /**
         Sets selection background colour - applies to selected property name
         background.
@@ -1036,22 +1008,49 @@ public:
         m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
     }
 
         m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
     }
 
-    /** Set virtual width for this particular page. Width -1 indicates that the
-        virtual width should be disabled. */
-    void SetVirtualWidth( int width );
+    /**
+        Sets the property sorting function.
+
+        @param sortFunction
+            The sorting function to be used. It should return a value greater
+            than 0 if position of p1 is after p2. So, for instance, when
+            comparing property names, you can use following implementation:
+
+            @code
+                int MyPropertySortFunction(wxPropertyGrid* propGrid,
+                                           wxPGProperty* p1,
+                                           wxPGProperty* p2)
+                {
+                    return p1->GetBaseName().compare( p2->GetBaseName() );
+                }
+            @endcode
 
 
-    /** Sets name of a property.
-        @param id
-        Name or pointer of property which name to change.
-        @param newname
-        New name.
+        @remarks
+            Default property sort function sorts properties by their labels
+            (case-insensitively).
+
+        @see GetSortFunction, wxPropertyGridInterface::Sort,
+             wxPropertyGridInterface::SortChildren
     */
     */
-    void SetPropertyName( wxPGPropArg id, const wxString& newname )
+    void SetSortFunction( wxPGSortCallback sortFunction )
     {
     {
-        wxPG_PROP_ARG_CALL_PROLOG()
-        DoSetPropertyName( p, newname );
+        m_sortFunction = sortFunction;
     }
 
     }
 
+    /**
+        Returns the property sort function (default is @NULL).
+
+        @see SetSortFunction
+    */
+    wxPGSortCallback GetSortFunction() const
+    {
+        return m_sortFunction;
+    }
+
+    /** Set virtual width for this particular page. Width -1 indicates that the
+        virtual width should be disabled. */
+    void SetVirtualWidth( int width );
+
     /**
         Moves splitter as left as possible, while still allowing all
         labels to be shown in full.
     /**
         Moves splitter as left as possible, while still allowing all
         labels to be shown in full.
@@ -1081,13 +1080,6 @@ public:
         DoShowPropertyError(p, msg);
     }
 
         DoShowPropertyError(p, msg);
     }
 
-    /** Sorts all items at all levels (except sub-properties). */
-    void Sort();
-
-    /** Sorts children of a category.
-    */
-    void SortChildren( wxPGPropArg id );
-
     /////////////////////////////////////////////////////////////////
     //
     // Following methods do not need to be (currently) documented
     /////////////////////////////////////////////////////////////////
     //
     // Following methods do not need to be (currently) documented
@@ -1106,7 +1098,7 @@ public:
     */
     unsigned int GetCommonValueCount() const
     {
     */
     unsigned int GetCommonValueCount() const
     {
-        return m_commonValues.size();
+        return (unsigned int) m_commonValues.size();
     }
 
     /** Returns label of given common value.
     }
 
     /** Returns label of given common value.
@@ -1202,16 +1194,9 @@ public:
                             const wxPGProperty* p2 ) const;
 
     /** Returns pointer to current active primary editor control (NULL if none).
                             const wxPGProperty* p2 ) const;
 
     /** Returns pointer to current active primary editor control (NULL if none).
-
-        If editor uses clipper window, pointer is returned to the actual
-        editor, not the clipper.
     */
     wxWindow* GetEditorControl() const;
 
     */
     wxWindow* GetEditorControl() const;
 
-    /** Adjusts given position if topCtrlWnd is child of clipper window.
-    */
-    bool AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y );
-
     wxWindow* GetPrimaryEditor() const
     {
         return GetEditorControl();
     wxWindow* GetPrimaryEditor() const
     {
         return GetEditorControl();
@@ -1226,6 +1211,14 @@ public:
         return m_wndEditor2;
     }
 
         return m_wndEditor2;
     }
 
+    /**
+        Refreshes any active editor control.
+    */
+    void RefreshEditor();
+
+    // Events from editor controls are forward to this function
+    void HandleCustomEditorEvent( wxEvent &event );
+
 #ifndef SWIG
 
     /**
 #ifndef SWIG
 
     /**
@@ -1243,21 +1236,19 @@ public:
     // Mostly useful for page switching.
     void SwitchState( wxPropertyGridPageState* pNewState );
 
     // Mostly useful for page switching.
     void SwitchState( wxPropertyGridPageState* pNewState );
 
-    /** Pass this function to Connect calls in propertyclass::CreateEditor.
-    */
-    void OnCustomEditorEvent( wxCommandEvent &event );
-
     long GetInternalFlags() const { return m_iFlags; }
     long GetInternalFlags() const { return m_iFlags; }
+    bool HasInternalFlag( long flag ) const
+        { return (m_iFlags & flag) ? true : false; }
     void SetInternalFlag( long flag ) { m_iFlags |= flag; }
     void ClearInternalFlag( long flag ) { m_iFlags &= ~(flag); }
     void IncFrozen() { m_frozen++; }
     void DecFrozen() { m_frozen--; }
 
     void SetInternalFlag( long flag ) { m_iFlags |= flag; }
     void ClearInternalFlag( long flag ) { m_iFlags &= ~(flag); }
     void IncFrozen() { m_frozen++; }
     void DecFrozen() { m_frozen--; }
 
-    void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc,
-                           wxRect& rect,int flags );
-
-    // Used by simple check box for keyboard navigation
-    void SendNavigationKeyEvent( int dir );
+    void OnComboItemPaint( const wxPGComboBox* pCb,
+                           int item,
+                           wxDC* pDc,
+                           wxRect& rect,
+                           int flags );
 
     /** Standardized double-to-string conversion.
     */
 
     /** Standardized double-to-string conversion.
     */
@@ -1293,12 +1284,6 @@ public:
     virtual bool DoPropertyChanged( wxPGProperty* p,
                                     unsigned int selFlags = 0 );
 
     virtual bool DoPropertyChanged( wxPGProperty* p,
                                     unsigned int selFlags = 0 );
 
-    /**
-        Runs all validation functionality (includes sending wxEVT_PG_CHANGING).
-        Returns true if all tests passed.
-    */
-    virtual bool PerformValidation( wxPGProperty* p, wxVariant& pendingValue );
-
     /** Called when validation for given property fails.
         @param invalidValue
             Value which failed in validation.
     /** Called when validation for given property fails.
         @param invalidValue
             Value which failed in validation.
@@ -1309,12 +1294,8 @@ public:
         To add your own validation failure behavior, override
         wxPropertyGrid::DoOnValidationFailure().
     */
         To add your own validation failure behavior, override
         wxPropertyGrid::DoOnValidationFailure().
     */
-    bool OnValidationFailure( wxPGProperty* property, wxVariant& invalidValue )
-    {
-        bool res = DoOnValidationFailure(property, invalidValue);
-        property->SetFlag(wxPG_PROP_INVALID_VALUE);
-        return res;
-    }
+    bool OnValidationFailure( wxPGProperty* property,
+                              wxVariant& invalidValue );
 
     /** Called to indicate property and editor has valid value now.
     */
 
     /** Called to indicate property and editor has valid value now.
     */
@@ -1366,6 +1347,8 @@ public:
     */
     bool UnfocusEditor();
 
     */
     bool UnfocusEditor();
 
+    virtual void SetWindowStyleFlag( long style );
+
 protected:
 
     /**
 protected:
 
     /**
@@ -1376,12 +1359,36 @@ protected:
     */
     virtual wxPropertyGridPageState* CreateState() const;
 
     */
     virtual wxPropertyGridPageState* CreateState() const;
 
-#ifndef DOXYGEN
+    enum PerformValidationFlags
+    {
+        SendEvtChanging         = 0x0001,
+        IsStandaloneValidation  = 0x0002   // Not called in response to event
+    };
+
+    /**
+        Runs all validation functionality (includes sending wxEVT_PG_CHANGING).
+        Returns true if all tests passed. Implement in derived class to
+        add additional validation behavior.
+    */
+    virtual bool PerformValidation( wxPGProperty* p,
+                                    wxVariant& pendingValue,
+                                    int flags = SendEvtChanging );
+
 public:
 
     // Control font changer helper.
     void SetCurControlBoldFont();
 
 public:
 
     // Control font changer helper.
     void SetCurControlBoldFont();
 
+    wxPGCell& GetPropertyDefaultCell()
+    {
+        return m_propertyDefaultCell;
+    }
+
+    wxPGCell& GetCategoryDefaultCell()
+    {
+        return m_categoryDefaultCell;
+    }
+
     //
     // Public methods for semi-public use
     // (not protected for optimization)
     //
     // Public methods for semi-public use
     // (not protected for optimization)
@@ -1390,7 +1397,6 @@ public:
 
     // Overridden functions.
     virtual bool Destroy();
 
     // Overridden functions.
     virtual bool Destroy();
-    virtual wxSize DoGetBestSize() const;
     // Returns property at given y coordinate (relative to grid's top left).
     wxPGProperty* GetItemAtY( int y ) const { return DoGetItemAtY(y); }
 
     // Returns property at given y coordinate (relative to grid's top left).
     wxPGProperty* GetItemAtY( int y ) const { return DoGetItemAtY(y); }
 
@@ -1406,6 +1412,7 @@ public:
 
 
 protected:
 
 
 protected:
+    virtual wxSize DoGetBestSize() const;
 
 #ifndef wxPG_ICON_WIDTH
     wxBitmap            *m_expandbmp, *m_collbmp;
 
 #ifndef wxPG_ICON_WIDTH
     wxBitmap            *m_expandbmp, *m_collbmp;
@@ -1424,8 +1431,6 @@ protected:
     wxBitmap            *m_doubleBuffer;
 #endif
 
     wxBitmap            *m_doubleBuffer;
 #endif
 
-    wxArrayPtrVoid      *m_windowsToDelete;
-
     /** Local time ms when control was created. */
     wxLongLong          m_timeCreated;
 
     /** Local time ms when control was created. */
     wxLongLong          m_timeCreated;
 
@@ -1501,9 +1506,6 @@ protected:
 
     int                 m_fontHeight;  // Height of the font.
 
 
     int                 m_fontHeight;  // Height of the font.
 
-    // Base keycode for triggering push button.
-    int                 m_pushButKeyCode;
-
     /** m_splitterx when drag began. */
     int                 m_startingSplitterX;
 
     /** m_splitterx when drag began. */
     int                 m_startingSplitterX;
 
@@ -1561,12 +1563,6 @@ protected:
 
     unsigned char       m_vspacing;
 
 
     unsigned char       m_vspacing;
 
-    // Does triggering push button need Alt down?
-    unsigned char       m_pushButKeyCodeNeedsAlt;
-
-    // Does triggering push button need Ctrl down?
-    unsigned char       m_pushButKeyCodeNeedsCtrl;
-
     // Used to track when Alt/Ctrl+Key was consumed.
     unsigned char       m_keyComboConsumed;
 
     // Used to track when Alt/Ctrl+Key was consumed.
     unsigned char       m_keyComboConsumed;
 
@@ -1609,6 +1605,9 @@ protected:
     // Top level parent
     wxWindow*           m_tlp;
 
     // Top level parent
     wxWindow*           m_tlp;
 
+    // Sort function
+    wxPGSortCallback    m_sortFunction;
+
     // y coordinate of property that mouse hovering
     int                 m_propHoverY;
     // Which column's editor is selected (usually 1)?
     // y coordinate of property that mouse hovering
     int                 m_propHoverY;
     // Which column's editor is selected (usually 1)?
@@ -1639,15 +1638,20 @@ protected:
     // background colour for empty space below the grid
     wxColour            m_colEmptySpace;
 
     // background colour for empty space below the grid
     wxColour            m_colEmptySpace;
 
-    // NB: These *cannot* be moved to globals.
+    // Default property colours
+    wxPGCell            m_propertyDefaultCell;
+
+    // Default property category
+    wxPGCell            m_categoryDefaultCell;
+
+    // Backup of selected property's cells
+    wxVector<wxPGCell>  m_propCellsBackup;
 
 
-    // Array of background colour brushes.
-    wxArrayPtrVoid      m_arrBgBrushes;
-    // Array of foreground colours.
-    wxArrayPtrVoid      m_arrFgCols;
+    // NB: These *cannot* be moved to globals.
 
     // labels when properties use common values
 
     // labels when properties use common values
-    wxArrayPtrVoid      m_commonValues;
+    wxVector<wxPGCommonValue*>  m_commonValues;
+
     // Which cv selection really sets value to unspecified?
     int                 m_cvUnspecified;
 
     // Which cv selection really sets value to unspecified?
     int                 m_cvUnspecified;
 
@@ -1672,8 +1676,6 @@ protected:
     void OnMouseDoubleClick( wxMouseEvent &event );
     void OnMouseUp( wxMouseEvent &event );
     void OnKey( wxKeyEvent &event );
     void OnMouseDoubleClick( wxMouseEvent &event );
     void OnMouseUp( wxMouseEvent &event );
     void OnKey( wxKeyEvent &event );
-    void OnKeyUp( wxKeyEvent &event );
-    void OnNavigationKey( wxNavigationKeyEvent& event );
     void OnResize( wxSizeEvent &event );
 
     // event handlers
     void OnResize( wxSizeEvent &event );
 
     // event handlers
@@ -1682,9 +1684,7 @@ protected:
     bool HandleMouseRightClick( int x, unsigned int y, wxMouseEvent &event );
     bool HandleMouseDoubleClick( int x, unsigned int y, wxMouseEvent &event );
     bool HandleMouseUp( int x, unsigned int y, wxMouseEvent &event );
     bool HandleMouseRightClick( int x, unsigned int y, wxMouseEvent &event );
     bool HandleMouseDoubleClick( int x, unsigned int y, wxMouseEvent &event );
     bool HandleMouseUp( int x, unsigned int y, wxMouseEvent &event );
-    void HandleKeyEvent( wxKeyEvent &event );
-    // Handle TAB and ESCAPE in control
-    bool HandleChildKey( wxKeyEvent& event );
+    void HandleKeyEvent( wxKeyEvent &event, bool fromChild );
 
     void OnMouseEntry( wxMouseEvent &event );
 
 
     void OnMouseEntry( wxMouseEvent &event );
 
@@ -1701,7 +1701,6 @@ protected:
     void OnMouseMoveChild( wxMouseEvent &event );
     void OnMouseUpChild( wxMouseEvent &event );
     void OnChildKeyDown( wxKeyEvent &event );
     void OnMouseMoveChild( wxMouseEvent &event );
     void OnMouseUpChild( wxMouseEvent &event );
     void OnChildKeyDown( wxKeyEvent &event );
-    void OnChildKeyUp( wxKeyEvent &event );
 
     void OnCaptureChange( wxMouseCaptureChangedEvent &event );
 
 
     void OnCaptureChange( wxMouseCaptureChangedEvent &event );
 
@@ -1745,8 +1744,6 @@ protected:
                      const wxRect* clip_rect,
                      bool isBuffered ) const;
 
                      const wxRect* clip_rect,
                      bool isBuffered ) const;
 
-    void DoSetPropertyValueUnspecified( wxPGProperty* p );
-
     /** Draws an expand/collapse (ie. +/-) button.
     */
     virtual void DrawExpanderButton( wxDC& dc, const wxRect& rect,
     /** Draws an expand/collapse (ie. +/-) button.
     */
     virtual void DrawExpanderButton( wxDC& dc, const wxRect& rect,
@@ -1781,6 +1778,9 @@ protected:
 
     void ImprovedClientToScreen( int* px, int* py );
 
 
     void ImprovedClientToScreen( int* px, int* py );
 
+    // Returns True if editor control has focus
+    bool IsEditorFocused() const;
+
     // Called by focus event handlers. newFocused is the window that becomes
     // focused.
     void HandleFocusChange( wxWindow* newFocused );
     // Called by focus event handlers. newFocused is the window that becomes
     // focused.
     void HandleFocusChange( wxWindow* newFocused );
@@ -1810,24 +1810,11 @@ protected:
 
     static void RegisterDefaultEditors();
 
 
     static void RegisterDefaultEditors();
 
-    // Sets m_bgColIndex to this property and all its children.
-    void SetBackgroundColourIndex( wxPGProperty* p, int index );
-
-    // Sets m_fgColIndex to this property and all its children.
-    void SetTextColourIndex( wxPGProperty* p, int index, int flags );
-
-    int CacheColour( const wxColour& colour );
-
-    void DoSetPropertyName( wxPGProperty* p, const wxString& newname );
-
     // Sets up basic event handling for child control
     // Sets up basic event handling for child control
-    void SetupChildEventHandling( wxWindow* wnd, int id );
+    void SetupChildEventHandling( wxWindow* wnd );
 
     void CustomSetCursor( int type, bool override = false );
 
 
     void CustomSetCursor( int type, bool override = false );
 
-    virtual bool ProcessEvent(wxEvent& event);
-    virtual void SetWindowStyleFlag( long style );
-
     /**
         Repositions scrollbar and underlying panel according to changed virtual
         size.
     /**
         Repositions scrollbar and underlying panel according to changed virtual
         size.
@@ -1841,21 +1828,14 @@ protected:
                     wxVariant* pValue = NULL,
                     unsigned int selFlags = 0 );
 
                     wxVariant* pValue = NULL,
                     unsigned int selFlags = 0 );
 
-    void SetFocusOnCanvas()
-    {
-        m_canvas->SetFocusIgnoringChildren();
-        m_editorFocused = 0;
-    }
+    void SetFocusOnCanvas();
 
     bool DoHideProperty( wxPGProperty* p, bool hide, int flags );
 
 private:
 
 
     bool DoHideProperty( wxPGProperty* p, bool hide, int flags );
 
 private:
 
-    bool ButtonTriggerKeyTest( wxKeyEvent &event );
+    bool ButtonTriggerKeyTest( int action, wxKeyEvent& event );
 
 
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private:
     DECLARE_EVENT_TABLE()
 #endif // #ifndef SWIG
 };
     DECLARE_EVENT_TABLE()
 #endif // #ifndef SWIG
 };
@@ -1883,7 +1863,7 @@ inline int wxPGProperty::GetDisplayedCommonValueCount() const
     {
         wxPropertyGrid* pg = GetGrid();
         if ( pg )
     {
         wxPropertyGrid* pg = GetGrid();
         if ( pg )
-            return pg->GetCommonValueCount();
+            return (int) pg->GetCommonValueCount();
     }
     return 0;
 }
     }
     return 0;
 }
@@ -1910,22 +1890,20 @@ inline bool wxPGProperty::SetMaxLength( int maxLen )
 
 // -----------------------------------------------------------------------
 
 
 // -----------------------------------------------------------------------
 
+#define wxPG_BASE_EVT_PRE_ID     1775
 
 #ifndef SWIG
 
 
 #ifndef SWIG
 
-#define wxPG_BASE_EVT_PRE_ID     1775
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_SELECTED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGING, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_HIGHLIGHTED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_RIGHT_CLICK, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_PAGE_CHANGED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_COLLAPSED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_EXPANDED, wxPropertyGridEvent )
+wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_PROPGRID, wxEVT_PG_DOUBLE_CLICK, wxPropertyGridEvent )
 
 
-BEGIN_DECLARE_EVENT_TYPES()
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_SELECTED,           wxPG_BASE_EVT_PRE_ID)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGING,           wxPG_BASE_EVT_PRE_ID+1)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_CHANGED,            wxPG_BASE_EVT_PRE_ID+2)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_HIGHLIGHTED,        wxPG_BASE_EVT_PRE_ID+3)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_RIGHT_CLICK,        wxPG_BASE_EVT_PRE_ID+4)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_PAGE_CHANGED,       wxPG_BASE_EVT_PRE_ID+5)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_COLLAPSED,     wxPG_BASE_EVT_PRE_ID+6)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_ITEM_EXPANDED,      wxPG_BASE_EVT_PRE_ID+7)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_PROPGRID, wxEVT_PG_DOUBLE_CLICK,       wxPG_BASE_EVT_PRE_ID+8)
-END_DECLARE_EVENT_TYPES()
 #else
     enum {
         wxEVT_PG_SELECTED = wxPG_BASE_EVT_PRE_ID,
 #else
     enum {
         wxEVT_PG_SELECTED = wxPG_BASE_EVT_PRE_ID,
@@ -1948,18 +1926,18 @@ END_DECLARE_EVENT_TYPES()
 #ifndef SWIG
 typedef void (wxEvtHandler::*wxPropertyGridEventFunction)(wxPropertyGridEvent&);
 
 #ifndef SWIG
 typedef void (wxEvtHandler::*wxPropertyGridEventFunction)(wxPropertyGridEvent&);
 
-#define EVT_PG_SELECTED(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_SELECTED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_CHANGING(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGING, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_CHANGED(id, fn)               DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_HIGHLIGHTED(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_HIGHLIGHTED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_RIGHT_CLICK(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_RIGHT_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_DOUBLE_CLICK(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_DOUBLE_CLICK, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_PAGE_CHANGED(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_PAGE_CHANGED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_ITEM_COLLAPSED(id, fn)        DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_COLLAPSED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
-#define EVT_PG_ITEM_EXPANDED(id, fn)         DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_EXPANDED, id, -1, (wxObjectEventFunction) (wxEventFunction)  wxStaticCastEvent( wxPropertyGridEventFunction, & fn ), (wxObject *) NULL ),
+#define EVT_PG_SELECTED(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_SELECTED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_CHANGING(id, fn)              DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGING, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_CHANGED(id, fn)               DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_CHANGED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_HIGHLIGHTED(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_HIGHLIGHTED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_RIGHT_CLICK(id, fn)           DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_RIGHT_CLICK, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_DOUBLE_CLICK(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_DOUBLE_CLICK, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_PAGE_CHANGED(id, fn)          DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_PAGE_CHANGED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_ITEM_COLLAPSED(id, fn)        DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_COLLAPSED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
+#define EVT_PG_ITEM_EXPANDED(id, fn)         DECLARE_EVENT_TABLE_ENTRY( wxEVT_PG_ITEM_EXPANDED, id, -1, wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn ), NULL ),
 
 
-#define wxPropertyGridEventHandler(A) \
-    ((wxObjectEventFunction)(wxEventFunction)(wxPropertyGridEventFunction)&A)
+#define wxPropertyGridEventHandler(fn) \
+    wxEVENT_HANDLER_CAST( wxPropertyGridEventFunction, fn )
 
 #endif
 
 
 #endif
 
@@ -2215,12 +2193,6 @@ protected:
 //    #undef const wxString&
 #endif
 
 //    #undef const wxString&
 #endif
 
-// Doxygen special
-#ifdef DOXYGEN
-    #include "wx/propgrid/editor.h"
-    #include "wx/propgrid/manager.h"
-#endif
-
 // -----------------------------------------------------------------------
 
 #endif
 // -----------------------------------------------------------------------
 
 #endif