X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/53ba104ecfe8bbaef5d1d186298863b360b14d34..c363ead1e206e599d6564ac939ac7342d165e0e3:/src/propgrid/editors.cpp diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 8e0e2e7b15..f7822f01de 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -68,7 +68,7 @@ // How many pixels between textctrl and button #ifdef __WXMAC__ - #define wxPG_TEXTCTRL_AND_BUTTON_SPACING 8 + #define wxPG_TEXTCTRL_AND_BUTTON_SPACING 4 #else #define wxPG_TEXTCTRL_AND_BUTTON_SPACING 2 #endif @@ -143,8 +143,8 @@ // for odcombo #ifdef __WXMAC__ -#define wxPG_CHOICEXADJUST 0 -#define wxPG_CHOICEYADJUST -3 +#define wxPG_CHOICEXADJUST -3 // required because wxComboCtrl reserves 3pixels for wxTextCtrl's focus ring +#define wxPG_CHOICEYADJUST -3 #else #define wxPG_CHOICEXADJUST 0 #define wxPG_CHOICEYADJUST 0 @@ -236,7 +236,8 @@ wxPGWindowList wxPGTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid, return (wxWindow*) NULL; if ( !property->IsValueUnspecified() ) - text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE); + text = property->GetValueAsString(property->HasFlag(wxPG_PROP_READONLY) ? + 0 : wxPG_EDITABLE_VALUE); int flags = 0; if ( (property->GetFlags() & wxPG_PROP_PASSWORD) && @@ -282,9 +283,18 @@ void wxPGTextCtrlEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) else s = property->GetDisplayedString(); - tc->SetValue(s); -} + tc->SetValue(s); + // + // Fix indentation, just in case (change in font boldness is one good + // reason). +#if defined(__WXMSW__) && !defined(__WXWINCE__) + ::SendMessage(GetHwndOf(tc), + EM_SETMARGINS, + EC_LEFTMARGIN | EC_RIGHTMARGIN, + MAKELONG(0, 0)); +#endif +} // Provided so that, for example, ComboBox editor can use the same code // (multiple inheritance would get way too messy). @@ -527,31 +537,37 @@ public: name ) ) return false; - m_dclickProcessor = new wxPGDoubleClickProcessor(this, GetGrid()->GetSelection() ); + m_dclickProcessor = new + wxPGDoubleClickProcessor( this, GetGrid()->GetSelection() ); PushEventHandler(m_dclickProcessor); return true; } - virtual void OnDrawItem( wxDC& dc, const wxRect& rect, int item, int flags ) const + virtual void OnDrawItem( wxDC& dc, + const wxRect& rect, + int item, + int flags ) const { wxPropertyGrid* pg = GetGrid(); - pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,dc,(wxRect&)rect,flags); + pg->OnComboItemPaint( this, item, &dc, (wxRect&)rect, flags ); } + virtual wxCoord OnMeasureItem( size_t item ) const { wxPropertyGrid* pg = GetGrid(); wxRect rect; rect.x = -1; rect.width = 0; - pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,*((wxDC*)NULL),rect,0); + pg->OnComboItemPaint( this, item, NULL, rect, 0 ); return rect.height; } wxPropertyGrid* GetGrid() const { - wxPropertyGrid* pg = wxDynamicCast(GetParent()->GetParent(),wxPropertyGrid); + wxPropertyGrid* pg = wxDynamicCast(GetParent()->GetParent(), + wxPropertyGrid); wxASSERT(pg); return pg; } @@ -562,15 +578,17 @@ public: wxRect rect; rect.x = -1; rect.width = -1; - pg->OnComboItemPaint((wxPGCustomComboControl*)this,item,*((wxDC*)NULL),rect,0); + pg->OnComboItemPaint( this, item, NULL, rect, 0 ); return rect.width; } - virtual void PositionTextCtrl( int WXUNUSED(textCtrlXAdjust), int WXUNUSED(textCtrlYAdjust) ) + virtual void PositionTextCtrl( int WXUNUSED(textCtrlXAdjust), + int WXUNUSED(textCtrlYAdjust) ) { wxPropertyGrid* pg = GetGrid(); wxOwnerDrawnComboBox::PositionTextCtrl( - wxPG_TEXTCTRLXADJUST - (wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1) - 1, + wxPG_TEXTCTRLXADJUST - + (wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1) - 1, pg->GetSpacingY() + 2 ); } @@ -581,14 +599,12 @@ private: }; -void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, +void wxPropertyGrid::OnComboItemPaint( const wxPGComboBox* pCb, int item, - wxDC& dc, + wxDC* pDc, wxRect& rect, int flags ) { - wxPGComboBox* pCb = (wxPGComboBox*)pCc; - // Sanity check wxASSERT( IsKindOf(CLASSINFO(wxPropertyGrid)) ); @@ -620,7 +636,7 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, else { if ( !p->IsValueUnspecified() ) - text = p->GetValueString(0); + text = p->GetValueAsString(0); } } @@ -668,21 +684,24 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, if ( (flags & wxODCB_PAINTING_CONTROL) ) paintdata.m_choiceItem = -1; - if ( &dc ) - dc.SetBrush(*wxWHITE_BRUSH); + if ( pDc ) + pDc->SetBrush(*wxWHITE_BRUSH); if ( rect.x >= 0 ) { // // DrawItem call + wxDC& dc = *pDc; wxPoint pt(rect.x + wxPG_CONTROL_MARGIN - wxPG_CHOICEXADJUST - 1, rect.y + 1); - int renderFlags = 0; + int renderFlags = wxPGCellRenderer::DontUseCellColours; if ( flags & wxODCB_PAINTING_CONTROL ) renderFlags |= wxPGCellRenderer::Control; + else + renderFlags |= wxPGCellRenderer::ChoicePopup; if ( flags & wxODCB_PAINTING_SELECTED ) renderFlags |= wxPGCellRenderer::Selected; @@ -759,6 +778,7 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, { // // MeasureItem call + wxDC& dc = *pDc; p->OnCustomPaint( dc, rect, paintdata ); rect.height = paintdata.m_drawnHeight + 2; @@ -868,15 +888,6 @@ wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid, else cb->SetSelection( -1 ); - // Connect event handling - wxWindowID id = cb->GetId(); - propGrid->Connect(id, wxEVT_COMMAND_COMBOBOX_SELECTED, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - propGrid->Connect(id, wxEVT_COMMAND_TEXT_UPDATED, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - propGrid->Connect(id, wxEVT_COMMAND_TEXT_ENTER, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - #ifdef __WXMSW__ cb->Show(); #endif @@ -1020,7 +1031,7 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(ComboBox, void wxPGComboBoxEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) const { wxOwnerDrawnComboBox* cb = (wxOwnerDrawnComboBox*)ctrl; - cb->SetValue(property->GetValueString(wxPG_EDITABLE_VALUE)); + cb->SetValue(property->GetValueAsString(wxPG_EDITABLE_VALUE)); // TODO: If string matches any selection, then select that. } @@ -1289,7 +1300,7 @@ void wxSimpleCheckBox::SetValue( int value ) wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent(); wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) ); - propGrid->OnCustomEditorEvent(evt); + propGrid->HandleCustomEditorEvent(evt); } @@ -1392,14 +1403,6 @@ wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid, cb->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); - cb->Connect( wxPG_SUBID1, wxEVT_LEFT_DOWN, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propGrid ); - - cb->Connect( wxPG_SUBID1, wxEVT_LEFT_DCLICK, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propGrid ); - if ( property->GetChoiceSelection() > 0 && !property->IsValueUnspecified() ) cb->m_state = 1; @@ -1583,6 +1586,9 @@ void wxPropertyGrid::CorrectEditorWidgetSizeX() void wxPropertyGrid::CorrectEditorWidgetPosY() { + if ( m_selColumn == -1 ) + return; + if ( m_selected && (m_wndEditor || m_wndEditor2) ) { wxRect r = GetEditorWidgetRect(m_selected, m_selColumn); @@ -1702,13 +1708,6 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, if ( maxLen > 0 ) tc->SetMaxLength( maxLen ); - // Connect event handling - id = ed->GetId(); - this->Connect(id, wxEVT_COMMAND_TEXT_UPDATED, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - this->Connect(id, wxEVT_COMMAND_TEXT_ENTER, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - return (wxWindow*) ed; } @@ -1770,11 +1769,6 @@ wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize if ( selected->HasFlag(wxPG_PROP_READONLY) ) but->Disable(); - // Connect event handling - id = but->GetId(); - this->Connect(id, wxEVT_COMMAND_BUTTON_CLICKED, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - return but; } @@ -1801,7 +1795,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrlAndButton( const wxPoint& pos, wxString text; if ( !property->IsValueUnspecified() ) - text = property->GetValueString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE); + text = property->GetValueAsString(property->HasFlag(wxPG_PROP_READONLY)?0:wxPG_EDITABLE_VALUE); return GenerateEditorTextCtrl(pos,sz,text,but,property->m_maxLen); } @@ -1872,17 +1866,10 @@ wxPGMultiButton::wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz ) SetBackgroundColour(pg->GetCellBackgroundColour()); } -void wxPGMultiButton::Finalize( wxPropertyGrid* propGrid, const wxPoint& pos ) +void wxPGMultiButton::Finalize( wxPropertyGrid* WXUNUSED(propGrid), + const wxPoint& pos ) { Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y ); - - // Connect event handling - for ( unsigned int i=0; iConnect(id, wxEVT_COMMAND_BUTTON_CLICKED, - wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent)); - } } int wxPGMultiButton::GenId( int id ) const