X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3c6e3872b391fd2d3b3ff1cee596dd143345f686..42f8298f6f42d5d63bb3caf65682b7d9d9f8b702:/wxPython/src/grid.i diff --git a/wxPython/src/grid.i b/wxPython/src/grid.i index 42544af69c..d5fb58ff43 100644 --- a/wxPython/src/grid.i +++ b/wxPython/src/grid.i @@ -39,8 +39,7 @@ MAKE_CONST_WXSTRING_NOSWIG(EmptyString); MAKE_CONST_WXSTRING_NOSWIG(PanelNameStr); -MAKE_CONST_WXSTRING2(DateTimeFormatStr, wxT("%c")); - +MAKE_CONST_WXSTRING_NOSWIG(DefaultDateTimeFormat); //--------------------------------------------------------------------------- // OOR related typemaps and helper functions @@ -63,7 +62,8 @@ PyObject* wxPyMake_##TYPE(TYPE* source, bool setThisOwn) { \ wxPyOORClientData* data = (wxPyOORClientData*)source->GetClientObject(); \ if (data) { \ target = data->m_obj; \ - Py_INCREF(target); \ + if (target) \ + Py_INCREF(target); \ } \ /* Otherwise make a new wrapper for it the old fashioned way and \ give it the OOR treatment */ \ @@ -521,28 +521,30 @@ const wxRect wxGridNoCellRect; %mutable; -%rename(GRID_DEFAULT_NUMBER_ROWS) WXGRID_DEFAULT_NUMBER_ROWS; -%rename(GRID_DEFAULT_NUMBER_COLS) WXGRID_DEFAULT_NUMBER_COLS; -%rename(GRID_DEFAULT_ROW_HEIGHT) WXGRID_DEFAULT_ROW_HEIGHT; -%rename(GRID_DEFAULT_COL_WIDTH) WXGRID_DEFAULT_COL_WIDTH; -%rename(GRID_DEFAULT_COL_LABEL_HEIGHT) WXGRID_DEFAULT_COL_LABEL_HEIGHT; -%rename(GRID_DEFAULT_ROW_LABEL_WIDTH) WXGRID_DEFAULT_ROW_LABEL_WIDTH; -%rename(GRID_LABEL_EDGE_ZONE) WXGRID_LABEL_EDGE_ZONE; -%rename(GRID_MIN_ROW_HEIGHT) WXGRID_MIN_ROW_HEIGHT; -%rename(GRID_MIN_COL_WIDTH) WXGRID_MIN_COL_WIDTH; -%rename(GRID_DEFAULT_SCROLLBAR_WIDTH) WXGRID_DEFAULT_SCROLLBAR_WIDTH; +%{ +#define wxGRID_DEFAULT_NUMBER_ROWS WXGRID_DEFAULT_NUMBER_ROWS +#define wxGRID_DEFAULT_NUMBER_COLS WXGRID_DEFAULT_NUMBER_COLS +#define wxGRID_DEFAULT_ROW_HEIGHT WXGRID_DEFAULT_ROW_HEIGHT +#define wxGRID_DEFAULT_COL_WIDTH WXGRID_DEFAULT_COL_WIDTH +#define wxGRID_DEFAULT_COL_LABEL_HEIGHT WXGRID_DEFAULT_COL_LABEL_HEIGHT +#define wxGRID_DEFAULT_ROW_LABEL_WIDTH WXGRID_DEFAULT_ROW_LABEL_WIDTH +#define wxGRID_LABEL_EDGE_ZONE WXGRID_LABEL_EDGE_ZONE +#define wxGRID_MIN_ROW_HEIGHT WXGRID_MIN_ROW_HEIGHT +#define wxGRID_MIN_COL_WIDTH WXGRID_MIN_COL_WIDTH +#define wxGRID_DEFAULT_SCROLLBAR_WIDTH WXGRID_DEFAULT_SCROLLBAR_WIDTH +%} enum { - WXGRID_DEFAULT_NUMBER_ROWS, - WXGRID_DEFAULT_NUMBER_COLS, - WXGRID_DEFAULT_ROW_HEIGHT, - WXGRID_DEFAULT_COL_WIDTH, - WXGRID_DEFAULT_COL_LABEL_HEIGHT, - WXGRID_DEFAULT_ROW_LABEL_WIDTH, - WXGRID_LABEL_EDGE_ZONE, - WXGRID_MIN_ROW_HEIGHT, - WXGRID_MIN_COL_WIDTH, - WXGRID_DEFAULT_SCROLLBAR_WIDTH + wxGRID_DEFAULT_NUMBER_ROWS, + wxGRID_DEFAULT_NUMBER_COLS, + wxGRID_DEFAULT_ROW_HEIGHT, + wxGRID_DEFAULT_COL_WIDTH, + wxGRID_DEFAULT_COL_LABEL_HEIGHT, + wxGRID_DEFAULT_ROW_LABEL_WIDTH, + wxGRID_LABEL_EDGE_ZONE, + wxGRID_MIN_ROW_HEIGHT, + wxGRID_MIN_COL_WIDTH, + wxGRID_DEFAULT_SCROLLBAR_WIDTH }; @@ -556,7 +558,8 @@ class wxGridCellRenderer public: %extend { void _setOORInfo(PyObject* _self) { - self->SetClientObject(new wxPyOORClientData(_self)); + if (!self->GetClientObject()) + self->SetClientObject(new wxPyOORClientData(_self)); } } @@ -732,8 +735,8 @@ class wxGridCellDateTimeRenderer : public wxGridCellStringRenderer { public: %pythonAppend wxGridCellDateTimeRenderer "self._setOORInfo(self)" - wxGridCellDateTimeRenderer(wxString outformat = wxPyDateTimeFormatStr, - wxString informat = wxPyDateTimeFormatStr); + wxGridCellDateTimeRenderer(wxString outformat = wxPyDefaultDateTimeFormat, + wxString informat = wxPyDefaultDateTimeFormat); }; @@ -762,7 +765,8 @@ class wxGridCellEditor public: %extend { void _setOORInfo(PyObject* _self) { - self->SetClientObject(new wxPyOORClientData(_self)); + if (!self->GetClientObject()) + self->SetClientObject(new wxPyOORClientData(_self)); } } @@ -830,7 +834,7 @@ public: bool EndEdit(int row, int col, wxGrid* grid) { - bool rv = False; + bool rv = false; bool blocked = wxPyBeginBlockThreads(); if (wxPyCBH_findCallback(m_myInst, "EndEdit")) { PyObject* go = wxPyMake_wxObject(grid,false); @@ -988,7 +992,7 @@ public: %pythonAppend wxGridCellChoiceEditor "self._setOORInfo(self)" wxGridCellChoiceEditor(int choices = 0, const wxString* choices_array = NULL, - bool allowOthers = False); + bool allowOthers = false); virtual wxString GetValue(); }; @@ -1030,14 +1034,15 @@ public: %extend { void _setOORInfo(PyObject* _self) { - self->SetClientObject(new wxPyOORClientData(_self)); + if (!self->GetClientObject()) + self->SetClientObject(new wxPyOORClientData(_self)); } } %pythonAppend wxGridCellAttr "self._setOORInfo(self)" wxGridCellAttr(wxGridCellAttr *attrDefault = NULL); - + wxGridCellAttr *Clone() const; void MergeWith(wxGridCellAttr *mergefrom); void IncRef(); @@ -1047,8 +1052,8 @@ public: 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 SetOverflow( bool allow = true ); + void SetReadOnly(bool isReadOnly = true); void SetRenderer(wxGridCellRenderer *renderer); void SetEditor(wxGridCellEditor* editor); @@ -1095,7 +1100,8 @@ public: %extend { void _setOORInfo(PyObject* _self) { - self->SetClientObject(new wxPyOORClientData(_self)); + if (!self->GetClientObject()) + self->SetClientObject(new wxPyOORClientData(_self)); } } @@ -1156,7 +1162,8 @@ public: %extend { void _setOORInfo(PyObject* _self) { - self->SetClientObject(new wxPyOORClientData(_self)); + if (!self->GetClientObject()) + self->SetClientObject(new wxPyOORClientData(_self)); } } @@ -1445,7 +1452,7 @@ bool wxGridCellCoords_helper(PyObject* source, wxGridCellCoords** obj) { if (source == Py_None) { **obj = wxGridCellCoords(-1,-1); - return True; + return true; } // If source is an object instance then it may already be the right type @@ -1454,7 +1461,7 @@ bool wxGridCellCoords_helper(PyObject* source, wxGridCellCoords** obj) { if (! wxPyConvertSwigPtr(source, (void **)&ptr, wxT("wxGridCellCoords"))) goto error; *obj = ptr; - return True; + return true; } // otherwise a 2-tuple of integers is expected else if (PySequence_Check(source) && PyObject_Length(source) == 2) { @@ -1468,12 +1475,12 @@ bool wxGridCellCoords_helper(PyObject* source, wxGridCellCoords** obj) { **obj = wxGridCellCoords(PyInt_AsLong(o1), PyInt_AsLong(o2)); Py_DECREF(o1); Py_DECREF(o2); - return True; + return true; } error: PyErr_SetString(PyExc_TypeError, "Expected a 2-tuple of integers or a wxGridCellCoords object."); - return False; + return false; } @@ -1482,13 +1489,13 @@ bool wxGridCellCoords_typecheck(PyObject* source) { if (wxPySwigInstance_Check(source) && wxPyConvertSwigPtr(source, (void **)&ptr, wxT("wxGridCellCoords"))) - return True; + return true; PyErr_Clear(); if (PySequence_Check(source) && PySequence_Length(source) == 2) - return True; + return true; - return False; + return false; } %} @@ -1584,6 +1591,9 @@ class wxGrid : public wxScrolledWindow { public: %pythonAppend wxGrid "self._setOORInfo(self)" + %pythonAppend wxGrid() "" + + %typemap(out) wxGrid*; // turn off this typemap wxGrid( wxWindow *parent, wxWindowID id=-1, @@ -1592,7 +1602,11 @@ public: long style = wxWANTS_CHARS, const wxString& name = wxPyPanelNameStr); - %name(PreGrid) wxGrid(); + %RenameCtor(PreGrid, wxGrid()); + + + // Turn it back on again + %typemap(out) wxGrid* { $result = wxPyMake_wxObject($1, $owner); } bool Create( wxWindow *parent, @@ -1630,17 +1644,17 @@ public: wxGridTableBase * GetTable() const; - bool SetTable( wxGridTableBase *table, bool takeOwnership=False, + bool SetTable( wxGridTableBase *table, bool takeOwnership=false, WXGRIDSELECTIONMODES selmode = wxGrid::wxGridSelectCells ); void ClearGrid(); - bool InsertRows( int pos = 0, int numRows = 1, bool updateLabels=True ); - bool AppendRows( int numRows = 1, bool updateLabels=True ); - bool DeleteRows( int pos = 0, int numRows = 1, bool updateLabels=True ); - bool InsertCols( int pos = 0, int numCols = 1, bool updateLabels=True ); - bool AppendCols( int numCols = 1, bool updateLabels=True ); - bool DeleteCols( int pos = 0, int numCols = 1, bool updateLabels=True ); + bool InsertRows( int pos = 0, int numRows = 1, bool updateLabels=true ); + bool AppendRows( int numRows = 1, bool updateLabels=true ); + bool DeleteRows( int pos = 0, int numRows = 1, bool updateLabels=true ); + bool InsertCols( int pos = 0, int numCols = 1, bool updateLabels=true ); + bool AppendCols( int numCols = 1, bool updateLabels=true ); + bool DeleteCols( int pos = 0, int numCols = 1, bool updateLabels=true ); // this function is called when the current cell highlight must be redrawn @@ -1682,7 +1696,7 @@ public: bool IsEditable(); void EnableEditing( bool edit ); - void EnableCellEditControl( bool enable = True ); + void EnableCellEditControl( bool enable = true ); void DisableCellEditControl(); bool CanEnableCellControl() const; bool IsCellEditControlEnabled() const; @@ -1726,8 +1740,8 @@ public: // check to see if a cell is either wholly visible (the default arg) or // at least partially visible in the grid window // - bool IsVisible( int row, int col, bool wholeCellVisible = True ); - // TODO: ??? bool IsVisible( const wxGridCellCoords& coords, bool wholeCellVisible = True ); + bool IsVisible( int row, int col, bool wholeCellVisible = true ); + // TODO: ??? bool IsVisible( const wxGridCellCoords& coords, bool wholeCellVisible = true ); void MakeCellVisible( int row, int col ); // TODO: ??? void MakeCellVisible( const wxGridCellCoords& coords ); @@ -1788,21 +1802,32 @@ public: void SetCellHighlightPenWidth(int width); void SetCellHighlightROPenWidth(int width); - void EnableDragRowSize( bool enable = True ); + void EnableDragRowSize( bool enable = true ); void DisableDragRowSize(); bool CanDragRowSize(); - void EnableDragColSize( bool enable = True ); + void EnableDragColSize( bool enable = true ); void DisableDragColSize(); bool CanDragColSize(); - void EnableDragGridSize(bool enable = True); + void EnableDragGridSize(bool enable = true); void DisableDragGridSize(); bool CanDragGridSize(); + void EnableDragCell( bool enable = true ); + void DisableDragCell(); + bool CanDragCell(); + // 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); + // returns the attribute we may modify in place: a new one if this cell + // doesn't have any yet or the existing one if it does + // + // DecRef() must be called on the returned pointer, as usual + wxGridCellAttr *GetOrCreateCellAttr(int row, int col) const; + + // shortcuts for setting the column parameters // set the format for the data in the column: default is string @@ -1811,7 +1836,7 @@ public: void SetColFormatFloat(int col, int width = -1, int precision = -1); void SetColFormatCustom(int col, const wxString& typeName); - void EnableGridLines( bool enable = True ); + void EnableGridLines( bool enable = true ); bool GridLinesEnabled(); // ------ row and col formatting @@ -1842,22 +1867,22 @@ public: void, GetCellSize( int row, int col, int *OUTPUT, int *OUTPUT ), "GetCellSize(int row, int col) -> (num_rows, num_cols)"); - void SetDefaultRowSize( int height, bool resizeExistingRows = False ); + void SetDefaultRowSize( int height, bool resizeExistingRows = false ); void SetRowSize( int row, int height ); - void SetDefaultColSize( int width, bool resizeExistingCols = False ); + void SetDefaultColSize( int width, bool resizeExistingCols = false ); void SetColSize( int col, int width ); // 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 - void AutoSizeColumn( int col, bool setAsMin = True ); - void AutoSizeRow( int row, bool setAsMin = True ); + void AutoSizeColumn( int col, bool setAsMin = true ); + void AutoSizeRow( int row, bool setAsMin = true ); // auto size all columns (very ineffective for big grids!) - void AutoSizeColumns( bool setAsMin = True ); - void AutoSizeRows( bool setAsMin = True ); + void AutoSizeColumns( bool setAsMin = true ); + void AutoSizeRows( bool setAsMin = true ); // auto size the grid, that is make the columns/rows of the "right" size // and also set the grid size to just fit its contents @@ -1920,15 +1945,15 @@ public: bool IsReadOnly(int row, int col) const; // make the cell editable/readonly - void SetReadOnly(int row, int col, bool isReadOnly = True); + void SetReadOnly(int row, int col, bool isReadOnly = true); // ------ selections of blocks of cells // - void SelectRow( int row, bool addToSelected = False ); - void SelectCol( int col, bool addToSelected = False ); + void SelectRow( int row, bool addToSelected = false ); + void SelectCol( int col, bool addToSelected = false ); void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol, - bool addToSelected = False ); + bool addToSelected = false ); // TODO: ??? void SelectBlock( const wxGridCellCoords& topLeft, // TODO: ??? const wxGridCellCoords& bottomRight ) @@ -1986,6 +2011,14 @@ public: wxWindow* GetGridColLabelWindow(); wxWindow* GetGridCornerLabelWindow(); + // Allow adjustment of scroll increment. The default is (15, 15). + void SetScrollLineX(int x); + void SetScrollLineY(int y); + int GetScrollLineX() const; + int GetScrollLineY() const; + + int GetScrollX(int x) const; + int GetScrollY(int y) const; static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); @@ -2002,8 +2035,8 @@ class wxGridEvent : public wxNotifyEvent { public: wxGridEvent(int id, wxEventType type, wxGrid* obj, - int row=-1, int col=-1, int x=-1, int y=-1, bool sel = True, - bool control=False, bool shift=False, bool alt=False, bool meta=False); + int row=-1, int col=-1, int x=-1, int y=-1, bool sel = true, + bool control=false, bool shift=false, bool alt=false, bool meta=false); virtual int GetRow(); virtual int GetCol(); @@ -2022,7 +2055,7 @@ class wxGridSizeEvent : public wxNotifyEvent public: wxGridSizeEvent(int id, wxEventType type, wxGrid* obj, int rowOrCol=-1, int x=-1, int y=-1, - bool control=False, bool shift=False, bool alt=False, bool meta=False); + bool control=false, bool shift=false, bool alt=false, bool meta=false); int GetRowOrCol(); wxPoint GetPosition(); @@ -2040,9 +2073,9 @@ public: wxGridRangeSelectEvent(int id, wxEventType type, wxGrid* obj, const wxGridCellCoords& topLeft, const wxGridCellCoords& bottomRight, - bool sel = True, - bool control=False, bool shift=False, - bool alt=False, bool meta=False); + bool sel = true, + bool control=false, bool shift=false, + bool alt=false, bool meta=false); wxGridCellCoords GetTopLeftCoords(); wxGridCellCoords GetBottomRightCoords(); @@ -2089,6 +2122,7 @@ public: %constant wxEventType wxEVT_GRID_EDITOR_SHOWN; %constant wxEventType wxEVT_GRID_EDITOR_HIDDEN; %constant wxEventType wxEVT_GRID_EDITOR_CREATED; +%constant wxEventType wxEVT_GRID_CELL_BEGIN_DRAG; @@ -2109,6 +2143,7 @@ EVT_GRID_SELECT_CELL = wx.PyEventBinder( wxEVT_GRID_SELECT_CELL ) EVT_GRID_EDITOR_SHOWN = wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN ) EVT_GRID_EDITOR_HIDDEN = wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN ) EVT_GRID_EDITOR_CREATED = wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED ) +EVT_GRID_CELL_BEGIN_DRAG = wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG ) %# The same as above but with the ability to specify an identifier @@ -2128,6 +2163,8 @@ EVT_GRID_CMD_SELECT_CELL = wx.PyEventBinder( wxEVT_GRID_SELECT_CELL, EVT_GRID_CMD_EDITOR_SHOWN = wx.PyEventBinder( wxEVT_GRID_EDITOR_SHOWN, 1 ) EVT_GRID_CMD_EDITOR_HIDDEN = wx.PyEventBinder( wxEVT_GRID_EDITOR_HIDDEN, 1 ) EVT_GRID_CMD_EDITOR_CREATED = wx.PyEventBinder( wxEVT_GRID_EDITOR_CREATED, 1 ) +EVT_GRID_CMD_CELL_BEGIN_DRAG = wx.PyEventBinder( wxEVT_GRID_CELL_BEGIN_DRAG, 1 ) + } //---------------------------------------------------------------------------