diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-22 15:35:32 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-22 15:35:32 (GMT) |
| commit | beee75d9d1f9bc4a897887a0ac5b427449213f80 (patch) | |
| tree | 5b76724ab9c7ae8ea719066b01e301ec8cbacec8 /src/preview/PreviewModel.cpp | |
| parent | e6e23669eea8768ec004c16437c67717b66fb1a0 (diff) | |
| download | powder-beee75d9d1f9bc4a897887a0ac5b427449213f80.zip powder-beee75d9d1f9bc4a897887a0ac5b427449213f80.tar.gz | |
Multiple pages of comments
Diffstat (limited to 'src/preview/PreviewModel.cpp')
| -rw-r--r-- | src/preview/PreviewModel.cpp | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp index f923ceb..3066ac3 100644 --- a/src/preview/PreviewModel.cpp +++ b/src/preview/PreviewModel.cpp @@ -5,6 +5,7 @@ * Author: Simon */ +#include <cmath> #include "PreviewModel.h" #include "client/Client.h" #include "PreviewModelException.h" @@ -18,7 +19,9 @@ PreviewModel::PreviewModel(): updateSaveInfoWorking(false), updateSaveInfoFinished(false), updateSaveCommentsWorking(false), - updateSaveCommentsFinished(false) + updateSaveCommentsFinished(false), + commentsTotal(0), + commentsPageNumber(1) { // TODO Auto-generated constructor stub @@ -58,7 +61,7 @@ void * PreviewModel::updateSaveDataT() void * PreviewModel::updateSaveCommentsT() { - std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(tSaveID, 0, 10); + std::vector<SaveComment*> * tempComments = Client::Ref().GetComments(tSaveID, (commentsPageNumber-1)*10, 10); updateSaveCommentsFinished = true; return tempComments; } @@ -110,6 +113,7 @@ void PreviewModel::UpdateSave(int saveID, int saveDate) if(!updateSaveCommentsWorking) { + commentsLoaded = false; updateSaveCommentsWorking = true; updateSaveCommentsFinished = false; pthread_create(&updateSaveCommentsThread, 0, &PreviewModel::updateSaveCommentsTHelper, this); @@ -131,6 +135,46 @@ SaveInfo * PreviewModel::GetSave() return save; } +int PreviewModel::GetCommentsPageNum() +{ + return commentsPageNumber; +} + +int PreviewModel::GetCommentsPageCount() +{ + return max(1, (int)(ceil(commentsTotal/10))); +} + +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); + 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; @@ -144,6 +188,14 @@ void PreviewModel::notifySaveChanged() } } +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++) @@ -155,6 +207,8 @@ void PreviewModel::notifySaveCommentsChanged() void PreviewModel::AddObserver(PreviewView * observer) { observers.push_back(observer); observer->NotifySaveChanged(this); + observer->NotifyCommentsChanged(this); + observer->NotifyCommentsPageChanged(this); } void PreviewModel::Update() @@ -194,6 +248,7 @@ void PreviewModel::Update() pthread_join(updateSaveInfoThread, (void**)(&save)); if(updateSaveDataFinished && save) { + commentsTotal = save->Comments; try { save->SetGameSave(new GameSave(&saveDataBuffer[0], saveDataBuffer.size())); @@ -204,6 +259,7 @@ void PreviewModel::Update() } } notifySaveChanged(); + notifyCommentsPageChanged(); if(!save) throw PreviewModelException("Unable to load save"); } @@ -220,6 +276,7 @@ void PreviewModel::Update() delete saveComments; saveComments = NULL; } + commentsLoaded = true; updateSaveCommentsWorking = false; pthread_join(updateSaveCommentsThread, (void**)(&saveComments)); notifySaveCommentsChanged(); |
