diff --git a/src/Renderer.cpp b/src/Renderer.cpp index c6022325d..f6c1fedc2 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -6,6 +6,7 @@ */ #include +#include #include "Config.h" #include "Renderer.h" #include "Graphics.h" @@ -1683,6 +1684,13 @@ void Renderer::CompileRenderMode() void Renderer::AddRenderMode(unsigned int mode) { + for(int i = 0; i < render_modes.size(); i++) + { + if(render_modes[i] == mode) + { + return; + } + } render_modes.push_back(mode); CompileRenderMode(); } @@ -1694,7 +1702,7 @@ void Renderer::RemoveRenderMode(unsigned int mode) if(render_modes[i] == mode) { render_modes.erase(render_modes.begin() + i); - return; + i = 0; } } CompileRenderMode(); @@ -1709,6 +1717,13 @@ void Renderer::CompileDisplayMode() void Renderer::AddDisplayMode(unsigned int mode) { + for(int i = 0; i < display_modes.size(); i++) + { + if(display_modes[i] == mode) + { + return; + } + } display_modes.push_back(mode); CompileDisplayMode(); } @@ -1720,7 +1735,7 @@ void Renderer::RemoveDisplayMode(unsigned int mode) if(display_modes[i] == mode) { display_modes.erase(display_modes.begin() + i); - return; + i = 0; } } CompileDisplayMode(); diff --git a/src/interface/Checkbox.h b/src/interface/Checkbox.h index ed7dc950e..8abbe1cb4 100644 --- a/src/interface/Checkbox.h +++ b/src/interface/Checkbox.h @@ -33,6 +33,8 @@ public: virtual void OnMouseClick(int x, int y, unsigned int button); virtual void OnMouseUp(int x, int y, unsigned int button); void SetActionCallback(CheckboxAction * action); + CheckboxAction * GetActionCallback() { return actionCallback; } + bool IsChecked() { return checked; } virtual ~Checkbox(); }; } diff --git a/src/render/RenderController.cpp b/src/render/RenderController.cpp index 01a5d4efa..847724594 100644 --- a/src/render/RenderController.cpp +++ b/src/render/RenderController.cpp @@ -20,6 +20,16 @@ RenderController::RenderController(Renderer * ren, ControllerCallback * callback this->callback = callback; } +void RenderController::SetRenderMode(unsigned int renderMode) +{ + renderModel->SetRenderMode(renderMode); +} + +void RenderController::UnsetRenderMode(unsigned int renderMode) +{ + renderModel->UnsetRenderMode(renderMode); +} + void RenderController::Exit() { if(ui::Engine::Ref().GetWindow() == renderView) diff --git a/src/render/RenderController.h b/src/render/RenderController.h index 704d6d466..95a1bcc4c 100644 --- a/src/render/RenderController.h +++ b/src/render/RenderController.h @@ -25,6 +25,8 @@ public: void Exit(); RenderView * GetView() { return renderView; } virtual ~RenderController(); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); }; #endif /* RENDERCONTROLLER_H_ */ diff --git a/src/render/RenderModel.cpp b/src/render/RenderModel.cpp index 6bd9bdd40..ef0f65686 100644 --- a/src/render/RenderModel.cpp +++ b/src/render/RenderModel.cpp @@ -18,6 +18,16 @@ void RenderModel::AddObserver(RenderView * observer) observer->NotifyRendererChanged(this); } +void RenderModel::SetRenderMode(unsigned int renderMode) +{ + renderer->AddRenderMode(renderMode); +} + +void RenderModel::UnsetRenderMode(unsigned int renderMode) +{ + renderer->RemoveRenderMode(renderMode); +} + void RenderModel::SetRenderer(Renderer * ren) { renderer = ren; diff --git a/src/render/RenderModel.h b/src/render/RenderModel.h index b4f9ee8e2..048cfc544 100644 --- a/src/render/RenderModel.h +++ b/src/render/RenderModel.h @@ -24,6 +24,8 @@ public: Renderer * GetRenderer(); void AddObserver(RenderView * observer); void SetRenderer(Renderer * ren); + void SetRenderMode(unsigned int renderMode); + void UnsetRenderMode(unsigned int renderMode); virtual ~RenderModel(); }; diff --git a/src/render/RenderView.cpp b/src/render/RenderView.cpp index 8412126c5..5551615cc 100644 --- a/src/render/RenderView.cpp +++ b/src/render/RenderView.cpp @@ -5,16 +5,38 @@ * Author: Simon */ -#include "RenderView.h" +#include "simulation/ElementGraphics.h" #include "Graphics.h" +#include "Renderer.h" +#include "RenderView.h" + +class RenderView::RenderModeAction: public ui::CheckboxAction +{ + RenderView * v; + unsigned int renderMode; +public: + RenderModeAction(RenderView * v_, unsigned int renderMode_) + { + v = v_; + renderMode = renderMode_; + } + virtual void ActionCallback(ui::Checkbox * sender) + { + if(sender->IsChecked()) + v->c->SetRenderMode(renderMode); + else + v->c->UnsetRenderMode(renderMode); + } +}; RenderView::RenderView(): ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)), ren(NULL) { ui::Checkbox * tCheckbox; - tCheckbox = new ui::Checkbox(ui::Point(0, YRES+5), ui::Point(100, 16), "Thing"); + tCheckbox = new ui::Checkbox(ui::Point(0, YRES+5), ui::Point(100, 16), "Blob"); renderModes.push_back(tCheckbox); + tCheckbox->SetActionCallback(new RenderModeAction(this, RENDER_BLOB)); AddComponent(tCheckbox); } diff --git a/src/render/RenderView.h b/src/render/RenderView.h index 362bfb471..cdf048861 100644 --- a/src/render/RenderView.h +++ b/src/render/RenderView.h @@ -23,6 +23,7 @@ class RenderView: public ui::Window { Renderer * ren; std::vector renderModes; public: + class RenderModeAction; RenderView(); void NotifyRendererChanged(RenderModel * sender); void AttachController(RenderController * c_) { c = c_; }