]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/generic/grid.h
Renamed wx.FutureCall to wx.CallLater so it is named more like
[wxWidgets.git] / include / wx / generic / grid.h
index faa87dded8ecb20418835ebf0e7397a0a50ca9ae..4a6f6be64e33069691df6c2a89386dd240188b07 100644 (file)
@@ -2,38 +2,28 @@
 // Name:        wx/generic/grid.h
 // Purpose:     wxGrid and related classes
 // Author:      Michael Bedward (based on code by Julian Smart, Robin Dunn)
-// Modified by:
+// Modified by: Santiago Palacios
 // Created:     1/08/1999
 // RCS-ID:      $Id$
 // Copyright:   (c) Michael Bedward
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#include "wx/defs.h"
+#ifndef _WX_GENERIC_GRID_H_
+#define _WX_GENERIC_GRID_H_
 
-#ifndef __WXGRID_H__
-#define __WXGRID_H__
+#include "wx/defs.h"
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "grid.h"
-#endif
+#if wxUSE_GRID
 
-#include "wx/hashmap.h"
-#include "wx/panel.h"
 #include "wx/scrolwin.h"
-#include "wx/string.h"
-#include "wx/arrstr.h"
-#include "wx/scrolbar.h"
-#include "wx/event.h"
-#include "wx/combobox.h"
-#include "wx/dynarray.h"
-#include "wx/timer.h"
-#include "wx/clntdata.h"
 
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
 
+extern WXDLLIMPEXP_DATA_ADV(const wxChar) wxGridNameStr[];
+
 // Default parameters for wxGrid
 //
 #define WXGRID_DEFAULT_NUMBER_ROWS            10
@@ -71,7 +61,6 @@ class WXDLLIMPEXP_ADV wxGridCellAttrProviderData;
 class WXDLLIMPEXP_ADV wxGridColLabelWindow;
 class WXDLLIMPEXP_ADV wxGridCornerLabelWindow;
 class WXDLLIMPEXP_ADV wxGridRowLabelWindow;
-class WXDLLIMPEXP_ADV wxGridTableBase;
 class WXDLLIMPEXP_ADV wxGridWindow;
 class WXDLLIMPEXP_ADV wxGridTypeRegistry;
 class WXDLLIMPEXP_ADV wxGridSelection;
@@ -107,7 +96,7 @@ public:
     // calling DecRef() once will delete it. Calling IncRef() allows to lock
     // it until the matching DecRef() is called
     void IncRef() { m_nRef++; }
-    void DecRef() { if ( !--m_nRef ) delete this; }
+    void DecRef() { if ( --m_nRef == 0 ) delete this; }
 
     // interpret renderer parameters: arbitrary string whose interpretatin is
     // left to the derived classes
@@ -184,13 +173,13 @@ public:
 
 protected:
     // set the text colours before drawing
-    void SetTextColoursAndFont(wxGrid& grid,
-                               wxGridCellAttr& attr,
+    void SetTextColoursAndFont(const wxGrid& grid,
+                               const wxGridCellAttr& attr,
                                wxDC& dc,
                                bool isSelected);
 
     // calc the string extent for given string/font
-    wxSize DoGetBestSize(wxGridCellAttr& attr,
+    wxSize DoGetBestSize(const wxGridCellAttr& attr,
                          wxDC& dc,
                          const wxString& text);
 };
@@ -216,7 +205,7 @@ public:
         { return new wxGridCellNumberRenderer; }
 
 protected:
-    wxString GetString(wxGrid& grid, int row, int col);
+    wxString GetString(const wxGrid& grid, int row, int col);
 };
 
 class WXDLLIMPEXP_ADV wxGridCellFloatRenderer : public wxGridCellStringRenderer
@@ -249,7 +238,7 @@ public:
     virtual wxGridCellRenderer *Clone() const;
 
 protected:
-    wxString GetString(wxGrid& grid, int row, int col);
+    wxString GetString(const wxGrid& grid, int row, int col);
 
 private:
     // formatting parameters
@@ -547,6 +536,7 @@ public:
 
     virtual void Reset();
     virtual void StartingClick();
+    virtual void StartingKey(wxKeyEvent& event);
 
     virtual wxGridCellEditor *Clone() const
         { return new wxGridCellBoolEditor; }
@@ -661,7 +651,7 @@ public:
     // calling DecRef() once will delete it. Calling IncRef() allows to lock
     // it until the matching DecRef() is called
     void IncRef() { m_nRef++; }
-    void DecRef() { if ( !--m_nRef ) delete this; }
+    void DecRef() { if ( --m_nRef == 0 ) delete this; }
 
     // setters
     void SetTextColour(const wxColour& colText) { m_colText = colText; }
