]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/propgrid/manager.h
Removed wxPG_DOUBLE_BUFFER constant. Now all wxPG rendering is done double-buffered...
[wxWidgets.git] / include / wx / propgrid / manager.h
index 6ad03bbe3ce634b181787d3cc4e61b007c36ff3f..39752a122206368d52b288db0448c97285b160b6 100644 (file)
@@ -6,12 +6,14 @@
 // Created:     2005-01-14
 // RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_PROPGRID_MANAGER_H_
 #define _WX_PROPGRID_MANAGER_H_
 
+#include "wx/defs.h"
+
 #if wxUSE_PROPGRID
 
 #include "wx/propgrid/propgrid.h"
 #include "wx/button.h"
 #include "wx/textctrl.h"
 #include "wx/dialog.h"
+#include "wx/headerctrl.h"
 
 // -----------------------------------------------------------------------
 
 #ifndef SWIG
-extern WXDLLIMPEXP_PROPGRID const wxChar *wxPropertyGridManagerNameStr;
+extern WXDLLIMPEXP_DATA_PROPGRID(const char) wxPropertyGridManagerNameStr[];
 #endif
 
 /** @class wxPropertyGridPage
@@ -65,9 +68,7 @@ class WXDLLIMPEXP_PROPGRID wxPropertyGridPage : public wxEvtHandler,
                                                 public wxPropertyGridPageState
 {
     friend class wxPropertyGridManager;
-#ifndef SWIG
     DECLARE_CLASS(wxPropertyGridPage)
-#endif
 public:
 
     wxPropertyGridPage();
@@ -127,7 +128,7 @@ public:
     */
     int GetToolId() const
     {
-        return m_id;
+        return m_toolId;
     }
 
     /** Do any member initialization in this method.
@@ -163,14 +164,7 @@ protected:
     */
     virtual void DoSetSplitterPosition( int pos,
                                         int splitterColumn = 0,
-                                        bool allPages = false );
-
-    /** Propagate to other pages.
-    */
-    void DoSetSplitterPositionThisPage( int pos, int splitterColumn = 0 )
-    {
-        wxPropertyGridPageState::DoSetSplitterPosition( pos, splitterColumn );
-    }
+                                        int flags = wxPG_SPLITTER_REFRESH );
 
     /** Page label (may be referred as name in some parts of documentation).
         Can be set in constructor, or passed in
@@ -178,24 +172,27 @@ protected:
     */
     wxString                m_label;
 
-#ifndef SWIG
-
     //virtual bool ProcessEvent( wxEvent& event );
 
     wxPropertyGridManager*  m_manager;
 
-    int                     m_id;  // toolbar index
+    // Toolbar tool id. Note that this is only valid when the tool bar
+    // exists.
+    int                     m_toolId;
 
 private:
     bool                    m_isDefault; // is this base page object?
 
-private:
     DECLARE_EVENT_TABLE()
-#endif
 };
 
 // -----------------------------------------------------------------------
 
+#if wxUSE_HEADERCTRL
+class wxPGHeaderCtrl;
+#endif
+
+
 /** @class wxPropertyGridManager
 
     wxPropertyGridManager is an efficient multi-page version of wxPropertyGrid,
@@ -218,39 +215,18 @@ private:
 class WXDLLIMPEXP_PROPGRID
     wxPropertyGridManager : public wxPanel, public wxPropertyGridInterface
 {
-#ifndef SWIG
     DECLARE_CLASS(wxPropertyGridManager)
-#endif
     friend class wxPropertyGridPage;
 public:
 
-#ifdef SWIG
-    %pythonAppend wxPropertyGridManager {
-        self._setOORInfo(self)
-        self.DoDefaultTypeMappings()
-        self.edited_objects = {}
-        self.DoDefaultValueTypeMappings()
-        if not hasattr(self.__class__,'_vt2setter'):
-            self.__class__._vt2setter = {}
-    }
-    %pythonAppend wxPropertyGridManager() ""
-
-    wxPropertyGridManager( wxWindow *parent, wxWindowID id = wxID_ANY,
-                           const wxPoint& pos = wxDefaultPosition,
-                           const wxSize& size = wxDefaultSize,
-                           long style = wxPGMAN_DEFAULT_STYLE,
-                           const wxChar* name =
-                                wxPyPropertyGridManagerNameStr );
-    %RenameCtor(PrePropertyGridManager,  wxPropertyGridManager());
-
-#else
-
+#ifndef SWIG
     /**
         Two step constructor.
         Call Create when this constructor is called to build up the
         wxPropertyGridManager.
       */
     wxPropertyGridManager();
