]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/grid.i
fix text scrolling in GTK2 (patch 703988)
[wxWidgets.git] / wxPython / src / grid.i
index c833668ceff135236382995fd49f549fd0d6eb71..06bb15121153fe9827afcb4e1b326b3d1a468caf 100644 (file)
@@ -1,4 +1,4 @@
-/////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
 // Name:        grid.i
 // Purpose:     SWIG definitions for the new wxGrid and related classes
 //
@@ -70,7 +70,7 @@ PyObject* wxPyMake_##TYPE(TYPE* source) { \
         /* Otherwise make a new wrapper for it the old fashioned way and \
            give it the OOR treatment */ \
         if (! target) { \
-            target = wxPyConstructObject(source, #TYPE, FALSE); \
+            target = wxPyConstructObject(source, wxT(#TYPE), FALSE); \
             if (target) \
                 source->SetClientObject(new wxPyOORClientData(target)); \
         } \
@@ -241,7 +241,7 @@ wxPyMake_TEMPLATE(wxGridTableBase)
         bool rval = 0;                                                          \
         bool found;                                                             \
         wxPyBeginBlockThreads();                                                \
-        if (wxPyCBH_findCallback(m_myInst, #CBNAME)) {                          \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) {                \
             PyObject* s = wx2PyString(c);                                       \
             rval = wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iiO)",a,b,s));\
             Py_DECREF(s);                                                       \
@@ -398,7 +398,7 @@ wxPyMake_TEMPLATE(wxGridTableBase)
     void CBNAME(int a, const wxString& c)  {                                    \
         bool found;                                                             \
         wxPyBeginBlockThreads();                                                \
-        if (wxPyCBH_findCallback(m_myInst, #CBNAME)) {                          \
+        if ((found = wxPyCBH_findCallback(m_myInst, #CBNAME))) {                \
             PyObject* s = wx2PyString(c);                                       \
             wxPyCBH_callCallback(m_myInst, Py_BuildValue("(iO)",a,s));          \
             Py_DECREF(s);                                                       \
@@ -571,7 +571,7 @@ public:
             PyObject* go = wxPyMake_wxObject(&grid);
             PyObject* dco = wxPyMake_wxObject(&dc);
             PyObject* ao = wxPyMake_wxGridCellAttr(&attr);
-            PyObject* ro = wxPyConstructObject((void*)&rect, "wxRect", 0);
+            PyObject* ro = wxPyConstructObject((void*)&rect, wxT("wxRect"), 0);
 
             wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OOOOiii)", go, ao, dco, ro,
                                                          row, col, isSelected));
@@ -747,6 +747,9 @@ public:
     wxControl* GetControl();
     void SetControl(wxControl* control);
 
+    wxGridCellAttr* GetCellAttr();
+    void SetCellAttr(wxGridCellAttr* attr);
+
     void SetParameters(const wxString& params);
     void IncRef();
     void DecRef();
@@ -816,7 +819,7 @@ public:
     }
 
 
-    wxGridCellEditor*Clone() const {
+    wxGridCellEditor* Clone() const {
         wxGridCellEditor* rval = NULL;
         wxPyBeginBlockThreads();
         if (wxPyCBH_findCallback(m_myInst, "Clone")) {
@@ -856,7 +859,7 @@ public:
         wxPyBeginBlockThreads();
         if ((found = wxPyCBH_findCallback(m_myInst, "PaintBackground)"))) {
             PyObject* ao = wxPyMake_wxGridCellAttr(attr);
-            PyObject* ro = wxPyConstructObject((void*)&rectCell, "wxRect", 0);
+            PyObject* ro = wxPyConstructObject((void*)&rectCell, wxT("wxRect"), 0);
 
             wxPyCBH_callCallback(m_myInst, Py_BuildValue("(OO)", ro, ao));
 
@@ -880,6 +883,7 @@ public:
     DEC_PYCALLBACK__(StartingClick);
     DEC_PYCALLBACK__(Destroy);
     DEC_PYCALLBACK__STRING(SetParameters);
+    DEC_PYCALLBACK_STRING__constpure(GetValue);
 
     PYPRIVATE;
 };
@@ -893,6 +897,7 @@ IMP_PYCALLBACK__any(wxPyGridCellEditor, wxGridCellEditor, StartingKey, wxKeyEven
 IMP_PYCALLBACK__any(wxPyGridCellEditor, wxGridCellEditor, HandleReturn, wxKeyEvent);
 IMP_PYCALLBACK__(wxPyGridCellEditor, wxGridCellEditor, StartingClick);
 IMP_PYCALLBACK__(wxPyGridCellEditor, wxGridCellEditor, Destroy);
+IMP_PYCALLBACK_STRING__constpure(wxPyGridCellEditor, wxGridCellEditor, GetValue);
 
 %}
 
@@ -908,7 +913,7 @@ public:
     void base_SetSize(const wxRect& rect);
     void base_Show(bool show, wxGridCellAttr *attr = NULL);
     void base_PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr);
-    void base_IsAcceptedKey(wxKeyEvent& event);
+    bool base_IsAcceptedKey(wxKeyEvent& event);
     void base_StartingKey(wxKeyEvent& event);
     void base_StartingClick();
     void base_HandleReturn(wxKeyEvent& event);
@@ -924,6 +929,7 @@ class wxGridCellTextEditor : public wxGridCellEditor
 public:
     wxGridCellTextEditor();
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -932,6 +938,7 @@ class wxGridCellNumberEditor : public wxGridCellTextEditor
 public:
     wxGridCellNumberEditor(int min = -1, int max = -1);
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -940,6 +947,7 @@ class wxGridCellFloatEditor : public wxGridCellTextEditor
 public:
     wxGridCellFloatEditor();
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -948,6 +956,7 @@ class wxGridCellBoolEditor : public wxGridCellEditor
 public:
     wxGridCellBoolEditor();
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 class wxGridCellChoiceEditor : public wxGridCellEditor
@@ -957,6 +966,7 @@ public:
                            const wxString* choices = NULL,
                            bool allowOthers = FALSE);
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -965,6 +975,7 @@ class wxGridCellEnumEditor : public wxGridCellChoiceEditor
 public:
     wxGridCellEnumEditor( const wxString& choices = wxPyEmptyString );
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -973,6 +984,7 @@ class wxGridCellAutoWrapStringEditor : public wxGridCellTextEditor
 public:
     wxGridCellAutoWrapStringEditor();
     %pragma(python) addtomethod = "__init__:self._setOORInfo(self)"
+    virtual wxString GetValue();
 };
 
 
@@ -1010,6 +1022,8 @@ public:
     void SetBackgroundColour(const wxColour& colBack);
     void SetFont(const wxFont& font);
     void SetAlignment(int hAlign, int vAlign);
+    void SetSize(int num_rows, int num_cols);
+    void SetOverflow( bool allow = TRUE );
     void SetReadOnly(bool isReadOnly = TRUE);
 
     void SetRenderer(wxGridCellRenderer *renderer);
@@ -1023,11 +1037,14 @@ public:
     bool HasRenderer() const;
     bool HasEditor() const;
     bool HasReadWriteMode() const;
+    bool HasOverflowMode() const;
 
     wxColour GetTextColour() const;
     wxColour GetBackgroundColour() const;
     wxFont GetFont() const;
     void GetAlignment(int *OUTPUT, int *OUTPUT) const;
+    void GetSize(int *OUTPUT, int *OUTPUT) const;
+    bool GetOverflow() const;
     wxGridCellRenderer *GetRenderer(wxGrid* grid, int row, int col) const;
     wxGridCellEditor *GetEditor(wxGrid* grid, int row, int col) const;
 
@@ -1399,8 +1416,17 @@ public:
             return *self != other;
         }
     }
-    %pragma(python) addtoclass = "def __str__(self): return str(self.asTuple())"
-    %pragma(python) addtoclass = "def __repr__(self): return str(self.asTuple())"
+    %pragma(python) addtoclass = "
+    def __str__(self):                   return str(self.asTuple())
+    def __repr__(self):                  return 'wxGridCellCoords'+str(self.asTuple())
+    def __len__(self):                   return len(self.asTuple())
+    def __getitem__(self, index):        return self.asTuple()[index]
+    def __setitem__(self, index, val):
+        if index == 0: self.SetRow(val)
+        elif index == 1: self.SetCol(val)
+        else: raise IndexError
+    "
+
 };
 
 // Typemap to allow conversion of sequence objects to wxGridCellCoords...
@@ -1436,6 +1462,36 @@ bool wxGridCellCoords_helper(PyObject* source, wxGridCellCoords** obj) {
 }
 %}
 
+
+
+// Typemap to convert an array of cells coords to a list of tuples...
+%typemap(python, out) wxGridCellCoordsArray {
+    $target = wxGridCellCoordsArray_helper($source);
+}
+
+%typemap(python, ret) wxGridCellCoordsArray {
+    delete $source;
+}
+
+
+// ...and the helper function for the above typemap.
+%{
+PyObject* wxGridCellCoordsArray_helper(const wxGridCellCoordsArray* source)
+{
+    PyObject* list = PyList_New(0);
+    size_t idx;
+    for (idx = 0; idx < source->GetCount(); idx += 1) {
+        wxGridCellCoords& coord = source->Item(idx);
+        PyObject* tup = PyTuple_New(2);
+        PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(coord.GetRow()));
+        PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(coord.GetCol()));
+        PyList_Append(list, tup);
+        Py_DECREF(tup);
+    }
+    return list;
+}
+%}
+
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
 // The grid itself
