X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d10f4bf950c4ad064b982fe8fe07d5ca5e3af7ba..bca7bfc878242483c1130c460c488c27002607a9:/include/wx/generic/grid.h diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h index 13a06d6f55..8825ffe555 100644 --- a/include/wx/generic/grid.h +++ b/include/wx/generic/grid.h @@ -12,13 +12,13 @@ #include "wx/defs.h" #if !defined(wxUSE_NEW_GRID) || !(wxUSE_NEW_GRID) -#include "gridg.h" +#include "wx/generic/gridg.h" #else #ifndef __WXGRID_H__ #define __WXGRID_H__ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(__APPLE__) #pragma interface "grid.h" #endif @@ -31,6 +31,7 @@ #include "wx/combobox.h" #include "wx/dynarray.h" #include "wx/timer.h" +#include "wx/clntdata.h" // ---------------------------------------------------------------------------- // constants @@ -98,7 +99,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; } @@ -375,6 +376,8 @@ protected: friend class wxGridCellEditorDummyFriend; }; +#if wxUSE_TEXTCTRL + // the editor for string/text data class WXDLLEXPORT wxGridCellTextEditor : public wxGridCellEditor { @@ -474,7 +477,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); @@ -489,6 +492,10 @@ private: double m_valueOld; }; +#endif // wxUSE_TEXTCTRL + +#if wxUSE_CHECKBOX + // the editor for boolean data class WXDLLEXPORT wxGridCellBoolEditor : public wxGridCellEditor { @@ -517,6 +524,10 @@ private: bool m_startValue; }; +#endif // wxUSE_CHECKBOX + +#if wxUSE_COMBOBOX + // the editor for string data allowing to choose from the list of strings class WXDLLEXPORT wxGridCellChoiceEditor : public wxGridCellEditor { @@ -551,13 +562,15 @@ private: bool m_allowOthers; }; +#endif // wxUSE_COMBOBOX + // ---------------------------------------------------------------------------- // wxGridCellAttr: this class can be used to alter the cells appearance in // the grid by changing their colour/font/... from default. An object of this // class may be returned by wxGridTable::GetAttr(). // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxGridCellAttr +class WXDLLEXPORT wxGridCellAttr : public wxClientDataContainer { public: enum wxAttrKind @@ -571,9 +584,10 @@ public: }; // ctors - wxGridCellAttr() + wxGridCellAttr(wxGridCellAttr *attrDefault = NULL) { - Init(); + Init(attrDefault); + // MB: args used to be 0,0 here but wxALIGN_LEFT is 0 SetAlignment(-1, -1); } @@ -610,6 +624,8 @@ public: m_hAlign = hAlign; m_vAlign = vAlign; } + void SetSize(int num_rows, int num_cols); + void SetOverflow( bool allow ) { m_overflow = allow; } void SetReadOnly(bool isReadOnly = TRUE) { m_isReadOnly = isReadOnly ? ReadOnly : ReadWrite; } @@ -634,6 +650,8 @@ public: 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; } wxGridCellRenderer *GetRenderer(wxGrid* grid, int row, int col) const; wxGridCellEditor *GetEditor(wxGrid* grid, int row, int col) const; @@ -649,20 +667,10 @@ private: Unset = -1, ReadWrite, ReadOnly - }; + }; // the common part of all ctors - void Init() - { - m_nRef = 1; - - m_isReadOnly = Unset; - - m_renderer = NULL; - m_editor = NULL; - - m_attrkind = wxGridCellAttr::Cell; - } + void Init(wxGridCellAttr *attrDefault = NULL); // the dtor is private because only DecRef() can delete us ~wxGridCellAttr() @@ -679,6 +687,9 @@ private: wxFont m_font; int m_hAlign, m_vAlign; + int m_sizeRows, + m_sizeCols; + bool m_overflow; wxGridCellRenderer* m_renderer; wxGridCellEditor* m_editor; @@ -689,7 +700,7 @@ private: wxAttrKind m_attrkind; // use Clone() instead - DECLARE_NO_COPY_CLASS(wxGridCellAttr); + DECLARE_NO_COPY_CLASS(wxGridCellAttr) // suppress the stupid gcc warning about the class having private dtor and // no friends @@ -708,7 +719,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(); @@ -742,7 +753,7 @@ private: ////////////////////////////////////////////////////////////////////// -class WXDLLEXPORT wxGridTableBase : public wxObject +class WXDLLEXPORT wxGridTableBase : public wxObject, public wxClientDataContainer { public: wxGridTableBase(); @@ -887,7 +898,7 @@ class WXDLLEXPORT wxGridStringTable : public wxGridTableBase public: wxGridStringTable(); wxGridStringTable( int numRows, int numCols ); - ~wxGridStringTable(); + virtual ~wxGridStringTable(); // these are pure virtual in wxGridTableBase // @@ -1007,7 +1018,7 @@ public: long style = wxWANTS_CHARS, const wxString& name = wxPanelNameStr ); - ~wxGrid(); + virtual ~wxGrid(); enum wxGridSelectionModes {wxGridSelectCells, wxGridSelectRows, @@ -1018,6 +1029,7 @@ public: wxGrid::wxGridSelectCells ); void SetSelectionMode(wxGrid::wxGridSelectionModes selmode); + wxGrid::wxGridSelectionModes GetSelectionMode() const; // ------ grid dimensions // @@ -1080,7 +1092,7 @@ public: void DrawTextRectangle( wxDC& dc, const wxString&, const wxRect&, int horizontalAlignment = wxALIGN_LEFT, int verticalAlignment = wxALIGN_TOP ); - + void DrawTextRectangle( wxDC& dc, const wxArrayString& lines, const wxRect&, int horizontalAlignment = wxALIGN_LEFT, int verticalAlignment = wxALIGN_TOP ); @@ -1106,6 +1118,8 @@ public: int GetBatchCount() { return m_batchCount; } + virtual void Refresh(bool eraseb=true, wxRect* rect= 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. @@ -1118,7 +1132,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 ); @@ -1223,7 +1237,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); @@ -1252,6 +1267,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 ); @@ -1293,6 +1311,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); @@ -1335,7 +1356,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 ); @@ -1354,7 +1375,7 @@ public: bool IsSelection(); - // ------ deselection + // ------ deselect blocks or cells // void DeselectRow( int row ); void DeselectCol( int col ); @@ -1362,11 +1383,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 @@ -1402,6 +1428,8 @@ public: { m_extraWidth = extraWidth; m_extraHeight = extraHeight; + + CalcDimensions(); } // Accessors for component windows @@ -1763,9 +1791,9 @@ protected: bool Redimension( wxGridTableMessage& ); - bool SendEvent( const wxEventType, int row, int col, wxMouseEvent& ); - bool SendEvent( const wxEventType, int row, int col ); - bool SendEvent( const wxEventType type) + int SendEvent( const wxEventType, int row, int col, wxMouseEvent& ); + int SendEvent( const wxEventType, int row, int col ); + int SendEvent( const wxEventType type) { return SendEvent(type, m_currentCellCoords.GetRow(), @@ -1920,6 +1948,36 @@ protected: DECLARE_DYNAMIC_CLASS(wxGridRangeSelectEvent) }; + +class WXDLLEXPORT wxGridEditorCreatedEvent : public wxCommandEvent { +public: + wxGridEditorCreatedEvent() + : wxCommandEvent() + { + m_row = 0; + m_col = 0; + m_ctrl = NULL; + } + + wxGridEditorCreatedEvent(int id, wxEventType type, wxObject* obj, + int row, int col, wxControl* ctrl); + + int GetRow() { return m_row; } + int GetCol() { return m_col; } + wxControl* GetControl() { return m_ctrl; } + void SetRow(int row) { m_row = row; } + void SetCol(int col) { m_col = col; } + void SetControl(wxControl* ctrl) { m_ctrl = ctrl; } + +private: + int m_row; + int m_col; + wxControl* m_ctrl; + + DECLARE_DYNAMIC_CLASS(wxGridEditorCreatedEvent) +}; + + BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_GRID_CELL_LEFT_CLICK, 1580) DECLARE_EVENT_TYPE(wxEVT_GRID_CELL_RIGHT_CLICK, 1581) @@ -1936,12 +1994,14 @@ BEGIN_DECLARE_EVENT_TYPES() DECLARE_EVENT_TYPE(wxEVT_GRID_SELECT_CELL, 1592) DECLARE_EVENT_TYPE(wxEVT_GRID_EDITOR_SHOWN, 1593) DECLARE_EVENT_TYPE(wxEVT_GRID_EDITOR_HIDDEN, 1594) + DECLARE_EVENT_TYPE(wxEVT_GRID_EDITOR_CREATED, 1595) END_DECLARE_EVENT_TYPES() typedef void (wxEvtHandler::*wxGridEventFunction)(wxGridEvent&); typedef void (wxEvtHandler::*wxGridSizeEventFunction)(wxGridSizeEvent&); typedef void (wxEvtHandler::*wxGridRangeSelectEventFunction)(wxGridRangeSelectEvent&); +typedef void (wxEvtHandler::*wxGridEditorCreatedEventFunction)(wxGridEditorCreatedEvent&); #define EVT_GRID_CELL_LEFT_CLICK(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_CELL_LEFT_CLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL ), #define EVT_GRID_CELL_RIGHT_CLICK(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_CELL_RIGHT_CLICK, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL ), @@ -1958,6 +2018,7 @@ typedef void (wxEvtHandler::*wxGridRangeSelectEventFunction)(wxGridRangeSelectEv #define EVT_GRID_SELECT_CELL(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_SELECT_CELL, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL ), #define EVT_GRID_EDITOR_SHOWN(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_EDITOR_SHOWN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL ), #define EVT_GRID_EDITOR_HIDDEN(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_EDITOR_HIDDEN, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL ), +#define EVT_GRID_EDITOR_CREATED(fn) DECLARE_EVENT_TABLE_ENTRY( wxEVT_GRID_EDITOR_CREATED, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEditorCreatedEventFunction) &fn, NULL ), #if 0 // TODO: implement these ? others ?