diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-23 22:53:57 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-01-23 22:53:57 (GMT) |
| commit | df72f2580f68a7d0055fcf20dcd65c0be90c52dd (patch) | |
| tree | ada3c6d3fdc2009f5236ec2a39d661c0bfaaf3e5 /src/preview | |
| parent | 2bd571e1598e6baffc717bcb086d89d01929604b (diff) | |
| download | powder-df72f2580f68a7d0055fcf20dcd65c0be90c52dd.zip powder-df72f2580f68a7d0055fcf20dcd65c0be90c52dd.tar.gz | |
Better element buttons, Save preview WIP
Diffstat (limited to 'src/preview')
| -rw-r--r-- | src/preview/PreviewController.cpp | 2 | ||||
| -rw-r--r-- | src/preview/PreviewModel.cpp | 37 | ||||
| -rw-r--r-- | src/preview/PreviewModel.h | 8 | ||||
| -rw-r--r-- | src/preview/PreviewView.cpp | 48 | ||||
| -rw-r--r-- | src/preview/PreviewView.h | 10 |
5 files changed, 99 insertions, 6 deletions
diff --git a/src/preview/PreviewController.cpp b/src/preview/PreviewController.cpp index 04c4dd6..ef5da4e 100644 --- a/src/preview/PreviewController.cpp +++ b/src/preview/PreviewController.cpp @@ -16,7 +16,7 @@ PreviewController::PreviewController(int saveID) { previewModel->AddObserver(previewView); previewView->AttachController(this); - previewModel->UpdateSave(saveID); + previewModel->UpdateSave(saveID, 0); } PreviewController::~PreviewController() { diff --git a/src/preview/PreviewModel.cpp b/src/preview/PreviewModel.cpp index bf51ff0..0e03490 100644 --- a/src/preview/PreviewModel.cpp +++ b/src/preview/PreviewModel.cpp @@ -6,21 +6,54 @@ */ #include "PreviewModel.h" +#include "client/Client.h" PreviewModel::PreviewModel(): - save(NULL) + save(NULL), + savePreview(NULL) { // TODO Auto-generated constructor stub } -void PreviewModel::UpdateSave(int saveID) +void PreviewModel::UpdateSave(int saveID, int saveDate) { + save = Client::Ref().GetSave(saveID, saveDate); + notifySaveChanged(); + savePreview = Client::Ref().GetPreview(saveID, saveDate); + notifyPreviewChanged(); +} + +Thumbnail * PreviewModel::GetPreview() +{ + return savePreview; +} +Save * PreviewModel::GetSave() +{ + return save; +} + +void PreviewModel::notifyPreviewChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyPreviewChanged(this); + } +} + +void PreviewModel::notifySaveChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifySaveChanged(this); + } } void PreviewModel::AddObserver(PreviewView * observer) { observers.push_back(observer); + observer->NotifyPreviewChanged(this); + observer->NotifySaveChanged(this); } PreviewModel::~PreviewModel() { diff --git a/src/preview/PreviewModel.h b/src/preview/PreviewModel.h index ba11390..764771a 100644 --- a/src/preview/PreviewModel.h +++ b/src/preview/PreviewModel.h @@ -11,6 +11,7 @@ #include <vector> #include "PreviewView.h" #include "search/Save.h" +#include "search/Thumbnail.h" using namespace std; @@ -18,10 +19,15 @@ class PreviewView; class PreviewModel { vector<PreviewView*> observers; Save * save; + Thumbnail * savePreview; + void notifyPreviewChanged(); + void notifySaveChanged(); public: PreviewModel(); + Thumbnail * GetPreview(); + Save * GetSave(); void AddObserver(PreviewView * observer); - void UpdateSave(int saveID); + void UpdateSave(int saveID, int saveDate); virtual ~PreviewModel(); }; diff --git a/src/preview/PreviewView.cpp b/src/preview/PreviewView.cpp index 886dd67..c37ebd2 100644 --- a/src/preview/PreviewView.cpp +++ b/src/preview/PreviewView.cpp @@ -8,22 +8,66 @@ #include "PreviewView.h" #include "interface/Point.h" #include "interface/Window.h" +#include "search/Thumbnail.h" PreviewView::PreviewView(): - ui::Window(ui::Point(-1, -1), ui::Point(200, 200)) + ui::Window(ui::Point(-1, -1), ui::Point((XRES/2)+200, (YRES/2)+150)), + savePreview(NULL) { // TODO Auto-generated constructor stub + openButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(100, 16), "Open"); + AddComponent(openButton); + saveNameLabel = new ui::Label(ui::Point(0, 0), ui::Point(50, 50), ""); + AddComponent(saveNameLabel); } 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); g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255); + + //Save preview (top-left) + if(savePreview && savePreview->Data) + { + g->draw_image(savePreview->Data, (Position.X+1)+(((XRES/2)-savePreview->Size.X)/2), (Position.Y+1)+(((YRES/2)-savePreview->Size.Y)/2), savePreview->Size.X, savePreview->Size.Y, 255); + } + g->drawrect(Position.X, Position.Y, XRES/2, YRES/2, 255, 255, 255, 100); +} + +void PreviewView::NotifySaveChanged(PreviewModel * sender) +{ + Save * save = sender->GetSave(); + if(save) + { + saveNameLabel->SetText(save->name); + } + else + { + saveNameLabel->SetText(""); + } +} + +void PreviewView::NotifyPreviewChanged(PreviewModel * sender) +{ + savePreview = sender->GetPreview(); + if(savePreview && savePreview->Data && !(savePreview->Size.X == XRES/2 && savePreview->Size.Y == YRES/2)) + { + int newSizeX, newSizeY; + float factorX = ((float)XRES/2)/((float)savePreview->Size.X); + float factorY = ((float)YRES/2)/((float)savePreview->Size.Y); + float scaleFactor = factorY < factorX ? factorY : factorX; + savePreview->Data = Graphics::resample_img(savePreview->Data, savePreview->Size.X, savePreview->Size.Y, savePreview->Size.X*scaleFactor, savePreview->Size.Y*scaleFactor); + savePreview->Size.X *= scaleFactor; + savePreview->Size.Y *= scaleFactor; + } } PreviewView::~PreviewView() { - // TODO Auto-generated destructor stub + delete openButton; + delete saveNameLabel; } diff --git a/src/preview/PreviewView.h b/src/preview/PreviewView.h index 728d547..616bffc 100644 --- a/src/preview/PreviewView.h +++ b/src/preview/PreviewView.h @@ -9,13 +9,23 @@ #define PREVIEWVIEW_H_ #include "interface/Window.h" #include "preview/PreviewController.h" +#include "preview/PreviewModel.h" +#include "interface/Button.h" +#include "search/Thumbnail.h" +#include "interface/Label.h" +class PreviewModel; class PreviewController; class PreviewView: public ui::Window { PreviewController * c; + Thumbnail * savePreview; + ui::Button * openButton; + ui::Label * saveNameLabel; public: void AttachController(PreviewController * controller) { c = controller;} PreviewView(); + void NotifyPreviewChanged(PreviewModel * sender); + void NotifySaveChanged(PreviewModel * sender); virtual void OnDraw(); virtual ~PreviewView(); }; |
