X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/939d936402b4ac38310531ed39b4fd05afe29531..7280c8281d44b47213060fb31dd4f2b31032ecc6:/src/propgrid/editors.cpp diff --git a/src/propgrid/editors.cpp b/src/propgrid/editors.cpp index 0cf23e0faa..87ea4c0d88 100644 --- a/src/propgrid/editors.cpp +++ b/src/propgrid/editors.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2007-04-14 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -41,7 +41,6 @@ #include "wx/stattext.h" #include "wx/scrolwin.h" #include "wx/dirdlg.h" - #include "wx/layout.h" #include "wx/sizer.h" #include "wx/textdlg.h" #include "wx/filedlg.h" @@ -59,36 +58,33 @@ // This define is necessary to prevent macro clearing #define __wxPG_SOURCE_FILE__ -#include -#include -#include +#include "wx/propgrid/propgrid.h" +#include "wx/propgrid/editors.h" +#include "wx/propgrid/props.h" #if wxPG_USE_RENDERER_NATIVE - #include + #include "wx/renderer.h" #endif // 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 #define wxPG_BUTTON_SIZEDEC 0 -#include +#include "wx/odcombo.h" #ifdef __WXMSW__ - #include + #include "wx/msw/private.h" #endif // ----------------------------------------------------------------------- #if defined(__WXMSW__) // tested - #define wxPG_NAT_TEXTCTRL_BORDER_X 0 // Unremovable border of native textctrl. - #define wxPG_NAT_TEXTCTRL_BORDER_Y 0 // Unremovable border of native textctrl. - #define wxPG_NAT_BUTTON_BORDER_ANY 1 #define wxPG_NAT_BUTTON_BORDER_X 1 #define wxPG_NAT_BUTTON_BORDER_Y 1 @@ -109,9 +105,6 @@ #define wxPG_CHECKMARK_HADJ (-1) #define wxPG_CHECKMARK_DEFLATE 3 - #define wxPG_NAT_TEXTCTRL_BORDER_X 3 // Unremovable border of native textctrl. - #define wxPG_NAT_TEXTCTRL_BORDER_Y 3 // Unremovable border of native textctrl. - #define wxPG_NAT_BUTTON_BORDER_ANY 1 #define wxPG_NAT_BUTTON_BORDER_X 1 #define wxPG_NAT_BUTTON_BORDER_Y 1 @@ -126,14 +119,11 @@ #define wxPG_CHECKMARK_HADJ 0 #define wxPG_CHECKMARK_DEFLATE 0 - #define wxPG_NAT_TEXTCTRL_BORDER_X 0 // Unremovable border of native textctrl. - #define wxPG_NAT_TEXTCTRL_BORDER_Y 0 // Unremovable border of native textctrl. - #define wxPG_NAT_BUTTON_BORDER_ANY 0 #define wxPG_NAT_BUTTON_BORDER_X 0 #define wxPG_NAT_BUTTON_BORDER_Y 0 - #define wxPG_TEXTCTRLYADJUST 3 + #define wxPG_TEXTCTRLYADJUST 0 #else // defaults @@ -143,9 +133,6 @@ #define wxPG_CHECKMARK_HADJ 0 #define wxPG_CHECKMARK_DEFLATE 0 - #define wxPG_NAT_TEXTCTRL_BORDER_X 0 // Unremovable border of native textctrl. - #define wxPG_NAT_TEXTCTRL_BORDER_Y 0 // Unremovable border of native textctrl. - #define wxPG_NAT_BUTTON_BORDER_ANY 0 #define wxPG_NAT_BUTTON_BORDER_X 0 #define wxPG_NAT_BUTTON_BORDER_Y 0 @@ -154,16 +141,14 @@ #endif -#if (!wxPG_NAT_TEXTCTRL_BORDER_X && !wxPG_NAT_TEXTCTRL_BORDER_Y) - #define wxPG_ENABLE_CLIPPER_WINDOW 0 -#else - #define wxPG_ENABLE_CLIPPER_WINDOW 1 -#endif - - // for odcombo +#ifdef __WXMAC__ +#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 +#endif #define ODCB_CUST_PAINT_MARGIN 6 // Number added to image width for SetCustomPaintWidth @@ -182,6 +167,11 @@ wxPGEditor::~wxPGEditor() { } +wxString wxPGEditor::GetName() const +{ + return GetClassInfo()->GetClassName(); +} + void wxPGEditor::DrawValue( wxDC& dc, const wxRect& rect, wxPGProperty* property, const wxString& text ) const { if ( !property->IsValueUnspecified() ) @@ -225,200 +215,11 @@ bool wxPGEditor::CanContainCustomImage() const return false; } -// ----------------------------------------------------------------------- -// wxPGClipperWindow -// ----------------------------------------------------------------------- - - -#if wxPG_ENABLE_CLIPPER_WINDOW - -// -// Clipper window is used to "remove" borders from controls -// which otherwise insist on having them despite of supplied -// wxNO_BORDER window style. -// -class wxPGClipperWindow : public wxWindow -{ - DECLARE_CLASS(wxPGClipperWindow) -public: - - wxPGClipperWindow() - : wxWindow() - { - wxPGClipperWindow::Init(); - } - - wxPGClipperWindow(wxWindow* parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize) - { - Init(); - Create(parent,id,pos,size); - } - - void Create(wxWindow* parent, - wxWindowID id, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize); - - virtual ~wxPGClipperWindow(); - - virtual bool ProcessEvent(wxEvent& event); - - inline wxWindow* GetControl() const { return m_ctrl; } - - // This is called before wxControl is constructed. - void GetControlRect( int xadj, int yadj, wxPoint& pt, wxSize& sz ); - - // This is caleed after wxControl has been constructed. - void SetControl( wxWindow* ctrl ); - - virtual void Refresh( bool eraseBackground = true, - const wxRect *rect = (const wxRect *) NULL ); - virtual void SetFocus(); - - virtual bool SetFont(const wxFont& font); - - inline int GetXClip() const { return m_xadj; } - - inline int GetYClip() const { return m_yadj; } - -protected: - wxWindow* m_ctrl; - - int m_xadj; // Horizontal border clip. - - int m_yadj; // Vertical border clip. - -private: - void Init () - { - m_ctrl = (wxWindow*) NULL; - } -}; - - -IMPLEMENT_CLASS(wxPGClipperWindow,wxWindow) - - -// This is called before wxControl is constructed. -void wxPGClipperWindow::GetControlRect( int xadj, int yadj, wxPoint& pt, wxSize& sz ) -{ - m_xadj = xadj; - m_yadj = yadj; - pt.x = -xadj; - pt.y = -yadj; - wxSize own_size = GetSize(); - sz.x = own_size.x+(xadj*2); - sz.y = own_size.y+(yadj*2); -} - - -// This is caleed after wxControl has been constructed. -void wxPGClipperWindow::SetControl( wxWindow* ctrl ) -{ - m_ctrl = ctrl; - - // GTK requires this. - ctrl->SetSizeHints(3,3); - - // Correct size of this window to match the child. - wxSize sz = GetSize(); - wxSize chsz = ctrl->GetSize(); - - int hei_adj = chsz.y - (sz.y+(m_yadj*2)); - if ( hei_adj ) - SetSize(sz.x,chsz.y-(m_yadj*2)); - -} - - -void wxPGClipperWindow::Refresh( bool eraseBackground, const wxRect *rect ) -{ - wxWindow::Refresh(false,rect); - if ( m_ctrl ) - m_ctrl->Refresh(eraseBackground); -} - - -// Pass focus to control -void wxPGClipperWindow::SetFocus() -{ - if ( m_ctrl ) - m_ctrl->SetFocus(); - else - wxWindow::SetFocus(); -} - - -bool wxPGClipperWindow::SetFont(const wxFont& font) -{ - bool res = wxWindow::SetFont(font); - if ( m_ctrl ) - return m_ctrl->SetFont(font); - return res; -} - - -void wxPGClipperWindow::Create(wxWindow* parent, - wxWindowID id, - const wxPoint& pos, - const wxSize& size ) -{ - wxWindow::Create(parent,id,pos,size); -} - - -wxPGClipperWindow::~wxPGClipperWindow() -{ -} - - -bool wxPGClipperWindow::ProcessEvent(wxEvent& event) -{ - if ( event.GetEventType() == wxEVT_SIZE ) - { - if ( m_ctrl ) - { - // Maintain correct size relationship. - wxSize sz = GetSize(); - m_ctrl->SetSize(sz.x+(m_xadj*2),sz.y+(m_yadj*2)); - event.Skip(); - return false; - } - } - return wxWindow::ProcessEvent(event); -} - -#endif // wxPG_ENABLE_CLIPPER_WINDOW - -/*wxWindow* wxPropertyGrid::GetActualEditorControl( wxWindow* ctrl ) -{ -#if wxPG_ENABLE_CLIPPER_WINDOW - // Pass real control instead of clipper window - if ( ctrl->IsKindOf(CLASSINFO(wxPGClipperWindow)) ) - { - return ((wxPGClipperWindow*)ctrl)->GetControl(); - } -#else - return ctrl; -#endif -}*/ - // ----------------------------------------------------------------------- // wxPGTextCtrlEditor // ----------------------------------------------------------------------- -// Clipper window support macro (depending on whether it is used -// for this editor or not) -#if wxPG_NAT_TEXTCTRL_BORDER_X || wxPG_NAT_TEXTCTRL_BORDER_Y - #define wxPG_NAT_TEXTCTRL_BORDER_ANY 1 -#else - #define wxPG_NAT_TEXTCTRL_BORDER_ANY 0 -#endif - -WX_PG_IMPLEMENT_EDITOR_CLASS(TextCtrl,wxPGTextCtrlEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(TextCtrl,wxPGTextCtrlEditor,wxPGEditor) wxPGWindowList wxPGTextCtrlEditor::CreateControls( wxPropertyGrid* propGrid, @@ -435,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) && @@ -595,7 +397,7 @@ wxPGTextCtrlEditor::~wxPGTextCtrlEditor() { } // ----------------------------------------------------------------------- -WX_PG_IMPLEMENT_EDITOR_CLASS(Choice,wxPGChoiceEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(Choice,wxPGChoiceEditor,wxPGEditor) // This is a special enhanced double-click processor class. @@ -726,31 +528,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; } @@ -761,15 +569,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 ); } @@ -780,14 +590,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)) ); @@ -819,7 +627,7 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, else { if ( !p->IsValueUnspecified() ) - text = p->GetValueString(0); + text = p->GetValueAsString(0); } } @@ -867,21 +675,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; @@ -958,6 +769,7 @@ void wxPropertyGrid::OnComboItemPaint( wxPGCustomComboControl* pCc, { // // MeasureItem call + wxDC& dc = *pDc; p->OnCustomPaint( dc, rect, paintdata ); rect.height = paintdata.m_drawnHeight + 2; @@ -1018,7 +830,7 @@ wxWindow* wxPGChoiceEditor::CreateControlsBase( wxPropertyGrid* propGrid, si.x -= wxPG_CHOICEXADJUST; wxWindow* ctrlParent = propGrid->GetPanel(); - int odcbFlags = extraStyle | wxNO_BORDER | wxTE_PROCESS_ENTER; + int odcbFlags = extraStyle | wxBORDER_NONE | wxTE_PROCESS_ENTER; // // If common value specified, use appropriate index @@ -1202,13 +1014,15 @@ wxPGChoiceEditor::~wxPGChoiceEditor() { } // ----------------------------------------------------------------------- -WX_PG_IMPLEMENT_EDITOR_CLASS(ComboBox,wxPGComboBoxEditor,wxPGChoiceEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(ComboBox, + wxPGComboBoxEditor, + wxPGChoiceEditor) 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. } @@ -1281,8 +1095,9 @@ wxPGComboBoxEditor::~wxPGComboBoxEditor() { } // ----------------------------------------------------------------------- -// This simpler implement_editor macro doesn't define class body. -WX_PG_IMPLEMENT_EDITOR_CLASS(ChoiceAndButton,wxPGChoiceAndButtonEditor,wxPGChoiceEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(ChoiceAndButton, + wxPGChoiceAndButtonEditor, + wxPGChoiceEditor) wxPGWindowList wxPGChoiceAndButtonEditor::CreateControls( wxPropertyGrid* propGrid, @@ -1313,7 +1128,7 @@ wxPGWindowList wxPGChoiceAndButtonEditor::CreateControls( wxPropertyGrid* propGr ch_sz.x -= wxPG_TEXTCTRL_AND_BUTTON_SPACING; #endif - wxWindow* ch = wxPG_EDITOR(Choice)->CreateControls(propGrid,property, + wxWindow* ch = wxPGEditor_Choice->CreateControls(propGrid,property, pos,ch_sz).m_primary; #ifdef __WXMSW__ @@ -1331,9 +1146,9 @@ wxPGChoiceAndButtonEditor::~wxPGChoiceAndButtonEditor() { } // wxPGTextCtrlAndButtonEditor // ----------------------------------------------------------------------- - -// This simpler implement_editor macro doesn't define class body. -WX_PG_IMPLEMENT_EDITOR_CLASS(TextCtrlAndButton,wxPGTextCtrlAndButtonEditor,wxPGTextCtrlEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(TextCtrlAndButton, + wxPGTextCtrlAndButtonEditor, + wxPGTextCtrlEditor) wxPGWindowList wxPGTextCtrlAndButtonEditor::CreateControls( wxPropertyGrid* propGrid, @@ -1358,7 +1173,9 @@ wxPGTextCtrlAndButtonEditor::~wxPGTextCtrlAndButtonEditor() { } #if wxPG_INCLUDE_CHECKBOX -WX_PG_IMPLEMENT_EDITOR_CLASS(CheckBox,wxPGCheckBoxEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(CheckBox, + wxPGCheckBoxEditor, + wxPGEditor) // state argument: 0x01 = set if checked @@ -1424,7 +1241,7 @@ public: wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize ) - : wxControl(parent,id,pos,size,wxNO_BORDER|wxWANTS_CHARS) + : wxControl(parent,id,pos,size,wxBORDER_NONE|wxWANTS_CHARS) { // Due to SetOwnFont stuff necessary for GTK+ 1.2, we need to have this SetFont( parent->GetFont() ); @@ -1474,7 +1291,7 @@ void wxSimpleCheckBox::SetValue( int value ) wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent(); wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) ); - propGrid->OnCustomEditorEvent(evt); + propGrid->HandleCustomEditorEvent(evt); } @@ -1483,14 +1300,6 @@ bool wxSimpleCheckBox::ProcessEvent(wxEvent& event) wxPropertyGrid* propGrid = (wxPropertyGrid*) GetParent()->GetParent(); wxASSERT( propGrid->IsKindOf(CLASSINFO(wxPropertyGrid)) ); - if ( event.GetEventType() == wxEVT_NAVIGATION_KEY ) - { - //wxLogDebug(wxT("wxEVT_NAVIGATION_KEY")); - //SetFocusFromKbd(); - //event.Skip(); - //return wxControl::ProcessEvent(event); - } - else if ( ( (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK) && ((wxMouseEvent&)event).m_x > (wxPG_XBEFORETEXT-2) && ((wxMouseEvent&)event).m_x <= (wxPG_XBEFORETEXT-2+m_boxHeight) ) @@ -1561,12 +1370,6 @@ bool wxSimpleCheckBox::ProcessEvent(wxEvent& event) { wxKeyEvent& keyEv = (wxKeyEvent&) event; - if ( keyEv.GetKeyCode() == WXK_TAB ) - { - propGrid->SendNavigationKeyEvent( keyEv.ShiftDown()?0:1 ); - return true; - } - else if ( keyEv.GetKeyCode() == WXK_SPACE ) { SetValue(2); @@ -1591,14 +1394,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; @@ -1730,14 +1525,6 @@ wxWindow* wxPropertyGrid::GetEditorControl() const if ( !ctrl ) return ctrl; - // If it's clipper window, return its child instead -#if wxPG_ENABLE_CLIPPER_WINDOW - if ( ctrl->IsKindOf(CLASSINFO(wxPGClipperWindow)) ) - { - return ((wxPGClipperWindow*)ctrl)->GetControl(); - } -#endif - return ctrl; } @@ -1815,29 +1602,6 @@ void wxPropertyGrid::CorrectEditorWidgetPosY() // ----------------------------------------------------------------------- -bool wxPropertyGrid::AdjustPosForClipperWindow( wxWindow* topCtrlWnd, int* x, int* y ) -{ -#if wxPG_ENABLE_CLIPPER_WINDOW - // Take clipper window into account - if (topCtrlWnd->GetPosition().x < 1 && - !topCtrlWnd->IsKindOf(CLASSINFO(wxPGClipperWindow))) - { - topCtrlWnd = topCtrlWnd->GetParent(); - wxASSERT( topCtrlWnd->IsKindOf(CLASSINFO(wxPGClipperWindow)) ); - *x -= ((wxPGClipperWindow*)topCtrlWnd)->GetXClip(); - *y -= ((wxPGClipperWindow*)topCtrlWnd)->GetYClip(); - return true; - } -#else - wxUnusedVar(topCtrlWnd); - wxUnusedVar(x); - wxUnusedVar(y); -#endif - return false; -} - -// ----------------------------------------------------------------------- - // Fixes position of wxTextCtrl-like control (wxSpinCtrl usually // fits into that category as well). void wxPropertyGrid::FixPosForTextCtrl( wxWindow* ctrl, const wxPoint& offset ) @@ -1873,6 +1637,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, int extraStyle, int maxLen ) { + wxWindowID id = wxPG_SUBID1; wxPGProperty* selected = m_selected; wxASSERT(selected); @@ -1886,7 +1651,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, // Need to reduce width of text control on Mac #if defined(__WXMAC__) - s.x -= 8; + s.x -= 8; #endif // Take button into acccount @@ -1902,46 +1667,20 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, if ( (sz.y - m_lineHeight) > 5 ) hasSpecialSize = true; -#if wxPG_NAT_TEXTCTRL_BORDER_ANY - - // Create clipper window - wxPGClipperWindow* wnd = new wxPGClipperWindow(); -#if defined(__WXMSW__) - wnd->Hide(); -#endif - wnd->Create(GetPanel(),wxPG_SUBID1,p,s); - - // This generates rect of the control inside the clipper window - if ( !hasSpecialSize ) - wnd->GetControlRect(wxPG_NAT_TEXTCTRL_BORDER_X, wxPG_NAT_TEXTCTRL_BORDER_Y, p, s); - else - wnd->GetControlRect(0, 0, p, s); - - wxWindow* ctrlParent = wnd; - -#else - wxWindow* ctrlParent = GetPanel(); if ( !hasSpecialSize ) - tcFlags |= wxNO_BORDER; - -#endif + tcFlags |= wxBORDER_NONE; wxTextCtrl* tc = new wxTextCtrl(); -#if defined(__WXMSW__) && !wxPG_NAT_TEXTCTRL_BORDER_ANY +#if defined(__WXMSW__) tc->Hide(); #endif SetupTextCtrlValue(value); - tc->Create(ctrlParent,wxPG_SUBID1,value, p, s,tcFlags); - -#if wxPG_NAT_TEXTCTRL_BORDER_ANY - wxWindow* ed = wnd; - wnd->SetControl(tc); -#else + tc->Create(ctrlParent,id,value, p, s,tcFlags); + wxWindow* ed = tc; -#endif // Center the control vertically if ( !hasSpecialSize ) @@ -1964,6 +1703,7 @@ wxWindow* wxPropertyGrid::GenerateEditorTextCtrl( const wxPoint& pos, wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize& sz ) { + wxWindowID id = wxPG_SUBID2; wxPGProperty* selected = m_selected; wxASSERT(selected); @@ -1976,7 +1716,7 @@ wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize wxSize s(25, -1); wxButton* but = new wxButton(); - but->Create(GetPanel(),wxPG_SUBID2,wxS("..."),p,s,wxWANTS_CHARS); + but->Create(GetPanel(),id,wxS("..."),p,s,wxWANTS_CHARS); // Now that we know the size, move to the correct position p.x = pos.x + sz.x - but->GetSize().x - 2; @@ -2003,7 +1743,7 @@ wxWindow* wxPropertyGrid::GenerateEditorButton( const wxPoint& pos, const wxSize #ifdef __WXMSW__ but->Hide(); #endif - but->Create(GetPanel(),wxPG_SUBID2,wxS("..."),p,s,wxWANTS_CHARS); + but->Create(GetPanel(),id,wxS("..."),p,s,wxWANTS_CHARS); #ifdef __WXGTK__ wxFont font = GetFont(); @@ -2043,7 +1783,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); } @@ -2114,6 +1854,12 @@ wxPGMultiButton::wxPGMultiButton( wxPropertyGrid* pg, const wxSize& sz ) SetBackgroundColour(pg->GetCellBackgroundColour()); } +void wxPGMultiButton::Finalize( wxPropertyGrid* WXUNUSED(propGrid), + const wxPoint& pos ) +{ + Move( pos.x + m_fullEditorSize.x - m_buttonsWidth, pos.y ); +} + int wxPGMultiButton::GenId( int id ) const { if ( id < -1 )