@@ -1470,6 +1526,7 @@ public:
     bool CreateGrid( int numRows, int numCols,
                      WXGRIDSELECTIONMODES selmode = wxGrid::wxGridSelectCells );
     void SetSelectionMode(WXGRIDSELECTIONMODES selmode);
+    WXGRIDSELECTIONMODES GetSelectionMode();
 
 
     // ------ grid dimensions
@@ -1504,7 +1561,8 @@ public:
     //
     void DrawTextRectangle( wxDC& dc, const wxString&, const wxRect&,
                             int horizontalAlignment = wxLEFT,
-                            int verticalAlignment = wxTOP );
+                            int verticalAlignment = wxTOP,
+                            int textOrientation = wxHORIZONTAL );
 
 //      // Split a string containing newline chararcters into an array of
 //      // strings and return the number of lines
@@ -1525,11 +1583,12 @@ public:
     void     EndBatch();
     int      GetBatchCount();
     void     ForceRefresh();
+    void     Refresh(bool eraseb=TRUE, const wxRect* rect= NULL);
 
 
     // ------ edit control functions
     //
-    bool IsEditable() { return m_editable; }
+    bool IsEditable();
     void EnableEditing( bool edit );
 
     void EnableCellEditControl( bool enable = TRUE );
@@ -1608,6 +1667,7 @@ public:
     wxFont   GetLabelFont();
     void     GetRowLabelAlignment( int *OUTPUT, int *OUTPUT );
     void     GetColLabelAlignment( int *OUTPUT, int *OUTPUT );
