summaryrefslogtreecommitdiff
path: root/src/localbrowser/LocalBrowserController.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-11-17 19:44:09 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-11-17 19:44:09 (GMT)
commit058a2edd75debbd0297f92572316daa704bd379f (patch)
treead303f091f9a08b209b91eb34a9fcad996a3de69 /src/localbrowser/LocalBrowserController.cpp
parente3594aba9e05c6865d396418c028049cda92c2f3 (diff)
parent7a21ae192fe19868539956f3fe28e62b2c7c4429 (diff)
downloadpowder-058a2edd75debbd0297f92572316daa704bd379f.zip
powder-058a2edd75debbd0297f92572316daa704bd379f.tar.gz
Merge branch 'master' of github.com:FacialTurd/PowderToypp
Diffstat (limited to 'src/localbrowser/LocalBrowserController.cpp')
-rw-r--r--src/localbrowser/LocalBrowserController.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/localbrowser/LocalBrowserController.cpp b/src/localbrowser/LocalBrowserController.cpp
new file mode 100644
index 0000000..e932e72
--- /dev/null
+++ b/src/localbrowser/LocalBrowserController.cpp
@@ -0,0 +1,172 @@
+/*
+ * StampsController.cpp
+ *
+ * Created on: Mar 29, 2012
+ * Author: Simon
+ */
+#include <sstream>
+
+#include "client/Client.h"
+#include "LocalBrowserController.h"
+#include "interface/Engine.h"
+#include "dialogues/ConfirmPrompt.h"
+#include "tasks/TaskWindow.h"
+#include "tasks/Task.h"
+
+#include "LocalBrowserModel.h"
+#include "LocalBrowserView.h"
+
+LocalBrowserController::LocalBrowserController(ControllerCallback * callback):
+ HasDone(false)
+{
+ browserModel = new LocalBrowserModel();
+ browserView = new LocalBrowserView();
+ browserView->AttachController(this);
+ browserModel->AddObserver(browserView);
+
+ this->callback = callback;
+
+ browserModel->UpdateSavesList(1);
+}
+
+void LocalBrowserController::OpenSave(SaveFile * save)
+{
+ browserModel->SetSave(save);
+}
+
+SaveFile * LocalBrowserController::GetSave()
+{
+ return browserModel->GetSave();
+}
+
+void LocalBrowserController::RemoveSelected()
+{
+ class RemoveSelectedConfirmation: public ConfirmDialogueCallback {
+ public:
+ LocalBrowserController * c;
+ RemoveSelectedConfirmation(LocalBrowserController * c_) { c = c_; }
+ virtual void ConfirmCallback(ConfirmPrompt::DialogueResult result) {
+ if (result == ConfirmPrompt::ResultOkay)
+ c->removeSelectedC();
+ }
+ virtual ~RemoveSelectedConfirmation() { }
+ };
+
+ std::stringstream desc;
+ desc << "Are you sure you want to delete " << browserModel->GetSelected().size() << " stamp";
+ if(browserModel->GetSelected().size()>1)
+ desc << "s";
+ new ConfirmPrompt("Delete stamps", desc.str(), new RemoveSelectedConfirmation(this));
+}
+
+void LocalBrowserController::removeSelectedC()
+{
+ class RemoveSavesTask : public Task
+ {
+ std::vector<std::string> saves;
+ LocalBrowserController * c;
+ public:
+ RemoveSavesTask(LocalBrowserController * c, std::vector<std::string> saves_) : c(c) { saves = saves_; }
+ virtual bool doWork()
+ {
+ for(int i = 0; i < saves.size(); i++)
+ {
+ std::stringstream saveName;
+ saveName << "Deleting stamp [" << saves[i] << "] ...";
+ notifyStatus(saveName.str());
+ Client::Ref().DeleteStamp(saves[i]);
+ notifyProgress((float(i+1)/float(saves.size())*100));
+ }
+ return true;
+ }
+ virtual void after()
+ {
+ c->RefreshSavesList();
+ }
+ };
+
+ std::vector<std::string> selected = browserModel->GetSelected();
+ new TaskWindow("Removing saves", new RemoveSavesTask(this, selected));
+}
+
+void LocalBrowserController::RescanStamps()
+{
+ class RescanConfirmation: public ConfirmDialogueCallback {
+ public:
+ LocalBrowserController * c;
+ RescanConfirmation(LocalBrowserController * c_) { c = c_; }
+ virtual void ConfirmCallback(ConfirmPrompt::DialogueResult result) {
+ if (result == ConfirmPrompt::ResultOkay)
+ c->rescanStampsC();
+ }
+ virtual ~RescanConfirmation() { }
+ };
+
+ std::stringstream desc;
+ desc << "Rescanning the stamps folder can find stamps added to the stamps folder or recover stamps when the stamps.def file has been lost or damaged. However, be warned that this will mess up the current sorting order";
+ new ConfirmPrompt("Rescan", desc.str(), new RescanConfirmation(this));
+}
+
+void LocalBrowserController::rescanStampsC()
+{
+ browserModel->RescanStamps();
+ browserModel->UpdateSavesList(browserModel->GetPageNum());
+}
+
+void LocalBrowserController::RefreshSavesList()
+{
+ ClearSelection();
+ browserModel->UpdateSavesList(browserModel->GetPageNum());
+}
+
+void LocalBrowserController::ClearSelection()
+{
+ browserModel->ClearSelected();
+}
+
+void LocalBrowserController::NextPage()
+{
+ if(browserModel->GetPageNum() < browserModel->GetPageCount())
+ browserModel->UpdateSavesList(browserModel->GetPageNum()+1);
+}
+
+void LocalBrowserController::PrevPage()
+{
+ if(browserModel->GetPageNum()>1)
+ browserModel->UpdateSavesList(browserModel->GetPageNum()-1);
+}
+
+void LocalBrowserController::Update()
+{
+ if(browserModel->GetSave())
+ {
+ Exit();
+ }
+}
+
+void LocalBrowserController::Selected(std::string saveName, bool selected)
+{
+ if(selected)
+ browserModel->SelectSave(saveName);
+ else
+ browserModel->DeselectSave(saveName);
+}
+
+void LocalBrowserController::Exit()
+{
+ if(ui::Engine::Ref().GetWindow() == browserView)
+ ui::Engine::Ref().CloseWindow();
+ if(callback)
+ callback->ControllerExit();
+ HasDone = true;
+}
+
+LocalBrowserController::~LocalBrowserController() {
+ if(ui::Engine::Ref().GetWindow() == browserView)
+ ui::Engine::Ref().CloseWindow();
+ if(callback)
+ delete callback;
+ delete browserModel;
+ delete browserView;
+}
+