]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/gridctrl.cpp
prevent memory leak
[wxWidgets.git] / src / generic / gridctrl.cpp
index f16184ecf7292194f7feb1bd961b7890513452fa..0d69504f6575d1917357d74718773fba23f7f300 100644 (file)
@@ -9,31 +9,33 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-    #pragma interface "gridctrl.h"
-#endif
-
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
     #pragma hdrstop
 #endif
 
+#if wxUSE_GRID
+
+#include "wx/generic/gridctrl.h"
+
 #ifndef WX_PRECOMP
     #include "wx/textctrl.h"
     #include "wx/dc.h"
+    #include "wx/combobox.h"
 #endif // WX_PRECOMP
 
-#include "wx/generic/gridctrl.h"
 #include "wx/tokenzr.h"
 
 // ----------------------------------------------------------------------------
 // wxGridCellDateTimeRenderer
 // ----------------------------------------------------------------------------
 
-// Enables a grid cell to display a formated date and or time
+#if wxUSE_DATETIME
+
+// Enables a grid cell to display a formatted date and or time
 
-wxGridCellDateTimeRenderer::wxGridCellDateTimeRenderer(wxString outformat, wxString informat)
+wxGridCellDateTimeRenderer::wxGridCellDateTimeRenderer(const wxString& outformat, const wxString& informat)
 {
     m_iformat = informat;
     m_oformat = outformat;
@@ -52,20 +54,21 @@ wxGridCellRenderer *wxGridCellDateTimeRenderer::Clone() const
     return renderer;
 }
 