+    int      GetColLabelTextOrientation();
     wxString GetRowLabelValue( int row );
     wxString GetColLabelValue( int col );
     wxColour GetGridLineColour();
@@ -1622,6 +1682,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& );
@@ -1640,6 +1701,7 @@ public:
     bool     CanDragGridSize();
 
     // this sets the specified attribute for all cells in this row/col
+    void     SetAttr(int row, int col, wxGridCellAttr *attr);
     void     SetRowAttr(int row, wxGridCellAttr *attr);
     void     SetColAttr(int col, wxGridCellAttr *attr);
 
@@ -1666,8 +1728,11 @@ public:
     wxColour GetCellTextColour( int row, int col );
     wxFont   GetDefaultCellFont();
     wxFont   GetCellFont( int row, int col );
-    void     GetDefaultCellAlignment( int *horiz, int *vert );
-    void     GetCellAlignment( int row, int col, int *horiz, int *vert );
+    void     GetDefaultCellAlignment( int *OUTPUT, int *OUTPUT );
+    void     GetCellAlignment( int row, int col, int *OUTPUT, int *OUTPUT );
+    bool     GetDefaultCellOverflow();
+    bool     GetCellOverflow( int row, int col );
+    void     GetCellSize( int row, int col, int *OUTPUT, int *OUTPUT );
 
     void     SetDefaultRowSize( int height, bool resizeExistingRows = FALSE );
     void     SetRowSize( int row, int height );
@@ -1690,12 +1755,24 @@ 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 );
 
+    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& );
@@ -1705,6 +1782,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);
@@ -1750,6 +1830,16 @@ public:
     bool IsInSelection( int row, int col );
     // TODO: ??? bool IsInSelection( const wxGridCellCoords& coords )
 
+    const wxGridCellCoordsArray GetSelectedCells() const;
+    const wxGridCellCoordsArray GetSelectionBlockTopLeft() const;
+    const wxGridCellCoordsArray GetSelectionBlockBottomRight() const;
+    const wxArrayInt GetSelectedRows() const;
+    const wxArrayInt GetSelectedCols() const;
+
+    void DeselectRow( int row );
+    void DeselectCol( int col );
+    void DeselectCell( int row, int col );
+
 
     // This function returns the rectangle that encloses the block of cells
     // limited by TopLeft and BottomRight cell in device coords and clipped
@@ -1948,8 +2038,6 @@ def EVT_GRID_EDITOR_CREATED(win, fn):
 //---------------------------------------------------------------------------
 
 %init %{
-    wxClassInfo::CleanUpClasses();
-    wxClassInfo::InitializeClasses();
 %}
 
 //---------------------------------------------------------------------------