]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/propgrid.h
Unified meaning of wxTypeIdentifier in RTTI and RTTI-less type info systems; Fixed...
[wxWidgets.git] / include / wx / propgrid / propgrid.h
index e5cb9d741dabcce08ad12a3b0cfe0e26bb4cae79..aa8b8f169cf97feb3cabd197c033a0a52554d95d 100644 (file)
@@ -14,6 +14,7 @@
 
 #if wxUSE_PROPGRID
 
 
 #if wxUSE_PROPGRID
 
+#include "wx/thread.h"
 #include "wx/dcclient.h"
 #include "wx/scrolwin.h"
 #include "wx/tooltip.h"
 #include "wx/dcclient.h"
 #include "wx/scrolwin.h"
 #include "wx/tooltip.h"
@@ -43,6 +44,14 @@ public:
     wxPGGlobalVarsClass();
     ~wxPGGlobalVarsClass();
 
     wxPGGlobalVarsClass();
     ~wxPGGlobalVarsClass();
 
+#if wxUSE_THREADS
+    // Critical section for handling the globals. Generally it is not needed
+    // since GUI code is supposed to be in single thread. However,
+    // we do want the user to be able to convey wxPropertyGridEvents to other
+    // threads.
+    wxCriticalSection   m_critSect;
+#endif
+
     // Used by advprops, but here to make things easier.
     wxString            m_pDefaultImageWildcard;
 
     // Used by advprops, but here to make things easier.
     wxString            m_pDefaultImageWildcard;
 
@@ -420,7 +429,7 @@ public:
     /**
         Returns reference to pending value.
     */
     /**
         Returns reference to pending value.
     */
