X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a99c96b0ffb9d689a249ac2eb968c8c0b8c16dea..05d89f2c0b85eb33c4818430e6cbf5355b6ac50f:/demos/life/life.cpp diff --git a/demos/life/life.cpp b/demos/life/life.cpp index b7df5569d7..cd6c32d693 100644 --- a/demos/life/life.cpp +++ b/demos/life/life.cpp @@ -41,7 +41,7 @@ // resources // -------------------------------------------------------------------------- -#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) +#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__) // application icon #include "mondrian.xpm" @@ -66,18 +66,15 @@ // constants // -------------------------------------------------------------------------- -// IDs for the controls and the menu commands +// IDs for the controls and the menu commands. Exluding those already defined +// by wxWindows, such as wxID_NEW. enum { // timer - ID_TIMER = 1001, + ID_TIMER = wxID_HIGHEST, // file menu - ID_NEW, - ID_OPEN, ID_SAMPLES, - ID_ABOUT, - ID_EXIT, // view menu ID_SHOWNAV, @@ -98,7 +95,7 @@ enum ID_TOPSPEED, // speed selection slider - ID_SLIDER, + ID_SLIDER }; // -------------------------------------------------------------------------- @@ -107,11 +104,11 @@ enum // Event tables BEGIN_EVENT_TABLE(LifeFrame, wxFrame) - EVT_MENU (ID_NEW, LifeFrame::OnMenu) - EVT_MENU (ID_OPEN, LifeFrame::OnOpen) + EVT_MENU (wxID_NEW, LifeFrame::OnMenu) + EVT_MENU (wxID_OPEN, LifeFrame::OnOpen) EVT_MENU (ID_SAMPLES, LifeFrame::OnSamples) - EVT_MENU (ID_ABOUT, LifeFrame::OnMenu) - EVT_MENU (ID_EXIT, LifeFrame::OnMenu) + EVT_MENU (wxID_ABOUT, LifeFrame::OnMenu) + EVT_MENU (wxID_EXIT, LifeFrame::OnMenu) EVT_MENU (ID_SHOWNAV, LifeFrame::OnMenu) EVT_MENU (ID_ORIGIN, LifeFrame::OnNavigate) EVT_BUTTON (ID_CENTER, LifeFrame::OnNavigate) @@ -157,7 +154,7 @@ IMPLEMENT_APP(LifeApp) // some shortcuts #define ADD_TOOL(id, bmp, tooltip, help) \ - toolBar->AddTool(id, bmp, wxNullBitmap, FALSE, -1, -1, (wxObject *)0, tooltip, help) + toolBar->AddTool(id, bmp, wxNullBitmap, false, -1, -1, (wxObject *)0, tooltip, help) // -------------------------------------------------------------------------- @@ -171,7 +168,7 @@ bool LifeApp::OnInit() LifeFrame *frame = new LifeFrame(); // show it and tell the application that it's our main window - frame->Show(TRUE); + frame->Show(true); SetTopWindow(frame); // just for Motif @@ -180,7 +177,7 @@ bool LifeApp::OnInit() #endif // enter the main message loop and run the app - return TRUE; + return true; } // -------------------------------------------------------------------------- @@ -188,26 +185,26 @@ bool LifeApp::OnInit() // -------------------------------------------------------------------------- // frame constructor -LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200)) +LifeFrame::LifeFrame() : wxFrame( (wxFrame *) NULL, wxID_ANY, + _("Life!"), wxPoint(200, 200) ) { // frame icon SetIcon(wxICON(mondrian)); // menu bar - wxMenu *menuFile = new wxMenu("", wxMENU_TEAROFF); - wxMenu *menuView = new wxMenu("", wxMENU_TEAROFF); - wxMenu *menuGame = new wxMenu("", wxMENU_TEAROFF); + wxMenu *menuFile = new wxMenu(wxMENU_TEAROFF); + wxMenu *menuView = new wxMenu(wxMENU_TEAROFF); + wxMenu *menuGame = new wxMenu(wxMENU_TEAROFF); + wxMenu *menuHelp = new wxMenu(wxMENU_TEAROFF); - menuFile->Append(ID_NEW, _("&New"), _("Start a new game")); - menuFile->Append(ID_OPEN, _("&Open..."), _("Open an existing Life pattern")); + menuFile->Append(wxID_NEW, _("&New"), _("Start a new game")); + menuFile->Append(wxID_OPEN, _("&Open..."), _("Open an existing Life pattern")); menuFile->Append(ID_SAMPLES, _("&Sample game..."), _("Select a sample configuration")); menuFile->AppendSeparator(); - menuFile->Append(ID_ABOUT, _("&About...\tCtrl-A"), _("Show about dialog")); - menuFile->AppendSeparator(); - menuFile->Append(ID_EXIT, _("E&xit\tAlt-X"), _("Quit this program")); + menuFile->Append(wxID_EXIT, _("E&xit\tAlt-X"), _("Quit this program")); - menuView->Append(ID_SHOWNAV, _("Navigation &toolbox"), _("Show or hide toolbox"), TRUE); - menuView->Check (ID_SHOWNAV, TRUE); + menuView->Append(ID_SHOWNAV, _("Navigation &toolbox"), _("Show or hide toolbox"), wxITEM_CHECK); + menuView->Check(ID_SHOWNAV, true); menuView->AppendSeparator(); menuView->Append(ID_ORIGIN, _("&Absolute origin"), _("Go to (0, 0)")); menuView->Append(ID_CENTER, _("&Center of mass"), _("Find center of mass")); @@ -218,19 +215,22 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) menuView->AppendSeparator(); menuView->Append(ID_ZOOMIN, _("Zoom &in\tCtrl-I"), _("Zoom in")); menuView->Append(ID_ZOOMOUT, _("Zoom &out\tCtrl-O"), _("Zoom out")); - menuView->Append(ID_INFO, _("&Description...\tCtrl-D"), _("View pattern description")); + menuView->Append(ID_INFO, _("&Description\tCtrl-D"), _("View pattern description")); menuGame->Append(ID_START, _("&Start\tCtrl-S"), _("Start")); menuGame->Append(ID_STEP, _("&Next\tCtrl-N"), _("Single step")); menuGame->Append(ID_STOP, _("S&top\tCtrl-T"), _("Stop")); - menuGame->Enable(ID_STOP, FALSE); + menuGame->Enable(ID_STOP, false); menuGame->AppendSeparator(); menuGame->Append(ID_TOPSPEED, _("T&op speed!"), _("Go as fast as possible")); + menuHelp->Append(wxID_ABOUT, _("&About\tCtrl-A"), _("Show about dialog")); + wxMenuBar *menuBar = new wxMenuBar(); menuBar->Append(menuFile, _("&File")); menuBar->Append(menuView, _("&View")); menuBar->Append(menuGame, _("&Game")); + menuBar->Append(menuHelp, _("&Help")); SetMenuBar(menuBar); // tool bar @@ -248,8 +248,8 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) toolBar->SetMargins(5, 5); toolBar->SetToolBitmapSize(wxSize(16, 16)); - ADD_TOOL(ID_NEW, tbBitmaps[0], _("New"), _("Start a new game")); - ADD_TOOL(ID_OPEN, tbBitmaps[1], _("Open"), _("Open an existing Life pattern")); + ADD_TOOL(wxID_NEW, tbBitmaps[0], _("New"), _("Start a new game")); + ADD_TOOL(wxID_OPEN, tbBitmaps[1], _("Open"), _("Open an existing Life pattern")); toolBar->AddSeparator(); ADD_TOOL(ID_ZOOMIN, tbBitmaps[2], _("Zoom in"), _("Zoom in")); ADD_TOOL(ID_ZOOMOUT, tbBitmaps[3], _("Zoom out"), _("Zoom out")); @@ -259,7 +259,7 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) ADD_TOOL(ID_STOP, tbBitmaps[6], _("Stop"), _("Stop")); toolBar->Realize(); - toolBar->EnableTool(ID_STOP, FALSE); // must be after Realize() ! + toolBar->EnableTool(ID_STOP, false); // must be after Realize() ! // status bar CreateStatusBar(2); @@ -268,8 +268,8 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) // game and timer m_life = new Life(); m_timer = new wxTimer(this, ID_TIMER); - m_running = FALSE; - m_topspeed = FALSE; + m_running = false; + m_topspeed = false; m_interval = 500; m_tics = 0; @@ -278,14 +278,14 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) // and thus updating the text would result in a refresh of the canvas // if they belong to the same parent. - wxPanel *panel1 = new wxPanel(this, -1); - wxPanel *panel2 = new wxPanel(this, -1); + wxPanel *panel1 = new wxPanel(this, wxID_ANY); + wxPanel *panel2 = new wxPanel(this, wxID_ANY); // canvas m_canvas = new LifeCanvas(panel1, m_life); // info panel - m_text = new wxStaticText(panel2, -1, + m_text = new wxStaticText(panel2, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, @@ -304,24 +304,21 @@ LifeFrame::LifeFrame() : wxFrame((wxFrame *)0, -1, _("Life!"), wxPoint(200, 200) wxBoxSizer *sizer2 = new wxBoxSizer(wxVERTICAL); wxBoxSizer *sizer3 = new wxBoxSizer(wxVERTICAL); - sizer1->Add( new wxStaticLine(panel1, -1), 0, wxGROW ); + sizer1->Add( new wxStaticLine(panel1, wxID_ANY), 0, wxGROW ); sizer1->Add( m_canvas, 1, wxGROW | wxALL, 2 ); - sizer1->Add( new wxStaticLine(panel1, -1), 0, wxGROW ); + sizer1->Add( new wxStaticLine(panel1, wxID_ANY), 0, wxGROW ); panel1->SetSizer( sizer1 ); - panel1->SetAutoLayout( TRUE ); sizer1->Fit( panel1 ); sizer2->Add( m_text, 0, wxGROW | wxTOP, 4 ); sizer2->Add( slider, 0, wxCENTRE | wxALL, 4 ); panel2->SetSizer( sizer2 ); - panel2->SetAutoLayout( TRUE ); sizer2->Fit( panel2 ); sizer3->Add( panel1, 1, wxGROW ); sizer3->Add( panel2, 0, wxGROW ); SetSizer( sizer3 ); - SetAutoLayout( TRUE ); sizer3->Fit( this ); // set minimum frame size @@ -355,16 +352,17 @@ void LifeFrame::UpdateUI() // start / stop GetToolBar()->EnableTool(ID_START, !m_running); GetToolBar()->EnableTool(ID_STOP, m_running); - GetMenuBar()->GetMenu(2)->Enable(ID_START, !m_running); - GetMenuBar()->GetMenu(2)->Enable(ID_STEP, !m_running); - GetMenuBar()->GetMenu(2)->Enable(ID_STOP, m_running); + GetMenuBar()->Enable(ID_START, !m_running); + GetMenuBar()->Enable(ID_STEP, !m_running); + GetMenuBar()->Enable(ID_STOP, m_running); + GetMenuBar()->Enable(ID_TOPSPEED, !m_topspeed); // zooming int cellsize = m_canvas->GetCellSize(); GetToolBar()->EnableTool(ID_ZOOMIN, cellsize < 32); GetToolBar()->EnableTool(ID_ZOOMOUT, cellsize > 1); - GetMenuBar()->GetMenu(1)->Enable(ID_ZOOMIN, cellsize < 32); - GetMenuBar()->GetMenu(1)->Enable(ID_ZOOMOUT, cellsize > 1); + GetMenuBar()->Enable(ID_ZOOMIN, cellsize < 32); + GetMenuBar()->Enable(ID_ZOOMOUT, cellsize > 1); } // Event handlers ----------------------------------------------------------- @@ -374,7 +372,7 @@ void LifeFrame::OnMenu(wxCommandEvent& event) { switch (event.GetId()) { - case ID_NEW: + case wxID_NEW: { // stop if it was running OnStop(); @@ -384,19 +382,19 @@ void LifeFrame::OnMenu(wxCommandEvent& event) UpdateInfoText(); break; } - case ID_ABOUT: + case wxID_ABOUT: { LifeAboutDialog dialog(this); dialog.ShowModal(); break; } - case ID_EXIT: + case wxID_EXIT: { - // TRUE is to force the frame to close - Close(TRUE); + // true is to force the frame to close + Close(true); break; } - case ID_SHOWNAV : + case ID_SHOWNAV: { bool checked = GetMenuBar()->GetMenu(1)->IsChecked(ID_SHOWNAV); m_navigator->Show(checked); @@ -405,7 +403,7 @@ void LifeFrame::OnMenu(wxCommandEvent& event) case ID_INFO: { wxString desc = m_life->GetDescription(); - + if ( desc.IsEmpty() ) desc = _("Not available"); @@ -419,10 +417,10 @@ void LifeFrame::OnMenu(wxCommandEvent& event) case ID_STOP : OnStop(); break; case ID_TOPSPEED: { - m_running = TRUE; - m_topspeed = TRUE; + m_running = true; + m_topspeed = true; UpdateUI(); - while (m_running && m_topspeed) + while (m_running && m_topspeed) { OnStep(); wxYield(); @@ -436,8 +434,8 @@ void LifeFrame::OnOpen(wxCommandEvent& WXUNUSED(event)) { wxFileDialog filedlg(this, _("Choose a file to open"), - _(""), - _(""), + wxEmptyString, + wxEmptyString, _("Life patterns (*.lif)|*.lif|All files (*.*)|*.*"), wxOPEN | wxFILE_MUST_EXIST); @@ -507,11 +505,14 @@ void LifeFrame::OnNavigate(wxCommandEvent& event) switch (event.GetId()) { - case ID_NORTH: c = m_life->FindNorth(); break; + case ID_NORTH: c = m_life->FindNorth(); break; case ID_SOUTH: c = m_life->FindSouth(); break; case ID_WEST: c = m_life->FindWest(); break; case ID_EAST: c = m_life->FindEast(); break; case ID_CENTER: c = m_life->FindCenter(); break; + default : + wxFAIL; + // Fall through! case ID_ORIGIN: c.i = c.j = 0; break; } @@ -527,7 +528,7 @@ void LifeFrame::OnSlider(wxScrollEvent& event) OnStop(); OnStart(); } - + UpdateInfoText(); } @@ -543,7 +544,7 @@ void LifeFrame::OnClose(wxCloseEvent& WXUNUSED(event)) // more pending events, and this in turn won't ever happen // if the timer is running faster than the window can redraw. OnStop(); - Destroy(); + Destroy(); } void LifeFrame::OnStart() @@ -551,7 +552,7 @@ void LifeFrame::OnStart() if (!m_running) { m_timer->Start(m_interval); - m_running = TRUE; + m_running = true; UpdateUI(); } } @@ -561,8 +562,8 @@ void LifeFrame::OnStop() if (m_running) { m_timer->Stop(); - m_running = FALSE; - m_topspeed = FALSE; + m_running = false; + m_topspeed = false; UpdateUI(); } } @@ -584,29 +585,29 @@ void LifeFrame::OnStep() // -------------------------------------------------------------------------- LifeNavigator::LifeNavigator(wxWindow *parent) - : wxMiniFrame(parent, -1, + : wxMiniFrame(parent, wxID_ANY, _("Navigation"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxSIMPLE_BORDER) { - wxPanel *panel = new wxPanel(this, -1); + wxPanel *panel = new wxPanel(this, wxID_ANY); wxBoxSizer *sizer1 = new wxBoxSizer(wxVERTICAL); wxBoxSizer *sizer2 = new wxBoxSizer(wxHORIZONTAL); // create bitmaps and masks for the buttons wxBitmap bmpn = wxBITMAP(north), - bmpw = wxBITMAP(west), + bmpw = wxBITMAP(west), bmpc = wxBITMAP(center), - bmpe = wxBITMAP(east), + bmpe = wxBITMAP(east), bmps = wxBITMAP(south); #if !defined(__WXGTK__) && !defined(__WXMOTIF__) && !defined(__WXMAC__) bmpn.SetMask(new wxMask(bmpn, *wxLIGHT_GREY)); bmpw.SetMask(new wxMask(bmpw, *wxLIGHT_GREY)); bmpc.SetMask(new wxMask(bmpc, *wxLIGHT_GREY)); - bmpe.SetMask(new wxMask(bmpe, *wxLIGHT_GREY)); + bmpe.SetMask(new wxMask(bmpe, *wxLIGHT_GREY)); bmps.SetMask(new wxMask(bmps, *wxLIGHT_GREY)); #endif @@ -634,11 +635,13 @@ LifeNavigator::LifeNavigator(wxWindow *parent) sizer1->Add( sizer2 ); sizer1->Add( bs, 0, wxCENTRE | wxSOUTH, 4 ); - // set the miniframe size + // set the panel and miniframe size panel->SetSizer(sizer1); - panel->SetAutoLayout(TRUE); - sizer1->Fit(this); - sizer1->SetSizeHints(this); + + sizer1->Fit(panel); + SetClientSize(panel->GetSize()); + wxSize sz = GetSize(); + SetSizeHints(sz.x, sz.y, sz.x, sz.y); // move it to a sensible position wxRect parentRect = parent->GetRect(); @@ -650,7 +653,7 @@ LifeNavigator::LifeNavigator(wxWindow *parent) Move(x, y); // done - Show(TRUE); + Show(true); } void LifeNavigator::OnClose(wxCloseEvent& event) @@ -669,8 +672,8 @@ void LifeNavigator::OnClose(wxCloseEvent& event) // canvas constructor LifeCanvas::LifeCanvas(wxWindow *parent, Life *life, bool interactive) - : wxWindow(parent, -1, wxPoint(0, 0), wxSize(100, 100), - wxSUNKEN_BORDER) + : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(100, 100), + wxSUNKEN_BORDER|wxFULL_REPAINT_ON_RESIZE) { m_life = life; m_interactive = interactive; @@ -685,12 +688,12 @@ LifeCanvas::LifeCanvas(wxWindow *parent, Life *life, bool interactive) SetCursor(*wxCROSS_CURSOR); // reduce flicker if wxEVT_ERASE_BACKGROUND is not available - SetBackgroundColour(*wxWHITE); + SetBackgroundColour(*wxWHITE); } LifeCanvas::~LifeCanvas() { - delete m_life; + delete m_life; } // recenter at the given position @@ -700,7 +703,7 @@ void LifeCanvas::Recenter(wxInt32 i, wxInt32 j) m_viewportY = j - m_viewportH / 2; // redraw everything - Refresh(FALSE); + Refresh(false); } // set the cell size and refresh display @@ -717,7 +720,7 @@ void LifeCanvas::SetCellSize(int cellsize) GetClientSize(&w, &h); m_viewportW = (w + m_cellsize - 1) / m_cellsize; m_viewportH = (h + m_cellsize - 1) / m_cellsize; - + // recenter m_viewportX = cx - m_viewportW / 2; m_viewportY = cy - m_viewportH / 2; @@ -730,8 +733,8 @@ void LifeCanvas::SetCellSize(int cellsize) m_thumbX = m_viewportW; m_thumbY = m_viewportH; } - - Refresh(FALSE); + + Refresh(false); } // draw a cell @@ -773,14 +776,14 @@ void LifeCanvas::DrawChanged() size_t ncells; LifeCell *cells; - bool done = FALSE; + bool done = false; m_life->BeginFind(m_viewportX, m_viewportY, m_viewportX + m_viewportW, m_viewportY + m_viewportH, - TRUE); - + true); + dc.BeginDrawing(); if (m_cellsize == 1) @@ -805,7 +808,7 @@ void LifeCanvas::DrawChanged() } // event handlers -void LifeCanvas::OnPaint(wxPaintEvent& event) +void LifeCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); wxRect rect = GetUpdateRegion().GetBox(); @@ -825,10 +828,9 @@ void LifeCanvas::OnPaint(wxPaintEvent& event) size_t ncells; LifeCell *cells; - bool done = FALSE; - m_life->BeginFind(i0, j0, i1, j1, FALSE); - done = m_life->FindMore(&cells, &ncells); + m_life->BeginFind(i0, j0, i1, j1, false); + bool done = m_life->FindMore(&cells, &ncells); // erase all damaged cells and draw the grid dc.BeginDrawing(); @@ -906,7 +908,7 @@ void LifeCanvas::OnMouse(wxMouseEvent& event) { // yes: start a new action and toggle this cell m_status = (m_life->IsAlive(i, j)? MOUSE_ERASING : MOUSE_DRAWING); - + m_mi = i; m_mj = j; m_life->SetCell(i, j, m_status == MOUSE_DRAWING); @@ -934,12 +936,12 @@ void LifeCanvas::OnMouse(wxMouseEvent& event) ii = m_mi; jj = m_mj; - + if (ai > aj) { // iterate over i - d = aj - (ai >> 1); - + d = aj - (ai >> 1); + while (ii != i) { m_life->SetCell(ii, jj, alive); @@ -947,7 +949,7 @@ void LifeCanvas::OnMouse(wxMouseEvent& event) if (d >= 0) { jj += sj; - d -= ai; + d -= ai; } ii += si; d += aj; @@ -965,7 +967,7 @@ void LifeCanvas::OnMouse(wxMouseEvent& event) if (d >= 0) { ii += si; - d -= aj; + d -= aj; } jj += sj; d += ai; @@ -1054,7 +1056,7 @@ void LifeCanvas::OnScroll(wxScrollWinEvent& event) else if (type == wxEVT_SCROLLWIN_PAGEDOWN) { - scrollinc = -10; + scrollinc = +10; } else if (type == wxEVT_SCROLLWIN_THUMBTRACK) @@ -1088,7 +1090,7 @@ void LifeCanvas::OnScroll(wxScrollWinEvent& event) #endif if (scrollinc == 0) return; - + // scroll the window and adjust the viewport if (orient == wxHORIZONTAL) { @@ -1097,7 +1099,7 @@ void LifeCanvas::OnScroll(wxScrollWinEvent& event) } else { - m_viewportY += scrollinc; + m_viewportY += scrollinc; ScrollWindow( 0, -m_cellsize * scrollinc, (const wxRect *) NULL); } }