]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/advprops.cpp
rebaked makefiles with 0.2.4 (and now with forgotten files)
[wxWidgets.git] / src / propgrid / advprops.cpp
index da269ea3f435ef2999ec3fca485dc204031a4b14..1f556ddbcf29877ca3d0b89bfdd0cb45fb631b40 100644 (file)
@@ -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
 /////////////////////////////////////////////////////////////////////////////
     #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 <wx/propgrid/propgrid.h>
+#include "wx/propgrid/propgrid.h"
 
 #if wxPG_INCLUDE_ADVPROPS
 
-#include <wx/propgrid/advprops.h>
+#include "wx/propgrid/advprops.h"
 
 #ifdef __WXMSW__
-    #include <wx/msw/private.h>
-    #include <wx/msw/dc.h>
+    #include "wx/msw/private.h"
+    #include "wx/msw/dc.h"
 #endif
 
-#include <typeinfo>
-
 // -----------------------------------------------------------------------
 
 #if defined(__WXMSW__)
@@ -115,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.
@@ -144,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);
@@ -160,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);
 }
 
@@ -281,17 +281,20 @@ bool wxPGSpinCtrlEditor::OnEvent( wxPropertyGrid* propgrid, wxPGProperty* proper
 #if wxUSE_DATEPICKCTRL
 
 
-#include <wx/datectrl.h>
-#include <wx/dateevt.h>
+#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;
@@ -300,7 +303,9 @@ public:
 };
 
 
-WX_PG_IMPLEMENT_EDITOR_CLASS(DatePickerCtrl,wxPGDatePickerCtrlEditor,wxPGEditor)
+WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(DatePickerCtrl,
+                                      wxPGDatePickerCtrlEditor,
+                                      wxPGEditor)
 
 
 wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor()
@@ -337,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();
@@ -395,8 +400,8 @@ void wxPGDatePickerCtrlEditor::SetValueToUnspecified( wxPGProperty* WXUNUSED(pro
 // wxFontProperty
 // -----------------------------------------------------------------------
 
-#include <wx/fontdlg.h>
-#include <wx/fontenum.h>
+#include "wx/fontdlg.h"
+#include "wx/fontenum.h"
 
 static const wxChar* gs_fp_es_family_labels[] = {
     wxT("Default"), wxT("Decorative"),
@@ -665,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 <wx/colordlg.h>
+#include "wx/colordlg.h"
 
 //#define wx_cp_es_syscolours_len 25
 static const wxChar* gs_cp_es_syscolour_labels[] = {
@@ -1351,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
@@ -1472,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();
@@ -1551,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 )
@@ -1636,7 +1696,7 @@ void wxImageFileProperty::OnCustomPaint( wxDC& dc,
 
 #if wxUSE_CHOICEDLG
 
-#include <wx/choicdlg.h>
+#include "wx/choicdlg.h"
 
 WX_PG_IMPLEMENT_PROPERTY_CLASS(wxMultiChoiceProperty,wxPGProperty,
                                wxArrayInt,const wxArrayInt&,TextCtrlAndButton)
@@ -1996,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