doors { name: "Repetitive Entrance" type: STANDARD receivers: "Components/Doors/entry_3" panels { room: "Main Area" name: "ASTOUNDING" } panels { room: "Main Area" name: "INFLEXIBLE" } panels { room: "Main Area" name: "AMONG" } location_room: "Main Area" } doors { name: "Symbolic Entrance" type: ITEM_ONLY receivers: "Components/Doors/entry_2" panels { room: "Main Area" name: "ASTOUNDING" } panels { room: "Main Area" name: "INFLEXIBLE" } panels { room: "Main Area" name: "AMONG" } } doors { name: "Sirenic Entrance" type: ITEM_ONLY receivers: "Components/Doors/entry_8" panels { room: "Main Area" name: "ASTOUNDING" } panels { room: "Main Area" name: "INFLEXIBLE" } panels { room: "Main Area" name: "AMONG" } } doors { name: "Turtle Entrance" type: STANDARD receivers: "Components/Doors/entry_1" panels { room: "Main Area" name: "COURTYARD" } location_room: "Main Area" } doors { name: "Top Left Door" type: STANDARD receivers: "Components/Doors/entry_6" panels { room: "Center Room" name: "REPORTER" } panels { room: "Center Room" name: "BIRD" } panels { room: "Center Room" name: "FOX" } panels { room: "Center Room" name: "JUDGE" } panels { room: "Center Room" name: "DENTIST" } panels { room: "Center Room" name: "SQUIRREL" } location_room: "Center Room" location_name: "First Room" } doors { name: "Top Right Door" type: ITEM_ONLY receivers: "Components/Doors/entry_7" panels { room: "Center Room" name: "REPORTER" } panels { room: "Center Room" name: "BIRD" } panels { room: "Center Room" name: "FOX" } panels { room: "Center Room" name: "JUDGE" } panels { room: "Center Room" name: "DENTIST" } panels { room: "Center Room" name: "SQUIRREL" } } doors { name: "Bottom Left Door" type: ITEM_ONLY receivers: "Components/Doors/entry_5" panels { room: "Center Room" name: "REPORTER" } panels { room: "Center Room" name: "BIRD" } panels { room: "Center Room" name: "FOX" } panels { room: "Center Room" name: "JUDGE" } panels { room: "Center Room" name: "DENTIST" } panels { room: "Center Room" name: "SQUIRREL" } } doors { name: "Bottom Right Door" type: ITEM_ONLY receivers: "Components/Doors/entry_4" panels { room: "Center Room" name: "REPORTER" } panels { room: "Center Room" name: "BIRD" } panels { room: "Center Room" name: "FOX" } panels { room: "Center Room" name: "JUDGE" } panels { room: "Center Room" name: "DENTIST" } panels { room: "Center Room" name: "SQUIRREL" } } doors { name: "Top Left Puzzles" type: LOCATION_ONLY panels { room: "Top Left Room" name: "BARE SOD" } panels { room: "Top Left Room" name: "SOD" } panels { room: "Top Left Room" name: "BARE" } panels { room: "Top Left Room" name: "KNOT TECTONIC" } panels { room: "Top Left Room" name: "TECTONIC" } panels { room: "Top Left Room" name: "KNOT" } panels { room: "Top Left Room" name: "SURE TEMPER" } panels { room: "Top Left Room" name: "TEMPER" } panels { room: "Top Left Room" name: "SURE" } panels { room: "Top Left Room" name: "BACKPACK SILVER" } panels { room: "Top Left Room" name: "COLOR (2)" } panels { room: "Top Left Room" name: "SILVER" } panels { room: "Top Left Room" name: "BACKPACK" } panels { room: "Top Left Room" name: "COLOR WHOLE" } panels { room: "Top Left Room" name: "WHOLE" } panels { room: "Top Left Room" name: "COLOR (1)" } panels { room: "Top Left Room" name: "CHILL BEAR" } panels { room: "Top Left Room" name: "BEAR" } panels { room: "Top Left Room" name: "CHILL" } panels { room: "Top Left Room" name: "SURE TEMPER BACKPACK SILVER" } panels { room: "Top Left Room" name: "KNOT TECTONIC BARE SOD" } panels { room: "Top Left Room" name: "COLOR WHOLE CHILL BEAR" } location_room: "Top Left Room" } doors { name: "Top Right Puzzles" type: LOCATION_ONLY panels { room: "Top Right Room" name: "RIGHT WING" } panels { room: "Top Right Room" name: "WING" } panels { room: "Top Right Room" name: "RIGHT" } panels { room: "Top Right Room" name: "TYPIST BEAR" } panels { room: "Top Right Room" name: "BEAR" } panels { room: "Top Right Room" name: "TYPIST" } panels { room: "Top Right Room" name: "HALVES ANNOYED" } panels { room: "Top Right Room" name: "ANNOYED" } panels { room: "Top Right Room" name: "HALVES" } panels { room: "Top Right Room" name: "SOUR GOOD" } panels { room: "Top Right Room" name: "GOOD" } panels { room: "Top Right Room" name: "SOUR" } panels { room: "Top Right Room" name: "HOLE TIME" } panels { room: "Top Right Room" name: "TIME" } panels { room: "Top Right Room" name: "HOLE" } panels { room: "Top Right Room" name: "KNOT CHEF" } panels { room: "Top Right Room" name: "CHEF" } panels { room: "Top Right Room" name: "KNOT" } panels { room: "Top Right Room" name: "HALVES ANNOYED SOUR GOOD" } panels { room: "Top Right Room" name: "TYPIST BEAR RIGHT WING" } panels { room: "Top Right Room" name: "KNOT CHEF HOLE TIME" } location_room: "Top Right Room" } doors { name: "Bottom Left Puzzles" type: LOCATION_ONLY panels { room: "Bottom Left Room" name: "SHELL (1)" } panels { room: "Bottom Left Room" name: "SHELL (2)" } panels { room: "Bottom Left Room" name: "SHELL (3)" } panels { room: "Bottom Left Room" name: "SHELL (4)" } panels { room: "Bottom Left Room" name: "SHELL (5)" } panels { room: "Bottom Left Room" name: "SHELL (6)" } location_room: "Bottom Left Room" } doors { name: "Bottom Right Puzzles" type: LOCATION_ONLY panels { room: "Bottom Right Room" name: "FLY" } panels { room: "Bottom Right Room" name: "DECLOG" } panels { room: "Bottom Right Room" name: "SWING" } panels { room: "Bottom Right Room" name: "HIBERNATE" } panels { room: "Bottom Right Room" name: "HONEY" } panels { room: "Bottom Right Room" name: "INJECT" } location_room: "Bottom Right Room" } doors { name: "Mastery" type: EVENT panels { room: "Top Left Room" name: "BARE SOD" } panels { room: "Top Left Room" name: "SOD" } panels { room: "Top Left Room" name: "BARE" } panels { room: "Top Left Room" name: "KNOT TECTONIC" } panels { room: "Top Left Room" name: "TECTONIC" } panels { room: "Top Left Room" name: "KNOT" } panels { room: "Top Left Room" name: "SURE TEMPER" } panels { room: "Top Left Room" name: "TEMPER" } panels { room: "Top Left Room" name: "SURE" } panels { room: "Top Left Room" name: "BACKPACK SILVER" } panels { room: "Top Left Room" name: "COLOR (2)" } panels { room: "Top Left Room" name: "SILVER" } panels { room: "Top Left Room" name: "BACKPACK" } panels { room: "Top Left Room" name: "COLOR WHOLE" } panels { room: "Top Left Room" name: "WHOLE" } panels { room: "Top Left Room" name: "COLOR (1)" } panels { room: "Top Left Room" name: "CHILL BEAR" } panels { room: "Top Left Room" name: "BEAR" } panels { room: "Top Left Room" name: "CHILL" } panels { room: "Top Left Room" name: "SURE TEMPER BACKPACK SILVER" } panels { room: "Top Left Room" name: "KNOT TECTONIC BARE SOD" } panels { room: "Top Left Room" name: "COLOR WHOLE CHILL BEAR" } panels { room: "Top Right Room" name: "RIGHT WING" } panels { room: "Top Right Room" name: "WING" } panels { room: "Top Right Room" name: "RIGHT" } panels { room: "Top Right Room" name: "TYPIST BEAR" } panels { room: "Top Right Room" name: "BEAR" } panels { room: "Top Right Room" name: "TYPIST" } panels { room: "Top Right Room" name: "HALVES ANNOYED" } panels { room: "Top Right Room" name: "ANNOYED" } panels { room: "Top Right Room" name: "HALVES" } panels { room: "Top Right Room" name: "SOUR GOOD" } panels { room: "Top Right Room" name: "GOOD" } panels { room: "Top Right Room" name: "SOUR" } panels { room: "Top Right Room" name: "HOLE TIME" } panels { room: "Top Right Room" name: "TIME" } panels { room: "Top Right Room" name: "HOLE" } panels { room: "Top Right Room" name: "KNOT CHEF" } panels { room: "Top Right Room" name: "CHEF" } panels { room: "Top Right Room" name: "KNOT" } panels { room: "Top Right Room" name: "HALVES ANNOYED SOUR GOOD" } panels { room: "Top Right Room" name: "TYPIST BEAR RIGHT WING" } panels { room: "Top Right Room" name: "KNOT CHEF HOLE TIME" } panels { room: "Bottom Left Room" name: "SHELL (1)" } panels { room: "Bottom Left Room" name: "SHELL (2)" } panels { room: "Bottom Left Room" name: "SHELL (3)" } panels { room: "Bottom Left Room" name: "SHELL (4)" } panels { room: "Bottom Left Room" name: "SHELL (5)" } panels { room: "Bottom Left Room" name: "SHELL (6)" } panels { room: "Bottom Right Room" name: "FLY" } panels { room: "Bottom Right Room" name: "DECLOG" } panels { room: "Bottom Right Room" name: "SWING" } panels { room: "Bottom Right Room" name: "HIBERNATE" } panels { room: "Bottom Right Room" name: "HONEY" } panels { room: "Bottom Right Room" name: "INJECT" } } c { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#ifndef FRAME_H
#define FRAME_H
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <list>
#include <wx/notebook.h>
#include <memory>
#include <wx/treectrl.h>
#include <wx/splitter.h>
class Map;
class MapeditWidget;
class TileWidget;
class Undoable;
class UndoableTextBox;
#include "world.h"
class MapeditFrame : public wxFrame {
public:
MapeditFrame() {}
MapeditFrame(World* world);
~MapeditFrame() { delete world; }
MapeditWidget* GetMapEditor();
void SetIsAddingEntity(bool isAddingEntity);
void MapDirtyDidChange(bool dirty);
void SetIsSettingStart(bool isSettingStart);
static void NewWorld();
static bool OpenWorld(std::string filename);
std::list<wxWindow*>::iterator closer;
static void LaunchWindow(World* world);
void populateMapTree(wxTreeItemId node, std::list<std::shared_ptr<Map>> maps);
void SelectMap(Map* map);
wxTreeItemId MoveTreeNode(wxTreeItemId toCopy, wxTreeItemId newParent);
void SetStartposLabel();
void ZoomIn(wxCommandEvent& event);
void ZoomOut(wxCommandEvent& event);
void OnNew(wxCommandEvent& event);
void OnOpen(wxCommandEvent& event);
void OnSave(wxCommandEvent& event);
void OnClose(wxCommandEvent& event);
void OnExit(wxCloseEvent& event);
void OnQuit(wxCommandEvent& event);
void OnTitleChange(wxCommandEvent& event);
void OnTabChange(wxBookCtrlEvent& event);
void OnTabChanging(wxBookCtrlEvent& event);
void OnAddEntity(wxCommandEvent& event);
void OnCancelAddEntity(wxCommandEvent& event);
void OnAddRoot(wxCommandEvent& event);
void OnAddChild(wxCommandEvent& event);
void OnDidSelectMap(wxTreeEvent& event);
void OnWillDragMap(wxTreeEvent& event);
void OnDidDragMap(wxTreeEvent& event);
void OnRightClickTree(wxTreeEvent& event);
void OnSetStartpos(wxCommandEvent& event);
void OnCancelSetStartpos(wxCommandEvent& event);
void OnOneMovingSash(wxSplitterEvent& event);
void OnThreeMovingSash(wxSplitterEvent& event);
void OnSetLeftmapType(wxCommandEvent& event);
void OnSetLeftmapMap(wxCommandEvent& event);
void OnSetRightmapType(wxCommandEvent& event);
void OnSetRightmapMap(wxCommandEvent& event);
void OnSetUpmapType(wxCommandEvent& event);
void OnSetUpmapMap(wxCommandEvent& event);
void OnSetDownmapType(wxCommandEvent& event);
void OnSetDownmapMap(wxCommandEvent& event);
void OnSelectEntity(wxCommandEvent& event);
World* world;
Map* currentMap;
MapeditWidget* mapEditor;
TileWidget* tileEditor;
wxToolBar* toolbar;
wxMenu* menuFile;
wxSplitterWindow* layout1;
wxSplitterWindow* layout3;
wxPanel* propertyEditor;
// Notebook
wxNotebook* notebook;
wxChoice* entityTypeBox;
wxButton* addEntityButton;
wxButton* cancelEntityButton;
// Map tree
wxTreeCtrl* mapTree;
wxTreeItemId dragMap;
wxMenu* mapTreePopup;
bool dontSelectMap = false;
// Property editor
UndoableTextBox* titleBox;
wxString prevTitle;
wxStaticText* startposLabel;
wxButton* setStartposButton;
wxButton* cancelStartposButton;
// Undo stuff
wxMenu* menuEdit;
std::list<std::shared_ptr<Undoable>> history;
std::list<std::shared_ptr<Undoable>>::iterator currentAction {begin(history)};
void OnUndo(wxCommandEvent& event);
void OnRedo(wxCommandEvent& event);
void UpdateUndoLabels();
void commitAction(std::shared_ptr<Undoable> action);
void commitAfter(std::shared_ptr<Undoable> action);
bool addingEntity = false;
private:
wxDECLARE_EVENT_TABLE();
};
#endif