@@ -695,6 +685,7 @@ public:
     bool HasEditor() const { return m_editor != NULL; }
     bool HasReadWriteMode() const { return m_isReadOnly != Unset; }
     bool HasOverflowMode() const { return m_overflow != UnsetOverflow; }
+    bool HasSize() const { return m_sizeRows != 1 || m_sizeCols != 1; }
 
     const wxColour& GetTextColour() const;
     const wxColour& GetBackgroundColour() const;
@@ -712,6 +703,14 @@ public:
 
     void SetDefAttr(wxGridCellAttr* defAttr) { m_defGridAttr = defAttr; }
 
+protected:
+    // the dtor is private because only DecRef() can delete us
+    virtual ~wxGridCellAttr()
+    {
+        wxSafeDecRef(m_renderer);
+        wxSafeDecRef(m_editor);
+    }
+
 private:
     enum wxAttrReadMode
     {
@@ -730,12 +729,6 @@ private:
     // the common part of all ctors
     void Init(wxGridCellAttr *attrDefault = NULL);
 
-    // the dtor is private because only DecRef() can delete us
-    ~wxGridCellAttr()
-    {
-        wxSafeDecRef(m_renderer);
-        wxSafeDecRef(m_editor);
-    }
 
     // the ref count - when it goes to 0, we die
     size_t   m_nRef;
@@ -1079,14 +1072,14 @@ public:
             const wxPoint& pos = wxDefaultPosition,
             const wxSize& size = wxDefaultSize,
             long style = wxWANTS_CHARS,
-            const wxString& name = wxPanelNameStr );
+            const wxString& name = wxGridNameStr );
 
     bool Create( wxWindow *parent,
             wxWindowID id,
             const wxPoint& pos = wxDefaultPosition,
             const wxSize& size = wxDefaultSize,
             long style = wxWANTS_CHARS,
-            const wxString& name = wxPanelNameStr );
+            const wxString& name = wxGridNameStr );
 
     virtual ~wxGrid();
 
@@ -1125,6 +1118,7 @@ public:
 
     void DoEndDragResizeRow();
     void DoEndDragResizeCol();
+    void DoEndDragMoveCol();
 
     wxGridTableBase * GetTable() const { return m_table; }
     bool SetTable( wxGridTableBase *table, bool takeOwnership = false,
@@ -1175,7 +1169,7 @@ public:
     //
     void StringToLines( const wxString& value, wxArrayString& lines );
 
-    void GetTextBoxSize( wxDC& dc,
+    void GetTextBoxSize( const wxDC& dc,
                          const wxArrayString& lines,
                          long *width, long *height );
 
@@ -1228,7 +1222,7 @@ public:
     //
     void XYToCell( int x, int y, wxGridCellCoords& );
     int  YToRow( int y );
-    int  XToCol( int x );
+    int  XToCol( int x, bool clipToMinMax = false );
 
     int  YToEdgeOfRow( int y );
     int  XToEdgeOfCol( int x );
@@ -1283,6 +1277,12 @@ public:
     wxString GetRowLabelValue( int row );
     wxString GetColLabelValue( int col );
     wxColour GetGridLineColour() { return m_gridLineColour; }
+
+    // these methods may be overridden to customize individual grid lines
+    // appearance
+    virtual wxPen GetDefaultGridLinePen();
+    virtual wxPen GetRowGridLinePen(int row);
+    virtual wxPen GetColGridLinePen(int col);
     wxColour GetCellHighlightColour() { return m_cellHighlightColour; }
     int      GetCellHighlightPenWidth() { return m_cellHighlightPenWidth; }
     int      GetCellHighlightROPenWidth() { return m_cellHighlightROPenWidth; }
@@ -1308,6 +1308,9 @@ public:
     void     EnableDragColSize( bool enable = true );
     void     DisableDragColSize() { EnableDragColSize( false ); }
     bool     CanDragColSize() { return m_canDragColSize; }
+    void     EnableDragColMove( bool enable = true );
+    void     DisableDragColMove() { EnableDragColMove( false ); }
+    bool     CanDragColMove() { return m_canDragColMove; }
     void     EnableDragGridSize(bool enable = true);
     void     DisableDragGridSize() { EnableDragGridSize(false); }
     bool     CanDragGridSize() { return m_canDragGridSize; }
@@ -1363,6 +1366,33 @@ public:
 
     void     SetColSize( int col, int width );
 
+    //Column positions
+    int GetColAt( int colPos ) const
+    {
+        if ( m_colAt.IsEmpty() )
+            return colPos;
+        else
+            return m_colAt[colPos];
+    }
+
+    void SetColPos( int colID, int newPos );
+
+    int GetColPos( int colID ) const
+    {
+        if ( m_colAt.IsEmpty() )
+            return colID;
+        else
+        {
+            for ( int i = 0; i < m_numCols; i++ )
+            {
+                if ( m_colAt[i] == colID )
+                    return i;
+            }
+        }
+
+        return -1;
+    }
+
     // automatically size the column or row to fit to its contents, if
     // setAsMin is true, this optimal width will also be set as minimal width
     // for this column
@@ -1871,7 +1901,8 @@ protected:
         WXGRID_CURSOR_RESIZE_ROW,
         WXGRID_CURSOR_RESIZE_COL,
         WXGRID_CURSOR_SELECT_ROW,
-        WXGRID_CURSOR_SELECT_COL
+        WXGRID_CURSOR_SELECT_COL,
+        WXGRID_CURSOR_MOVE_COL
     };
 
     // this method not only sets m_cursorMode but also sets the correct cursor
@@ -1887,8 +1918,13 @@ protected:
     wxWindow *m_winCapture;     // the window which captured the mouse
     CursorMode m_cursorMode;
 
+    //Column positions
+    wxArrayInt m_colAt;
+    int m_moveToCol;
+
     bool    m_canDragRowSize;
     bool    m_canDragColSize;
+    bool    m_canDragColMove;
     bool    m_canDragGridSize;
     bool    m_canDragCell;
     int     m_dragLastPos;
@@ -1929,6 +1965,7 @@ protected:
     void OnSize( wxSizeEvent& );
     void OnKeyDown( wxKeyEvent& );
     void OnKeyUp( wxKeyEvent& );
+    void OnChar( wxKeyEvent& );
     void OnEraseBackground( wxEraseEvent& );
 
 
@@ -1981,6 +2018,16 @@ public:
     bool        MetaDown() { return m_meta; }
     bool        ShiftDown() { return m_shift; }
     bool        AltDown() { return m_alt; }
+    bool        CmdDown()
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
+
+    virtual wxEvent *Clone() const { return new wxGridEvent(*this); }
 
 protected:
     int         m_row;
@@ -1993,7 +2040,7 @@ protected:
     bool        m_shift;
     bool        m_alt;
 
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridEvent)
+    DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEvent)
 };
 
 class WXDLLIMPEXP_ADV wxGridSizeEvent : public wxNotifyEvent
