X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0372d42ea50de251b381c22855b372a967bc04d9..03c6117e8f6c958c1bc2602132ded643fc703cbf:/src/propgrid/advprops.cpp diff --git a/src/propgrid/advprops.cpp b/src/propgrid/advprops.cpp index 33c4547747..1f556ddbcf 100644 --- a/src/propgrid/advprops.cpp +++ b/src/propgrid/advprops.cpp @@ -4,7 +4,7 @@ // Author: Jaakko Salli // Modified by: // Created: 2004-09-25 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) Jaakko Salli // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// @@ -16,6 +16,8 @@ #pragma hdrstop #endif +#if wxUSE_PROPGRID + #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/object.h" @@ -40,28 +42,26 @@ #include "wx/scrolwin.h" #include "wx/dirdlg.h" #include "wx/combobox.h" - #include "wx/layout.h" #include "wx/sizer.h" #include "wx/textdlg.h" #include "wx/filedlg.h" #include "wx/intl.h" + #include "wx/wxcrtvararg.h" #endif #define __wxPG_SOURCE_FILE__ -#include +#include "wx/propgrid/propgrid.h" #if wxPG_INCLUDE_ADVPROPS -#include +#include "wx/propgrid/advprops.h" #ifdef __WXMSW__ - #include - #include + #include "wx/msw/private.h" + #include "wx/msw/dc.h" #endif -#include - // ----------------------------------------------------------------------- #if defined(__WXMSW__) @@ -113,9 +113,9 @@ bool operator == (const wxArrayInt& array1, const wxArrayInt& array2) #if wxUSE_SPINBTN -// This macro also defines global wxPGEditor_SpinCtrl for storing -// the singleton class instance. -WX_PG_IMPLEMENT_EDITOR_CLASS(SpinCtrl,wxPGSpinCtrlEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(SpinCtrl, + wxPGSpinCtrlEditor, + wxPGEditor) // Trivial destructor. @@ -142,15 +142,13 @@ wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxP wnd2->SetRange( INT_MIN, INT_MAX ); wnd2->SetValue( 0 ); - propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEUP, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); - propgrid->Connect( wxPG_SUBID2, wxEVT_SCROLL_LINEDOWN, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); - propgrid->Connect( wxPG_SUBID1, wxEVT_KEY_DOWN, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent, NULL, propgrid ); + wxWindowID id = wnd2->GetId(); + wnd2->Connect( id, wxEVT_SCROLL_LINEUP, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); + wnd2->Connect( id, wxEVT_SCROLL_LINEDOWN, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); // Let's add validator to make sure only numbers can be entered wxTextValidator validator(wxFILTER_NUMERIC, &m_tempString); @@ -158,6 +156,10 @@ wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxP wxTextCtrl* wnd1 = (wxTextCtrl*) wxPGTextCtrlEditor::CreateControls( propgrid, property, pos, tcSz ).m_primary; wnd1->SetValidator(validator); + wnd1->Connect( wnd1->GetId(), wxEVT_KEY_DOWN, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); + return wxPGWindowList(wnd1, wnd2); } @@ -279,17 +281,20 @@ bool wxPGSpinCtrlEditor::OnEvent( wxPropertyGrid* propgrid, wxPGProperty* proper #if wxUSE_DATEPICKCTRL -#include -#include +#include "wx/datectrl.h" +#include "wx/dateevt.h" class wxPGDatePickerCtrlEditor : public wxPGEditor { - WX_PG_DECLARE_EDITOR_CLASS(wxPGDatePickerCtrlEditor) + DECLARE_DYNAMIC_CLASS(wxPGDatePickerCtrlEditor) public: virtual ~wxPGDatePickerCtrlEditor(); - wxPG_DECLARE_CREATECONTROLS - + wxString GetName() const; + virtual wxPGWindowList CreateControls(wxPropertyGrid* propgrid, + wxPGProperty* property, + const wxPoint& pos, + const wxSize& size) const; virtual void UpdateControl( wxPGProperty* property, wxWindow* wnd ) const; virtual bool OnEvent( wxPropertyGrid* propgrid, wxPGProperty* property, wxWindow* wnd, wxEvent& event ) const; @@ -298,7 +303,9 @@ public: }; -WX_PG_IMPLEMENT_EDITOR_CLASS(DatePickerCtrl,wxPGDatePickerCtrlEditor,wxPGEditor) +WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(DatePickerCtrl, + wxPGDatePickerCtrlEditor, + wxPGEditor) wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor() @@ -335,9 +342,9 @@ wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgri // Connect all required events to grid's OnCustomEditorEvent // (all relevenat wxTextCtrl, wxComboBox and wxButton events are // already connected) - propgrid->Connect( wxPG_SUBID1, wxEVT_DATE_CHANGED, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &wxPropertyGrid::OnCustomEditorEvent ); + ctrl->Connect( wxPG_SUBID1, wxEVT_DATE_CHANGED, + wxCommandEventHandler(wxPropertyGrid::OnCustomEditorEvent), + NULL, propgrid ); #ifdef __WXMSW__ ctrl->Show(); @@ -393,8 +400,8 @@ void wxPGDatePickerCtrlEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(pro // wxFontProperty // ----------------------------------------------------------------------- -#include -#include +#include "wx/fontdlg.h" +#include "wx/fontenum.h" static const wxChar* gs_fp_es_family_labels[] = { wxT("Default"), wxT("Decorative"), @@ -663,7 +670,7 @@ void wxFontProperty::OnCustomPaint(wxDC& dc, // wxEnumProperty based classes cannot use wxPG_PROP_CLASS_SPECIFIC_1 #define wxPG_PROP_HIDE_CUSTOM_COLOUR wxPG_PROP_CLASS_SPECIFIC_2 -#include +#include "wx/colordlg.h" //#define wx_cp_es_syscolours_len 25 static const wxChar* gs_cp_es_syscolour_labels[] = { @@ -1349,11 +1356,67 @@ static unsigned long gs_cp_es_normcolour_colours[] = { wxPG_COLOUR(0,0,0) }; -WX_PG_IMPLEMENT_CUSTOM_COLOUR_PROPERTY_USES_WXCOLOUR2(wxColourProperty, - gs_cp_es_normcolour_labels, - (const long*)NULL, - gs_cp_es_normcolour_colours, - TextCtrlAndButton) +WX_PG_IMPLEMENT_PROPERTY_CLASS(wxColourProperty, wxSystemColourProperty, + wxColour, const wxColour&, TextCtrlAndButton) + +static wxPGChoices gs_wxColourProperty_choicesCache; + +wxColourProperty::wxColourProperty( const wxString& label, + const wxString& name, + const wxColour& value ) + : wxSystemColourProperty(label, name, gs_cp_es_normcolour_labels, + NULL, + &gs_wxColourProperty_choicesCache, value ) +{ + Init( value ); + + m_flags |= wxPG_PROP_TRANSLATE_CUSTOM; +} + +wxColourProperty::~wxColourProperty() +{ +} + +void wxColourProperty::Init( wxColour colour ) +{ + if ( !colour.Ok() ) + colour = *wxWHITE; + wxVariant variant; + variant << colour; + m_value = variant; + int ind = ColToInd(colour); + if ( ind < 0 ) + ind = m_choices.GetCount() - 1; + SetIndex( ind ); +} + +wxString wxColourProperty::GetValueAsString( int argFlags ) const +{ + const wxPGEditor* editor = GetEditorClass(); + if ( editor != wxPGEditor_Choice && + editor != wxPGEditor_ChoiceAndButton && + editor != wxPGEditor_ComboBox ) + argFlags |= wxPG_PROPERTY_SPECIFIC; + + return wxSystemColourProperty::GetValueAsString(argFlags); +} + +wxColour wxColourProperty::GetColour( int index ) const +{ + if ( !m_choices.HasValue(index) ) + { + wxASSERT( index < (int)GetItemCount() ); + return gs_cp_es_normcolour_colours[index]; + } + return gs_cp_es_normcolour_colours[m_choices.GetValue(index)]; +} + +wxVariant wxColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const +{ + wxVariant variant; + variant << v.m_colour; + return variant; +} // ----------------------------------------------------------------------- // wxCursorProperty @@ -1470,13 +1533,14 @@ void wxCursorProperty::OnCustomPaint( wxDC& dc, if ( paintdata.m_choiceItem < NUM_CURSORS ) { - int cursorindex = gs_cp_es_syscursors_values[paintdata.m_choiceItem]; + wxStockCursor cursorIndex = + (wxStockCursor) gs_cp_es_syscursors_values[paintdata.m_choiceItem]; { - if ( cursorindex == wxCURSOR_NONE ) - cursorindex = wxCURSOR_ARROW; + if ( cursorIndex == wxCURSOR_NONE ) + cursorIndex = wxCURSOR_ARROW; - wxCursor cursor( cursorindex ); + wxCursor cursor( cursorIndex ); #ifdef __WXMSW__ HDC hDc = (HDC)((const wxMSWDCImpl *)dc.GetImpl())->GetHDC(); @@ -1549,9 +1613,7 @@ const wxString& wxPGGetDefaultImageWildcard() return wxPGGlobalVars->m_pDefaultImageWildcard; } -WX_PG_IMPLEMENT_DERIVED_PROPERTY_CLASS(wxImageFileProperty, - wxFileProperty, - const wxString&) +IMPLEMENT_DYNAMIC_CLASS(wxImageFileProperty, wxFileProperty) wxImageFileProperty::wxImageFileProperty( const wxString& label, const wxString& name, const wxString& value ) @@ -1634,7 +1696,7 @@ void wxImageFileProperty::OnCustomPaint( wxDC& dc, #if wxUSE_CHOICEDLG -#include +#include "wx/choicdlg.h" WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMultiChoiceProperty,wxPGProperty, wxArrayInt,const wxArrayInt&,TextCtrlAndButton) @@ -1806,13 +1868,6 @@ bool wxMultiChoiceProperty::OnEvent( wxPropertyGrid* propgrid, return false; } -int wxMultiChoiceProperty::GetChoiceInfo( wxPGChoiceInfo* choiceinfo ) -{ - if ( choiceinfo ) - choiceinfo->m_choices = &m_choices; - return -1; -} - bool wxMultiChoiceProperty::StringToValue( wxVariant& variant, const wxString& text, int ) const { wxArrayString arr; @@ -2001,6 +2056,10 @@ void wxPropertyGridInterface::InitAllTypeHandlers() void wxPropertyGridInterface::RegisterAdditionalEditors() { + // Register editor classes, if necessary. + if ( wxPGGlobalVars->m_mapEditorClasses.empty() ) + wxPropertyGrid::RegisterDefaultEditors(); + #if wxUSE_SPINBTN wxPGRegisterEditorClass(SpinCtrl); #endif @@ -2011,4 +2070,7 @@ void wxPropertyGridInterface::RegisterAdditionalEditors() // ----------------------------------------------------------------------- -#endif // wxPG_INCLUDE_ADVPROPS +#endif // wxPG_INCLUDE_ADVPROPS + +#endif // wxUSE_PROPGRID +