// headers, declarations, constants
// ==========================================================================
-#ifdef __GNUG__
- #pragma implementation "life.h"
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
// Event tables
BEGIN_EVENT_TABLE(LifeFrame, wxFrame)
EVT_MENU (wxID_NEW, LifeFrame::OnMenu)
+#if wxUSE_FILEDLG
EVT_MENU (wxID_OPEN, LifeFrame::OnOpen)
+#endif
EVT_MENU (ID_SAMPLES, LifeFrame::OnSamples)
EVT_MENU (wxID_ABOUT, LifeFrame::OnMenu)
EVT_MENU (wxID_EXIT, LifeFrame::OnMenu)
// --------------------------------------------------------------------------
// frame constructor
-LifeFrame::LifeFrame() : wxFrame( (wxFrame *) NULL, wxID_ANY,
- _("Life!"), wxDefaultPosition )
+LifeFrame::LifeFrame() :
+ wxFrame( (wxFrame *) NULL, wxID_ANY, _("Life!"), wxDefaultPosition ),
+ m_navigator(NULL)
{
// frame icon
SetIcon(wxICON(mondrian));
wxMenu *menuGame = new wxMenu(wxMENU_TEAROFF);
wxMenu *menuHelp = new wxMenu(wxMENU_TEAROFF);
- menuFile->Append(wxID_NEW, wxGetStockLabel(wxID_NEW), _("Start a new game"));
- menuFile->Append(wxID_OPEN, wxGetStockLabel(wxID_OPEN), _("Open an existing Life pattern"));
+ menuFile->Append(wxID_NEW, wxEmptyString, _("Start a new game"));
+#if wxUSE_FILEDLG
+ menuFile->Append(wxID_OPEN, wxEmptyString, _("Open an existing Life pattern"));
+#endif
menuFile->Append(ID_SAMPLES, _("&Sample game..."), _("Select a sample configuration"));
+#if ! (defined(__SMARTPHONE__) || defined(__POCKETPC__))
menuFile->AppendSeparator();
- menuFile->Append(wxID_EXIT, wxGetStockLabel(wxID_EXIT, true, _T("Alt-X")), _("Quit this program"));
+ menuFile->Append(wxID_EXIT);
menuView->Append(ID_SHOWNAV, _("Navigation &toolbox"), _("Show or hide toolbox"), wxITEM_CHECK);
menuView->Check(ID_SHOWNAV, true);
menuView->AppendSeparator();
+#endif
+
menuView->Append(ID_ORIGIN, _("&Absolute origin"), _("Go to (0, 0)"));
menuView->Append(ID_CENTER, _("&Center of mass"), _("Find center of mass"));
menuView->Append(ID_NORTH, _("&North"), _("Find northernmost cell"));
menuView->Append(ID_EAST, _("&East"), _("Find easternmost cell"));
menuView->Append(ID_WEST, _("&West"), _("Find westernmost cell"));
menuView->AppendSeparator();
- menuView->Append(wxID_ZOOM_IN, wxGetStockLabel(wxID_ZOOM_IN, true, _T("Ctrl-I")), _("Zoom in"));
- menuView->Append(wxID_ZOOM_OUT, wxGetStockLabel(wxID_ZOOM_OUT, true, _T("Ctrl-O")), _("Zoom out"));
+ menuView->Append(wxID_ZOOM_IN, wxEmptyString, _("Zoom in"));
+ menuView->Append(wxID_ZOOM_OUT, wxEmptyString, _("Zoom out"));
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(wxID_STOP, wxGetStockLabel(wxID_STOP, true, _T("Ctrl-T")), _("Stop"));
+ menuGame->Append(wxID_STOP, wxEmptyString, _("Stop"));
menuGame->Enable(wxID_STOP, false);
menuGame->AppendSeparator();
menuGame->Append(ID_TOPSPEED, _("T&op speed!"), _("Go as fast as possible"));
toolBar->SetMargins(5, 5);
toolBar->SetToolBitmapSize(wxSize(16, 16));
- ADD_TOOL(wxID_NEW, tbBitmaps[0], wxGetStockLabel(wxID_NEW, false), _("Start a new game"));
- ADD_TOOL(wxID_OPEN, tbBitmaps[1], wxGetStockLabel(wxID_OPEN, false), _("Open an existing Life pattern"));
-
- // PocketPC only works with standard identifiers, and there's restricted space
+ ADD_TOOL(wxID_NEW, tbBitmaps[0], wxGetStockLabel(wxID_NEW, wxSTOCK_NOFLAGS), _("Start a new game"));
#ifndef __POCKETPC__
+#if wxUSE_FILEDLG
+ ADD_TOOL(wxID_OPEN, tbBitmaps[1], wxGetStockLabel(wxID_OPEN, wxSTOCK_NOFLAGS), _("Open an existing Life pattern"));
+#endif // wxUSE_FILEDLG
+
toolBar->AddSeparator();
- ADD_TOOL(wxID_ZOOM_IN, tbBitmaps[2], wxGetStockLabel(wxID_ZOOM_IN, false), _("Zoom in"));
- ADD_TOOL(wxID_ZOOM_OUT, tbBitmaps[3], wxGetStockLabel(wxID_ZOOM_OUT, false), _("Zoom out"));
+ ADD_TOOL(wxID_ZOOM_IN, tbBitmaps[2], wxGetStockLabel(wxID_ZOOM_IN, wxSTOCK_NOFLAGS), _("Zoom in"));
+ ADD_TOOL(wxID_ZOOM_OUT, tbBitmaps[3], wxGetStockLabel(wxID_ZOOM_OUT, wxSTOCK_NOFLAGS), _("Zoom out"));
ADD_TOOL(ID_INFO, tbBitmaps[4], _("Description"), _("Show description"));
toolBar->AddSeparator();
+#endif // __POCKETPC__
ADD_TOOL(ID_START, tbBitmaps[5], _("Start"), _("Start"));
- ADD_TOOL(wxID_STOP, tbBitmaps[6], wxGetStockLabel(wxID_STOP, false), _("Stop"));
-#endif
+ ADD_TOOL(wxID_STOP, tbBitmaps[6], _("Stop"), _("Stop"));
toolBar->Realize();
toolBar->EnableTool(wxID_STOP, false); // must be after Realize() !
sizer3->Add( panel1, 1, wxGROW );
sizer3->Add( panel2, 0, wxGROW );
SetSizer( sizer3 );
+
#ifndef __WXWINCE__
sizer3->Fit( this );
// set minimum frame size
sizer3->SetSizeHints( this );
-#endif
- // navigator frame
+ // navigator frame - not appropriate for small devices
m_navigator = new LifeNavigator(this);
+#endif
+
}
LifeFrame::~LifeFrame()
case ID_SHOWNAV:
{
bool checked = GetMenuBar()->GetMenu(1)->IsChecked(ID_SHOWNAV);
- m_navigator->Show(checked);
+ if (m_navigator)
+ m_navigator->Show(checked);
break;
}
case ID_INFO:
}
}
+#if wxUSE_FILEDLG
void LifeFrame::OnOpen(wxCommandEvent& WXUNUSED(event))
{
wxFileDialog filedlg(this,
wxEmptyString,
wxEmptyString,
_("Life patterns (*.lif)|*.lif|All files (*.*)|*.*"),
- wxOPEN | wxFILE_MUST_EXIST);
+ wxFD_OPEN | wxFD_FILE_MUST_EXIST);
if (filedlg.ShowModal() == wxID_OK)
{
}
}
}
+#endif
void LifeFrame::OnSamples(wxCommandEvent& WXUNUSED(event))
{
// canvas constructor
LifeCanvas::LifeCanvas(wxWindow *parent, Life *life, bool interactive)
: wxWindow(parent, wxID_ANY, wxDefaultPosition, wxSize(100, 100),
- wxSUNKEN_BORDER|wxFULL_REPAINT_ON_RESIZE)
+ wxFULL_REPAINT_ON_RESIZE | wxHSCROLL | wxVSCROLL
+#if !defined(__SMARTPHONE__) && !defined(__POCKETPC__)
+ |wxSUNKEN_BORDER
+#else
+ |wxSIMPLE_BORDER
+#endif
+ )
{
m_life = life;
m_interactive = interactive;
dc.SetPen(alive? *wxBLACK_PEN : *wxWHITE_PEN);
dc.SetBrush(alive? *wxBLACK_BRUSH : *wxWHITE_BRUSH);
- dc.BeginDrawing();
DrawCell(i, j, dc);
- dc.EndDrawing();
}
void LifeCanvas::DrawCell(wxInt32 i, wxInt32 j, wxDC &dc)
m_viewportY + m_viewportH,
true);
- dc.BeginDrawing();
-
if (m_cellsize == 1)
{
dc.SetPen(*wxBLACK_PEN);
for (size_t m = 0; m < ncells; m++)
DrawCell(cells[m].i, cells[m].j, dc);
}
- dc.EndDrawing();
}
// event handlers
bool done = m_life->FindMore(&cells, &ncells);
// erase all damaged cells and draw the grid
- dc.BeginDrawing();
dc.SetBrush(*wxWHITE_BRUSH);
if (m_cellsize <= 2)
// last set
for (size_t m = 0; m < ncells; m++)
DrawCell(cells[m].i, cells[m].j, dc);
-
- dc.EndDrawing();
}
void LifeCanvas::OnMouse(wxMouseEvent& event)
wxClientDC dc(this);
dc.SetPen(alive? *wxBLACK_PEN : *wxWHITE_PEN);
dc.SetBrush(alive? *wxBLACK_BRUSH : *wxWHITE_BRUSH);
- dc.BeginDrawing();
// draw a line of cells using Bresenham's algorithm
wxInt32 d, ii, jj, di, ai, si, dj, aj, sj;
DrawCell(ii, jj, dc);
m_mi = ii;
m_mj = jj;
-
- dc.EndDrawing();
}
((LifeFrame *) wxGetApp().GetTopWindow())->UpdateInfoText();
{
// do nothing. I just don't want the background to be erased, you know.
}
-
-