@@ -2015,6 +2062,16 @@ public:
     bool        MetaDown() { return m_meta; }
     bool        ShiftDown() { return m_shift; }
     bool        AltDown() { return m_alt; }
+    bool        CmdDown()
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
+    
+    virtual wxEvent *Clone() const { return new wxGridSizeEvent(*this); }
 
 protected:
     int         m_rowOrCol;
@@ -2025,7 +2082,7 @@ protected:
     bool        m_shift;
     bool        m_alt;
 
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridSizeEvent)
+    DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridSizeEvent)
 };
 
 
@@ -2062,6 +2119,16 @@ public:
     bool        MetaDown()     { return m_meta; }
     bool        ShiftDown()    { return m_shift; }
     bool        AltDown()      { return m_alt; }
+    bool        CmdDown()
+    {
+#if defined(__WXMAC__) || defined(__WXCOCOA__)
+        return MetaDown();
+#else
+        return ControlDown();
+#endif
+    }
+    
+    virtual wxEvent *Clone() const { return new wxGridRangeSelectEvent(*this); }
 
 protected:
     wxGridCellCoords  m_topLeft;
@@ -2072,7 +2139,7 @@ protected:
     bool              m_shift;
     bool              m_alt;
 
-    DECLARE_DYNAMIC_CLASS_NO_COPY(wxGridRangeSelectEvent)
+    DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridRangeSelectEvent)
 };
 
 
@@ -2095,14 +2162,15 @@ public:
     void SetRow(int row)                { m_row = row; }
     void SetCol(int col)                { m_col = col; }
     void SetControl(wxControl* ctrl)    { m_ctrl = ctrl; }
+    
+    virtual wxEvent *Clone() const { return new wxGridEditorCreatedEvent(*this); }
 
 private:
     int m_row;
     int m_col;
     wxControl* m_ctrl;
 
-    DECLARE_DYNAMIC_CLASS(wxGridEditorCreatedEvent)
-    DECLARE_NO_COPY_CLASS(wxGridEditorCreatedEvent)
+    DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxGridEditorCreatedEvent)
 };
 
 
@@ -2206,5 +2274,5 @@ extern const int wxEVT_GRID_CHANGE_SEL_LABEL;
 
 #endif
 
-#endif  // ifndef wxUSE_GRID
-
+#endif // wxUSE_GRID
+#endif // _WX_GENERIC_GRID_H_