Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Add a menu bar to the application with the ability to open the settings dialog. Instructions Menu Bar There is currently no way to open

Add a menu bar to the application with the ability to open the settings dialog.

Instructions

Menu Bar

There is currently no way to open the newly created settings dialog.  In order to open this dialog, a menu bar will need to be added to the main window.
Two types of menu related objects will be used for this.  wxMenuBar and wxMenu.  The wxMenuBar is the entire menu bar that goes across the top of the window.  The wxMenu represents one of the drop down menus that is part of that bar.  There will only be one wxMenuBar, but there will be multiple wxMenu objects.
Make a wxMenuBar* that will represent the entire menu bar.  Once instantiated, tell the main window that this variable should be used as the menu bar by calling SetMenuBar and passing the wxMenuBar* as the argument.
Make a wxMenu* to represent the Options menu and instantiate it to a new wxMenu();
An option needs to be added to this menu using the Append method.  Append takes two arguments, an ID (which we need to know) and the text for the menu option.
Now that an item has been added to the menu, the menu needs to be added to the menu bar.  This is also done with the Append method.  This append method takes in two arguments, the menu to be added and the text to show in the menu bar.
Each item in each menu needs a corresponding event.  The event is a EVT_MENU, just like the tool bar button events.  Add an EVT_MENU event to the event table and create a corresponding event handler method.
Setting Menu Handler

In the event handler method that was just created, create an instance of the settings dialog object.  Remember to pass in the setting object as a pointer.
This window could be opened by calling Show() in the same way that the main window was opened in App.cs, but that's not how a dialog box typically works.  To open the settings dialog, call ShowModal();
ShowModal will return a value based on whether the OK button or CANCEL button was clicked.  To check for the OK button being clicked put ShowModal in an if statement to see if it equals wxID_OK.
If OK was clicked, then call the grid initialization method and then tell the drawing panel to refresh.  Any change in grid size or color should be visible after clicking OK from the settings dialog.
Check where the game board is being cleared.  It's possible that it is being cleared in a spot that reset the entire board every time the settings dialog is closed.  That can be changed if it is not the desired behavior.
 


wxBEGIN_EVENT_TABLE(SettingsDialog, wxDialog)
EVT_SPINCTRL(wxID_ANY, SettingsDialog::OnSpinCtrl)
EVT_COLOURPICKER_CHANGED(wxID_ANY, SettingsDialog::OnColorPickerChanged)
EVT_BUTTON(wxID_OK, SettingsDialog::OnOk)
EVT_BUTTON(wxID_CANCEL, SettingsDialog::OnCancel)

wxEND_EVENT_TABLE()

SettingsDialog::SettingsDialog(wxWindow* parent, GameSettings* settings)
: wxDialog(parent, wxID_ANY, "Settings")
{
// Create main vertical sizer
wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
SetSizer(mainSizer);

// Create spin control sizer
wxBoxSizer* spinSizer = new wxBoxSizer(wxHORIZONTAL);
wxStaticText* spinLabel = new wxStaticText(this, wxID_ANY, "Spin Control");

spinCtrl = new wxSpinCtrl(this, wxID_ANY);

spinSizer->Add(spinLabel, 0, wxALL, 5);
spinSizer->Add(spinCtrl, 0, wxALL, 5);
mainSizer->Add(spinSizer);

// Create color picker sizer
wxBoxSizer* colorSizer = new wxBoxSizer(wxHORIZONTAL);
wxStaticText* colorLabel = new wxStaticText(this, wxID_ANY, "Color Picker");

colorPickerCtrl = new wxColourPickerCtrl(this, wxID_ANY);

colorSizer->Add(colorLabel, 0, wxALL, 5);
colorSizer->Add(colorPickerCtrl, 0, wxALL, 5);
mainSizer->Add(colorSizer);

// Create OK and Cancel buttons sizer
wxSizer* buttonSizer = CreateButtonSizer(wxOK | wxCANCEL);
mainSizer->Add(buttonSizer, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, 10);

// Set initial values from settings object
spinCtrl->SetValue(settings->gridSize);
   colorPickerCtrl->SetColour(settings->GetLivingCellColor());

}

void SettingsDialog::OnSpinCtrl(wxSpinEvent& event)
{
// Save spin control value to settings object
settings->gridSize = event.GetPosition();
}

void SettingsDialog::OnColorPickerChanged(wxColourPickerEvent& event)
{
// Save color picker value to settings object
settings->GetLivingCellColor() = event.GetColour();
}

void SettingsDialog::OnOk(wxCommandEvent& event)
{

}

void SettingsDialog::OnCancel(wxCommandEvent& event)
{

}


Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Microeconomics

Authors: Douglas Bernheim, Michael Whinston

2nd edition

73375853, 978-0073375854

More Books

Students also viewed these Algorithms questions