+#endif
 
     /** The default constructor. The styles to be used are styles valid for
         the wxWindow.
@@ -260,13 +236,11 @@ public:
                            const wxPoint& pos = wxDefaultPosition,
                            const wxSize& size = wxDefaultSize,
                            long style = wxPGMAN_DEFAULT_STYLE,
-                           const wxChar* name = wxPropertyGridManagerNameStr );
+                           const wxString& name = wxPropertyGridManagerNameStr );
 
     /** Destructor */
     virtual ~wxPropertyGridManager();
 
-#endif
-
     /** Creates new property page. Note that the first page is not created
         automatically.
         @param label
@@ -320,7 +294,7 @@ public:
                  const wxPoint& pos = wxDefaultPosition,
                  const wxSize& size = wxDefaultSize,
                  long style = wxPGMAN_DEFAULT_STYLE,
-                 const wxChar* name = wxPropertyGridManagerNameStr );
+                 const wxString& name = wxPropertyGridManagerNameStr );
 
     /**
         Enables or disables (shows/hides) categories according to parameter
@@ -448,10 +422,12 @@ public:
     */
     int GetPageByState( const wxPropertyGridPageState* pstate ) const;
 
+protected:
     /** Returns wxPropertyGridPageState of given page, current page's for -1.
     */
     virtual wxPropertyGridPageState* GetPageState( int page ) const;
 
+public:
     /** Returns number of managed pages. */
     size_t GetPageCount() const;
 
@@ -466,6 +442,12 @@ public:
     /** Returns index to currently selected page. */
     int GetSelectedPage() const { return m_selPage; }
 
+    /** Alias for GetSelection(). */
+    wxPGProperty* GetSelectedProperty() const
+    {
+        return GetSelection();
+    }
+
     /** Shortcut for GetGrid()->GetSelection(). */
     wxPGProperty* GetSelection() const
     {
@@ -514,6 +496,12 @@ public:
      */
     bool IsPageModified( size_t index ) const;
 
+    /**
+        Returns true if property is selected. Since selection is page
+        based, this function checks every page in the manager.
+    */
+    virtual bool IsPropertySelected( wxPGPropArg id ) const;
+
     virtual void Refresh( bool eraseBackground = true,
                           const wxRect* rect = (const wxRect*) NULL );
 
@@ -551,7 +539,21 @@ public:
         return p->GetParentState()->DoSelectProperty(p, focus);
     }
 
-    /** Sets number of columns on given page (default is current page).
+    /**
+        Sets a column title. Default title for column 0 is "Property",
+        and "Value" for column 1.
+
+        @remarks If header is not shown yet, then calling this
+                 member function will make it visible.
+    */
+    void SetColumnTitle( int idx, const wxString& title );
+
+    /**
+        Sets number of columns on given page (default is current page).
+
+        @remarks If you use header, then you should always use this
+                 member function to set the column count, instead of
+                 ones present in wxPropertyGrid or wxPropertyGridPage.
     */
     void SetColumnCount( int colCount, int page = -1 );
 
@@ -572,31 +574,38 @@ public:
     */
     void SetSplitterLeft( bool subProps = false, bool allPages = true );
 
-    /** Sets splitter position on individual page. */
-    void SetPageSplitterPosition( int page, int pos, int column = 0 )
-    {
-        GetPage(page)->DoSetSplitterPosition( pos, column );
-    }
+    /**
+        Sets splitter position on individual page.
 
-    /** Sets splitter position for all pages.
-        @remarks
-        Splitter position cannot exceed grid size, and therefore setting it
-        during form creation may fail as initial grid size is often smaller
-        than desired splitter position, especially when sizers are being used.
+        @remarks If you use header, then you should always use this
+                 member function to set the splitter position, instead of
+                 ones present in wxPropertyGrid or wxPropertyGridPage.
+    */
+    void SetPageSplitterPosition( int page, int pos, int column = 0 );
+
+    /**
+        Sets splitter position for all pages.
+
+        @remarks Splitter position cannot exceed grid size, and therefore
+                 setting it during form creation may fail as initial grid
+                 size is often smaller than desired splitter position,
+                 especially when sizers are being used.
+
+                 If you use header, then you should always use this
+                 member function to set the splitter position, instead of
+                 ones present in wxPropertyGrid or wxPropertyGridPage.
     */
     void SetSplitterPosition( int pos, int column = 0 );
 
-#ifdef SWIG
-    %pythoncode {
-        def GetValuesFromPage(self,
-                              page,
-                              dict_=None,
-                              as_strings=False,
-                              inc_attributes=False):
-            "Same as GetValues, but returns values from specific page only."
-            "For argument descriptions, see GetValues."
-            return page.GetPropertyValues(dict_, as_strings, inc_attributes)
-    }
+#if wxUSE_HEADERCTRL
+    /**
+        Show or hide the property grid header control. It is hidden
+        by the default.
+
+        @remarks Grid may look better if you use wxPG_NO_INTERNAL_BORDER
+                 window style when showing a header.
+    */
+    void ShowHeader(bool show = true);
 #endif
 
 protected:
