diff options
| author | Simon 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) |
| commit | 680a36549adaed0c3ce7e8906fadbdf190b0b3b0 (patch) | |
| tree | 21ca16411c1687bb212369a59c5f3de2a0cf023b /src/preview | |
| parent | 7c53ca7799832920066c23cfad2f1d7fa82233c7 (diff) | |
| download | powder-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.cpp | 6 | ||||
| -rw-r--r-- | src/preview/PreviewController.h | 1 | ||||
| -rw-r--r-- | src/preview/PreviewModel.cpp | 74 | ||||
| -rw-r--r-- | src/preview/PreviewModel.h | 18 | ||||
| -rw-r--r-- | src/preview/PreviewView.cpp | 5 | ||||
| -rw-r--r-- | src/preview/PreviewView.h | 1 |
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(); }; |
