class WXDLLEXPORT wxGridTableBase : public wxObject
{
- wxGrid * m_view;
-
- public:
+public:
wxGridTableBase();
virtual ~wxGridTableBase();
virtual wxString GetValue( int row, int col ) = 0;
virtual void SetValue( int row, int col, const wxString& s ) = 0;
virtual bool IsEmptyCell( int row, int col ) = 0;
-
+
// Overriding these is optional
//
virtual void SetView( wxGrid *grid ) { m_view = grid; }
virtual wxString GetColLabelValue( int col );
virtual void SetRowLabelValue( int WXUNUSED(row), const wxString& ) {}
virtual void SetColLabelValue( int WXUNUSED(col), const wxString& ) {}
-
+
+private:
+ wxGrid * m_view;
+
DECLARE_ABSTRACT_CLASS( wxGridTableBase );
};
// IDs for messages sent from grid table to view
//
-enum wxGridTableRequest {
+enum wxGridTableRequest
+{
wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000,
wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES,
wxGRIDTABLE_NOTIFY_ROWS_INSERTED,
class WXDLLEXPORT wxGridTableMessage
{
- wxGridTableBase *m_table;
- int m_id;
- int m_comInt1;
- int m_comInt2;
-
- public:
+public:
wxGridTableMessage();
wxGridTableMessage( wxGridTableBase *table, int id,
int comInt1 = -1,
void SetCommandInt( int comInt1 ) { m_comInt1 = comInt1; }
int GetCommandInt() { return m_comInt1; }
void SetCommandInt2( int comInt2 ) { m_comInt2 = comInt2; }
- int GetCommandInt2() { return m_comInt2; }
+ int GetCommandInt2() { return m_comInt2; }
+
+private:
+ wxGridTableBase *m_table;
+ int m_id;
+ int m_comInt1;
+ int m_comInt2;
};
class WXDLLEXPORT wxGridStringTable : public wxGridTableBase
{
- wxGridStringArray m_data;
-
- // These only get used if you set your own labels, otherwise the
- // GetRow/ColLabelValue functions return wxGridTableBase defaults
- //
- wxArrayString m_rowLabels;
- wxArrayString m_colLabels;
-
- public:
+public:
wxGridStringTable();
wxGridStringTable( int numRows, int numCols );
~wxGridStringTable();
wxString GetValue( int row, int col );
void SetValue( int row, int col, const wxString& s );
bool IsEmptyCell( int row, int col );
-
+
// overridden functions from wxGridTableBase
//
void Clear();
void SetColLabelValue( int col, const wxString& );
wxString GetRowLabelValue( int row );
wxString GetColLabelValue( int col );
-
+
+private:
+ wxGridStringArray m_data;
+
+ // These only get used if you set your own labels, otherwise the
+ // GetRow/ColLabelValue functions return wxGridTableBase defaults
+ //
+ wxArrayString m_rowLabels;
+ wxArrayString m_colLabels;
+
DECLARE_DYNAMIC_CLASS( wxGridStringTable )
};
class WXDLLEXPORT wxGridCellCoords
{
- long m_row;
- long m_col;
-
- public:
+public:
wxGridCellCoords() { m_row = m_col = -1; }
wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; }
long GetCol() const { return m_col; }
void SetCol( long n ) { m_col = n; }
void Set( long row, long col ) { m_row = row; m_col = col; }
-
+
wxGridCellCoords& operator=( const wxGridCellCoords& other )
{
if ( &other != this )
{
return (m_row == -1 && m_col == -1 );
}
+
+private:
+ long m_row;
+ long m_col;
};
// This set of classes is to provide for the use of different types of
-// cell edit controls in the grid while avoiding the wx class info
+// cell edit controls in the grid while avoiding the wx class info
// system in deference to wxPython
class WXDLLEXPORT wxGridTextCtrl : public wxTextCtrl
{
- wxGrid *m_grid;
-
- // TRUE for controls placed over cells,
- // FALSE for a control on a grid control panel
- bool m_isCellControl;
-
- wxString startValue;
-
- void OnKeyDown( wxKeyEvent& );
-
- public:
+public:
wxGridTextCtrl() {}
wxGridTextCtrl( wxWindow *,
wxGrid *,
void SetStartValue( const wxString& );
wxString GetStartValue() { return startValue; }
-
+
+private:
+ wxGrid *m_grid;
+
+ // TRUE for controls placed over cells,
+ // FALSE for a control on a grid control panel
+ bool m_isCellControl;
+
+ wxString startValue;
+
+ void OnKeyDown( wxKeyEvent& );
+
DECLARE_DYNAMIC_CLASS( wxGridTextCtrl )
DECLARE_EVENT_TABLE()
};
class WXDLLEXPORT wxGridRowLabelWindow : public wxWindow
{
+public:
+ wxGridRowLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridRowLabelWindow( wxGrid *parent, wxWindowID id,
+ const wxPoint &pos, const wxSize &size );
+
+private:
wxGrid *m_owner;
-
+
void OnPaint( wxPaintEvent& event );
void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
-public:
- wxGridRowLabelWindow() {}
- wxGridRowLabelWindow( wxGrid *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size );
-
DECLARE_DYNAMIC_CLASS(wxGridRowLabelWindow)
DECLARE_EVENT_TABLE()
};
class WXDLLEXPORT wxGridColLabelWindow : public wxWindow
{
+public:
+ wxGridColLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridColLabelWindow( wxGrid *parent, wxWindowID id,
+ const wxPoint &pos, const wxSize &size );
+
+private:
wxGrid *m_owner;
-
+
void OnPaint( wxPaintEvent &event );
void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
-public:
- wxGridColLabelWindow() {}
- wxGridColLabelWindow( wxGrid *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size );
-
DECLARE_DYNAMIC_CLASS(wxGridColLabelWindow)
DECLARE_EVENT_TABLE()
};
class WXDLLEXPORT wxGridCornerLabelWindow : public wxWindow
{
+public:
+ wxGridCornerLabelWindow() { m_owner = (wxGrid *)NULL; }
+ wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id,
+ const wxPoint &pos, const wxSize &size );
+
+private:
wxGrid *m_owner;
-
+
void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
-
- public:
- wxGridCornerLabelWindow() {}
- wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id,
- const wxPoint &pos, const wxSize &size );
DECLARE_DYNAMIC_CLASS(wxGridCornerLabelWindow)
DECLARE_EVENT_TABLE()
class WXDLLEXPORT wxGridWindow : public wxPanel
{
- wxGrid *m_owner;
- wxGridRowLabelWindow *m_rowLabelWin;
- wxGridColLabelWindow *m_colLabelWin;
-
- void OnPaint( wxPaintEvent &event );
- void OnMouseEvent( wxMouseEvent& event );
- void OnKeyDown( wxKeyEvent& );
-
public:
- wxGridWindow() {}
- wxGridWindow( wxGrid *parent,
+ wxGridWindow()
+ {
+ m_owner = (wxGrid *)NULL;
+ m_rowLabelWin = (wxGridRowLabelWindow *)NULL;
+ m_colLabelWin = (wxGridColLabelWindow *)NULL;
+ }
+
+ wxGridWindow( wxGrid *parent,
wxGridRowLabelWindow *rowLblWin,
wxGridColLabelWindow *colLblWin,
wxWindowID id, const wxPoint &pos, const wxSize &size );
void ScrollWindow( int dx, int dy, const wxRect *rect );
- DECLARE_DYNAMIC_CLASS(wxGridWindow)
- DECLARE_EVENT_TABLE()
-};
-
-
-
-class WXDLLEXPORT wxGrid : public wxScrolledWindow
-{
- protected:
- bool m_created;
-
- wxGridWindow *m_gridWin;
+private:
+ wxGrid *m_owner;
wxGridRowLabelWindow *m_rowLabelWin;
wxGridColLabelWindow *m_colLabelWin;
- wxGridCornerLabelWindow *m_cornerLabelWin;
- wxBoxSizer *m_mainSizer;
- wxBoxSizer *m_topSizer;
- wxBoxSizer *m_middleSizer;
-
- wxGridTableBase *m_table;
-
- int m_left;
- int m_top;
- int m_right;
- int m_bottom;
-
- int m_numRows;
- int m_numCols;
-
- wxGridCellCoords m_currentCellCoords;
-
- wxGridCellCoords m_selectedTopLeft;
- wxGridCellCoords m_selectedBottomRight;
-
- int m_defaultRowHeight;
- wxArrayInt m_rowHeights;
- wxArrayInt m_rowBottoms;
-
- int m_defaultColWidth;
- wxArrayInt m_colWidths;
- wxArrayInt m_colRights;
-
- int m_rowLabelWidth;
- int m_colLabelHeight;
-
- wxColour m_labelBackgroundColour;
- wxColour m_labelTextColour;
- wxFont m_labelFont;
-
- int m_rowLabelHorizAlign;
- int m_rowLabelVertAlign;
- int m_colLabelHorizAlign;
- int m_colLabelVertAlign;
-
- bool m_defaultRowLabelValues;
- bool m_defaultColLabelValues;
-
- wxColour m_gridLineColour;
- bool m_gridLinesEnabled;
-
- wxFont m_defaultCellFont;
-
- wxGridCellCoordsArray m_cellsExposed;
- wxArrayInt m_rowsExposed;
- wxArrayInt m_colsExposed;
- wxArrayInt m_rowLabelsExposed;
- wxArrayInt m_colLabelsExposed;
-
- bool m_inOnKeyDown;
- int m_batchCount;
-
- int m_cursorMode;
- enum { WXGRID_CURSOR_DEFAULT,
- WXGRID_CURSOR_SELECT_CELL,
- WXGRID_CURSOR_RESIZE_ROW,
- WXGRID_CURSOR_RESIZE_COL,
- WXGRID_CURSOR_SELECT_ROW,
- WXGRID_CURSOR_SELECT_COL
- };
-
- int m_dragLastPos;
- int m_dragRowOrCol;
- bool m_isDragging;
-
- wxGridCellCoords m_selectionStart;
-
- wxCursor m_rowResizeCursor;
- wxCursor m_colResizeCursor;
-
- bool m_editable; // applies to whole grid
- int m_editCtrlType; // for current cell
- wxWindow* m_cellEditCtrl;
- bool m_cellEditCtrlEnabled;
-
-
- void Create();
- void Init();
- void CalcDimensions();
- bool Redimension( wxGridTableMessage& );
-
-
- bool SendEvent( const wxEventType,
- int row, int col,
- wxMouseEvent& );
-
- bool SendEvent( const wxEventType,
- int row, int col );
-
-
- void OnPaint( wxPaintEvent& );
- void OnSize( wxSizeEvent& );
+ void OnPaint( wxPaintEvent &event );
+ void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& );
+ DECLARE_DYNAMIC_CLASS(wxGridWindow)
+ DECLARE_EVENT_TABLE()
+};
- void SetCurrentCell( const wxGridCellCoords& coords );
- void SetCurrentCell( int row, int col )
- { SetCurrentCell( wxGridCellCoords(row, col) ); }
-
-
- // ------ functions to get/send data (see also public functions)
- //
- bool GetModelValues();
- bool SetModelValues();
- ////////////////////// Public section ////////////////////
-
- public:
+class WXDLLEXPORT wxGrid : public wxScrolledWindow
+{
+public:
wxGrid()
{ Create(); }
-
+
wxGrid( wxWindow *parent,
wxWindowID id,
const wxPoint& pos = wxDefaultPosition,
long style = 0,
const wxString& name = wxPanelNameStr );
- ~wxGrid();
+ ~wxGrid();
bool CreateGrid( int numRows, int numCols );
-
+
// ------ grid dimensions
//
int GetNumberRows() { return m_numRows; }
int GetNumberCols() { return m_numCols; }
-
+
// ------ display update functions
//
- void CalcRowLabelsExposed( wxRegion& reg );
- void CalcColLabelsExposed( wxRegion& reg );
- void CalcCellsExposed( wxRegion& reg );
+ void CalcRowLabelsExposed( wxRegion& reg );
+ void CalcColLabelsExposed( wxRegion& reg );
+ void CalcCellsExposed( wxRegion& reg );
+
-
// ------ event handlers
//
void ProcessRowLabelMouseEvent( wxMouseEvent& event );
void ProcessColLabelMouseEvent( wxMouseEvent& event );
void ProcessCornerLabelMouseEvent( wxMouseEvent& event );
- void ProcessGridCellMouseEvent( wxMouseEvent& event );
+ void ProcessGridCellMouseEvent( wxMouseEvent& event );
bool ProcessTableMessage( wxGridTableMessage& );
-
+
wxGridTableBase * GetTable() const { return m_table; }
void SetTable( wxGridTableBase *table ) { m_table = table; }
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 DeleteCols( int pos = 0, int numCols = 1, bool updateLabels=TRUE );
void DrawGridCellArea( wxDC& dc );
void DrawCellBorder( wxDC& dc, const wxGridCellCoords& );
void DrawRowLabel( wxDC& dc, int row );
void DrawColLabels( wxDC& dc );
void DrawColLabel( wxDC& dc, int col );
-
+
// ------ Cell text drawing functions
//
// strings and return the number of lines
//
void StringToLines( const wxString& value, wxArrayString& lines );
-
+
void GetTextBoxSize( wxDC& dc,
wxArrayString& lines,
long *width, long *height );
-
+
// ------
// Code that does a lot of grid modification can be enclosed
bool IsEditable() { return m_editable; }
void EnableEditing( bool edit );
-#if 0 // at the moment the cell edit control is always active
+#if 0 // at the moment the cell edit control is always active
void EnableCellEditControl( bool enable );
#endif
void SetEditControlValue( const wxString& s = wxEmptyString );
void SaveEditControlValue();
-
+
// ------ grid location functions
- // Note that all of these functions work with the logical coordinates of
+ // Note that all of these functions work with the logical coordinates of
// grid cells and labels so you will need to convert from device
// coordinates for mouse events etc.
//
int GetGridCursorRow() { return m_currentCellCoords.GetRow(); }
int GetGridCursorCol() { return m_currentCellCoords.GetCol(); }
-
+
// check to see if a cell is either wholly visible (the default arg) or
// at least partially visible in the grid window
//
void MakeCellVisible( const wxGridCellCoords& coords )
{ MakeCellVisible( coords.GetRow(), coords.GetCol() ); }
-
+
// ------ grid cursor movement functions
//
void SetGridCursor( int row, int col )
bool MoveCursorLeftBlock();
bool MoveCursorRightBlock();
-
+
// ------ label and gridline formatting
//
int GetDefaultRowLabelSize() { return WXGRID_DEFAULT_ROW_LABEL_WIDTH; }
int GetRowLabelSize() { return m_rowLabelWidth; }
- int GetDefaultColLabelSize() { return WXGRID_DEFAULT_COL_LABEL_HEIGHT; }
+ int GetDefaultColLabelSize() { return WXGRID_DEFAULT_COL_LABEL_HEIGHT; }
int GetColLabelSize() { return m_colLabelHeight; }
wxColour GetLabelBackgroundColour() { return m_labelBackgroundColour; }
wxColour GetLabelTextColour() { return m_labelTextColour; }
wxFont GetCellFont( int row, int col );
void GetDefaultCellAlignment( int *horiz, int *vert );
void GetCellAlignment( int row, int col, int *horiz, int *vert );
-
+
void SetDefaultRowSize( int height, bool resizeExistingRows = FALSE );
void SetRowSize( int row, int height );
void SetDefaultColSize( int width, bool resizeExistingCols = FALSE );
wxString GetCellValue( const wxGridCellCoords& coords )
{ return GetCellValue( coords.GetRow(), coords.GetCol() ); }
-
+
void SetCellValue( int row, int col, const wxString& s );
void SetCellValue( const wxGridCellCoords& coords, const wxString& s )
{ SetCellValue( coords.GetRow(), coords.GetCol(), s ); }
-
+
// ------ selections of blocks of cells
//
void SelectRow( int row, bool addToSelected = FALSE );
void SelectCol( int col, bool addToSelected = FALSE );
-
+
void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol );
void SelectBlock( const wxGridCellCoords& topLeft,
bottomRight.GetRow(), bottomRight.GetCol() ); }
void SelectAll();
-
+
bool IsSelection()
{ return ( m_selectedTopLeft != wxGridNoCellCoords &&
m_selectedBottomRight != wxGridNoCellCoords );
// in device coords and clipped to the client size of the grid window.
//
wxRect SelectionToDeviceRect();
-
-
+
+
// ------ For compatibility with previous wxGrid only...
//
long style = 0,
const wxString& name = wxPanelNameStr )
: wxScrolledWindow( parent, -1, wxPoint(x,y), wxSize(w,h), style, name )
- {
+ {
Create();
- }
+ }
void SetCellValue( const wxString& val, int row, int col )
{ SetCellValue( row, col, val ); }
-
+
void UpdateDimensions()
{ CalcDimensions(); }
int GetCols() { return GetNumberCols(); }
int GetCursorRow() { return GetGridCursorRow(); }
int GetCursorColumn() { return GetGridCursorCol(); }
-
+
int GetScrollPosX() { return 0; }
int GetScrollPosY() { return 0; }
-
+
void SetScrollX( int x ) { }
void SetScrollY( int y ) { }
void SetColumnWidth( int col, int width )
{ SetColSize( col, width ); }
-
+
int GetColumnWidth( int col )
{ return GetColSize( col ); }
-
+
void SetRowHeight( int row, int height )
{ SetRowSize( row, height ); }
-
+
int GetRowHeight( int row )
{ return GetRowSize( row ); }
-
+
int GetViewHeight() // returned num whole rows visible
{ return 0; }
-
+
int GetViewWidth() // returned num whole cols visible
{ return 0; }
else
SetRowLabelValue( pos, val );
}
-
+
wxString GetLabelValue( int orientation, int pos)
{
if ( orientation == wxHORIZONTAL )
return GetRowLabelValue( pos );
}
- wxFont GetCellTextFont() const
+ wxFont GetCellTextFont() const
{ return m_defaultCellFont; }
-
+
wxFont GetCellTextFont(int WXUNUSED(row), int WXUNUSED(col)) const
{ return m_defaultCellFont; }
-
+
void SetCellTextFont(const wxFont& fnt)
{ SetDefaultCellFont( fnt ); }
-
+
void SetCellTextFont(const wxFont& fnt, int row, int col)
{ SetCellFont( row, col, fnt ); }
-
+
void SetCellTextColour(const wxColour& val, int row, int col)
{ SetCellTextColour( row, col, val ); }
-
+
void SetCellTextColour(const wxColour& col)
{ SetDefaultCellTextColour( col ); }
-
+
void SetCellBackgroundColour(const wxColour& col)
{ SetDefaultCellBackgroundColour( col ); }
-
+
void SetCellBackgroundColour(const wxColour& colour, int row, int col)
{ SetCellBackgroundColour( row, col, colour ); }
-
+
bool GetEditable() { return IsEditable(); }
void SetEditable( bool edit = TRUE ) { EnableEditing( edit ); }
bool GetEditInPlace() { return IsCellEditControlEnabled(); }
void SetDividerPen(const wxPen& WXUNUSED(pen)) { }
wxPen& GetDividerPen() const { return wxNullPen; }
void OnActivate(bool WXUNUSED(active)) {}
-
+
// ******** End of compatibility functions **********
wxGRID_CHOICE,
wxGRID_COMBOBOX };
-
+protected:
+ bool m_created;
+
+ wxGridWindow *m_gridWin;
+ wxGridRowLabelWindow *m_rowLabelWin;
+ wxGridColLabelWindow *m_colLabelWin;
+ wxGridCornerLabelWindow *m_cornerLabelWin;
+
+ wxBoxSizer *m_mainSizer;
+ wxBoxSizer *m_topSizer;
+ wxBoxSizer *m_middleSizer;
+
+ wxGridTableBase *m_table;
+
+ int m_left;
+ int m_top;
+ int m_right;
+ int m_bottom;
+
+ int m_numRows;
+ int m_numCols;
+
+ wxGridCellCoords m_currentCellCoords;
+
+ wxGridCellCoords m_selectedTopLeft;
+ wxGridCellCoords m_selectedBottomRight;
+
+ int m_defaultRowHeight;
+ wxArrayInt m_rowHeights;
+ wxArrayInt m_rowBottoms;
+
+ int m_defaultColWidth;
+ wxArrayInt m_colWidths;
+ wxArrayInt m_colRights;
+
+ int m_rowLabelWidth;
+ int m_colLabelHeight;
+
+ wxColour m_labelBackgroundColour;
+ wxColour m_labelTextColour;
+ wxFont m_labelFont;
+
+ int m_rowLabelHorizAlign;
+ int m_rowLabelVertAlign;
+ int m_colLabelHorizAlign;
+ int m_colLabelVertAlign;
+
+ bool m_defaultRowLabelValues;
+ bool m_defaultColLabelValues;
+
+ wxColour m_gridLineColour;
+ bool m_gridLinesEnabled;
+
+ wxFont m_defaultCellFont;
+
+ wxGridCellCoordsArray m_cellsExposed;
+ wxArrayInt m_rowsExposed;
+ wxArrayInt m_colsExposed;
+ wxArrayInt m_rowLabelsExposed;
+ wxArrayInt m_colLabelsExposed;
+
+ bool m_inOnKeyDown;
+ int m_batchCount;
+
+ int m_cursorMode;
+ enum { WXGRID_CURSOR_DEFAULT,
+ WXGRID_CURSOR_SELECT_CELL,
+ WXGRID_CURSOR_RESIZE_ROW,
+ WXGRID_CURSOR_RESIZE_COL,
+ WXGRID_CURSOR_SELECT_ROW,
+ WXGRID_CURSOR_SELECT_COL
+ };
+
+ int m_dragLastPos;
+ int m_dragRowOrCol;
+ bool m_isDragging;
+
+ wxGridCellCoords m_selectionStart;
+
+ wxCursor m_rowResizeCursor;
+ wxCursor m_colResizeCursor;
+
+ bool m_editable; // applies to whole grid
+ int m_editCtrlType; // for current cell
+ wxWindow* m_cellEditCtrl;
+ bool m_cellEditCtrlEnabled;
+
+
+ void Create();
+ void Init();
+ void CalcDimensions();
+ bool Redimension( wxGridTableMessage& );
+
+
+ bool SendEvent( const wxEventType,
+ int row, int col,
+ wxMouseEvent& );
+
+ bool SendEvent( const wxEventType,
+ int row, int col );
+
+
+ void OnPaint( wxPaintEvent& );
+ void OnSize( wxSizeEvent& );
+ void OnKeyDown( wxKeyEvent& );
+
+
+ void SetCurrentCell( const wxGridCellCoords& coords );
+ void SetCurrentCell( int row, int col )
+ { SetCurrentCell( wxGridCellCoords(row, col) ); }
+
+
+ // ------ functions to get/send data (see also public functions)
+ //
+ bool GetModelValues();
+ bool SetModelValues();
+
+
+ ////////////////////// Public section ////////////////////
+
+
DECLARE_DYNAMIC_CLASS( wxGrid )
DECLARE_EVENT_TABLE()
};
class WXDLLEXPORT wxGridEvent : public wxNotifyEvent
{
- protected:
- int m_row;
- int m_col;
- int m_x;
- int m_y;
- bool m_control;
- bool m_meta;
- bool m_shift;
- bool m_alt;
-
- public:
+public:
wxGridEvent()
: wxNotifyEvent(), m_row(-1), m_col(-1), m_x(-1), m_y(-1),
m_control(0), m_meta(0), m_shift(0), m_alt(0)
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
- DECLARE_DYNAMIC_CLASS(wxGridEvent)
-};
-
-
-class WXDLLEXPORT wxGridSizeEvent : public wxNotifyEvent
-{
- protected:
- int m_rowOrCol;
+protected:
+ int m_row;
+ int m_col;
int m_x;
int m_y;
bool m_control;
bool m_meta;
bool m_shift;
bool m_alt;
-
- public:
+
+ DECLARE_DYNAMIC_CLASS(wxGridEvent)
+};
+
+
+class WXDLLEXPORT wxGridSizeEvent : public wxNotifyEvent
+{
+public:
wxGridSizeEvent()
: wxNotifyEvent(), m_rowOrCol(-1), m_x(-1), m_y(-1),
m_control(0), m_meta(0), m_shift(0), m_alt(0)
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
+protected:
+ int m_rowOrCol;
+ int m_x;
+ int m_y;
+ bool m_control;
+ bool m_meta;
+ bool m_shift;
+ bool m_alt;
+
DECLARE_DYNAMIC_CLASS(wxGridSizeEvent)
};
class WXDLLEXPORT wxGridRangeSelectEvent : public wxNotifyEvent
{
- protected:
- wxGridCellCoords m_topLeft;
- wxGridCellCoords m_bottomRight;
- bool m_control;
- bool m_meta;
- bool m_shift;
- bool m_alt;
-
- public:
+public:
wxGridRangeSelectEvent()
- : wxNotifyEvent()
- {
- m_topLeft = wxGridNoCellCoords;
- m_bottomRight = wxGridNoCellCoords;
- m_control = FALSE;
- m_meta = FALSE;
- m_shift = FALSE;
- m_alt = FALSE;
- }
+ : wxNotifyEvent()
+ {
+ m_topLeft = wxGridNoCellCoords;
+ m_bottomRight = wxGridNoCellCoords;
+ m_control = FALSE;
+ m_meta = FALSE;
+ m_shift = FALSE;
+ m_alt = FALSE;
+ }
wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj,
- const wxGridCellCoords& topLeft,
- const wxGridCellCoords& bottomRight,
- bool control=FALSE, bool shift=FALSE,
- bool alt=FALSE, bool meta=FALSE);
+ const wxGridCellCoords& topLeft,
+ const wxGridCellCoords& bottomRight,
+ bool control=FALSE, bool shift=FALSE,
+ bool alt=FALSE, bool meta=FALSE);
wxGridCellCoords GetTopLeftCoords() { return m_topLeft; }
wxGridCellCoords GetBottomRightCoords() { return m_bottomRight; }
bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; }
+protected:
+ wxGridCellCoords m_topLeft;
+ wxGridCellCoords m_bottomRight;
+ bool m_control;
+ bool m_meta;
+ bool m_shift;
+ bool m_alt;
+
DECLARE_DYNAMIC_CLASS(wxGridRangeSelectEvent)
};
#define EVT_GRID_ROW_SIZE(fn) { EVT_GRID_ROW_SIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridSizeEventFunction) &fn, NULL },
#define EVT_GRID_COL_SIZE(fn) { EVT_GRID_COL_SIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridSizeEventFunction) &fn, NULL },
#define EVT_GRID_RANGE_SELECT(fn) { EVT_GRID_RANGE_SELECT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridRangeSelectEventFunction) &fn, NULL },
-#define EVT_GRID_CELL_CHANGE(fn) { EVT_GRID_CELL_CHANGE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL },
+#define EVT_GRID_CELL_CHANGE(fn) { EVT_GRID_CELL_CHANGE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL },
#define EVT_GRID_SELECT_CELL(fn) { EVT_GRID_SELECT_CELL, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL },
EVT_KEY_DOWN( wxGridRowLabelWindow::OnKeyDown )
END_EVENT_TABLE()
-wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent,
- wxWindowID id,
+wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent,
+ wxWindowID id,
const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size )
{
// set the y coord - MB
//
// m_owner->PrepareDC( dc );
-
+
wxCoord x, y;
m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
dc.SetDeviceOrigin( 0, -y );
-
+
m_owner->CalcRowLabelsExposed( GetUpdateRegion() );
m_owner->DrawRowLabels( dc );
}
EVT_KEY_DOWN( wxGridColLabelWindow::OnKeyDown )
END_EVENT_TABLE()
-wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent,
- wxWindowID id,
+wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent,
+ wxWindowID id,
const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size )
{
// set the x coord - MB
//
// m_owner->PrepareDC( dc );
-
+
wxCoord x, y;
m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
dc.SetDeviceOrigin( -x, 0 );
- m_owner->CalcColLabelsExposed( GetUpdateRegion() );
- m_owner->DrawColLabels( dc );
+ m_owner->CalcColLabelsExposed( GetUpdateRegion() );
+ m_owner->DrawColLabels( dc );
}
EVT_KEY_DOWN( wxGridCornerLabelWindow::OnKeyDown )
END_EVENT_TABLE()
-wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent,
- wxWindowID id,
+wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent,
+ wxWindowID id,
const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size, wxRAISED_BORDER )
{
EVT_KEY_DOWN( wxGridWindow::OnKeyDown )
END_EVENT_TABLE()
-wxGridWindow::wxGridWindow( wxGrid *parent,
- wxGridRowLabelWindow *rowLblWin,
+wxGridWindow::wxGridWindow( wxGrid *parent,
+ wxGridRowLabelWindow *rowLblWin,
wxGridColLabelWindow *colLblWin,
wxWindowID id, const wxPoint &pos, const wxSize &size )
: wxPanel( parent, id, pos, size, wxSUNKEN_BORDER, "grid window" )
m_owner = parent;
m_rowLabelWin = rowLblWin;
m_colLabelWin = colLblWin;
-
+
SetBackgroundColour( "WHITE" );
}
int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT;
int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH;
- m_rowLabelWin = new wxGridRowLabelWindow( this,
- -1,
- wxDefaultPosition,
+ m_rowLabelWin = new wxGridRowLabelWindow( this,
+ -1,
+ wxDefaultPosition,
wxSize(rowLblW,-1) );
m_colLabelWin = new wxGridColLabelWindow( this,
-1,
wxDefaultPosition,
wxSize(-1, colLblH ) );
-
+
m_cornerLabelWin = new wxGridCornerLabelWindow( this,
-1,
wxDefaultPosition,
wxSize(rowLblW, colLblH ) );
-
- m_gridWin = new wxGridWindow( this,
- m_rowLabelWin,
- m_colLabelWin,
- -1,
- wxDefaultPosition,
+
+ m_gridWin = new wxGridWindow( this,
+ m_rowLabelWin,
+ m_colLabelWin,
+ -1,
+ wxDefaultPosition,
wxDefaultSize );
SetTargetWindow( m_gridWin );
-
+
m_mainSizer = new wxBoxSizer( wxVERTICAL );
-
+
m_topSizer = new wxBoxSizer( wxHORIZONTAL );
m_topSizer->Add( m_cornerLabelWin, 0 );
m_topSizer->Add( m_colLabelWin, 1 );
-
+
m_mainSizer->Add( m_topSizer, 0, wxEXPAND );
-
+
m_middleSizer = new wxBoxSizer( wxHORIZONTAL );
m_middleSizer->Add( m_rowLabelWin, 0, wxEXPAND );
m_middleSizer->Add( m_gridWin, 1, wxEXPAND );
-
+
m_mainSizer->Add( m_middleSizer, 1, wxEXPAND );
SetAutoLayout( TRUE );
m_rowLabelWin = (wxGridRowLabelWindow *) NULL;
m_colLabelWin = (wxGridColLabelWindow *) NULL;
m_cornerLabelWin = (wxGridCornerLabelWindow *) NULL;
- m_cellEditCtrl = (wxWindow *) NULL;
+ m_cellEditCtrl = (wxWindow *) NULL;
}
m_rowLabelWidth = WXGRID_DEFAULT_ROW_LABEL_WIDTH;
m_colLabelHeight = WXGRID_DEFAULT_COL_LABEL_HEIGHT;
- m_labelBackgroundColour = m_rowLabelWin->GetBackgroundColour();
- m_labelTextColour = wxColour( "BLACK" );
+ if ( m_rowLabelWin )
+ {
+ m_labelBackgroundColour = m_rowLabelWin->GetBackgroundColour();
+ }
+ else
+ {
+ m_labelBackgroundColour = wxColour( _T("WHITE") );
+ }
+
+ m_labelTextColour = wxColour( _T("BLACK") );
// TODO: something better than this ?
//
{
int right = m_colRights[ m_numCols-1 ] + 20;
int bottom = m_rowBottoms[ m_numRows-1 ] + 20;
-
+
// TODO: restore the scroll position that we had before sizing
//
int x, y;
GetViewStart( &x, &y );
- SetScrollbars( 10, 10,
+ SetScrollbars( 10, 10,
right/10, bottom/10,
x, y );
}
int bottom = 0;
if ( pos > 0 ) bottom = m_rowBottoms[pos-1];
-
+
for ( i = pos; i < m_numRows; i++ )
{
bottom += m_rowHeights[i];
int bottom = 0;
if ( oldNumRows > 0 ) bottom = m_rowBottoms[oldNumRows-1];
-
+
for ( i = oldNumRows; i < m_numRows; i++ )
{
bottom += m_rowHeights[i];
m_rowBottoms[i] = h;
}
}
-
+
CalcDimensions();
}
return TRUE;
int right = 0;
if ( pos > 0 ) right = m_colRights[pos-1];
-
+
for ( i = pos; i < m_numCols; i++ )
{
right += m_colWidths[i];
int right = 0;
if ( oldNumCols > 0 ) right = m_colRights[oldNumCols-1];
-
+
for ( i = oldNumCols; i < m_numCols; i++ )
{
right += m_colWidths[i];
#endif
m_currentCellCoords = wxGridNoCellCoords;
}
- else
+ else
{
if ( m_currentCellCoords.GetCol() >= m_numCols )
m_currentCellCoords.Set( 0, 0 );
rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break;
-
+
m_rowLabelsExposed.Add( row );
}
-
+
iter++ ;
}
}
for ( col = 0; col < m_numCols; col++ )
{
if ( m_colRights[col] < left ) continue;
-
+
colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break;
m_colLabelsExposed.Add( col );
}
-
+
iter++ ;
}
}
rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break;
-
+
m_rowsExposed.Add( row );
for ( col = 0; col < m_numCols; col++ )
{
if ( m_colRights[col] < left ) continue;
-
+
colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break;
-
+
if ( m_colsExposed.Index( col ) == wxNOT_FOUND ) m_colsExposed.Add( col );
m_cellsExposed.Add( wxGridCellCoords( row, col ) );
}
}
-
+
iter++ ;
}
}
int x, y, row;
wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
-
+
if ( event.Dragging() )
{
m_isDragging = TRUE;
int cw, ch, left, dummy;
m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &left, &dummy );
-
+
wxClientDC dc( m_gridWin );
PrepareDC( dc );
dc.SetLogicalFunction(wxXOR);
m_isDragging = FALSE;
-
+
// ------------ Left button pressed
//
if ( event.LeftDown() )
SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, row, -1, event );
}
}
-
-
+
+
// ------------ Left button released
//
else if ( event.LeftUp() )
if ( m_cursorMode == WXGRID_CURSOR_RESIZE_ROW )
{
m_rowLabelWin->ReleaseMouse();
-
+
if ( m_dragLastPos >= 0 )
{
// erase the last line and resize the row
int cw, ch, left, dummy;
m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &left, &dummy );
-
+
wxClientDC dc( m_gridWin );
PrepareDC( dc );
dc.SetLogicalFunction( wxINVERT );
HideCellEditControl();
int rowTop = m_rowBottoms[m_dragRowOrCol] - m_rowHeights[m_dragRowOrCol];
- SetRowSize( m_dragRowOrCol, wxMax( y - rowTop, WXGRID_MIN_ROW_HEIGHT ) );
+ SetRowSize( m_dragRowOrCol, wxMax( y - rowTop, WXGRID_MIN_ROW_HEIGHT ) );
if ( !GetBatchCount() )
{
// TODO: optimize this
m_rowLabelWin->Refresh();
m_gridWin->Refresh();
}
-
+
ShowCellEditControl();
// Note: we are ending the event *after* doing
// no default action at the moment
}
}
-
-
+
+
// ------------ Right double click
//
else if ( event.RightDClick() )
// no default action at the moment
}
}
-
-
+
+
// ------------ No buttons down and mouse moving
//
else if ( event.Moving() )
int x, y, col;
wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
-
+
if ( event.Dragging() )
{
m_isDragging = TRUE;
int cw, ch, dummy, top;
m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &dummy, &top );
-
+
wxClientDC dc( m_gridWin );
PrepareDC( dc );
dc.SetLogicalFunction(wxXOR);
m_isDragging = FALSE;
-
+
// ------------ Left button pressed
//
if ( event.LeftDown() )
SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, -1, col, event );
}
}
-
-
+
+
// ------------ Left button released
//
else if ( event.LeftUp() )
if ( m_cursorMode == WXGRID_CURSOR_RESIZE_COL )
{
m_colLabelWin->ReleaseMouse();
-
+
if ( m_dragLastPos >= 0 )
{
// erase the last line and resize the col
int cw, ch, dummy, top;
m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &dummy, &top );
-
+
wxClientDC dc( m_gridWin );
PrepareDC( dc );
dc.SetLogicalFunction( wxINVERT );
HideCellEditControl();
int colLeft = m_colRights[m_dragRowOrCol] - m_colWidths[m_dragRowOrCol];
- SetColSize( m_dragRowOrCol, wxMax( x - colLeft, WXGRID_MIN_COL_WIDTH ) );
-
+ SetColSize( m_dragRowOrCol, wxMax( x - colLeft, WXGRID_MIN_COL_WIDTH ) );
+
if ( !GetBatchCount() )
{
// TODO: optimize this
m_colLabelWin->Refresh();
m_gridWin->Refresh();
}
-
+
ShowCellEditControl();
// Note: we are ending the event *after* doing
}
m_dragLastPos = -1;
- }
-
-
+ }
+
+
// ------------ Right button down
//
else if ( event.RightDown() )
// no default action at the moment
}
}
-
-
+
+
// ------------ Right double click
//
else if ( event.RightDClick() )
// no default action at the moment
}
}
-
-
+
+
// ------------ No buttons down and mouse moving
//
else if ( event.Moving() )
int x, y;
wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
-
+
wxGridCellCoords coords;
XYToCell( x, y, coords );
-
+
if ( event.Dragging() )
{
m_isDragging = TRUE;
-
+
if ( m_cursorMode == WXGRID_CURSOR_SELECT_CELL )
{
if ( coords != wxGridNoCellCoords )
event ) )
{
// no default action at the moment
- }
+ }
}
-
+
// ------------ Right double click
//
else if ( event.RightDClick() )
event ) )
{
// no default action at the moment
- }
+ }
}
}
void wxGrid::DrawGridCellArea( wxDC& dc )
{
if ( !m_numRows || !m_numCols ) return;
-
+
size_t i;
size_t numCells = m_cellsExposed.GetCount();
-
+
for ( i = 0; i < numCells; i++ )
{
DrawCell( dc, m_cellsExposed[i] );
{
if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return;
-
+
if ( m_gridLinesEnabled )
DrawCellBorder( dc, coords );
{
if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return;
-
+
dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) );
int row = coords.GetRow();
int col = coords.GetCol();
-
+
// right hand border
//
dc.DrawLine( m_colRights[col], m_rowBottoms[row] - m_rowHeights[row],
{
if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return;
-
+
int row = coords.GetRow();
int col = coords.GetCol();
{
if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return;
-
+
int row = coords.GetRow();
int col = coords.GetCol();
rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 );
rect.SetWidth( m_colWidths[col] - 4 );
rect.SetHeight( m_rowHeights[row] - 4 );
-
+
DrawTextRectangle( dc, GetCellValue( row, col ), rect, hAlign, vAlign );
}
//
void wxGrid::DrawAllGridLines( wxDC& dc )
{
- if ( !m_gridLinesEnabled ||
- !m_numRows ||
+ if ( !m_gridLinesEnabled ||
+ !m_numRows ||
!m_numCols ) return;
int cw, ch;
// horizontal grid lines
//
- int i;
+ int i;
for ( i = 0; i <= m_numRows; i++ )
{
if ( m_rowBottoms[i] > bottom )
void wxGrid::DrawRowLabels( wxDC& dc )
{
if ( !m_numRows || !m_numCols ) return;
-
+
size_t i;
size_t numLabels = m_rowLabelsExposed.GetCount();
-
+
for ( i = 0; i < numLabels; i++ )
{
DrawRowLabel( dc, m_rowLabelsExposed[i] );
- }
+ }
}
void wxGrid::DrawRowLabel( wxDC& dc, int row )
{
if ( m_rowHeights[row] <= 0 ) return;
-
+
// draw the label's horizontal border (the vertical border is
// provided by the cell area window margin)
//
dc.DrawLine( 0, m_rowBottoms[row]+2,
m_rowLabelWidth, m_rowBottoms[row]+2 );
-
+
dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( GetLabelTextColour() );
dc.SetFont( GetLabelFont() );
int hAlign, vAlign;
GetRowLabelAlignment( &hAlign, &vAlign );
-
+
wxRect rect;
rect.SetX( 2 );
rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 );
rect.SetWidth( m_rowLabelWidth - 4 );
rect.SetHeight( m_rowHeights[row] - 4 );
- DrawTextRectangle( dc, GetRowLabelValue( row ), rect, hAlign, vAlign );
+ DrawTextRectangle( dc, GetRowLabelValue( row ), rect, hAlign, vAlign );
}
void wxGrid::DrawColLabels( wxDC& dc )
{
if ( !m_numRows || !m_numCols ) return;
-
+
size_t i;
size_t numLabels = m_colLabelsExposed.GetCount();
-
+
for ( i = 0; i < numLabels; i++ )
{
DrawColLabel( dc, m_colLabelsExposed[i] );
- }
+ }
}
void wxGrid::DrawColLabel( wxDC& dc, int col )
{
if ( m_colWidths[col] <= 0 ) return;
-
+
// draw the label's vertical border (the horizontal border is
// provided by the cell area window margin)
//
int hAlign, vAlign;
GetColLabelAlignment( &hAlign, &vAlign );
-
+
wxRect rect;
rect.SetX( m_colRights[col] - m_colWidths[col] + 2 );
rect.SetY( 2 );
rect.SetWidth( m_colWidths[col] - 4 );
rect.SetHeight( m_colLabelHeight - 4 );
- DrawTextRectangle( dc, GetColLabelValue( col ), rect, hAlign, vAlign );
+ DrawTextRectangle( dc, GetColLabelValue( col ), rect, hAlign, vAlign );
}
enable != m_cellEditCtrlEnabled )
{
m_cellEditCtrlEnabled = enable;
-
+
if ( m_cellEditCtrlEnabled )
{
SetEditControlValue();
int left, top, right, bottom;
CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom );
-
+
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
// Make the edit control large enough to allow for internal margins
// TODO: remove this if the text ctrl sizing is improved esp. for unix
//
-#if defined (__WXMOTIF__)
+#if defined (__WXMOTIF__)
rect.SetLeft( wxMax(0, left-4) );
rect.SetTop( wxMax(0, top-4) );
rect.SetRight( rect.GetRight() + 8 );
rect.SetLeft( wxMax(0, left-2) );
rect.SetTop( wxMax(0, top-2) );
rect.SetRight( rect.GetRight() + 4 );
- rect.SetBottom( rect.GetBottom() + 4 );
+ rect.SetBottom( rect.GetBottom() + 4 );
#endif
-
+
m_cellEditCtrl->SetSize( rect );
m_cellEditCtrl->Show( TRUE );
//
-// ------ Grid location functions
-// Note that all of these functions work with the logical coordinates of
+// ------ Grid location functions
+// Note that all of these functions work with the logical coordinates of
// grid cells and labels so you will need to convert from device
// coordinates for mouse events etc.
//
// get the cell rectangle in logical coords
//
wxRect r( CellToRect( row, col ) );
-
+
// convert to device coords
//
int left, top, right, bottom;
CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top );
CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom );
-
+
// check against the client area of the grid window
//
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
-
+
if ( wholeCellVisible )
{
// is the cell wholly visible ?
void wxGrid::MakeCellVisible( int row, int col )
{
int i;
- int xpos = -1, ypos = -1;
+ int xpos = -1, ypos = -1;
if ( row >= 0 && row < m_numRows &&
col >= 0 && col < m_numCols )
// get the cell rectangle in logical coords
//
wxRect r( CellToRect( row, col ) );
-
+
// convert to device coords
//
int left, top, right, bottom;
CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top );
CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom );
-
+
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
-
+
if ( top < 0 )
{
ypos = r.GetTop();
{
MakeCellVisible( m_currentCellCoords.GetRow() - 1,
m_currentCellCoords.GetCol() );
-
+
SetCurrentCell( m_currentCellCoords.GetRow() - 1,
m_currentCellCoords.GetCol() );
{
MakeCellVisible( m_currentCellCoords.GetRow() + 1,
m_currentCellCoords.GetCol() );
-
+
SetCurrentCell( m_currentCellCoords.GetRow() + 1,
m_currentCellCoords.GetCol() );
{
MakeCellVisible( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() - 1 );
-
+
SetCurrentCell( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() - 1 );
{
MakeCellVisible( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() + 1 );
-
+
SetCurrentCell( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() + 1 );
bool wxGrid::MovePageUp()
{
if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE;
-
+
int row = m_currentCellCoords.GetRow();
if ( row > 0 )
{
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
-
+
int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int newRow = YToRow( y - ch + 1 );
if ( newRow == -1 )
{
newRow = 0;
}
- else if ( newRow == row )
+ else if ( newRow == row )
{
newRow = row - 1;
}
MakeCellVisible( newRow, m_currentCellCoords.GetCol() );
SetCurrentCell( newRow, m_currentCellCoords.GetCol() );
-
+
return TRUE;
}
bool wxGrid::MovePageDown()
{
if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE;
-
+
int row = m_currentCellCoords.GetRow();
if ( row < m_numRows )
{
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
-
+
int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int newRow = YToRow( y + ch );
if ( newRow == -1 )
{
newRow = m_numRows - 1;
}
- else if ( newRow == row )
+ else if ( newRow == row )
{
newRow = row + 1;
}
MakeCellVisible( newRow, m_currentCellCoords.GetCol() );
SetCurrentCell( newRow, m_currentCellCoords.GetCol() );
-
+
return TRUE;
}
{
m_rowLabelWin->Refresh();
m_colLabelWin->Refresh();
- }
+ }
}
void wxGrid::SetColLabelAlignment( int horiz, int vert )
{
m_rowLabelWin->Refresh();
m_colLabelWin->Refresh();
- }
+ }
}
void wxGrid::SetRowLabelValue( int row, const wxString& s )
if ( m_gridLineColour != colour )
{
m_gridLineColour = colour;
-
+
wxClientDC dc( m_gridWin );
PrepareDC( dc );
DrawAllGridLines( dc );
void wxGrid::SetRowSize( int row, int height )
{
int i;
-
+
if ( row >= 0 && row < m_numRows )
{
int h = wxMax( 0, height );
int diff = h - m_rowHeights[row];
-
+
m_rowHeights[row] = h;
for ( i = row; i < m_numRows; i++ )
{
m_rowBottoms[i] += diff;
}
CalcDimensions();
-
+
// Note: we are ending the event *after* doing
// default processing in this case
//
void wxGrid::SetColSize( int col, int width )
{
int i;
-
+
if ( col >= 0 && col < m_numCols )
{
int w = wxMax( 0, width );
m_colRights[i] += diff;
}
CalcDimensions();
-
+
// Note: we are ending the event *after* doing
// default processing in this case
//
PrepareDC( dc );
DrawCell( dc, wxGridCellCoords(row, col) );
}
-
+
#if 0 // TODO: edit in place
-
+
if ( m_currentCellCoords.GetRow() == row &&
m_currentCellCoords.GetCol() == col )
{
void wxGrid::SelectRow( int row, bool addToSelected )
{
wxRect r;
-
+
if ( IsSelection() && addToSelected )
{
if ( m_selectedTopLeft.GetRow() > row )
r = SelectionToDeviceRect();
ClearSelection();
if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r );
-
+
m_selectedTopLeft.Set( row, 0 );
m_selectedBottomRight.Set( row, m_numCols-1 );
r = SelectionToDeviceRect();
void wxGrid::SelectCol( int col, bool addToSelected )
{
wxRect r;
-
+
if ( IsSelection() && addToSelected )
{
if ( m_selectedTopLeft.GetCol() > col )
r = SelectionToDeviceRect();
ClearSelection();
if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r );
-
+
m_selectedTopLeft.Set( 0, col );
m_selectedBottomRight.Set( m_numRows-1, col );
r = SelectionToDeviceRect();
m_selectedTopLeft.Set( topRow, leftCol );
m_selectedBottomRight.Set( bottomRow, rightCol );
-
+
wxRect r;
r = SelectionToDeviceRect();
m_gridWin->Refresh( TRUE, &r );
int left, top, right, bottom;
CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom );
-
+
int cw, ch;
m_gridWin->GetClientSize( &cw, &ch );
-
+
rect.SetLeft( wxMax(0, left) );
rect.SetTop( wxMax(0, top) );
rect.SetRight( wxMin(cw, right) );