wxWidgets/samples/grid/griddemo.h
lucian-rotariu 04f7f1fd32 Add support for freezing columns and/or rows of wxGrid
Add wxGrid::FreezeTo() method which allows to freeze the given number of
columns and/or rows at the beginning of the grid, i.e. keep them pinned
in place while the rest of the grid is scrolled.

The main wxGridWindow (m_gridWin) now corresponds to the non-frozen part
of the grid, with up to 3 new similar windows for the frozen
rows/columns and the frozen corner cells (which only exist if both rows
and columns are frozen) being additionally used.

Doing this involved adding "wxGridWindow*" parameter to many functions
that previously only worked with m_gridWin itself and addressing
additional complications, such as mouse events that can now cross
different windows.

See https://github.com/wxWidgets/wxWidgets/pull/952 for the original
version of the changes.
2019-07-16 18:01:36 +02:00

339 lines
9.9 KiB
C++

/////////////////////////////////////////////////////////////////////////////
// Name: griddemo.h
// Purpose: Grid control wxWidgets sample
// Author: Michael Bedward
// Modified by:
// Copyright: (c) Michael Bedward, Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef griddemo_h
#define griddemo_h
class wxGrid;
class GridApp : public wxApp
{
public:
bool OnInit() wxOVERRIDE;
};
class GridFrame : public wxFrame
{
wxGrid *grid;
#if wxUSE_LOG
wxTextCtrl *logWin;
wxLogTextCtrl *logger;
#endif // wxUSE_LOG
void SetDefaults();
void ToggleRowLabels( wxCommandEvent& );
void ToggleColLabels( wxCommandEvent& );
void ToggleEditing( wxCommandEvent& );
void ToggleRowSizing( wxCommandEvent& );
void ToggleColSizing( wxCommandEvent& );
void ToggleColMoving( wxCommandEvent& );
void ToggleGridSizing( wxCommandEvent& );
void ToggleGridDragCell ( wxCommandEvent& );
void SetNativeColHeader ( wxCommandEvent& );
void SetNativeColLabels ( wxCommandEvent& );
void SetCustomColHeader( wxCommandEvent& );
void SetDefaultColHeader( wxCommandEvent& );
void SetTabBehaviour( wxCommandEvent& );
void SetTabCustomHandler( wxCommandEvent& );
void ToggleGridLines( wxCommandEvent& );
void AutoSizeCols( wxCommandEvent& );
void CellOverflow( wxCommandEvent& );
void ResizeCell( wxCommandEvent& );
void SetLabelColour( wxCommandEvent& );
void SetLabelTextColour( wxCommandEvent& );
void SetLabelFont(wxCommandEvent &);
void SetRowLabelHorizAlignment( wxCommandEvent& );
void SetRowLabelVertAlignment( wxCommandEvent& );
void SetColLabelHorizAlignment( wxCommandEvent& );
void SetColLabelVertAlignment( wxCommandEvent& );
void SetCornerLabelHorizAlignment( wxCommandEvent& );
void SetCornerLabelVertAlignment( wxCommandEvent& );
void ToggleCornerLabelOrientation( wxCommandEvent& );
void SetGridLineColour( wxCommandEvent& );
void SetCellFgColour(wxCommandEvent &);
void SetCellBgColour(wxCommandEvent &);
void InsertRow( wxCommandEvent& );
void InsertCol( wxCommandEvent& );
void DeleteSelectedRows( wxCommandEvent& );
void DeleteSelectedCols( wxCommandEvent& );
void ClearGrid( wxCommandEvent& );
void SetCornerLabelValue( wxCommandEvent& );
void ShowSelection( wxCommandEvent& );
void SelectCells( wxCommandEvent& );
void SelectRows( wxCommandEvent& );
void SelectCols( wxCommandEvent& );
void SelectRowsOrCols( wxCommandEvent& );
void FreezeOrThaw( wxCommandEvent& );
void DeselectCell(wxCommandEvent& event);
void DeselectCol(wxCommandEvent& event);
void DeselectRow(wxCommandEvent& event);
void DeselectAll(wxCommandEvent& event);
void SelectCell(wxCommandEvent& event);
void SelectCol(wxCommandEvent& event);
void SelectRow(wxCommandEvent& event);
void SelectAll(wxCommandEvent& event);
void OnAddToSelectToggle(wxCommandEvent& event);
void AutoSizeRow(wxCommandEvent& event);
void AutoSizeCol(wxCommandEvent& event);
void AutoSizeRowLabel(wxCommandEvent& event);
void AutoSizeColLabel(wxCommandEvent& event);
void AutoSizeLabelsCol(wxCommandEvent& event);
void AutoSizeLabelsRow(wxCommandEvent& event);
void AutoSizeTable(wxCommandEvent& event);
void HideCol(wxCommandEvent& event);
void ShowCol(wxCommandEvent& event);
void HideRow(wxCommandEvent& event);
void ShowRow(wxCommandEvent& event);
void OnLabelLeftClick( wxGridEvent& );
void OnCellLeftClick( wxGridEvent& );
void OnRowSize( wxGridSizeEvent& );
void OnColSize( wxGridSizeEvent& );
void OnColAutoSize( wxGridSizeEvent& );
void OnSelectCell( wxGridEvent& );
void OnRangeSelected( wxGridRangeSelectEvent& );
void OnCellValueChanging( wxGridEvent& );
void OnCellValueChanged( wxGridEvent& );
void OnCellBeginDrag( wxGridEvent& );
void OnEditorShown(wxGridEvent&);
void OnEditorHidden(wxGridEvent&);
void OnSetHighlightWidth(wxCommandEvent&);
void OnSetROHighlightWidth(wxCommandEvent&);
void OnGridCustomTab(wxGridEvent& event);
public:
GridFrame();
~GridFrame();
void OnQuit( wxCommandEvent& );
void About( wxCommandEvent& );
void OnVTable( wxCommandEvent& );
void OnBugsTable( wxCommandEvent& );
void OnTabularTable( wxCommandEvent& );
void OnGridRender( wxCommandEvent& event );
void OnRenderPaint( wxPaintEvent& event );
enum
{
ID_TOGGLEROWLABELS = 100,
ID_TOGGLECOLLABELS,
ID_TOGGLEEDIT,
ID_TOGGLEROWSIZING,
ID_TOGGLECOLSIZING,
ID_TOGGLECOLMOVING,
ID_TOGGLEGRIDSIZING,
ID_TOGGLEGRIDDRAGCELL,
ID_TOGGLEGRIDLINES,
ID_AUTOSIZECOLS,
ID_CELLOVERFLOW,
ID_HIDECOL,
ID_SHOWCOL,
ID_HIDEROW,
ID_SHOWROW,
ID_RESIZECELL,
ID_SETLABELCOLOUR,
ID_SETLABELTEXTCOLOUR,
ID_SETLABEL_FONT,
ID_ROWLABELALIGN,
ID_ROWLABELHORIZALIGN,
ID_ROWLABELVERTALIGN,
ID_COLLABELALIGN,
ID_COLLABELHORIZALIGN,
ID_COLLABELVERTALIGN,
ID_CORNERLABELALIGN,
ID_CORNERLABELHORIZALIGN,
ID_CORNERLABELVERTALIGN,
ID_CORNERLABELORIENTATION,
ID_COLDEFAULTHEADER,
ID_COLNATIVEHEADER,
ID_COLNATIVELABELS,
ID_COLCUSTOMHEADER,
ID_TAB_STOP,
ID_TAB_WRAP,
ID_TAB_LEAVE,
ID_TAB_CUSTOM,
ID_GRIDLINECOLOUR,
ID_INSERTROW,
ID_INSERTCOL,
ID_DELETEROW,
ID_DELETECOL,
ID_CLEARGRID,
ID_SETCORNERLABEL,
ID_SHOWSEL,
ID_CHANGESEL,
ID_SELCELLS,
ID_SELROWS,
ID_SELCOLS,
ID_SELROWSORCOLS,
ID_SET_CELL_FG_COLOUR,
ID_SET_CELL_BG_COLOUR,
ID_VTABLE,
ID_BUGS_TABLE,
ID_TABULAR_TABLE,
ID_SELECT_UNSELECT,
ID_SELECT_ALL,
ID_SELECT_ROW,
ID_SELECT_COL,
ID_SELECT_CELL,
ID_DESELECT_ALL,
ID_DESELECT_ROW,
ID_DESELECT_COL,
ID_DESELECT_CELL,
ID_SIZE_ROW,
ID_SIZE_COL,
ID_SIZE_ROW_LABEL,
ID_SIZE_COL_LABEL,
ID_SIZE_LABELS_COL,
ID_SIZE_LABELS_ROW,
ID_SIZE_GRID,
ID_FREEZE_OR_THAW,
ID_SET_HIGHLIGHT_WIDTH,
ID_SET_RO_HIGHLIGHT_WIDTH,
ID_TESTFUNC,
ID_RENDER_ROW_LABEL,
ID_RENDER_COL_LABEL,
ID_RENDER_GRID_LINES,
ID_RENDER_GRID_BORDER,
ID_RENDER_SELECT_HLIGHT,
ID_RENDER_LOMETRIC,
ID_RENDER_COORDS,
ID_RENDER_ZOOM,
ID_RENDER_MARGIN,
ID_RENDER_DEFAULT_SIZE,
};
#if wxUSE_LOG
wxLog *m_logOld;
#endif // wxUSE_LOG
// add the cells to selection when using commands from select menu?
bool m_addToSel;
wxBitmap m_gridBitmap;
wxDECLARE_EVENT_TABLE();
};
class MyGridCellRenderer : public wxGridCellStringRenderer
{
public:
virtual void Draw(wxGrid& grid,
wxGridCellAttr& attr,
wxDC& dc,
const wxRect& rect,
int row, int col,
bool isSelected) wxOVERRIDE;
};
// ----------------------------------------------------------------------------
// demonstration of virtual table which doesn't store all of its data in
// memory
// ----------------------------------------------------------------------------
class BigGridTable : public wxGridTableBase
{
public:
BigGridTable(long sizeGrid) { m_sizeGrid = sizeGrid; }
int GetNumberRows() wxOVERRIDE { return m_sizeGrid; }
int GetNumberCols() wxOVERRIDE { return m_sizeGrid; }
wxString GetValue( int row, int col ) wxOVERRIDE
{
return wxString::Format("(%d, %d)", row, col);
}
void SetValue( int , int , const wxString& ) wxOVERRIDE { /* ignore */ }
bool IsEmptyCell( int , int ) wxOVERRIDE { return false; }
private:
long m_sizeGrid;
};
class BigGridFrame : public wxFrame
{
public:
BigGridFrame(long sizeGrid);
private:
wxGrid* m_grid;
BigGridTable* m_table;
};
// ----------------------------------------------------------------------------
// an example of custom attr provider: this one makes all odd rows appear grey
// ----------------------------------------------------------------------------
class MyGridCellAttrProvider : public wxGridCellAttrProvider
{
public:
MyGridCellAttrProvider();
virtual ~MyGridCellAttrProvider();
virtual wxGridCellAttr *GetAttr(int row, int col,
wxGridCellAttr::wxAttrKind kind) const wxOVERRIDE;
private:
wxGridCellAttr *m_attrForOddRows;
};
// ----------------------------------------------------------------------------
// another, more realistic, grid example: shows typed columns and more
// ----------------------------------------------------------------------------
class BugsGridTable : public wxGridTableBase
{
public:
BugsGridTable() { }
virtual int GetNumberRows() wxOVERRIDE;
virtual int GetNumberCols() wxOVERRIDE;
virtual bool IsEmptyCell( int row, int col ) wxOVERRIDE;
virtual wxString GetValue( int row, int col ) wxOVERRIDE;
virtual void SetValue( int row, int col, const wxString& value ) wxOVERRIDE;
virtual wxString GetColLabelValue( int col ) wxOVERRIDE;
virtual wxString GetTypeName( int row, int col ) wxOVERRIDE;
virtual bool CanGetValueAs( int row, int col, const wxString& typeName ) wxOVERRIDE;
virtual bool CanSetValueAs( int row, int col, const wxString& typeName ) wxOVERRIDE;
virtual long GetValueAsLong( int row, int col ) wxOVERRIDE;
virtual bool GetValueAsBool( int row, int col ) wxOVERRIDE;
virtual void SetValueAsLong( int row, int col, long value ) wxOVERRIDE;
virtual void SetValueAsBool( int row, int col, bool value ) wxOVERRIDE;
};
class BugsGridFrame : public wxFrame
{
public:
BugsGridFrame();
};
#endif // griddemo_h