]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/editors.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / propgrid / editors.h
index 54bcdda98a92bc4c863458523f39501df78bb186..2f64ce10b0e0e0b7241882ec9ebbd083e5d8d549 100644 (file)
@@ -4,16 +4,21 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2007-04-14
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2007-04-14
-// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Copyright:   (c) Jaakko Salli
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_PROPGRID_EDITORS_H_
 #define _WX_PROPGRID_EDITORS_H_
 
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_PROPGRID_EDITORS_H_
 #define _WX_PROPGRID_EDITORS_H_
 
+#include "wx/defs.h"
+
 #if wxUSE_PROPGRID
 
 #if wxUSE_PROPGRID
 
+class WXDLLIMPEXP_FWD_PROPGRID wxPGCell;
+class WXDLLIMPEXP_FWD_PROPGRID wxPGProperty;
+class WXDLLIMPEXP_FWD_PROPGRID wxPropertyGrid;
+
 // -----------------------------------------------------------------------
 // wxPGWindowList contains list of editor windows returned by CreateControls.
 
 // -----------------------------------------------------------------------
 // wxPGWindowList contains list of editor windows returned by CreateControls.
 
@@ -30,7 +35,6 @@ public:
     wxWindow*   m_primary;
     wxWindow*   m_secondary;
 
     wxWindow*   m_primary;
     wxWindow*   m_secondary;
 
-#ifndef SWIG
     wxPGWindowList( wxWindow* a )
     {
         m_primary = a;
     wxPGWindowList( wxWindow* a )
     {
         m_primary = a;
@@ -41,7 +45,6 @@ public:
         m_primary = a;
         m_secondary = b;
     };
         m_primary = a;
         m_secondary = b;
     };
-#endif
 };
 
 // -----------------------------------------------------------------------
 };
 
 // -----------------------------------------------------------------------
@@ -75,9 +78,7 @@ public:
 */
 class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject
 {
 */
 class WXDLLIMPEXP_PROPGRID wxPGEditor : public wxObject
 {
-#ifndef SWIG
     DECLARE_ABSTRACT_CLASS(wxPGEditor)
     DECLARE_ABSTRACT_CLASS(wxPGEditor)
-#endif
 public:
 
     /** Constructor. */
 public:
 
     /** Constructor. */
@@ -114,17 +115,10 @@ public:
         @remarks
         - Primary control shall use id wxPG_SUBID1, and secondary (button)
           control shall use wxPG_SUBID2.
         @remarks
         - Primary control shall use id wxPG_SUBID1, and secondary (button)
           control shall use wxPG_SUBID2.
-        - Implementation shoud connect all necessary events to the
-          wxPropertyGrid::OnCustomEditorEvent. For Example:
-            @code
-                // Relays wxEVT_COMMAND_TEXT_UPDATED events of primary editor
-                // control to the OnEvent.
-                control->Connect(control->GetId(), wxEVT_COMMAND_TEXT_UPDATED,
-                                 wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent),
-                                 NULL, propgrid);
-            @endcode
-          OnCustomEditorEvent will then forward events, first to
-          wxPGEditor::OnEvent() and then to wxPGProperty::OnEvent().
+        - Unlike in previous version of wxPropertyGrid, it is no longer
+          necessary to call wxEvtHandler::Connect() for interesting editor
+          events. Instead, all events from control are now automatically
+          forwarded to wxPGEditor::OnEvent() and wxPGProperty::OnEvent().
     */
     virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
                                           wxPGProperty* property,
     */
     virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid,
                                           wxPGProperty* property,
@@ -154,15 +148,14 @@ public:
         (see wxPGProperty::OnEvent for more information).
 
         @remarks wxPropertyGrid will automatically unfocus the editor when
         (see wxPGProperty::OnEvent for more information).
 
         @remarks wxPropertyGrid will automatically unfocus the editor when
-                wxEVT_COMMAND_TEXT_ENTER is received and when it results in
+                wxEVT_TEXT_ENTER is received and when it results in
                 property value being modified. This happens regardless of
                 property value being modified. This happens regardless of
-                editor type (ie. behavior is same for any wxTextCtrl and
+                editor type (ie. behaviour is same for any wxTextCtrl and
                 wxComboBox based editor).
     */
     virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
         wxWindow* wnd_primary, wxEvent& event ) const = 0;
 
                 wxComboBox based editor).
     */
     virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property,
         wxWindow* wnd_primary, wxEvent& event ) const = 0;
 
