7 * Copyright: (c) 1995, AIAI, University of Edinburgh
10 static const char sccsid
[] = "%W% %G%";
13 #pragma implementation
17 // For compilers that support precompilation, includes "wx/wx.h".
18 #include "wx/wxprec.h"
29 #include "wx/colordlg.h"
31 // Define a new application type
32 class MyApp
: public wxApp
38 // Define a new frame type
39 class MyFrame
: public wxFrame
42 MyFrame(wxFrame
*frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
);
44 void ToggleEditable(wxCommandEvent
& event
);
45 void ToggleEditInPlace(wxCommandEvent
& event
);
46 void ToggleRowLabel(wxCommandEvent
& event
);
47 void ToggleColLabel(wxCommandEvent
& event
);
48 void ToggleDividers(wxCommandEvent
& event
);
49 void LeftCell(wxCommandEvent
& event
);
50 void CentreCell(wxCommandEvent
& event
);
51 void RightCell(wxCommandEvent
& event
);
52 void ColourLabelBackground(wxCommandEvent
& event
);
53 void ColourLabelText(wxCommandEvent
& event
);
54 void NormalLabelColouring(wxCommandEvent
& event
);
55 void ColourCellBackground(wxCommandEvent
& event
);
56 void ColourCellText(wxCommandEvent
& event
);
57 void NormalCellColouring(wxCommandEvent
& event
);
58 void Quit(wxCommandEvent
& event
);
60 void OnActivate(wxActivateEvent
& event
);
65 wxBitmap
*cellBitmap1
= (wxBitmap
*) NULL
;
66 wxBitmap
*cellBitmap2
= (wxBitmap
*) NULL
;
68 // ID for the menu quit command
70 #define GRID_TOGGLE_EDITABLE 2
71 #define GRID_TOGGLE_EDITINPLACE 22
72 #define GRID_LEFT_CELL 3
73 #define GRID_CENTRE_CELL 4
74 #define GRID_RIGHT_CELL 5
75 #define GRID_TOGGLE_ROW_LABEL 6
76 #define GRID_TOGGLE_COL_LABEL 7
77 #define GRID_COLOUR_LABEL_BACKGROUND 8
78 #define GRID_COLOUR_LABEL_TEXT 9
79 #define GRID_NORMAL_LABEL_COLOURING 10
80 #define GRID_COLOUR_CELL_BACKGROUND 11
81 #define GRID_COLOUR_CELL_TEXT 12
82 #define GRID_NORMAL_CELL_COLOURING 13
83 #define GRID_TOGGLE_DIVIDERS 14
89 // `Main program' equivalent, creating windows and returning main app frame
90 bool MyApp::OnInit(void)
93 cellBitmap1
= new wxBitmap("bitmap1");
94 cellBitmap2
= new wxBitmap("bitmap2");
97 // Create the main frame window
98 MyFrame
*frame
= new MyFrame((wxFrame
*) NULL
, (char *) "wxGrid Sample", wxPoint(50, 50), wxSize(450, 300));
102 frame
->SetIcon(wxIcon("mondrian"));
106 wxMenu
*file_menu
= new wxMenu
;
107 file_menu
->Append(GRID_QUIT
, "E&xit");
109 wxMenu
*settings_menu
= new wxMenu
;
110 settings_menu
->Append(GRID_TOGGLE_EDITABLE
, "&Toggle editable");
111 settings_menu
->Append(GRID_TOGGLE_EDITINPLACE
, "&Toggle edit in place");
112 settings_menu
->Append(GRID_TOGGLE_ROW_LABEL
, "Toggle ro&w label");
113 settings_menu
->Append(GRID_TOGGLE_COL_LABEL
, "Toggle co&l label");
114 settings_menu
->Append(GRID_TOGGLE_DIVIDERS
, "Toggle ÷rs");
115 settings_menu
->AppendSeparator();
116 settings_menu
->Append(GRID_LEFT_CELL
, "&Left cell alignment ");
117 settings_menu
->Append(GRID_CENTRE_CELL
, "&Centre cell alignment ");
118 settings_menu
->Append(GRID_RIGHT_CELL
, "&Right cell alignment ");
119 settings_menu
->AppendSeparator();
120 settings_menu
->Append(GRID_COLOUR_LABEL_BACKGROUND
, "Choose a label &background colour");
121 settings_menu
->Append(GRID_COLOUR_LABEL_TEXT
, "Choose a label fore&ground colour");
122 settings_menu
->Append(GRID_NORMAL_LABEL_COLOURING
, "&Normal label colouring");
123 settings_menu
->AppendSeparator();
124 settings_menu
->Append(GRID_COLOUR_CELL_BACKGROUND
, "Choo&se a cell &background colour");
125 settings_menu
->Append(GRID_COLOUR_CELL_TEXT
, "Choose &a cell foreground colour");
126 settings_menu
->Append(GRID_NORMAL_CELL_COLOURING
, "N&ormal cell colouring");
128 wxMenuBar
*menu_bar
= new wxMenuBar
;
129 menu_bar
->Append(file_menu
, "&File");
130 menu_bar
->Append(settings_menu
, "&Settings");
131 frame
->SetMenuBar(menu_bar
);
134 frame
->grid
= new wxGrid(frame
, 0, 0, 400, 400);
136 frame
->grid
->CreateGrid(10, 8);
137 frame
->grid
->SetColumnWidth(3, 200);
138 frame
->grid
->SetRowHeight(4, 45);
139 frame
->grid
->SetCellValue("First cell", 0, 0);
140 frame
->grid
->SetCellValue("Another cell", 1, 1);
141 frame
->grid
->SetCellValue("Yet another cell", 2, 2);
142 frame
->grid
->SetCellTextFont(* wxTheFontList
->FindOrCreateFont(10, wxROMAN
, wxITALIC
, wxNORMAL
), 0, 0);
143 frame
->grid
->SetCellTextColour(*wxRED
, 1, 1);
144 frame
->grid
->SetCellBackgroundColour(*wxCYAN
, 2, 2);
145 if (cellBitmap1
&& cellBitmap2
)
147 frame
->grid
->SetCellAlignment(wxCENTRE
, 5, 0);
148 frame
->grid
->SetCellAlignment(wxCENTRE
, 6, 0);
149 frame
->grid
->SetCellBitmap(cellBitmap1
, 5, 0);
150 frame
->grid
->SetCellBitmap(cellBitmap2
, 6, 0);
153 frame
->grid
->UpdateDimensions();
162 // My frame constructor
163 MyFrame::MyFrame(wxFrame
*frame
, const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
):
164 wxFrame(frame
, -1, title
, pos
, size
)
166 grid
= (wxGenericGrid
*) NULL
;
169 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
170 EVT_MENU(GRID_TOGGLE_EDITABLE
, MyFrame::ToggleEditable
)
171 EVT_MENU(GRID_TOGGLE_EDITINPLACE
, MyFrame::ToggleEditInPlace
)
172 EVT_MENU(GRID_TOGGLE_ROW_LABEL
, MyFrame::ToggleRowLabel
)
173 EVT_MENU(GRID_TOGGLE_COL_LABEL
, MyFrame::ToggleColLabel
)
174 EVT_MENU(GRID_TOGGLE_DIVIDERS
, MyFrame::ToggleDividers
)
175 EVT_MENU(GRID_LEFT_CELL
, MyFrame::LeftCell
)
176 EVT_MENU(GRID_CENTRE_CELL
, MyFrame::CentreCell
)
177 EVT_MENU(GRID_RIGHT_CELL
, MyFrame::RightCell
)
178 EVT_MENU(GRID_COLOUR_LABEL_BACKGROUND
, MyFrame::ColourLabelBackground
)
179 EVT_MENU(GRID_COLOUR_LABEL_TEXT
, MyFrame::ColourLabelText
)
180 EVT_MENU(GRID_NORMAL_LABEL_COLOURING
, MyFrame::NormalLabelColouring
)
181 EVT_MENU(GRID_COLOUR_CELL_BACKGROUND
, MyFrame::ColourCellBackground
)
182 EVT_MENU(GRID_COLOUR_CELL_TEXT
, MyFrame::ColourCellText
)
183 EVT_MENU(GRID_NORMAL_CELL_COLOURING
, MyFrame::NormalCellColouring
)
184 EVT_MENU(GRID_QUIT
, MyFrame::Quit
)
187 void MyFrame::ToggleEditable(wxCommandEvent
& WXUNUSED(event
))
189 grid
->SetEditable(!grid
->GetEditable());
193 void MyFrame::ToggleEditInPlace(wxCommandEvent
& WXUNUSED(event
))
195 grid
->SetEditInPlace(!grid
->GetEditInPlace());
199 void MyFrame::ToggleRowLabel(wxCommandEvent
& WXUNUSED(event
))
201 if (grid
->GetLabelSize(wxVERTICAL
) > 0)
202 grid
->SetLabelSize(wxVERTICAL
, 0);
204 grid
->SetLabelSize(wxVERTICAL
, 40);
208 void MyFrame::ToggleColLabel(wxCommandEvent
& WXUNUSED(event
))
210 if (grid
->GetLabelSize(wxHORIZONTAL
) > 0)
211 grid
->SetLabelSize(wxHORIZONTAL
, 0);
213 grid
->SetLabelSize(wxHORIZONTAL
, 20);
217 void MyFrame::ToggleDividers(wxCommandEvent
& WXUNUSED(event
))
219 if (!grid
->GetDividerPen().Ok())
220 grid
->SetDividerPen(* wxThePenList
->FindOrCreatePen("LIGHT GREY", 1, wxSOLID
));
222 grid
->SetDividerPen(wxNullPen
);
226 void MyFrame::LeftCell(wxCommandEvent
& WXUNUSED(event
))
228 grid
->SetCellAlignment(wxLEFT
);
232 void MyFrame::CentreCell(wxCommandEvent
& WXUNUSED(event
))
234 grid
->SetCellAlignment(wxCENTRE
);
238 void MyFrame::RightCell(wxCommandEvent
& WXUNUSED(event
))
240 grid
->SetCellAlignment(wxRIGHT
);
244 void MyFrame::ColourLabelBackground(wxCommandEvent
& WXUNUSED(event
))
247 data
.SetChooseFull(TRUE
);
248 wxColourDialog
dialog(this, &data
);
249 if (dialog
.ShowModal() != wxID_CANCEL
)
251 wxColourData retData
= dialog
.GetColourData();
252 wxColour col
= retData
.GetColour();
253 grid
->SetLabelBackgroundColour(col
);
258 void MyFrame::ColourLabelText(wxCommandEvent
& WXUNUSED(event
))
261 data
.SetChooseFull(TRUE
);
262 wxColourDialog
dialog(this, &data
);
263 if (dialog
.ShowModal() != wxID_CANCEL
)
265 wxColourData retData
= dialog
.GetColourData();
266 wxColour col
= retData
.GetColour();
267 grid
->SetLabelTextColour(col
);
272 void MyFrame::NormalLabelColouring(wxCommandEvent
& WXUNUSED(event
))
274 grid
->SetLabelBackgroundColour(*wxLIGHT_GREY
);
275 grid
->SetLabelTextColour(*wxBLACK
);
279 void MyFrame::ColourCellBackground(wxCommandEvent
& WXUNUSED(event
))
282 data
.SetChooseFull(TRUE
);
283 wxColourDialog
dialog(this, &data
);
284 if (dialog
.ShowModal() != wxID_CANCEL
)
286 wxColourData retData
= dialog
.GetColourData();
287 wxColour col
= retData
.GetColour();
288 grid
->SetCellBackgroundColour(col
);
293 void MyFrame::ColourCellText(wxCommandEvent
& WXUNUSED(event
))
296 data
.SetChooseFull(TRUE
);
297 wxColourDialog
dialog(this, &data
);
298 if (dialog
.ShowModal() != wxID_CANCEL
)
300 wxColourData retData
= dialog
.GetColourData();
301 wxColour col
= retData
.GetColour();
302 grid
->SetCellTextColour(col
);
307 void MyFrame::NormalCellColouring(wxCommandEvent
& WXUNUSED(event
))
309 grid
->SetCellBackgroundColour(*wxWHITE
);
310 grid
->SetCellTextColour(*wxBLACK
);
314 void MyFrame::Quit(wxCommandEvent
& WXUNUSED(event
))
319 // Ensure that the grid's edit control always has the focus.
320 void MyFrame::OnActivate(wxActivateEvent
& event
)
322 if (grid
) grid
->OnActivate(event
.GetActive());