]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/propgrid.cpp
Use correct style for the dialog shown by generic file/dir pickers.
[wxWidgets.git] / src / propgrid / propgrid.cpp
index d74291cfd3370ecbce1f3f25aae19423d809e81a..7e38cfb439ae605ab610ae78cd24596ab7ef2013 100644 (file)
@@ -348,8 +348,8 @@ void wxPropertyGrid::Init1()
     m_mouseSide = 16;
     m_editorFocused = 0;
 
-    // Must set empty but valid data
-    m_unspecifiedAppearance.SetEmptyData();
+    // Set up default unspecified value 'colour'
+    m_unspecifiedAppearance.SetFgCol(*wxLIGHT_GREY);
 
     // Set default keys
     AddActionTrigger( wxPG_ACTION_NEXT_PROPERTY, WXK_RIGHT );
@@ -1564,6 +1564,9 @@ void wxPropertyGrid::PrepareAfterItemsAdded()
         Sort(wxPG_SORT_TOP_LEVEL_ONLY);
 
     RecalculateVirtualSize();
+
+    // Fix editor position
+    CorrectEditorWidgetPosY();
 }
 
 // -----------------------------------------------------------------------
@@ -2809,10 +2812,22 @@ void wxPropertyGrid::DoSetSplitterPosition( int newxpos,
 
 // -----------------------------------------------------------------------
 
-void wxPropertyGrid::CenterSplitter( bool enableAutoCentering )
+void wxPropertyGrid::ResetColumnSizes( bool enableAutoResizing )
+{
+    wxPropertyGridPageState* state = m_pState;
+    if ( state )
+        state->ResetColumnSizes(0);
+
+    if ( enableAutoResizing && HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
+        m_pState->m_dontCenterSplitter = false;
+}
+
+// -----------------------------------------------------------------------
+
+void wxPropertyGrid::CenterSplitter( bool enableAutoResizing )
 {
     SetSplitterPosition( m_width/2 );
-    if ( enableAutoCentering && HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
+    if ( enableAutoResizing && HasFlag(wxPG_SPLITTER_AUTO_CENTER) )
         m_pState->m_dontCenterSplitter = false;
 }
 
@@ -3716,6 +3731,13 @@ private:
 
         m_propGrid->HandleCustomEditorEvent(event);
 
+        //
+        // NB: On wxMSW, a wxTextCtrl with wxTE_PROCESS_ENTER
+        //     may beep annoyingly if that event is skipped
+        //     and passed to parent event handler.
+        if ( event.GetEventType() == wxEVT_COMMAND_TEXT_ENTER )
+            return true;
+
         return wxEvtHandler::ProcessEvent(event);
     }
 
@@ -4520,9 +4542,10 @@ bool wxPropertyGrid::SendEvent( int eventType, wxPGProperty* p,
             evt.SetCanVeto(true);
     }
 
+    wxPropertyGridEvent* prevProcessedEvent = m_processedEvent;
     m_processedEvent = &evt;
     m_eventObject->HandleWindowEvent(evt);
-    m_processedEvent = NULL;
+    m_processedEvent = prevProcessedEvent;
 
     return evt.WasVetoed();
 }
@@ -4623,7 +4646,7 @@ bool wxPropertyGrid::HandleMouseClick( int x, unsigned int y, wxMouseEvent &even
                         // Double-clicking the splitter causes auto-centering
                         if ( m_pState->GetColumnCount() <= 2 )
                         {
-                            CenterSplitter( true );
+                            ResetColumnSizes( true );
 
                             SendEvent(wxEVT_PG_COL_DRAGGING,
                                       m_propHover,
@@ -5037,8 +5060,14 @@ bool wxPropertyGrid::HandleMouseUp( int x, unsigned int WXUNUSED(y),
                   wxPG_SEL_NOVALIDATE,
                   (unsigned int)m_draggedSplitter);
 
-        // Disable splitter auto-centering
-        state->m_dontCenterSplitter = true;
+        // Disable splitter auto-centering (but only if moved any -
+        // otherwise we end up disabling auto-center even after a
+        // recentering double-click).
+        int posDiff = abs(m_startingSplitterX - 
+                          GetSplitterPosition(m_draggedSplitter));
+
+        if ( posDiff > 1 )
+            state->m_dontCenterSplitter = true;
 
         // This is necessary to return cursor
         if ( m_iFlags & wxPG_FL_MOUSE_CAPTURED )
@@ -5618,6 +5647,27 @@ void wxPropertyGrid::OnIdle( wxIdleEvent& WXUNUSED(event) )
         if ( tlp != m_tlp )
             OnTLPChanging(tlp);
     }
+
+    //
+    // Resolve pending property removals
+    if ( m_deletedProperties.size() > 0 )
+    {
+        wxArrayPGProperty& arr = m_deletedProperties;
+        for ( unsigned int i=0; i<arr.size(); i++ )
+        {
+            DeleteProperty(arr[i]);
+        }
+        arr.clear();
+    }
+    if ( m_removedProperties.size() > 0 )
+    {
+        wxArrayPGProperty& arr = m_removedProperties;
+        for ( unsigned int i=0; i<arr.size(); i++ )
+        {
+            RemoveProperty(arr[i]);
+        }
+        arr.clear();
+    }
 }
 
 bool wxPropertyGrid::IsEditorFocused() const