-#if !defined(SWIG) || defined(CREATE_VCW)
     /** Returns value from control, via parameter 'variant'.
         Usually ends up calling property's StringToValue or IntToValue.
         Returns true if value was different.
     /** Returns value from control, via parameter 'variant'.
         Usually ends up calling property's StringToValue or IntToValue.
         Returns true if value was different.
@@ -170,11 +163,36 @@ public:
     virtual bool GetValueFromControl( wxVariant& variant,
                                       wxPGProperty* property,
                                       wxWindow* ctrl ) const;
     virtual bool GetValueFromControl( wxVariant& variant,
                                       wxPGProperty* property,
                                       wxWindow* ctrl ) const;
-#endif
 
 
-    /** Sets value in control to unspecified. */
+    /**
+        Sets new appearance for the control. Default implementation
+        sets foreground colour, background colour, font, plus text
+        for wxTextCtrl and wxComboCtrl.
+
+        @param appearance
+            New appearance to be applied.
+
+        @param oldAppearance
+            Previously applied appearance. Used to detect which
+            control attributes need to be changed (e.g. so we only
+            change background colour if really needed).
+
+        @param unspecified
+            @true if the new appearance represents an unspecified
+            property value.
+    */
+    virtual void SetControlAppearance( wxPropertyGrid* pg,
+                                       wxPGProperty* property,
+                                       wxWindow* ctrl,
+                                       const wxPGCell& appearance,
+                                       const wxPGCell& oldAppearance,
+                                       bool unspecified ) const;
+
+    /**
+        Sets value in control to unspecified.
+    */
     virtual void SetValueToUnspecified( wxPGProperty* property,
     virtual void SetValueToUnspecified( wxPGProperty* property,
-                                        wxWindow* ctrl ) const = 0;
+                                        wxWindow* ctrl ) const;
 
     /** Sets control's value specifically from string. */
     virtual void SetControlStringValue( wxPGProperty* property,
 
     /** Sets control's value specifically from string. */
     virtual void SetControlStringValue( wxPGProperty* property,
@@ -221,7 +239,7 @@ wxString CLASSNAME::GetName() const \
 { \
     return wxS(#EDITOR); \
 } \
 { \
     return wxS(#EDITOR); \
 } \
-wxPGEditor* wxPGEditor_##EDITOR = (wxPGEditor*) NULL;
+wxPGEditor* wxPGEditor_##EDITOR = NULL;
 
 
 //
 
 
 //
@@ -230,9 +248,7 @@ wxPGEditor* wxPGEditor_##EDITOR = (wxPGEditor*) NULL;
 
 class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor
 {
 
 class WXDLLIMPEXP_PROPGRID wxPGTextCtrlEditor : public wxPGEditor
 {
-#ifndef SWIG
     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor)
     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlEditor)
-#endif
 public:
     wxPGTextCtrlEditor() {}
     virtual ~wxPGTextCtrlEditor();
 public:
     wxPGTextCtrlEditor() {}
     virtual ~wxPGTextCtrlEditor();
@@ -250,8 +266,6 @@ public:
     virtual bool GetValueFromControl( wxVariant& variant,
                                       wxPGProperty* property,
                                       wxWindow* ctrl ) const;
     virtual bool GetValueFromControl( wxVariant& variant,
                                       wxPGProperty* property,
                                       wxWindow* ctrl ) const;
-    virtual void SetValueToUnspecified( wxPGProperty* property,
-                                        wxWindow* ctrl ) const;
 
     virtual wxString GetName() const;
 
 
     virtual wxString GetName() const;
 
@@ -277,9 +291,7 @@ public:
 
 class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor
 {
 
 class WXDLLIMPEXP_PROPGRID wxPGChoiceEditor : public wxPGEditor
 {
-#ifndef SWIG
     DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor)
     DECLARE_DYNAMIC_CLASS(wxPGChoiceEditor)
-#endif
 public:
     wxPGChoiceEditor() {}
     virtual ~wxPGChoiceEditor();
 public:
     wxPGChoiceEditor() {}
     virtual ~wxPGChoiceEditor();
@@ -326,9 +338,7 @@ public:
 
 class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor
 {
 
 class WXDLLIMPEXP_PROPGRID wxPGComboBoxEditor : public wxPGChoiceEditor
 {
-#ifndef SWIG
     DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor)
     DECLARE_DYNAMIC_CLASS(wxPGComboBoxEditor)
-#endif
 public:
     wxPGComboBoxEditor() {}
     virtual ~wxPGComboBoxEditor();
 public:
     wxPGComboBoxEditor() {}
     virtual ~wxPGComboBoxEditor();
@@ -354,9 +364,6 @@ public:
 };
 
 
 };
 
 
-// Exclude classes from being able to be derived from in wxPython bindings
-#ifndef SWIG
-
 class WXDLLIMPEXP_PROPGRID wxPGChoiceAndButtonEditor : public wxPGChoiceEditor
 {
 public:
 class WXDLLIMPEXP_PROPGRID wxPGChoiceAndButtonEditor : public wxPGChoiceEditor
 {
 public:
@@ -388,8 +395,6 @@ public:
     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor)
 };
 
     DECLARE_DYNAMIC_CLASS(wxPGTextCtrlAndButtonEditor)
 };
 
-#endif  // !SWIG
-
 
 #if wxPG_INCLUDE_CHECKBOX
 
 
 #if wxPG_INCLUDE_CHECKBOX
 
@@ -399,9 +404,7 @@ public:
 //
 class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor
 {
 //
 class WXDLLIMPEXP_PROPGRID wxPGCheckBoxEditor : public wxPGEditor
 {
-#ifndef SWIG
     DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor)
     DECLARE_DYNAMIC_CLASS(wxPGCheckBoxEditor)
-#endif
 public:
     wxPGCheckBoxEditor() {}
     virtual ~wxPGCheckBoxEditor();
 public:
     wxPGCheckBoxEditor() {}
     virtual ~wxPGCheckBoxEditor();
@@ -441,7 +444,7 @@ public:
 // Editor class registeration macro (mostly for internal use)
 
 #define wxPGRegisterEditorClass(EDITOR) \
 // Editor class registeration macro (mostly for internal use)
 
 #define wxPGRegisterEditorClass(EDITOR) \
-    if ( wxPGEditor_##EDITOR == (wxPGEditor*) NULL ) \
+    if ( wxPGEditor_##EDITOR == NULL ) \
     { \
         wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
                 new wxPG##EDITOR##Editor ); \
     { \
         wxPGEditor_##EDITOR = wxPropertyGrid::RegisterEditorClass( \
                 new wxPG##EDITOR##Editor ); \
@@ -463,9 +466,7 @@ public:
 */
 class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject
 {
 */
 class WXDLLIMPEXP_PROPGRID wxPGEditorDialogAdapter : public wxObject
 {
-#ifndef SWIG
     DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter)
     DECLARE_ABSTRACT_CLASS(wxPGEditorDialogAdapter)
-#endif
 public:
     wxPGEditorDialogAdapter()
         : wxObject()
 public:
     wxPGEditorDialogAdapter()
         : wxObject()
@@ -514,6 +515,7 @@ class WXDLLIMPEXP_PROPGRID wxPGMultiButton : public wxWindow
 {
 public:
     wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
 {
 public:
     wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz );
+    virtual ~wxPGMultiButton() {}
 
     wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; }
     const wxWindow* GetButton( unsigned int i ) const
 
     wxWindow* GetButton( unsigned int i ) { return (wxWindow*) m_buttons[i]; }
     const wxWindow* GetButton( unsigned int i ) const
@@ -541,6 +543,8 @@ public:
 
 protected:
 
 
 protected:
 
+    void DoAddButton( wxWindow* button, const wxSize& sz );
+
     int GenId( int id ) const;
 
     wxArrayPtrVoid  m_buttons;
     int GenId( int id ) const;
 
     wxArrayPtrVoid  m_buttons;