]> git.saurik.com Git - wxWidgets.git/blobdiff - src/propgrid/advprops.cpp
Store menus titles in menus themselves in wxOSX.
[wxWidgets.git] / src / propgrid / advprops.cpp
index 22c5089f77f4f21dda3a4ed87d36e38735648de7..b29d63a48cbcf287ca2b1e468837025fd97920f7 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     2004-09-25
 // RCS-ID:      $Id$
 // Copyright:   (c) Jaakko Salli
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // For compilers that support precompilation, includes "wx/wx.h".
@@ -240,12 +240,12 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(SpinCtrl,
                                       wxPGEditor)
 
 
-// Trivial destructor.
+// Destructor. It is useful to reset the global pointer in it.
 wxPGSpinCtrlEditor::~wxPGSpinCtrlEditor()
 {
+    wxPG_EDITOR(SpinCtrl) = NULL;
 }
 
-
 // Create controls and initialize event handling.
 wxPGWindowList wxPGSpinCtrlEditor::CreateControls( wxPropertyGrid* propgrid, wxPGProperty* property,
                                                    const wxPoint& pos, const wxSize& sz ) const
@@ -449,6 +449,7 @@ WX_PG_IMPLEMENT_INTERNAL_EDITOR_CLASS(DatePickerCtrl,
 
 wxPGDatePickerCtrlEditor::~wxPGDatePickerCtrlEditor()
 {
+    wxPG_EDITOR(DatePickerCtrl) = NULL;
 }
 
 wxPGWindowList wxPGDatePickerCtrlEditor::CreateControls( wxPropertyGrid* propgrid,
@@ -559,7 +560,7 @@ void wxPGDatePickerCtrlEditor::SetValueToUnspecified( wxPGProperty* property,
 // NB: Do not use wxS here since unlike wxT it doesn't translate to wxChar*
 //
 
-static const wxChar* gs_fp_es_family_labels[] = {
+static const wxChar* const gs_fp_es_family_labels[] = {
     wxT("Default"), wxT("Decorative"),
     wxT("Roman"), wxT("Script"),
     wxT("Swiss"), wxT("Modern"),
@@ -567,34 +568,34 @@ static const wxChar* gs_fp_es_family_labels[] = {
     (const wxChar*) NULL
 };
 
-static long gs_fp_es_family_values[] = {
+static const long gs_fp_es_family_values[] = {
     wxFONTFAMILY_DEFAULT, wxFONTFAMILY_DECORATIVE,
     wxFONTFAMILY_ROMAN, wxFONTFAMILY_SCRIPT,
     wxFONTFAMILY_SWISS, wxFONTFAMILY_MODERN,
     wxFONTFAMILY_TELETYPE, wxFONTFAMILY_UNKNOWN
 };
 
-static const wxChar* gs_fp_es_style_labels[] = {
+static const wxChar* const gs_fp_es_style_labels[] = {
     wxT("Normal"),
     wxT("Slant"),
     wxT("Italic"),
     (const wxChar*) NULL
 };
 
-static long gs_fp_es_style_values[] = {
+static const long gs_fp_es_style_values[] = {
     wxNORMAL,
     wxSLANT,
     wxITALIC
 };
 
-static const wxChar* gs_fp_es_weight_labels[] = {
+static const wxChar* const gs_fp_es_weight_labels[] = {
     wxT("Normal"),
     wxT("Light"),
     wxT("Bold"),
     (const wxChar*) NULL
 };
 
-static long gs_fp_es_weight_values[] = {
+static const long gs_fp_es_weight_values[] = {
     wxNORMAL,
     wxLIGHT,
     wxBOLD
@@ -689,7 +690,10 @@ bool wxFontProperty::OnEvent( wxPropertyGrid* propgrid, wxWindow* WXUNUSED(prima
 
         wxFontData data;
         wxFont font;
-        font << useValue;
+
+        if ( useValue.GetType() == wxS("wxFont") )
+            font << useValue;
+
         data.SetInitialFont( font );
         data.SetColour(*wxBLACK);
 
@@ -831,7 +835,7 @@ void wxFontProperty::OnCustomPaint(wxDC& dc,
 #include "wx/colordlg.h"
 
 //#define wx_cp_es_syscolours_len 25
-static const wxChar* gs_cp_es_syscolour_labels[] = {
+static const wxChar* const gs_cp_es_syscolour_labels[] = {
     wxT("AppWorkspace"),
     wxT("ActiveBorder"),
     wxT("ActiveCaption"),
@@ -860,7 +864,7 @@ static const wxChar* gs_cp_es_syscolour_labels[] = {
     (const wxChar*) NULL
 };
 
-static long gs_cp_es_syscolour_values[] = {
+static const long gs_cp_es_syscolour_values[] = {
     wxSYS_COLOUR_APPWORKSPACE,
     wxSYS_COLOUR_ACTIVEBORDER,
     wxSYS_COLOUR_ACTIVECAPTION,
@@ -934,7 +938,7 @@ wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxS
 
 
 wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxString& name,
-    const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+    const wxChar* const* labels, const long* values, wxPGChoices* choicesCache,
     const wxColourPropertyValue& value )
     : wxEnumProperty( label, name, labels, values, choicesCache )
 {
@@ -946,7 +950,7 @@ wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxS
 
 
 wxSystemColourProperty::wxSystemColourProperty( const wxString& label, const wxString& name,
-    const wxChar** labels, const long* values, wxPGChoices* choicesCache,
+    const wxChar* const* labels, const long* values, wxPGChoices* choicesCache,
     const wxColour& value )
     : wxEnumProperty( label, name, labels, values, choicesCache )
 {
@@ -1369,37 +1373,28 @@ void wxSystemColourProperty::OnCustomPaint( wxDC& dc, const wxRect& rect,
 
 bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& text, int argFlags ) const
 {
-    //
-    // Accept colour format "[Name] [(R,G,B)]"
-    // Name takes precedence.
-    //
-    wxString colourName;
-    wxString colourRGB;
+    wxString custColName(m_choices.GetLabel(GetCustomColourIndex()));
+    wxString colStr(text);
+    colStr.Trim(true);
+    colStr.Trim(false);
 
-    int ppos = text.Find(wxT("("));
+    wxColour customColour;
+    bool conversionSuccess = false;
 
-    if ( ppos == wxNOT_FOUND )
-    {
-        colourName = text;
-    }
-    else
+    if ( colStr != custColName )
     {
-        colourName = text.substr(0, ppos);
-        colourRGB = text.substr(ppos, text.length()-ppos);
-    }
-
-    // Strip spaces from extremities
-    colourName.Trim(true);
-    colourName.Trim(false);
-    colourRGB.Trim(true);
+        // Convert (R,G,B) to rgb(R,G,B)
+        if ( colStr.Find(wxS("(")) == 0 )
+        {
+            colStr = wxS("rgb") + colStr;
+        }
 
-    // Validate colourRGB string - (1,1,1) is shortest allowed
-    if ( colourRGB.length() < 7 )
-        colourRGB.clear();
+        conversionSuccess = customColour.Set(colStr);
+    }
 
-    if ( colourRGB.length() == 0 && m_choices.GetCount() &&
+    if ( !conversionSuccess && m_choices.GetCount() &&
          !(m_flags & wxPG_PROP_HIDE_CUSTOM_COLOUR) &&
-         colourName == m_choices.GetLabel(GetCustomColourIndex()) )
+         colStr == custColName )
     {
         if ( !(argFlags & wxPG_EDITABLE_VALUE ))
         {
@@ -1417,10 +1412,12 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
 
         bool done = false;
 
-        if ( colourName.length() )
+        if ( !conversionSuccess )
         {
             // Try predefined colour first
-            bool res = wxEnumProperty::StringToValue(value, colourName, argFlags);
+            bool res = wxEnumProperty::StringToValue(value,
+                                                     colStr,
+                                                     argFlags);
             if ( res && GetIndex() >= 0 )
             {
                 val.m_type = GetIndex();
@@ -1433,22 +1430,11 @@ bool wxSystemColourProperty::StringToValue( wxVariant& value, const wxString& te
                 done = true;
             }
         }
-        if ( colourRGB.length() && !done )
+        else
         {
-            // Then check custom colour.
             val.m_type = wxPG_COLOUR_CUSTOM;
-
-            int r = -1, g = -1, b = -1;
-            wxSscanf(colourRGB.c_str(),wxT("(%i,%i,%i)"),&r,&g,&b);
-
-            if ( r >= 0 && r <= 255 &&
-                 g >= 0 && g <= 255 &&
-                 b >= 0 && b <= 255 )
-            {
-                val.m_colour.Set(r,g,b);
-
-                done = true;
-            }
+            val.m_colour = customColour;
+            done = true;
         }
 
         if ( !done )
@@ -1492,7 +1478,7 @@ bool wxSystemColourProperty::DoSetAttribute( const wxString& name, wxVariant& va
 // wxColourProperty
 // -----------------------------------------------------------------------
 
-static const wxChar* gs_cp_es_normcolour_labels[] = {
+static const wxChar* const gs_cp_es_normcolour_labels[] = {
     wxT("Black"),
     wxT("Maroon"),
     wxT("Navy"),
@@ -1515,7 +1501,7 @@ static const wxChar* gs_cp_es_normcolour_labels[] = {
     (const wxChar*) NULL
 };
 
-static unsigned long gs_cp_es_normcolour_colours[] = {
+static const unsigned long gs_cp_es_normcolour_colours[] = {
     wxPG_COLOUR(0,0,0),
     wxPG_COLOUR(128,0,0),
     wxPG_COLOUR(0,0,128),
@@ -1604,7 +1590,7 @@ wxVariant wxColourProperty::DoTranslateVal( wxColourPropertyValue& v ) const
 #define NUM_CURSORS 28
 
 //#define wx_cp_es_syscursors_len 28
-static const wxChar* gs_cp_es_syscursors_labels[NUM_CURSORS+1] = {
+static const wxChar* const gs_cp_es_syscursors_labels[NUM_CURSORS+1] = {
     wxT("Default"),
     wxT("Arrow"),
     wxT("Right Arrow"),
@@ -1636,7 +1622,7 @@ static const wxChar* gs_cp_es_syscursors_labels[NUM_CURSORS+1] = {
     (const wxChar*) NULL
 };
 
-static long gs_cp_es_syscursors_values[NUM_CURSORS] = {
+static const long gs_cp_es_syscursors_values[NUM_CURSORS] = {
     wxCURSOR_NONE,
     wxCURSOR_ARROW,
     wxCURSOR_RIGHT_ARROW,
@@ -1818,16 +1804,8 @@ void wxImageFileProperty::OnSetValue()
     wxFileProperty::OnSetValue();
 
     // Delete old image
-    if ( m_pImage )
-    {
-        delete m_pImage;
-        m_pImage = NULL;
-    }
-    if ( m_pBitmap )
-    {
-        delete m_pBitmap;
-        m_pBitmap = NULL;
-    }
+    wxDELETE(m_pImage);
+    wxDELETE(m_pBitmap);
 
     wxFileName filename = GetFileName();
 
@@ -1856,8 +1834,7 @@ void wxImageFileProperty::OnCustomPaint( wxDC& dc,
         {
             m_pImage->Rescale( rect.width, rect.height );
             m_pBitmap = new wxBitmap( *m_pImage );
-            delete m_pImage;
-            m_pImage = NULL;
+            wxDELETE(m_pImage);
         }
 
         dc.DrawBitmap( *m_pBitmap, rect.x, rect.y, false );