diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2013-03-22 14:14:17 (GMT) |
| commit | 9abe51526cac2634af0541c3de69834dd30e9f78 (patch) | |
| tree | 6ae4deadfe00a83094b9d288d8c11d8ce823577a /src/preview | |
| parent | 2c311b9a36a88fadd96f3d39acb1ab2590835d81 (diff) | |
| download | powder-9abe51526cac2634af0541c3de69834dd30e9f78.zip powder-9abe51526cac2634af0541c3de69834dd30e9f78.tar.gz | |
Move all GUI source files into gui/
Diffstat (limited to 'src/preview')
| -rw-r--r-- | src/preview/Comment.h | 28 | ||||
| -rw-r--r-- | src/preview/PreviewController.cpp | 192 | ||||
| -rw-r--r-- | src/preview/PreviewController.h | 45 | ||||
| -rw-r--r-- | src/preview/PreviewModel.cpp | 360 | ||||
| -rw-r--r-- | src/preview/PreviewModel.h | 85 | ||||
| -rw-r--r-- | src/preview/PreviewModelException.h | 19 | ||||
| -rw-r--r-- | src/preview/PreviewView.cpp | 614 | ||||
| -rw-r--r-- | src/preview/PreviewView.h | 74 |
8 files changed, 0 insertions, 1417 deletions
diff --git a/src/preview/Comment.h b/src/preview/Comment.h deleted file mode 100644 index 1d84042..0000000 --- a/src/preview/Comment.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef COMMENT_H_ -#define COMMENT_H_ - -#include <string> - -class SaveComment -{ -public: - int authorID; - std::string authorName; - std::string authorNameFormatted; - std::string comment; - SaveComment(int userID, std::string username, std::string usernameFormatted, std::string commentText): - authorID(userID), authorName(username), authorNameFormatted(usernameFormatted), comment(commentText) - { - } - SaveComment(const SaveComment & comment): - authorID(comment.authorID), authorName(comment.authorName), authorNameFormatted(comment.authorNameFormatted), comment(comment.comment) - { - } - SaveComment(const SaveComment * comment): - authorID(comment->authorID), authorName(comment->authorName), authorNameFormatted(comment->authorNameFormatted), comment(comment->comment) - { - } -}; - - -#endif /* COMMENT_H_ */ diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp deleted file mode 100644 index 1616c63..0000000 --- a/src/preview/PreviewController.cpp +++ /dev/null @@ -1,192 +0,0 @@ -#include <sstream> -#include "client/Client.h" -#include "PreviewController.h" -#include "PreviewView.h" -#include "PreviewModel.h" -#include "PreviewModelException.h" -#include "dialogues/ErrorMessage.h" -#include "login/LoginController.h" -#include "Controller.h" - -PreviewController::PreviewController(int saveID, int saveDate, ControllerCallback * callback): - HasExited(false), - saveId(saveID), - saveDate(saveDate), - loginWindow(NULL) -{ - previewModel = new PreviewModel(); - previewView = new PreviewView(); - previewModel->AddObserver(previewView); - previewView->AttachController(this); - - previewModel->UpdateSave(saveID, saveDate); - - if(Client::Ref().GetAuthUser().ID) - { - previewModel->SetCommentBoxEnabled(true); - } - - Client::Ref().AddListener(this); - - this->callback = callback; -} - -PreviewController::PreviewController(int saveID, ControllerCallback * callback): - HasExited(false), - saveId(saveID), - saveDate(0), - loginWindow(NULL) -{ - previewModel = new PreviewModel(); - previewView = new PreviewView(); - previewModel->AddObserver(previewView); - previewView->AttachController(this); - - previewModel->UpdateSave(saveID, 0); - - if(Client::Ref().GetAuthUser().ID) - { - previewModel->SetCommentBoxEnabled(true); - } - - Client::Ref().AddListener(this); - - this->callback = callback; -} - -void PreviewController::Update() -{ - if(loginWindow && loginWindow->HasExited == true) - { - delete loginWindow; - loginWindow = NULL; - } - - try - { - previewModel->Update(); - } - catch (PreviewModelException & e) - { - Exit(); - new ErrorMessage("Error", e.what()); - } - if(previewModel->GetDoOpen() && previewModel->GetSave() && previewModel->GetSave()->GetGameSave()) - { - Exit(); - } -} - -bool PreviewController::SubmitComment(std::string comment) -{ - if(comment.length() < 4) - { - new ErrorMessage("Error", "Comment is too short"); - return false; - } - else - { - RequestStatus status = Client::Ref().AddComment(saveId, comment); - if(status != RequestOkay) - { - new ErrorMessage("Error Submitting comment", Client::Ref().GetLastError()); - return false; - } - else - { - previewModel->UpdateComments(1); - } - } - return true; -} - -void PreviewController::ShowLogin() -{ - loginWindow = new LoginController(); - ui::Engine::Ref().ShowWindow(loginWindow->GetView()); -} - -void PreviewController::NotifyAuthUserChanged(Client * sender) -{ - previewModel->SetCommentBoxEnabled(sender->GetAuthUser().ID); -} - -SaveInfo * PreviewController::GetSave() -{ - return previewModel->GetSave(); -} - -bool PreviewController::GetDoOpen() -{ - return previewModel->GetDoOpen(); -} - -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() -{ - if(previewModel->GetSave() && Client::Ref().GetAuthUser().ID) - { - if(previewModel->GetSave()->Favourite) - previewModel->SetFavourite(false); - else - previewModel->SetFavourite(true); - } -} - -void PreviewController::OpenInBrowser() -{ - std::stringstream uriStream; - uriStream << "http://" << SERVER << "/Browse/View.html?ID=" << saveId; - OpenURI(uriStream.str()); -} - -void PreviewController::NextCommentPage() -{ - if(previewModel->GetCommentsPageNum() < previewModel->GetCommentsPageCount() && previewModel->GetCommentsLoaded()) - previewModel->UpdateComments(previewModel->GetCommentsPageNum()+1); -} - -void PreviewController::PrevCommentPage() -{ - if(previewModel->GetCommentsPageNum()>1 && previewModel->GetCommentsLoaded()) - previewModel->UpdateComments(previewModel->GetCommentsPageNum()-1); -} - -void PreviewController::Exit() -{ - if(ui::Engine::Ref().GetWindow() == previewView) - { - ui::Engine::Ref().CloseWindow(); - } - HasExited = true; - if(callback) - callback->ControllerExit(); -} - -PreviewController::~PreviewController() { - if(ui::Engine::Ref().GetWindow() == previewView) - { - ui::Engine::Ref().CloseWindow(); - } - Client::Ref().RemoveListener(this); - delete previewModel; - delete previewView; - if(callback) - delete callback; -} - diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h deleted file mode 100644 index ab63ae4..0000000 --- a/src/preview/PreviewController.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef PREVIEWCONTROLLER_H_ -#define PREVIEWCONTROLLER_H_ - -#include "preview/PreviewModel.h" -#include "preview/PreviewView.h" -#include "Controller.h" -#include "client/SaveInfo.h" -#include "client/ClientListener.h" - -class LoginController; -class PreviewModel; -class PreviewView; -class PreviewController: public ClientListener { - int saveId; - int saveDate; - PreviewModel * previewModel; - PreviewView * previewView; - LoginController * loginWindow; - ControllerCallback * callback; -public: - virtual void NotifyAuthUserChanged(Client * sender); - inline int SaveID() { return saveId; }; - - bool HasExited; - PreviewController(int saveID, ControllerCallback * callback); - PreviewController(int saveID, int saveDate, ControllerCallback * callback); - void Exit(); - void DoOpen(); - void OpenInBrowser(); - void Report(std::string message); - void ShowLogin(); - bool GetDoOpen(); - SaveInfo * GetSave(); - PreviewView * GetView() { return previewView; } - void Update(); - void FavouriteSave(); - bool SubmitComment(std::string comment); - - void NextCommentPage(); - void PrevCommentPage(); - - virtual ~PreviewController(); -}; - -#endif /* PREVIEWCONTROLLER_H_ */ diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp deleted file mode 100644 index 8d608cf..0000000 --- a/src/preview/PreviewModel.cpp +++ /dev/null @@ -1,360 +0,0 @@ -#include <cmath> -#include "PreviewModel.h" -#include "client/Client.h" -#include "client/GameSave.h"; -#include "PreviewModelException.h" - -PreviewModel::PreviewModel(): - save(NULL), - saveComments(NULL), - doOpen(false), - updateSaveDataWorking(false), - updateSaveDataFinished(false), - updateSaveInfoWorking(false), - updateSaveInfoFinished(false), - updateSaveCommentsWorking(false), - updateSaveCommentsFinished(false), - commentsTotal(0), - commentsPageNumber(1), - commentBoxEnabled(false) -{ - -} - -void * PreviewModel::updateSaveInfoTHelper(void * obj) -{ - return ((PreviewModel*)obj)->updateSaveInfoT(); -} - -void * PreviewModel::updateSaveDataTHelper(void * obj) -{ - return ((PreviewModel*)obj)->updateSaveDataT(); -} - -void * PreviewModel::updateSaveCommentsTHelper(void * obj) -{ - return ((PreviewModel*)obj)->updateSaveCommentsT(); -} - -void PreviewModel::updateSaveInfoTDelete(void * arg) -{ - delete arg; -} -void PreviewModel::updateSaveDataTDelete(void * arg) -{ - free(arg); -} -void PreviewModel::updateSaveCommentsTDelete(void * arg) -{ - for(int i = 0; i < ((std::vector<SaveComment*> *)arg)->size(); i++) - delete ((std::vector<SaveComment*> *)arg)->at(i); - ((std::vector<SaveComment*> *)arg)->clear(); - delete arg; -} - -void * PreviewModel::updateSaveInfoT() -{ - SaveInfo * tempSave; - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL); - tempSave = Client::Ref().GetSave(tSaveID, tSaveDate); - pthread_cleanup_push(&updateSaveInfoTDelete,tempSave); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); - pthread_testcancel(); - updateSaveInfoFinished = true; - pthread_cleanup_pop(0); - return tempSave; -} - -void * PreviewModel::updateSaveDataT() -{ - int tempDataSize; - unsigned char * tempData; - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL); - tempData = Client::Ref().GetSaveData(tSaveID, tSaveDate, tempDataSize); - pthread_cleanup_push(&updateSaveDataTDelete,tempData); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); - pthread_testcancel(); - saveDataBuffer.clear(); - if (tempData) - saveDataBuffer.insert(saveDataBuffer.begin(), tempData, tempData+tempDataSize); - updateSaveDataFinished = true; - pthread_cleanup_pop(1); - return NULL; -} - -void * PreviewModel::updateSaveCommentsT() -{ - std::vector<SaveComment*> * tempComments; - pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,NULL); - tempComments = Client::Ref().GetComments(tSaveID, (commentsPageNumber-1)*20, 20); - pthread_cleanup_push(&updateSaveCommentsTDelete,tempComments); - pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); - pthread_testcancel(); - updateSaveCommentsFinished = true; - pthread_cleanup_pop(0); - return tempComments; -} - -void PreviewModel::SetFavourite(bool favourite) -{ - if(save) - { - Client::Ref().FavouriteSave(save->id, favourite); - save->Favourite = favourite; - notifySaveChanged(); - } -} - -bool PreviewModel::GetCommentBoxEnabled() -{ - return commentBoxEnabled; -} - -void PreviewModel::SetCommentBoxEnabled(bool enabledState) -{ - if(enabledState != commentBoxEnabled) - { - commentBoxEnabled = enabledState; - notifyCommentBoxEnabledChanged(); - } -} - -void PreviewModel::UpdateSave(int saveID, int saveDate) -{ - this->tSaveID = saveID; - this->tSaveDate = saveDate; - - if(save) - { - delete save; - save = NULL; - } - saveDataBuffer.clear(); - if(saveComments) - { - for(int i = 0; i < saveComments->size(); i++) - delete saveComments->at(i); - saveComments->clear(); - delete saveComments; - saveComments = NULL; - } - notifySaveChanged(); - notifySaveCommentsChanged(); - - if(!updateSaveDataWorking) - { - updateSaveDataWorking = true; - updateSaveDataFinished = false; - pthread_create(&updateSaveDataThread, 0, &PreviewModel::updateSaveDataTHelper, this); - } - - if(!updateSaveInfoWorking) - { - updateSaveInfoWorking = true; - updateSaveInfoFinished = false; - pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoTHelper, this); - } - - if(!updateSaveCommentsWorking) - { - commentsLoaded = false; - updateSaveCommentsWorking = true; - updateSaveCommentsFinished = false; - pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); - } -} - -void PreviewModel::SetDoOpen(bool doOpen) -{ - this->doOpen = doOpen; -} - -bool PreviewModel::GetDoOpen() -{ - return doOpen; -} - -SaveInfo * PreviewModel::GetSave() -{ - return save; -} - -int PreviewModel::GetCommentsPageNum() -{ - return commentsPageNumber; -} - -int PreviewModel::GetCommentsPageCount() -{ - return max(1, (int)(ceil(commentsTotal/20.0f))); -} - -bool PreviewModel::GetCommentsLoaded() -{ - return commentsLoaded; -} - -void PreviewModel::UpdateComments(int pageNumber) -{ - commentsLoaded = false; - if(saveComments) - { - for(int i = 0; i < saveComments->size(); i++) - delete saveComments->at(i); - saveComments->clear(); - delete saveComments; - saveComments = NULL; - } - - //resultCount = 0; - commentsPageNumber = pageNumber; - notifySaveCommentsChanged(); - notifyCommentsPageChanged(); - - //Threading - if(!updateSaveCommentsWorking) - { - updateSaveCommentsFinished = false; - updateSaveCommentsWorking = true; - pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); - } -} - -std::vector<SaveComment*> * PreviewModel::GetComments() -{ - return saveComments; -} - -void PreviewModel::notifySaveChanged() -{ - for(int i = 0; i < observers.size(); i++) - { - observers[i]->NotifySaveChanged(this); - } -} - -void PreviewModel::notifyCommentBoxEnabledChanged() -{ - for(int i = 0; i < observers.size(); i++) - { - observers[i]->NotifyCommentBoxEnabledChanged(this); - } -} - -void PreviewModel::notifyCommentsPageChanged() -{ - for(int i = 0; i < observers.size(); i++) - { - observers[i]->NotifyCommentsPageChanged(this); - } -} - -void PreviewModel::notifySaveCommentsChanged() -{ - for(int i = 0; i < observers.size(); i++) - { - observers[i]->NotifyCommentsChanged(this); - } -} - -void PreviewModel::AddObserver(PreviewView * observer) { - observers.push_back(observer); - observer->NotifySaveChanged(this); - observer->NotifyCommentsChanged(this); - observer->NotifyCommentsPageChanged(this); - observer->NotifyCommentBoxEnabledChanged(this); -} - -void PreviewModel::Update() -{ - if(updateSaveDataWorking) - { - if(updateSaveDataFinished) - { - updateSaveDataWorking = false; - pthread_join(updateSaveDataThread, NULL); - - if(updateSaveInfoFinished && save) - { - commentsTotal = save->Comments; - try - { - save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size())); - } - catch(ParseException &e) - { - throw PreviewModelException("Save file corrupt or from newer version"); - } - notifySaveChanged(); - notifyCommentsPageChanged(); - } - } - } - - if(updateSaveInfoWorking) - { - if(updateSaveInfoFinished) - { - if(save) - { - delete save; - save = NULL; - } - updateSaveInfoWorking = false; - pthread_join(updateSaveInfoThread, (void**)(&save)); - if(updateSaveDataFinished && save) - { - commentsTotal = save->Comments; - try - { - save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size())); - } - catch(ParseException &e) - { - throw PreviewModelException("Save file corrupt or from newer version"); - } - notifyCommentsPageChanged(); - } - notifySaveChanged(); - - if(!save) - throw PreviewModelException("Unable to load save"); - } - } - - if(updateSaveCommentsWorking) - { - if(updateSaveCommentsFinished) - { - if(saveComments) - { - for(int i = 0; i < saveComments->size(); i++) - delete saveComments->at(i); - saveComments->clear(); - delete saveComments; - saveComments = NULL; - } - commentsLoaded = true; - updateSaveCommentsWorking = false; - pthread_join(updateSaveCommentsThread, (void**)(&saveComments)); - notifySaveCommentsChanged(); - } - } -} - -PreviewModel::~PreviewModel() { - pthread_cancel(updateSaveDataThread); - pthread_cancel(updateSaveInfoThread); - pthread_cancel(updateSaveCommentsThread); - if(save) - delete save; - if(saveComments) - { - for(int i = 0; i < saveComments->size(); i++) - delete saveComments->at(i); - saveComments->clear(); - delete saveComments; - } - saveDataBuffer.clear(); -} - diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h deleted file mode 100644 index a8800e3..0000000 --- a/src/preview/PreviewModel.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef PREVIEWMODEL_H_ -#define PREVIEWMODEL_H_ - -#include <vector> -#include <iostream> -#include <pthread.h> -#undef GetUserName //God dammit microsoft! -#include "PreviewView.h" -#include "client/SaveInfo.h" -#include "preview/Comment.h" -#include "search/Thumbnail.h" - -using namespace std; - -struct SaveData -{ - unsigned char * data; - int length; -}; - -class PreviewView; -class PreviewModel { - bool doOpen; - bool commentBoxEnabled; - vector<PreviewView*> observers; - SaveInfo * save; - vector<char> saveDataBuffer; - std::vector<SaveComment*> * saveComments; - void notifySaveChanged(); - void notifySaveCommentsChanged(); - void notifyCommentsPageChanged(); - void notifyCommentBoxEnabledChanged(); - - //Background retrieval - int tSaveID; - int tSaveDate; - - // - bool commentsLoaded; - int commentsTotal; - int commentsPageNumber; - - bool updateSaveDataWorking; - volatile bool updateSaveDataFinished; - pthread_t updateSaveDataThread; - static void * updateSaveDataTHelper(void * obj); - static void updateSaveDataTDelete(void * arg); - void * updateSaveDataT(); - - bool updateSaveInfoWorking; - volatile bool updateSaveInfoFinished; - pthread_t updateSaveInfoThread; - static void * updateSaveInfoTHelper(void * obj); - static void updateSaveInfoTDelete(void * arg); - void * updateSaveInfoT(); - - bool updateSaveCommentsWorking; - volatile bool updateSaveCommentsFinished; - pthread_t updateSaveCommentsThread; - static void * updateSaveCommentsTHelper(void * obj); - static void updateSaveCommentsTDelete(void * arg); - void * updateSaveCommentsT(); -public: - PreviewModel(); - SaveInfo * GetSave(); - std::vector<SaveComment*> * GetComments(); - - bool GetCommentBoxEnabled(); - void SetCommentBoxEnabled(bool enabledState); - - bool GetCommentsLoaded(); - int GetCommentsPageNum(); - int GetCommentsPageCount(); - void UpdateComments(int pageNumber); - - void AddObserver(PreviewView * observer); - void UpdateSave(int saveID, int saveDate); - void SetFavourite(bool favourite); - bool GetDoOpen(); - void SetDoOpen(bool doOpen); - void Update(); - virtual ~PreviewModel(); -}; - -#endif /* PREVIEWMODEL_H_ */ diff --git a/src/preview/PreviewModelException.h b/src/preview/PreviewModelException.h deleted file mode 100644 index 85dce1d..0000000 --- a/src/preview/PreviewModelException.h +++ /dev/null @@ -1,19 +0,0 @@ -#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 deleted file mode 100644 index e04295a..0000000 --- a/src/preview/PreviewView.cpp +++ /dev/null @@ -1,614 +0,0 @@ -#include <sstream> -#include <vector> -#include <cmath> -#include "PreviewView.h" -#include "dialogues/TextPrompt.h" -#include "simulation/SaveRenderer.h" -#include "interface/Point.h" -#include "interface/Window.h" -#include "interface/Textbox.h" -#include "Style.h" -#include "Format.h" -#include "search/Thumbnail.h" -#include "client/Client.h" -#include "interface/ScrollPanel.h" -#include "interface/AvatarButton.h" -#include "interface/Keys.h" - -class PreviewView::LoginAction: public ui::ButtonAction -{ - PreviewView * v; -public: - LoginAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - v->c->ShowLogin(); - } -}; - -class PreviewView::SubmitCommentAction: public ui::ButtonAction -{ - PreviewView * v; -public: - SubmitCommentAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - v->submitComment(); - } -}; - -class PreviewView::AutoCommentSizeAction: public ui::TextboxAction -{ - PreviewView * v; -public: - AutoCommentSizeAction(PreviewView * v): v(v) {} - virtual void TextChangedCallback(ui::Textbox * sender) { - v->commentBoxAutoHeight(); - } -}; - -PreviewView::PreviewView(): - ui::Window(ui::Point(-1, -1), ui::Point((XRES/2)+210, (YRES/2)+150)), - savePreview(NULL), - doOpen(false), - addCommentBox(NULL), - submitCommentButton(NULL), - commentBoxHeight(20), - showAvatars(true) -{ - class FavAction: public ui::ButtonAction - { - PreviewView * v; - public: - FavAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - v->c->FavouriteSave(); - } - }; - - showAvatars = Client::Ref().GetPrefBool("ShowAvatars", true); - - favButton = new ui::Button(ui::Point(50, Size.Y-19), ui::Point(51, 19), "Fav"); - favButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; favButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - favButton->SetIcon(IconFavourite); - favButton->SetActionCallback(new FavAction(this)); - favButton->Enabled = Client::Ref().GetAuthUser().ID?true:false; - 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", "Things to consider when reporting:\n\bw1)\bg When reporting stolen saves, please include the ID of the original save.\n\bw2)\bg Do not waste staff time with fake or bogus reports, doing so may result in a ban.", "", "[reason]", true, new ReportPromptCallback(v)); - } - }; - reportButton = new ui::Button(ui::Point(100, Size.Y-19), ui::Point(51, 19), "Report"); - reportButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; reportButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - reportButton->SetIcon(IconReport); - reportButton->SetActionCallback(new ReportAction(this)); - reportButton->Enabled = Client::Ref().GetAuthUser().ID?true:false; - AddComponent(reportButton); - - class OpenAction: public ui::ButtonAction - { - PreviewView * v; - public: - OpenAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - v->c->DoOpen(); - } - }; - openButton = new ui::Button(ui::Point(0, Size.Y-19), ui::Point(51, 19), "Open"); - openButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; openButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - openButton->SetIcon(IconOpen); - openButton->SetActionCallback(new OpenAction(this)); - AddComponent(openButton); - - class BrowserOpenAction: public ui::ButtonAction - { - PreviewView * v; - public: - BrowserOpenAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - v->c->OpenInBrowser(); - } - }; - - browserOpenButton = new ui::Button(ui::Point((XRES/2)-107, Size.Y-19), ui::Point(108, 19), "Open in browser"); - browserOpenButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; browserOpenButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - browserOpenButton->SetIcon(IconOpen); - browserOpenButton->SetActionCallback(new BrowserOpenAction(this)); - AddComponent(browserOpenButton); - - if(showAvatars) - saveNameLabel = new ui::Label(ui::Point(39, (YRES/2)+4), ui::Point(100, 16), ""); - else - saveNameLabel = new ui::Label(ui::Point(5, (YRES/2)+4), ui::Point(100, 16), ""); - saveNameLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - saveNameLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - AddComponent(saveNameLabel); - - if(showAvatars) - saveDescriptionLabel = new ui::Label(ui::Point(5, (YRES/2)+4+15+21), ui::Point((XRES/2)-10, Size.Y-((YRES/2)+4+15+17)-25), ""); - else - saveDescriptionLabel = new ui::Label(ui::Point(5, (YRES/2)+4+15+19), ui::Point((XRES/2)-10, Size.Y-((YRES/2)+4+15+17)-23), ""); - saveDescriptionLabel->SetMultiline(true); - saveDescriptionLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - saveDescriptionLabel->Appearance.VerticalAlign = ui::Appearance::AlignTop; - saveDescriptionLabel->SetTextColour(ui::Colour(180, 180, 180)); - AddComponent(saveDescriptionLabel); - - if(showAvatars) - authorDateLabel = new ui::Label(ui::Point(39, (YRES/2)+4+15), ui::Point(180, 16), ""); - else - authorDateLabel = new ui::Label(ui::Point(5, (YRES/2)+4+15), ui::Point(200, 16), ""); - authorDateLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - authorDateLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - AddComponent(authorDateLabel); - - if(showAvatars) - { - avatarButton = new ui::AvatarButton(ui::Point(4, (YRES/2)+4), ui::Point(34, 34), ""); - AddComponent(avatarButton); - } - - viewsLabel = new ui::Label(ui::Point((XRES/2)-80, (YRES/2)+4+15), ui::Point(80, 16), ""); - viewsLabel->Appearance.HorizontalAlign = ui::Appearance::AlignRight; - viewsLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - AddComponent(viewsLabel); - - - pageInfo = new ui::Label(ui::Point((XRES/2) + 5, Size.Y+1), ui::Point(Size.X-((XRES/2) + 10), 15), "Page 1 of 1"); - pageInfo->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; authorDateLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - - saveIDTextbox = new ui::Textbox(ui::Point((XRES/2)-55, Size.Y-40), ui::Point(50, 16), "0000000"); - saveIDTextbox->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; - saveIDTextbox->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - saveIDTextbox->ReadOnly = true; - AddComponent(saveIDTextbox); - - class CopyIDAction: public ui::ButtonAction - { - PreviewView * v; - public: - CopyIDAction(PreviewView * v_){ v = v_; } - virtual void ActionCallback(ui::Button * sender) - { - ClipboardPush((char*)v->saveIDTextbox->GetText().c_str()); - } - }; - - ui::Button * tempButton = new ui::Button(ui::Point((XRES/2)-130, Size.Y-40), ui::Point(70, 16), "Copy Save ID"); - tempButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; - tempButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - tempButton->SetActionCallback(new CopyIDAction(this)); - AddComponent(tempButton); - - commentsPanel = new ui::ScrollPanel(ui::Point((XRES/2)+1, 1), ui::Point((Size.X-(XRES/2))-2, Size.Y-commentBoxHeight)); - AddComponent(commentsPanel); - - AddComponent(pageInfo); -} - -void PreviewView::AttachController(PreviewController * controller) -{ - c = controller; - saveIDTextbox->SetText(format::NumberToString<int>(c->SaveID())); -} - -void PreviewView::commentBoxAutoHeight() -{ - if(!addCommentBox) - return; - int textWidth = Graphics::textwidth(addCommentBox->GetText().c_str()); - if(textWidth+15 > Size.X-(XRES/2)-48) - { - addCommentBox->Appearance.VerticalAlign = ui::Appearance::AlignTop; - - int oldSize = addCommentBox->Size.Y; - addCommentBox->AutoHeight(); - int newSize = addCommentBox->Size.Y+5; - addCommentBox->Size.Y = oldSize; - - commentBoxHeight = newSize+22; - commentBoxPositionX = (XRES/2)+4; - commentBoxPositionY = Size.Y-(newSize+21); - commentBoxSizeX = Size.X-(XRES/2)-8; - commentBoxSizeY = newSize; - } - else - { - commentBoxHeight = 20; - addCommentBox->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; - - commentBoxPositionX = (XRES/2)+4; - commentBoxPositionY = Size.Y-19; - commentBoxSizeX = Size.X-(XRES/2)-48; - commentBoxSizeY = 17; - } - commentsPanel->Size.Y = Size.Y-commentBoxHeight; -} - -void PreviewView::DoDraw() -{ - Window::DoDraw(); - Graphics * g = ui::Engine::Ref().g; - for(int i = 0; i < commentTextComponents.size(); i++) - { - int linePos = commentTextComponents[i]->Position.Y+commentsPanel->ViewportPosition.Y+commentTextComponents[i]->Size.Y+4; - if(linePos > 0 && linePos < Size.Y-commentBoxHeight) - g->draw_line( - Position.X+1+XRES/2, - Position.Y+linePos, - Position.X+Size.X-2, - Position.Y+linePos, - 255, 255, 255, 100); - } - if(c->GetDoOpen()) - { - g->fillrect(Position.X+(Size.X/2)-101, Position.Y+(Size.Y/2)-26, 202, 52, 0, 0, 0, 210); - g->drawrect(Position.X+(Size.X/2)-100, Position.Y+(Size.Y/2)-25, 200, 50, 255, 255, 255, 180); - g->drawtext(Position.X+(Size.X/2)-(Graphics::textwidth("Loading save...")/2), Position.Y+(Size.Y/2)-5, "Loading save...", style::Colour::InformationTitle.Red, style::Colour::InformationTitle.Green, style::Colour::InformationTitle.Blue, 255); - } - g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255); - -} - -void PreviewView::OnDraw() -{ - Graphics * g = ui::Engine::Ref().g; - - //Window Background+Outline - g->clearrect(Position.X-2, Position.Y-2, Size.X+4, Size.Y+4); - - //Save preview (top-left) - if(savePreview && savePreview->Buffer) - { - g->draw_image(savePreview, (Position.X+1)+(((XRES/2)-savePreview->Width)/2), (Position.Y+1)+(((YRES/2)-savePreview->Height)/2), 255); - } - g->drawrect(Position.X, Position.Y, (XRES/2)+1, (YRES/2)+1, 255, 255, 255, 100); - g->draw_line(Position.X+XRES/2, Position.Y+1, Position.X+XRES/2, Position.Y+Size.Y-2, 200, 200, 200, 255); - - if(votesUp || votesDown) - { - float ryf; - int nyu, nyd; - int lv = (votesUp>votesDown)?votesUp:votesDown; - lv = (lv>10)?lv:10; - - if (50>lv) - { - ryf = 50.0f/((float)lv); - nyu = votesUp*ryf; - nyd = votesDown*ryf; - } - else - { - ryf = ((float)lv)/50.0f; - nyu = votesUp/ryf; - nyd = votesDown/ryf; - } - nyu = nyu>50?50:nyu; - nyd = nyd>50?50:nyd; - - g->fillrect(Position.X+(XRES/2)-55, Position.Y+(YRES/2)+3, 53, 7, 0, 107, 10, 255); - g->fillrect(Position.X+(XRES/2)-55, Position.Y+(YRES/2)+9, 53, 7, 107, 10, 0, 255); - g->drawrect(Position.X+(XRES/2)-55, Position.Y+(YRES/2)+3, 53, 7, 128, 128, 128, 255); - g->drawrect(Position.X+(XRES/2)-55, Position.Y+(YRES/2)+9, 53, 7, 128, 128, 128, 255); - - g->fillrect(Position.X+(XRES/2)-4-nyu, Position.Y+(YRES/2)+5, nyu, 3, 57, 187, 57, 255); - g->fillrect(Position.X+(XRES/2)-4-nyd, Position.Y+(YRES/2)+11, nyd, 3, 187, 57, 57, 255); - } -} - -void PreviewView::OnTick(float dt) -{ - if(addCommentBox) - { - ui::Point positionDiff = ui::Point(commentBoxPositionX, commentBoxPositionY)-addCommentBox->Position; - ui::Point sizeDiff = ui::Point(commentBoxSizeX, commentBoxSizeY)-addCommentBox->Size; - - if(positionDiff.X!=0) - { - int xdiff = positionDiff.X/5; - if(xdiff == 0) - xdiff = 1*isign(positionDiff.X); - addCommentBox->Position.X += xdiff; - } - if(positionDiff.Y!=0) - { - int ydiff = positionDiff.Y/5; - if(ydiff == 0) - ydiff = 1*isign(positionDiff.Y); - addCommentBox->Position.Y += ydiff; - } - - if(sizeDiff.X!=0) - { - int xdiff = sizeDiff.X/5; - if(xdiff == 0) - xdiff = 1*isign(sizeDiff.X); - addCommentBox->Size.X += xdiff; - addCommentBox->Invalidate(); - } - if(sizeDiff.Y!=0) - { - int ydiff = sizeDiff.Y/5; - if(ydiff == 0) - ydiff = 1*isign(sizeDiff.Y); - addCommentBox->Size.Y += ydiff; - addCommentBox->Invalidate(); - } - } - - c->Update(); -} - -void PreviewView::OnTryExit(ExitMethod method) -{ - c->Exit(); -} - -void PreviewView::OnMouseWheel(int x, int y, int d) -{ - if(commentsPanel->GetScrollLimit() == 1 && d < 0) - c->NextCommentPage(); - if(commentsPanel->GetScrollLimit() == -1 && d > 0) - c->PrevCommentPage(); - -} - -void PreviewView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt) -{ - if ((key == KEY_ENTER || key == KEY_RETURN) && (!addCommentBox || !addCommentBox->IsFocused())) - openButton->DoAction(); -} - -void PreviewView::NotifySaveChanged(PreviewModel * sender) -{ - SaveInfo * save = sender->GetSave(); - if(savePreview) - delete savePreview; - savePreview = NULL; - if(save) - { - votesUp = save->votesUp; - votesDown = save->votesDown; - saveNameLabel->SetText(save->name); - if(showAvatars) { - avatarButton->SetUsername(save->userName); - authorDateLabel->SetText("\bw" + save->userName + " \bgDate:\bw " + format::UnixtimeToDateMini(save->date)); - } - else - { - authorDateLabel->SetText("\bgAuthor:\bw " + save->userName + " \bgDate:\bw " + format::UnixtimeToDateMini(save->date)); - } - viewsLabel->SetText("\bgViews:\bw " + format::NumberToString<int>(save->Views)); - saveDescriptionLabel->SetText(save->Description); - if(save->Favourite) - { - favButton->Enabled = true; - favButton->SetText("Unfav"); - } - else if(Client::Ref().GetAuthUser().ID) - { - favButton->Enabled = true; - favButton->SetText("Fav"); - } - else - { - favButton->SetText("Fav"); - favButton->Enabled = false; - } - - if(save->GetGameSave()) - { - savePreview = SaveRenderer::Ref().Render(save->GetGameSave(), false, true); - - if(savePreview && savePreview->Buffer && !(savePreview->Width == XRES/2 && savePreview->Width == YRES/2)) - { - int newSizeX, newSizeY; - pixel * oldData = savePreview->Buffer; - float factorX = ((float)XRES/2)/((float)savePreview->Width); - float factorY = ((float)YRES/2)/((float)savePreview->Height); - float scaleFactor = factorY < factorX ? factorY : factorX; - savePreview->Buffer = Graphics::resample_img(oldData, savePreview->Width, savePreview->Height, savePreview->Width*scaleFactor, savePreview->Height*scaleFactor); - delete[] oldData; - savePreview->Width *= scaleFactor; - savePreview->Height *= scaleFactor; - } - } - } - else - { - votesUp = 0; - votesDown = 0; - saveNameLabel->SetText(""); - authorDateLabel->SetText(""); - saveDescriptionLabel->SetText(""); - favButton->Enabled = false; - } -} - -void PreviewView::submitComment() -{ - if(addCommentBox) - { - std::string comment = std::string(addCommentBox->GetText()); - submitCommentButton->Enabled = false; - addCommentBox->SetText(""); - addCommentBox->SetPlaceholder("Submitting comment"); //This doesn't appear to ever show since no separate thread is created - FocusComponent(NULL); - - if (!c->SubmitComment(comment)) - addCommentBox->SetText(comment); - - addCommentBox->SetPlaceholder("Add comment"); - submitCommentButton->Enabled = true; - - commentBoxAutoHeight(); - } -} - -void PreviewView::NotifyCommentBoxEnabledChanged(PreviewModel * sender) -{ - if(addCommentBox) - { - RemoveComponent(addCommentBox); - delete addCommentBox; - addCommentBox = NULL; - } - if(submitCommentButton) - { - RemoveComponent(submitCommentButton); - delete submitCommentButton; - submitCommentButton = NULL; - } - if(sender->GetCommentBoxEnabled()) - { - commentBoxPositionX = (XRES/2)+4; - commentBoxPositionY = Size.Y-19; - commentBoxSizeX = Size.X-(XRES/2)-48; - commentBoxSizeY = 17; - - addCommentBox = new ui::Textbox(ui::Point((XRES/2)+4, Size.Y-19), ui::Point(Size.X-(XRES/2)-48, 17), "", "Add Comment"); - addCommentBox->SetActionCallback(new AutoCommentSizeAction(this)); - addCommentBox->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - addCommentBox->SetMultiline(true); - AddComponent(addCommentBox); - submitCommentButton = new ui::Button(ui::Point(Size.X-40, Size.Y-19), ui::Point(40, 19), "Submit"); - submitCommentButton->SetActionCallback(new SubmitCommentAction(this)); - //submitCommentButton->Enabled = false; - AddComponent(submitCommentButton); - } - else - { - submitCommentButton = new ui::Button(ui::Point(XRES/2, Size.Y-19), ui::Point(Size.X-(XRES/2), 19), "Login to comment"); - submitCommentButton->SetActionCallback(new LoginAction(this)); - AddComponent(submitCommentButton); - } -} - -void PreviewView::NotifyCommentsPageChanged(PreviewModel * sender) -{ - std::stringstream pageInfoStream; - pageInfoStream << "Page " << sender->GetCommentsPageNum() << " of " << sender->GetCommentsPageCount(); - pageInfo->SetText(pageInfoStream.str()); -} - -void PreviewView::NotifyCommentsChanged(PreviewModel * sender) -{ - std::vector<SaveComment*> * comments = sender->GetComments(); - - for(int i = 0; i < commentComponents.size(); i++) - { - commentsPanel->RemoveChild(commentComponents[i]); - delete commentComponents[i]; - } - commentComponents.clear(); - commentTextComponents.clear(); - commentsPanel->InnerSize = ui::Point(0, 0); - - if(comments) - { - for(int i = 0; i < commentComponents.size(); i++) - { - commentsPanel->RemoveChild(commentComponents[i]); - delete commentComponents[i]; - } - commentComponents.clear(); - commentTextComponents.clear(); - - int currentY = 0;//-yOffset; - ui::Label * tempUsername; - ui::Label * tempComment; - ui::AvatarButton * tempAvatar; - for(int i = 0; i < comments->size(); i++) - { - int usernameY = currentY+5, commentY; - if(showAvatars) - { - tempAvatar = new ui::AvatarButton(ui::Point(2, currentY+7), ui::Point(26, 26), comments->at(i)->authorName); - commentComponents.push_back(tempAvatar); - commentsPanel->AddChild(tempAvatar); - } - - if(showAvatars) - tempUsername = new ui::Label(ui::Point(31, currentY+3), ui::Point(Size.X-((XRES/2) + 13), 16), comments->at(i)->authorNameFormatted); - else - tempUsername = new ui::Label(ui::Point(5, currentY+3), ui::Point(Size.X-((XRES/2) + 13), 16), comments->at(i)->authorNameFormatted); - tempUsername->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - tempUsername->Appearance.VerticalAlign = ui::Appearance::AlignBottom; - currentY += 16; - - commentComponents.push_back(tempUsername); - commentsPanel->AddChild(tempUsername); - - commentY = currentY+5; - if(showAvatars) - tempComment = new ui::Label(ui::Point(31, currentY+5), ui::Point(Size.X-((XRES/2) + 13 + 26), -1), comments->at(i)->comment); - else - tempComment = new ui::Label(ui::Point(5, currentY+5), ui::Point(Size.X-((XRES/2) + 13), -1), comments->at(i)->comment); - tempComment->SetMultiline(true); - tempComment->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; - tempComment->Appearance.VerticalAlign = ui::Appearance::AlignTop; - tempComment->SetTextColour(ui::Colour(180, 180, 180)); - currentY += tempComment->Size.Y+4; - - commentComponents.push_back(tempComment); - commentsPanel->AddChild(tempComment); - commentTextComponents.push_back(tempComment); - } - - commentsPanel->InnerSize = ui::Point(commentsPanel->Size.X, currentY+4); - } -} - -/*void PreviewView::NotifyPreviewChanged(PreviewModel * sender) -{ - savePreview = sender->GetGameSave(); - if(savePreview && savePreview->Data && !(savePreview->Width == XRES/2 && savePreview->Height == YRES/2)) - { - int newSizeX, newSizeY; - float factorX = ((float)XRES/2)/((float)savePreview->Width); - float factorY = ((float)YRES/2)/((float)savePreview->Height); - float scaleFactor = factorY < factorX ? factorY : factorX; - savePreview->Data = Graphics::resample_img(savePreview->Data, savePreview->Width, savePreview->Height, savePreview->Width*scaleFactor, savePreview->Height*scaleFactor); - savePreview->Width *= scaleFactor; - savePreview->Height *= scaleFactor; - } -}*/ - -PreviewView::~PreviewView() -{ - if(addCommentBox) - { - RemoveComponent(addCommentBox); - delete addCommentBox; - } - if(submitCommentButton) - { - RemoveComponent(submitCommentButton); - delete submitCommentButton; - } - if(savePreview) - delete savePreview; -} - diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h deleted file mode 100644 index c9025fd..0000000 --- a/src/preview/PreviewView.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef PREVIEWVIEW_H_ -#define PREVIEWVIEW_H_ - -#include <vector> -#include "Comment.h" -#include "interface/Window.h" -#include "preview/PreviewController.h" -#include "preview/PreviewModel.h" -#include "interface/Button.h" -#include "interface/Label.h" -#include "interface/Textbox.h" - -namespace ui -{ - class ScrollPanel; - class AvatarButton; -} - -class VideoBuffer; -class PreviewModel; -class PreviewController; -class PreviewView: public ui::Window { - class SubmitCommentAction; - class LoginAction; - class AutoCommentSizeAction; - PreviewController * c; - VideoBuffer * savePreview; - ui::Button * openButton; - ui::Button * browserOpenButton; - ui::Button * favButton; - ui::Button * reportButton; - ui::Button * submitCommentButton; - ui::Textbox * addCommentBox; - ui::Label * saveNameLabel; - ui::Label * authorDateLabel; - ui::AvatarButton * avatarButton; - ui::Label * pageInfo; - ui::Label * saveDescriptionLabel; - ui::Label * viewsLabel; - ui::Textbox * saveIDTextbox; - ui::ScrollPanel * commentsPanel; - std::vector<ui::Component*> commentComponents; - std::vector<ui::Component*> commentTextComponents; - int votesUp; - int votesDown; - bool doOpen; - bool showAvatars; - - int commentBoxHeight; - float commentBoxPositionX; - float commentBoxPositionY; - float commentBoxSizeX; - float commentBoxSizeY; - - void displayComments(); - void commentBoxAutoHeight(); - void submitComment(); -public: - void AttachController(PreviewController * controller); - PreviewView(); - void NotifySaveChanged(PreviewModel * sender); - void NotifyCommentsChanged(PreviewModel * sender); - void NotifyCommentsPageChanged(PreviewModel * sender); - void NotifyCommentBoxEnabledChanged(PreviewModel * sender); - virtual void OnDraw(); - virtual void DoDraw(); - virtual void OnTick(float dt); - virtual void OnTryExit(ExitMethod method); - virtual void OnMouseWheel(int x, int y, int d); - virtual void OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt); - virtual ~PreviewView(); -}; - -#endif /* PREVIEWVIEW_H_ */ |
