From 36536297aac5c07e3d5fb96abed74570fc7615e9 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Mon, 16 Mar 2015 10:57:03 -0400 Subject: Added toolbar with file buttons to map editor --- tools/mapedit/src/frame.cpp | 23 ++++++++++++++++++++++- tools/mapedit/src/frame.h | 2 ++ tools/mapedit/src/map.cpp | 28 +++++++++++++++++++++++----- tools/mapedit/src/map.h | 7 +++++++ 4 files changed, 54 insertions(+), 6 deletions(-) (limited to 'tools') diff --git a/tools/mapedit/src/frame.cpp b/tools/mapedit/src/frame.cpp index 0b03448..a38b861 100644 --- a/tools/mapedit/src/frame.cpp +++ b/tools/mapedit/src/frame.cpp @@ -14,7 +14,10 @@ enum { MENU_FILE_NEW, MENU_FILE_OPEN, MENU_FILE_SAVE, - MENU_FILE_CLOSE + MENU_FILE_CLOSE, + TOOL_FILE_NEW, + TOOL_FILE_OPEN, + TOOL_FILE_SAVE }; wxBEGIN_EVENT_TABLE(MapeditFrame, wxFrame) @@ -24,12 +27,17 @@ wxBEGIN_EVENT_TABLE(MapeditFrame, wxFrame) EVT_MENU(MENU_FILE_NEW, MapeditFrame::OnNew) EVT_MENU(MENU_FILE_OPEN, MapeditFrame::OnOpen) EVT_MENU(MENU_FILE_SAVE, MapeditFrame::OnSave) + EVT_TOOL(TOOL_FILE_NEW, MapeditFrame::OnNew) + EVT_TOOL(TOOL_FILE_OPEN, MapeditFrame::OnOpen) + EVT_TOOL(TOOL_FILE_SAVE, MapeditFrame::OnSave) EVT_MENU(MENU_FILE_CLOSE, MapeditFrame::OnClose) EVT_CLOSE(MapeditFrame::OnExit) wxEND_EVENT_TABLE() MapeditFrame::MapeditFrame(Map map, std::string filename) : wxFrame(NULL, wxID_ANY, "Map Editor", wxDefaultPosition, wxSize(GAME_WIDTH*3, GAME_HEIGHT*2)), map(map), filename(filename) { + this->map.frame = this; + wxMenu* menuFile = new wxMenu; menuFile->Append(MENU_FILE_NEW, "New\tCtrl-N"); menuFile->Append(MENU_FILE_OPEN, "Open\tCtrl-O"); @@ -137,6 +145,14 @@ MapeditFrame::MapeditFrame(Map map, std::string filename) : wxFrame(NULL, wxID_A splitterSizer->Add(propertyEditor, 0, wxALIGN_TOP, wxALIGN_LEFT, 0); layout3->SetSizer(splitterSizer); splitterSizer->SetSizeHints(layout3); + + // Toolbar time! + toolbar = CreateToolBar(); + toolbar->AddTool(TOOL_FILE_NEW, "New", wxBitmap(wxImage("res/page_add.png"))); + toolbar->AddTool(TOOL_FILE_OPEN, "Open", wxBitmap(wxImage("res/folder_page.png"))); + toolbar->AddTool(TOOL_FILE_SAVE, "Save", wxBitmap(wxImage("res/disk.png"))); + toolbar->EnableTool(TOOL_FILE_SAVE, this->map.getDirty()); + toolbar->Realize(); } void MapeditFrame::OnExit(wxCloseEvent& event) @@ -314,3 +330,8 @@ void MapeditFrame::FinishAddingEntity() addEntityButton->Enable(); cancelEntityButton->Disable(); } + +void MapeditFrame::MapDirtyDidChange(bool dirty) +{ + toolbar->EnableTool(TOOL_FILE_SAVE, dirty); +} diff --git a/tools/mapedit/src/frame.h b/tools/mapedit/src/frame.h index 1cce4f3..4aa44c5 100644 --- a/tools/mapedit/src/frame.h +++ b/tools/mapedit/src/frame.h @@ -21,6 +21,7 @@ class MapeditFrame : public wxFrame { MapeditWidget* GetMapEditor(); void StartAddingEntity(); void FinishAddingEntity(); + void MapDirtyDidChange(bool dirty); static void NewMap(); static void OpenMap(const char* filename); @@ -53,6 +54,7 @@ class MapeditFrame : public wxFrame { wxChoice* entityTypeBox; wxButton* addEntityButton; wxButton* cancelEntityButton; + wxToolBar* toolbar; bool addingEntity = false; diff --git a/tools/mapedit/src/map.cpp b/tools/mapedit/src/map.cpp index 2799a4e..f9c07fc 100644 --- a/tools/mapedit/src/map.cpp +++ b/tools/mapedit/src/map.cpp @@ -2,6 +2,7 @@ #include #include #include +#include "frame.h" Map::Map() { @@ -96,6 +97,7 @@ Map::Map(const Map& map) rightmap = map.rightmap; dirty = map.dirty; objects = map.objects; + frame = map.frame; } Map::Map(Map&& map) : Map() @@ -123,6 +125,7 @@ void swap(Map& first, Map& second) std::swap(first.rightmap, second.rightmap); std::swap(first.dirty, second.dirty); std::swap(first.objects, second.objects); + std::swap(first.frame, second.frame); } #define MY_ENCODING "ISO-8859-1" @@ -197,7 +200,7 @@ void Map::save(std::string name) xmlFreeTextWriter(writer); - dirty = false; + setDirty(false); } bool Map::hasUnsavedChanges() const @@ -207,7 +210,7 @@ bool Map::hasUnsavedChanges() const void Map::setTileAt(int x, int y, int tile) { - dirty = true; + setDirty(true); mapdata[x+y*MAP_WIDTH] = tile; } @@ -223,7 +226,7 @@ std::string Map::getTitle() const void Map::setTitle(std::string title) { - dirty = true; + setDirty(true); this->title = title; } @@ -234,12 +237,27 @@ const std::list>& Map::getObjects() const void Map::addObject(std::shared_ptr& obj) { - dirty = true; + setDirty(true); objects.push_back(obj); } void Map::removeObject(std::shared_ptr& obj) { - dirty = true; + setDirty(true); objects.remove(obj); } + +bool Map::getDirty() const +{ + return dirty; +} + +void Map::setDirty(bool dirty) +{ + this->dirty = dirty; + + if (frame != nullptr) + { + frame->MapDirtyDidChange(dirty); + } +} diff --git a/tools/mapedit/src/map.h b/tools/mapedit/src/map.h index 16bbb4c..a2b9cb8 100644 --- a/tools/mapedit/src/map.h +++ b/tools/mapedit/src/map.h @@ -8,6 +8,8 @@ #include "object.h" #include +class MapeditFrame; + const int TILE_WIDTH = 8; const int TILE_HEIGHT = 8; const int GAME_WIDTH = 320; @@ -72,8 +74,13 @@ class Map { const std::list>& getObjects() const; void addObject(std::shared_ptr& obj); void removeObject(std::shared_ptr& obj); + bool getDirty() const; + + MapeditFrame* frame; private: + void setDirty(bool dirty); + std::list> objects; int* mapdata; std::string title; -- cgit 1.4.1