diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-04-14 18:00:24 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-04-14 18:00:24 (GMT) |
| commit | 4c6be4ff2cc822d9c1ed36c9c88261771775dc02 (patch) | |
| tree | 9e07f4871b68ea5e0edc7fdfc56894c26bfba9bf /src/preview | |
| parent | 64063fbc0f070a0731c896394e30abebd848f358 (diff) | |
| download | powder-4c6be4ff2cc822d9c1ed36c9c88261771775dc02.zip powder-4c6be4ff2cc822d9c1ed36c9c88261771775dc02.tar.gz | |
Graphics:: Extra icons for Report and Favourite. Client:: Get favourite status in GetSave, FavouriteSave, ReportSave, Preview:: Failure state when loading save
Diffstat (limited to 'src/preview')
| -rw-r--r-- | src/preview/PreviewController.cpp | 31 | ||||
| -rw-r--r-- | src/preview/PreviewController.h | 3 | ||||
| -rw-r--r-- | src/preview/PreviewModel.cpp | 13 | ||||
| -rw-r--r-- | src/preview/PreviewModel.h | 1 | ||||
| -rw-r--r-- | src/preview/PreviewModelException.h | 26 | ||||
| -rw-r--r-- | src/preview/PreviewView.cpp | 53 | ||||
| -rw-r--r-- | src/preview/PreviewView.h | 2 |
7 files changed, 126 insertions, 3 deletions
diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp index 558ccb4..a6e21c6 100644 --- a/src/preview/PreviewController.cpp +++ b/src/preview/PreviewController.cpp @@ -6,13 +6,17 @@ */ #include <sstream> +#include "client/Client.h" #include "PreviewController.h" #include "PreviewView.h" #include "PreviewModel.h" +#include "PreviewModelException.h" +#include "dialogues/ErrorMessage.h" #include "Controller.h" PreviewController::PreviewController(int saveID, ControllerCallback * callback): - HasExited(false) + HasExited(false), + saveId(saveID) { previewModel = new PreviewModel(); previewView = new PreviewView(); @@ -26,7 +30,14 @@ PreviewController::PreviewController(int saveID, ControllerCallback * callback): void PreviewController::Update() { - previewModel->Update(); + try + { + previewModel->Update(); + } + catch (PreviewModelException & e) + { + new ErrorMessage("Error", e.what()); + } } Save * PreviewController::GetSave() @@ -44,6 +55,22 @@ void PreviewController::DoOpen() previewModel->SetDoOpen(true); } +void PreviewController::Report(std::string message) +{ + if(Client::Ref().ReportSave(saveId, message) == RequestOkay) + { + Exit(); + new ErrorMessage("Information", "Report submitted"); //TODO: InfoMessage + } + else + new ErrorMessage("Error", "Unable file report"); +} + +void PreviewController::FavouriteSave() +{ + previewModel->SetFavourite(true); +} + void PreviewController::OpenInBrowser() { if(previewModel->GetSave()) diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h index 595a30f..e1b0295 100644 --- a/src/preview/PreviewController.h +++ b/src/preview/PreviewController.h @@ -16,6 +16,7 @@ class PreviewModel; class PreviewView; class PreviewController { + int saveId; PreviewModel * previewModel; PreviewView * previewView; ControllerCallback * callback; @@ -25,10 +26,12 @@ public: void Exit(); void DoOpen(); void OpenInBrowser(); + void Report(std::string message); bool GetDoOpen(); Save * GetSave(); PreviewView * GetView() { return previewView; } void Update(); + void FavouriteSave(); virtual ~PreviewController(); }; diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp index 371d917..71c4d4a 100644 --- a/src/preview/PreviewModel.cpp +++ b/src/preview/PreviewModel.cpp @@ -7,6 +7,7 @@ #include "PreviewModel.h" #include "client/Client.h" +#include "PreviewModelException.h" PreviewModel::PreviewModel(): save(NULL), @@ -60,6 +61,16 @@ void * PreviewModel::updateSaveCommentsT() return tempComments; } +void PreviewModel::SetFavourite(bool favourite) +{ + //if(save) + { + Client::Ref().FavouriteSave(save->id, favourite); + save->Favourite = favourite; + notifySaveChanged(); + } +} + void PreviewModel::UpdateSave(int saveID, int saveDate) { this->tSaveID = saveID; @@ -192,6 +203,8 @@ void PreviewModel::Update() updateSaveInfoWorking = false; pthread_join(updateSaveInfoThread, (void**)(&save)); notifySaveChanged(); + if(!save) + throw PreviewModelException("Unable to load save"); } } diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h index 84ce83d..91ca972 100644 --- a/src/preview/PreviewModel.h +++ b/src/preview/PreviewModel.h @@ -56,6 +56,7 @@ public: std::vector<Comment*> * GetComments(); void AddObserver(PreviewView * observer); void UpdateSave(int saveID, int saveDate); + void SetFavourite(bool favourite); bool GetDoOpen(); void SetDoOpen(bool doOpen); void Update(); diff --git a/src/preview/PreviewModelException.h b/src/preview/PreviewModelException.h new file mode 100644 index 0000000..261d203 --- /dev/null +++ b/src/preview/PreviewModelException.h @@ -0,0 +1,26 @@ +/* + * PreviewModelException.h + * + * Created on: Apr 14, 2012 + * Author: Simon + */ + +#ifndef PREVIEWMODELEXCEPTION_H_ +#define PREVIEWMODELEXCEPTION_H_ + +#include <string> +#include <exception> +using namespace std; + +struct PreviewModelException: public exception { + string message; +public: + PreviewModelException(string message_): message(message_) {} + const char * what() const throw() + { + return message.c_str(); + } + ~PreviewModelException() throw() {}; +}; + +#endif /* PREVIEWMODELEXCEPTION_H_ */ diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp index aae792d..7df1f6b 100644 --- a/src/preview/PreviewView.cpp +++ b/src/preview/PreviewView.cpp @@ -7,6 +7,7 @@ #include <vector> #include "PreviewView.h" +#include "dialogues/TextPrompt.h" #include "interface/Point.h" #include "interface/Window.h" #include "search/Thumbnail.h" @@ -32,6 +33,50 @@ PreviewView::PreviewView(): openButton->SetActionCallback(new OpenAction(this)); AddComponent(openButton); + class FavAction: public ui::ButtonAction + { + PreviewView * v; + public: + FavAction(PreviewView * v_){ v = v_; } + virtual void ActionCallback(ui::Button * sender) + { + v->c->FavouriteSave(); + } + }; + + favButton = new ui::Button(ui::Point(50, Size.Y-16), ui::Point(50, 16), "Fav."); + favButton->SetAlignment(AlignLeft, AlignMiddle); + favButton->SetIcon(IconFavourite); + favButton->SetActionCallback(new FavAction(this)); + AddComponent(favButton); + + class ReportPromptCallback: public TextDialogueCallback { + public: + PreviewView * v; + ReportPromptCallback(PreviewView * v_) { v = v_; } + virtual void TextCallback(TextPrompt::DialogueResult result, std::string resultText) { + if (result == TextPrompt::ResultOkay) + v->c->Report(resultText); + } + virtual ~ReportPromptCallback() { } + }; + + class ReportAction: public ui::ButtonAction + { + PreviewView * v; + public: + ReportAction(PreviewView * v_){ v = v_; } + virtual void ActionCallback(ui::Button * sender) + { + new TextPrompt("Report Save", "Reason for reporting", true, new ReportPromptCallback(v)); + } + }; + reportButton = new ui::Button(ui::Point(100, Size.Y-16), ui::Point(50, 16), "Report"); + reportButton->SetAlignment(AlignLeft, AlignMiddle); + reportButton->SetIcon(IconReport); + reportButton->SetActionCallback(new ReportAction(this)); + AddComponent(reportButton); + class BrowserOpenAction: public ui::ButtonAction { PreviewView * v; @@ -42,7 +87,8 @@ PreviewView::PreviewView(): v->c->OpenInBrowser(); } }; - browserOpenButton = new ui::Button(ui::Point((XRES/2)-90, Size.Y-16), ui::Point(90, 16), "Open in browser"); + + browserOpenButton = new ui::Button(ui::Point((XRES/2)-110, Size.Y-16), ui::Point(110, 16), "Open in browser"); browserOpenButton->SetAlignment(AlignLeft, AlignMiddle); browserOpenButton->SetIcon(IconOpen); browserOpenButton->SetActionCallback(new BrowserOpenAction(this)); @@ -114,6 +160,10 @@ void PreviewView::NotifySaveChanged(PreviewModel * sender) saveNameLabel->SetText(save->name); authorDateLabel->SetText("\bgAuthor:\bw " + save->userName + " \bgDate:\bw "); saveDescriptionTextblock->SetText(save->Description); + if(save->Favourite) + favButton->Enabled = false; + else + favButton->Enabled = true; } else { @@ -122,6 +172,7 @@ void PreviewView::NotifySaveChanged(PreviewModel * sender) saveNameLabel->SetText(""); authorDateLabel->SetText(""); saveDescriptionTextblock->SetText(""); + favButton->Enabled = false; } } diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h index 11ed4bd..367736a 100644 --- a/src/preview/PreviewView.h +++ b/src/preview/PreviewView.h @@ -24,6 +24,8 @@ class PreviewView: public ui::Window { Thumbnail * savePreview; ui::Button * openButton; ui::Button * browserOpenButton; + ui::Button * favButton; + ui::Button * reportButton; ui::Label * saveNameLabel; ui::Label * authorDateLabel; ui::Textblock * saveDescriptionTextblock; |
