summaryrefslogtreecommitdiff
path: root/src/gui/render
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-03-22 14:14:17 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-03-22 14:14:17 (GMT)
commit9abe51526cac2634af0541c3de69834dd30e9f78 (patch)
tree6ae4deadfe00a83094b9d288d8c11d8ce823577a /src/gui/render
parent2c311b9a36a88fadd96f3d39acb1ab2590835d81 (diff)
downloadpowder-9abe51526cac2634af0541c3de69834dd30e9f78.zip
powder-9abe51526cac2634af0541c3de69834dd30e9f78.tar.gz
Move all GUI source files into gui/
Diffstat (limited to 'src/gui/render')
-rw-r--r--src/gui/render/RenderController.cpp67
-rw-r--r--src/gui/render/RenderController.h29
-rw-r--r--src/gui/render/RenderModel.cpp135
-rw-r--r--src/gui/render/RenderModel.h35
-rw-r--r--src/gui/render/RenderView.cpp401
-rw-r--r--src/gui/render/RenderView.h43
6 files changed, 710 insertions, 0 deletions
diff --git a/src/gui/render/RenderController.cpp b/src/gui/render/RenderController.cpp
new file mode 100644
index 0000000..7b60e97
--- /dev/null
+++ b/src/gui/render/RenderController.cpp
@@ -0,0 +1,67 @@
+#include "RenderController.h"
+
+RenderController::RenderController(Renderer * ren, ControllerCallback * callback):
+ HasExited(false)
+{
+ renderView = new RenderView();
+ renderModel = new RenderModel();
+
+ renderView->AttachController(this);
+ renderModel->AddObserver(renderView);
+
+ renderModel->SetRenderer(ren);
+ this->callback = callback;
+}
+
+void RenderController::SetRenderMode(unsigned int renderMode)
+{
+ renderModel->SetRenderMode(renderMode);
+}
+
+void RenderController::UnsetRenderMode(unsigned int renderMode)
+{
+ renderModel->UnsetRenderMode(renderMode);
+}
+
+void RenderController::SetDisplayMode(unsigned int renderMode)
+{
+ renderModel->SetDisplayMode(renderMode);
+}
+
+void RenderController::UnsetDisplayMode(unsigned int renderMode)
+{
+ renderModel->UnsetDisplayMode(renderMode);
+}
+
+void RenderController::SetColourMode(unsigned int renderMode)
+{
+ renderModel->SetColourMode(renderMode);
+}
+
+void RenderController::LoadRenderPreset(int presetNum)
+{
+ renderModel->LoadRenderPreset(presetNum);
+}
+
+void RenderController::Exit()
+{
+ if(ui::Engine::Ref().GetWindow() == renderView)
+ {
+ ui::Engine::Ref().CloseWindow();
+ }
+ if(callback)
+ callback->ControllerExit();
+ HasExited = true;
+}
+
+RenderController::~RenderController() {
+ if(ui::Engine::Ref().GetWindow() == renderView)
+ {
+ ui::Engine::Ref().CloseWindow();
+ }
+ if(callback)
+ delete callback;
+ delete renderModel;
+ delete renderView;
+}
+
diff --git a/src/gui/render/RenderController.h b/src/gui/render/RenderController.h
new file mode 100644
index 0000000..42adb65
--- /dev/null
+++ b/src/gui/render/RenderController.h
@@ -0,0 +1,29 @@
+#ifndef RENDERCONTROLLER_H_
+#define RENDERCONTROLLER_H_
+
+#include "RenderView.h"
+#include "RenderModel.h"
+#include "graphics/Renderer.h"
+#include "Controller.h"
+
+class RenderView;
+class RenderModel;
+class RenderController {
+ RenderView * renderView;
+ RenderModel * renderModel;
+ ControllerCallback * callback;
+public:
+ bool HasExited;
+ RenderController(Renderer * ren, ControllerCallback * callback = NULL);
+ void Exit();
+ RenderView * GetView() { return renderView; }
+ virtual ~RenderController();
+ void SetRenderMode(unsigned int renderMode);
+ void UnsetRenderMode(unsigned int renderMode);
+ void SetDisplayMode(unsigned int renderMode);
+ void UnsetDisplayMode(unsigned int renderMode);
+ void SetColourMode(unsigned int renderMode);
+ void LoadRenderPreset(int presetNum);
+};
+
+#endif /* RENDERCONTROLLER_H_ */
diff --git a/src/gui/render/RenderModel.cpp b/src/gui/render/RenderModel.cpp
new file mode 100644
index 0000000..b17f6fc
--- /dev/null
+++ b/src/gui/render/RenderModel.cpp
@@ -0,0 +1,135 @@
+#include "RenderModel.h"
+
+RenderModel::RenderModel():
+ renderer(NULL)
+{
+
+}
+
+void RenderModel::AddObserver(RenderView * observer)
+{
+ observers.push_back(observer);
+ observer->NotifyRendererChanged(this);
+ observer->NotifyRenderChanged(this);
+ observer->NotifyDisplayChanged(this);
+ observer->NotifyColourChanged(this);
+}
+
+void RenderModel::SetRenderMode(unsigned int renderMode)
+{
+ if(renderer)
+ renderer->AddRenderMode(renderMode);
+ notifyRenderChanged();
+}
+
+void RenderModel::UnsetRenderMode(unsigned int renderMode)
+{
+ if(renderer)
+ renderer->RemoveRenderMode(renderMode);
+ notifyRenderChanged();
+}
+
+unsigned int RenderModel::GetRenderMode()
+{
+ if(renderer)
+ return renderer->render_mode;
+ else
+ return 0;
+}
+
+void RenderModel::SetDisplayMode(unsigned int displayMode)
+{
+ if(renderer)
+ renderer->AddDisplayMode(displayMode);
+ notifyDisplayChanged();
+}
+
+void RenderModel::UnsetDisplayMode(unsigned int displayMode)
+{
+ if(renderer)
+ renderer->RemoveDisplayMode(displayMode);
+ notifyDisplayChanged();
+}
+
+unsigned int RenderModel::GetDisplayMode()
+{
+ if(renderer)
+ return renderer->display_mode;
+ else
+ return 0;
+}
+
+void RenderModel::SetColourMode(unsigned int colourMode)
+{
+ if(renderer)
+ renderer->SetColourMode(colourMode);
+ notifyColourChanged();
+}
+
+unsigned int RenderModel::GetColourMode()
+{
+ if(renderer)
+ return renderer->colour_mode;
+ else
+ return 0;
+}
+
+void RenderModel::LoadRenderPreset(int presetNum)
+{
+ RenderPreset preset = renderer->renderModePresets[presetNum];
+ renderer->SetRenderMode(preset.RenderModes);
+ renderer->SetDisplayMode(preset.DisplayModes);
+ renderer->SetColourMode(preset.ColourMode);
+ notifyRenderChanged();
+ notifyDisplayChanged();
+ notifyColourChanged();
+}
+
+void RenderModel::SetRenderer(Renderer * ren)
+{
+ renderer = ren;
+ notifyRendererChanged();
+ notifyRenderChanged();
+ notifyDisplayChanged();
+ notifyColourChanged();
+}
+
+Renderer * RenderModel::GetRenderer()
+{
+ return renderer;
+}
+
+void RenderModel::notifyRendererChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyRendererChanged(this);
+ }
+}
+
+void RenderModel::notifyRenderChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyRenderChanged(this);
+ }
+}
+
+void RenderModel::notifyDisplayChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyDisplayChanged(this);
+ }
+}
+
+void RenderModel::notifyColourChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyColourChanged(this);
+ }
+}
+
+RenderModel::~RenderModel() {
+}
diff --git a/src/gui/render/RenderModel.h b/src/gui/render/RenderModel.h
new file mode 100644
index 0000000..2cd24a5
--- /dev/null
+++ b/src/gui/render/RenderModel.h
@@ -0,0 +1,35 @@
+#ifndef RENDERMODEL_H_
+#define RENDERMODEL_H_
+
+#include <vector>
+#include "RenderView.h"
+#include "graphics/Renderer.h"
+
+using namespace std;
+
+class RenderView;
+class RenderModel {
+ vector<RenderView*> observers;
+ Renderer * renderer;
+ void notifyRendererChanged();
+ void notifyRenderChanged();
+ void notifyDisplayChanged();
+ void notifyColourChanged();
+public:
+ RenderModel();
+ Renderer * GetRenderer();
+ void AddObserver(RenderView * observer);
+ void SetRenderer(Renderer * ren);
+ void SetRenderMode(unsigned int renderMode);
+ void UnsetRenderMode(unsigned int renderMode);
+ unsigned int GetRenderMode();
+ void SetDisplayMode(unsigned int displayMode);
+ void UnsetDisplayMode(unsigned int displayMode);
+ unsigned int GetDisplayMode();
+ void SetColourMode(unsigned int colourMode);
+ unsigned int GetColourMode();
+ void LoadRenderPreset(int presetNum);
+ virtual ~RenderModel();
+};
+
+#endif /* RENDERMODEL_H_ */
diff --git a/src/gui/render/RenderView.cpp b/src/gui/render/RenderView.cpp
new file mode 100644
index 0000000..508ff47
--- /dev/null
+++ b/src/gui/render/RenderView.cpp
@@ -0,0 +1,401 @@
+#include "simulation/ElementGraphics.h"
+#include "graphics/Graphics.h"
+#include "graphics/Renderer.h"
+#include "RenderView.h"
+
+class RenderView::RenderModeAction: public ui::CheckboxAction
+{
+ RenderView * v;
+public:
+ unsigned int renderMode;
+ RenderModeAction(RenderView * v_, unsigned int renderMode_)
+ {
+ v = v_;
+ renderMode = renderMode_;
+ }
+ virtual void ActionCallback(ui::Checkbox * sender)
+ {
+ if(sender->GetChecked())
+ v->c->SetRenderMode(renderMode);
+ else
+ v->c->UnsetRenderMode(renderMode);
+ }
+};
+
+class RenderView::DisplayModeAction: public ui::CheckboxAction
+{
+ RenderView * v;
+public:
+ unsigned int displayMode;
+ DisplayModeAction(RenderView * v_, unsigned int displayMode_)
+ {
+ v = v_;
+ displayMode = displayMode_;
+ }
+ virtual void ActionCallback(ui::Checkbox * sender)
+ {
+ if(sender->GetChecked())
+ v->c->SetDisplayMode(displayMode);
+ else
+ v->c->UnsetDisplayMode(displayMode);
+ }
+};
+
+class RenderView::ColourModeAction: public ui::CheckboxAction
+{
+ RenderView * v;
+public:
+ unsigned int colourMode;
+ ColourModeAction(RenderView * v_, unsigned int colourMode_)
+ {
+ v = v_;
+ colourMode = colourMode_;
+ }
+ virtual void ActionCallback(ui::Checkbox * sender)
+ {
+ if(sender->GetChecked())
+ v->c->SetColourMode(colourMode);
+ else
+ v->c->SetColourMode(0);
+ }
+};
+
+class RenderView::RenderPresetAction: public ui::ButtonAction
+{
+ RenderView * v;
+public:
+ int renderPreset;
+ RenderPresetAction(RenderView * v_, int renderPreset_)
+ {
+ v = v_;
+ renderPreset = renderPreset_;
+ }
+ virtual void ActionCallback(ui::Button * sender)
+ {
+ v->c->LoadRenderPreset(renderPreset);
+ }
+};
+
+RenderView::RenderView():
+ ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)),
+ toolTip(""),
+ toolTipPresence(0),
+ ren(NULL)
+{
+ ui::Button * presetButton;
+ int presetButtonOffset = 375;
+ int checkboxOffset = 1;
+ int cSpace = 32;
+ int sSpace = 38;
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+200, YRES+6), ui::Point(30, 13), "", "Velocity display mode preset");
+ presetButton->SetIcon(IconVelocity);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 1));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+200, YRES+6+18), ui::Point(30, 13), "", "Pressure display mode preset");
+ presetButton->SetIcon(IconPressure);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 2));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+161, YRES+6), ui::Point(30, 13), "", "Persistent display mode preset");
+ presetButton->SetIcon(IconPersistant);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 3));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+161, YRES+6+18), ui::Point(30, 13), "", "Fire display mode preset");
+ presetButton->SetIcon(IconFire);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 4));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+122, YRES+6), ui::Point(30, 13), "", "Blob display mode preset");
+ presetButton->SetIcon(IconBlob);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 5));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+122, YRES+6+18), ui::Point(30, 13), "", "Heat display mode preset");
+ presetButton->SetIcon(IconHeat);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 6));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+83, YRES+6), ui::Point(30, 13), "", "Fancy display mode preset");
+ presetButton->SetIcon(IconBlur);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 7));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+83, YRES+6+18), ui::Point(30, 13), "", "Nothing display mode preset");
+ presetButton->SetIcon(IconBasic);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 8));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+44, YRES+6), ui::Point(30, 13), "", "Heat gradient display mode preset");
+ presetButton->SetIcon(IconGradient);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 9));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+44, YRES+6+18), ui::Point(30, 13), "", "Alternative Velocity display mode preset");
+ presetButton->SetIcon(IconAltAir);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 0));
+ AddComponent(presetButton);
+
+ presetButton = new ui::Button(ui::Point(presetButtonOffset+5, YRES+6), ui::Point(30, 13), "", "Life display mode preset");
+ presetButton->SetIcon(IconLife);
+ presetButton->SetActionCallback(new RenderPresetAction(this, 10));
+ AddComponent(presetButton);
+
+ ui::Checkbox * tCheckbox;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effects", "Adds Special flare effects to some elements");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconEffect);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_EFFE));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Fire", "Fire effect for gasses");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconFire);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_FIRE));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += cSpace;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Glow", "Glow effect on some elements");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconGlow);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_GLOW));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Blur", "Blur effect for liquids");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconBlur);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLUR));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += cSpace;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Blob", "Makes everything be drawn like a blob");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconBlob);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Point", "Basic rendering, without this, most things will be invisible");
+ renderModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconBasic);
+ tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BASC));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += sSpace;
+ line1 = checkboxOffset-5;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Alt. Air", "Displays pressure as red and blue, and velocity as white");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconAltAir);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRC));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Pressure", "Displays pressure, red is positive and blue is negative");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconPressure);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRP));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += cSpace;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Velocity", "Displays velocity and positive pressure: up/down adds blue, right/left adds red, still pressure adds green");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconVelocity);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRV));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Air-heat", "Displays the temperature of the air like heat display does");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconHeat);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIRH));
+ AddComponent(tCheckbox);
+
+ /*tCheckbox = new ui::Checkbox(ui::Point(216, YRES+4), ui::Point(30, 16), "Air", "");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconAltAir);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_AIR));
+ AddComponent(tCheckbox);*/
+
+ checkboxOffset += sSpace;
+ line2 = checkboxOffset-5;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Warp", "Gravity lensing, Newtonian Gravity bends light with this on");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconWarp);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_WARP));
+ AddComponent(tCheckbox);
+
+#ifdef OGLR
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effect", "I don't know what this does..."); //I would remove the whole checkbox, but then there's a large empty space
+#else
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Effect", "Does nothing");
+#endif
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconEffect);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_EFFE));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += cSpace;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Persistent", "Element paths persist on the screen for a while");
+ displayModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconPersistant);
+ tCheckbox->SetActionCallback(new DisplayModeAction(this, DISPLAY_PERS));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += sSpace;
+ line3 = checkboxOffset-5;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Heat", "Displays temperatures of the elements, dark blue is coldest, pink is hottest");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconHeat);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_HEAT));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "Life", "Displays the life value of elements in greyscale gradients");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconLife);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_LIFE));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += cSpace;
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4+18), ui::Point(30, 16), "H-Gradient", "Changes colors of elements slightly to show heat diffusing through them");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconGradient);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_GRAD));
+ AddComponent(tCheckbox);
+
+ tCheckbox = new ui::Checkbox(ui::Point(checkboxOffset, YRES+4), ui::Point(30, 16), "Basic", "No special effects at all for anything, overrides all other options and deco");
+ colourModes.push_back(tCheckbox);
+ tCheckbox->SetIcon(IconBasic);
+ tCheckbox->SetActionCallback(new ColourModeAction(this, COLOUR_BASC));
+ AddComponent(tCheckbox);
+
+ checkboxOffset += sSpace;
+ line4 = checkboxOffset-5;
+}
+
+void RenderView::OnMouseDown(int x, int y, unsigned button)
+{
+ if(x > XRES || y < YRES)
+ c->Exit();
+}
+
+void RenderView::NotifyRendererChanged(RenderModel * sender)
+{
+ ren = sender->GetRenderer();
+}
+
+void RenderView::NotifyRenderChanged(RenderModel * sender)
+{
+ for(int i = 0; i < renderModes.size(); i++)
+ {
+ if(renderModes[i]->GetActionCallback())
+ {
+ //Compares bitmasks at the moment, this means that "Point" is always on when other options that depend on it are, this might confuse some users, TODO: get the full list and compare that?
+ RenderModeAction * action = (RenderModeAction *)(renderModes[i]->GetActionCallback());
+ if(action->renderMode == (sender->GetRenderMode() & action->renderMode))
+ {
+ renderModes[i]->SetChecked(true);
+ }
+ else
+ {
+ renderModes[i]->SetChecked(false);
+ }
+ }
+ }
+}
+
+void RenderView::NotifyDisplayChanged(RenderModel * sender)
+{
+ for(int i = 0; i < displayModes.size(); i++)
+ {
+ if(displayModes[i]->GetActionCallback())
+ {
+ DisplayModeAction * action = (DisplayModeAction *)(displayModes[i]->GetActionCallback());
+ if(action->displayMode == (sender->GetDisplayMode() & action->displayMode))
+ {
+ displayModes[i]->SetChecked(true);
+ }
+ else
+ {
+ displayModes[i]->SetChecked(false);
+ }
+ }
+ }
+}
+
+void RenderView::NotifyColourChanged(RenderModel * sender)
+{
+ for(int i = 0; i < colourModes.size(); i++)
+ {
+ if(colourModes[i]->GetActionCallback())
+ {
+ ColourModeAction * action = (ColourModeAction *)(colourModes[i]->GetActionCallback());
+ if(action->colourMode == sender->GetColourMode())
+ {
+ colourModes[i]->SetChecked(true);
+ }
+ else
+ {
+ colourModes[i]->SetChecked(false);
+ }
+ }
+ }
+}
+
+void RenderView::OnDraw()
+{
+ Graphics * g = ui::Engine::Ref().g;
+ g->clearrect(-1, -1, XRES+BARSIZE+1, YRES+MENUSIZE+1);
+ if(ren)
+ {
+ ren->clearScreen(1.0f);
+ ren->RenderBegin();
+ ren->RenderEnd();
+ }
+ g->draw_line(0, YRES, XRES-1, YRES, 200, 200, 200, 255);
+ g->draw_line(line1, YRES, line1, YRES+MENUSIZE, 200, 200, 200, 255);
+ g->draw_line(line2, YRES, line2, YRES+MENUSIZE, 200, 200, 200, 255);
+ g->draw_line(line3, YRES, line3, YRES+MENUSIZE, 200, 200, 200, 255);
+ g->draw_line(line4, YRES, line4, YRES+MENUSIZE, 200, 200, 200, 255);
+ g->draw_line(XRES, 0, XRES, YRES+MENUSIZE, 255, 255, 255, 255);
+ if(toolTipPresence && toolTip.length())
+ {
+ g->drawtext(6, Size.Y-MENUSIZE-12, (char*)toolTip.c_str(), 255, 255, 255, toolTipPresence>51?255:toolTipPresence*5);
+ }
+}
+
+void RenderView::OnTick(float dt)
+{
+ if(toolTipPresence>0)
+ {
+ toolTipPresence -= int(dt)>0?int(dt):1;
+ if(toolTipPresence<0)
+ toolTipPresence = 0;
+ }
+}
+
+void RenderView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
+{
+ if (shift && key == '1')
+ c->LoadRenderPreset(10);
+ else if(key >= '0' && key <= '9')
+ {
+ c->LoadRenderPreset(key-'0');
+ }
+}
+
+void RenderView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip)
+{
+ this->toolTip = toolTip;
+ toolTipPresence = 500;
+}
+
+RenderView::~RenderView() {
+}
diff --git a/src/gui/render/RenderView.h b/src/gui/render/RenderView.h
new file mode 100644
index 0000000..8a65eb1
--- /dev/null
+++ b/src/gui/render/RenderView.h
@@ -0,0 +1,43 @@
+#ifndef RENDERVIEW_H_
+#define RENDERVIEW_H_
+
+
+#include <vector>
+#include "gui/interface/Window.h"
+#include "RenderController.h"
+#include "RenderModel.h"
+#include "graphics/Renderer.h"
+#include "gui/interface/Checkbox.h"
+#include "gui/interface/Button.h"
+
+class RenderController;
+class RenderModel;
+class RenderView: public ui::Window {
+ RenderController * c;
+ Renderer * ren;
+ std::vector<ui::Checkbox*> renderModes;
+ std::vector<ui::Checkbox*> displayModes;
+ std::vector<ui::Checkbox*> colourModes;
+ std::string toolTip;
+ int toolTipPresence;
+ int line1, line2, line3, line4;
+public:
+ class RenderModeAction;
+ class DisplayModeAction;
+ class ColourModeAction;
+ class RenderPresetAction;
+ RenderView();
+ void NotifyRendererChanged(RenderModel * sender);
+ void NotifyRenderChanged(RenderModel * sender);
+ void NotifyDisplayChanged(RenderModel * sender);
+ void NotifyColourChanged(RenderModel * sender);
+ void AttachController(RenderController * c_) { c = c_; }
+ void OnMouseDown(int x, int y, unsigned button);
+ virtual void OnDraw();
+ virtual void OnTick(float dt);
+ virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt);
+ virtual void ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip);
+ virtual ~RenderView();
+};
+
+#endif /* RENDERVIEW_H_ */