///////////////////////////////////////////////////////////////////////////
-// Name: generic/gridctrl.h
+// Name: wx/generic/gridctrl.h
// Purpose: wxGrid controls
// Author: Paul Gammans, Roger Gammans
// Modified by:
#ifndef _WX_GENERIC_GRIDCTRL_H_
#define _WX_GENERIC_GRIDCTRL_H_
-#ifdef __GNUG__
- #pragma interface "gridctrl.h"
-#endif
+#include "wx/grid.h"
-#if wxUSE_GRID || wxUSE_NEW_GRID
+#if wxUSE_GRID
-#include "wx/grid.h"
-#include "wx/string.h"
-#include "wx/datetime.h"
+#define wxGRID_VALUE_CHOICEINT wxT("choiceint")
+#define wxGRID_VALUE_DATETIME wxT("datetime")
-#define wxGRID_VALUE_CHOICEINT _T("choiceint")
-#define wxGRID_VALUE_DATETIME _T("datetime")
-// the default renderer for the cells containing Time and dates..
-class WXDLLEXPORT wxGridCellDateTimeRenderer : public wxGridCellStringRenderer
+// the default renderer for the cells containing string data
+class WXDLLIMPEXP_ADV wxGridCellStringRenderer : public wxGridCellRenderer
{
public:
- wxGridCellDateTimeRenderer(wxString outformat = _T("%c"),
- wxString informat = _T("%c"));
+ // draw the string
+ virtual void Draw(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ const wxRect& rect,
+ int row, int col,
+ bool isSelected);
+
+ // return the string extent
+ virtual wxSize GetBestSize(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ int row, int col);
+
+ virtual wxGridCellRenderer *Clone() const
+ { return new wxGridCellStringRenderer; }
+protected:
+ // set the text colours before drawing
+ void SetTextColoursAndFont(const wxGrid& grid,
+ const wxGridCellAttr& attr,
+ wxDC& dc,
+ bool isSelected);
+
+ // calc the string extent for given string/font
+ wxSize DoGetBestSize(const wxGridCellAttr& attr,
+ wxDC& dc,
+ const wxString& text);
+};
+
+// the default renderer for the cells containing numeric (long) data
+class WXDLLIMPEXP_ADV wxGridCellNumberRenderer : public wxGridCellStringRenderer
+{
+public:
// draw the string right aligned
virtual void Draw(wxGrid& grid,
wxGridCellAttr& attr,
wxDC& dc,
int row, int col);
- virtual wxGridCellRenderer *Clone() const;
+ virtual wxGridCellRenderer *Clone() const
+ { return new wxGridCellNumberRenderer; }
+
+protected:
+ wxString GetString(const wxGrid& grid, int row, int col);
+};
+
+class WXDLLIMPEXP_ADV wxGridCellFloatRenderer : public wxGridCellStringRenderer
+{
+public:
+ wxGridCellFloatRenderer(int width = -1,
+ int precision = -1,
+ int format = wxGRID_FLOAT_FORMAT_DEFAULT);
+
+ // get/change formatting parameters
+ int GetWidth() const { return m_width; }
+ void SetWidth(int width) { m_width = width; m_format.clear(); }
+ int GetPrecision() const { return m_precision; }
+ void SetPrecision(int precision) { m_precision = precision; m_format.clear(); }
+ int GetFormat() const { return m_style; }
+ void SetFormat(int format) { m_style = format; m_format.clear(); }
+
+ // draw the string right aligned with given width/precision
+ virtual void Draw(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ const wxRect& rect,
+ int row, int col,
+ bool isSelected);
+
+ virtual wxSize GetBestSize(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ int row, int col);
- // parameters string format is "width[,precision]"
+ // parameters string format is "width[,precision[,format]]"
+ // with format being one of f|e|g|E|F|G
virtual void SetParameters(const wxString& params);
+ virtual wxGridCellRenderer *Clone() const;
+
protected:
- wxString GetString(wxGrid& grid, int row, int col);
+ wxString GetString(const wxGrid& grid, int row, int col);
- wxString m_iformat;
- wxString m_oformat;
- wxDateTime m_dateDef;
- wxDateTime::TimeZone m_tz;
+private:
+ // formatting parameters
+ int m_width,
+ m_precision;
+
+ int m_style;
+ wxString m_format;
+};
+
+// renderer for boolean fields
+class WXDLLIMPEXP_ADV wxGridCellBoolRenderer : public wxGridCellRenderer
+{
+public:
+ // draw a check mark or nothing
+ virtual void Draw(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ const wxRect& rect,
+ int row, int col,
+ bool isSelected);
+
+ // return the checkmark size
+ virtual wxSize GetBestSize(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ int row, int col);
+
+ virtual wxGridCellRenderer *Clone() const
+ { return new wxGridCellBoolRenderer; }
+
+private:
+ static wxSize ms_sizeCheckMark;
};
-// the default renderer for the cells containing Time and dates..
-class WXDLLEXPORT wxGridCellEnumRenderer : public wxGridCellStringRenderer
+#if wxUSE_DATETIME
+
+#include "wx/datetime.h"
+
+// the default renderer for the cells containing times and dates
+class WXDLLIMPEXP_ADV wxGridCellDateTimeRenderer : public wxGridCellStringRenderer
{
public:
- wxGridCellEnumRenderer( const wxString& choices = wxEmptyString );
+ wxGridCellDateTimeRenderer(const wxString& outformat = wxDefaultDateTimeFormat,
+ const wxString& informat = wxDefaultDateTimeFormat);
// draw the string right aligned
virtual void Draw(wxGrid& grid,
virtual wxGridCellRenderer *Clone() const;
- // parameters string format is "item1[,item2[...,itemN]]"
+ // output strptime()-like format string
virtual void SetParameters(const wxString& params);
protected:
- wxString GetString(wxGrid& grid, int row, int col);
+ wxString GetString(const wxGrid& grid, int row, int col);
- wxArrayString m_choices;
+ wxString m_iformat;
+ wxString m_oformat;
+ wxDateTime m_dateDef;
+ wxDateTime::TimeZone m_tz;
};
+#endif // wxUSE_DATETIME
-#if wxUSE_COMBOBOX
-
-class WXDLLEXPORT wxGridCellEnumEditor : public wxGridCellChoiceEditor
+// renders a number using the corresponding text string
+class WXDLLIMPEXP_ADV wxGridCellEnumRenderer : public wxGridCellStringRenderer
{
public:
- wxGridCellEnumEditor( const wxString& choices = wxEmptyString );
- virtual ~wxGridCellEnumEditor() {};
+ wxGridCellEnumRenderer( const wxString& choices = wxEmptyString );
- virtual wxGridCellEditor* Clone() const;
+ // draw the string right aligned
+ virtual void Draw(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ const wxRect& rect,
+ int row, int col,
+ bool isSelected);
- virtual bool EndEdit(int row, int col, wxGrid* grid);
- virtual void BeginEdit(int row, int col, wxGrid* grid);
+ virtual wxSize GetBestSize(wxGrid& grid,
+ wxGridCellAttr& attr,
+ wxDC& dc,
+ int row, int col);
-private:
- long int m_startint;
-};
+ virtual wxGridCellRenderer *Clone() const;
-#endif // wxUSE_COMBOBOX
+ // parameters string format is "item1[,item2[...,itemN]]" where itemN will
+ // be used if the cell value is N-1
+ virtual void SetParameters(const wxString& params);
-class wxGridCellAutoWrapStringEditor : public wxGridCellTextEditor
-{
-public:
- wxGridCellAutoWrapStringEditor() : wxGridCellTextEditor() { }
- virtual void Create(wxWindow* parent,
- wxWindowID id,
- wxEvtHandler* evtHandler);
+protected:
+ wxString GetString(const wxGrid& grid, int row, int col);
- virtual wxGridCellEditor *Clone() const
- { return new wxGridCellAutoWrapStringEditor; }
+ wxArrayString m_choices;
};
-class wxGridCellAutoWrapStringRenderer : public wxGridCellStringRenderer
+
+class WXDLLIMPEXP_ADV wxGridCellAutoWrapStringRenderer : public wxGridCellStringRenderer
{
public:
wxGridCellAutoWrapStringRenderer() : wxGridCellStringRenderer() { }
private:
wxArrayString GetTextLines( wxGrid& grid,
wxDC& dc,
- wxGridCellAttr& attr,
+ const wxGridCellAttr& attr,
const wxRect& rect,
int row, int col);
-};
+ // Helper methods of GetTextLines()
-#endif // #if wxUSE_GRID || wxUSE_NEW_GRID
+ // Break a single logical line of text into several physical lines, all of
+ // which are added to the lines array. The lines are broken at maxWidth and
+ // the dc is used for measuring text extent only.
+ void BreakLine(wxDC& dc,
+ const wxString& logicalLine,
+ wxCoord maxWidth,
+ wxArrayString& lines);
-#endif //_WX_GENERIC_GRIDCTRL_H_
+ // Break a word, which is supposed to be wider than maxWidth, into several
+ // lines, which are added to lines array and the last, incomplete, of which
+ // is returned in line output parameter.
+ //
+ // Returns the width of the last line.
+ wxCoord BreakWord(wxDC& dc,
+ const wxString& word,
+ wxCoord maxWidth,
+ wxArrayString& lines,
+ wxString& line);
+
+
+};
+#endif // wxUSE_GRID
+#endif // _WX_GENERIC_GRIDCTRL_H_