@@ -605,20 +614,22 @@ protected:
     // Subclassing helpers
     //
 
-    /** Creates property grid for the manager. Override to use subclassed
-        wxPropertyGrid.
+    /**
+        Creates property grid for the manager. Reimplement in derived class to
+        use subclassed wxPropertyGrid. However, if you do this then you
+        must also use the two-step construction (ie. default constructor and
+        Create() instead of constructor with arguments) when creating the
+        manager.
     */
     virtual wxPropertyGrid* CreatePropertyGrid() const;
 
-    virtual void RefreshProperty( wxPGProperty* p );
-
 public:
+    virtual void RefreshProperty( wxPGProperty* p );
 
     //
     // Overridden functions - no documentation required.
     //
 
-    virtual wxSize DoGetBestSize() const;
     void SetId( wxWindowID winid );
 
     virtual void Freeze();
@@ -626,12 +637,10 @@ public:
     virtual void SetExtraStyle ( long exStyle );
     virtual bool SetFont ( const wxFont& font );
     virtual void SetWindowStyleFlag ( long style );
+    virtual bool Reparent( wxWindowBase *newParent );
 
 protected:
-
-public:
-
-#ifndef SWIG
+    virtual wxSize DoGetBestSize() const;
 
     //
     // Event handlers
@@ -646,8 +655,8 @@ public:
     void OnToolbarClick( wxCommandEvent &event );
     void OnResize( wxSizeEvent& event );
     void OnPropertyGridSelect( wxPropertyGridEvent& event );
+    void OnPGColDrag( wxPropertyGridEvent& event );
 
-protected:
 
     wxPropertyGrid* m_pPropGrid;
 
@@ -655,12 +664,17 @@ protected:
 
 #if wxUSE_TOOLBAR
     wxToolBar*      m_pToolbar;
+#endif
+#if wxUSE_HEADERCTRL
+    wxPGHeaderCtrl* m_pHeaderCtrl;
 #endif
     wxStaticText*   m_pTxtHelpCaption;
     wxStaticText*   m_pTxtHelpContent;
 
     wxPropertyGridPage*     m_emptyPage;
 
+    wxArrayString   m_columnLabels;
+
     long            m_iFlags;
 
     // Selected page index.
@@ -676,20 +690,22 @@ protected:
 
     int             m_splitterHeight;
 
-    int             m_nextTbInd;
-
     int             m_dragOffset;
 
     wxCursor        m_cursorSizeNS;
 
     int             m_nextDescBoxSize;
 
-    wxWindowID      m_baseId;
+    // Toolbar tool ids for categorized and alphabetic mode selectors.
+    int             m_categorizedModeToolId;
+    int             m_alphabeticModeToolId;
 
     unsigned char   m_dragStatus;
 
     unsigned char   m_onSplitter;
 
+    bool            m_showHeader;
+
     virtual wxPGProperty* DoGetPropertyByName( const wxString& name ) const;
 
     /** Select and displays a given page. */
@@ -705,6 +721,8 @@ protected:
     virtual WXDWORD MSWGetStyle(long flags, WXDWORD *exstyle) const;
 #endif*/
 
+    virtual bool ProcessEvent( wxEvent& event );
+
     /** Recalculates new positions for components, according to the
         given size.
     */
@@ -713,13 +731,12 @@ protected:
     /** (Re)creates/destroys controls, according to the window style bits. */
     void RecreateControls();
 
-    void RefreshHelpBox( int new_splittery, int new_width, int new_height );
+    void UpdateDescriptionBox( int new_splittery, int new_width, int new_height );
 
-    void RepaintSplitter( wxDC& dc,
-                          int new_splittery,
-                          int new_width,
-                          int new_height,
-                          bool desc_too );
+    void RepaintDescBoxDecorations( wxDC& dc,
+                                    int newSplitterY,
+                                    int newWidth,
+                                    int newHeight );
 
     void SetDescribedProperty( wxPGProperty* p );
 
@@ -727,11 +744,8 @@ protected:
     virtual bool SetEditableStateItem( const wxString& name, wxVariant value );
     virtual wxVariant GetEditableStateItem( const wxString& name ) const;
 
-    virtual bool ProcessEvent( wxEvent& event );
-
 private:
     DECLARE_EVENT_TABLE()
-#endif // #ifndef SWIG
 };
 
 // -----------------------------------------------------------------------