summaryrefslogtreecommitdiff
path: root/src/options
diff options
context:
space:
mode:
authorSimon 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)
commit7758fe52cb9ef78b562bc2587b17b6344d8829fe (patch)
tree92f45320d240148f6e518ed07aec480e329d4a25 /src/options
parent4032a0469b1f40f7197468f34986e365bd6e7314 (diff)
downloadpowder-7758fe52cb9ef78b562bc2587b17b6344d8829fe.zip
powder-7758fe52cb9ef78b562bc2587b17b6344d8829fe.tar.gz
DropDown UI component
Diffstat (limited to 'src/options')
-rw-r--r--src/options/OptionsController.cpp8
-rw-r--r--src/options/OptionsController.h2
-rw-r--r--src/options/OptionsModel.cpp21
-rw-r--r--src/options/OptionsModel.h4
-rw-r--r--src/options/OptionsView.cpp41
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_)