summaryrefslogtreecommitdiff
path: root/src/preview
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-29 14:44:36 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-29 14:44:36 (GMT)
commit680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch)
tree21ca16411c1687bb212369a59c5f3de2a0cf023b /src/preview
parent7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff)
downloadpowder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.zip
powder-680a36549adaed0c3ce7e8906fadbdf190b0b3b0.tar.gz
Background retrieval of save info and save list.
Diffstat (limited to 'src/preview')
-rw-r--r--src/preview/PreviewController.cpp6
-rw-r--r--src/preview/PreviewController.h1
-rw-r--r--src/preview/PreviewModel.cpp74
-rw-r--r--src/preview/PreviewModel.h18
-rw-r--r--src/preview/PreviewView.cpp5
-rw-r--r--src/preview/PreviewView.h1
6 files changed, 100 insertions, 5 deletions
diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp
index db3cdee..ac68e07 100644
--- a/src/preview/PreviewController.cpp
+++ b/src/preview/PreviewController.cpp
@@ -13,7 +13,6 @@
PreviewController::PreviewController(int saveID, ControllerCallback * callback):
HasExited(false)
{
- // TODO Auto-generated constructor stub
previewModel = new PreviewModel();
previewView = new PreviewView();
previewModel->AddObserver(previewView);
@@ -24,6 +23,11 @@ PreviewController::PreviewController(int saveID, ControllerCallback * callback):
this->callback = callback;
}
+void PreviewController::Update()
+{
+ previewModel->Update();
+}
+
Save * PreviewController::GetSave()
{
return previewModel->GetSave();
diff --git a/src/preview/PreviewController.h b/src/preview/PreviewController.h
index 452d686..e9b0fb5 100644
--- a/src/preview/PreviewController.h
+++ b/src/preview/PreviewController.h
@@ -27,6 +27,7 @@ public:
bool GetDoOpen();
Save * GetSave();
PreviewView * GetView() { return previewView; }
+ void Update();
virtual ~PreviewController();
};
diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp
index 07396cb..658a767 100644
--- a/src/preview/PreviewModel.cpp
+++ b/src/preview/PreviewModel.cpp
@@ -11,18 +11,63 @@
PreviewModel::PreviewModel():
save(NULL),
savePreview(NULL),
- doOpen(false)
+ doOpen(false),
+ updateSavePreviewWorking(false),
+ updateSavePreviewFinished(false),
+ updateSaveInfoWorking(false),
+ updateSaveInfoFinished(false)
{
// TODO Auto-generated constructor stub
}
+void * PreviewModel::updateSaveInfoTHelper(void * obj)
+{
+ return ((PreviewModel*)obj)->updateSaveInfoT();
+}
+
+void * PreviewModel::updateSavePreviewTHelper(void * obj)
+{
+ return ((PreviewModel*)obj)->updateSavePreviewT();
+}
+
+void * PreviewModel::updateSaveInfoT()
+{
+ Save * tempSave = Client::Ref().GetSave(tSaveID, tSaveDate);
+ updateSaveInfoFinished = true;
+ return tempSave;
+}
+
+void * PreviewModel::updateSavePreviewT()
+{
+ Thumbnail * tempThumb = Client::Ref().GetPreview(tSaveID, tSaveDate);
+ updateSavePreviewFinished = true;
+ return tempThumb;
+}
+
void PreviewModel::UpdateSave(int saveID, int saveDate)
{
- save = Client::Ref().GetSave(saveID, saveDate);
- notifySaveChanged();
- savePreview = Client::Ref().GetPreview(saveID, saveDate);
+ this->tSaveID = saveID;
+ this->tSaveDate = saveDate;
+
+ save = NULL;
+ savePreview = NULL;
notifyPreviewChanged();
+ notifySaveChanged();
+
+ if(!updateSavePreviewWorking)
+ {
+ updateSavePreviewWorking = true;
+ updateSavePreviewFinished = false;
+ pthread_create(&updateSavePreviewThread, 0, &PreviewModel::updateSavePreviewTHelper, this);
+ }
+
+ if(!updateSaveInfoWorking)
+ {
+ updateSaveInfoWorking = true;
+ updateSaveInfoFinished = false;
+ pthread_create(&updateSaveInfoThread, 0, &PreviewModel::updateSaveInfoTHelper, this);
+ }
}
void PreviewModel::SetDoOpen(bool doOpen)
@@ -67,6 +112,27 @@ void PreviewModel::AddObserver(PreviewView * observer) {
observer->NotifySaveChanged(this);
}
+void PreviewModel::Update()
+{
+ if(updateSavePreviewWorking)
+ {
+ if(updateSavePreviewFinished)
+ {
+ pthread_join(updateSavePreviewThread, (void**)(&savePreview));
+ notifyPreviewChanged();
+ }
+ }
+
+ if(updateSaveInfoWorking)
+ {
+ if(updateSaveInfoFinished)
+ {
+ pthread_join(updateSaveInfoThread, (void**)(&save));
+ notifySaveChanged();
+ }
+ }
+}
+
PreviewModel::~PreviewModel() {
if(save)
delete save;
diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h
index 23ac2d7..e0e5966 100644
--- a/src/preview/PreviewModel.h
+++ b/src/preview/PreviewModel.h
@@ -9,6 +9,7 @@
#define PREVIEWMODEL_H_
#include <vector>
+#include <pthread.h>
#include "PreviewView.h"
#include "search/Save.h"
#include "search/Thumbnail.h"
@@ -23,6 +24,22 @@ class PreviewModel {
Thumbnail * savePreview;
void notifyPreviewChanged();
void notifySaveChanged();
+
+ //Background retrieval
+ int tSaveID;
+ int tSaveDate;
+
+ bool updateSavePreviewWorking;
+ volatile bool updateSavePreviewFinished;
+ pthread_t updateSavePreviewThread;
+ static void * updateSavePreviewTHelper(void * obj);
+ void * updateSavePreviewT();
+
+ bool updateSaveInfoWorking;
+ volatile bool updateSaveInfoFinished;
+ pthread_t updateSaveInfoThread;
+ static void * updateSaveInfoTHelper(void * obj);
+ void * updateSaveInfoT();
public:
PreviewModel();
Thumbnail * GetPreview();
@@ -31,6 +48,7 @@ public:
void UpdateSave(int saveID, int saveDate);
bool GetDoOpen();
void SetDoOpen(bool doOpen);
+ void Update();
virtual ~PreviewModel();
};
diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp
index 4ab54b2..de58692 100644
--- a/src/preview/PreviewView.cpp
+++ b/src/preview/PreviewView.cpp
@@ -57,6 +57,11 @@ void PreviewView::OnDraw()
g->draw_line(Position.X+XRES/2, Position.Y, Position.X+XRES/2, Position.Y+Size.Y, 255, 255, 255, XRES+BARSIZE);
}
+void PreviewView::OnTick(float dt)
+{
+ c->Update();
+}
+
void PreviewView::OnMouseDown(int x, int y, unsigned button)
{
if(!(x > Position.X && y > Position.Y && y < Position.Y+Size.Y && x < Position.X+Size.X)) //Clicked outside window
diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h
index e788210..a526ef7 100644
--- a/src/preview/PreviewView.h
+++ b/src/preview/PreviewView.h
@@ -28,6 +28,7 @@ public:
void NotifyPreviewChanged(PreviewModel * sender);
void NotifySaveChanged(PreviewModel * sender);
virtual void OnDraw();
+ virtual void OnTick(float dt);
virtual void OnMouseDown(int x, int y, unsigned button);
virtual ~PreviewView();
};