-    const wxVariant& GetValue() const
+    wxVariant& GetValue()
     {
         wxASSERT(m_pValue);
         return *m_pValue;
     {
         wxASSERT(m_pValue);
         return *m_pValue;
@@ -540,8 +549,6 @@ enum wxPG_KEYBOARD_ACTIONS
 #define wxPG_FL_IN_SELECT_PROPERTY          0x00100000
 // Set when help string is shown in status bar
 #define wxPG_FL_STRING_IN_STATUSBAR         0x00200000
 #define wxPG_FL_IN_SELECT_PROPERTY          0x00100000
 // Set when help string is shown in status bar
 #define wxPG_FL_STRING_IN_STATUSBAR         0x00200000
-// Splitter position has been custom-set by the user
-#define wxPG_FL_SPLITTER_PRE_SET            0x00400000
 // Validation failed. Clear on modify event.
 #define wxPG_FL_VALIDATION_FAILED           0x00800000
 // Auto sort is enabled (for categorized mode)
 // Validation failed. Clear on modify event.
 #define wxPG_FL_VALIDATION_FAILED           0x00800000
 // Auto sort is enabled (for categorized mode)
@@ -642,10 +649,10 @@ enum wxPG_KEYBOARD_ACTIONS
 class WXDLLIMPEXP_PROPGRID
     wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
 {
 class WXDLLIMPEXP_PROPGRID
     wxPropertyGrid : public wxScrolledWindow, public wxPropertyGridInterface
 {
+    friend class wxPropertyGridEvent;
     friend class wxPropertyGridPageState;
     friend class wxPropertyGridInterface;
     friend class wxPropertyGridManager;
     friend class wxPropertyGridPageState;
     friend class wxPropertyGridInterface;
     friend class wxPropertyGridManager;
-    friend class wxPGCanvas;
 
     DECLARE_DYNAMIC_CLASS(wxPropertyGrid)
 public:
 
     DECLARE_DYNAMIC_CLASS(wxPropertyGrid)
 public:
@@ -804,9 +811,9 @@ public:
         Returns wxWindow that the properties are painted on, and which should
         be used as the parent for editor controls.
     */
         Returns wxWindow that the properties are painted on, and which should
         be used as the parent for editor controls.
     */
-    wxPanel* GetPanel() const
+    wxWindow* GetPanel()
     {
     {
-        return m_canvas;
+        return this;
     }
 
     /** Returns current category caption background colour. */
     }
 
     /** Returns current category caption background colour. */
@@ -1163,7 +1170,7 @@ public:
     void SetSplitterPosition( int newxpos, int col = 0 )
     {
         DoSetSplitterPosition_(newxpos, true, col);
     void SetSplitterPosition( int newxpos, int col = 0 )
     {
         DoSetSplitterPosition_(newxpos, true, col);
-        m_iFlags |= wxPG_FL_SPLITTER_PRE_SET;
+        m_pState->m_isSplitterPreSet = true;
     }
 
     /**
     }
 
     /**
@@ -1613,9 +1620,6 @@ protected:
     wxWindow            *m_wndEditor;
     wxWindow            *m_wndEditor2;
 
     wxWindow            *m_wndEditor;
     wxWindow            *m_wndEditor2;
 
-    /** wxPGCanvas instance. */
-    wxPanel             *m_canvas;
-
 #if wxPG_DOUBLE_BUFFER
     wxBitmap            *m_doubleBuffer;
 #endif
 #if wxPG_DOUBLE_BUFFER
     wxBitmap            *m_doubleBuffer;
 #endif
@@ -1851,6 +1855,9 @@ protected:
     // labels when properties use common values
     wxVector<wxPGCommonValue*>  m_commonValues;
 
     // labels when properties use common values
     wxVector<wxPGCommonValue*>  m_commonValues;
 
+    // array of live events
+    wxVector<wxPropertyGridEvent*>  m_liveEvents;
+
     // Which cv selection really sets value to unspecified?
     int                 m_cvUnspecified;
 
     // Which cv selection really sets value to unspecified?
     int                 m_cvUnspecified;
 
@@ -1869,7 +1876,6 @@ protected:
 
     // main event receivers
     void OnMouseMove( wxMouseEvent &event );
 
     // main event receivers
     void OnMouseMove( wxMouseEvent &event );
-    void OnMouseMoveBottom( wxMouseEvent &event );
     void OnMouseClick( wxMouseEvent &event );
     void OnMouseRightClick( wxMouseEvent &event );
     void OnMouseDoubleClick( wxMouseEvent &event );
     void OnMouseClick( wxMouseEvent &event );
     void OnMouseRightClick( wxMouseEvent &event );
     void OnMouseDoubleClick( wxMouseEvent &event );
@@ -1936,7 +1942,7 @@ protected:
     void CorrectEditorWidgetPosY();
 
     int DoDrawItems( wxDC& dc,
     void CorrectEditorWidgetPosY();
 
     int DoDrawItems( wxDC& dc,
-                     const wxRect* clipRect,
+                     const wxRect* drawRect,
                      bool isBuffered ) const;
 
     /** Draws an expand/collapse (ie. +/-) button.
                      bool isBuffered ) const;
 
     /** Draws an expand/collapse (ie. +/-) button.
@@ -1945,8 +1951,10 @@ protected:
                                      wxPGProperty* property ) const;
 
     /** Draws items from topitemy to bottomitemy */
                                      wxPGProperty* property ) const;
 
     /** Draws items from topitemy to bottomitemy */
-    void DrawItems( wxDC& dc, unsigned int topitemy, unsigned int bottomitemy,
-                    const wxRect* clip_rect = (const wxRect*) NULL );
+    void DrawItems( wxDC& dc,
+                    unsigned int topItemY,
+                    unsigned int bottomItemY,
+                    const wxRect* drawRect = NULL );
 
     // Translate wxKeyEvent to wxPG_ACTION_XXX
     int KeyEventToActions(wxKeyEvent &event, int* pSecond) const;
 
     // Translate wxKeyEvent to wxPG_ACTION_XXX
     int KeyEventToActions(wxKeyEvent &event, int* pSecond) const;
@@ -2215,14 +2223,43 @@ public:
     */
     void Veto( bool veto = true ) { m_wasVetoed = veto; }
 
     */
     void Veto( bool veto = true ) { m_wasVetoed = veto; }
 
-    /** Returns value that is about to be set for wxEVT_PG_CHANGING.
+    /**
+        Returns name of the associated property.
+
+        @remarks Property name is stored in event, so it remains
+                 accessible even after the associated property or
+                 the property grid has been deleted.
+    */
+    wxString GetPropertyName() const
+    {
+        return m_propertyName;
+    }
+
+    /**
+        Returns value of the associated property. Works for all event
+        types, but for wxEVT_PG_CHANGING this member function returns
+        the value that is pending, so you can call Veto() if the
+        value is not satisfactory.
+
+        @remarks Property value is stored in event, so it remains
+                 accessible even after the associated property or
+                 the property grid has been deleted.
+    */
+    wxVariant GetPropertyValue() const
+    {
+        if ( m_validationInfo )
+            return m_validationInfo->GetValue();
+        return m_value;
+    }
+
+    /**
+        Returns value of the associated property.
+
+        @see GetPropertyValue
     */
     */
-    const wxVariant& GetValue() const
+    wxVariant GetValue() const
     {
     {
-        wxASSERT_MSG( m_validationInfo,
-                      "Only call GetValue from a handler "
-                      "of event type that supports it" );
-        return m_validationInfo->GetValue();
+        return GetPropertyValue();
     }
 
     /**
     }
 
     /**
@@ -2262,25 +2299,44 @@ public:
     bool WasVetoed() const { return m_wasVetoed; }
 
     /** Changes the associated property. */
     bool WasVetoed() const { return m_wasVetoed; }
 
     /** Changes the associated property. */
-    void SetProperty( wxPGProperty* p ) { m_property = p; }
+    void SetProperty( wxPGProperty* p )
+    {
+        m_property = p;
+        if ( p )
+            m_propertyName = p->GetName();
+    }
 
 
-    void SetPropertyGrid( wxPropertyGrid* pg ) { m_pg = pg; }
+    void SetPropertyValue( wxVariant value )
+    {
+        m_value = value;
+    }
+
+    void SetPropertyGrid( wxPropertyGrid* pg )
+    {
+        m_pg = pg;
+        OnPropertyGridSet();
+    }
 
     void SetupValidationInfo()
     {
         wxASSERT(m_pg);
         wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
         m_validationInfo = &m_pg->GetValidationInfo();
 
     void SetupValidationInfo()
     {
         wxASSERT(m_pg);
         wxASSERT( GetEventType() == wxEVT_PG_CHANGING );
         m_validationInfo = &m_pg->GetValidationInfo();
+        m_value = m_validationInfo->GetValue();
     }
 
 private:
     void Init();
     }
 
 private:
     void Init();
+    void OnPropertyGridSet();
     DECLARE_DYNAMIC_CLASS(wxPropertyGridEvent)
 
     wxPGProperty*       m_property;
     wxPropertyGrid*     m_pg;
     wxPGValidationInfo* m_validationInfo;
 
     DECLARE_DYNAMIC_CLASS(wxPropertyGridEvent)
 
     wxPGProperty*       m_property;
     wxPropertyGrid*     m_pg;
     wxPGValidationInfo* m_validationInfo;
 
+    wxString            m_propertyName;
+    wxVariant           m_value;
+
     unsigned int        m_column;
 
     bool                m_canVeto;
     unsigned int        m_column;
 
     bool                m_canVeto;
@@ -2407,7 +2463,6 @@ protected:
     #undef wxPG_FL_MOUSE_CAPTURED
     #undef wxPG_FL_INITIALIZED
     #undef wxPG_FL_ACTIVATION_BY_CLICK
     #undef wxPG_FL_MOUSE_CAPTURED
     #undef wxPG_FL_INITIALIZED
     #undef wxPG_FL_ACTIVATION_BY_CLICK
-    #undef wxPG_FL_DONT_CENTER_SPLITTER
     #undef wxPG_SUPPORT_TOOLTIPS
     #undef wxPG_DOUBLE_BUFFER
     #undef wxPG_ICON_WIDTH
     #undef wxPG_SUPPORT_TOOLTIPS
     #undef wxPG_DOUBLE_BUFFER
     #undef wxPG_ICON_WIDTH