]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/editors.cpp
non PCH compilation
[wxWidgets.git] / src / propgrid / editors.cpp
index cdff0592d0df11d116ef12dbd0a372a86a181347..950539a507cee8a19abf1bacacedf6b172ab2b83 100644 (file)
@@ -212,7 +212,7 @@ void wxPGEditor::SetControlAppearance( wxPropertyGrid* pg,
                                        wxWindow* ctrl,
                                        const wxPGCell& cell,
                                        const wxPGCell& oCell,
-                                       bool WXUNUSED(unspecified) ) const
+                                       bool unspecified ) const
 {
     // Get old editor appearance
     wxTextCtrl* tc = NULL;
@@ -301,7 +301,8 @@ void wxPGEditor::SetControlAppearance( wxPropertyGrid* pg,
     }
 
     // Also call the old SetValueToUnspecified()
-    SetValueToUnspecified(property, ctrl);
+    if ( unspecified )
+        SetValueToUnspecified(property, ctrl);
 }
 
 void wxPGEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(property),
@@ -982,6 +983,12 @@ wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid,
                                                 const wxSize& sz,
                                                 long extraStyle ) const
 {
+    // Since it is not possible (yet) to create a read-only combo box in
+    // the same sense that wxTextCtrl is read-only, simply do not create
+    // the control in this case.
+    if ( property->HasFlag(wxPG_PROP_READONLY) )
+        return NULL;
+
     const wxPGChoices& choices = property->GetChoices();
     wxString defString;
     int index = property->GetChoiceSelection();
@@ -1393,12 +1400,12 @@ const int wxSCB_SETVALUE_CYCLE = 2;
 
 
 static void DrawSimpleCheckBox( wxDC& dc, const wxRect& rect, int box_hei,
-                                int state, const wxColour& lineCol )
+                                int state )
 {
     // Box rectangle.
     wxRect r(rect.x+wxPG_XBEFORETEXT,rect.y+((rect.height-box_hei)/2),
              box_hei,box_hei);
-    wxColour useCol = lineCol;
+    wxColour useCol = dc.GetTextForeground();
 
     if ( state & wxSCB_STATE_UNSPECIFIED )
     {
@@ -1522,14 +1529,14 @@ void wxSimpleCheckBox::OnPaint( wxPaintEvent& WXUNUSED(event) )
     dc.SetPen( bgcol );
     dc.DrawRectangle( rect );
 
-    wxColour txcol = GetForegroundColour();
+    dc.SetTextForeground(GetForegroundColour());
 
     int state = m_state;
     if ( !(state & wxSCB_STATE_UNSPECIFIED) &&
          GetFont().GetWeight() == wxBOLD )
         state |= wxSCB_STATE_BOLD;
 
-    DrawSimpleCheckBox(dc,rect,m_boxHeight,state,txcol);
+    DrawSimpleCheckBox(dc, rect, m_boxHeight, state);
 }
 
 void wxSimpleCheckBox::OnLeftClick( wxMouseEvent& event )
@@ -1576,6 +1583,9 @@ wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid,
                                                    const wxPoint& pos,
                                                    const wxSize& size ) const
 {
+    if ( property->HasFlag(wxPG_PROP_READONLY) )
+        return NULL;
+
     wxPoint pt = pos;
     pt.x -= wxPG_XBEFOREWIDGET;
     wxSize sz = size;
@@ -1619,7 +1629,6 @@ void wxPGCheckBoxEditor::DrawValue( wxDC& dc, const wxRect& rect,
                                     const wxString& WXUNUSED(text) ) const
 {
     int state = wxSCB_STATE_UNCHECKED;
-    wxColour rectCol = dc.GetTextForeground();
 
     if ( !property->IsValueUnspecified() )
     {
@@ -1632,7 +1641,7 @@ void wxPGCheckBoxEditor::DrawValue( wxDC& dc, const wxRect& rect,
         state |= wxSCB_STATE_UNSPECIFIED;
     }
 
-    DrawSimpleCheckBox(dc, rect, dc.GetCharHeight(), state, rectCol);
+    DrawSimpleCheckBox(dc, rect, dc.GetCharHeight(), state);
 }
 
 void wxPGCheckBoxEditor::UpdateControl( wxPGProperty* property,
@@ -1718,8 +1727,10 @@ wxWindow* wxPropertyGrid::GetEditorControl() const
 void wxPropertyGrid::CorrectEditorWidgetSizeX()
 {
     int secWid = 0;
-    int newSplitterx = m_pState->DoGetSplitterPosition(m_selColumn-1);
-    int newWidth = newSplitterx + m_pState->m_colWidths[m_selColumn];
+
+    // Use fixed selColumn 1 for main editor widgets
+    int newSplitterx = m_pState->DoGetSplitterPosition(0);
+    int newWidth = newSplitterx + m_pState->m_colWidths[1];
 
     if ( m_wndEditor2 )
     {
@@ -1759,25 +1770,41 @@ void wxPropertyGrid::CorrectEditorWidgetSizeX()
 
 void wxPropertyGrid::CorrectEditorWidgetPosY()
 {
-    if ( GetSelection() && (m_wndEditor || m_wndEditor2) )
-    {
-        wxRect r = GetEditorWidgetRect(GetSelection(), m_selColumn);
+    wxPGProperty* selected = GetSelection();
 
-        if ( m_wndEditor )
+    if ( selected )
+    {
+        if ( m_labelEditor )
         {
-            wxPoint pos = m_wndEditor->GetPosition();
+            wxRect r = GetEditorWidgetRect(selected, m_selColumn);
+            wxPoint pos = m_labelEditor->GetPosition();
 
             // Calculate y offset
             int offset = pos.y % m_lineHeight;
 
-            m_wndEditor->Move(pos.x, r.y + offset);
+            m_labelEditor->Move(pos.x, r.y + offset);
         }
 
-        if ( m_wndEditor2 )
+        if ( m_wndEditor || m_wndEditor2 ) 
         {
-            wxPoint pos = m_wndEditor2->GetPosition();
+            wxRect r = GetEditorWidgetRect(selected, 1);
 
-            m_wndEditor2->Move(pos.x, r.y);
+            if ( m_wndEditor )
+            {
+                wxPoint pos = m_wndEditor->GetPosition();
+
+                // Calculate y offset
+                int offset = pos.y % m_lineHeight;
+
+                m_wndEditor->Move(pos.x, r.y + offset);
+            }
+
+            if ( m_wndEditor2 )
+            {
+                wxPoint pos = m_wndEditor2->GetPosition();
+
+                m_wndEditor2->Move(pos.x, r.y);
+            }
         }
     }
 }