-wxString wxGridCellDateTimeRenderer::GetString(wxGrid& grid, int row, int col)
+wxString wxGridCellDateTimeRenderer::GetString(const wxGrid& grid, int row, int col)
 {
     wxGridTableBase *table = grid.GetTable();
 
-    bool hasDatetime = FALSE;
+    bool hasDatetime = false;
     wxDateTime val;
     wxString text;
     if ( table->CanGetValueAs(row, col, wxGRID_VALUE_DATETIME) )
     {
         void * tempval = table->GetValueAsCustom(row, col,wxGRID_VALUE_DATETIME);
 
-        if (tempval){
+        if (tempval)
+        {
             val = *((wxDateTime *)tempval);
-            hasDatetime = TRUE;
+            hasDatetime = true;
             delete (wxDateTime *)tempval;
         }
 
@@ -74,13 +77,14 @@ wxString wxGridCellDateTimeRenderer::GetString(wxGrid& grid, int row, int col)
     if (!hasDatetime )
     {
         text = table->GetValue(row, col);
-        hasDatetime = (val.ParseFormat( text, m_iformat, m_dateDef ) != (wxChar *)NULL) ;
+        const char * const end = val.ParseFormat(text, m_iformat, m_dateDef);
+        hasDatetime = end && !*end;
     }
 
     if ( hasDatetime )
         text = val.Format(m_oformat, m_tz );
 
-    //If we faild to parse string just show what we where given?
+    // If we failed to parse string just show what we where given?
     return text;
 }
 
@@ -114,11 +118,14 @@ wxSize wxGridCellDateTimeRenderer::GetBestSize(wxGrid& grid,
     return DoGetBestSize(attr, dc, GetString(grid, row, col));
 }
 
-void wxGridCellDateTimeRenderer::SetParameters(const wxString& params){
-    if(params)
+void wxGridCellDateTimeRenderer::SetParameters(const wxString& params)
+{
+    if (!params.empty())
         m_oformat=params;
 }
 
+#endif // wxUSE_DATETIME
+
 // ----------------------------------------------------------------------------
 // wxGridCellChoiceNumberRenderer
 // ----------------------------------------------------------------------------
@@ -128,7 +135,7 @@ void wxGridCellDateTimeRenderer::SetParameters(const wxString& params){
 
 wxGridCellEnumRenderer::wxGridCellEnumRenderer(const wxString& choices)
 {
-    if(choices)
+    if (!choices.empty())
         SetParameters(choices);
 }
 
@@ -139,7 +146,7 @@ wxGridCellRenderer *wxGridCellEnumRenderer::Clone() const
     return renderer;
 }
 
-wxString wxGridCellEnumRenderer::GetString(wxGrid& grid, int row, int col)
+wxString wxGridCellEnumRenderer::GetString(const wxGrid& grid, int row, int col)
 {
     wxGridTableBase *table = grid.GetTable();
     wxString text;
@@ -205,17 +212,22 @@ void wxGridCellEnumRenderer::SetParameters(const wxString& params)
     }
 }
 
+#if wxUSE_COMBOBOX
+
 // ----------------------------------------------------------------------------
 // wxGridCellEnumEditor
 // ----------------------------------------------------------------------------
-// A cell editor which displays an enum number as a textual equivalent.
-// eg data in cell is 0,1,2 ... n the cell could be displayed as "John","Fred"..."Bob"
-// in the combo choice box
-//
+
+// A cell editor which displays an enum number as a textual equivalent. eg
+// data in cell is 0,1,2 ... n the cell could be displayed as
+// "John","Fred"..."Bob" in the combo choice box
+
 wxGridCellEnumEditor::wxGridCellEnumEditor(const wxString& choices)
-                    wxGridCellChoiceEditor()
+                     :wxGridCellChoiceEditor()
 {
-    if(choices)
+    m_startint = -1;
+
+    if (!choices.empty())
         SetParameters(choices);
 }
 
@@ -240,7 +252,7 @@ void wxGridCellEnumEditor::BeginEdit(int row, int col, wxGrid* grid)
     else
     {
         wxString startValue = table->GetValue(row, col);
-        if (startValue.IsNumber() && !startValue.IsEmpty())
+        if (startValue.IsNumber() && !startValue.empty())
         {
             startValue.ToLong(&m_startint);
         }
@@ -265,24 +277,25 @@ bool wxGridCellEnumEditor::EndEdit(int row, int col, wxGrid* grid)
         if (grid->GetTable()->CanSetValueAs(row, col, wxGRID_VALUE_NUMBER))
             grid->GetTable()->SetValueAsLong(row, col, pos);
         else
-            grid->GetTable()->SetValue(row, col,wxString::Format("%i",pos));
+            grid->GetTable()->SetValue(row, col,wxString::Format(wxT("%i"),pos));
     }
 
     return changed;
 }
 
+#endif // wxUSE_COMBOBOX
+
+// ----------------------------------------------------------------------------
+// wxGridCellAutoWrapStringEditor
+// ----------------------------------------------------------------------------
 
 void
 wxGridCellAutoWrapStringEditor::Create(wxWindow* parent,
                                        wxWindowID id,
                                        wxEvtHandler* evtHandler)
 {
-  m_control = new wxTextCtrl(parent, id, wxEmptyString,
-                             wxDefaultPosition, wxDefaultSize,
-                             wxTE_MULTILINE | wxTE_RICH);
-
-
-  wxGridCellEditor::Create(parent, id, evtHandler);
+  wxGridCellTextEditor::DoCreate(parent, id, evtHandler,
+                                 wxTE_MULTILINE | wxTE_RICH);
 }
 
 void
@@ -313,7 +326,7 @@ wxGridCellAutoWrapStringRenderer::Draw(wxGrid& grid,
 wxArrayString
 wxGridCellAutoWrapStringRenderer::GetTextLines(wxGrid& grid,
                                                wxDC& dc,
-                                               wxGridCellAttr& attr,
+                                               const wxGridCellAttr& attr,
                                                const wxRect& rect,
                                                int row, int col)
 {
@@ -328,27 +341,29 @@ wxGridCellAutoWrapStringRenderer::GetTextLines(wxGrid& grid,
 
     dc.SetFont(attr.GetFont());
     wxStringTokenizer tk(data , _T(" \n\t\r"));
-    wxString thisline("");
+    wxString thisline = wxEmptyString;
 
     while ( tk.HasMoreTokens() )
     {
         wxString tok = tk.GetNextToken();
-    //FIXME: this causes us to print an extra unnecesary
-    //       space at the end of the line. But it
-    //       is invisible , simplifies the size calculation
-    //       and ensures tokens are seperated in the display
-    tok += _T(" ");
+        //FIXME: this causes us to print an extra unnecesary
+        //       space at the end of the line. But it
+        //       is invisible , simplifies the size calculation
+        //       and ensures tokens are separated in the display
+        tok += _T(" ");
 
         dc.GetTextExtent(tok, &x, &y);
-        if ( curr_x + x > max_x) {
+        if ( curr_x + x > max_x)
+        {
             lines.Add( wxString(thisline) );
-        thisline = tok;
-        curr_x=x;
-    } else {
+            thisline = tok;
+            curr_x=x;
+        }
+        else
+        {
             thisline+= tok;
-        curr_x += x;
-    }
-
+            curr_x += x;
+        }
     }
     //Add last line
     lines.Add( wxString(thisline) );
@@ -363,19 +378,19 @@ wxGridCellAutoWrapStringRenderer::GetBestSize(wxGrid& grid,
                                               wxDC& dc,
                                               int row, int col)
 {
-    int x,y, height , width = grid.GetColSize(col) -10;
+    wxCoord x,y, height , width = grid.GetColSize(col) -10;
     int count = 250; //Limit iterations..
 
     wxRect rect(0,0,width,10);
 
     // M is a nice large character 'y' gives descender!.
-    dc.GetTextExtent("My", &x, &y);
+    dc.GetTextExtent(wxT("My"), &x, &y);
 
     do
     {
         width+=10;
         rect.SetWidth(width);
-        height = y *( GetTextLines(grid,dc,attr,rect,row,col).GetCount());
+        height = y * (wx_truncate_cast(wxCoord, GetTextLines(grid,dc,attr,rect,row,col).GetCount()));
         count--;
     // Search for a shape no taller than the golden ratio.
     } while (count && (width  < (height*1.68)) );
@@ -384,3 +399,5 @@ wxGridCellAutoWrapStringRenderer::GetBestSize(wxGrid& grid,
     return wxSize(width,height);
 }
 
+#endif // wxUSE_GRID
+