summaryrefslogtreecommitdiff
path: root/src/preview
diff options
context:
space:
mode:
authorSimon 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)
commitdf72f2580f68a7d0055fcf20dcd65c0be90c52dd (patch)
treeada3c6d3fdc2009f5236ec2a39d661c0bfaaf3e5 /src/preview
parent2bd571e1598e6baffc717bcb086d89d01929604b (diff)
downloadpowder-df72f2580f68a7d0055fcf20dcd65c0be90c52dd.zip
powder-df72f2580f68a7d0055fcf20dcd65c0be90c52dd.tar.gz
Better element buttons, Save preview WIP
Diffstat (limited to 'src/preview')
-rw-r--r--src/preview/PreviewController.cpp2
-rw-r--r--src/preview/PreviewModel.cpp37
-rw-r--r--src/preview/PreviewModel.h8
-rw-r--r--src/preview/PreviewView.cpp48
-rw-r--r--src/preview/PreviewView.h10
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();
};