From 9abda07c487a755b44845f839bf021566c4d45b3 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 29 Sep 2018 14:13:07 -0500 Subject: [PATCH] Add Tileset Editor window --- forms/mainwindow.ui | 27 +++++++++++++++---------- forms/tileseteditor.ui | 40 ++++++++++++++++++++++++++++++++++++++ include/editor.h | 1 + include/mainwindow.h | 4 ++++ include/ui/tileseteditor.h | 26 +++++++++++++++++++++++++ porymap.pro | 5 ++++- src/editor.cpp | 6 ++++++ src/mainwindow.cpp | 13 +++++++++++++ src/ui/tileseteditor.cpp | 26 +++++++++++++++++++++++++ 9 files changed, 137 insertions(+), 11 deletions(-) create mode 100644 forms/tileseteditor.ui create mode 100644 include/ui/tileseteditor.h create mode 100644 src/ui/tileseteditor.cpp diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index b42acbaf..4c4a0277 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -73,7 +73,7 @@ - + :/icons/map.ico:/icons/map.ico @@ -177,7 +177,7 @@ Paint - + :/icons/pencil.ico:/icons/pencil.ico @@ -203,7 +203,7 @@ Select - + :/icons/cursor.ico:/icons/cursor.ico @@ -220,7 +220,7 @@ Fill - + :/icons/fill_color.ico:/icons/fill_color.ico @@ -237,7 +237,7 @@ Dropper - + :/icons/pipette.ico:/icons/pipette.ico @@ -254,7 +254,7 @@ ... - + :/icons/move.ico:/icons/move.ico @@ -271,7 +271,7 @@ Shift - + :/icons/shift.ico:/icons/shift.ico @@ -1355,7 +1355,7 @@ New Object - + :/icons/add.ico:/icons/add.ico @@ -1384,7 +1384,7 @@ Delete - + :/icons/delete.ico:/icons/delete.ico @@ -2127,6 +2127,8 @@ + + @@ -2268,6 +2270,11 @@ P + + + Tileset Editor + + @@ -2288,7 +2295,7 @@ - + diff --git a/forms/tileseteditor.ui b/forms/tileseteditor.ui new file mode 100644 index 00000000..33074d3f --- /dev/null +++ b/forms/tileseteditor.ui @@ -0,0 +1,40 @@ + + + TilesetEditor + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + + + + + + + + 0 + 0 + 800 + 21 + + + + + + + + \ No newline at end of file diff --git a/include/editor.h b/include/editor.h index a9433e95..31f11586 100644 --- a/include/editor.h +++ b/include/editor.h @@ -71,6 +71,7 @@ public: void updatePrimaryTileset(QString tilesetLabel); void updateSecondaryTileset(QString tilesetLabel); void toggleBorderVisibility(bool visible); + Tileset *getCurrentMapPrimaryTileset(); DraggablePixmapItem *addMapEvent(Event *event); void selectMapEvent(DraggablePixmapItem *object); diff --git a/include/mainwindow.h b/include/mainwindow.h index 7dd7c773..eff9b871 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -12,6 +12,7 @@ #include "project.h" #include "map.h" #include "editor.h" +#include "tileseteditor.h" namespace Ui { class MainWindow; @@ -123,8 +124,11 @@ private slots: void resetMapViewScale(); + void on_actionTileset_Editor_triggered(); + private: Ui::MainWindow *ui; + TilesetEditor *tilesetEditor; QStandardItemModel *mapListModel; QList *mapGroupsModel; QMap mapListIndexes; diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h new file mode 100644 index 00000000..7725a16f --- /dev/null +++ b/include/ui/tileseteditor.h @@ -0,0 +1,26 @@ +#ifndef TILESETEDITOR_H +#define TILESETEDITOR_H + +#include +#include "project.h" + +namespace Ui { +class TilesetEditor; +} + +class TilesetEditor : public QMainWindow +{ + Q_OBJECT + +public: + explicit TilesetEditor(QWidget *parent = nullptr, Project *project = nullptr); + ~TilesetEditor(); + +private: + void displayPrimaryTilesetTiles(); + Ui::TilesetEditor *ui; + Project *project; + QString primaryTilesetLabel; +}; + +#endif // TILESETEDITOR_H diff --git a/porymap.pro b/porymap.pro index 665b5c19..3a027a4c 100644 --- a/porymap.pro +++ b/porymap.pro @@ -40,6 +40,7 @@ SOURCES += src/core/block.cpp \ src/ui/noscrollcombobox.cpp \ src/ui/noscrollspinbox.cpp \ src/ui/selectablepixmapitem.cpp \ + src/ui/tileseteditor.cpp \ src/editor.cpp \ src/main.cpp \ src/mainwindow.cpp \ @@ -74,13 +75,15 @@ HEADERS += include/core/block.h \ include/ui/noscrollcombobox.h \ include/ui/noscrollspinbox.h \ include/ui/selectablepixmapitem.h \ + include/ui/tileseteditor.h \ include/editor.h \ include/mainwindow.h \ include/project.h \ include/settings.h FORMS += forms/mainwindow.ui \ - forms/eventpropertiesframe.ui + forms/eventpropertiesframe.ui \ + forms/tileseteditor.ui RESOURCES += \ resources/images.qrc diff --git a/src/editor.cpp b/src/editor.cpp index 23fce69d..6da57f69 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -987,6 +987,12 @@ void Editor::toggleBorderVisibility(bool visible) this->setConnectionsVisibility(visible); } +Tileset* Editor::getCurrentMapPrimaryTileset() +{ + QString tilesetLabel = map->layout->tileset_primary_label; + return project->getTileset(tilesetLabel); +} + void DraggablePixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *mouse) { active = true; last_x = static_cast(mouse->pos().x() + this->pos().x()) / 16; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 70d875f3..581d84e2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1227,3 +1227,16 @@ void MainWindow::on_checkBox_ToggleBorder_stateChanged(int selected) bool visible = selected != 0; editor->toggleBorderVisibility(visible); } + +void MainWindow::on_actionTileset_Editor_triggered() +{ + if (!this->tilesetEditor) { + this->tilesetEditor = new TilesetEditor(nullptr, this->editor->project); + } + + if (!this->tilesetEditor->isVisible()) { + this->tilesetEditor->show(); + } else { + this->tilesetEditor->activateWindow(); + } +} diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp new file mode 100644 index 00000000..8b6dc5c6 --- /dev/null +++ b/src/ui/tileseteditor.cpp @@ -0,0 +1,26 @@ +#include "tileseteditor.h" +#include "ui_tileseteditor.h" + +TilesetEditor::TilesetEditor(QWidget *parent, Project *project) : + QMainWindow(parent), + ui(new Ui::TilesetEditor) +{ + ui->setupUi(this); + this->project = project; + + displayPrimaryTilesetTiles(); +} + +TilesetEditor::~TilesetEditor() +{ + delete ui; +} + +void TilesetEditor::displayPrimaryTilesetTiles() +{ + Tileset *primaryTileset = this->project->getTileset(this->primaryTilesetLabel); +// scene_metatiles = new QGraphicsScene; +// metatiles_item = new MetatilesPixmapItem(map); +// metatiles_item->draw(); +// scene_metatiles->addItem(metatiles_item); +}