mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-21 15:41:35 +02:00
More work on Tags - display tags in Tag window and Tag button
This commit is contained in:
@@ -359,6 +359,16 @@ Save * Client::GetSave(int saveID, int saveDate)
|
|||||||
json::String tempDescription = objDocument["Description"];
|
json::String tempDescription = objDocument["Description"];
|
||||||
json::Number tempDate = objDocument["Date"];
|
json::Number tempDate = objDocument["Date"];
|
||||||
json::Boolean tempPublished = objDocument["Published"];
|
json::Boolean tempPublished = objDocument["Published"];
|
||||||
|
|
||||||
|
json::Array tagsArray = objDocument["Tags"];
|
||||||
|
vector<string> tempTags;
|
||||||
|
|
||||||
|
for(int j = 0; j < tagsArray.Size(); j++)
|
||||||
|
{
|
||||||
|
json::String tempTag = tagsArray[j];
|
||||||
|
tempTags.push_back(tempTag.Value());
|
||||||
|
}
|
||||||
|
|
||||||
return new Save(
|
return new Save(
|
||||||
tempID.Value(),
|
tempID.Value(),
|
||||||
tempDate.Value(),
|
tempDate.Value(),
|
||||||
@@ -368,7 +378,8 @@ Save * Client::GetSave(int saveID, int saveDate)
|
|||||||
tempUsername.Value(),
|
tempUsername.Value(),
|
||||||
tempName.Value(),
|
tempName.Value(),
|
||||||
tempDescription.Value(),
|
tempDescription.Value(),
|
||||||
tempPublished.Value()
|
tempPublished.Value(),
|
||||||
|
tempTags
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch (json::Exception &e)
|
catch (json::Exception &e)
|
||||||
|
@@ -66,6 +66,17 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GameController::TagsCallback: public ControllerCallback
|
||||||
|
{
|
||||||
|
GameController * cc;
|
||||||
|
public:
|
||||||
|
TagsCallback(GameController * cc_) { cc = cc_; }
|
||||||
|
virtual void ControllerExit()
|
||||||
|
{
|
||||||
|
cc->gameModel->SetSave(new Save(*(cc->tagsWindow->GetSave())));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
GameController::GameController():
|
GameController::GameController():
|
||||||
search(NULL),
|
search(NULL),
|
||||||
renderOptions(NULL),
|
renderOptions(NULL),
|
||||||
@@ -338,9 +349,23 @@ void GameController::OpenLogin()
|
|||||||
|
|
||||||
void GameController::OpenTags()
|
void GameController::OpenTags()
|
||||||
{
|
{
|
||||||
tagsWindow = new TagsController(NULL);
|
if(gameModel->GetUser().ID)
|
||||||
|
{
|
||||||
|
if(gameModel->GetSave() && gameModel->GetSave()->GetID())
|
||||||
|
{
|
||||||
|
tagsWindow = new TagsController(new TagsCallback(this), gameModel->GetSave());
|
||||||
ui::Engine::Ref().ShowWindow(tagsWindow->GetView());
|
ui::Engine::Ref().ShowWindow(tagsWindow->GetView());
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new ErrorMessage("Error", "No save open");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new ErrorMessage("Error", "You need to login to edit tags.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GameController::OpenDisplayOptions()
|
void GameController::OpenDisplayOptions()
|
||||||
{
|
{
|
||||||
|
@@ -40,6 +40,7 @@ public:
|
|||||||
class SearchCallback;
|
class SearchCallback;
|
||||||
class RenderCallback;
|
class RenderCallback;
|
||||||
class SSaveCallback;
|
class SSaveCallback;
|
||||||
|
class TagsCallback;
|
||||||
GameController();
|
GameController();
|
||||||
~GameController();
|
~GameController();
|
||||||
GameView * GetView();
|
GameView * GetView();
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
#include <sstream>
|
||||||
|
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
#include "GameView.h"
|
#include "GameView.h"
|
||||||
#include "interface/Window.h"
|
#include "interface/Window.h"
|
||||||
@@ -426,6 +428,18 @@ void GameView::NotifySaveChanged(GameModel * sender)
|
|||||||
else
|
else
|
||||||
downVoteButton->SetBackgroundColour(ui::Colour(0, 0, 0));
|
downVoteButton->SetBackgroundColour(ui::Colour(0, 0, 0));
|
||||||
tagSimulationButton->Enabled = (sender->GetSave()->GetID() && sender->GetUser().ID);
|
tagSimulationButton->Enabled = (sender->GetSave()->GetID() && sender->GetUser().ID);
|
||||||
|
if(sender->GetSave()->GetID())
|
||||||
|
{
|
||||||
|
std::stringstream tagsStream;
|
||||||
|
std::vector<string> tags = sender->GetSave()->GetTags();
|
||||||
|
for(int i = 0; i < tags.size(); i++)
|
||||||
|
{
|
||||||
|
tagsStream << sender->GetSave()->GetTags()[i];
|
||||||
|
if(i < tags.size()-1)
|
||||||
|
tagsStream << " ";
|
||||||
|
}
|
||||||
|
tagSimulationButton->SetText(tagsStream.str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -436,6 +450,7 @@ void GameView::NotifySaveChanged(GameModel * sender)
|
|||||||
downVoteButton->Enabled = false;
|
downVoteButton->Enabled = false;
|
||||||
upVoteButton->SetBackgroundColour(ui::Colour(0, 0, 0));
|
upVoteButton->SetBackgroundColour(ui::Colour(0, 0, 0));
|
||||||
tagSimulationButton->Enabled = false;
|
tagSimulationButton->Enabled = false;
|
||||||
|
tagSimulationButton->SetText("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
Save::Save(Save & save) :
|
Save::Save(Save & save) :
|
||||||
userName(save.userName), name(save.name), Description(save.Description), date(
|
userName(save.userName), name(save.name), Description(save.Description), date(
|
||||||
save.date), Published(save.Published), id(save.id), votesUp(
|
save.date), Published(save.Published), id(save.id), votesUp(
|
||||||
save.votesUp), votesDown(save.votesDown), data(NULL), vote(save.vote) {
|
save.votesUp), votesDown(save.votesDown), data(NULL), vote(save.vote), tags(save.tags) {
|
||||||
if (save.data) {
|
if (save.data) {
|
||||||
std::cout << data << " " << save.data << std::endl;
|
std::cout << data << " " << save.data << std::endl;
|
||||||
data = (unsigned char *) malloc(save.dataLength);
|
data = (unsigned char *) malloc(save.dataLength);
|
||||||
@@ -24,14 +24,14 @@ Save::Save(int _id, int _date, int _votesUp, int _votesDown, string _userName,
|
|||||||
string _name) :
|
string _name) :
|
||||||
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
|
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
|
||||||
_name), Description("No description provided"), date(_date), Published(
|
_name), Description("No description provided"), date(_date), Published(
|
||||||
true), data(NULL), vote(0) {
|
true), data(NULL), vote(0), tags() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Save::Save(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName,
|
Save::Save(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName,
|
||||||
string _name, string description_, bool published_) :
|
string _name, string description_, bool published_, vector<string> tags_) :
|
||||||
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
|
id(_id), votesUp(_votesUp), votesDown(_votesDown), userName(_userName), name(
|
||||||
_name), Description(description_), date(date_), Published(
|
_name), Description(description_), date(date_), Published(
|
||||||
published_), data(NULL), vote(_vote) {
|
published_), data(NULL), vote(_vote), tags(tags_) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Save::~Save()
|
Save::~Save()
|
||||||
@@ -86,6 +86,15 @@ int Save::GetVotesDown() {
|
|||||||
return votesDown;
|
return votesDown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Save::SetTags(vector<string> tags)
|
||||||
|
{
|
||||||
|
this->tags = tags;
|
||||||
|
}
|
||||||
|
vector<string> Save::GetTags()
|
||||||
|
{
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned char * Save::GetData() {
|
unsigned char * Save::GetData() {
|
||||||
if (!data) {
|
if (!data) {
|
||||||
data = Client::Ref().GetSaveData(id, date, dataLength);
|
data = Client::Ref().GetSaveData(id, date, dataLength);
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#ifndef SAVE_H
|
#ifndef SAVE_H
|
||||||
#define SAVE_H
|
#define SAVE_H
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -22,7 +23,7 @@ public:
|
|||||||
|
|
||||||
Save(int _id, int _date, int _votesUp, int _votesDown, string _userName, string _name);
|
Save(int _id, int _date, int _votesUp, int _votesDown, string _userName, string _name);
|
||||||
|
|
||||||
Save(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName, string _name, string description_, bool published_);
|
Save(int _id, int date_, int _votesUp, int _votesDown, int _vote, string _userName, string _name, string description_, bool published_, vector<string> tags);
|
||||||
|
|
||||||
~Save();
|
~Save();
|
||||||
|
|
||||||
@@ -31,6 +32,8 @@ public:
|
|||||||
|
|
||||||
string Description;
|
string Description;
|
||||||
|
|
||||||
|
vector<string> tags;
|
||||||
|
|
||||||
int vote;
|
int vote;
|
||||||
|
|
||||||
bool Published;
|
bool Published;
|
||||||
@@ -53,6 +56,9 @@ public:
|
|||||||
void SetVotesDown(int votesDown);
|
void SetVotesDown(int votesDown);
|
||||||
int GetVotesDown();
|
int GetVotesDown();
|
||||||
|
|
||||||
|
void SetTags(vector<string> tags);
|
||||||
|
vector<string> GetTags();
|
||||||
|
|
||||||
unsigned char * GetData();
|
unsigned char * GetData();
|
||||||
void SetData(unsigned char * data_, int dataLength);
|
void SetData(unsigned char * data_, int dataLength);
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
#include "TagsModel.h"
|
#include "TagsModel.h"
|
||||||
#include "TagsView.h"
|
#include "TagsView.h"
|
||||||
|
|
||||||
TagsController::TagsController(ControllerCallback * callback):
|
TagsController::TagsController(ControllerCallback * callback, Save * save):
|
||||||
HasDone(false)
|
HasDone(false)
|
||||||
{
|
{
|
||||||
tagsModel = new TagsModel();
|
tagsModel = new TagsModel();
|
||||||
@@ -19,9 +19,16 @@ TagsController::TagsController(ControllerCallback * callback):
|
|||||||
tagsView->AttachController(this);
|
tagsView->AttachController(this);
|
||||||
tagsModel->AddObserver(tagsView);
|
tagsModel->AddObserver(tagsView);
|
||||||
|
|
||||||
|
tagsModel->SetSave(save);
|
||||||
|
|
||||||
this->callback = callback;
|
this->callback = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Save * TagsController::GetSave()
|
||||||
|
{
|
||||||
|
return tagsModel->GetSave();
|
||||||
|
}
|
||||||
|
|
||||||
void TagsController::Exit()
|
void TagsController::Exit()
|
||||||
{
|
{
|
||||||
if(ui::Engine::Ref().GetWindow() == tagsView)
|
if(ui::Engine::Ref().GetWindow() == tagsView)
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include "Controller.h"
|
#include "Controller.h"
|
||||||
#include "TagsView.h"
|
#include "TagsView.h"
|
||||||
|
#include "search/Save.h"
|
||||||
|
|
||||||
class TagsView;
|
class TagsView;
|
||||||
class TagsModel;
|
class TagsModel;
|
||||||
@@ -19,8 +20,9 @@ class TagsController {
|
|||||||
TagsModel * tagsModel;
|
TagsModel * tagsModel;
|
||||||
public:
|
public:
|
||||||
bool HasDone;
|
bool HasDone;
|
||||||
TagsController(ControllerCallback * callback);
|
TagsController(ControllerCallback * callback, Save * save);
|
||||||
TagsView * GetView() {return tagsView;}
|
TagsView * GetView() {return tagsView;}
|
||||||
|
Save * GetSave();
|
||||||
void Exit();
|
void Exit();
|
||||||
virtual ~TagsController();
|
virtual ~TagsController();
|
||||||
};
|
};
|
||||||
|
@@ -6,15 +6,38 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "TagsModel.h"
|
#include "TagsModel.h"
|
||||||
|
#include "TagsView.h"
|
||||||
|
|
||||||
TagsModel::TagsModel() {
|
TagsModel::TagsModel():
|
||||||
|
save(NULL)
|
||||||
|
{
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TagsModel::SetSave(Save * save)
|
||||||
|
{
|
||||||
|
this->save = save;
|
||||||
|
notifyTagsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
Save * TagsModel::GetSave()
|
||||||
|
{
|
||||||
|
return save;
|
||||||
|
}
|
||||||
|
|
||||||
void TagsModel::AddObserver(TagsView * observer)
|
void TagsModel::AddObserver(TagsView * observer)
|
||||||
{
|
{
|
||||||
observers.push_back(observer);
|
observers.push_back(observer);
|
||||||
|
observer->NotifyTagsChanged(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TagsModel::notifyTagsChanged()
|
||||||
|
{
|
||||||
|
for(int i = 0; i < observers.size(); i++)
|
||||||
|
{
|
||||||
|
observers[i]->NotifyTagsChanged(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TagsModel::~TagsModel() {
|
TagsModel::~TagsModel() {
|
||||||
|
@@ -9,13 +9,18 @@
|
|||||||
#define TAGSMODEL_H_
|
#define TAGSMODEL_H_
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include "search/Save.h"
|
||||||
|
|
||||||
class TagsView;
|
class TagsView;
|
||||||
class TagsModel {
|
class TagsModel {
|
||||||
|
Save * save;
|
||||||
std::vector<TagsView*> observers;
|
std::vector<TagsView*> observers;
|
||||||
|
void notifyTagsChanged();
|
||||||
public:
|
public:
|
||||||
TagsModel();
|
TagsModel();
|
||||||
void AddObserver(TagsView * observer);
|
void AddObserver(TagsView * observer);
|
||||||
|
void SetSave(Save * save);
|
||||||
|
Save * GetSave();
|
||||||
virtual ~TagsModel();
|
virtual ~TagsModel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -11,9 +11,12 @@
|
|||||||
#include "TagsModel.h"
|
#include "TagsModel.h"
|
||||||
|
|
||||||
TagsView::TagsView():
|
TagsView::TagsView():
|
||||||
ui::Window(ui::Point(-1, -1), ui::Point(200, 300)){
|
ui::Window(ui::Point(-1, -1), ui::Point(200, 300))
|
||||||
// TODO Auto-generated constructor stub
|
{
|
||||||
|
submitButton = new ui::Button(ui::Point(Size.X-56, Size.Y-24), ui::Point(50, 16));
|
||||||
|
AddComponent(submitButton);
|
||||||
|
tagInput = new ui::Textbox(ui::Point(6, Size.Y-24), ui::Point(Size.X-80, 16), "");
|
||||||
|
AddComponent(tagInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TagsView::OnDraw()
|
void TagsView::OnDraw()
|
||||||
@@ -23,6 +26,26 @@ void TagsView::OnDraw()
|
|||||||
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TagsView::NotifyTagsChanged(TagsModel * sender)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < tags.size(); i++)
|
||||||
|
{
|
||||||
|
RemoveComponent(tags[i]);
|
||||||
|
delete tags[i];
|
||||||
|
}
|
||||||
|
tags.clear();
|
||||||
|
|
||||||
|
if(sender->GetSave())
|
||||||
|
{
|
||||||
|
for(int i = 0; i < sender->GetSave()->GetTags().size(); i++)
|
||||||
|
{
|
||||||
|
ui::Label * tempLabel = new ui::Label(ui::Point(5, 10*i), ui::Point(50, 16), sender->GetSave()->GetTags()[i]);
|
||||||
|
tags.push_back(tempLabel);
|
||||||
|
AddComponent(tempLabel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TagsView::~TagsView() {
|
TagsView::~TagsView() {
|
||||||
// TODO Auto-generated destructor stub
|
// TODO Auto-generated destructor stub
|
||||||
}
|
}
|
||||||
|
@@ -8,16 +8,24 @@
|
|||||||
#ifndef TAGSVIEW_H_
|
#ifndef TAGSVIEW_H_
|
||||||
#define TAGSVIEW_H_
|
#define TAGSVIEW_H_
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
#include "interface/Window.h"
|
#include "interface/Window.h"
|
||||||
|
#include "interface/Button.h"
|
||||||
|
#include "interface/Textbox.h"
|
||||||
|
#include "interface/Label.h"
|
||||||
|
|
||||||
class TagsController;
|
class TagsController;
|
||||||
class TagsModel;
|
class TagsModel;
|
||||||
class TagsView: public ui::Window {
|
class TagsView: public ui::Window {
|
||||||
TagsController * c;
|
TagsController * c;
|
||||||
|
ui::Button * submitButton;
|
||||||
|
ui::Textbox * tagInput;
|
||||||
|
std::vector<ui::Label*> tags;
|
||||||
public:
|
public:
|
||||||
TagsView();
|
TagsView();
|
||||||
virtual void OnDraw();
|
virtual void OnDraw();
|
||||||
void AttachController(TagsController * c_) { c = c_; };
|
void AttachController(TagsController * c_) { c = c_; };
|
||||||
|
void NotifyTagsChanged(TagsModel * sender);
|
||||||
virtual ~TagsView();
|
virtual ~TagsView();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user