diff options
author | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 19:27:35 +0100 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 19:27:49 +0100 |
commit | 17909d029c6a8872b2fddf4e171d7925bbbe9c5c (patch) | |
tree | cbb08af84cd68d24acc362d593a2048b0fa79689 /Guppies1_0Main.cpp |
Diffstat (limited to 'Guppies1_0Main.cpp')
-rw-r--r-- | Guppies1_0Main.cpp | 757 |
1 files changed, 757 insertions, 0 deletions
diff --git a/Guppies1_0Main.cpp b/Guppies1_0Main.cpp new file mode 100644 index 0000000..089abf4 --- /dev/null +++ b/Guppies1_0Main.cpp @@ -0,0 +1,757 @@ +/*************************************************************** + * Name: Guppies1_0Main.cpp + * Purpose: Code for Application Frame + * Author: Paul T. Oliver (nino.trullen@gmail.com) + * Created: 2012-11-13 + * Copyright: Paul T. Oliver () + * License: + **************************************************************/ + +#include "Guppies1_0Main.h" +#include <wx/msgdlg.h> +#include <wx/textfile.h> + +//(*InternalHeaders(Guppies1_0Dialog) +#include <wx/bitmap.h> +#include <wx/settings.h> +#include <wx/font.h> +#include <wx/intl.h> +#include <wx/image.h> +#include <wx/string.h> +//*) + +//helper functions +enum wxbuildinfoformat { + short_f, long_f }; + +wxString wxbuildinfo(wxbuildinfoformat format) +{ + wxString wxbuild(wxVERSION_STRING); + + if (format == long_f ) + { +#if defined(__WXMSW__) + wxbuild << _T("-Windows"); +#elif defined(__UNIX__) + wxbuild << _T("-Linux"); +#endif + +#if wxUSE_UNICODE + wxbuild << _T("-Unicode build"); +#else + wxbuild << _T("-ANSI build"); +#endif // wxUSE_UNICODE + } + + return wxbuild; +} + +//(*IdInit(Guppies1_0Dialog) +const long Guppies1_0Dialog::ID_STATICBITMAP1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT37 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT39 = wxNewId(); +const long Guppies1_0Dialog::ID_HYPERLINKCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON4 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT38 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL4 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICLINE2 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON1 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL2 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT31 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT32 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT33 = wxNewId(); +const long Guppies1_0Dialog::ID_CHOICE1 = wxNewId(); +const long Guppies1_0Dialog::ID_CHOICE2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL18 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT35 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT34 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT36 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL22 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL23 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL24 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT28 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT30 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT29 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL19 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL20 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL21 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT4 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT5 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT6 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT7 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT8 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT9 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT10 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL4 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL5 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL6 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX1 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX2 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL8 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT22 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT23 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT24 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT25 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT26 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT27 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL1 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL4 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL5 = wxNewId(); +const long Guppies1_0Dialog::ID_COLOURPICKERCTRL6 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT11 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT12 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT13 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT14 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT15 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT16 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT17 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL7 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL9 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL10 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL11 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL12 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL13 = wxNewId(); +const long Guppies1_0Dialog::ID_CHECKBOX3 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT18 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT19 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT20 = wxNewId(); +const long Guppies1_0Dialog::ID_STATICTEXT21 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL14 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL15 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL16 = wxNewId(); +const long Guppies1_0Dialog::ID_TEXTCTRL17 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL2 = wxNewId(); +const long Guppies1_0Dialog::ID_FILEPICKERCTRL3 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON5 = wxNewId(); +const long Guppies1_0Dialog::ID_BUTTON2 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL3 = wxNewId(); +const long Guppies1_0Dialog::ID_NOTEBOOK1 = wxNewId(); +const long Guppies1_0Dialog::ID_PANEL1 = wxNewId(); +//*) + +BEGIN_EVENT_TABLE(Guppies1_0Dialog,wxDialog) + //(*EventTable(Guppies1_0Dialog) + //*) +END_EVENT_TABLE() + +Guppies1_0Dialog::Guppies1_0Dialog(wxWindow* parent,wxWindowID id) +{ + //(*Initialize(Guppies1_0Dialog) + wxBoxSizer* BoxSizer4; + wxStaticBoxSizer* StaticBoxSizer2; + wxBoxSizer* BoxSizer6; + wxBoxSizer* BoxSizer19; + wxBoxSizer* BoxSizer15; + wxBoxSizer* BoxSizer20; + wxBoxSizer* BoxSizer5; + wxBoxSizer* BoxSizer10; + wxBoxSizer* BoxSizer7; + wxBoxSizer* BoxSizer8; + wxBoxSizer* BoxSizer21; + wxBoxSizer* BoxSizer13; + wxStaticBoxSizer* StaticBoxSizer4; + wxBoxSizer* BoxSizer23; + wxStaticBoxSizer* StaticBoxSizer9; + wxBoxSizer* BoxSizer2; + wxBoxSizer* BoxSizer11; + wxBoxSizer* BoxSizer16; + wxStaticBoxSizer* StaticBoxSizer7; + wxBoxSizer* BoxSizer12; + wxBoxSizer* BoxSizer18; + wxBoxSizer* BoxSizer28; + wxStaticBoxSizer* StaticBoxSizer10; + wxBoxSizer* BoxSizer14; + wxStaticBoxSizer* StaticBoxSizer8; + wxStaticBoxSizer* StaticBoxSizer3; + wxStaticBoxSizer* StaticBoxSizer6; + wxBoxSizer* BoxSizer27; + wxBoxSizer* BoxSizer17; + wxBoxSizer* BoxSizer24; + wxBoxSizer* BoxSizer26; + wxBoxSizer* BoxSizer9; + wxStaticBoxSizer* StaticBoxSizer1; + wxBoxSizer* BoxSizer22; + wxBoxSizer* BoxSizer3; + wxStaticBoxSizer* StaticBoxSizer5; + wxBoxSizer* BoxSizer25; + + Create(parent, wxID_ANY, _("Neural Guppies - 0.1 beta"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX, _T("wxID_ANY")); + BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); + Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1")); + BoxSizer2 = new wxBoxSizer(wxVERTICAL); + Notebook1 = new wxNotebook(Panel1, ID_NOTEBOOK1, wxDefaultPosition, wxDefaultSize, 0, _T("ID_NOTEBOOK1")); + Panel4 = new wxPanel(Notebook1, ID_PANEL4, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL4")); + Panel4->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer27 = new wxBoxSizer(wxVERTICAL); + StaticBitmap1 = new wxStaticBitmap(Panel4, ID_STATICBITMAP1, wxBitmap(wxImage(_T("gfx\\logo.png"))), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICBITMAP1")); + BoxSizer27->Add(StaticBitmap1, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + StaticLine3 = new wxStaticLine(Panel4, ID_STATICLINE3, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE3")); + BoxSizer27->Add(StaticLine3, 0, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText37 = new wxStaticText(Panel4, ID_STATICTEXT37, _("\nVersion -0.1 beta 20121220\n\nBy: Paul T. Oliver"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT37")); + wxFont StaticText37Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + StaticText37->SetFont(StaticText37Font); + BoxSizer27->Add(StaticText37, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + StaticText39 = new wxStaticText(Panel4, ID_STATICTEXT39, _("paul.t.oliver.design@gmail.com"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT39")); + BoxSizer27->Add(StaticText39, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + HyperlinkCtrl1 = new wxHyperlinkCtrl(Panel4, ID_HYPERLINKCTRL1, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_CONTEXTMENU|wxHL_ALIGN_CENTRE|wxNO_BORDER, _T("ID_HYPERLINKCTRL1")); + BoxSizer27->Add(HyperlinkCtrl1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 4); + BoxSizer28 = new wxBoxSizer(wxHORIZONTAL); + Button4 = new wxButton(Panel4, ID_BUTTON4, _("Load simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4")); + wxFont Button4Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + Button4->SetFont(Button4Font); + BoxSizer28->Add(Button4, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Button3 = new wxButton(Panel4, ID_BUTTON3, _("New simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); + wxFont Button3Font(11,wxSWISS,wxFONTSTYLE_NORMAL,wxNORMAL,false,_T("DejaVu Sans Mono"),wxFONTENCODING_DEFAULT); + Button3->SetFont(Button3Font); + BoxSizer28->Add(Button3, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer27->Add(BoxSizer28, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText38 = new wxStaticText(Panel4, ID_STATICTEXT38, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE, _T("ID_STATICTEXT38")); + BoxSizer27->Add(StaticText38, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel4->SetSizer(BoxSizer27); + BoxSizer27->Fit(Panel4); + BoxSizer27->SetSizeHints(Panel4); + Panel2 = new wxPanel(Notebook1, ID_PANEL2, wxPoint(29,47), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL2")); + Panel2->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer3 = new wxBoxSizer(wxVERTICAL); + BoxSizer4 = new wxBoxSizer(wxHORIZONTAL); + FilePickerCtrl1 = new wxFilePickerCtrl(Panel2, ID_FILEPICKERCTRL1, wxEmptyString, _("Load simulation"), _T("*.sim"), wxDefaultPosition, wxDefaultSize, wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_USE_TEXTCTRL, wxDefaultValidator, _T("ID_FILEPICKERCTRL1")); + FilePickerCtrl1->Disable(); + BoxSizer4->Add(FilePickerCtrl1, 3, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer3->Add(BoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticLine1 = new wxStaticLine(Panel2, ID_STATICLINE1, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE1")); + BoxSizer3->Add(StaticLine1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText1 = new wxStaticText(Panel2, ID_STATICTEXT1, _("No simulation loaded."), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); + BoxSizer3->Add(StaticText1, 3, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10); + StaticLine2 = new wxStaticLine(Panel2, ID_STATICLINE2, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE2")); + BoxSizer3->Add(StaticLine2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer5 = new wxBoxSizer(wxHORIZONTAL); + Button1 = new wxButton(Panel2, ID_BUTTON1, _("Resume simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON1")); + Button1->Disable(); + BoxSizer5->Add(Button1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer3->Add(BoxSizer5, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel2->SetSizer(BoxSizer3); + BoxSizer3->Fit(Panel2); + BoxSizer3->SetSizeHints(Panel2); + Panel3 = new wxPanel(Notebook1, ID_PANEL3, wxPoint(96,8), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL3")); + Panel3->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT)); + BoxSizer6 = new wxBoxSizer(wxHORIZONTAL); + BoxSizer20 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer8 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Neural network parameters")); + BoxSizer21 = new wxBoxSizer(wxVERTICAL); + StaticText31 = new wxStaticText(Panel3, ID_STATICTEXT31, _("Network structure"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT31")); + BoxSizer21->Add(StaticText31, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText32 = new wxStaticText(Panel3, ID_STATICTEXT32, _("Node structure"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT32")); + BoxSizer21->Add(StaticText32, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText33 = new wxStaticText(Panel3, ID_STATICTEXT33, _("Nodes per hidden layer"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT33")); + BoxSizer21->Add(StaticText33, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer8->Add(BoxSizer21, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer22 = new wxBoxSizer(wxVERTICAL); + Choice1 = new wxChoice(Panel3, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1")); + Choice1->SetSelection( Choice1->Append(_("Single MLP")) ); + Choice1->Append(_("Dual MLP")); + Choice1->Append(_("Simple RN")); + Choice1->Append(_("Fully RN")); + BoxSizer22->Add(Choice1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + Choice2 = new wxChoice(Panel3, ID_CHOICE2, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE2")); + Choice2->SetSelection( Choice2->Append(_("Neuron")) ); + Choice2->Append(_("Memory cell")); + BoxSizer22->Add(Choice2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + TextCtrl18 = new wxTextCtrl(Panel3, ID_TEXTCTRL18, _("80"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL18")); + BoxSizer22->Add(TextCtrl18, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + StaticBoxSizer8->Add(BoxSizer22, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer8, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Population parameters")); + BoxSizer25 = new wxBoxSizer(wxVERTICAL); + StaticText35 = new wxStaticText(Panel3, ID_STATICTEXT35, _("Sub-population size"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT35")); + BoxSizer25->Add(StaticText35, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText34 = new wxStaticText(Panel3, ID_STATICTEXT34, _("Sub-population quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT34")); + BoxSizer25->Add(StaticText34, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText36 = new wxStaticText(Panel3, ID_STATICTEXT36, _("Elites per generation"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT36")); + BoxSizer25->Add(StaticText36, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10->Add(BoxSizer25, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer26 = new wxBoxSizer(wxVERTICAL); + TextCtrl22 = new wxTextCtrl(Panel3, ID_TEXTCTRL22, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL22")); + BoxSizer26->Add(TextCtrl22, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl23 = new wxTextCtrl(Panel3, ID_TEXTCTRL23, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL23")); + BoxSizer26->Add(TextCtrl23, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl24 = new wxTextCtrl(Panel3, ID_TEXTCTRL24, _("40"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL24")); + BoxSizer26->Add(TextCtrl24, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer10->Add(BoxSizer26, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer10, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Fitness bonuses")); + BoxSizer23 = new wxBoxSizer(wxVERTICAL); + StaticText28 = new wxStaticText(Panel3, ID_STATICTEXT28, _("Per pellet"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT28")); + BoxSizer23->Add(StaticText28, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText30 = new wxStaticText(Panel3, ID_STATICTEXT30, _("Per guppy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT30")); + BoxSizer23->Add(StaticText30, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText29 = new wxStaticText(Panel3, ID_STATICTEXT29, _("Per corpse (max)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT29")); + BoxSizer23->Add(StaticText29, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9->Add(BoxSizer23, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer24 = new wxBoxSizer(wxVERTICAL); + TextCtrl19 = new wxTextCtrl(Panel3, ID_TEXTCTRL19, _("9000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL19")); + BoxSizer24->Add(TextCtrl19, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl20 = new wxTextCtrl(Panel3, ID_TEXTCTRL20, _("36000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL20")); + BoxSizer24->Add(TextCtrl20, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl21 = new wxTextCtrl(Panel3, ID_TEXTCTRL21, _("36000"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL21")); + BoxSizer24->Add(TextCtrl21, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer9->Add(BoxSizer24, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer20->Add(StaticBoxSizer9, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer6->Add(BoxSizer20, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer1 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Dish parameters")); + BoxSizer15 = new wxBoxSizer(wxVERTICAL); + StaticText2 = new wxStaticText(Panel3, ID_STATICTEXT2, _("Dish radius"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2")); + StaticText2->SetHelpText(_("Size of the circular dish that guppies live in")); + BoxSizer15->Add(StaticText2, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer1->Add(BoxSizer15, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer16 = new wxBoxSizer(wxVERTICAL); + TextCtrl1 = new wxTextCtrl(Panel3, ID_TEXTCTRL1, _("40"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); + BoxSizer16->Add(TextCtrl1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer1->Add(BoxSizer16, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Entity parameters")); + BoxSizer8 = new wxBoxSizer(wxVERTICAL); + StaticText3 = new wxStaticText(Panel3, ID_STATICTEXT3, _("Zapper random force"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3")); + BoxSizer8->Add(StaticText3, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText4 = new wxStaticText(Panel3, ID_STATICTEXT4, _("Zapper random torque"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4")); + BoxSizer8->Add(StaticText4, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText5 = new wxStaticText(Panel3, ID_STATICTEXT5, _("Zapper quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT5")); + BoxSizer8->Add(StaticText5, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText6 = new wxStaticText(Panel3, ID_STATICTEXT6, _("Pellet quantity"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT6")); + BoxSizer8->Add(StaticText6, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText7 = new wxStaticText(Panel3, ID_STATICTEXT7, _("Pellet creation delay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT7")); + BoxSizer8->Add(StaticText7, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText8 = new wxStaticText(Panel3, ID_STATICTEXT8, _("Start scarce"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT8")); + BoxSizer8->Add(StaticText8, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText9 = new wxStaticText(Panel3, ID_STATICTEXT9, _("Corpse decay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT9")); + BoxSizer8->Add(StaticText9, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText10 = new wxStaticText(Panel3, ID_STATICTEXT10, _("Corpse decay rate"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT10")); + BoxSizer8->Add(StaticText10, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2->Add(BoxSizer8, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer9 = new wxBoxSizer(wxVERTICAL); + TextCtrl2 = new wxTextCtrl(Panel3, ID_TEXTCTRL2, _("50"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL2")); + BoxSizer9->Add(TextCtrl2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl3 = new wxTextCtrl(Panel3, ID_TEXTCTRL3, _("150"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL3")); + BoxSizer9->Add(TextCtrl3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl4 = new wxTextCtrl(Panel3, ID_TEXTCTRL4, _("20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL4")); + BoxSizer9->Add(TextCtrl4, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl5 = new wxTextCtrl(Panel3, ID_TEXTCTRL5, _("400"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL5")); + BoxSizer9->Add(TextCtrl5, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl6 = new wxTextCtrl(Panel3, ID_TEXTCTRL6, _("150"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL6")); + BoxSizer9->Add(TextCtrl6, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox1 = new wxCheckBox(Panel3, ID_CHECKBOX1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1")); + CheckBox1->SetValue(false); + BoxSizer9->Add(CheckBox1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox2 = new wxCheckBox(Panel3, ID_CHECKBOX2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX2")); + CheckBox2->SetValue(true); + BoxSizer9->Add(CheckBox2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl8 = new wxTextCtrl(Panel3, ID_TEXTCTRL8, _("3600"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL8")); + BoxSizer9->Add(TextCtrl8, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer2->Add(BoxSizer9, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Colors")); + BoxSizer17 = new wxBoxSizer(wxVERTICAL); + StaticText22 = new wxStaticText(Panel3, ID_STATICTEXT22, _("Background"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT22")); + BoxSizer17->Add(StaticText22, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText23 = new wxStaticText(Panel3, ID_STATICTEXT23, _("Dish fill (fog)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT23")); + BoxSizer17->Add(StaticText23, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText24 = new wxStaticText(Panel3, ID_STATICTEXT24, _("Zappers"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT24")); + BoxSizer17->Add(StaticText24, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText25 = new wxStaticText(Panel3, ID_STATICTEXT25, _("Pellets"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT25")); + BoxSizer17->Add(StaticText25, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText26 = new wxStaticText(Panel3, ID_STATICTEXT26, _("Corpses"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT26")); + BoxSizer17->Add(StaticText26, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText27 = new wxStaticText(Panel3, ID_STATICTEXT27, _("Guppies"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT27")); + BoxSizer17->Add(StaticText27, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5->Add(BoxSizer17, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer18 = new wxBoxSizer(wxVERTICAL); + ColourPickerCtrl1 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL1, wxColour(15,15,15), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL1")); + BoxSizer18->Add(ColourPickerCtrl1, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl2 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL2, wxColour(0,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL2")); + BoxSizer18->Add(ColourPickerCtrl2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl3 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL3, wxColour(0,0,255), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL3")); + BoxSizer18->Add(ColourPickerCtrl3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl4 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL4, wxColour(0,255,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL4")); + BoxSizer18->Add(ColourPickerCtrl4, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl5 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL5, wxColour(255,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL5")); + BoxSizer18->Add(ColourPickerCtrl5, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + ColourPickerCtrl6 = new wxColourPickerCtrl(Panel3, ID_COLOURPICKERCTRL6, wxColour(255,0,0), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_COLOURPICKERCTRL6")); + BoxSizer18->Add(ColourPickerCtrl6, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer5->Add(BoxSizer18, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer7->Add(StaticBoxSizer5, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer6->Add(BoxSizer7, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10 = new wxBoxSizer(wxVERTICAL); + StaticBoxSizer3 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Guppy parameters")); + BoxSizer11 = new wxBoxSizer(wxVERTICAL); + StaticText11 = new wxStaticText(Panel3, ID_STATICTEXT11, _("Activation delay"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT11")); + BoxSizer11->Add(StaticText11, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText12 = new wxStaticText(Panel3, ID_STATICTEXT12, _("Thrust force"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT12")); + BoxSizer11->Add(StaticText12, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText13 = new wxStaticText(Panel3, ID_STATICTEXT13, _("Thrust radius"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT13")); + BoxSizer11->Add(StaticText13, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText14 = new wxStaticText(Panel3, ID_STATICTEXT14, _("Initial energy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT14")); + BoxSizer11->Add(StaticText14, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText15 = new wxStaticText(Panel3, ID_STATICTEXT15, _("Max energy"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT15")); + BoxSizer11->Add(StaticText15, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText16 = new wxStaticText(Panel3, ID_STATICTEXT16, _("Aging rate"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT16")); + BoxSizer11->Add(StaticText16, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText17 = new wxStaticText(Panel3, ID_STATICTEXT17, _("Leave corpse"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT17")); + BoxSizer11->Add(StaticText17, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer3->Add(BoxSizer11, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer12 = new wxBoxSizer(wxVERTICAL); + TextCtrl7 = new wxTextCtrl(Panel3, ID_TEXTCTRL7, _("120"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL7")); + BoxSizer12->Add(TextCtrl7, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl9 = new wxTextCtrl(Panel3, ID_TEXTCTRL9, _("5"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL9")); + BoxSizer12->Add(TextCtrl9, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl10 = new wxTextCtrl(Panel3, ID_TEXTCTRL10, _("0.05"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL10")); + BoxSizer12->Add(TextCtrl10, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl11 = new wxTextCtrl(Panel3, ID_TEXTCTRL11, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL11")); + BoxSizer12->Add(TextCtrl11, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl12 = new wxTextCtrl(Panel3, ID_TEXTCTRL12, _("180"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL12")); + BoxSizer12->Add(TextCtrl12, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl13 = new wxTextCtrl(Panel3, ID_TEXTCTRL13, _("600"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL13")); + BoxSizer12->Add(TextCtrl13, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + CheckBox3 = new wxCheckBox(Panel3, ID_CHECKBOX3, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX3")); + CheckBox3->SetValue(true); + BoxSizer12->Add(CheckBox3, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer3->Add(BoxSizer12, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer3, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Energy transfers")); + BoxSizer13 = new wxBoxSizer(wxVERTICAL); + StaticText18 = new wxStaticText(Panel3, ID_STATICTEXT18, _("From zappers"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT18")); + BoxSizer13->Add(StaticText18, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText19 = new wxStaticText(Panel3, ID_STATICTEXT19, _("From pellets"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT19")); + BoxSizer13->Add(StaticText19, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText20 = new wxStaticText(Panel3, ID_STATICTEXT20, _("From other guppies"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT20")); + BoxSizer13->Add(StaticText20, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticText21 = new wxStaticText(Panel3, ID_STATICTEXT21, _("From corpses (max)"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT21")); + BoxSizer13->Add(StaticText21, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4->Add(BoxSizer13, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer14 = new wxBoxSizer(wxVERTICAL); + TextCtrl14 = new wxTextCtrl(Panel3, ID_TEXTCTRL14, _("-20"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL14")); + BoxSizer14->Add(TextCtrl14, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl15 = new wxTextCtrl(Panel3, ID_TEXTCTRL15, _("15"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL15")); + BoxSizer14->Add(TextCtrl15, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl16 = new wxTextCtrl(Panel3, ID_TEXTCTRL16, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL16")); + BoxSizer14->Add(TextCtrl16, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + TextCtrl17 = new wxTextCtrl(Panel3, ID_TEXTCTRL17, _("60"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_TEXTCTRL17")); + BoxSizer14->Add(TextCtrl17, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer4->Add(BoxSizer14, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer4, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer6 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Load parameters")); + FilePickerCtrl2 = new wxFilePickerCtrl(Panel3, ID_FILEPICKERCTRL2, _T("prms/"), _("Load parameters"), _T("*.prms"), wxDefaultPosition, wxDefaultSize, wxFLP_FILE_MUST_EXIST|wxFLP_OPEN|wxFLP_USE_TEXTCTRL, wxDefaultValidator, _T("ID_FILEPICKERCTRL2")); + StaticBoxSizer6->Add(FilePickerCtrl2, 1, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer6, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + StaticBoxSizer7 = new wxStaticBoxSizer(wxHORIZONTAL, Panel3, _("Save parameters")); + FilePickerCtrl3 = new wxFilePickerCtrl(Panel3, ID_FILEPICKERCTRL3, _T("prms/"), _("Save parameters"), _T("*.prms"), wxDefaultPosition, wxDefaultSize, wxFLP_OVERWRITE_PROMPT|wxFLP_SAVE, wxDefaultValidator, _T("ID_FILEPICKERCTRL3")); + StaticBoxSizer7->Add(FilePickerCtrl3, 1, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Button5 = new wxButton(Panel3, ID_BUTTON5, _("Save as default"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON5")); + StaticBoxSizer7->Add(Button5, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(StaticBoxSizer7, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer19 = new wxBoxSizer(wxHORIZONTAL); + Button2 = new wxButton(Panel3, ID_BUTTON2, _("Begin new simulation"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); + BoxSizer19->Add(Button2, 1, wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + BoxSizer10->Add(BoxSizer19, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10); + BoxSizer6->Add(BoxSizer10, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel3->SetSizer(BoxSizer6); + BoxSizer6->Fit(Panel3); + BoxSizer6->SetSizeHints(Panel3); + Notebook1->AddPage(Panel4, _("Welcome"), false); + Notebook1->AddPage(Panel2, _("Load simulation"), false); + Notebook1->AddPage(Panel3, _("New simulation"), false); + BoxSizer2->Add(Notebook1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + Panel1->SetSizer(BoxSizer2); + BoxSizer2->Fit(Panel1); + BoxSizer2->SetSizeHints(Panel1); + BoxSizer1->Add(Panel1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); + SetSizer(BoxSizer1); + BoxSizer1->Fit(this); + BoxSizer1->SetSizeHints(this); + Center(); + + Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnButton4Click); + Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnButton3Click); + Connect(ID_CHECKBOX2,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnCheckBox2Click); + Connect(ID_FILEPICKERCTRL2,wxEVT_COMMAND_FILEPICKER_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnFilePickerCtrl2FileChanged); + Connect(ID_FILEPICKERCTRL3,wxEVT_COMMAND_FILEPICKER_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnFilePickerCtrl3FileChanged); + Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&Guppies1_0Dialog::OnBeginNewSimulation); + Connect(ID_NOTEBOOK1,wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED,(wxObjectEventFunction)&Guppies1_0Dialog::OnNotebook1PageChanged); + Connect(wxID_ANY,wxEVT_INIT_DIALOG,(wxObjectEventFunction)&Guppies1_0Dialog::OnInit); + //*) + + SetIcon(wxICON(aaaa)); +} + +Guppies1_0Dialog::~Guppies1_0Dialog() +{ + //(*Destroy(Guppies1_0Dialog) + //*) +} + +void Guppies1_0Dialog::OnQuit(wxCommandEvent& event) +{ + Close(); +} + +void Guppies1_0Dialog::OnAbout(wxCommandEvent& event) +{ + wxString msg = wxbuildinfo(long_f); + wxMessageBox(msg, _("Welcome to...")); +} + +void Guppies1_0Dialog::OnNotebook1PageChanged(wxNotebookEvent& event) +{ +} + +void Guppies1_0Dialog::OnInit(wxInitDialogEvent& event) +{ +} + +void Guppies1_0Dialog::OnButton4Click(wxCommandEvent& event) +{ + Notebook1->SetSelection(1); +} + +void Guppies1_0Dialog::OnButton3Click(wxCommandEvent& event) +{ + Notebook1->SetSelection(2); +} + +void Guppies1_0Dialog::OnCheckBox2Click(wxCommandEvent& event) +{ + if (CheckBox2->IsChecked()) + { + TextCtrl8->Enable(); + } + else + { + TextCtrl8->Disable(); + } +} + + +// APLICATION STARTUP POINT //////////////////////////////////////////////////// +#include "Simulation/GuppiesInclude.hpp" + +void Guppies1_0Dialog::OnBeginNewSimulation(wxCommandEvent& event) +{ + Params params; + + // Neural network parameters + switch(Choice1->GetCurrentSelection()) + { + case 0: + params.netClass = SINGLE_MLP; + break; + case 1: + params.netClass = DUAL_MLP; + break; + case 2: + params.netClass = SIMPLE_RN; + break; + case 3: + params.netClass = FULLY_RN; + break; + } + + switch (Choice2->GetCurrentSelection()) + { + case 0: + params.nodeClass = NEURON; + break; + case 1: + params.nodeClass = MEMORY_CELL; + break; + } + + unsigned npHiddenLayer = strtoul(TextCtrl18->GetLineText(0).mb_str(), nullptr, 0); + params.npHiddenLayer = npHiddenLayer; + + // Population parameters + unsigned popSize = strtoul(TextCtrl22->GetLineText(0).mb_str(), nullptr, 0); + params.popSize = popSize; + + unsigned popQtty = strtoul(TextCtrl23->GetLineText(0).mb_str(), nullptr, 0); + params.popQtty = popQtty; + + unsigned elites = strtoul(TextCtrl24->GetLineText(0).mb_str(), nullptr, 0); + params.elites = elites; + + // Fitness bonuses + int forPellet = strtol(TextCtrl19->GetLineText(0).mb_str(), nullptr, 0); + params.forPellet = forPellet; + + int forGuppie = strtol(TextCtrl20->GetLineText(0).mb_str(), nullptr, 0); + params.forGuppie = forGuppie; + + int forCorpse = strtol(TextCtrl21->GetLineText(0).mb_str(), nullptr, 0); + params.forCorpse = forCorpse; + + // World (dish) parameters + float worldRad = strtof(TextCtrl1->GetLineText(0).mb_str(), nullptr); + params.worldRad = worldRad; + + // Entity parameters + float zapperForce = strtof(TextCtrl2->GetLineText(0).mb_str(), nullptr); + params.zapperForce = zapperForce; + + float zapperTorque = strtof(TextCtrl3->GetLineText(0).mb_str(), nullptr); + params.zapperTorque = zapperTorque; + + unsigned zapperQtty = strtoul(TextCtrl4->GetLineText(0).mb_str(), nullptr, 0); + params.zapperQtty = zapperQtty; + + unsigned pelletQtty = strtoul(TextCtrl5->GetLineText(0).mb_str(), nullptr, 0); + params.pelletQtty = pelletQtty; + + unsigned pelletCreationDelay = strtoul(TextCtrl6->GetLineText(0).mb_str(), nullptr, 0); + params.pelletCreationDelay = pelletCreationDelay; + + params.startScarce = CheckBox1->IsChecked(); + params.corpseDecay = CheckBox2->IsChecked(); + + unsigned corpseDecayTime = strtoul(TextCtrl8->GetLineText(0).mb_str(), nullptr, 0); + params.corpseDecayTime = corpseDecayTime; + + // Colors + params.clearColor.r = ColourPickerCtrl1->GetColour().Red(); + params.clearColor.g = ColourPickerCtrl1->GetColour().Green(); + params.clearColor.b = ColourPickerCtrl1->GetColour().Blue(); + + params.worldColor.r = ColourPickerCtrl2->GetColour().Red(); + params.worldColor.g = ColourPickerCtrl2->GetColour().Green(); + params.worldColor.b = ColourPickerCtrl2->GetColour().Blue(); + + params.zapperColor.r = ColourPickerCtrl3->GetColour().Red(); + params.zapperColor.g = ColourPickerCtrl3->GetColour().Green(); + params.zapperColor.b = ColourPickerCtrl3->GetColour().Blue(); + + params.pelletColor.r = ColourPickerCtrl4->GetColour().Red(); + params.pelletColor.g = ColourPickerCtrl4->GetColour().Green(); + params.pelletColor.b = ColourPickerCtrl4->GetColour().Blue(); + + params.corpseColor.r = ColourPickerCtrl5->GetColour().Red(); + params.corpseColor.g = ColourPickerCtrl5->GetColour().Green(); + params.corpseColor.b = ColourPickerCtrl5->GetColour().Blue(); + + params.guppieColorI.r = ColourPickerCtrl6->GetColour().Red(); + params.guppieColorI.g = ColourPickerCtrl6->GetColour().Green(); + params.guppieColorI.b = ColourPickerCtrl6->GetColour().Blue(); + + // Guppie parameters + unsigned activationDelay = strtoul(TextCtrl7->GetLineText(0).mb_str(), nullptr, 0); + params.activationDelay = activationDelay; + + float thrustForce = strtof(TextCtrl9->GetLineText(0).mb_str(), nullptr); + params.thrustForce = thrustForce; + + float thrustRadius = strtof(TextCtrl10->GetLineText(0).mb_str(), nullptr); + params.thrustRadius = thrustRadius; + + float initEnergy = strtof(TextCtrl11->GetLineText(0).mb_str(), nullptr); + params.initEnergy = initEnergy; + + float maxEnergy = strtof(TextCtrl12->GetLineText(0).mb_str(), nullptr); + params.maxEnergy = maxEnergy; + + float agingRate = strtof(TextCtrl13->GetLineText(0).mb_str(), nullptr); + params.agingRate = agingRate; + + params.leaveCorpse = CheckBox3->IsChecked(); + + // Energy transfers + float etFromZapper = strtof(TextCtrl14->GetLineText(0).mb_str(), nullptr); + params.etFromZapper = etFromZapper; + + float etFromPellet = strtof(TextCtrl15->GetLineText(0).mb_str(), nullptr); + params.etFromPellet = etFromPellet; + + float etFromGuppie = strtof(TextCtrl16->GetLineText(0).mb_str(), nullptr); + params.etFromGuppie = etFromGuppie; + + float etFromCorpse = strtof(TextCtrl17->GetLineText(0).mb_str(), nullptr); + params.etFromCorpse = etFromCorpse; + + // BEGIN SIMULATION ======================================================// + Close(); + + SimFitness simulation; + simulation.createNew(params); + simulation.execute(); +} + +void Guppies1_0Dialog::OnFilePickerCtrl2FileChanged(wxFileDirPickerEvent& event) +{ +} + +void Guppies1_0Dialog::OnFilePickerCtrl3FileChanged(wxFileDirPickerEvent& event) +{ + wxTextFile file(FilePickerCtrl3->GetPath()); + file.Create(); + + file.AddLine("[BEGIN PARAMS]"); + + file.AddLine(wxString::Format(("%i"), (int)Choice1->GetCurrentSelection())); + file.AddLine(wxString::Format(("%i"), (int)Choice2->GetCurrentSelection())); + + file.AddLine(TextCtrl18->GetLineText(0)); + + file.AddLine(TextCtrl22->GetLineText(0)); + file.AddLine(TextCtrl23->GetLineText(0)); + file.AddLine(TextCtrl24->GetLineText(0)); + + file.AddLine(TextCtrl19->GetLineText(0)); + file.AddLine(TextCtrl20->GetLineText(0)); + file.AddLine(TextCtrl21->GetLineText(0)); + + file.AddLine(TextCtrl1->GetLineText(0)); + + file.AddLine(TextCtrl2->GetLineText(0)); + file.AddLine(TextCtrl3->GetLineText(0)); + file.AddLine(TextCtrl4->GetLineText(0)); + file.AddLine(TextCtrl5->GetLineText(0)); + file.AddLine(TextCtrl6->GetLineText(0)); + + file.AddLine(wxString::Format(("%i"), (int)CheckBox1->IsChecked())); + file.AddLine(wxString::Format(("%i"), (int)CheckBox2->IsChecked())); + + file.AddLine(TextCtrl8->GetLineText(0)); + + file.AddLine(ColourPickerCtrl1->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl2->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl3->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl4->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl5->GetColour().GetAsString()); + file.AddLine(ColourPickerCtrl6->GetColour().GetAsString()); + + file.AddLine(TextCtrl7->GetLineText(0)); + file.AddLine(TextCtrl9->GetLineText(0)); + file.AddLine(TextCtrl10->GetLineText(0)); + file.AddLine(TextCtrl11->GetLineText(0)); + file.AddLine(TextCtrl12->GetLineText(0)); + file.AddLine(TextCtrl13->GetLineText(0)); + + file.AddLine(wxString::Format(("%i"), (int)CheckBox3->IsChecked())); + + file.AddLine(TextCtrl14->GetLineText(0)); + file.AddLine(TextCtrl15->GetLineText(0)); + file.AddLine(TextCtrl16->GetLineText(0)); + file.AddLine(TextCtrl17->GetLineText(0)); + + file.AddLine("[END PARAMS]"); + + file.Write(); + file.Close(); +} |