From e72b421324f29e199e3321245fa5a92136233a85 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 29 Feb 2000 19:30:26 +0000 Subject: [PATCH] setting parameters for wxGridCellFloatRenderer seems to work git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6358 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/grid.h | 14 +++++++++++ src/generic/grid.cpp | 49 ++++++++++++++++++++++++++++++--------- 2 files changed, 52 insertions(+), 11 deletions(-) diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 5295d43d2a..4477e57531 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -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; }; diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 1674f1e502..04cda80f0c 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -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; } -- 2.45.2