Life! version 2
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -10,29 +10,13 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// ==========================================================================
|
||||
// declarations
|
||||
// headers, declarations, constants
|
||||
// ==========================================================================
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// headers
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
#ifdef __GNUG__
|
||||
#pragma implementation "dialogs.h"
|
||||
#endif
|
||||
|
||||
// for compilers that support precompilation, includes "wx/wx.h"
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
// for all others, include the necessary headers
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "wx/statline.h"
|
||||
#include "wx/spinctrl.h"
|
||||
|
||||
@@ -40,6 +24,18 @@
|
||||
#include "life.h"
|
||||
#include "game.h"
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// resources
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
#if defined(__WXGTK__) || defined(__WXMOTIF__)
|
||||
// logo for the about dialog
|
||||
#include "bitmaps/life.xpm"
|
||||
#endif
|
||||
|
||||
// sample configurations
|
||||
#include "samples.inc"
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// constants
|
||||
// --------------------------------------------------------------------------
|
||||
@@ -47,24 +43,21 @@
|
||||
// IDs for the controls and the menu commands
|
||||
enum
|
||||
{
|
||||
// listbox in samples dialog
|
||||
ID_LISTBOX = 2001
|
||||
};
|
||||
// bmp window in about dialog
|
||||
ID_BMPWIN = 2001,
|
||||
|
||||
// sample configurations
|
||||
#include "samples.inc"
|
||||
// listbox in samples dialog
|
||||
ID_LISTBOX
|
||||
};
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// event tables and other macros for wxWindows
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
// Event tables
|
||||
BEGIN_EVENT_TABLE(LifeNewGameDialog, wxDialog)
|
||||
EVT_BUTTON (wxID_OK, LifeNewGameDialog::OnOK)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
BEGIN_EVENT_TABLE(LifeSamplesDialog, wxDialog)
|
||||
EVT_LISTBOX (ID_LISTBOX, LifeSamplesDialog::OnListBox)
|
||||
|
||||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
@@ -72,62 +65,6 @@ END_EVENT_TABLE()
|
||||
// implementation
|
||||
// ==========================================================================
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// LifeNewGameDialog
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
LifeNewGameDialog::LifeNewGameDialog(wxWindow *parent, int *w, int *h)
|
||||
: wxDialog(parent, -1,
|
||||
_("New game"),
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
|
||||
{
|
||||
m_w = w;
|
||||
m_h = h;
|
||||
|
||||
// spin ctrls
|
||||
m_spinctrlw = new wxSpinCtrl( this, -1 );
|
||||
m_spinctrlw->SetValue(*m_w);
|
||||
m_spinctrlw->SetRange(LIFE_MIN, LIFE_MAX);
|
||||
|
||||
m_spinctrlh = new wxSpinCtrl( this, -1 );
|
||||
m_spinctrlh->SetValue(*m_h);
|
||||
m_spinctrlh->SetRange(LIFE_MIN, LIFE_MAX);
|
||||
|
||||
// component layout
|
||||
wxBoxSizer *inputsizer1 = new wxBoxSizer( wxHORIZONTAL );
|
||||
inputsizer1->Add( new wxStaticText(this, -1, _("Width")), 1, wxCENTRE | wxLEFT, 20);
|
||||
inputsizer1->Add( m_spinctrlw, 2, wxCENTRE | wxLEFT | wxRIGHT, 20 );
|
||||
|
||||
wxBoxSizer *inputsizer2 = new wxBoxSizer( wxHORIZONTAL );
|
||||
inputsizer2->Add( new wxStaticText(this, -1, _("Height")), 1, wxCENTRE | wxLEFT, 20);
|
||||
inputsizer2->Add( m_spinctrlh, 2, wxCENTRE | wxLEFT | wxRIGHT, 20 );
|
||||
|
||||
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
|
||||
topsizer->Add( CreateTextSizer(_("Enter board dimensions")), 0, wxALL, 10 );
|
||||
topsizer->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 10);
|
||||
topsizer->Add( inputsizer1, 1, wxGROW | wxLEFT | wxRIGHT, 5 );
|
||||
topsizer->Add( inputsizer2, 1, wxGROW | wxLEFT | wxRIGHT, 5 );
|
||||
topsizer->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT | wxTOP, 10);
|
||||
topsizer->Add( CreateButtonSizer(wxOK | wxCANCEL), 0, wxCENTRE | wxALL, 10);
|
||||
|
||||
// activate
|
||||
SetSizer(topsizer);
|
||||
SetAutoLayout(TRUE);
|
||||
topsizer->SetSizeHints(this);
|
||||
topsizer->Fit(this);
|
||||
Centre(wxBOTH);
|
||||
}
|
||||
|
||||
void LifeNewGameDialog::OnOK(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
*m_w = m_spinctrlw->GetValue();
|
||||
*m_h = m_spinctrlh->GetValue();
|
||||
|
||||
EndModal(wxID_OK);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// LifeSamplesDialog
|
||||
// --------------------------------------------------------------------------
|
||||
@@ -153,7 +90,7 @@ LifeSamplesDialog::LifeSamplesDialog(wxWindow *parent)
|
||||
|
||||
// descriptions
|
||||
wxStaticBox *statbox = new wxStaticBox( this, -1, _("Description"));
|
||||
m_life = new Life( 16, 16 );
|
||||
m_life = new Life();
|
||||
m_life->SetShape(g_shapes[0]);
|
||||
m_canvas = new LifeCanvas( this, m_life, FALSE );
|
||||
m_text = new wxTextCtrl( this, -1,
|
||||
@@ -183,30 +120,73 @@ LifeSamplesDialog::LifeSamplesDialog(wxWindow *parent)
|
||||
SetAutoLayout(TRUE);
|
||||
sizer3->SetSizeHints(this);
|
||||
sizer3->Fit(this);
|
||||
Centre(wxBOTH);
|
||||
Centre(wxBOTH | wxCENTRE_ON_SCREEN);
|
||||
}
|
||||
|
||||
LifeSamplesDialog::~LifeSamplesDialog()
|
||||
{
|
||||
m_canvas->Destroy();
|
||||
delete m_life;
|
||||
}
|
||||
|
||||
int LifeSamplesDialog::GetValue()
|
||||
const LifeShape& LifeSamplesDialog::GetShape()
|
||||
{
|
||||
return m_value;
|
||||
return g_shapes[m_value];
|
||||
}
|
||||
|
||||
void LifeSamplesDialog::OnListBox(wxCommandEvent& event)
|
||||
{
|
||||
if (event.GetSelection() != -1)
|
||||
int sel = event.GetSelection();
|
||||
|
||||
if (sel != -1)
|
||||
{
|
||||
m_value = m_list->GetSelection();
|
||||
m_text->SetValue(g_shapes[ event.GetSelection() ].m_desc);
|
||||
m_life->SetShape(g_shapes[ event.GetSelection() ]);
|
||||
m_text->SetValue(g_shapes[ sel ].m_desc);
|
||||
m_life->SetShape(g_shapes[ sel ]);
|
||||
|
||||
m_canvas->DrawEverything(TRUE); // force redraw everything
|
||||
m_canvas->Refresh(FALSE); // do not erase background
|
||||
// quick and dirty :-)
|
||||
if ((g_shapes[ sel ].m_width > 36) ||
|
||||
(g_shapes[ sel ].m_height > 22))
|
||||
m_canvas->SetCellSize(2);
|
||||
else
|
||||
m_canvas->SetCellSize(8);
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
// LifeAboutDialog
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
LifeAboutDialog::LifeAboutDialog(wxWindow *parent)
|
||||
: wxDialog(parent, -1,
|
||||
_("About Life!"),
|
||||
wxDefaultPosition,
|
||||
wxDefaultSize,
|
||||
wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
|
||||
{
|
||||
// logo
|
||||
wxBitmap bmp = wxBITMAP(life);
|
||||
#if !defined(__WXGTK__) && !defined(__WXMOTIF__)
|
||||
bmp.SetMask(new wxMask(bmp, *wxBLUE));
|
||||
#endif
|
||||
wxStaticBitmap *sbmp = new wxStaticBitmap(this, -1, bmp);
|
||||
|
||||
// layout components
|
||||
wxBoxSizer *sizer = new wxBoxSizer( wxVERTICAL );
|
||||
sizer->Add( sbmp, 0, wxCENTRE | wxALL, 10 );
|
||||
sizer->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT, 5 );
|
||||
sizer->Add( CreateTextSizer(_("Life! for wxWindows, version 2.0\n\n"
|
||||
"(c) 2000 Guillermo Rodriguez Garcia\n\n"
|
||||
"<guille@iies.es>\n\n"
|
||||
"Portions of the code are based in XLife\n"
|
||||
"XLife is (c) 1989 by Jon Bennett et al.")),
|
||||
0, wxCENTRE | wxALL, 20 );
|
||||
sizer->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT, 5 );
|
||||
sizer->Add( CreateButtonSizer(wxOK), 0, wxCENTRE | wxALL, 10 );
|
||||
|
||||
// activate
|
||||
SetSizer(sizer);
|
||||
SetAutoLayout(TRUE);
|
||||
sizer->SetSizeHints(this);
|
||||
sizer->Fit(this);
|
||||
Centre(wxBOTH | wxCENTRE_ON_SCREEN);
|
||||
}
|
||||
|
Reference in New Issue
Block a user