summaryrefslogtreecommitdiff
path: root/src/ssave
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-30 00:40:28 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-30 00:40:28 (GMT)
commit259fc2bcf75d754af043a5d3fa39b6ee0c0b1dec (patch)
treef0fe2c14499345121371bba0ecc3fe21d17e0953 /src/ssave
parentfe329e9127ebcb8c89c505c4c120e175810d280c (diff)
downloadpowder-259fc2bcf75d754af043a5d3fa39b6ee0c0b1dec.zip
powder-259fc2bcf75d754af043a5d3fa39b6ee0c0b1dec.tar.gz
ASCII for key events, save and Textarea (no caret, yet)
Diffstat (limited to 'src/ssave')
-rw-r--r--src/ssave/SSaveController.cpp55
-rw-r--r--src/ssave/SSaveController.h34
-rw-r--r--src/ssave/SSaveModel.cpp85
-rw-r--r--src/ssave/SSaveModel.h36
-rw-r--r--src/ssave/SSaveView.cpp92
-rw-r--r--src/ssave/SSaveView.h39
6 files changed, 341 insertions, 0 deletions
diff --git a/src/ssave/SSaveController.cpp b/src/ssave/SSaveController.cpp
new file mode 100644
index 0000000..191a18c
--- /dev/null
+++ b/src/ssave/SSaveController.cpp
@@ -0,0 +1,55 @@
+/*
+ * SSaveController.cpp
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#include "SSaveController.h"
+
+SSaveController::SSaveController(ControllerCallback * callback, Save save):
+ HasExited(false)
+{
+ ssaveView = new SSaveView();
+ ssaveView->AttachController(this);
+ ssaveModel = new SSaveModel();
+ ssaveModel->AddObserver(ssaveView);
+ ssaveModel->SetSave(new Save(save));
+
+ this->callback = callback;
+}
+
+void SSaveController::UploadSave(std::string saveName, std::string saveDescription, bool publish)
+{
+ ssaveModel->UploadSave(saveName, saveDescription, publish);
+}
+
+Save * SSaveController::GetSave()
+{
+ return ssaveModel->GetSave();
+}
+
+bool SSaveController::GetSaveUploaded()
+{
+ return ssaveModel->GetSaveUploaded();
+}
+
+void SSaveController::Update()
+{
+ ssaveModel->Update();
+}
+
+void SSaveController::Exit()
+{
+ if(ui::Engine::Ref().GetWindow() == ssaveView)
+ ui::Engine::Ref().CloseWindow();
+ if(callback)
+ callback->ControllerExit();
+ HasExited = true;
+}
+
+SSaveController::~SSaveController() {
+ if(ui::Engine::Ref().GetWindow() == ssaveView)
+ ui::Engine::Ref().CloseWindow();
+}
+
diff --git a/src/ssave/SSaveController.h b/src/ssave/SSaveController.h
new file mode 100644
index 0000000..d1b2388
--- /dev/null
+++ b/src/ssave/SSaveController.h
@@ -0,0 +1,34 @@
+/*
+ * SSaveController.h
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#ifndef SSAVECONTROLLER_H_
+#define SSAVECONTROLLER_H_
+
+#include "SSaveModel.h"
+#include "SSaveView.h"
+#include "Controller.h"
+#include "search/Save.h"
+
+class SSaveView;
+class SSaveModel;
+class SSaveController {
+ SSaveView * ssaveView;
+ SSaveModel * ssaveModel;
+ ControllerCallback * callback;
+public:
+ bool HasExited;
+ SSaveController(ControllerCallback * callback, Save save);
+ Save * GetSave();
+ bool GetSaveUploaded();
+ void Exit();
+ void Update();
+ void UploadSave(std::string saveName, std::string saveDescription, bool publish);
+ SSaveView * GetView() { return ssaveView; }
+ virtual ~SSaveController();
+};
+
+#endif /* SSAVECONTROLLER_H_ */
diff --git a/src/ssave/SSaveModel.cpp b/src/ssave/SSaveModel.cpp
new file mode 100644
index 0000000..820c185
--- /dev/null
+++ b/src/ssave/SSaveModel.cpp
@@ -0,0 +1,85 @@
+/*
+ * SSaveModel.cpp
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#include "SSaveModel.h"
+#include "client/Client.h"
+
+SSaveModel::SSaveModel():
+ save(NULL),
+ saveUploaded(false)
+{
+ // TODO Auto-generated constructor stub
+
+}
+
+void SSaveModel::notifySaveChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifySaveChanged(this);
+ }
+}
+
+void SSaveModel::notifySaveUploadChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifySaveUploadChanged(this);
+ }
+}
+
+void SSaveModel::UploadSave(std::string saveName, std::string saveDescription, bool publish)
+{
+ save->name = saveName;
+ save->Description = saveDescription;
+ save->Published = publish;
+ saveUploaded = false;
+ notifySaveUploadChanged();
+
+ if(Client::Ref().UploadSave(save) == RequestOkay)
+ {
+ saveUploaded = true;
+ }
+ else
+ {
+ saveUploaded = false;
+ }
+ notifySaveUploadChanged();
+}
+
+void SSaveModel::SetSave(Save * save)
+{
+ this->save = save;
+ notifySaveChanged();
+}
+
+Save * SSaveModel::GetSave()
+{
+ return this->save;
+}
+
+bool SSaveModel::GetSaveUploaded()
+{
+ return saveUploaded;
+}
+
+void SSaveModel::AddObserver(SSaveView * observer)
+{
+ observers.push_back(observer);
+ observer->NotifySaveChanged(this);
+ observer->NotifySaveUploadChanged(this);
+}
+
+void SSaveModel::Update()
+{
+
+}
+
+SSaveModel::~SSaveModel() {
+ delete save;
+}
+
diff --git a/src/ssave/SSaveModel.h b/src/ssave/SSaveModel.h
new file mode 100644
index 0000000..b2631bb
--- /dev/null
+++ b/src/ssave/SSaveModel.h
@@ -0,0 +1,36 @@
+/*
+ * SSaveModel.h
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#ifndef SSAVEMODEL_H_
+#define SSAVEMODEL_H_
+
+#include <vector>
+
+#include "SSaveView.h"
+#include "search/Save.h"
+
+using namespace std;
+
+class SSaveView;
+class SSaveModel {
+ vector<SSaveView*> observers;
+ Save * save;
+ void notifySaveChanged();
+ void notifySaveUploadChanged();
+ bool saveUploaded;
+public:
+ SSaveModel();
+ void AddObserver(SSaveView * observer);
+ void Update();
+ Save * GetSave();
+ void SetSave(Save * save);
+ void UploadSave(std::string saveName, std::string saveDescription, bool publish);
+ bool GetSaveUploaded();
+ virtual ~SSaveModel();
+};
+
+#endif /* SSAVEMODEL_H_ */
diff --git a/src/ssave/SSaveView.cpp b/src/ssave/SSaveView.cpp
new file mode 100644
index 0000000..8a4a482
--- /dev/null
+++ b/src/ssave/SSaveView.cpp
@@ -0,0 +1,92 @@
+/*
+ * SSaveView.cpp
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#include "SSaveView.h"
+
+SSaveView::SSaveView():
+ ui::Window(ui::Point(-1, -1), ui::Point(200, 200)),
+ publishCheckbox(NULL),
+ saveButton(NULL),
+ closeButton(NULL),
+ nameField(NULL),
+ titleLabel(NULL),
+ descriptionField(NULL)
+{
+ titleLabel = new ui::Label(ui::Point(2, 1), ui::Point(Size.X-4, 16), "Save to Server");
+ titleLabel->SetAlignment(AlignLeft, AlignBottom);
+ AddComponent(titleLabel);
+
+ nameField = new ui::Textbox(ui::Point(4, 18), ui::Point(Size.X-8, 16), "");
+ nameField->SetAlignment(AlignLeft, AlignBottom);
+ AddComponent(nameField);
+
+ descriptionField = new ui::Textarea(ui::Point(4, 54), ui::Point(Size.X-8, Size.Y-26-54), "");
+ AddComponent(descriptionField);
+
+ publishCheckbox = new ui::Checkbox(ui::Point(4, 36), ui::Point(Size.X-8, 16), "Publish");
+ AddComponent(publishCheckbox);
+
+ class CloseAction: public ui::ButtonAction
+ {
+ SSaveView * v;
+ public:
+ CloseAction(SSaveView * v_) { v = v_; };
+ void ActionCallback(ui::Button * sender)
+ {
+ v->c->Exit();
+ }
+ };
+ closeButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(50, 16), "Cancel");
+ closeButton->SetActionCallback(new CloseAction(this));
+ AddComponent(closeButton);
+
+ class SaveAction: public ui::ButtonAction
+ {
+ SSaveView * v;
+ public:
+ SaveAction(SSaveView * v_) { v = v_; };
+ void ActionCallback(ui::Button * sender)
+ {
+ v->c->UploadSave(v->nameField->GetText(), "", v->publishCheckbox->GetChecked());
+ }
+ };
+ saveButton = new ui::Button(ui::Point(Size.X-50, Size.Y-16), ui::Point(50, 16), "Save");
+ saveButton->SetActionCallback(new SaveAction(this));
+ AddComponent(saveButton);
+}
+
+void SSaveView::NotifySaveChanged(SSaveModel * sender)
+{
+ if(sender->GetSave())
+ {
+ nameField->SetText(sender->GetSave()->GetName());
+ publishCheckbox->SetChecked(sender->GetSave()->Published);
+ }
+ else
+ {
+ nameField->SetText("");
+ //publishCheckbox->SetChecked(sender->GetSave()->GetPublished());
+ }
+}
+
+void SSaveView::NotifySaveUploadChanged(SSaveModel * sender)
+{
+ if(sender->GetSaveUploaded())
+ c->Exit();
+}
+
+void SSaveView::OnDraw()
+{
+ Graphics * g = ui::Engine::Ref().g;
+
+ g->clearrect(Position.X, Position.Y, Size.X, Size.Y);
+ g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 200, 200, 200, 255);
+}
+
+SSaveView::~SSaveView() {
+}
+
diff --git a/src/ssave/SSaveView.h b/src/ssave/SSaveView.h
new file mode 100644
index 0000000..f8e051d
--- /dev/null
+++ b/src/ssave/SSaveView.h
@@ -0,0 +1,39 @@
+/*
+ * SSaveView.h
+ *
+ * Created on: Jan 29, 2012
+ * Author: Simon
+ */
+
+#ifndef SSAVEVIEW_H_
+#define SSAVEVIEW_H_
+
+#include "interface/Window.h"
+#include "interface/Label.h"
+#include "interface/Button.h"
+#include "interface/Textbox.h"
+#include "interface/Textarea.h"
+#include "interface/Checkbox.h"
+#include "SSaveModel.h"
+#include "SSaveController.h"
+
+class SSaveController;
+class SSaveModel;
+class SSaveView: public ui::Window {
+ SSaveController * c;
+ ui::Checkbox * publishCheckbox;
+ ui::Button * saveButton;
+ ui::Button * closeButton;
+ ui::Textbox * nameField;
+ ui::Label * titleLabel;
+ ui::Textarea * descriptionField;
+public:
+ SSaveView();
+ void AttachController(SSaveController * c_) { c = c_; };
+ void NotifySaveChanged(SSaveModel * sender);
+ void NotifySaveUploadChanged(SSaveModel * sender);
+ virtual void OnDraw();
+ virtual ~SSaveView();
+};
+
+#endif /* SSAVEVIEW_H_ */