X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1df4050d11b6dae91c763751c84364453427deb0..f9133b32002a600cb48dd05fbcce1ab3ed684dba:/include/wx/generic/grid.h diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 0817377738..5f4aa749af 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -11,18 +11,14 @@ #include "wx/defs.h" -#if !defined(wxUSE_NEW_GRID) || !(wxUSE_NEW_GRID) -#include "wx/generic/gridg.h" -#else - #ifndef __WXGRID_H__ #define __WXGRID_H__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "grid.h" #endif -#include "wx/hash.h" +#include "wx/hashmap.h" #include "wx/panel.h" #include "wx/scrolwin.h" #include "wx/string.h" @@ -31,6 +27,7 @@ #include "wx/combobox.h" #include "wx/dynarray.h" #include "wx/timer.h" +#include "wx/clntdata.h" // ---------------------------------------------------------------------------- // constants @@ -83,6 +80,9 @@ class WXDLLEXPORT wxComboBox; class WXDLLEXPORT wxTextCtrl; class WXDLLEXPORT wxSpinCtrl; +WX_DECLARE_EXPORTED_HASH_MAP( long, long, wxIntegerHash, wxIntegerEqual, + wxLongToLongHashMap ); + // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -98,7 +98,7 @@ class WXDLLEXPORT wxSpinCtrl; // class is not documented and is not public at all // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxGridCellWorker +class WXDLLEXPORT wxGridCellWorker : public wxClientDataContainer { public: wxGridCellWorker() { m_nRef = 1; } @@ -301,6 +301,9 @@ public: wxControl* GetControl() { return m_control; } void SetControl(wxControl* control) { m_control = control; } + wxGridCellAttr* GetCellAttr() { return m_attr; } + void SetCellAttr(wxGridCellAttr* attr) { m_attr = attr; } + // Creates the actual edit control virtual void Create(wxWindow* parent, wxWindowID id, @@ -356,6 +359,10 @@ public: // create a new object which is the copy of this one virtual wxGridCellEditor *Clone() const = 0; + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const = 0; + protected: // the dtor is private because only DecRef() can delete us virtual ~wxGridCellEditor(); @@ -363,6 +370,9 @@ protected: // the control we show on screen wxControl* m_control; + // a temporary pointer to the attribute being edited + wxGridCellAttr* m_attr; + // if we change the colours/font of the control from the default ones, we // must restore the default later and we save them here between calls to // Show(TRUE) and Show(FALSE) @@ -373,6 +383,8 @@ protected: // suppress the stupid gcc warning about the class having private dtor and // no friends friend class wxGridCellEditorDummyFriend; + + DECLARE_NO_COPY_CLASS(wxGridCellEditor) }; #if wxUSE_TEXTCTRL @@ -404,6 +416,9 @@ public: virtual wxGridCellEditor *Clone() const { return new wxGridCellTextEditor; } + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const; protected: wxTextCtrl *Text() const { return (wxTextCtrl *)m_control; } @@ -440,6 +455,9 @@ public: virtual wxGridCellEditor *Clone() const { return new wxGridCellNumberEditor(m_min, m_max); } + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const; protected: wxSpinCtrl *Spin() const { return (wxSpinCtrl *)m_control; } @@ -476,7 +494,7 @@ public: virtual void StartingKey(wxKeyEvent& event); virtual wxGridCellEditor *Clone() const - { return new wxGridCellFloatEditor; } + { return new wxGridCellFloatEditor(m_width, m_precision); } // parameters string format is "width,precision" virtual void SetParameters(const wxString& params); @@ -515,6 +533,9 @@ public: virtual wxGridCellEditor *Clone() const { return new wxGridCellBoolEditor; } + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const; protected: wxCheckBox *CBox() const { return (wxCheckBox *)m_control; } @@ -551,11 +572,16 @@ public: virtual void SetParameters(const wxString& params); virtual wxGridCellEditor *Clone() const; + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const; protected: wxComboBox *Combo() const { return (wxComboBox *)m_control; } -private: +// DJC - (MAPTEK) you at least need access to m_choices if you +// wish to override this class +protected: wxString m_startValue; wxArrayString m_choices; bool m_allowOthers; @@ -569,7 +595,7 @@ private: // class may be returned by wxGridTable::GetAttr(). // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxGridCellAttr +class WXDLLEXPORT wxGridCellAttr : public wxClientDataContainer { public: enum wxAttrKind @@ -623,6 +649,9 @@ public: m_hAlign = hAlign; m_vAlign = vAlign; } + void SetSize(int num_rows, int num_cols); + void SetOverflow(bool allow = TRUE) + { m_overflow = allow ? Overflow : SingleCell; } void SetReadOnly(bool isReadOnly = TRUE) { m_isReadOnly = isReadOnly ? ReadOnly : ReadWrite; } @@ -642,11 +671,15 @@ public: bool HasRenderer() const { return m_renderer != NULL; } bool HasEditor() const { return m_editor != NULL; } bool HasReadWriteMode() const { return m_isReadOnly != Unset; } + bool HasOverflowMode() const { return m_overflow != UnsetOverflow; } const wxColour& GetTextColour() const; const wxColour& GetBackgroundColour() const; const wxFont& GetFont() const; void GetAlignment(int *hAlign, int *vAlign) const; + void GetSize(int *num_rows, int *num_cols) const; + bool GetOverflow() const + { return m_overflow != SingleCell; } wxGridCellRenderer *GetRenderer(wxGrid* grid, int row, int col) const; wxGridCellEditor *GetEditor(wxGrid* grid, int row, int col) const; @@ -664,6 +697,13 @@ private: ReadOnly }; + enum wxAttrOverflowMode + { + UnsetOverflow = -1, + Overflow, + SingleCell + }; + // the common part of all ctors void Init(wxGridCellAttr *attrDefault = NULL); @@ -682,6 +722,10 @@ private: wxFont m_font; int m_hAlign, m_vAlign; + int m_sizeRows, + m_sizeCols; + + wxAttrOverflowMode m_overflow; wxGridCellRenderer* m_renderer; wxGridCellEditor* m_editor; @@ -711,7 +755,7 @@ private: // the default implementation is reasonably efficient for the generic case, // but you might still wish to implement your own for some specific situations // if you have performance problems with the stock one -class WXDLLEXPORT wxGridCellAttrProvider +class WXDLLEXPORT wxGridCellAttrProvider : public wxClientDataContainer { public: wxGridCellAttrProvider(); @@ -736,6 +780,8 @@ private: void InitData(); wxGridCellAttrProviderData *m_data; + + DECLARE_NO_COPY_CLASS(wxGridCellAttrProvider) }; ////////////////////////////////////////////////////////////////////// @@ -745,7 +791,7 @@ private: ////////////////////////////////////////////////////////////////////// -class WXDLLEXPORT wxGridTableBase : public wxObject +class WXDLLEXPORT wxGridTableBase : public wxObject, public wxClientDataContainer { public: wxGridTableBase(); @@ -824,6 +870,7 @@ private: wxGridCellAttrProvider *m_attrProvider; DECLARE_ABSTRACT_CLASS( wxGridTableBase ); + DECLARE_NO_COPY_CLASS(wxGridTableBase) }; @@ -867,6 +914,8 @@ private: int m_id; int m_comInt1; int m_comInt2; + + DECLARE_NO_COPY_CLASS(wxGridTableMessage) }; @@ -890,7 +939,7 @@ class WXDLLEXPORT wxGridStringTable : public wxGridTableBase public: wxGridStringTable(); wxGridStringTable( int numRows, int numCols ); - ~wxGridStringTable(); + virtual ~wxGridStringTable(); // these are pure virtual in wxGridTableBase // @@ -1010,7 +1059,7 @@ public: long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr ); - ~wxGrid(); + virtual ~wxGrid(); enum wxGridSelectionModes {wxGridSelectCells, wxGridSelectRows, @@ -1021,6 +1070,7 @@ public: wxGrid::wxGridSelectCells ); void SetSelectionMode(wxGrid::wxGridSelectionModes selmode); + wxGrid::wxGridSelectionModes GetSelectionMode() const; // ------ grid dimensions // @@ -1082,11 +1132,13 @@ public: // void DrawTextRectangle( wxDC& dc, const wxString&, const wxRect&, int horizontalAlignment = wxALIGN_LEFT, - int verticalAlignment = wxALIGN_TOP ); + int verticalAlignment = wxALIGN_TOP, + int textOrientation = wxHORIZONTAL ); void DrawTextRectangle( wxDC& dc, const wxArrayString& lines, const wxRect&, int horizontalAlignment = wxALIGN_LEFT, - int verticalAlignment = wxALIGN_TOP ); + int verticalAlignment = wxALIGN_TOP, + int textOrientation = wxHORIZONTAL ); // Split a string containing newline chararcters into an array of @@ -1109,6 +1161,9 @@ public: int GetBatchCount() { return m_batchCount; } + virtual void Refresh(bool eraseb = TRUE, + const wxRect* rect = (const wxRect *) NULL); + // Use this, rather than wxWindow::Refresh(), to force an // immediate repainting of the grid. Has no effect if you are // already inside a BeginBatch / EndBatch block. @@ -1121,7 +1176,7 @@ public: // ------ edit control functions // - bool IsEditable() { return m_editable; } + bool IsEditable() const { return m_editable; } void EnableEditing( bool edit ); void EnableCellEditControl( bool enable = TRUE ); @@ -1195,6 +1250,7 @@ public: wxFont GetLabelFont() { return m_labelFont; } void GetRowLabelAlignment( int *horiz, int *vert ); void GetColLabelAlignment( int *horiz, int *vert ); + int GetColLabelTextOrientation(); wxString GetRowLabelValue( int row ); wxString GetColLabelValue( int col ); wxColour GetGridLineColour() { return m_gridLineColour; } @@ -1209,6 +1265,7 @@ public: void SetLabelFont( const wxFont& ); void SetRowLabelAlignment( int horiz, int vert ); void SetColLabelAlignment( int horiz, int vert ); + void SetColLabelTextOrientation( int textOrientation ); void SetRowLabelValue( int row, const wxString& ); void SetColLabelValue( int col, const wxString& ); void SetGridLineColour( const wxColour& ); @@ -1226,7 +1283,8 @@ public: void DisableDragGridSize() { EnableDragGridSize(FALSE); } bool CanDragGridSize() { return m_canDragGridSize; } - // this sets the specified attribute for all cells in this row/col + // this sets the specified attribute for this cell or in this row/col + void SetAttr(int row, int col, wxGridCellAttr *attr); void SetRowAttr(int row, wxGridCellAttr *attr); void SetColAttr(int col, wxGridCellAttr *attr); @@ -1255,6 +1313,9 @@ public: wxFont GetCellFont( int row, int col ); void GetDefaultCellAlignment( int *horiz, int *vert ); void GetCellAlignment( int row, int col, int *horiz, int *vert ); + bool GetDefaultCellOverflow(); + bool GetCellOverflow( int row, int col ); + void GetCellSize( int row, int col, int *num_rows, int *num_cols ); void SetDefaultRowSize( int height, bool resizeExistingRows = FALSE ); void SetRowSize( int row, int height ); @@ -1281,12 +1342,30 @@ public: // and also set the grid size to just fit its contents void AutoSize(); + // autosize row height depending on label text + void AutoSizeRowLabelSize( int row ); + + // autosize column width depending on label text + void AutoSizeColLabelSize( int col ); + // column won't be resized to be lesser width - this must be called during // the grid creation because it won't resize the column if it's already // narrower than the minimal width void SetColMinimalWidth( int col, int width ); void SetRowMinimalHeight( int row, int width ); + /* These members can be used to query and modify the minimal + * acceptable size of grid rows and columns. Call this function in + * your code which creates the grid if you want to display cells + * with a size smaller than the default acceptable minimum size. + * Like the members SetColMinimalWidth and SetRowMinimalWidth, + * the existing rows or columns will not be checked/resized. + */ + void SetColMinimalAcceptableWidth( int width ); + void SetRowMinimalAcceptableHeight( int width ); + int GetColMinimalAcceptableWidth() const; + int GetRowMinimalAcceptableHeight() const; + void SetDefaultCellBackgroundColour( const wxColour& ); void SetCellBackgroundColour( int row, int col, const wxColour& ); void SetDefaultCellTextColour( const wxColour& ); @@ -1296,6 +1375,9 @@ public: void SetCellFont( int row, int col, const wxFont& ); void SetDefaultCellAlignment( int horiz, int vert ); void SetCellAlignment( int row, int col, int horiz, int vert ); + void SetDefaultCellOverflow( bool allow ); + void SetCellOverflow( int row, int col, bool allow ); + void SetCellSize( int row, int col, int num_rows, int num_cols ); // takes ownership of the pointer void SetDefaultRenderer(wxGridCellRenderer *renderer); @@ -1338,7 +1420,7 @@ public: // make the cell editable/readonly void SetReadOnly(int row, int col, bool isReadOnly = TRUE); - // ------ selections of blocks of cells + // ------ select blocks of cells // void SelectRow( int row, bool addToSelected = FALSE ); void SelectCol( int col, bool addToSelected = FALSE ); @@ -1357,7 +1439,7 @@ public: bool IsSelection(); - // ------ deselection + // ------ deselect blocks or cells // void DeselectRow( int row ); void DeselectCol( int col ); @@ -1365,11 +1447,16 @@ public: void ClearSelection(); - bool IsInSelection( int row, int col ); + bool IsInSelection( int row, int col ) const; - bool IsInSelection( const wxGridCellCoords& coords ) + bool IsInSelection( const wxGridCellCoords& coords ) const { return IsInSelection( coords.GetRow(), coords.GetCol() ); } + wxGridCellCoordsArray GetSelectedCells() const; + wxGridCellCoordsArray GetSelectionBlockTopLeft() const; + wxGridCellCoordsArray GetSelectionBlockBottomRight() const; + wxArrayInt GetSelectedRows() const; + wxArrayInt GetSelectedCols() const; // This function returns the rectangle that encloses the block of cells // limited by TopLeft and BottomRight cell in device coords and clipped @@ -1392,12 +1479,13 @@ public: void RegisterDataType(const wxString& typeName, wxGridCellRenderer* renderer, wxGridCellEditor* editor); - wxGridCellEditor* GetDefaultEditorForCell(int row, int col) const; + // DJC MAPTEK + virtual wxGridCellEditor* GetDefaultEditorForCell(int row, int col) const; wxGridCellEditor* GetDefaultEditorForCell(const wxGridCellCoords& c) const { return GetDefaultEditorForCell(c.GetRow(), c.GetCol()); } - wxGridCellRenderer* GetDefaultRendererForCell(int row, int col) const; - wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName) const; - wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName) const; + virtual wxGridCellRenderer* GetDefaultRendererForCell(int row, int col) const; + virtual wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName) const; + virtual wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName) const; // grid may occupy more space than needed for its rows/columns, this // function allows to set how big this extra space is @@ -1405,6 +1493,8 @@ public: { m_extraWidth = extraWidth; m_extraHeight = extraHeight; + + CalcDimensions(); } // Accessors for component windows @@ -1611,6 +1701,7 @@ protected: void InitRowHeights(); int m_defaultRowHeight; + int m_minAcceptableRowHeight; wxArrayInt m_rowHeights; wxArrayInt m_rowBottoms; @@ -1618,6 +1709,7 @@ protected: void InitColWidths(); int m_defaultColWidth; + int m_minAcceptableColWidth; wxArrayInt m_colWidths; wxArrayInt m_colRights; @@ -1649,6 +1741,7 @@ protected: int m_rowLabelVertAlign; int m_colLabelHorizAlign; int m_colLabelVertAlign; + int m_colLabelTextOrientation; bool m_defaultRowLabelValues; bool m_defaultColLabelValues; @@ -1669,8 +1762,8 @@ protected: // if a column has a minimal width, it will be the value for it in this // hash table - wxHashTableLong m_colMinWidths, - m_rowMinHeights; + wxLongToLongHashMap m_colMinWidths, + m_rowMinHeights; // get the minimal width of the given column/row int GetColMinimalWidth(int col) const; @@ -1798,12 +1891,14 @@ protected: bool GetModelValues(); bool SetModelValues(); - friend class wxGridSelection; + friend class WXDLLEXPORT wxGridSelection; DECLARE_DYNAMIC_CLASS( wxGrid ) DECLARE_EVENT_TABLE() + DECLARE_NO_COPY_CLASS(wxGrid) }; + // ---------------------------------------------------------------------------- // Grid event class and event types // ---------------------------------------------------------------------------- @@ -1950,6 +2045,7 @@ private: wxControl* m_ctrl; DECLARE_DYNAMIC_CLASS(wxGridEditorCreatedEvent) + DECLARE_NO_COPY_CLASS(wxGridEditorCreatedEvent) }; @@ -2008,6 +2104,5 @@ extern const int wxEVT_GRID_CHANGE_SEL_LABEL; #endif -#endif // #ifndef __WXGRID_H__ +#endif // ifndef wxUSE_GRID -#endif // ifndef wxUSE_NEW_GRID