patch from Dimitri fixing a few memory leaks and unTABbing the sources
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14660 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
/*
|
||||
* File: grid.cpp
|
||||
* Purpose: wxGrid test
|
||||
* Author: Julian Smart
|
||||
* Created: 1995
|
||||
* Updated:
|
||||
* File: grid.cpp
|
||||
* Purpose: wxGrid test
|
||||
* Author: Julian Smart
|
||||
* Created: 1995
|
||||
* Updated:
|
||||
* Copyright: (c) 1995, AIAI, University of Edinburgh
|
||||
*/
|
||||
|
||||
@@ -25,8 +25,10 @@ static const char sccsid[] = "%W% %G%";
|
||||
|
||||
// Define a new application type
|
||||
class MyApp: public wxApp
|
||||
{ public:
|
||||
bool OnInit(void);
|
||||
{
|
||||
public:
|
||||
virtual bool OnInit(void);
|
||||
virtual int OnExit();
|
||||
};
|
||||
|
||||
|
||||
@@ -85,235 +87,258 @@ IMPLEMENT_APP(MyApp)
|
||||
bool MyApp::OnInit(void)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
cellBitmap1 = new wxBitmap("bitmap1");
|
||||
cellBitmap2 = new wxBitmap("bitmap2");
|
||||
cellBitmap1 = new wxBitmap("bitmap1");
|
||||
cellBitmap2 = new wxBitmap("bitmap2");
|
||||
#endif
|
||||
|
||||
// Create the main frame window
|
||||
MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "wxGrid Sample", wxPoint(50, 50), wxSize(450, 300));
|
||||
|
||||
// Give it an icon
|
||||
// Create the main frame window
|
||||
MyFrame *frame = new MyFrame((wxFrame *) NULL, (char *) "wxGrid Sample", wxPoint(50, 50), wxSize(450, 300));
|
||||
|
||||
// Give it an icon
|
||||
#ifdef __WXMSW__
|
||||
frame->SetIcon(wxIcon("mondrian"));
|
||||
frame->SetIcon(wxIcon("mondrian"));
|
||||
#endif
|
||||
|
||||
// Make a menubar
|
||||
wxMenu *file_menu = new wxMenu;
|
||||
file_menu->Append(GRID_QUIT, "E&xit");
|
||||
// Make a menubar
|
||||
wxMenu *file_menu = new wxMenu;
|
||||
file_menu->Append(GRID_QUIT, "E&xit");
|
||||
|
||||
wxMenu *settings_menu = new wxMenu;
|
||||
settings_menu->Append(GRID_TOGGLE_EDITABLE, "&Toggle editable");
|
||||
settings_menu->Append(GRID_TOGGLE_EDITINPLACE, "&Toggle edit in place");
|
||||
settings_menu->Append(GRID_TOGGLE_ROW_LABEL, "Toggle ro&w label");
|
||||
settings_menu->Append(GRID_TOGGLE_COL_LABEL, "Toggle co&l label");
|
||||
settings_menu->Append(GRID_TOGGLE_DIVIDERS, "Toggle ÷rs");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_LEFT_CELL, "&Left cell alignment ");
|
||||
settings_menu->Append(GRID_CENTRE_CELL, "&Centre cell alignment ");
|
||||
settings_menu->Append(GRID_RIGHT_CELL, "&Right cell alignment ");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_COLOUR_LABEL_BACKGROUND, "Choose a label &background colour");
|
||||
settings_menu->Append(GRID_COLOUR_LABEL_TEXT, "Choose a label fore&ground colour");
|
||||
settings_menu->Append(GRID_NORMAL_LABEL_COLOURING, "&Normal label colouring");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_COLOUR_CELL_BACKGROUND, "Choo&se a cell &background colour");
|
||||
settings_menu->Append(GRID_COLOUR_CELL_TEXT, "Choose &a cell foreground colour");
|
||||
settings_menu->Append(GRID_NORMAL_CELL_COLOURING, "N&ormal cell colouring");
|
||||
wxMenu *settings_menu = new wxMenu;
|
||||
settings_menu->Append(GRID_TOGGLE_EDITABLE, "&Toggle editable");
|
||||
settings_menu->Append(GRID_TOGGLE_EDITINPLACE, "&Toggle edit in place");
|
||||
settings_menu->Append(GRID_TOGGLE_ROW_LABEL, "Toggle ro&w label");
|
||||
settings_menu->Append(GRID_TOGGLE_COL_LABEL, "Toggle co&l label");
|
||||
settings_menu->Append(GRID_TOGGLE_DIVIDERS, "Toggle ÷rs");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_LEFT_CELL, "&Left cell alignment ");
|
||||
settings_menu->Append(GRID_CENTRE_CELL, "&Centre cell alignment ");
|
||||
settings_menu->Append(GRID_RIGHT_CELL, "&Right cell alignment ");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_COLOUR_LABEL_BACKGROUND, "Choose a label &background colour");
|
||||
settings_menu->Append(GRID_COLOUR_LABEL_TEXT, "Choose a label fore&ground colour");
|
||||
settings_menu->Append(GRID_NORMAL_LABEL_COLOURING, "&Normal label colouring");
|
||||
settings_menu->AppendSeparator();
|
||||
settings_menu->Append(GRID_COLOUR_CELL_BACKGROUND, "Choo&se a cell &background colour");
|
||||
settings_menu->Append(GRID_COLOUR_CELL_TEXT, "Choose &a cell foreground colour");
|
||||
settings_menu->Append(GRID_NORMAL_CELL_COLOURING, "N&ormal cell colouring");
|
||||
|
||||
wxMenuBar *menu_bar = new wxMenuBar;
|
||||
menu_bar->Append(file_menu, "&File");
|
||||
menu_bar->Append(settings_menu, "&Settings");
|
||||
frame->SetMenuBar(menu_bar);
|
||||
wxMenuBar *menu_bar = new wxMenuBar;
|
||||
menu_bar->Append(file_menu, "&File");
|
||||
menu_bar->Append(settings_menu, "&Settings");
|
||||
frame->SetMenuBar(menu_bar);
|
||||
|
||||
// Make a grid
|
||||
frame->grid = new wxGrid(frame, 0, 0, 400, 400);
|
||||
// Make a grid
|
||||
frame->grid = new wxGrid(frame, 0, 0, 400, 400);
|
||||
|
||||
frame->grid->CreateGrid(10, 8);
|
||||
frame->grid->SetColumnWidth(3, 200);
|
||||
frame->grid->SetRowHeight(4, 45);
|
||||
frame->grid->SetCellValue("First cell", 0, 0);
|
||||
frame->grid->SetCellValue("Another cell", 1, 1);
|
||||
frame->grid->SetCellValue("Yet another cell", 2, 2);
|
||||
frame->grid->SetCellTextFont(wxFont(10, wxROMAN, wxITALIC, wxNORMAL), 0, 0);
|
||||
frame->grid->SetCellTextColour(*wxRED, 1, 1);
|
||||
frame->grid->SetCellBackgroundColour(*wxCYAN, 2, 2);
|
||||
if (cellBitmap1 && cellBitmap2)
|
||||
{
|
||||
frame->grid->SetCellAlignment(wxCENTRE, 5, 0);
|
||||
frame->grid->SetCellAlignment(wxCENTRE, 6, 0);
|
||||
frame->grid->SetCellBitmap(cellBitmap1, 5, 0);
|
||||
frame->grid->SetCellBitmap(cellBitmap2, 6, 0);
|
||||
}
|
||||
|
||||
frame->grid->UpdateDimensions();
|
||||
|
||||
// Show the frame
|
||||
frame->Show(TRUE);
|
||||
frame->grid->CreateGrid(10, 8);
|
||||
frame->grid->SetColumnWidth(3, 200);
|
||||
frame->grid->SetRowHeight(4, 45);
|
||||
frame->grid->SetCellValue("First cell", 0, 0);
|
||||
frame->grid->SetCellValue("Another cell", 1, 1);
|
||||
frame->grid->SetCellValue("Yet another cell", 2, 2);
|
||||
frame->grid->SetCellTextFont(wxFont(10, wxROMAN, wxITALIC, wxNORMAL), 0, 0);
|
||||
frame->grid->SetCellTextColour(*wxRED, 1, 1);
|
||||
frame->grid->SetCellBackgroundColour(*wxCYAN, 2, 2);
|
||||
if (cellBitmap1 && cellBitmap2)
|
||||
{
|
||||
frame->grid->SetCellAlignment(wxCENTRE, 5, 0);
|
||||
frame->grid->SetCellAlignment(wxCENTRE, 6, 0);
|
||||
frame->grid->SetCellBitmap(cellBitmap1, 5, 0);
|
||||
frame->grid->SetCellBitmap(cellBitmap2, 6, 0);
|
||||
}
|
||||
|
||||
SetTopWindow(frame);
|
||||
return TRUE;
|
||||
frame->grid->UpdateDimensions();
|
||||
|
||||
// Show the frame
|
||||
frame->Show(TRUE);
|
||||
|
||||
SetTopWindow(frame);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// My frame constructor
|
||||
MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos, const wxSize& size):
|
||||
wxFrame(frame, -1, title, pos, size)
|
||||
int MyApp::OnExit()
|
||||
{
|
||||
grid = (wxGrid*) NULL;
|
||||
if (cellBitmap1)
|
||||
{
|
||||
delete cellBitmap1;
|
||||
cellBitmap1 = (wxBitmap *) NULL;
|
||||
}
|
||||
|
||||
if (cellBitmap2)
|
||||
{
|
||||
delete cellBitmap2;
|
||||
cellBitmap1 = (wxBitmap *) NULL;
|
||||
}
|
||||
|
||||
// exit code is 0, everything is ok
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// My frame constructor
|
||||
MyFrame::MyFrame(wxFrame *frame, const wxString& title,
|
||||
const wxPoint& pos, const wxSize& size):
|
||||
wxFrame(frame, -1, title, pos, size)
|
||||
{
|
||||
grid = (wxGrid*) NULL;
|
||||
}
|
||||
|
||||
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
EVT_MENU(GRID_TOGGLE_EDITABLE, MyFrame::ToggleEditable)
|
||||
EVT_MENU(GRID_TOGGLE_EDITINPLACE, MyFrame::ToggleEditInPlace)
|
||||
EVT_MENU(GRID_TOGGLE_ROW_LABEL, MyFrame::ToggleRowLabel)
|
||||
EVT_MENU(GRID_TOGGLE_COL_LABEL, MyFrame::ToggleColLabel)
|
||||
EVT_MENU(GRID_TOGGLE_DIVIDERS, MyFrame::ToggleDividers)
|
||||
EVT_MENU(GRID_LEFT_CELL, MyFrame::LeftCell)
|
||||
EVT_MENU(GRID_CENTRE_CELL, MyFrame::CentreCell)
|
||||
EVT_MENU(GRID_RIGHT_CELL, MyFrame::RightCell)
|
||||
EVT_MENU(GRID_COLOUR_LABEL_BACKGROUND, MyFrame::ColourLabelBackground)
|
||||
EVT_MENU(GRID_COLOUR_LABEL_TEXT, MyFrame::ColourLabelText)
|
||||
EVT_MENU(GRID_NORMAL_LABEL_COLOURING, MyFrame::NormalLabelColouring)
|
||||
EVT_MENU(GRID_COLOUR_CELL_BACKGROUND, MyFrame::ColourCellBackground)
|
||||
EVT_MENU(GRID_COLOUR_CELL_TEXT, MyFrame::ColourCellText)
|
||||
EVT_MENU(GRID_NORMAL_CELL_COLOURING, MyFrame::NormalCellColouring)
|
||||
EVT_MENU(GRID_QUIT, MyFrame::Quit)
|
||||
EVT_MENU(GRID_TOGGLE_EDITABLE, MyFrame::ToggleEditable)
|
||||
EVT_MENU(GRID_TOGGLE_EDITINPLACE, MyFrame::ToggleEditInPlace)
|
||||
EVT_MENU(GRID_TOGGLE_ROW_LABEL, MyFrame::ToggleRowLabel)
|
||||
EVT_MENU(GRID_TOGGLE_COL_LABEL, MyFrame::ToggleColLabel)
|
||||
EVT_MENU(GRID_TOGGLE_DIVIDERS, MyFrame::ToggleDividers)
|
||||
EVT_MENU(GRID_LEFT_CELL, MyFrame::LeftCell)
|
||||
EVT_MENU(GRID_CENTRE_CELL, MyFrame::CentreCell)
|
||||
EVT_MENU(GRID_RIGHT_CELL, MyFrame::RightCell)
|
||||
EVT_MENU(GRID_COLOUR_LABEL_BACKGROUND, MyFrame::ColourLabelBackground)
|
||||
EVT_MENU(GRID_COLOUR_LABEL_TEXT, MyFrame::ColourLabelText)
|
||||
EVT_MENU(GRID_NORMAL_LABEL_COLOURING, MyFrame::NormalLabelColouring)
|
||||
EVT_MENU(GRID_COLOUR_CELL_BACKGROUND, MyFrame::ColourCellBackground)
|
||||
EVT_MENU(GRID_COLOUR_CELL_TEXT, MyFrame::ColourCellText)
|
||||
EVT_MENU(GRID_NORMAL_CELL_COLOURING, MyFrame::NormalCellColouring)
|
||||
EVT_MENU(GRID_QUIT, MyFrame::Quit)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
void MyFrame::ToggleEditable(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetEditable(!grid->GetEditable());
|
||||
grid->Refresh();
|
||||
grid->SetEditable(!grid->GetEditable());
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ToggleEditInPlace(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetEditInPlace(!grid->GetEditInPlace());
|
||||
grid->Refresh();
|
||||
grid->SetEditInPlace(!grid->GetEditInPlace());
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ToggleRowLabel(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if (grid->GetLabelSize(wxVERTICAL) > 0)
|
||||
if (grid->GetLabelSize(wxVERTICAL) > 0)
|
||||
grid->SetLabelSize(wxVERTICAL, 0);
|
||||
else
|
||||
else
|
||||
grid->SetLabelSize(wxVERTICAL, 40);
|
||||
grid->Refresh();
|
||||
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ToggleColLabel(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if (grid->GetLabelSize(wxHORIZONTAL) > 0)
|
||||
if (grid->GetLabelSize(wxHORIZONTAL) > 0)
|
||||
grid->SetLabelSize(wxHORIZONTAL, 0);
|
||||
else
|
||||
else
|
||||
grid->SetLabelSize(wxHORIZONTAL, 20);
|
||||
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ToggleDividers(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if (!grid->GetDividerPen().Ok())
|
||||
if (!grid->GetDividerPen().Ok())
|
||||
grid->SetDividerPen(wxPen(wxT("LIGHT GREY"), 1, wxSOLID));
|
||||
else
|
||||
else
|
||||
grid->SetDividerPen(wxNullPen);
|
||||
grid->Refresh();
|
||||
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::LeftCell(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetCellAlignment(wxLEFT);
|
||||
grid->Refresh();
|
||||
grid->SetCellAlignment(wxLEFT);
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::CentreCell(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetCellAlignment(wxCENTRE);
|
||||
grid->Refresh();
|
||||
grid->SetCellAlignment(wxCENTRE);
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::RightCell(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetCellAlignment(wxRIGHT);
|
||||
grid->Refresh();
|
||||
grid->SetCellAlignment(wxRIGHT);
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ColourLabelBackground(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData retData = dialog.GetColourData();
|
||||
wxColour col = retData.GetColour();
|
||||
grid->SetLabelBackgroundColour(col);
|
||||
grid->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MyFrame::ColourLabelText(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData retData = dialog.GetColourData();
|
||||
wxColour col = retData.GetColour();
|
||||
grid->SetLabelTextColour(col);
|
||||
grid->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MyFrame::NormalLabelColouring(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetLabelBackgroundColour(*wxLIGHT_GREY);
|
||||
grid->SetLabelTextColour(*wxBLACK);
|
||||
grid->Refresh();
|
||||
grid->SetLabelBackgroundColour(*wxLIGHT_GREY);
|
||||
grid->SetLabelTextColour(*wxBLACK);
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::ColourCellBackground(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData retData = dialog.GetColourData();
|
||||
wxColour col = retData.GetColour();
|
||||
grid->SetCellBackgroundColour(col);
|
||||
grid->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MyFrame::ColourCellText(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData data;
|
||||
data.SetChooseFull(TRUE);
|
||||
wxColourDialog dialog(this, &data);
|
||||
if (dialog.ShowModal() != wxID_CANCEL)
|
||||
{
|
||||
wxColourData retData = dialog.GetColourData();
|
||||
wxColour col = retData.GetColour();
|
||||
grid->SetCellTextColour(col);
|
||||
grid->Refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MyFrame::NormalCellColouring(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
grid->SetCellBackgroundColour(*wxWHITE);
|
||||
grid->SetCellTextColour(*wxBLACK);
|
||||
grid->Refresh();
|
||||
grid->SetCellBackgroundColour(*wxWHITE);
|
||||
grid->SetCellTextColour(*wxBLACK);
|
||||
grid->Refresh();
|
||||
}
|
||||
|
||||
void MyFrame::Quit(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
this->Close(TRUE);
|
||||
this->Close(TRUE);
|
||||
}
|
||||
|
||||
// Ensure that the grid's edit control always has the focus.
|
||||
void MyFrame::OnActivate(wxActivateEvent& event)
|
||||
{
|
||||
if (grid) grid->OnActivate(event.GetActive());
|
||||
if (grid) grid->OnActivate(event.GetActive());
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user