X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cb0f3ec17199b078f2d16565f944a5c83edc452a..713c7336f2c96b1deddd24ec38b2a094705635b9:/src/propgrid/editors.cpp diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 8607c44f28..e22b376018 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -6,7 +6,7 @@ // Created: 2007-04-14 // RCS-ID: $Id$ // Copyright: (c) Jaakko Salli -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". @@ -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; @@ -262,7 +262,10 @@ void wxPGEditor::SetControlAppearance( wxPropertyGrid* pg, } } - wxVisualAttributes vattrs = ctrl->GetClassDefaultAttributes(); + // Do not make the mistake of calling GetClassDefaultAttributes() + // here. It is static, while GetDefaultAttributes() is virtual + // and the correct one to use. + wxVisualAttributes vattrs = ctrl->GetDefaultAttributes(); // Foreground colour const wxColour& fgCol = cell.GetFgCol(); @@ -298,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), @@ -844,6 +848,10 @@ void wxPropertyGrid::OnComboItemPaint( const wxPGComboBox* pCb, else { renderFlags |= wxPGCellRenderer::ChoicePopup; + + // For consistency, always use normal font when drawing drop down + // items + dc.SetFont(GetFont()); } // If not drawing a selected popup item, then give property's @@ -979,6 +987,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(); @@ -1390,12 +1404,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 ) { @@ -1498,8 +1512,7 @@ END_EVENT_TABLE() wxSimpleCheckBox::~wxSimpleCheckBox() { - delete ms_doubleBuffer; - ms_doubleBuffer = NULL; + wxDELETE(ms_doubleBuffer); } wxBitmap* wxSimpleCheckBox::ms_doubleBuffer = NULL; @@ -1519,14 +1532,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 ) @@ -1573,6 +1586,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; @@ -1616,7 +1632,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() ) { @@ -1629,7 +1644,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, @@ -1715,8 +1730,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 ) { @@ -1756,25 +1773,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); + } } } } @@ -1885,6 +1918,13 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, } #endif + // This code is repeated from DoSelectProperty(). However, font boldness + // must be set before margin is set up below in FixPosForTextCtrl(). + if ( forColumn == 1 && + prop->HasFlag(wxPG_PROP_MODIFIED) && + HasFlag(wxPG_BOLD_MODIFIED) ) + tc->SetFont( m_captionFont ); + // Center the control vertically if ( !hasSpecialSize ) FixPosForTextCtrl(tc, forColumn);