re-checking in files in Unix mode

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-02-03 13:30:28 +00:00
parent 8f0b51916e
commit 60ff3b9976
2 changed files with 461 additions and 437 deletions

View File

@@ -63,9 +63,7 @@ class WXDLLEXPORT wxGrid;
class WXDLLEXPORT wxGridTableBase : public wxObject class WXDLLEXPORT wxGridTableBase : public wxObject
{ {
wxGrid * m_view; public:
public:
wxGridTableBase(); wxGridTableBase();
virtual ~wxGridTableBase(); virtual ~wxGridTableBase();
@@ -76,7 +74,7 @@ class WXDLLEXPORT wxGridTableBase : public wxObject
virtual wxString GetValue( int row, int col ) = 0; virtual wxString GetValue( int row, int col ) = 0;
virtual void SetValue( int row, int col, const wxString& s ) = 0; virtual void SetValue( int row, int col, const wxString& s ) = 0;
virtual bool IsEmptyCell( int row, int col ) = 0; virtual bool IsEmptyCell( int row, int col ) = 0;
// Overriding these is optional // Overriding these is optional
// //
virtual void SetView( wxGrid *grid ) { m_view = grid; } virtual void SetView( wxGrid *grid ) { m_view = grid; }
@@ -94,7 +92,10 @@ class WXDLLEXPORT wxGridTableBase : public wxObject
virtual wxString GetColLabelValue( int col ); virtual wxString GetColLabelValue( int col );
virtual void SetRowLabelValue( int WXUNUSED(row), const wxString& ) {} virtual void SetRowLabelValue( int WXUNUSED(row), const wxString& ) {}
virtual void SetColLabelValue( int WXUNUSED(col), const wxString& ) {} virtual void SetColLabelValue( int WXUNUSED(col), const wxString& ) {}
private:
wxGrid * m_view;
DECLARE_ABSTRACT_CLASS( wxGridTableBase ); DECLARE_ABSTRACT_CLASS( wxGridTableBase );
}; };
@@ -102,7 +103,8 @@ class WXDLLEXPORT wxGridTableBase : public wxObject
// IDs for messages sent from grid table to view // IDs for messages sent from grid table to view
// //
enum wxGridTableRequest { enum wxGridTableRequest
{
wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000, wxGRIDTABLE_REQUEST_VIEW_GET_VALUES = 2000,
wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES, wxGRIDTABLE_REQUEST_VIEW_SEND_VALUES,
wxGRIDTABLE_NOTIFY_ROWS_INSERTED, wxGRIDTABLE_NOTIFY_ROWS_INSERTED,
@@ -115,12 +117,7 @@ enum wxGridTableRequest {
class WXDLLEXPORT wxGridTableMessage class WXDLLEXPORT wxGridTableMessage
{ {
wxGridTableBase *m_table; public:
int m_id;
int m_comInt1;
int m_comInt2;
public:
wxGridTableMessage(); wxGridTableMessage();
wxGridTableMessage( wxGridTableBase *table, int id, wxGridTableMessage( wxGridTableBase *table, int id,
int comInt1 = -1, int comInt1 = -1,
@@ -133,7 +130,13 @@ class WXDLLEXPORT wxGridTableMessage
void SetCommandInt( int comInt1 ) { m_comInt1 = comInt1; } void SetCommandInt( int comInt1 ) { m_comInt1 = comInt1; }
int GetCommandInt() { return m_comInt1; } int GetCommandInt() { return m_comInt1; }
void SetCommandInt2( int comInt2 ) { m_comInt2 = comInt2; } 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;
}; };
@@ -154,15 +157,7 @@ WX_DECLARE_EXPORTED_OBJARRAY(wxArrayString, wxGridStringArray);
class WXDLLEXPORT wxGridStringTable : public wxGridTableBase class WXDLLEXPORT wxGridStringTable : public wxGridTableBase
{ {
wxGridStringArray m_data; public:
// 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:
wxGridStringTable(); wxGridStringTable();
wxGridStringTable( int numRows, int numCols ); wxGridStringTable( int numRows, int numCols );
~wxGridStringTable(); ~wxGridStringTable();
@@ -174,7 +169,7 @@ class WXDLLEXPORT wxGridStringTable : public wxGridTableBase
wxString GetValue( int row, int col ); wxString GetValue( int row, int col );
void SetValue( int row, int col, const wxString& s ); void SetValue( int row, int col, const wxString& s );
bool IsEmptyCell( int row, int col ); bool IsEmptyCell( int row, int col );
// overridden functions from wxGridTableBase // overridden functions from wxGridTableBase
// //
void Clear(); void Clear();
@@ -189,7 +184,16 @@ class WXDLLEXPORT wxGridStringTable : public wxGridTableBase
void SetColLabelValue( int col, const wxString& ); void SetColLabelValue( int col, const wxString& );
wxString GetRowLabelValue( int row ); wxString GetRowLabelValue( int row );
wxString GetColLabelValue( int col ); 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 ) DECLARE_DYNAMIC_CLASS( wxGridStringTable )
}; };
@@ -203,10 +207,7 @@ class WXDLLEXPORT wxGridStringTable : public wxGridTableBase
class WXDLLEXPORT wxGridCellCoords class WXDLLEXPORT wxGridCellCoords
{ {
long m_row; public:
long m_col;
public:
wxGridCellCoords() { m_row = m_col = -1; } wxGridCellCoords() { m_row = m_col = -1; }
wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; } wxGridCellCoords( int r, int c ) { m_row = r; m_col = c; }
@@ -217,7 +218,7 @@ class WXDLLEXPORT wxGridCellCoords
long GetCol() const { return m_col; } long GetCol() const { return m_col; }
void SetCol( long n ) { m_col = n; } void SetCol( long n ) { m_col = n; }
void Set( long row, long col ) { m_row = row; m_col = col; } void Set( long row, long col ) { m_row = row; m_col = col; }
wxGridCellCoords& operator=( const wxGridCellCoords& other ) wxGridCellCoords& operator=( const wxGridCellCoords& other )
{ {
if ( &other != this ) if ( &other != this )
@@ -242,6 +243,10 @@ class WXDLLEXPORT wxGridCellCoords
{ {
return (m_row == -1 && m_col == -1 ); return (m_row == -1 && m_col == -1 );
} }
private:
long m_row;
long m_col;
}; };
@@ -257,22 +262,12 @@ WX_DECLARE_EXPORTED_OBJARRAY(wxGridCellCoords, wxGridCellCoordsArray);
// This set of classes is to provide for the use of different types of // 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 // system in deference to wxPython
class WXDLLEXPORT wxGridTextCtrl : public wxTextCtrl class WXDLLEXPORT wxGridTextCtrl : public wxTextCtrl
{ {
wxGrid *m_grid; public:
// TRUE for controls placed over cells,
// FALSE for a control on a grid control panel
bool m_isCellControl;
wxString startValue;
void OnKeyDown( wxKeyEvent& );
public:
wxGridTextCtrl() {} wxGridTextCtrl() {}
wxGridTextCtrl( wxWindow *, wxGridTextCtrl( wxWindow *,
wxGrid *, wxGrid *,
@@ -285,7 +280,18 @@ class WXDLLEXPORT wxGridTextCtrl : public wxTextCtrl
void SetStartValue( const wxString& ); void SetStartValue( const wxString& );
wxString GetStartValue() { return startValue; } 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_DYNAMIC_CLASS( wxGridTextCtrl )
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -293,17 +299,18 @@ class WXDLLEXPORT wxGridTextCtrl : public wxTextCtrl
class WXDLLEXPORT wxGridRowLabelWindow : public wxWindow 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; wxGrid *m_owner;
void OnPaint( wxPaintEvent& event ); void OnPaint( wxPaintEvent& event );
void OnMouseEvent( wxMouseEvent& event ); void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event ); void OnKeyDown( wxKeyEvent& event );
public:
wxGridRowLabelWindow() {}
wxGridRowLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size );
DECLARE_DYNAMIC_CLASS(wxGridRowLabelWindow) DECLARE_DYNAMIC_CLASS(wxGridRowLabelWindow)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -311,17 +318,18 @@ public:
class WXDLLEXPORT wxGridColLabelWindow : public wxWindow 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; wxGrid *m_owner;
void OnPaint( wxPaintEvent &event ); void OnPaint( wxPaintEvent &event );
void OnMouseEvent( wxMouseEvent& event ); void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event ); void OnKeyDown( wxKeyEvent& event );
public:
wxGridColLabelWindow() {}
wxGridColLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size );
DECLARE_DYNAMIC_CLASS(wxGridColLabelWindow) DECLARE_DYNAMIC_CLASS(wxGridColLabelWindow)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -329,16 +337,17 @@ public:
class WXDLLEXPORT wxGridCornerLabelWindow : public wxWindow class WXDLLEXPORT wxGridCornerLabelWindow : public wxWindow
{ {
wxGrid *m_owner; public:
wxGridCornerLabelWindow() { m_owner = (wxGrid *)NULL; }
void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
public:
wxGridCornerLabelWindow() {}
wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id, wxGridCornerLabelWindow( wxGrid *parent, wxWindowID id,
const wxPoint &pos, const wxSize &size ); const wxPoint &pos, const wxSize &size );
private:
wxGrid *m_owner;
void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& event );
DECLARE_DYNAMIC_CLASS(wxGridCornerLabelWindow) DECLARE_DYNAMIC_CLASS(wxGridCornerLabelWindow)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -347,6 +356,23 @@ class WXDLLEXPORT wxGridCornerLabelWindow : public wxWindow
class WXDLLEXPORT wxGridWindow : public wxPanel class WXDLLEXPORT wxGridWindow : public wxPanel
{ {
public:
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 );
~wxGridWindow();
void ScrollWindow( int dx, int dy, const wxRect *rect );
private:
wxGrid *m_owner; wxGrid *m_owner;
wxGridRowLabelWindow *m_rowLabelWin; wxGridRowLabelWindow *m_rowLabelWin;
wxGridColLabelWindow *m_colLabelWin; wxGridColLabelWindow *m_colLabelWin;
@@ -355,16 +381,6 @@ class WXDLLEXPORT wxGridWindow : public wxPanel
void OnMouseEvent( wxMouseEvent& event ); void OnMouseEvent( wxMouseEvent& event );
void OnKeyDown( wxKeyEvent& ); void OnKeyDown( wxKeyEvent& );
public:
wxGridWindow() {}
wxGridWindow( wxGrid *parent,
wxGridRowLabelWindow *rowLblWin,
wxGridColLabelWindow *colLblWin,
wxWindowID id, const wxPoint &pos, const wxSize &size );
~wxGridWindow();
void ScrollWindow( int dx, int dy, const wxRect *rect );
DECLARE_DYNAMIC_CLASS(wxGridWindow) DECLARE_DYNAMIC_CLASS(wxGridWindow)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -373,130 +389,10 @@ public:
class WXDLLEXPORT wxGrid : public wxScrolledWindow class WXDLLEXPORT wxGrid : public wxScrolledWindow
{ {
protected: public:
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 ////////////////////
public:
wxGrid() wxGrid()
{ Create(); } { Create(); }
wxGrid( wxWindow *parent, wxGrid( wxWindow *parent,
wxWindowID id, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
@@ -504,33 +400,33 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
long style = 0, long style = 0,
const wxString& name = wxPanelNameStr ); const wxString& name = wxPanelNameStr );
~wxGrid(); ~wxGrid();
bool CreateGrid( int numRows, int numCols ); bool CreateGrid( int numRows, int numCols );
// ------ grid dimensions // ------ grid dimensions
// //
int GetNumberRows() { return m_numRows; } int GetNumberRows() { return m_numRows; }
int GetNumberCols() { return m_numCols; } int GetNumberCols() { return m_numCols; }
// ------ display update functions // ------ display update functions
// //
void CalcRowLabelsExposed( wxRegion& reg ); void CalcRowLabelsExposed( wxRegion& reg );
void CalcColLabelsExposed( wxRegion& reg ); void CalcColLabelsExposed( wxRegion& reg );
void CalcCellsExposed( wxRegion& reg ); void CalcCellsExposed( wxRegion& reg );
// ------ event handlers // ------ event handlers
// //
void ProcessRowLabelMouseEvent( wxMouseEvent& event ); void ProcessRowLabelMouseEvent( wxMouseEvent& event );
void ProcessColLabelMouseEvent( wxMouseEvent& event ); void ProcessColLabelMouseEvent( wxMouseEvent& event );
void ProcessCornerLabelMouseEvent( wxMouseEvent& event ); void ProcessCornerLabelMouseEvent( wxMouseEvent& event );
void ProcessGridCellMouseEvent( wxMouseEvent& event ); void ProcessGridCellMouseEvent( wxMouseEvent& event );
bool ProcessTableMessage( wxGridTableMessage& ); bool ProcessTableMessage( wxGridTableMessage& );
wxGridTableBase * GetTable() const { return m_table; } wxGridTableBase * GetTable() const { return m_table; }
void SetTable( wxGridTableBase *table ) { m_table = table; } void SetTable( wxGridTableBase *table ) { m_table = table; }
@@ -540,7 +436,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
bool DeleteRows( int pos = 0, 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 InsertCols( int pos = 0, int numCols = 1, bool updateLabels=TRUE );
bool AppendCols( 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 DrawGridCellArea( wxDC& dc );
void DrawCellBorder( wxDC& dc, const wxGridCellCoords& ); void DrawCellBorder( wxDC& dc, const wxGridCellCoords& );
@@ -553,7 +449,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
void DrawRowLabel( wxDC& dc, int row ); void DrawRowLabel( wxDC& dc, int row );
void DrawColLabels( wxDC& dc ); void DrawColLabels( wxDC& dc );
void DrawColLabel( wxDC& dc, int col ); void DrawColLabel( wxDC& dc, int col );
// ------ Cell text drawing functions // ------ Cell text drawing functions
// //
@@ -565,11 +461,11 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
// strings and return the number of lines // strings and return the number of lines
// //
void StringToLines( const wxString& value, wxArrayString& lines ); void StringToLines( const wxString& value, wxArrayString& lines );
void GetTextBoxSize( wxDC& dc, void GetTextBoxSize( wxDC& dc,
wxArrayString& lines, wxArrayString& lines,
long *width, long *height ); long *width, long *height );
// ------ // ------
// Code that does a lot of grid modification can be enclosed // Code that does a lot of grid modification can be enclosed
@@ -586,7 +482,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
bool IsEditable() { return m_editable; } bool IsEditable() { return m_editable; }
void EnableEditing( bool edit ); 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 ); void EnableCellEditControl( bool enable );
#endif #endif
@@ -598,9 +494,9 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
void SetEditControlValue( const wxString& s = wxEmptyString ); void SetEditControlValue( const wxString& s = wxEmptyString );
void SaveEditControlValue(); void SaveEditControlValue();
// ------ grid location functions // ------ 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 // grid cells and labels so you will need to convert from device
// coordinates for mouse events etc. // coordinates for mouse events etc.
// //
@@ -617,7 +513,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
int GetGridCursorRow() { return m_currentCellCoords.GetRow(); } int GetGridCursorRow() { return m_currentCellCoords.GetRow(); }
int GetGridCursorCol() { return m_currentCellCoords.GetCol(); } int GetGridCursorCol() { return m_currentCellCoords.GetCol(); }
// check to see if a cell is either wholly visible (the default arg) or // check to see if a cell is either wholly visible (the default arg) or
// at least partially visible in the grid window // at least partially visible in the grid window
// //
@@ -628,7 +524,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
void MakeCellVisible( const wxGridCellCoords& coords ) void MakeCellVisible( const wxGridCellCoords& coords )
{ MakeCellVisible( coords.GetRow(), coords.GetCol() ); } { MakeCellVisible( coords.GetRow(), coords.GetCol() ); }
// ------ grid cursor movement functions // ------ grid cursor movement functions
// //
void SetGridCursor( int row, int col ) void SetGridCursor( int row, int col )
@@ -645,12 +541,12 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
bool MoveCursorLeftBlock(); bool MoveCursorLeftBlock();
bool MoveCursorRightBlock(); bool MoveCursorRightBlock();
// ------ label and gridline formatting // ------ label and gridline formatting
// //
int GetDefaultRowLabelSize() { return WXGRID_DEFAULT_ROW_LABEL_WIDTH; } int GetDefaultRowLabelSize() { return WXGRID_DEFAULT_ROW_LABEL_WIDTH; }
int GetRowLabelSize() { return m_rowLabelWidth; } 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; } int GetColLabelSize() { return m_colLabelHeight; }
wxColour GetLabelBackgroundColour() { return m_labelBackgroundColour; } wxColour GetLabelBackgroundColour() { return m_labelBackgroundColour; }
wxColour GetLabelTextColour() { return m_labelTextColour; } wxColour GetLabelTextColour() { return m_labelTextColour; }
@@ -690,7 +586,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
wxFont GetCellFont( int row, int col ); wxFont GetCellFont( int row, int col );
void GetDefaultCellAlignment( int *horiz, int *vert ); void GetDefaultCellAlignment( int *horiz, int *vert );
void GetCellAlignment( int row, int col, int *horiz, int *vert ); void GetCellAlignment( int row, int col, int *horiz, int *vert );
void SetDefaultRowSize( int height, bool resizeExistingRows = FALSE ); void SetDefaultRowSize( int height, bool resizeExistingRows = FALSE );
void SetRowSize( int row, int height ); void SetRowSize( int row, int height );
void SetDefaultColSize( int width, bool resizeExistingCols = FALSE ); void SetDefaultColSize( int width, bool resizeExistingCols = FALSE );
@@ -721,18 +617,18 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
wxString GetCellValue( const wxGridCellCoords& coords ) wxString GetCellValue( const wxGridCellCoords& coords )
{ return GetCellValue( coords.GetRow(), coords.GetCol() ); } { return GetCellValue( coords.GetRow(), coords.GetCol() ); }
void SetCellValue( int row, int col, const wxString& s ); void SetCellValue( int row, int col, const wxString& s );
void SetCellValue( const wxGridCellCoords& coords, const wxString& s ) void SetCellValue( const wxGridCellCoords& coords, const wxString& s )
{ SetCellValue( coords.GetRow(), coords.GetCol(), s ); } { SetCellValue( coords.GetRow(), coords.GetCol(), s ); }
// ------ selections of blocks of cells // ------ selections of blocks of cells
// //
void SelectRow( int row, bool addToSelected = FALSE ); void SelectRow( int row, bool addToSelected = FALSE );
void SelectCol( int col, bool addToSelected = FALSE ); void SelectCol( int col, bool addToSelected = FALSE );
void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol ); void SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol );
void SelectBlock( const wxGridCellCoords& topLeft, void SelectBlock( const wxGridCellCoords& topLeft,
@@ -741,7 +637,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
bottomRight.GetRow(), bottomRight.GetCol() ); } bottomRight.GetRow(), bottomRight.GetCol() ); }
void SelectAll(); void SelectAll();
bool IsSelection() bool IsSelection()
{ return ( m_selectedTopLeft != wxGridNoCellCoords && { return ( m_selectedTopLeft != wxGridNoCellCoords &&
m_selectedBottomRight != wxGridNoCellCoords ); m_selectedBottomRight != wxGridNoCellCoords );
@@ -774,8 +670,8 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
// in device coords and clipped to the client size of the grid window. // in device coords and clipped to the client size of the grid window.
// //
wxRect SelectionToDeviceRect(); wxRect SelectionToDeviceRect();
// ------ For compatibility with previous wxGrid only... // ------ For compatibility with previous wxGrid only...
// //
@@ -791,13 +687,13 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
long style = 0, long style = 0,
const wxString& name = wxPanelNameStr ) const wxString& name = wxPanelNameStr )
: wxScrolledWindow( parent, -1, wxPoint(x,y), wxSize(w,h), style, name ) : wxScrolledWindow( parent, -1, wxPoint(x,y), wxSize(w,h), style, name )
{ {
Create(); Create();
} }
void SetCellValue( const wxString& val, int row, int col ) void SetCellValue( const wxString& val, int row, int col )
{ SetCellValue( row, col, val ); } { SetCellValue( row, col, val ); }
void UpdateDimensions() void UpdateDimensions()
{ CalcDimensions(); } { CalcDimensions(); }
@@ -805,28 +701,28 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
int GetCols() { return GetNumberCols(); } int GetCols() { return GetNumberCols(); }
int GetCursorRow() { return GetGridCursorRow(); } int GetCursorRow() { return GetGridCursorRow(); }
int GetCursorColumn() { return GetGridCursorCol(); } int GetCursorColumn() { return GetGridCursorCol(); }
int GetScrollPosX() { return 0; } int GetScrollPosX() { return 0; }
int GetScrollPosY() { return 0; } int GetScrollPosY() { return 0; }
void SetScrollX( int x ) { } void SetScrollX( int x ) { }
void SetScrollY( int y ) { } void SetScrollY( int y ) { }
void SetColumnWidth( int col, int width ) void SetColumnWidth( int col, int width )
{ SetColSize( col, width ); } { SetColSize( col, width ); }
int GetColumnWidth( int col ) int GetColumnWidth( int col )
{ return GetColSize( col ); } { return GetColSize( col ); }
void SetRowHeight( int row, int height ) void SetRowHeight( int row, int height )
{ SetRowSize( row, height ); } { SetRowSize( row, height ); }
int GetRowHeight( int row ) int GetRowHeight( int row )
{ return GetRowSize( row ); } { return GetRowSize( row ); }
int GetViewHeight() // returned num whole rows visible int GetViewHeight() // returned num whole rows visible
{ return 0; } { return 0; }
int GetViewWidth() // returned num whole cols visible int GetViewWidth() // returned num whole cols visible
{ return 0; } { return 0; }
@@ -876,7 +772,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
else else
SetRowLabelValue( pos, val ); SetRowLabelValue( pos, val );
} }
wxString GetLabelValue( int orientation, int pos) wxString GetLabelValue( int orientation, int pos)
{ {
if ( orientation == wxHORIZONTAL ) if ( orientation == wxHORIZONTAL )
@@ -885,30 +781,30 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
return GetRowLabelValue( pos ); return GetRowLabelValue( pos );
} }
wxFont GetCellTextFont() const wxFont GetCellTextFont() const
{ return m_defaultCellFont; } { return m_defaultCellFont; }
wxFont GetCellTextFont(int WXUNUSED(row), int WXUNUSED(col)) const wxFont GetCellTextFont(int WXUNUSED(row), int WXUNUSED(col)) const
{ return m_defaultCellFont; } { return m_defaultCellFont; }
void SetCellTextFont(const wxFont& fnt) void SetCellTextFont(const wxFont& fnt)
{ SetDefaultCellFont( fnt ); } { SetDefaultCellFont( fnt ); }
void SetCellTextFont(const wxFont& fnt, int row, int col) void SetCellTextFont(const wxFont& fnt, int row, int col)
{ SetCellFont( row, col, fnt ); } { SetCellFont( row, col, fnt ); }
void SetCellTextColour(const wxColour& val, int row, int col) void SetCellTextColour(const wxColour& val, int row, int col)
{ SetCellTextColour( row, col, val ); } { SetCellTextColour( row, col, val ); }
void SetCellTextColour(const wxColour& col) void SetCellTextColour(const wxColour& col)
{ SetDefaultCellTextColour( col ); } { SetDefaultCellTextColour( col ); }
void SetCellBackgroundColour(const wxColour& col) void SetCellBackgroundColour(const wxColour& col)
{ SetDefaultCellBackgroundColour( col ); } { SetDefaultCellBackgroundColour( col ); }
void SetCellBackgroundColour(const wxColour& colour, int row, int col) void SetCellBackgroundColour(const wxColour& colour, int row, int col)
{ SetCellBackgroundColour( row, col, colour ); } { SetCellBackgroundColour( row, col, colour ); }
bool GetEditable() { return IsEditable(); } bool GetEditable() { return IsEditable(); }
void SetEditable( bool edit = TRUE ) { EnableEditing( edit ); } void SetEditable( bool edit = TRUE ) { EnableEditing( edit ); }
bool GetEditInPlace() { return IsCellEditControlEnabled(); } bool GetEditInPlace() { return IsCellEditControlEnabled(); }
@@ -922,7 +818,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
void SetDividerPen(const wxPen& WXUNUSED(pen)) { } void SetDividerPen(const wxPen& WXUNUSED(pen)) { }
wxPen& GetDividerPen() const { return wxNullPen; } wxPen& GetDividerPen() const { return wxNullPen; }
void OnActivate(bool WXUNUSED(active)) {} void OnActivate(bool WXUNUSED(active)) {}
// ******** End of compatibility functions ********** // ******** End of compatibility functions **********
@@ -937,7 +833,127 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
wxGRID_CHOICE, wxGRID_CHOICE,
wxGRID_COMBOBOX }; 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_DYNAMIC_CLASS( wxGrid )
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
@@ -952,17 +968,7 @@ class WXDLLEXPORT wxGrid : public wxScrolledWindow
class WXDLLEXPORT wxGridEvent : public wxNotifyEvent class WXDLLEXPORT wxGridEvent : public wxNotifyEvent
{ {
protected: public:
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:
wxGridEvent() wxGridEvent()
: wxNotifyEvent(), m_row(-1), m_col(-1), m_x(-1), m_y(-1), : 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) m_control(0), m_meta(0), m_shift(0), m_alt(0)
@@ -981,22 +987,23 @@ class WXDLLEXPORT wxGridEvent : public wxNotifyEvent
bool ShiftDown() { return m_shift; } bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; } bool AltDown() { return m_alt; }
DECLARE_DYNAMIC_CLASS(wxGridEvent) protected:
}; int m_row;
int m_col;
class WXDLLEXPORT wxGridSizeEvent : public wxNotifyEvent
{
protected:
int m_rowOrCol;
int m_x; int m_x;
int m_y; int m_y;
bool m_control; bool m_control;
bool m_meta; bool m_meta;
bool m_shift; bool m_shift;
bool m_alt; bool m_alt;
public: DECLARE_DYNAMIC_CLASS(wxGridEvent)
};
class WXDLLEXPORT wxGridSizeEvent : public wxNotifyEvent
{
public:
wxGridSizeEvent() wxGridSizeEvent()
: wxNotifyEvent(), m_rowOrCol(-1), m_x(-1), m_y(-1), : wxNotifyEvent(), m_rowOrCol(-1), m_x(-1), m_y(-1),
m_control(0), m_meta(0), m_shift(0), m_alt(0) m_control(0), m_meta(0), m_shift(0), m_alt(0)
@@ -1014,37 +1021,38 @@ class WXDLLEXPORT wxGridSizeEvent : public wxNotifyEvent
bool ShiftDown() { return m_shift; } bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; } 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) DECLARE_DYNAMIC_CLASS(wxGridSizeEvent)
}; };
class WXDLLEXPORT wxGridRangeSelectEvent : public wxNotifyEvent class WXDLLEXPORT wxGridRangeSelectEvent : public wxNotifyEvent
{ {
protected: public:
wxGridCellCoords m_topLeft;
wxGridCellCoords m_bottomRight;
bool m_control;
bool m_meta;
bool m_shift;
bool m_alt;
public:
wxGridRangeSelectEvent() wxGridRangeSelectEvent()
: wxNotifyEvent() : wxNotifyEvent()
{ {
m_topLeft = wxGridNoCellCoords; m_topLeft = wxGridNoCellCoords;
m_bottomRight = wxGridNoCellCoords; m_bottomRight = wxGridNoCellCoords;
m_control = FALSE; m_control = FALSE;
m_meta = FALSE; m_meta = FALSE;
m_shift = FALSE; m_shift = FALSE;
m_alt = FALSE; m_alt = FALSE;
} }
wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj, wxGridRangeSelectEvent(int id, wxEventType type, wxObject* obj,
const wxGridCellCoords& topLeft, const wxGridCellCoords& topLeft,
const wxGridCellCoords& bottomRight, const wxGridCellCoords& bottomRight,
bool control=FALSE, bool shift=FALSE, bool control=FALSE, bool shift=FALSE,
bool alt=FALSE, bool meta=FALSE); bool alt=FALSE, bool meta=FALSE);
wxGridCellCoords GetTopLeftCoords() { return m_topLeft; } wxGridCellCoords GetTopLeftCoords() { return m_topLeft; }
wxGridCellCoords GetBottomRightCoords() { return m_bottomRight; } wxGridCellCoords GetBottomRightCoords() { return m_bottomRight; }
@@ -1057,6 +1065,14 @@ class WXDLLEXPORT wxGridRangeSelectEvent : public wxNotifyEvent
bool ShiftDown() { return m_shift; } bool ShiftDown() { return m_shift; }
bool AltDown() { return m_alt; } 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) DECLARE_DYNAMIC_CLASS(wxGridRangeSelectEvent)
}; };
@@ -1091,7 +1107,7 @@ typedef void (wxEvtHandler::*wxGridRangeSelectEventFunction)(wxGridRangeSelectEv
#define EVT_GRID_ROW_SIZE(fn) { EVT_GRID_ROW_SIZE, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridSizeEventFunction) &fn, NULL }, #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_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_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 }, #define EVT_GRID_SELECT_CELL(fn) { EVT_GRID_SELECT_CELL, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxGridEventFunction) &fn, NULL },

View File

@@ -664,8 +664,8 @@ BEGIN_EVENT_TABLE( wxGridRowLabelWindow, wxWindow )
EVT_KEY_DOWN( wxGridRowLabelWindow::OnKeyDown ) EVT_KEY_DOWN( wxGridRowLabelWindow::OnKeyDown )
END_EVENT_TABLE() END_EVENT_TABLE()
wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent, wxGridRowLabelWindow::wxGridRowLabelWindow( wxGrid *parent,
wxWindowID id, wxWindowID id,
const wxPoint &pos, const wxSize &size ) const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size ) : wxWindow( parent, id, pos, size )
{ {
@@ -681,11 +681,11 @@ void wxGridRowLabelWindow::OnPaint( wxPaintEvent &event )
// set the y coord - MB // set the y coord - MB
// //
// m_owner->PrepareDC( dc ); // m_owner->PrepareDC( dc );
wxCoord x, y; wxCoord x, y;
m_owner->CalcUnscrolledPosition( 0, 0, &x, &y ); m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
dc.SetDeviceOrigin( 0, -y ); dc.SetDeviceOrigin( 0, -y );
m_owner->CalcRowLabelsExposed( GetUpdateRegion() ); m_owner->CalcRowLabelsExposed( GetUpdateRegion() );
m_owner->DrawRowLabels( dc ); m_owner->DrawRowLabels( dc );
} }
@@ -717,8 +717,8 @@ BEGIN_EVENT_TABLE( wxGridColLabelWindow, wxWindow )
EVT_KEY_DOWN( wxGridColLabelWindow::OnKeyDown ) EVT_KEY_DOWN( wxGridColLabelWindow::OnKeyDown )
END_EVENT_TABLE() END_EVENT_TABLE()
wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent, wxGridColLabelWindow::wxGridColLabelWindow( wxGrid *parent,
wxWindowID id, wxWindowID id,
const wxPoint &pos, const wxSize &size ) const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size ) : wxWindow( parent, id, pos, size )
{ {
@@ -734,13 +734,13 @@ void wxGridColLabelWindow::OnPaint( wxPaintEvent &event )
// set the x coord - MB // set the x coord - MB
// //
// m_owner->PrepareDC( dc ); // m_owner->PrepareDC( dc );
wxCoord x, y; wxCoord x, y;
m_owner->CalcUnscrolledPosition( 0, 0, &x, &y ); m_owner->CalcUnscrolledPosition( 0, 0, &x, &y );
dc.SetDeviceOrigin( -x, 0 ); dc.SetDeviceOrigin( -x, 0 );
m_owner->CalcColLabelsExposed( GetUpdateRegion() ); m_owner->CalcColLabelsExposed( GetUpdateRegion() );
m_owner->DrawColLabels( dc ); m_owner->DrawColLabels( dc );
} }
@@ -769,8 +769,8 @@ BEGIN_EVENT_TABLE( wxGridCornerLabelWindow, wxWindow )
EVT_KEY_DOWN( wxGridCornerLabelWindow::OnKeyDown ) EVT_KEY_DOWN( wxGridCornerLabelWindow::OnKeyDown )
END_EVENT_TABLE() END_EVENT_TABLE()
wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent, wxGridCornerLabelWindow::wxGridCornerLabelWindow( wxGrid *parent,
wxWindowID id, wxWindowID id,
const wxPoint &pos, const wxSize &size ) const wxPoint &pos, const wxSize &size )
: wxWindow( parent, id, pos, size, wxRAISED_BORDER ) : wxWindow( parent, id, pos, size, wxRAISED_BORDER )
{ {
@@ -805,8 +805,8 @@ BEGIN_EVENT_TABLE( wxGridWindow, wxPanel )
EVT_KEY_DOWN( wxGridWindow::OnKeyDown ) EVT_KEY_DOWN( wxGridWindow::OnKeyDown )
END_EVENT_TABLE() END_EVENT_TABLE()
wxGridWindow::wxGridWindow( wxGrid *parent, wxGridWindow::wxGridWindow( wxGrid *parent,
wxGridRowLabelWindow *rowLblWin, wxGridRowLabelWindow *rowLblWin,
wxGridColLabelWindow *colLblWin, wxGridColLabelWindow *colLblWin,
wxWindowID id, const wxPoint &pos, const wxSize &size ) wxWindowID id, const wxPoint &pos, const wxSize &size )
: wxPanel( parent, id, pos, size, wxSUNKEN_BORDER, "grid window" ) : wxPanel( parent, id, pos, size, wxSUNKEN_BORDER, "grid window" )
@@ -814,7 +814,7 @@ wxGridWindow::wxGridWindow( wxGrid *parent,
m_owner = parent; m_owner = parent;
m_rowLabelWin = rowLblWin; m_rowLabelWin = rowLblWin;
m_colLabelWin = colLblWin; m_colLabelWin = colLblWin;
SetBackgroundColour( "WHITE" ); SetBackgroundColour( "WHITE" );
} }
@@ -881,42 +881,42 @@ wxGrid::wxGrid( wxWindow *parent,
int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT; int colLblH = WXGRID_DEFAULT_COL_LABEL_HEIGHT;
int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH; int rowLblW = WXGRID_DEFAULT_ROW_LABEL_WIDTH;
m_rowLabelWin = new wxGridRowLabelWindow( this, m_rowLabelWin = new wxGridRowLabelWindow( this,
-1, -1,
wxDefaultPosition, wxDefaultPosition,
wxSize(rowLblW,-1) ); wxSize(rowLblW,-1) );
m_colLabelWin = new wxGridColLabelWindow( this, m_colLabelWin = new wxGridColLabelWindow( this,
-1, -1,
wxDefaultPosition, wxDefaultPosition,
wxSize(-1, colLblH ) ); wxSize(-1, colLblH ) );
m_cornerLabelWin = new wxGridCornerLabelWindow( this, m_cornerLabelWin = new wxGridCornerLabelWindow( this,
-1, -1,
wxDefaultPosition, wxDefaultPosition,
wxSize(rowLblW, colLblH ) ); wxSize(rowLblW, colLblH ) );
m_gridWin = new wxGridWindow( this, m_gridWin = new wxGridWindow( this,
m_rowLabelWin, m_rowLabelWin,
m_colLabelWin, m_colLabelWin,
-1, -1,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize ); wxDefaultSize );
SetTargetWindow( m_gridWin ); SetTargetWindow( m_gridWin );
m_mainSizer = new wxBoxSizer( wxVERTICAL ); m_mainSizer = new wxBoxSizer( wxVERTICAL );
m_topSizer = new wxBoxSizer( wxHORIZONTAL ); m_topSizer = new wxBoxSizer( wxHORIZONTAL );
m_topSizer->Add( m_cornerLabelWin, 0 ); m_topSizer->Add( m_cornerLabelWin, 0 );
m_topSizer->Add( m_colLabelWin, 1 ); m_topSizer->Add( m_colLabelWin, 1 );
m_mainSizer->Add( m_topSizer, 0, wxEXPAND ); m_mainSizer->Add( m_topSizer, 0, wxEXPAND );
m_middleSizer = new wxBoxSizer( wxHORIZONTAL ); m_middleSizer = new wxBoxSizer( wxHORIZONTAL );
m_middleSizer->Add( m_rowLabelWin, 0, wxEXPAND ); m_middleSizer->Add( m_rowLabelWin, 0, wxEXPAND );
m_middleSizer->Add( m_gridWin, 1, wxEXPAND ); m_middleSizer->Add( m_gridWin, 1, wxEXPAND );
m_mainSizer->Add( m_middleSizer, 1, wxEXPAND ); m_mainSizer->Add( m_middleSizer, 1, wxEXPAND );
SetAutoLayout( TRUE ); SetAutoLayout( TRUE );
@@ -940,7 +940,7 @@ void wxGrid::Create()
m_rowLabelWin = (wxGridRowLabelWindow *) NULL; m_rowLabelWin = (wxGridRowLabelWindow *) NULL;
m_colLabelWin = (wxGridColLabelWindow *) NULL; m_colLabelWin = (wxGridColLabelWindow *) NULL;
m_cornerLabelWin = (wxGridCornerLabelWindow *) NULL; m_cornerLabelWin = (wxGridCornerLabelWindow *) NULL;
m_cellEditCtrl = (wxWindow *) NULL; m_cellEditCtrl = (wxWindow *) NULL;
} }
@@ -979,8 +979,16 @@ void wxGrid::Init()
m_rowLabelWidth = WXGRID_DEFAULT_ROW_LABEL_WIDTH; m_rowLabelWidth = WXGRID_DEFAULT_ROW_LABEL_WIDTH;
m_colLabelHeight = WXGRID_DEFAULT_COL_LABEL_HEIGHT; m_colLabelHeight = WXGRID_DEFAULT_COL_LABEL_HEIGHT;
m_labelBackgroundColour = m_rowLabelWin->GetBackgroundColour(); if ( m_rowLabelWin )
m_labelTextColour = wxColour( "BLACK" ); {
m_labelBackgroundColour = m_rowLabelWin->GetBackgroundColour();
}
else
{
m_labelBackgroundColour = wxColour( _T("WHITE") );
}
m_labelTextColour = wxColour( _T("BLACK") );
// TODO: something better than this ? // TODO: something better than this ?
// //
@@ -1076,12 +1084,12 @@ void wxGrid::CalcDimensions()
{ {
int right = m_colRights[ m_numCols-1 ] + 20; int right = m_colRights[ m_numCols-1 ] + 20;
int bottom = m_rowBottoms[ m_numRows-1 ] + 20; int bottom = m_rowBottoms[ m_numRows-1 ] + 20;
// TODO: restore the scroll position that we had before sizing // TODO: restore the scroll position that we had before sizing
// //
int x, y; int x, y;
GetViewStart( &x, &y ); GetViewStart( &x, &y );
SetScrollbars( 10, 10, SetScrollbars( 10, 10,
right/10, bottom/10, right/10, bottom/10,
x, y ); x, y );
} }
@@ -1110,7 +1118,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
int bottom = 0; int bottom = 0;
if ( pos > 0 ) bottom = m_rowBottoms[pos-1]; if ( pos > 0 ) bottom = m_rowBottoms[pos-1];
for ( i = pos; i < m_numRows; i++ ) for ( i = pos; i < m_numRows; i++ )
{ {
bottom += m_rowHeights[i]; bottom += m_rowHeights[i];
@@ -1134,7 +1142,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
int bottom = 0; int bottom = 0;
if ( oldNumRows > 0 ) bottom = m_rowBottoms[oldNumRows-1]; if ( oldNumRows > 0 ) bottom = m_rowBottoms[oldNumRows-1];
for ( i = oldNumRows; i < m_numRows; i++ ) for ( i = oldNumRows; i < m_numRows; i++ )
{ {
bottom += m_rowHeights[i]; bottom += m_rowHeights[i];
@@ -1174,7 +1182,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
m_rowBottoms[i] = h; m_rowBottoms[i] = h;
} }
} }
CalcDimensions(); CalcDimensions();
} }
return TRUE; return TRUE;
@@ -1192,7 +1200,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
int right = 0; int right = 0;
if ( pos > 0 ) right = m_colRights[pos-1]; if ( pos > 0 ) right = m_colRights[pos-1];
for ( i = pos; i < m_numCols; i++ ) for ( i = pos; i < m_numCols; i++ )
{ {
right += m_colWidths[i]; right += m_colWidths[i];
@@ -1216,7 +1224,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
int right = 0; int right = 0;
if ( oldNumCols > 0 ) right = m_colRights[oldNumCols-1]; if ( oldNumCols > 0 ) right = m_colRights[oldNumCols-1];
for ( i = oldNumCols; i < m_numCols; i++ ) for ( i = oldNumCols; i < m_numCols; i++ )
{ {
right += m_colWidths[i]; right += m_colWidths[i];
@@ -1246,7 +1254,7 @@ bool wxGrid::Redimension( wxGridTableMessage& msg )
#endif #endif
m_currentCellCoords = wxGridNoCellCoords; m_currentCellCoords = wxGridNoCellCoords;
} }
else else
{ {
if ( m_currentCellCoords.GetCol() >= m_numCols ) if ( m_currentCellCoords.GetCol() >= m_numCols )
m_currentCellCoords.Set( 0, 0 ); m_currentCellCoords.Set( 0, 0 );
@@ -1307,10 +1315,10 @@ void wxGrid::CalcRowLabelsExposed( wxRegion& reg )
rowTop = m_rowBottoms[row] - m_rowHeights[row]; rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break; if ( rowTop > bottom ) break;
m_rowLabelsExposed.Add( row ); m_rowLabelsExposed.Add( row );
} }
iter++ ; iter++ ;
} }
} }
@@ -1353,13 +1361,13 @@ void wxGrid::CalcColLabelsExposed( wxRegion& reg )
for ( col = 0; col < m_numCols; col++ ) for ( col = 0; col < m_numCols; col++ )
{ {
if ( m_colRights[col] < left ) continue; if ( m_colRights[col] < left ) continue;
colLeft = m_colRights[col] - m_colWidths[col]; colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break; if ( colLeft > right ) break;
m_colLabelsExposed.Add( col ); m_colLabelsExposed.Add( col );
} }
iter++ ; iter++ ;
} }
} }
@@ -1408,21 +1416,21 @@ void wxGrid::CalcCellsExposed( wxRegion& reg )
rowTop = m_rowBottoms[row] - m_rowHeights[row]; rowTop = m_rowBottoms[row] - m_rowHeights[row];
if ( rowTop > bottom ) break; if ( rowTop > bottom ) break;
m_rowsExposed.Add( row ); m_rowsExposed.Add( row );
for ( col = 0; col < m_numCols; col++ ) for ( col = 0; col < m_numCols; col++ )
{ {
if ( m_colRights[col] < left ) continue; if ( m_colRights[col] < left ) continue;
colLeft = m_colRights[col] - m_colWidths[col]; colLeft = m_colRights[col] - m_colWidths[col];
if ( colLeft > right ) break; if ( colLeft > right ) break;
if ( m_colsExposed.Index( col ) == wxNOT_FOUND ) m_colsExposed.Add( col ); if ( m_colsExposed.Index( col ) == wxNOT_FOUND ) m_colsExposed.Add( col );
m_cellsExposed.Add( wxGridCellCoords( row, col ) ); m_cellsExposed.Add( wxGridCellCoords( row, col ) );
} }
} }
iter++ ; iter++ ;
} }
} }
@@ -1433,7 +1441,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
int x, y, row; int x, y, row;
wxPoint pos( event.GetPosition() ); wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y ); CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
if ( event.Dragging() ) if ( event.Dragging() )
{ {
m_isDragging = TRUE; m_isDragging = TRUE;
@@ -1447,7 +1455,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
int cw, ch, left, dummy; int cw, ch, left, dummy;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &left, &dummy ); CalcUnscrolledPosition( 0, 0, &left, &dummy );
wxClientDC dc( m_gridWin ); wxClientDC dc( m_gridWin );
PrepareDC( dc ); PrepareDC( dc );
dc.SetLogicalFunction(wxXOR); dc.SetLogicalFunction(wxXOR);
@@ -1476,7 +1484,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
m_isDragging = FALSE; m_isDragging = FALSE;
// ------------ Left button pressed // ------------ Left button pressed
// //
if ( event.LeftDown() ) if ( event.LeftDown() )
@@ -1513,8 +1521,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, row, -1, event ); SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, row, -1, event );
} }
} }
// ------------ Left button released // ------------ Left button released
// //
else if ( event.LeftUp() ) else if ( event.LeftUp() )
@@ -1522,7 +1530,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
if ( m_cursorMode == WXGRID_CURSOR_RESIZE_ROW ) if ( m_cursorMode == WXGRID_CURSOR_RESIZE_ROW )
{ {
m_rowLabelWin->ReleaseMouse(); m_rowLabelWin->ReleaseMouse();
if ( m_dragLastPos >= 0 ) if ( m_dragLastPos >= 0 )
{ {
// erase the last line and resize the row // erase the last line and resize the row
@@ -1530,7 +1538,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
int cw, ch, left, dummy; int cw, ch, left, dummy;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &left, &dummy ); CalcUnscrolledPosition( 0, 0, &left, &dummy );
wxClientDC dc( m_gridWin ); wxClientDC dc( m_gridWin );
PrepareDC( dc ); PrepareDC( dc );
dc.SetLogicalFunction( wxINVERT ); dc.SetLogicalFunction( wxINVERT );
@@ -1538,14 +1546,14 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
HideCellEditControl(); HideCellEditControl();
int rowTop = m_rowBottoms[m_dragRowOrCol] - m_rowHeights[m_dragRowOrCol]; 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() ) if ( !GetBatchCount() )
{ {
// TODO: optimize this // TODO: optimize this
m_rowLabelWin->Refresh(); m_rowLabelWin->Refresh();
m_gridWin->Refresh(); m_gridWin->Refresh();
} }
ShowCellEditControl(); ShowCellEditControl();
// Note: we are ending the event *after* doing // Note: we are ending the event *after* doing
@@ -1569,8 +1577,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
// no default action at the moment // no default action at the moment
} }
} }
// ------------ Right double click // ------------ Right double click
// //
else if ( event.RightDClick() ) else if ( event.RightDClick() )
@@ -1581,8 +1589,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event )
// no default action at the moment // no default action at the moment
} }
} }
// ------------ No buttons down and mouse moving // ------------ No buttons down and mouse moving
// //
else if ( event.Moving() ) else if ( event.Moving() )
@@ -1613,7 +1621,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
int x, y, col; int x, y, col;
wxPoint pos( event.GetPosition() ); wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y ); CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
if ( event.Dragging() ) if ( event.Dragging() )
{ {
m_isDragging = TRUE; m_isDragging = TRUE;
@@ -1627,7 +1635,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
int cw, ch, dummy, top; int cw, ch, dummy, top;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &dummy, &top ); CalcUnscrolledPosition( 0, 0, &dummy, &top );
wxClientDC dc( m_gridWin ); wxClientDC dc( m_gridWin );
PrepareDC( dc ); PrepareDC( dc );
dc.SetLogicalFunction(wxXOR); dc.SetLogicalFunction(wxXOR);
@@ -1656,7 +1664,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
m_isDragging = FALSE; m_isDragging = FALSE;
// ------------ Left button pressed // ------------ Left button pressed
// //
if ( event.LeftDown() ) if ( event.LeftDown() )
@@ -1693,8 +1701,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, -1, col, event ); SendEvent( EVT_GRID_LABEL_LEFT_DCLICK, -1, col, event );
} }
} }
// ------------ Left button released // ------------ Left button released
// //
else if ( event.LeftUp() ) else if ( event.LeftUp() )
@@ -1702,7 +1710,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
if ( m_cursorMode == WXGRID_CURSOR_RESIZE_COL ) if ( m_cursorMode == WXGRID_CURSOR_RESIZE_COL )
{ {
m_colLabelWin->ReleaseMouse(); m_colLabelWin->ReleaseMouse();
if ( m_dragLastPos >= 0 ) if ( m_dragLastPos >= 0 )
{ {
// erase the last line and resize the col // erase the last line and resize the col
@@ -1710,7 +1718,7 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
int cw, ch, dummy, top; int cw, ch, dummy, top;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
CalcUnscrolledPosition( 0, 0, &dummy, &top ); CalcUnscrolledPosition( 0, 0, &dummy, &top );
wxClientDC dc( m_gridWin ); wxClientDC dc( m_gridWin );
PrepareDC( dc ); PrepareDC( dc );
dc.SetLogicalFunction( wxINVERT ); dc.SetLogicalFunction( wxINVERT );
@@ -1718,15 +1726,15 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
HideCellEditControl(); HideCellEditControl();
int colLeft = m_colRights[m_dragRowOrCol] - m_colWidths[m_dragRowOrCol]; 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() ) if ( !GetBatchCount() )
{ {
// TODO: optimize this // TODO: optimize this
m_colLabelWin->Refresh(); m_colLabelWin->Refresh();
m_gridWin->Refresh(); m_gridWin->Refresh();
} }
ShowCellEditControl(); ShowCellEditControl();
// Note: we are ending the event *after* doing // Note: we are ending the event *after* doing
@@ -1737,9 +1745,9 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
} }
m_dragLastPos = -1; m_dragLastPos = -1;
} }
// ------------ Right button down // ------------ Right button down
// //
else if ( event.RightDown() ) else if ( event.RightDown() )
@@ -1750,8 +1758,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
// no default action at the moment // no default action at the moment
} }
} }
// ------------ Right double click // ------------ Right double click
// //
else if ( event.RightDClick() ) else if ( event.RightDClick() )
@@ -1762,8 +1770,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event )
// no default action at the moment // no default action at the moment
} }
} }
// ------------ No buttons down and mouse moving // ------------ No buttons down and mouse moving
// //
else if ( event.Moving() ) else if ( event.Moving() )
@@ -1830,14 +1838,14 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
int x, y; int x, y;
wxPoint pos( event.GetPosition() ); wxPoint pos( event.GetPosition() );
CalcUnscrolledPosition( pos.x, pos.y, &x, &y ); CalcUnscrolledPosition( pos.x, pos.y, &x, &y );
wxGridCellCoords coords; wxGridCellCoords coords;
XYToCell( x, y, coords ); XYToCell( x, y, coords );
if ( event.Dragging() ) if ( event.Dragging() )
{ {
m_isDragging = TRUE; m_isDragging = TRUE;
if ( m_cursorMode == WXGRID_CURSOR_SELECT_CELL ) if ( m_cursorMode == WXGRID_CURSOR_SELECT_CELL )
{ {
if ( coords != wxGridNoCellCoords ) if ( coords != wxGridNoCellCoords )
@@ -1909,10 +1917,10 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
event ) ) event ) )
{ {
// no default action at the moment // no default action at the moment
} }
} }
// ------------ Right double click // ------------ Right double click
// //
else if ( event.RightDClick() ) else if ( event.RightDClick() )
@@ -1923,7 +1931,7 @@ void wxGrid::ProcessGridCellMouseEvent( wxMouseEvent& event )
event ) ) event ) )
{ {
// no default action at the moment // no default action at the moment
} }
} }
} }
@@ -2506,10 +2514,10 @@ bool wxGrid::SetModelValues()
void wxGrid::DrawGridCellArea( wxDC& dc ) void wxGrid::DrawGridCellArea( wxDC& dc )
{ {
if ( !m_numRows || !m_numCols ) return; if ( !m_numRows || !m_numCols ) return;
size_t i; size_t i;
size_t numCells = m_cellsExposed.GetCount(); size_t numCells = m_cellsExposed.GetCount();
for ( i = 0; i < numCells; i++ ) for ( i = 0; i < numCells; i++ )
{ {
DrawCell( dc, m_cellsExposed[i] ); DrawCell( dc, m_cellsExposed[i] );
@@ -2521,7 +2529,7 @@ void wxGrid::DrawCell( wxDC& dc, const wxGridCellCoords& coords )
{ {
if ( m_colWidths[coords.GetCol()] <=0 || if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return; m_rowHeights[coords.GetRow()] <= 0 ) return;
if ( m_gridLinesEnabled ) if ( m_gridLinesEnabled )
DrawCellBorder( dc, coords ); DrawCellBorder( dc, coords );
@@ -2538,11 +2546,11 @@ void wxGrid::DrawCellBorder( wxDC& dc, const wxGridCellCoords& coords )
{ {
if ( m_colWidths[coords.GetCol()] <=0 || if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return; m_rowHeights[coords.GetRow()] <= 0 ) return;
dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) ); dc.SetPen( wxPen(GetGridLineColour(), 1, wxSOLID) );
int row = coords.GetRow(); int row = coords.GetRow();
int col = coords.GetCol(); int col = coords.GetCol();
// right hand border // right hand border
// //
dc.DrawLine( m_colRights[col], m_rowBottoms[row] - m_rowHeights[row], dc.DrawLine( m_colRights[col], m_rowBottoms[row] - m_rowHeights[row],
@@ -2559,7 +2567,7 @@ void wxGrid::DrawCellBackground( wxDC& dc, const wxGridCellCoords& coords )
{ {
if ( m_colWidths[coords.GetCol()] <=0 || if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return; m_rowHeights[coords.GetRow()] <= 0 ) return;
int row = coords.GetRow(); int row = coords.GetRow();
int col = coords.GetCol(); int col = coords.GetCol();
@@ -2589,7 +2597,7 @@ void wxGrid::DrawCellValue( wxDC& dc, const wxGridCellCoords& coords )
{ {
if ( m_colWidths[coords.GetCol()] <=0 || if ( m_colWidths[coords.GetCol()] <=0 ||
m_rowHeights[coords.GetRow()] <= 0 ) return; m_rowHeights[coords.GetRow()] <= 0 ) return;
int row = coords.GetRow(); int row = coords.GetRow();
int col = coords.GetCol(); int col = coords.GetCol();
@@ -2617,7 +2625,7 @@ void wxGrid::DrawCellValue( wxDC& dc, const wxGridCellCoords& coords )
rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 ); rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 );
rect.SetWidth( m_colWidths[col] - 4 ); rect.SetWidth( m_colWidths[col] - 4 );
rect.SetHeight( m_rowHeights[row] - 4 ); rect.SetHeight( m_rowHeights[row] - 4 );
DrawTextRectangle( dc, GetCellValue( row, col ), rect, hAlign, vAlign ); DrawTextRectangle( dc, GetCellValue( row, col ), rect, hAlign, vAlign );
} }
@@ -2629,8 +2637,8 @@ void wxGrid::DrawCellValue( wxDC& dc, const wxGridCellCoords& coords )
// //
void wxGrid::DrawAllGridLines( wxDC& dc ) void wxGrid::DrawAllGridLines( wxDC& dc )
{ {
if ( !m_gridLinesEnabled || if ( !m_gridLinesEnabled ||
!m_numRows || !m_numRows ||
!m_numCols ) return; !m_numCols ) return;
int cw, ch; int cw, ch;
@@ -2646,7 +2654,7 @@ void wxGrid::DrawAllGridLines( wxDC& dc )
// horizontal grid lines // horizontal grid lines
// //
int i; int i;
for ( i = 0; i <= m_numRows; i++ ) for ( i = 0; i <= m_numRows; i++ )
{ {
if ( m_rowBottoms[i] > bottom ) if ( m_rowBottoms[i] > bottom )
@@ -2679,21 +2687,21 @@ void wxGrid::DrawAllGridLines( wxDC& dc )
void wxGrid::DrawRowLabels( wxDC& dc ) void wxGrid::DrawRowLabels( wxDC& dc )
{ {
if ( !m_numRows || !m_numCols ) return; if ( !m_numRows || !m_numCols ) return;
size_t i; size_t i;
size_t numLabels = m_rowLabelsExposed.GetCount(); size_t numLabels = m_rowLabelsExposed.GetCount();
for ( i = 0; i < numLabels; i++ ) for ( i = 0; i < numLabels; i++ )
{ {
DrawRowLabel( dc, m_rowLabelsExposed[i] ); DrawRowLabel( dc, m_rowLabelsExposed[i] );
} }
} }
void wxGrid::DrawRowLabel( wxDC& dc, int row ) void wxGrid::DrawRowLabel( wxDC& dc, int row )
{ {
if ( m_rowHeights[row] <= 0 ) return; if ( m_rowHeights[row] <= 0 ) return;
// draw the label's horizontal border (the vertical border is // draw the label's horizontal border (the vertical border is
// provided by the cell area window margin) // provided by the cell area window margin)
// //
@@ -2706,41 +2714,41 @@ void wxGrid::DrawRowLabel( wxDC& dc, int row )
dc.DrawLine( 0, m_rowBottoms[row]+2, dc.DrawLine( 0, m_rowBottoms[row]+2,
m_rowLabelWidth, m_rowBottoms[row]+2 ); m_rowLabelWidth, m_rowBottoms[row]+2 );
dc.SetBackgroundMode( wxTRANSPARENT ); dc.SetBackgroundMode( wxTRANSPARENT );
dc.SetTextForeground( GetLabelTextColour() ); dc.SetTextForeground( GetLabelTextColour() );
dc.SetFont( GetLabelFont() ); dc.SetFont( GetLabelFont() );
int hAlign, vAlign; int hAlign, vAlign;
GetRowLabelAlignment( &hAlign, &vAlign ); GetRowLabelAlignment( &hAlign, &vAlign );
wxRect rect; wxRect rect;
rect.SetX( 2 ); rect.SetX( 2 );
rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 ); rect.SetY( m_rowBottoms[row] - m_rowHeights[row] + 2 );
rect.SetWidth( m_rowLabelWidth - 4 ); rect.SetWidth( m_rowLabelWidth - 4 );
rect.SetHeight( m_rowHeights[row] - 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 ) void wxGrid::DrawColLabels( wxDC& dc )
{ {
if ( !m_numRows || !m_numCols ) return; if ( !m_numRows || !m_numCols ) return;
size_t i; size_t i;
size_t numLabels = m_colLabelsExposed.GetCount(); size_t numLabels = m_colLabelsExposed.GetCount();
for ( i = 0; i < numLabels; i++ ) for ( i = 0; i < numLabels; i++ )
{ {
DrawColLabel( dc, m_colLabelsExposed[i] ); DrawColLabel( dc, m_colLabelsExposed[i] );
} }
} }
void wxGrid::DrawColLabel( wxDC& dc, int col ) void wxGrid::DrawColLabel( wxDC& dc, int col )
{ {
if ( m_colWidths[col] <= 0 ) return; if ( m_colWidths[col] <= 0 ) return;
// draw the label's vertical border (the horizontal border is // draw the label's vertical border (the horizontal border is
// provided by the cell area window margin) // provided by the cell area window margin)
// //
@@ -2760,13 +2768,13 @@ void wxGrid::DrawColLabel( wxDC& dc, int col )
int hAlign, vAlign; int hAlign, vAlign;
GetColLabelAlignment( &hAlign, &vAlign ); GetColLabelAlignment( &hAlign, &vAlign );
wxRect rect; wxRect rect;
rect.SetX( m_colRights[col] - m_colWidths[col] + 2 ); rect.SetX( m_colRights[col] - m_colWidths[col] + 2 );
rect.SetY( 2 ); rect.SetY( 2 );
rect.SetWidth( m_colWidths[col] - 4 ); rect.SetWidth( m_colWidths[col] - 4 );
rect.SetHeight( m_colLabelHeight - 4 ); rect.SetHeight( m_colLabelHeight - 4 );
DrawTextRectangle( dc, GetColLabelValue( col ), rect, hAlign, vAlign ); DrawTextRectangle( dc, GetColLabelValue( col ), rect, hAlign, vAlign );
} }
@@ -2922,7 +2930,7 @@ void wxGrid::EnableCellEditControl( bool enable )
enable != m_cellEditCtrlEnabled ) enable != m_cellEditCtrlEnabled )
{ {
m_cellEditCtrlEnabled = enable; m_cellEditCtrlEnabled = enable;
if ( m_cellEditCtrlEnabled ) if ( m_cellEditCtrlEnabled )
{ {
SetEditControlValue(); SetEditControlValue();
@@ -2957,14 +2965,14 @@ void wxGrid::ShowCellEditControl()
int left, top, right, bottom; int left, top, right, bottom;
CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top ); CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom ); CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom );
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
// Make the edit control large enough to allow for internal margins // Make the edit control large enough to allow for internal margins
// TODO: remove this if the text ctrl sizing is improved esp. for unix // 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.SetLeft( wxMax(0, left-4) );
rect.SetTop( wxMax(0, top-4) ); rect.SetTop( wxMax(0, top-4) );
rect.SetRight( rect.GetRight() + 8 ); rect.SetRight( rect.GetRight() + 8 );
@@ -2973,9 +2981,9 @@ void wxGrid::ShowCellEditControl()
rect.SetLeft( wxMax(0, left-2) ); rect.SetLeft( wxMax(0, left-2) );
rect.SetTop( wxMax(0, top-2) ); rect.SetTop( wxMax(0, top-2) );
rect.SetRight( rect.GetRight() + 4 ); rect.SetRight( rect.GetRight() + 4 );
rect.SetBottom( rect.GetBottom() + 4 ); rect.SetBottom( rect.GetBottom() + 4 );
#endif #endif
m_cellEditCtrl->SetSize( rect ); m_cellEditCtrl->SetSize( rect );
m_cellEditCtrl->Show( TRUE ); m_cellEditCtrl->Show( TRUE );
@@ -3107,8 +3115,8 @@ void wxGrid::SaveEditControlValue()
// //
// ------ Grid location functions // ------ 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 // grid cells and labels so you will need to convert from device
// coordinates for mouse events etc. // coordinates for mouse events etc.
// //
@@ -3212,18 +3220,18 @@ bool wxGrid::IsVisible( int row, int col, bool wholeCellVisible )
// get the cell rectangle in logical coords // get the cell rectangle in logical coords
// //
wxRect r( CellToRect( row, col ) ); wxRect r( CellToRect( row, col ) );
// convert to device coords // convert to device coords
// //
int left, top, right, bottom; int left, top, right, bottom;
CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top ); CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top );
CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom ); CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom );
// check against the client area of the grid window // check against the client area of the grid window
// //
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
if ( wholeCellVisible ) if ( wholeCellVisible )
{ {
// is the cell wholly visible ? // is the cell wholly visible ?
@@ -3247,7 +3255,7 @@ bool wxGrid::IsVisible( int row, int col, bool wholeCellVisible )
void wxGrid::MakeCellVisible( int row, int col ) void wxGrid::MakeCellVisible( int row, int col )
{ {
int i; int i;
int xpos = -1, ypos = -1; int xpos = -1, ypos = -1;
if ( row >= 0 && row < m_numRows && if ( row >= 0 && row < m_numRows &&
col >= 0 && col < m_numCols ) col >= 0 && col < m_numCols )
@@ -3255,16 +3263,16 @@ void wxGrid::MakeCellVisible( int row, int col )
// get the cell rectangle in logical coords // get the cell rectangle in logical coords
// //
wxRect r( CellToRect( row, col ) ); wxRect r( CellToRect( row, col ) );
// convert to device coords // convert to device coords
// //
int left, top, right, bottom; int left, top, right, bottom;
CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top ); CalcScrolledPosition( r.GetLeft(), r.GetTop(), &left, &top );
CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom ); CalcScrolledPosition( r.GetRight(), r.GetBottom(), &right, &bottom );
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
if ( top < 0 ) if ( top < 0 )
{ {
ypos = r.GetTop(); ypos = r.GetTop();
@@ -3321,7 +3329,7 @@ bool wxGrid::MoveCursorUp()
{ {
MakeCellVisible( m_currentCellCoords.GetRow() - 1, MakeCellVisible( m_currentCellCoords.GetRow() - 1,
m_currentCellCoords.GetCol() ); m_currentCellCoords.GetCol() );
SetCurrentCell( m_currentCellCoords.GetRow() - 1, SetCurrentCell( m_currentCellCoords.GetRow() - 1,
m_currentCellCoords.GetCol() ); m_currentCellCoords.GetCol() );
@@ -3341,7 +3349,7 @@ bool wxGrid::MoveCursorDown()
{ {
MakeCellVisible( m_currentCellCoords.GetRow() + 1, MakeCellVisible( m_currentCellCoords.GetRow() + 1,
m_currentCellCoords.GetCol() ); m_currentCellCoords.GetCol() );
SetCurrentCell( m_currentCellCoords.GetRow() + 1, SetCurrentCell( m_currentCellCoords.GetRow() + 1,
m_currentCellCoords.GetCol() ); m_currentCellCoords.GetCol() );
@@ -3359,7 +3367,7 @@ bool wxGrid::MoveCursorLeft()
{ {
MakeCellVisible( m_currentCellCoords.GetRow(), MakeCellVisible( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() - 1 ); m_currentCellCoords.GetCol() - 1 );
SetCurrentCell( m_currentCellCoords.GetRow(), SetCurrentCell( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() - 1 ); m_currentCellCoords.GetCol() - 1 );
@@ -3377,7 +3385,7 @@ bool wxGrid::MoveCursorRight()
{ {
MakeCellVisible( m_currentCellCoords.GetRow(), MakeCellVisible( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() + 1 ); m_currentCellCoords.GetCol() + 1 );
SetCurrentCell( m_currentCellCoords.GetRow(), SetCurrentCell( m_currentCellCoords.GetRow(),
m_currentCellCoords.GetCol() + 1 ); m_currentCellCoords.GetCol() + 1 );
@@ -3391,27 +3399,27 @@ bool wxGrid::MoveCursorRight()
bool wxGrid::MovePageUp() bool wxGrid::MovePageUp()
{ {
if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE; if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE;
int row = m_currentCellCoords.GetRow(); int row = m_currentCellCoords.GetRow();
if ( row > 0 ) if ( row > 0 )
{ {
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
int y = m_rowBottoms[ row ] - m_rowHeights[ row ]; int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int newRow = YToRow( y - ch + 1 ); int newRow = YToRow( y - ch + 1 );
if ( newRow == -1 ) if ( newRow == -1 )
{ {
newRow = 0; newRow = 0;
} }
else if ( newRow == row ) else if ( newRow == row )
{ {
newRow = row - 1; newRow = row - 1;
} }
MakeCellVisible( newRow, m_currentCellCoords.GetCol() ); MakeCellVisible( newRow, m_currentCellCoords.GetCol() );
SetCurrentCell( newRow, m_currentCellCoords.GetCol() ); SetCurrentCell( newRow, m_currentCellCoords.GetCol() );
return TRUE; return TRUE;
} }
@@ -3421,27 +3429,27 @@ bool wxGrid::MovePageUp()
bool wxGrid::MovePageDown() bool wxGrid::MovePageDown()
{ {
if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE; if ( m_currentCellCoords == wxGridNoCellCoords ) return FALSE;
int row = m_currentCellCoords.GetRow(); int row = m_currentCellCoords.GetRow();
if ( row < m_numRows ) if ( row < m_numRows )
{ {
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
int y = m_rowBottoms[ row ] - m_rowHeights[ row ]; int y = m_rowBottoms[ row ] - m_rowHeights[ row ];
int newRow = YToRow( y + ch ); int newRow = YToRow( y + ch );
if ( newRow == -1 ) if ( newRow == -1 )
{ {
newRow = m_numRows - 1; newRow = m_numRows - 1;
} }
else if ( newRow == row ) else if ( newRow == row )
{ {
newRow = row + 1; newRow = row + 1;
} }
MakeCellVisible( newRow, m_currentCellCoords.GetCol() ); MakeCellVisible( newRow, m_currentCellCoords.GetCol() );
SetCurrentCell( newRow, m_currentCellCoords.GetCol() ); SetCurrentCell( newRow, m_currentCellCoords.GetCol() );
return TRUE; return TRUE;
} }
@@ -3781,7 +3789,7 @@ void wxGrid::SetRowLabelAlignment( int horiz, int vert )
{ {
m_rowLabelWin->Refresh(); m_rowLabelWin->Refresh();
m_colLabelWin->Refresh(); m_colLabelWin->Refresh();
} }
} }
void wxGrid::SetColLabelAlignment( int horiz, int vert ) void wxGrid::SetColLabelAlignment( int horiz, int vert )
@@ -3800,7 +3808,7 @@ void wxGrid::SetColLabelAlignment( int horiz, int vert )
{ {
m_rowLabelWin->Refresh(); m_rowLabelWin->Refresh();
m_colLabelWin->Refresh(); m_colLabelWin->Refresh();
} }
} }
void wxGrid::SetRowLabelValue( int row, const wxString& s ) void wxGrid::SetRowLabelValue( int row, const wxString& s )
@@ -3836,7 +3844,7 @@ void wxGrid::SetGridLineColour( const wxColour& colour )
if ( m_gridLineColour != colour ) if ( m_gridLineColour != colour )
{ {
m_gridLineColour = colour; m_gridLineColour = colour;
wxClientDC dc( m_gridWin ); wxClientDC dc( m_gridWin );
PrepareDC( dc ); PrepareDC( dc );
DrawAllGridLines( dc ); DrawAllGridLines( dc );
@@ -3970,19 +3978,19 @@ void wxGrid::SetDefaultRowSize( int height, bool resizeExistingRows )
void wxGrid::SetRowSize( int row, int height ) void wxGrid::SetRowSize( int row, int height )
{ {
int i; int i;
if ( row >= 0 && row < m_numRows ) if ( row >= 0 && row < m_numRows )
{ {
int h = wxMax( 0, height ); int h = wxMax( 0, height );
int diff = h - m_rowHeights[row]; int diff = h - m_rowHeights[row];
m_rowHeights[row] = h; m_rowHeights[row] = h;
for ( i = row; i < m_numRows; i++ ) for ( i = row; i < m_numRows; i++ )
{ {
m_rowBottoms[i] += diff; m_rowBottoms[i] += diff;
} }
CalcDimensions(); CalcDimensions();
// Note: we are ending the event *after* doing // Note: we are ending the event *after* doing
// default processing in this case // default processing in this case
// //
@@ -4016,7 +4024,7 @@ void wxGrid::SetDefaultColSize( int width, bool resizeExistingCols )
void wxGrid::SetColSize( int col, int width ) void wxGrid::SetColSize( int col, int width )
{ {
int i; int i;
if ( col >= 0 && col < m_numCols ) if ( col >= 0 && col < m_numCols )
{ {
int w = wxMax( 0, width ); int w = wxMax( 0, width );
@@ -4028,7 +4036,7 @@ void wxGrid::SetColSize( int col, int width )
m_colRights[i] += diff; m_colRights[i] += diff;
} }
CalcDimensions(); CalcDimensions();
// Note: we are ending the event *after* doing // Note: we are ending the event *after* doing
// default processing in this case // default processing in this case
// //
@@ -4106,9 +4114,9 @@ void wxGrid::SetCellValue( int row, int col, const wxString& s )
PrepareDC( dc ); PrepareDC( dc );
DrawCell( dc, wxGridCellCoords(row, col) ); DrawCell( dc, wxGridCellCoords(row, col) );
} }
#if 0 // TODO: edit in place #if 0 // TODO: edit in place
if ( m_currentCellCoords.GetRow() == row && if ( m_currentCellCoords.GetRow() == row &&
m_currentCellCoords.GetCol() == col ) m_currentCellCoords.GetCol() == col )
{ {
@@ -4127,7 +4135,7 @@ void wxGrid::SetCellValue( int row, int col, const wxString& s )
void wxGrid::SelectRow( int row, bool addToSelected ) void wxGrid::SelectRow( int row, bool addToSelected )
{ {
wxRect r; wxRect r;
if ( IsSelection() && addToSelected ) if ( IsSelection() && addToSelected )
{ {
if ( m_selectedTopLeft.GetRow() > row ) if ( m_selectedTopLeft.GetRow() > row )
@@ -4151,7 +4159,7 @@ void wxGrid::SelectRow( int row, bool addToSelected )
r = SelectionToDeviceRect(); r = SelectionToDeviceRect();
ClearSelection(); ClearSelection();
if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r ); if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r );
m_selectedTopLeft.Set( row, 0 ); m_selectedTopLeft.Set( row, 0 );
m_selectedBottomRight.Set( row, m_numCols-1 ); m_selectedBottomRight.Set( row, m_numCols-1 );
r = SelectionToDeviceRect(); r = SelectionToDeviceRect();
@@ -4171,7 +4179,7 @@ void wxGrid::SelectRow( int row, bool addToSelected )
void wxGrid::SelectCol( int col, bool addToSelected ) void wxGrid::SelectCol( int col, bool addToSelected )
{ {
wxRect r; wxRect r;
if ( IsSelection() && addToSelected ) if ( IsSelection() && addToSelected )
{ {
if ( m_selectedTopLeft.GetCol() > col ) if ( m_selectedTopLeft.GetCol() > col )
@@ -4195,7 +4203,7 @@ void wxGrid::SelectCol( int col, bool addToSelected )
r = SelectionToDeviceRect(); r = SelectionToDeviceRect();
ClearSelection(); ClearSelection();
if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r ); if ( r != wxGridNoCellRect ) m_gridWin->Refresh( TRUE, &r );
m_selectedTopLeft.Set( 0, col ); m_selectedTopLeft.Set( 0, col );
m_selectedBottomRight.Set( m_numRows-1, col ); m_selectedBottomRight.Set( m_numRows-1, col );
r = SelectionToDeviceRect(); r = SelectionToDeviceRect();
@@ -4232,7 +4240,7 @@ void wxGrid::SelectBlock( int topRow, int leftCol, int bottomRow, int rightCol )
m_selectedTopLeft.Set( topRow, leftCol ); m_selectedTopLeft.Set( topRow, leftCol );
m_selectedBottomRight.Set( bottomRow, rightCol ); m_selectedBottomRight.Set( bottomRow, rightCol );
wxRect r; wxRect r;
r = SelectionToDeviceRect(); r = SelectionToDeviceRect();
m_gridWin->Refresh( TRUE, &r ); m_gridWin->Refresh( TRUE, &r );
@@ -4303,10 +4311,10 @@ wxRect wxGrid::SelectionToDeviceRect()
int left, top, right, bottom; int left, top, right, bottom;
CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top ); CalcScrolledPosition( rect.GetLeft(), rect.GetTop(), &left, &top );
CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom ); CalcScrolledPosition( rect.GetRight(), rect.GetBottom(), &right, &bottom );
int cw, ch; int cw, ch;
m_gridWin->GetClientSize( &cw, &ch ); m_gridWin->GetClientSize( &cw, &ch );
rect.SetLeft( wxMax(0, left) ); rect.SetLeft( wxMax(0, left) );
rect.SetTop( wxMax(0, top) ); rect.SetTop( wxMax(0, top) );
rect.SetRight( wxMin(cw, right) ); rect.SetRight( wxMin(cw, right) );