summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBryan Hoyle <starfoxprime@gmail.com>2012-06-22 16:00:17 (GMT)
committer Bryan Hoyle <starfoxprime@gmail.com>2012-06-22 16:00:17 (GMT)
commit6fa05d1930964d0a09093c627b30241d73c69dda (patch)
treeb2d9856f5f0c26529de8eff8fc8b8f39cb234b64 /src
parent58f3494f6fce58729e6e3fe91e1234a9bd636d55 (diff)
parent55d90a44a8425f70b08d864570e255f4bad8ba4c (diff)
downloadpowder-6fa05d1930964d0a09093c627b30241d73c69dda.zip
powder-6fa05d1930964d0a09093c627b30241d73c69dda.tar.gz
Merge branch 'master' of github.com:FacialTurd/PowderToypp
Diffstat (limited to 'src')
-rw-r--r--src/client/Client.cpp4
-rw-r--r--src/client/SaveInfo.cpp6
-rw-r--r--src/client/SaveInfo.h1
-rw-r--r--src/preview/PreviewController.cpp12
-rw-r--r--src/preview/PreviewController.h4
-rw-r--r--src/preview/PreviewModel.cpp61
-rw-r--r--src/preview/PreviewModel.h12
-rw-r--r--src/preview/PreviewView.cpp44
-rw-r--r--src/preview/PreviewView.h4
9 files changed, 135 insertions, 13 deletions
diff --git a/src/client/Client.cpp b/src/client/Client.cpp
index 71bbfc4..ec88927 100644
--- a/src/client/Client.cpp
+++ b/src/client/Client.cpp
@@ -851,6 +851,7 @@ SaveInfo * Client::GetSave(int saveID, int saveDate)
json::Number tempDate = objDocument["Date"];
json::Boolean tempPublished = objDocument["Published"];
json::Boolean tempFavourite = objDocument["Favourite"];
+ json::Number tempComments = objDocument["Comments"];
json::Array tagsArray = objDocument["Tags"];
vector<string> tempTags;
@@ -873,6 +874,7 @@ SaveInfo * Client::GetSave(int saveID, int saveDate)
tempPublished.Value(),
tempTags
);
+ tempSave->Comments = tempComments.Value();
tempSave->Favourite = tempFavourite.Value();
return tempSave;
}
@@ -939,7 +941,7 @@ std::vector<SaveComment*> * Client::GetComments(int saveID, int start, int count
std::stringstream urlStream;
char * data;
int dataStatus, dataLength;
- urlStream << "http://" << SERVER << "/Browse/View.json?ID=" << saveID << "&Mode=Comments&Start=" << start << "&Count=" << count;
+ urlStream << "http://" << SERVER << "/Browse/Comments.json?ID=" << saveID << "&Start=" << start << "&Count=" << count;
data = http_simple_get((char *)urlStream.str().c_str(), &dataStatus, &dataLength);
if(dataStatus == 200 && data)
{
diff --git a/src/client/SaveInfo.cpp b/src/client/SaveInfo.cpp
index bfacd7d..da1033f 100644
--- a/src/client/SaveInfo.cpp
+++ b/src/client/SaveInfo.cpp
@@ -11,7 +11,7 @@
SaveInfo::SaveInfo(SaveInfo & save) :
userName(save.userName), name(save.name), Description(save.Description), date(
save.date), Published(save.Published), id(save.id), votesUp(
- save.votesUp), votesDown(save.votesDown), gameSave(NULL), vote(save.vote), tags(save.tags) {
+ save.votesUp), votesDown(save.votesDown), gameSave(NULL), vote(save.vote), tags(save.tags), Comments(save.Comments) {
if(save.gameSave)
gameSave = new GameSave(*save.gameSave);
}
@@ -20,14 +20,14 @@ SaveInfo::SaveInfo(int _id, int _date, int _votesUp, int _votesDown, string _use
string _name) :
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
_name), Description("No description provided"), date(_date), Published(
- true), gameSave(NULL), vote(0), tags() {
+ true), gameSave(NULL), vote(0), tags(), Comments(0) {
}
SaveInfo::SaveInfo(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName,
string _name, string description_, bool published_, vector<string> tags_) :
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
_name), Description(description_), date(date_), Published(
- published_), gameSave(NULL), vote(_vote), tags(tags_) {
+ published_), gameSave(NULL), vote(_vote), tags(tags_), Comments(0) {
}
SaveInfo::~SaveInfo()
diff --git a/src/client/SaveInfo.h b/src/client/SaveInfo.h
index 5360f90..e1b013e 100644
--- a/src/client/SaveInfo.h
+++ b/src/client/SaveInfo.h
@@ -18,6 +18,7 @@ public:
int date;
int votesUp, votesDown;
bool Favourite;
+ int Comments;
GameSave * gameSave;
diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp
index 22913d7..63d37c3 100644
--- a/src/preview/PreviewController.cpp
+++ b/src/preview/PreviewController.cpp
@@ -86,6 +86,18 @@ void PreviewController::OpenInBrowser()
}
}
+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)
diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h
index 680a8f7..815ca5d 100644
--- a/src/preview/PreviewController.h
+++ b/src/preview/PreviewController.h
@@ -32,6 +32,10 @@ public:
PreviewView * GetView() { return previewView; }
void Update();
void FavouriteSave();
+
+ void NextCommentPage();
+ void PrevCommentPage();
+
virtual ~PreviewController();
};
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();
diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h
index 5a0fd53..f00a418 100644
--- a/src/preview/PreviewModel.h
+++ b/src/preview/PreviewModel.h
@@ -33,11 +33,17 @@ class PreviewModel {
std::vector<SaveComment*> * saveComments;
void notifySaveChanged();
void notifySaveCommentsChanged();
+ void notifyCommentsPageChanged();
//Background retrieval
int tSaveID;
int tSaveDate;
+ //
+ bool commentsLoaded;
+ int commentsTotal;
+ int commentsPageNumber;
+
bool updateSaveDataWorking;
volatile bool updateSaveDataFinished;
pthread_t updateSaveDataThread;
@@ -59,6 +65,12 @@ public:
PreviewModel();
SaveInfo * GetSave();
std::vector<SaveComment*> * GetComments();
+
+ bool GetCommentsLoaded();
+ int GetCommentsPageNum();
+ int GetCommentsPageCount();
+ void UpdateComments(int pageNumber);
+
void AddObserver(PreviewView * observer);
void UpdateSave(int saveID, int saveDate);
void SetFavourite(bool favourite);
diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp
index cc49f91..69229f0 100644
--- a/src/preview/PreviewView.cpp
+++ b/src/preview/PreviewView.cpp
@@ -21,7 +21,9 @@ PreviewView::PreviewView():
doOpen(false),
commentsOffset(0),
commentsVel(0),
- maxOffset(0)
+ maxOffset(0),
+ commentsBegin(true),
+ commentsEnd(false)
{
class OpenAction: public ui::ButtonAction
{
@@ -112,6 +114,10 @@ PreviewView::PreviewView():
authorDateLabel = new ui::Label(ui::Point(5, (YRES/2)+15+14), ui::Point(100, 16), "");
authorDateLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; authorDateLabel->Appearance.VerticalAlign = ui::Appearance::AlignBottom;
AddComponent(authorDateLabel);
+
+ pageInfo = new ui::Label(ui::Point((XRES/2) + 5, Size.Y-15), ui::Point(Size.X-((XRES/2) + 10), 15), "Page 1 of 1");
+ pageInfo->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; authorDateLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ AddComponent(pageInfo);
}
void PreviewView::DoDraw()
@@ -185,12 +191,22 @@ void PreviewView::OnTick(float dt)
{
commentsOffset = 0;
commentsVel = 0;
+ commentsBegin = true;
+ commentsEnd = false;
}
- if(commentsOffset>maxOffset)
+ else if(commentsOffset>maxOffset)
{
commentsOffset = maxOffset;
commentsVel = 0;
+ commentsEnd = true;
+ commentsBegin = false;
+ }
+ else
+ {
+ commentsEnd = false;
+ commentsBegin = false;
}
+
displayComments(commentsOffset);
}
@@ -303,6 +319,13 @@ void PreviewView::displayComments(int yOffset)
}
}
+void PreviewView::NotifyCommentsPageChanged(PreviewModel * sender)
+{
+ std::stringstream pageInfoStream;
+ pageInfoStream << "Page " << sender->GetCommentsPageNum() << " of " << sender->GetCommentsPageCount();
+ pageInfo->SetText(pageInfoStream.str());
+}
+
void PreviewView::NotifyCommentsChanged(PreviewModel * sender)
{
if(sender->GetComments())
@@ -335,6 +358,8 @@ void PreviewView::NotifyCommentsChanged(PreviewModel * sender)
maxOffset = (maxY-Size.Y)+16;
+ commentsBegin = true;
+ commentsEnd = false;
commentsOffset = 0;
commentsVel = 0;
displayComments(commentsOffset);
@@ -342,13 +367,18 @@ void PreviewView::NotifyCommentsChanged(PreviewModel * sender)
void PreviewView::OnMouseWheel(int x, int y, int d)
{
- commentsVel-=d;
- /*if(!d)
+ if(!d)
return;
+ commentsVel-=d;
+
if(d<0)
- c->NextPage();
- else
- c->PrevPage();*/
+ {
+ if(commentsEnd)
+ c->NextCommentPage();
+ } else {
+ if(commentsBegin)
+ c->PrevCommentPage();
+ }
}
/*void PreviewView::NotifyPreviewChanged(PreviewModel * sender)
diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h
index 33510a2..58232bb 100644
--- a/src/preview/PreviewView.h
+++ b/src/preview/PreviewView.h
@@ -29,6 +29,7 @@ class PreviewView: public ui::Window {
ui::Button * reportButton;
ui::Label * saveNameLabel;
ui::Label * authorDateLabel;
+ ui::Label * pageInfo;
ui::Textblock * saveDescriptionTextblock;
std::vector<SaveComment> comments;
std::vector<ui::Component*> commentComponents;
@@ -37,6 +38,8 @@ class PreviewView: public ui::Window {
int votesDown;
bool doOpen;
+ bool commentsEnd;
+ bool commentsBegin;
int maxOffset;
float commentsOffset;
float commentsVel;
@@ -47,6 +50,7 @@ public:
PreviewView();
void NotifySaveChanged(PreviewModel * sender);
void NotifyCommentsChanged(PreviewModel * sender);
+ void NotifyCommentsPageChanged(PreviewModel * sender);
virtual void OnDraw();
virtual void DoDraw();
virtual void OnTick(float dt);