]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/propgrid.h
use renderer for drawing the item background on ports other than GTK2 and Mac too...
[wxWidgets.git] / include / wx / propgrid / propgrid.h
index 8737abd2af05d02d047ee0e0ba69cc882d6fd3db..1c2d8de3f2bef6f9c4d5e7a14892b5fd83ad5fe6 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2004-09-25
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
@@ -49,7 +49,7 @@ public:
     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
@@ -347,7 +347,7 @@ typedef wxByte wxPGVFBFlags;
     actually perform validation. Mostly used in custom property
     classes.
 */
-class wxPGValidationInfo
+class WXDLLIMPEXP_PROPGRID wxPGValidationInfo
 {
     friend class wxPropertyGrid;
 public:
@@ -355,7 +355,8 @@ public:
         @return Returns failure behavior which is a combination of
                @ref propgrid_vfbflags.
     */
-    wxPGVFBFlags GetFailureBehavior();
+    wxPGVFBFlags GetFailureBehavior() const
+        { return m_failureBehavior; }
 
     /**
         Returns current failure message.
@@ -417,12 +418,10 @@ enum wxPG_KEYBOARD_ACTIONS
     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
 };
-
 /** @}
 */
 
@@ -481,8 +480,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
-// 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
@@ -491,8 +488,8 @@ enum wxPG_KEYBOARD_ACTIONS
 #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
@@ -785,9 +782,9 @@ public:
     /**
         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. */
@@ -832,6 +829,14 @@ public:
     /** Returns background colour of margin. */
     wxColour GetMarginColour() const { return m_colMargin; }
 
+    /**
+        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 cell background colour of a property. */
     wxColour GetPropertyBackgroundColour( wxPGPropArg id ) const;
 
@@ -933,15 +938,6 @@ public:
         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);
 
@@ -1089,7 +1085,7 @@ public:
     */
     unsigned int GetCommonValueCount() const
     {
-        return m_commonValues.size();
+        return (unsigned int) m_commonValues.size();
     }
 
     /** Returns label of given common value.
@@ -1185,16 +1181,9 @@ public:
                             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;
 
-    /** Adjusts given position if topCtrlWnd is child of clipper window.
-    */
-    bool AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y );
-
     wxWindow* GetPrimaryEditor() const
     {
         return GetEditorControl();
@@ -1226,11 +1215,25 @@ public:
     // Mostly useful for page switching.
     void SwitchState( wxPropertyGridPageState* pNewState );
 
-    /** Pass this function to Connect calls in propertyclass::CreateEditor.
+    /**
+        When creating custom property editors, connect required editor events to
+        this function. For instance:
+
+        @code
+            control->Connect(control->GetId(), wxEVT_COMMAND_TEXT_UPDATED,
+                             wxEventHandler(wxPropertyGrid::OnCustomEditorEvent),
+                             NULL, propgrid);
+        @endcode
+
+        @remarks You should never need to call this function directly!
+
+        @see wxPGEditor::CreateControls(), wxEvtHandler::Connect()
     */
-    void OnCustomEditorEvent( wxCommandEvent &event );
+    void OnCustomEditorEvent( wxEvent &event );
 
     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++; }
@@ -1239,9 +1242,6 @@ public:
     void OnComboItemPaint( wxPGCustomComboControl* pCb,int item,wxDC& dc,
                            wxRect& rect,int flags );
 
-    // Used by simple check box for keyboard navigation
-    void SendNavigationKeyEvent( int dir );
-
     /** Standardized double-to-string conversion.
     */
     static void DoubleToString( wxString& target,
@@ -1276,12 +1276,6 @@ public:
     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.
@@ -1359,7 +1353,21 @@ protected:
     */
     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.
@@ -1407,8 +1415,6 @@ protected:
     wxBitmap            *m_doubleBuffer;
 #endif
 
-    wxArrayPtrVoid      *m_windowsToDelete;
-
     /** Local time ms when control was created. */
     wxLongLong          m_timeCreated;
 
@@ -1484,9 +1490,6 @@ protected:
 
     int                 m_fontHeight;  // Height of the font.
 
-    // Base keycode for triggering push button.
-    int                 m_pushButKeyCode;
-
     /** m_splitterx when drag began. */
     int                 m_startingSplitterX;
 
@@ -1544,12 +1547,6 @@ protected:
 
     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;
 
@@ -1626,11 +1623,13 @@ protected:
 
     // Array of background colour brushes.
     wxArrayPtrVoid      m_arrBgBrushes;
+
     // Array of foreground colours.
     wxArrayPtrVoid      m_arrFgCols;
 
     // labels when properties use common values
-    wxArrayPtrVoid      m_commonValues;
+    wxVector<wxPGCommonValue*>  m_commonValues;
+
     // Which cv selection really sets value to unspecified?
     int                 m_cvUnspecified;
 
@@ -1655,8 +1654,6 @@ protected:
     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
@@ -1665,9 +1662,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 );
-    void HandleKeyEvent( wxKeyEvent &event );
-    // Handle TAB and ESCAPE in control
-    bool HandleChildKey( wxKeyEvent& event );
+    void HandleKeyEvent( wxKeyEvent &event, bool fromChild );
 
     void OnMouseEntry( wxMouseEvent &event );
 
@@ -1684,7 +1679,6 @@ protected:
     void OnMouseMoveChild( wxMouseEvent &event );
     void OnMouseUpChild( wxMouseEvent &event );
     void OnChildKeyDown( wxKeyEvent &event );
-    void OnChildKeyUp( wxKeyEvent &event );
 
     void OnCaptureChange( wxMouseCaptureChangedEvent &event );
 
@@ -1764,6 +1758,9 @@ protected:
 
     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 );
@@ -1802,7 +1799,7 @@ protected:
     int CacheColour( const wxColour& colour );
 
     // 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 );
 
@@ -1828,11 +1825,8 @@ protected:
 
 private:
 
-    bool ButtonTriggerKeyTest( wxKeyEvent &event );
+    bool ButtonTriggerKeyTest( int action, wxKeyEvent& event );
 
-#endif // DOXYGEN_SHOULD_SKIP_THIS
-
-private:
     DECLARE_EVENT_TABLE()
 #endif // #ifndef SWIG
 };
@@ -1860,7 +1854,7 @@ inline int wxPGProperty::GetDisplayedCommonValueCount() const
     {
         wxPropertyGrid* pg = GetGrid();
         if ( pg )
-            return pg->GetCommonValueCount();
+            return (int) pg->GetCommonValueCount();
     }
     return 0;
 }
@@ -2192,12 +2186,6 @@ protected:
 //    #undef const wxString&
 #endif
 
-// Doxygen special
-#ifdef DOXYGEN
-    #include "wx/propgrid/editor.h"
-    #include "wx/propgrid/manager.h"
-#endif
-
 // -----------------------------------------------------------------------
 
 #endif