X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fc72fab6c65b688cb3c4c96798629195f6e82bae..47583ac10327986031e89c13b75238fc6f66381c:/src/propgrid/editors.cpp diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index dfc6fdf817..100209eed2 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -71,16 +71,12 @@ #define wxPG_TEXTCTRL_AND_BUTTON_SPACING 4 #else #define wxPG_TEXTCTRL_AND_BUTTON_SPACING 2 -#endif +#endif #define wxPG_BUTTON_SIZEDEC 0 #include "wx/odcombo.h" -#ifdef __WXMSW__ - #include "wx/msw/private.h" -#endif - // ----------------------------------------------------------------------- #if defined(__WXMSW__) @@ -144,13 +140,14 @@ // for odcombo #ifdef __WXMAC__ #define wxPG_CHOICEXADJUST -3 // required because wxComboCtrl reserves 3pixels for wxTextCtrl's focus ring -#define wxPG_CHOICEYADJUST -3 +#define wxPG_CHOICEYADJUST -3 #else #define wxPG_CHOICEXADJUST 0 #define wxPG_CHOICEYADJUST 0 #endif -#define ODCB_CUST_PAINT_MARGIN 6 // Number added to image width for SetCustomPaintWidth +// Number added to image width for SetCustomPaintWidth +#define ODCB_CUST_PAINT_MARGIN 6 // Milliseconds to wait for two mouse-ups after focus inorder // to trigger a double-click. @@ -288,12 +285,7 @@ void wxPGTextCtrlEditor::UpdateControl( wxPGProperty* property, wxWindow* ctrl ) // // 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 + tc->SetMargins(0); } // Provided so that, for example, ComboBox editor can use the same code @@ -566,7 +558,7 @@ public: wxPropertyGrid* GetGrid() const { - wxPropertyGrid* pg = wxDynamicCast(GetParent()->GetParent(), + wxPropertyGrid* pg = wxDynamicCast(GetParent(), wxPropertyGrid); wxASSERT(pg); return pg; @@ -582,13 +574,16 @@ public: return rect.width; } - virtual void PositionTextCtrl( int WXUNUSED(textCtrlXAdjust), + virtual void PositionTextCtrl( int textCtrlXAdjust, int WXUNUSED(textCtrlYAdjust) ) { wxPropertyGrid* pg = GetGrid(); + #ifdef wxPG_TEXTCTRLXADJUST + textCtrlXAdjust = wxPG_TEXTCTRLXADJUST - + (wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1) - 1, + #endif wxOwnerDrawnComboBox::PositionTextCtrl( - wxPG_TEXTCTRLXADJUST - - (wxPG_XBEFOREWIDGET+wxPG_CONTROL_MARGIN+1) - 1, + textCtrlXAdjust, pg->GetSpacingY() + 2 ); } @@ -791,23 +786,28 @@ bool wxPGChoiceEditor_SetCustomPaintWidth( wxPropertyGrid* propGrid, wxPGComboBo wxPGProperty* property = propGrid->GetSelectedProperty(); wxASSERT( property ); + wxSize imageSize; + bool res; + if ( cmnVal >= 0 ) { // Yes, a common value is being selected property->SetCommonValue( cmnVal ); - wxSize imageSize = propGrid->GetCommonValue(cmnVal)-> + imageSize = propGrid->GetCommonValue(cmnVal)-> GetRenderer()->GetImageSize(property, 1, cmnVal); - if ( imageSize.x ) imageSize.x += ODCB_CUST_PAINT_MARGIN; - cb->SetCustomPaintWidth( imageSize.x ); - return false; + res = false; } else { - wxSize imageSize = propGrid->GetImageSize(property, -1); - if ( imageSize.x ) imageSize.x += ODCB_CUST_PAINT_MARGIN; - cb->SetCustomPaintWidth( imageSize.x ); - return true; + imageSize = propGrid->GetImageSize(property, -1); + res = true; } + + if ( imageSize.x ) + imageSize.x += ODCB_CUST_PAINT_MARGIN; + cb->SetCustomPaintWidth( imageSize.x ); + + return res; } // CreateControls calls this with CB_READONLY in extraStyle @@ -877,7 +877,7 @@ wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid, odcbFlags); cb->SetButtonPosition(si.y,0,wxRIGHT); - cb->SetTextIndent(wxPG_XBEFORETEXT-1); + cb->SetMargins(wxPG_XBEFORETEXT-1); wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, property->GetCommonValue() ); @@ -966,7 +966,7 @@ bool wxPGChoiceEditor::OnEvent( wxPropertyGrid* propGrid, wxPGProperty* property return false; } } - return wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, cmnValIndex ); + return wxPGChoiceEditor_SetCustomPaintWidth( propGrid, cb, cmnValIndex ); } return false; } @@ -1377,7 +1377,7 @@ void wxSimpleCheckBox::SetValue( int value ) wxCommandEvent evt(wxEVT_COMMAND_CHECKBOX_CLICKED,GetParent()->GetId()); - wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent(); + wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent(); wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) ); propGrid->HandleCustomEditorEvent(evt); } @@ -1413,7 +1413,7 @@ wxPGWindowList wxPGCheckBoxEditor::CreateControls( wxPropertyGrid* propGrid, cb->m_state |= wxSCB_STATE_CHECKED; // Makes sure wxPG_EVT_CHANGING etc. is sent for this initial - // click + // click propGrid->ChangePropertyValue(property, wxPGVariant_Bool(cb->m_state)); } @@ -1528,9 +1528,6 @@ wxWindow* wxPropertyGrid::GetEditorControl() const void wxPropertyGrid::CorrectEditorWidgetSizeX() { - if ( m_selColumn == -1 ) - return; - int secWid = 0; int newSplitterx = m_pState->DoGetSplitterPosition(m_selColumn-1); int newWidth = newSplitterx + m_pState->m_colWidths[m_selColumn]; @@ -1573,10 +1570,7 @@ void wxPropertyGrid::CorrectEditorWidgetSizeX() void wxPropertyGrid::CorrectEditorWidgetPosY() { - if ( m_selColumn == -1 ) - return; - - if ( GetSelection() && (m_wndEditor || m_wndEditor2) ) + if ( GetSelection() && (m_wndEditor || m_wndEditor2) ) { wxRect r = GetEditorWidgetRect(GetSelection(), m_selColumn); @@ -1603,7 +1597,9 @@ void wxPropertyGrid::CorrectEditorWidgetPosY() // Fixes position of wxTextCtrl-like control (wxSpinCtrl usually // fits into that category as well). -void wxPropertyGrid::FixPosForTextCtrl( wxWindow* ctrl, const wxPoint& offset ) +void wxPropertyGrid::FixPosForTextCtrl( wxWindow* ctrl, + unsigned int WXUNUSED(forColumn), + const wxPoint& offset ) { // Center the control vertically wxRect finalPos = ctrl->GetRect(); @@ -1616,7 +1612,14 @@ void wxPropertyGrid::FixPosForTextCtrl( wxWindow* ctrl, const wxPoint& offset ) finalPos.y += y_adj; finalPos.height -= (y_adj+sz_dec); - const int textCtrlXAdjust = wxPG_TEXTCTRLXADJUST; +#ifndef wxPG_TEXTCTRLXADJUST + int textCtrlXAdjust = wxPG_XBEFORETEXT - 1; + + wxTextCtrl* tc = static_cast(ctrl); + tc->SetMargins(0); +#else + int textCtrlXAdjust = wxPG_TEXTCTRLXADJUST; +#endif finalPos.x += textCtrlXAdjust; finalPos.width -= textCtrlXAdjust; @@ -1634,7 +1637,8 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, const wxString& value, wxWindow* secondary, int extraStyle, - int maxLen ) + int maxLen, + unsigned int forColumn ) { wxWindowID id = wxPG_SUBID1; wxPGProperty* prop = GetSelection(); @@ -1642,7 +1646,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, int tcFlags = wxTE_PROCESS_ENTER | extraStyle; - if ( prop->HasFlag(wxPG_PROP_READONLY) ) + if ( prop->HasFlag(wxPG_PROP_READONLY) && forColumn == 1 ) tcFlags |= wxTE_READONLY; wxPoint p(pos.x,pos.y); @@ -1653,7 +1657,11 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, s.x -= 8; #endif - // Take button into acccount + // For label editors, trim the size to allow better splitter grabbing + if ( forColumn != 1 ) + s.x -= 2; + + // Take button into acccount if ( secondary ) { s.x -= (secondary->GetSize().x + wxPG_TEXTCTRL_AND_BUTTON_SPACING); @@ -1678,10 +1686,16 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, #endif SetupTextCtrlValue(value); tc->Create(ctrlParent,id,value, p, s,tcFlags); - + // Center the control vertically if ( !hasSpecialSize ) - FixPosForTextCtrl(tc); + FixPosForTextCtrl(tc, forColumn); + + if ( forColumn != 1 ) + { + tc->SetBackgroundColour(m_colSelBack); + tc->SetForegroundColour(m_colSelFore); + } #ifdef __WXMSW__ tc->Show(); @@ -1726,7 +1740,7 @@ wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize p.x = pos.x + sz.x - but->GetSize().x - 2; but->Move(p); -#else +#else wxSize s(sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2), sz.y-(wxPG_BUTTON_SIZEDEC*2)+(wxPG_NAT_BUTTON_BORDER_Y*2));