diff options
| author | Simon 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) |
| commit | 259fc2bcf75d754af043a5d3fa39b6ee0c0b1dec (patch) | |
| tree | f0fe2c14499345121371bba0ecc3fe21d17e0953 /src/ssave | |
| parent | fe329e9127ebcb8c89c505c4c120e175810d280c (diff) | |
| download | powder-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.cpp | 55 | ||||
| -rw-r--r-- | src/ssave/SSaveController.h | 34 | ||||
| -rw-r--r-- | src/ssave/SSaveModel.cpp | 85 | ||||
| -rw-r--r-- | src/ssave/SSaveModel.h | 36 | ||||
| -rw-r--r-- | src/ssave/SSaveView.cpp | 92 | ||||
| -rw-r--r-- | src/ssave/SSaveView.h | 39 |
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_ */ |
