]> git.saurik.com Git - wxWidgets.git/commitdiff
setting parameters for wxGridCellFloatRenderer seems to work
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Feb 2000 19:30:26 +0000 (19:30 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 29 Feb 2000 19:30:26 +0000 (19:30 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/generic/grid.h
src/generic/grid.cpp

index 5295d43d2aa05f7a3a70430074cfedb7c24d4b7a..4477e57531da89851a44274797201a1df6fad4a1 100644 (file)
@@ -131,6 +131,9 @@ public:
     // left to the derived classes
     virtual void SetParameters(const wxString& params);
 
+    // create a new object which is the copy of this one
+    virtual wxGridCellRenderer *Clone() const = 0;
+
 protected:
     // virtual dtor for any base class - private because only DecRef() can
     // delete us
@@ -162,6 +165,9 @@ public:
                                wxDC& dc,
                                int row, int col);
 
+    virtual wxGridCellRenderer *Clone() const
+        { return new wxGridCellStringRenderer; }
+
 protected:
     // set the text colours before drawing
     void SetTextColoursAndFont(wxGrid& grid,
@@ -192,6 +198,9 @@ public:
                                wxDC& dc,
                                int row, int col);
 
+    virtual wxGridCellRenderer *Clone() const
+        { return new wxGridCellNumberRenderer; }
+
 protected:
     wxString GetString(wxGrid& grid, int row, int col);
 };
@@ -223,6 +232,8 @@ public:
     // parameters string format is "width[,precision]"
     virtual void SetParameters(const wxString& params);
 
+    virtual wxGridCellRenderer *Clone() const;
+
 protected:
     wxString GetString(wxGrid& grid, int row, int col);
 
@@ -252,6 +263,9 @@ public:
                                wxDC& dc,
                                int row, int col);
 
+    virtual wxGridCellRenderer *Clone() const
+        { return new wxGridCellBoolRenderer; }
+
 private:
     static wxSize ms_sizeCheckMark;
 };
index 1674f1e50277ed0fa56e386cf45dd3a8cda4b4db..04cda80f0c56ad3bb0f4a3057149a257d0efdca8 100644 (file)
@@ -1216,6 +1216,16 @@ wxGridCellFloatRenderer::wxGridCellFloatRenderer(int width, int precision)
     SetPrecision(precision);
 }
 
+wxGridCellRenderer *wxGridCellFloatRenderer::Clone() const
+{
+    wxGridCellFloatRenderer *renderer = new wxGridCellFloatRenderer;
+    renderer->m_width = m_width;
+    renderer->m_precision = m_precision;
+    renderer->m_format = m_format;
+
+    return renderer;
+}
+
 wxString wxGridCellFloatRenderer::GetString(wxGrid& grid, int row, int col)
 {
     wxGridTableBase *table = grid.GetTable();
@@ -6937,22 +6947,39 @@ wxGrid::GetDefaultEditorForType(const wxString& typeName) const
 wxGridCellRenderer*
 wxGrid::GetDefaultRendererForType(const wxString& typeName) const
 {
-    // the first part of the typename is the "real" type, anything after ':'
-    // are the parameters for the renderer
-    wxString type = typeName.BeforeFirst(_T(':'));
-
-    int index = m_typeRegistry->FindDataType(type);
+    // first try to find an exact match
+    wxGridCellRenderer *renderer;
+    int index = m_typeRegistry->FindDataType(typeName);
     if ( index == wxNOT_FOUND )
     {
-        wxFAIL_MSG(wxT("Unknown data type name"));
+        // then try to construct a renderer from the base name and parameters
+        // following it
 
-        return NULL;
-    }
+        // the first part of the typename is the "real" type, anything after ':'
+        // are the parameters for the renderer
+        index = m_typeRegistry->FindDataType(typeName.BeforeFirst(_T(':')));
+        if ( index == wxNOT_FOUND )
+        {
+            wxFAIL_MSG(wxT("Unknown data type name"));
+
+            return NULL;
+        }
+
+        renderer = m_typeRegistry->GetRenderer(index);
+        wxGridCellRenderer *rendererOld = renderer;
+        renderer = renderer->Clone();
+        rendererOld->DecRef();
 
-    wxGridCellRenderer *renderer = m_typeRegistry->GetRenderer(index);
+        // do it even if there are no parameters to reset them to defaults
+        renderer->SetParameters(typeName.AfterFirst(_T(':')));
 
-    // do it even if there are no parameters to reset them to defaults
-    renderer->SetParameters(typeName.AfterFirst(_T(':')));
+        // register the new typename
+        m_typeRegistry->RegisterDataType(typeName, renderer, NULL);
+    }
+    else
+    {
+        renderer = m_typeRegistry->GetRenderer(index);
+    }
 
     return renderer;
 }