added wxGrid::UseNativeColHeader() (column reordering doesn't work yet); more wxGrid clean up: refactor Init/InitVars/Create
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -77,6 +77,7 @@ class WXDLLIMPEXP_FWD_ADV wxGridWindow;
|
|||||||
class WXDLLIMPEXP_FWD_ADV wxGridTypeRegistry;
|
class WXDLLIMPEXP_FWD_ADV wxGridTypeRegistry;
|
||||||
class WXDLLIMPEXP_FWD_ADV wxGridSelection;
|
class WXDLLIMPEXP_FWD_ADV wxGridSelection;
|
||||||
|
|
||||||
|
class WXDLLIMPEXP_FWD_CORE wxHeaderCtrl;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxCheckBox;
|
class WXDLLIMPEXP_FWD_CORE wxCheckBox;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxComboBox;
|
class WXDLLIMPEXP_FWD_CORE wxComboBox;
|
||||||
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
|
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
|
||||||
@@ -1128,14 +1129,19 @@ public:
|
|||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
// ctor and Create() create the grid window, as with the other controls
|
// ctor and Create() create the grid window, as with the other controls
|
||||||
wxGrid();
|
wxGrid() { Init(); }
|
||||||
|
|
||||||
wxGrid(wxWindow *parent,
|
wxGrid(wxWindow *parent,
|
||||||
wxWindowID id,
|
wxWindowID id,
|
||||||
const wxPoint& pos = wxDefaultPosition,
|
const wxPoint& pos = wxDefaultPosition,
|
||||||
const wxSize& size = wxDefaultSize,
|
const wxSize& size = wxDefaultSize,
|
||||||
long style = wxWANTS_CHARS,
|
long style = wxWANTS_CHARS,
|
||||||
const wxString& name = wxGridNameStr);
|
const wxString& name = wxGridNameStr)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
|
||||||
|
Create(parent, id, pos, size, style, name);
|
||||||
|
}
|
||||||
|
|
||||||
bool Create(wxWindow *parent,
|
bool Create(wxWindow *parent,
|
||||||
wxWindowID id,
|
wxWindowID id,
|
||||||
@@ -1379,7 +1385,13 @@ public:
|
|||||||
int GetCellHighlightPenWidth() const { return m_cellHighlightPenWidth; }
|
int GetCellHighlightPenWidth() const { return m_cellHighlightPenWidth; }
|
||||||
int GetCellHighlightROPenWidth() const { return m_cellHighlightROPenWidth; }
|
int GetCellHighlightROPenWidth() const { return m_cellHighlightROPenWidth; }
|
||||||
|
|
||||||
void SetUseNativeColLabels( bool native = true );
|
// this one will use wxHeaderCtrl for the column labels
|
||||||
|
void UseNativeColHeader(bool native = true);
|
||||||
|
|
||||||
|
// this one will still draw them manually but using the native renderer
|
||||||
|
// instead of using the same appearance as for the row labels
|
||||||
|
void SetUseNativeColLabels( bool native = true );
|
||||||
|
|
||||||
void SetRowLabelSize( int width );
|
void SetRowLabelSize( int width );
|
||||||
void SetColLabelSize( int height );
|
void SetColLabelSize( int height );
|
||||||
void HideRowLabels() { SetRowLabelSize( 0 ); }
|
void HideRowLabels() { SetRowLabelSize( 0 ); }
|
||||||
@@ -1701,7 +1713,7 @@ public:
|
|||||||
// Accessors for component windows
|
// Accessors for component windows
|
||||||
wxWindow* GetGridWindow() const { return (wxWindow*)m_gridWin; }
|
wxWindow* GetGridWindow() const { return (wxWindow*)m_gridWin; }
|
||||||
wxWindow* GetGridRowLabelWindow() const { return (wxWindow*)m_rowLabelWin; }
|
wxWindow* GetGridRowLabelWindow() const { return (wxWindow*)m_rowLabelWin; }
|
||||||
wxWindow* GetGridColLabelWindow() const { return (wxWindow*)m_colLabelWin; }
|
wxWindow* GetGridColLabelWindow() const { return m_colWindow; }
|
||||||
wxWindow* GetGridCornerLabelWindow() const { return (wxWindow*)m_cornerLabelWin; }
|
wxWindow* GetGridCornerLabelWindow() const { return (wxWindow*)m_cornerLabelWin; }
|
||||||
|
|
||||||
// Allow adjustment of scroll increment. The default is (15, 15).
|
// Allow adjustment of scroll increment. The default is (15, 15).
|
||||||
@@ -1730,12 +1742,10 @@ public:
|
|||||||
int x, int y, int w = wxDefaultCoord, int h = wxDefaultCoord,
|
int x, int y, int w = wxDefaultCoord, int h = wxDefaultCoord,
|
||||||
long style = wxWANTS_CHARS,
|
long style = wxWANTS_CHARS,
|
||||||
const wxString& name = wxPanelNameStr )
|
const wxString& name = wxPanelNameStr )
|
||||||
: wxScrolledWindow( parent, wxID_ANY, wxPoint(x,y), wxSize(w,h),
|
{
|
||||||
(style|wxWANTS_CHARS), name )
|
Init();
|
||||||
{
|
Create(parent, wxID_ANY, wxPoint(x, y), wxSize(w, h), style, name);
|
||||||
InitVars();
|
}
|
||||||
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 ); }
|
||||||
@@ -1896,9 +1906,30 @@ protected:
|
|||||||
bool m_created;
|
bool m_created;
|
||||||
|
|
||||||
wxGridWindow *m_gridWin;
|
wxGridWindow *m_gridWin;
|
||||||
wxGridRowLabelWindow *m_rowLabelWin;
|
|
||||||
wxGridColLabelWindow *m_colLabelWin;
|
|
||||||
wxGridCornerLabelWindow *m_cornerLabelWin;
|
wxGridCornerLabelWindow *m_cornerLabelWin;
|
||||||
|
wxGridRowLabelWindow *m_rowLabelWin;
|
||||||
|
|
||||||
|
// the real type of the column window depends on m_useNativeHeader value:
|
||||||
|
// if it is true, its dynamic type is wxHeaderCtrl, otherwise it is
|
||||||
|
// wxGridColLabelWindow, use accessors below when the real type matters
|
||||||
|
wxWindow *m_colWindow;
|
||||||
|
|
||||||
|
wxHeaderCtrl *GetColHeader() const
|
||||||
|
{
|
||||||
|
wxASSERT_MSG( m_useNativeHeader, "no column header window" );
|
||||||
|
|
||||||
|
// static_cast<> doesn't work without the full class declaration in
|
||||||
|
// view and we prefer to avoid adding more compile-time dependencies
|
||||||
|
// even at the cost of using reinterpret_cast<>
|
||||||
|
return reinterpret_cast<wxHeaderCtrl *>(m_colWindow);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxGridColLabelWindow *GetColLabelWindow() const
|
||||||
|
{
|
||||||
|
wxASSERT_MSG( !m_useNativeHeader, "no column label window" );
|
||||||
|
|
||||||
|
return reinterpret_cast<wxGridColLabelWindow *>(m_colWindow);
|
||||||
|
}
|
||||||
|
|
||||||
wxGridTableBase *m_table;
|
wxGridTableBase *m_table;
|
||||||
bool m_ownTable;
|
bool m_ownTable;
|
||||||
@@ -1946,7 +1977,8 @@ protected:
|
|||||||
wxArrayInt m_colWidths;
|
wxArrayInt m_colWidths;
|
||||||
wxArrayInt m_colRights;
|
wxArrayInt m_colRights;
|
||||||
|
|
||||||
bool m_nativeColumnLabels;
|
bool m_useNativeHeader,
|
||||||
|
m_nativeColumnLabels;
|
||||||
|
|
||||||
// get the col/row coords
|
// get the col/row coords
|
||||||
int GetColWidth(int col) const;
|
int GetColWidth(int col) const;
|
||||||
@@ -2119,9 +2151,9 @@ protected:
|
|||||||
int m_scrollLineX; // X scroll increment
|
int m_scrollLineX; // X scroll increment
|
||||||
int m_scrollLineY; // Y scroll increment
|
int m_scrollLineY; // Y scroll increment
|
||||||
|
|
||||||
|
void Init(); // common part of all ctors
|
||||||
void Create();
|
void Create();
|
||||||
void Init();
|
void CreateColumnWindow();
|
||||||
void InitVars();
|
|
||||||
void CalcDimensions();
|
void CalcDimensions();
|
||||||
void CalcWindowSizes();
|
void CalcWindowSizes();
|
||||||
bool Redimension( wxGridTableMessage& );
|
bool Redimension( wxGridTableMessage& );
|
||||||
@@ -2180,6 +2212,8 @@ protected:
|
|||||||
friend class wxGridRowLabelWindow;
|
friend class wxGridRowLabelWindow;
|
||||||
friend class wxGridWindow;
|
friend class wxGridWindow;
|
||||||
|
|
||||||
|
friend class wxGridHeaderCtrl;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// implement wxScrolledWindow method to return m_gridWin size
|
// implement wxScrolledWindow method to return m_gridWin size
|
||||||
virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size);
|
virtual wxSize GetSizeAvailableForScrollTarget(const wxSize& size);
|
||||||
@@ -2227,8 +2261,12 @@ private:
|
|||||||
void ProcessColLabelMouseEvent(wxMouseEvent& event);
|
void ProcessColLabelMouseEvent(wxMouseEvent& event);
|
||||||
void ProcessCornerLabelMouseEvent(wxMouseEvent& event);
|
void ProcessCornerLabelMouseEvent(wxMouseEvent& event);
|
||||||
|
|
||||||
|
void DoStartResizeCol(int col);
|
||||||
|
void DoUpdateResizeCol(int x);
|
||||||
|
void DoUpdateResizeColWidth(int w);
|
||||||
|
|
||||||
void DoEndDragResizeRow();
|
void DoEndDragResizeRow();
|
||||||
void DoEndDragResizeCol();
|
void DoEndDragResizeCol(wxMouseEvent *event = NULL);
|
||||||
void DoEndDragMoveCol();
|
void DoEndDragMoveCol();
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1381,9 +1381,36 @@ public:
|
|||||||
There is no equivalent method for drawing row columns as there is not
|
There is no equivalent method for drawing row columns as there is not
|
||||||
native look for that. This option is useful when using wxGrid for
|
native look for that. This option is useful when using wxGrid for
|
||||||
displaying tables and not as a spread-sheet.
|
displaying tables and not as a spread-sheet.
|
||||||
|
|
||||||
|
@see UseNativeHeader()
|
||||||
*/
|
*/
|
||||||
void SetUseNativeColLabels(bool native = true);
|
void SetUseNativeColLabels(bool native = true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Enable the use of native header window for column labels.
|
||||||
|
|
||||||
|
If this function is called with @true argument, a wxHeaderCtrl is used
|
||||||
|
instead to display the column labels instead of drawing them in wxGrid
|
||||||
|
code itself. This has the advantage of making the grid look and feel
|
||||||
|
perfectly the same as native applications (using SetUseNativeColLabels()
|
||||||
|
the grid can be made to look more natively but it still doesn't feel
|
||||||
|
natively, notably the column resizing and dragging still works slightly
|
||||||
|
differently as it is implemented in wxWidgets itself) but results in
|
||||||
|
different behaviour for column and row headers, for which there is no
|
||||||
|
equivalent function, and, most importantly, is unsuitable for grids
|
||||||
|
with huge numbers of columns as wxHeaderCtrl doesn't support virtual
|
||||||
|
mode. Because of this, by default the grid does not use the native
|
||||||
|
header control but you should call this function to enable it if you
|
||||||
|
are using the grid to display tabular data and don't have thousands of
|
||||||
|
columns in it.
|
||||||
|
|
||||||
|
Also note that currently @c wxEVT_GRID_LABEL_LEFT_DCLICK and @c
|
||||||
|
wxEVT_GRID_LABEL_RIGHT_DCLICK events are not generated for the column
|
||||||
|
labels if the native columns header is used (but this limitation could
|
||||||
|
possibly be lifted in the future).
|
||||||
|
*/
|
||||||
|
void UseNativeColHeader(bool native = true);
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user