]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/manager.cpp
fix wxEVT_SPIN_XXX definitions in a nicer (compatible with new events) way
[wxWidgets.git] / src / propgrid / manager.cpp
index 16c4f459d7268b5770b6833c8812166584e69dff..27f4e81ac793ecb65fa2f40314fe8d9caaa48152 100644 (file)
@@ -4,7 +4,7 @@
 // Author:      Jaakko Salli
 // Modified by:
 // Created:     2005-01-14
-// RCS-ID:      $Id:
+// RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
@@ -41,9 +41,9 @@
 // This define is necessary to prevent macro clearing
 #define __wxPG_SOURCE_FILE__
 
-#include <wx/propgrid/propgrid.h>
+#include "wx/propgrid/propgrid.h"
 
-#include <wx/propgrid/manager.h>
+#include "wx/propgrid/manager.h"
 
 
 #define wxPG_MAN_ALTERNATE_BASE_ID          11249 // Needed for wxID_ANY madnesss
@@ -72,7 +72,7 @@
 // wxPropertyGridManager
 // -----------------------------------------------------------------------
 
-const wxChar *wxPropertyGridManagerNameStr = wxT("wxPropertyGridManager");
+const char wxPropertyGridManagerNameStr[] = "wxPropertyGridManager";
 
 
 // Categoric Mode Icon
@@ -207,12 +207,18 @@ void wxPropertyGridPage::SetSplitterPosition( int splitterPos, int col )
         DoSetSplitterPosition(splitterPos, col, false);
 }
 
-void wxPropertyGridPage::DoSetSplitterPosition( int pos, int splitterColumn, bool allPages )
+void wxPropertyGridPage::DoSetSplitterPosition( int pos,
+                                                int splitterColumn,
+                                                bool allPages,
+                                                bool fromAutoCenter )
 {
     if ( allPages && m_manager->GetPageCount() )
         m_manager->SetSplitterPosition( pos, splitterColumn );
     else
-        DoSetSplitterPositionThisPage( pos, splitterColumn );
+        wxPropertyGridPageState::DoSetSplitterPosition( pos,
+                                                        splitterColumn,
+                                                        allPages,
+                                                        fromAutoCenter );
 }
 
 // -----------------------------------------------------------------------
@@ -229,7 +235,7 @@ IMPLEMENT_CLASS(wxPropertyGridManager, wxPanel)
 #define ID_ADVTOOLBAR_OFFSET        1
 #define ID_ADVHELPCAPTION_OFFSET    2
 #define ID_ADVHELPCONTENT_OFFSET    3
-#define ID_ADVBUTTON_OFFSET         4
+//#define ID_ADVBUTTON_OFFSET         4
 #define ID_ADVTBITEMSBASE_OFFSET    5   // Must be last.
 
 // -----------------------------------------------------------------------
