diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-05-13 19:00:22 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-05-13 19:00:22 (GMT) |
| commit | 7758fe52cb9ef78b562bc2587b17b6344d8829fe (patch) | |
| tree | 92f45320d240148f6e518ed07aec480e329d4a25 /src/options | |
| parent | 4032a0469b1f40f7197468f34986e365bd6e7314 (diff) | |
| download | powder-7758fe52cb9ef78b562bc2587b17b6344d8829fe.zip powder-7758fe52cb9ef78b562bc2587b17b6344d8829fe.tar.gz | |
DropDown UI component
Diffstat (limited to 'src/options')
| -rw-r--r-- | src/options/OptionsController.cpp | 8 | ||||
| -rw-r--r-- | src/options/OptionsController.h | 2 | ||||
| -rw-r--r-- | src/options/OptionsModel.cpp | 21 | ||||
| -rw-r--r-- | src/options/OptionsModel.h | 4 | ||||
| -rw-r--r-- | src/options/OptionsView.cpp | 41 |
5 files changed, 71 insertions, 5 deletions
diff --git a/src/options/OptionsController.cpp b/src/options/OptionsController.cpp index b39509c..85f2a2f 100644 --- a/src/options/OptionsController.cpp +++ b/src/options/OptionsController.cpp @@ -38,6 +38,14 @@ void OptionsController::SetWaterEqualisation(bool state) { model->SetWaterEqualisation(state); } +void OptionsController::SetGravityMode(int gravityMode) +{ + model->SetGravityMode(gravityMode); +} +void OptionsController::SetAirMode(int airMode) +{ + model->SetAirMode(airMode); +} OptionsView * OptionsController::GetView() { diff --git a/src/options/OptionsController.h b/src/options/OptionsController.h index 18bbf4e..19f0e9b 100644 --- a/src/options/OptionsController.h +++ b/src/options/OptionsController.h @@ -26,6 +26,8 @@ public: void SetAmbientHeatSimulation(bool state); void SetNewtonianGravity(bool state); void SetWaterEqualisation(bool state); + void SetGravityMode(int gravityMode); + void SetAirMode(int airMode); void Exit(); OptionsView * GetView(); virtual ~OptionsController(); diff --git a/src/options/OptionsModel.cpp b/src/options/OptionsModel.cpp index c0a69f5..3891d41 100644 --- a/src/options/OptionsModel.cpp +++ b/src/options/OptionsModel.cpp @@ -5,6 +5,7 @@ * Author: Simon */ +#include "Air.h" #include "OptionsModel.h" OptionsModel::OptionsModel(Simulation * sim_) { @@ -64,6 +65,26 @@ void OptionsModel::SetWaterEqualisation(bool state) notifySettingsChanged(); } +int OptionsModel::GetAirMode() +{ + return sim->air->airMode; +} +void OptionsModel::SetAirMode(int airMode) +{ + sim->air->airMode = airMode; + notifySettingsChanged(); +} + +int OptionsModel::GetGravityMode() +{ + return sim->gravityMode; +} +void OptionsModel::SetGravityMode(int gravityMode) +{ + sim->gravityMode = gravityMode; + notifySettingsChanged(); +} + void OptionsModel::notifySettingsChanged() { for(int i = 0; i < observers.size(); i++) diff --git a/src/options/OptionsModel.h b/src/options/OptionsModel.h index 903f3b7..8f83fc8 100644 --- a/src/options/OptionsModel.h +++ b/src/options/OptionsModel.h @@ -28,6 +28,10 @@ public: void SetNewtonianGravity(bool state); bool GetWaterEqualisation(); void SetWaterEqualisation(bool state); + int GetAirMode(); + void SetAirMode(int airMode); + int GetGravityMode(); + void SetGravityMode(int gravityMode); virtual ~OptionsModel(); }; diff --git a/src/options/OptionsView.cpp b/src/options/OptionsView.cpp index d863844..d1066a8 100644 --- a/src/options/OptionsView.cpp +++ b/src/options/OptionsView.cpp @@ -8,6 +8,7 @@ #include "OptionsView.h" #include "interface/Button.h" #include "interface/Label.h" +#include "interface/DropDown.h" OptionsView::OptionsView(): ui::Window(ui::Point(-1, -1), ui::Point(300, 300)){ @@ -77,14 +78,42 @@ OptionsView::OptionsView(): tempLabel->SetAlignment(AlignLeft, AlignMiddle); AddComponent(tempLabel); - airMode = new ui::DropDown(ui::Point(Size.X-55, 143), ui::Point(50, 16));//, "Water equalisation \bgIntroduced in version 61"); - //airMode->SetActionCallback(new WaterEqualisationAction(this)); + class AirModeChanged: public ui::DropDownAction + { + OptionsView * v; + public: + AirModeChanged(OptionsView * v): v(v) { } + virtual void OptionChanged(ui::DropDown * sender, std::pair<std::string, int> option) { v->c->SetAirMode(option.second); } + }; + airMode = new ui::DropDown(ui::Point(Size.X-85, 143), ui::Point(80, 16)); AddComponent(airMode); - tempLabel = new ui::Label(ui::Point(3, 143), ui::Point(Size.X-24, 16), "Air Simulation Mode"); + airMode->AddOption(std::pair<std::string, int>("On", 0)); + airMode->AddOption(std::pair<std::string, int>("Pressure off", 1)); + airMode->AddOption(std::pair<std::string, int>("Velocity off", 2)); + airMode->AddOption(std::pair<std::string, int>("Off", 3)); + airMode->AddOption(std::pair<std::string, int>("No Update", 4)); + airMode->SetActionCallback(new AirModeChanged(this)); + + tempLabel = new ui::Label(ui::Point(3, 143), ui::Point(Size.X-90, 16), "Air Simulation Mode"); tempLabel->SetAlignment(AlignLeft, AlignMiddle); AddComponent(tempLabel); - - tempLabel = new ui::Label(ui::Point(3, 163), ui::Point(Size.X-24, 16), "Gravity Simulation Mode"); + + class GravityModeChanged: public ui::DropDownAction + { + OptionsView * v; + public: + GravityModeChanged(OptionsView * v): v(v) { } + virtual void OptionChanged(ui::DropDown * sender, std::pair<std::string, int> option) { v->c->SetGravityMode(option.second); } + }; + + gravityMode = new ui::DropDown(ui::Point(Size.X-85, 163), ui::Point(80, 16)); + AddComponent(gravityMode); + gravityMode->AddOption(std::pair<std::string, int>("Vertical", 0)); + gravityMode->AddOption(std::pair<std::string, int>("Off", 1)); + gravityMode->AddOption(std::pair<std::string, int>("Radial", 2)); + gravityMode->SetActionCallback(new GravityModeChanged(this)); + + tempLabel = new ui::Label(ui::Point(3, 163), ui::Point(Size.X-90, 16), "Gravity Simulation Mode"); tempLabel->SetAlignment(AlignLeft, AlignMiddle); AddComponent(tempLabel); @@ -111,6 +140,8 @@ void OptionsView::NotifySettingsChanged(OptionsModel * sender) ambientHeatSimulation->SetChecked(sender->GetAmbientHeatSimulation()); newtonianGravity->SetChecked(sender->GetNewtonianGravity()); waterEqualisation->SetChecked(sender->GetWaterEqualisation()); + airMode->SetOption(sender->GetAirMode()); + gravityMode->SetOption(sender->GetGravityMode()); } void OptionsView::AttachController(OptionsController * c_) |
