+// --------------------------------------------------------------------------
+// LifeSamplesDialog
+// --------------------------------------------------------------------------
+
+LifeSamplesDialog::LifeSamplesDialog(wxWindow *parent)
+ : wxDialog(parent, -1,
+ _("Sample games"),
+ wxDefaultPosition,
+ wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE | wxDIALOG_MODAL)
+{
+ m_value = 0;
+
+ // create and populate the list of available samples
+ m_list = new wxListBox( this, ID_LISTBOX,
+ wxDefaultPosition,
+ wxDefaultSize,
+ 0, NULL,
+ wxLB_SINGLE | wxLB_NEEDED_SB | wxLB_HSCROLL );
+
+ for (unsigned i = 0; i < (sizeof(g_shapes) / sizeof(LifeShape)); i++)
+ m_list->Append(g_shapes[i].m_name);
+
+ // descriptions
+ wxStaticBox *statbox = new wxStaticBox( this, -1, _("Description"));
+ m_life = new Life( 16, 16 );
+ m_life->SetShape(g_shapes[0]);
+ m_canvas = new LifeCanvas( this, m_life, FALSE );
+ m_text = new wxTextCtrl( this, -1,
+ g_shapes[0].m_desc,
+ wxDefaultPosition,
+ wxSize(300, 60),
+ wxTE_MULTILINE | wxTE_READONLY);
+
+ // layout components
+ wxStaticBoxSizer *sizer1 = new wxStaticBoxSizer( statbox, wxVERTICAL );
+ sizer1->Add( m_canvas, 2, wxGROW | wxCENTRE | wxALL, 5);
+ sizer1->Add( m_text, 1, wxGROW | wxCENTRE | wxALL, 5 );
+
+ wxBoxSizer *sizer2 = new wxBoxSizer( wxHORIZONTAL );
+ sizer2->Add( m_list, 0, wxGROW | wxCENTRE | wxALL, 5 );
+ sizer2->Add( sizer1, 1, wxGROW | wxCENTRE | wxALL, 5 );
+
+ wxBoxSizer *sizer3 = new wxBoxSizer( wxVERTICAL );
+ sizer3->Add( CreateTextSizer(_("Select one configuration")), 0, wxALL, 10 );
+ sizer3->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT, 10 );
+ sizer3->Add( sizer2, 1, wxGROW | wxCENTRE | wxALL, 5 );
+ sizer3->Add( new wxStaticLine(this, -1), 0, wxGROW | wxLEFT | wxRIGHT, 10 );
+ sizer3->Add( CreateButtonSizer(wxOK | wxCANCEL), 0, wxCENTRE | wxALL, 10 );
+
+ // activate
+ SetSizer(sizer3);
+ SetAutoLayout(TRUE);
+ sizer3->SetSizeHints(this);
+ sizer3->Fit(this);
+ Centre(wxBOTH);
+}
+
+LifeSamplesDialog::~LifeSamplesDialog()
+{
+ m_canvas->Destroy();
+ delete m_life;
+}
+
+int LifeSamplesDialog::GetValue()
+{
+ return m_value;
+}
+
+void LifeSamplesDialog::OnListBox(wxCommandEvent& event)
+{
+ if (event.GetSelection() != -1)
+ {
+ m_value = m_list->GetSelection();
+ m_text->SetValue(g_shapes[ event.GetSelection() ].m_desc);
+ m_life->SetShape(g_shapes[ event.GetSelection() ]);
+
+ m_canvas->DrawEverything(TRUE); // force redraw everything
+ m_canvas->Refresh(FALSE); // do not erase background
+ }
+}
+