@@ -259,7 +265,7 @@ wxPropertyGridManager::wxPropertyGridManager( wxWindow *parent,
                                               const wxPoint& pos,
                                               const wxSize& size,
                                               long style,
-                                              const wxChar* name )
+                                              const wxString& name )
     : wxPanel()
 {
     Init1();
@@ -273,7 +279,7 @@ bool wxPropertyGridManager::Create( wxWindow *parent,
                                     const wxPoint& pos,
                                     const wxSize& size,
                                     long style,
-                                    const wxChar* name )
+                                    const wxString& name )
 {
 
     bool res = wxPanel::Create( parent, id, pos, size,
@@ -292,16 +298,16 @@ bool wxPropertyGridManager::Create( wxWindow *parent,
 void wxPropertyGridManager::Init1()
 {
 
-    //m_pPropGrid = (wxPropertyGrid*) NULL;
+    //m_pPropGrid = NULL;
     m_pPropGrid = CreatePropertyGrid();
 
 #if wxUSE_TOOLBAR
-    m_pToolbar = (wxToolBar*) NULL;
+    m_pToolbar = NULL;
 #endif
-    m_pTxtHelpCaption = (wxStaticText*) NULL;
-    m_pTxtHelpContent = (wxStaticText*) NULL;
+    m_pTxtHelpCaption = NULL;
+    m_pTxtHelpContent = NULL;
 
-    m_emptyPage = (wxPropertyGridPage*) NULL;
+    m_emptyPage = NULL;
 
     m_selPage = -1;
 
@@ -371,7 +377,7 @@ void wxPropertyGridManager::Init2( int style )
 #ifdef __WXMAC__
    // Smaller controls on Mac
    SetWindowVariant(wxWINDOW_VARIANT_SMALL);
-#endif 
+#endif
 
     // Create propertygrid.
     m_pPropGrid->Create(this,baseId,wxPoint(0,0),csz,
@@ -505,9 +511,18 @@ void wxPropertyGridManager::Thaw()
 
 void wxPropertyGridManager::SetWindowStyleFlag( long style )
 {
+    int oldWindowStyle = GetWindowStyleFlag();
+
     wxWindow::SetWindowStyleFlag( style );
     m_pPropGrid->SetWindowStyleFlag( (m_pPropGrid->GetWindowStyleFlag()&~(wxPG_MAN_PASS_FLAGS_MASK)) |
                                    (style&wxPG_MAN_PASS_FLAGS_MASK) );
+
+    // Need to re-position windows?
+    if ( (oldWindowStyle & (wxPG_TOOLBAR|wxPG_DESCRIPTION)) !=
+         (style & (wxPG_TOOLBAR|wxPG_DESCRIPTION)) )
+    {
+        RecreateControls();
+    }
 }
 
 // -----------------------------------------------------------------------
@@ -989,20 +1004,11 @@ void wxPropertyGridManager::RepaintSplitter( wxDC& dc, int new_splittery, int ne
 
 // -----------------------------------------------------------------------
 
-void wxPropertyGridManager::RefreshHelpBox( int new_splittery, int new_width, int new_height )
+void wxPropertyGridManager::UpdateDescriptionBox( int new_splittery, int new_width, int new_height )
 {
-    //if ( new_splittery == m_splitterY && new_width == m_width )
-    //    return;
-
     int use_hei = new_height;
     use_hei--;
 
-    //wxRendererNative::Get().DrawSplitterSash(this,dc,
-        //wxSize(width,m_splitterHeight),new_splittery,wxHORIZONTAL);
-
-    //wxRendererNative::Get().DrawSplitterBorder(this,dc,
-    //    wxRect(0,new_splittery,new_width,m_splitterHeight));
-
     // Fix help control positions.
     int cap_hei = m_pPropGrid->m_fontHeight;
     int cap_y = new_splittery+m_splitterHeight+5;
@@ -1035,8 +1041,8 @@ void wxPropertyGridManager::RefreshHelpBox( int new_splittery, int new_width, in
         }
     }
 
-    wxClientDC dc(this);
-    RepaintSplitter( dc, new_splittery, new_width, new_height, true );
+    wxRect r(0, new_splittery, new_width, new_height-new_splittery);
+    RefreshRect(r);
 
     m_splitterY = new_splittery;
 
@@ -1105,7 +1111,7 @@ void wxPropertyGridManager::RecalculatePositions( int width, int height )
 
         propgridBottomY = new_splittery;
 
-        RefreshHelpBox( new_splittery, width, height );
+        UpdateDescriptionBox( new_splittery, width, height );
     }
 
     if ( m_iFlags & wxPG_FL_INITIALIZED )
@@ -1126,9 +1132,12 @@ void wxPropertyGridManager::SetDescBoxHeight( int ht, bool refresh )
 {
     if ( m_windowStyle & wxPG_DESCRIPTION )
     {
-        m_nextDescBoxSize = ht;
-        if ( refresh )
-            RecalculatePositions(m_width, m_height);
+        if ( ht != GetDescBoxHeight() )
+        {
+            m_nextDescBoxSize = ht;
+            if ( refresh )
+                RecalculatePositions(m_width, m_height);
+        }
     }
 }
 
@@ -1136,7 +1145,7 @@ void wxPropertyGridManager::SetDescBoxHeight( int ht, bool refresh )
 
 int wxPropertyGridManager::GetDescBoxHeight() const
 {
-    return GetClientSize().y - m_splitterY;
+    return GetClientSize().y - m_splitterY - m_splitterHeight;
 }
 
 // -----------------------------------------------------------------------
@@ -1254,7 +1263,7 @@ void wxPropertyGridManager::RecreateControls()
         // No toolbar.
         if ( m_pToolbar )
             m_pToolbar->Destroy();
-        m_pToolbar = (wxToolBar*) NULL;
+        m_pToolbar = NULL;
     }
 #endif
 
@@ -1265,16 +1274,27 @@ void wxPropertyGridManager::RecreateControls()
 
         if ( !m_pTxtHelpCaption )
         {
-            m_pTxtHelpCaption = new wxStaticText (this,baseId+ID_ADVHELPCAPTION_OFFSET,wxEmptyString);
+            m_pTxtHelpCaption = new wxStaticText(this,
+                                                 baseId+ID_ADVHELPCAPTION_OFFSET,
+                                                 wxT(""),
+                                                 wxDefaultPosition,
+                                                 wxDefaultSize,
+                                                 wxALIGN_LEFT|wxST_NO_AUTORESIZE);
             m_pTxtHelpCaption->SetFont( m_pPropGrid->m_captionFont );
-            m_pTxtHelpCaption->SetCursor ( *wxSTANDARD_CURSOR );
+            m_pTxtHelpCaption->SetCursor( *wxSTANDARD_CURSOR );
         }
         if ( !m_pTxtHelpContent )
         {
-            m_pTxtHelpContent = new wxStaticText (this,baseId+ID_ADVHELPCONTENT_OFFSET,
-                wxEmptyString,wxDefaultPosition,wxDefaultSize,wxALIGN_LEFT|wxST_NO_AUTORESIZE);
-            m_pTxtHelpContent->SetCursor ( *wxSTANDARD_CURSOR );
+            m_pTxtHelpContent = new wxStaticText(this,
+                                                 baseId+ID_ADVHELPCONTENT_OFFSET,
+                                                 wxT(""),
+                                                 wxDefaultPosition,
+                                                 wxDefaultSize,
+                                                 wxALIGN_LEFT|wxST_NO_AUTORESIZE);
+            m_pTxtHelpContent->SetCursor( *wxSTANDARD_CURSOR );
         }
+
+        SetDescribedProperty(GetSelection());
     }
     else
     {
@@ -1284,12 +1304,12 @@ void wxPropertyGridManager::RecreateControls()
         if ( m_pTxtHelpCaption )
             m_pTxtHelpCaption->Destroy();
 
-        m_pTxtHelpCaption = (wxStaticText*) NULL;
+        m_pTxtHelpCaption = NULL;
 
         if ( m_pTxtHelpContent )
             m_pTxtHelpContent->Destroy();
 
-        m_pTxtHelpContent = (wxStaticText*) NULL;
+        m_pTxtHelpContent = NULL;
     }
 
     int width, height;
@@ -1349,13 +1369,25 @@ void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event )
         {
             // Categorized mode.
             if ( m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES )
+            {
+                if ( !m_pPropGrid->HasInternalFlag(wxPG_FL_CATMODE_AUTO_SORT) )
+                    m_pPropGrid->m_windowStyle &= ~wxPG_AUTO_SORT;
                 m_pPropGrid->EnableCategories( true );
+            }
         }
         else if ( id == ( baseId + ID_ADVTBITEMSBASE_OFFSET + 1 ) )
         {
             // Alphabetic mode.
             if ( !(m_pPropGrid->m_windowStyle & wxPG_HIDE_CATEGORIES) )
+            {
+                if ( m_pPropGrid->HasFlag(wxPG_AUTO_SORT) )
+                    m_pPropGrid->SetInternalFlag(wxPG_FL_CATMODE_AUTO_SORT);
+                else
+                    m_pPropGrid->ClearInternalFlag(wxPG_FL_CATMODE_AUTO_SORT);
+
+                m_pPropGrid->m_windowStyle |= wxPG_AUTO_SORT;
                 m_pPropGrid->EnableCategories( false );
+            }
         }
         else
         {
@@ -1382,7 +1414,7 @@ void wxPropertyGridManager::OnToolbarClick( wxCommandEvent &event )
             {
 
                 // Event dispatching must be last.
-                m_pPropGrid->SendEvent(  wxEVT_PG_PAGE_CHANGED, (wxPGProperty*) NULL );
+                m_pPropGrid->SendEvent(  wxEVT_PG_PAGE_CHANGED, NULL );
 
             }
             else
@@ -1432,8 +1464,7 @@ void wxPropertyGridManager::SetDescription( const wxString& label, const wxStrin
         m_pTxtHelpCaption->SetSize(-1,osz1.y);
         m_pTxtHelpContent->SetSize(-1,osz2.y);
 
-        if ( (m_iFlags & wxPG_FL_DESC_REFRESH_REQUIRED) || (osz2.x<(m_width-10)) )
-            RefreshHelpBox( m_splitterY, m_width, m_height );
+        UpdateDescriptionBox( m_splitterY, m_width, m_height );
     }
 }
 
@@ -1449,8 +1480,7 @@ void wxPropertyGridManager::SetDescribedProperty( wxPGProperty* p )
         }
         else
         {
-            m_pTxtHelpCaption->SetLabel(wxEmptyString);
-            m_pTxtHelpContent->SetLabel(wxEmptyString);
+            SetDescription( wxEmptyString, wxEmptyString );
         }
     }
 }
@@ -1551,7 +1581,7 @@ void wxPropertyGridManager::OnMouseMove( wxMouseEvent &event )
                 m_splitterY = sy;
 
                 m_pPropGrid->SetSize( m_width, m_splitterY - m_pPropGrid->GetPosition().y );
-                RefreshHelpBox( m_splitterY, m_width, m_height );
+                UpdateDescriptionBox( m_splitterY, m_width, m_height );
 
                 m_extraHeight -= change;
                 InvalidateBestSize();
@@ -1646,7 +1676,7 @@ void wxPropertyGridManager::SetSplitterPosition( int pos, int splitterColumn )
     for ( i=0; i<GetPageCount(); i++ )
     {
         wxPropertyGridPage* page = GetPage(i);
-        page->DoSetSplitterPositionThisPage( pos, splitterColumn );
+        page->DoSetSplitterPosition( pos, splitterColumn, false );
     }
 
     m_pPropGrid->SetInternalFlag(wxPG_FL_SPLITTER_PRE_SET);