From ef2a9e9fb81673e7c5129e159dfa75dd2be590db Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 7 Jan 2024 16:49:13 +0100 Subject: [PATCH] Included Files and Triggers improvements --- QtGameMaker.pro | 3 + src/editor/dialogs/addeventdialog.cpp | 10 +- src/editor/dialogs/addeventdialog.h | 4 +- src/editor/dialogs/addeventdialog.ui | 4 + .../dialogs/backgroundpropertiesdialog.cpp | 5 +- .../dialogs/backgroundpropertiesdialog.h | 3 +- src/editor/dialogs/fontpropertiesdialog.cpp | 5 +- src/editor/dialogs/fontpropertiesdialog.h | 3 +- src/editor/dialogs/gameinformationdialog.ui | 187 ++++++++++++++++-- .../dialogs/includedfilepropertiesdialog.cpp | 22 +++ .../dialogs/includedfilepropertiesdialog.h | 25 +++ .../dialogs/includedfilepropertiesdialog.ui | 68 +++++++ src/editor/dialogs/includedfilesdialog.cpp | 13 ++ src/editor/dialogs/includedfilesdialog.h | 3 + src/editor/dialogs/includedfilesdialog.ui | 6 +- src/editor/dialogs/objectpropertiesdialog.cpp | 18 +- src/editor/dialogs/objectpropertiesdialog.h | 4 +- src/editor/dialogs/pathpropertiesdialog.cpp | 5 +- src/editor/dialogs/pathpropertiesdialog.h | 3 +- src/editor/dialogs/roompropertiesdialog.cpp | 5 +- src/editor/dialogs/roompropertiesdialog.h | 3 +- src/editor/dialogs/scriptpropertiesdialog.cpp | 5 +- src/editor/dialogs/scriptpropertiesdialog.h | 3 +- src/editor/dialogs/soundpropertiesdialog.cpp | 5 +- src/editor/dialogs/soundpropertiesdialog.h | 3 +- src/editor/dialogs/spritepropertiesdialog.cpp | 5 +- src/editor/dialogs/spritepropertiesdialog.h | 3 +- .../dialogs/timelinepropertiesdialog.cpp | 5 +- src/editor/dialogs/timelinepropertiesdialog.h | 3 +- src/editor/dialogs/triggersdialog.ui | 4 + src/editor/icons/included-files.png | Bin 0 -> 1789 bytes src/editor/icons/trigger.png | Bin 0 -> 4591 bytes src/editor/mainwindow.cpp | 2 +- src/editor/mainwindow.h | 2 + src/editor/mainwindow.ui | 8 + src/editor/resources_editor.qrc | 2 + src/editor/widgets/actiondragwidget.cpp | 3 +- src/editor/widgets/actiondragwidget.h | 8 + src/projectcontainer.h | 7 + src/projectserialization.cpp | 20 +- src/projectserialization.h | 2 + 41 files changed, 432 insertions(+), 57 deletions(-) create mode 100644 src/editor/dialogs/includedfilepropertiesdialog.cpp create mode 100644 src/editor/dialogs/includedfilepropertiesdialog.h create mode 100644 src/editor/dialogs/includedfilepropertiesdialog.ui create mode 100644 src/editor/icons/included-files.png create mode 100644 src/editor/icons/trigger.png diff --git a/QtGameMaker.pro b/QtGameMaker.pro index 83db83c..65c75a2 100644 --- a/QtGameMaker.pro +++ b/QtGameMaker.pro @@ -27,6 +27,7 @@ INCLUDEPATH += \ HEADERS += \ src/closeeventfilter.h \ src/editor/dialogs/genericcodeeditordialog.h \ + src/editor/dialogs/includedfilepropertiesdialog.h \ src/editor/dialogs/transparentbackgroundsettingsdialog.h \ src/editor/editorguiutils.h \ src/editor/roomscene.h \ @@ -89,6 +90,7 @@ HEADERS += \ SOURCES += \ src/closeeventfilter.cpp \ src/editor/dialogs/genericcodeeditordialog.cpp \ + src/editor/dialogs/includedfilepropertiesdialog.cpp \ src/editor/dialogs/transparentbackgroundsettingsdialog.cpp \ src/editor/editorguiutils.cpp \ src/editor/roomscene.cpp \ @@ -148,6 +150,7 @@ SOURCES += \ src/projectserialization.cpp FORMS += \ + src/editor/dialogs/includedfilepropertiesdialog.ui \ src/editor/dialogs/transparentbackgroundsettingsdialog.ui \ src/editor/mainwindow.ui \ src/editor/dialogs/addeventdialog.ui \ diff --git a/src/editor/dialogs/addeventdialog.cpp b/src/editor/dialogs/addeventdialog.cpp index d4ce1f9..721cdd7 100644 --- a/src/editor/dialogs/addeventdialog.cpp +++ b/src/editor/dialogs/addeventdialog.cpp @@ -5,10 +5,12 @@ #include #include "models/projecttreemodel.h" +#include "mainwindow.h" -AddEventDialog::AddEventDialog(ProjectTreeModel &projectModel, QWidget *parent) : +AddEventDialog::AddEventDialog(ProjectTreeModel &projectModel, MainWindow &mainWindow, QWidget *parent) : QDialog{parent}, m_projectModel{projectModel}, + m_mainWindow{mainWindow}, m_ui{std::make_unique()} { m_ui->setupUi(this); @@ -80,6 +82,12 @@ AddEventDialog::AddEventDialog(ProjectTreeModel &projectModel, QWidget *parent) }); m_ui->pushButtonCollision->setMenu(menu); } + + { + auto menu = new QMenu; + menu->addAction(tr("Add/Modify Triggers..."), this, [this](){ m_mainWindow.showDefineTriggers(); reject(); }); + m_ui->pushButtonTrigger->setMenu(menu); + } } AddEventDialog::~AddEventDialog() = default; diff --git a/src/editor/dialogs/addeventdialog.h b/src/editor/dialogs/addeventdialog.h index ce4c23b..d952379 100644 --- a/src/editor/dialogs/addeventdialog.h +++ b/src/editor/dialogs/addeventdialog.h @@ -10,13 +10,14 @@ namespace Ui { class AddEventDialog; } class ProjectTreeModel; +class MainWindow; class AddEventDialog : public QDialog { Q_OBJECT public: - explicit AddEventDialog(ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit AddEventDialog(ProjectTreeModel &projectModel, MainWindow &mainWindow, QWidget *parent = nullptr); ~AddEventDialog(); const std::optional> &eventType() const { return m_eventType; } @@ -26,6 +27,7 @@ public: private: ProjectTreeModel &m_projectModel; + MainWindow &m_mainWindow; const std::unique_ptr m_ui; diff --git a/src/editor/dialogs/addeventdialog.ui b/src/editor/dialogs/addeventdialog.ui index 2dbf04c..beb6733 100644 --- a/src/editor/dialogs/addeventdialog.ui +++ b/src/editor/dialogs/addeventdialog.ui @@ -122,6 +122,10 @@ &Trigger + + + :/qtgameengine/icons/trigger.png:/qtgameengine/icons/trigger.png + diff --git a/src/editor/dialogs/backgroundpropertiesdialog.cpp b/src/editor/dialogs/backgroundpropertiesdialog.cpp index 42c2e41..bf6081b 100644 --- a/src/editor/dialogs/backgroundpropertiesdialog.cpp +++ b/src/editor/dialogs/backgroundpropertiesdialog.cpp @@ -8,9 +8,10 @@ #include "projectcontainer.h" #include "models/projecttreemodel.h" #include "imageeditordialog.h" +#include "mainwindow.h" -BackgroundPropertiesDialog::BackgroundPropertiesDialog(Background &background, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +BackgroundPropertiesDialog::BackgroundPropertiesDialog(Background &background, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_background{background}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/backgroundpropertiesdialog.h b/src/editor/dialogs/backgroundpropertiesdialog.h index f88d63f..6dd8b1f 100644 --- a/src/editor/dialogs/backgroundpropertiesdialog.h +++ b/src/editor/dialogs/backgroundpropertiesdialog.h @@ -8,13 +8,14 @@ namespace Ui { class BackgroundPropertiesDialog; } struct Background; class ProjectTreeModel; +class MainWindow; class BackgroundPropertiesDialog : public QDialog { Q_OBJECT public: - explicit BackgroundPropertiesDialog(Background &background, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit BackgroundPropertiesDialog(Background &background, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~BackgroundPropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/fontpropertiesdialog.cpp b/src/editor/dialogs/fontpropertiesdialog.cpp index daa899e..9b2571a 100644 --- a/src/editor/dialogs/fontpropertiesdialog.cpp +++ b/src/editor/dialogs/fontpropertiesdialog.cpp @@ -6,9 +6,10 @@ #include "projectcontainer.h" #include "models/projecttreemodel.h" +#include "mainwindow.h" -FontPropertiesDialog::FontPropertiesDialog(Font &font, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +FontPropertiesDialog::FontPropertiesDialog(Font &font, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_font{font}, m_projectModel{projectModel} diff --git a/src/editor/dialogs/fontpropertiesdialog.h b/src/editor/dialogs/fontpropertiesdialog.h index 35a24b7..1dbbbd4 100644 --- a/src/editor/dialogs/fontpropertiesdialog.h +++ b/src/editor/dialogs/fontpropertiesdialog.h @@ -7,13 +7,14 @@ namespace Ui { class FontPropertiesDialog; } struct Font; class ProjectTreeModel; +class MainWindow; class FontPropertiesDialog : public QDialog { Q_OBJECT public: - explicit FontPropertiesDialog(Font &font, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit FontPropertiesDialog(Font &font, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~FontPropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/gameinformationdialog.ui b/src/editor/dialogs/gameinformationdialog.ui index 244b01f..bc57fb2 100644 --- a/src/editor/dialogs/gameinformationdialog.ui +++ b/src/editor/dialogs/gameinformationdialog.ui @@ -13,19 +13,184 @@ Game Information - - - - 50 - 50 - 201 - 16 - - + + + + + + &File + + + + + + + + + + + + + + &Edit + + + + + + + + + + + F&ormat + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Not yet implemented + + + + + - Not yet implemented + &New - + + + + &Open... + + + + + &Save + + + + + Save &As... + + + + + &Print... + + + + + Print Preview... + + + + + &Export PDF... + + + + + &Undo + + + + + &Redo + + + + + Cu&t + + + + + &Copy + + + + + &Paste + + + + + &Bold + + + + + &Italic + + + + + &Underline + + + + + &Left + + + + + C&enter + + + + + &Justify + + + + + &Indent + + + + + &Unindent + + + + + &Color + + + + + Chec&ked + + diff --git a/src/editor/dialogs/includedfilepropertiesdialog.cpp b/src/editor/dialogs/includedfilepropertiesdialog.cpp new file mode 100644 index 0000000..10db109 --- /dev/null +++ b/src/editor/dialogs/includedfilepropertiesdialog.cpp @@ -0,0 +1,22 @@ +#include "includedfilepropertiesdialog.h" +#include "ui_includedfilepropertiesdialog.h" + +IncludedFilePropertiesDialog::IncludedFilePropertiesDialog(IncludedFile &includedFile, QWidget *parent) : + QDialog{parent}, + m_includedFile{includedFile}, + m_ui{std::make_unique()} +{ + m_ui->setupUi(this); + +#ifdef Q_OS_LINUX + setWindowFlags((windowFlags() & ~Qt::Dialog) | Qt::Window); +#endif + setWindowFlag(Qt::WindowCloseButtonHint); +} + +IncludedFilePropertiesDialog::~IncludedFilePropertiesDialog() = default; + +void IncludedFilePropertiesDialog::accept() +{ + QDialog::reject(); +} diff --git a/src/editor/dialogs/includedfilepropertiesdialog.h b/src/editor/dialogs/includedfilepropertiesdialog.h new file mode 100644 index 0000000..3bd681b --- /dev/null +++ b/src/editor/dialogs/includedfilepropertiesdialog.h @@ -0,0 +1,25 @@ +#pragma once + +#include + +#include + +namespace Ui { class IncludedFilePropertiesDialog; } +struct IncludedFile; + +class IncludedFilePropertiesDialog : public QDialog +{ + Q_OBJECT + +public: + explicit IncludedFilePropertiesDialog(IncludedFile &includedFile, QWidget *parent = nullptr); + ~IncludedFilePropertiesDialog() override; + +public slots: + void accept() override; + +private: + IncludedFile &m_includedFile; + + const std::unique_ptr m_ui; +}; diff --git a/src/editor/dialogs/includedfilepropertiesdialog.ui b/src/editor/dialogs/includedfilepropertiesdialog.ui new file mode 100644 index 0000000..677ce51 --- /dev/null +++ b/src/editor/dialogs/includedfilepropertiesdialog.ui @@ -0,0 +1,68 @@ + + + IncludedFilePropertiesDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + IncludedFilePropertiesDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + IncludedFilePropertiesDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/editor/dialogs/includedfilesdialog.cpp b/src/editor/dialogs/includedfilesdialog.cpp index 81df0e5..f923927 100644 --- a/src/editor/dialogs/includedfilesdialog.cpp +++ b/src/editor/dialogs/includedfilesdialog.cpp @@ -3,6 +3,7 @@ #include "projectcontainer.h" #include "models/includedfilesmodel.h" +#include "dialogs/includedfilepropertiesdialog.h" IncludedFilesDialog::IncludedFilesDialog(ProjectContainer &project, QWidget *parent) : QDialog{parent}, @@ -18,6 +19,18 @@ IncludedFilesDialog::IncludedFilesDialog(ProjectContainer &project, QWidget *par button->setIcon(QIcon{":/qtgameengine/icons/delete.png"}); m_ui->listView->setModel(m_model.get()); + + connect(m_ui->pushButtonAdd, &QAbstractButton::clicked, this, &IncludedFilesDialog::addPressed); } IncludedFilesDialog::~IncludedFilesDialog() = default; + +void IncludedFilesDialog::addPressed() +{ + IncludedFile includedFile; + IncludedFilePropertiesDialog dialog{includedFile, this}; + if (dialog.exec() == QDialog::Accepted) + { + // TODO + } +} diff --git a/src/editor/dialogs/includedfilesdialog.h b/src/editor/dialogs/includedfilesdialog.h index f52e480..efc2a7c 100644 --- a/src/editor/dialogs/includedfilesdialog.h +++ b/src/editor/dialogs/includedfilesdialog.h @@ -16,6 +16,9 @@ public: explicit IncludedFilesDialog(ProjectContainer &project, QWidget *parent = nullptr); ~IncludedFilesDialog(); +private slots: + void addPressed(); + private: const std::unique_ptr m_ui; diff --git a/src/editor/dialogs/includedfilesdialog.ui b/src/editor/dialogs/includedfilesdialog.ui index a4946f9..b7bc555 100644 --- a/src/editor/dialogs/includedfilesdialog.ui +++ b/src/editor/dialogs/includedfilesdialog.ui @@ -7,12 +7,16 @@ 0 0 400 - 300 + 462 Included Files + + + :/qtgameengine/icons/included-files.png:/qtgameengine/icons/included-files.png + diff --git a/src/editor/dialogs/objectpropertiesdialog.cpp b/src/editor/dialogs/objectpropertiesdialog.cpp index 56da8ef..faf9b49 100644 --- a/src/editor/dialogs/objectpropertiesdialog.cpp +++ b/src/editor/dialogs/objectpropertiesdialog.cpp @@ -12,8 +12,8 @@ #include "models/objecteventsmodel.h" #include "addeventdialog.h" -ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel &projectModel, MainWindow *mainWindow) : - QDialog{mainWindow}, +ObjectPropertiesDialog::ObjectPropertiesDialog(Object &object, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_object{object}, m_projectModel{projectModel}, @@ -191,12 +191,6 @@ void ObjectPropertiesDialog::newSprite() void ObjectPropertiesDialog::editSprite() { - if (!m_mainWindow) - { - qCritical() << "no mainWindow available"; - return; - } - auto &sprites = m_projectModel.project()->sprites; const auto iter = std::find_if(std::begin(sprites), std::end(sprites), [&](const Sprite &sprite){ return sprite.name == m_spriteName; }); @@ -206,7 +200,7 @@ void ObjectPropertiesDialog::editSprite() return; } - m_mainWindow->openPropertiesWindowFor(*iter); + m_mainWindow.openPropertiesWindowFor(*iter); } void ObjectPropertiesDialog::showInformation() @@ -216,7 +210,7 @@ void ObjectPropertiesDialog::showInformation() void ObjectPropertiesDialog::addEvent() { - AddEventDialog dialog{m_projectModel, this}; + AddEventDialog dialog{m_projectModel, m_mainWindow, this}; if (dialog.exec() == QDialog::Accepted) if (const auto &eventType = dialog.eventType()) if (!m_eventsModel->addEvent(*eventType)) @@ -248,7 +242,7 @@ void ObjectPropertiesDialog::replaceEvent() std::variant x = event->first; - AddEventDialog dialog{m_projectModel, this}; + AddEventDialog dialog{m_projectModel, m_mainWindow, this}; if (dialog.exec() == QDialog::Accepted) if (const auto &eventType = dialog.eventType()) if (!m_eventsModel->changeEvent(event->first, *eventType)) @@ -432,7 +426,7 @@ void ObjectPropertiesDialog::setParent(const Object &object) { if (&m_object == &object) { - QMessageBox::warning(m_mainWindow, tr("This will create a loop in parents."), tr("This will create a loop in parents.")); + QMessageBox::warning(this, tr("This will create a loop in parents."), tr("This will create a loop in parents.")); return; } diff --git a/src/editor/dialogs/objectpropertiesdialog.h b/src/editor/dialogs/objectpropertiesdialog.h index 0c604c4..f581a98 100644 --- a/src/editor/dialogs/objectpropertiesdialog.h +++ b/src/editor/dialogs/objectpropertiesdialog.h @@ -18,7 +18,7 @@ class ObjectPropertiesDialog : public QDialog Q_OBJECT public: - explicit ObjectPropertiesDialog(Object &object, ProjectTreeModel &projectModel, MainWindow *mainWindow); + explicit ObjectPropertiesDialog(Object &object, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~ObjectPropertiesDialog(); void accept() override; @@ -62,7 +62,7 @@ private: Object &m_object; ProjectTreeModel &m_projectModel; - MainWindow * const m_mainWindow; + MainWindow &m_mainWindow; Object::events_container_t m_events; Object::collision_events_container_t m_collisionEvents; diff --git a/src/editor/dialogs/pathpropertiesdialog.cpp b/src/editor/dialogs/pathpropertiesdialog.cpp index 62041f0..32d5538 100644 --- a/src/editor/dialogs/pathpropertiesdialog.cpp +++ b/src/editor/dialogs/pathpropertiesdialog.cpp @@ -12,9 +12,10 @@ #include "projectcontainer.h" #include "models/projecttreemodel.h" #include "models/pathpointsmodel.h" +#include "mainwindow.h" -PathPropertiesDialog::PathPropertiesDialog(Path &path, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +PathPropertiesDialog::PathPropertiesDialog(Path &path, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_path{path}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/pathpropertiesdialog.h b/src/editor/dialogs/pathpropertiesdialog.h index f0a615a..6aa9705 100644 --- a/src/editor/dialogs/pathpropertiesdialog.h +++ b/src/editor/dialogs/pathpropertiesdialog.h @@ -13,13 +13,14 @@ class QMenu; namespace Ui { class PathPropertiesDialog; } class ProjectTreeModel; class PathPointsModel; +class MainWindow; class PathPropertiesDialog : public QDialog { Q_OBJECT public: - explicit PathPropertiesDialog(Path &path, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit PathPropertiesDialog(Path &path, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~PathPropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/roompropertiesdialog.cpp b/src/editor/dialogs/roompropertiesdialog.cpp index 41e78d1..1675e76 100644 --- a/src/editor/dialogs/roompropertiesdialog.cpp +++ b/src/editor/dialogs/roompropertiesdialog.cpp @@ -13,9 +13,10 @@ #include "roomscene.h" #include "editorguiutils.h" #include "genericcodeeditordialog.h" +#include "mainwindow.h" -RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +RoomPropertiesDialog::RoomPropertiesDialog(Room &room, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_room{room}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/roompropertiesdialog.h b/src/editor/dialogs/roompropertiesdialog.h index 1d551e8..15f39a6 100644 --- a/src/editor/dialogs/roompropertiesdialog.h +++ b/src/editor/dialogs/roompropertiesdialog.h @@ -15,13 +15,14 @@ struct Sprite; struct Object; class ProjectTreeModel; class RoomScene; +class MainWindow; class RoomPropertiesDialog : public QDialog { Q_OBJECT public: - explicit RoomPropertiesDialog(Room &room, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit RoomPropertiesDialog(Room &room, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~RoomPropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/scriptpropertiesdialog.cpp b/src/editor/dialogs/scriptpropertiesdialog.cpp index 9480a48..56eaa38 100644 --- a/src/editor/dialogs/scriptpropertiesdialog.cpp +++ b/src/editor/dialogs/scriptpropertiesdialog.cpp @@ -8,9 +8,10 @@ #include "projectcontainer.h" #include "models/projecttreemodel.h" +#include "mainwindow.h" -ScriptPropertiesDialog::ScriptPropertiesDialog(Script &script, ProjectTreeModel &projectModel, QWidget *parent) : - CodeEditorDialog{tr("Script Properties: %0").arg(script.name), parent}, +ScriptPropertiesDialog::ScriptPropertiesDialog(Script &script, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + CodeEditorDialog{tr("Script Properties: %0").arg(script.name), &mainWindow}, m_script{script}, m_projectModel{projectModel}, m_lineEditName{new QLineEdit{this}} diff --git a/src/editor/dialogs/scriptpropertiesdialog.h b/src/editor/dialogs/scriptpropertiesdialog.h index 4b0ac39..f59c1d9 100644 --- a/src/editor/dialogs/scriptpropertiesdialog.h +++ b/src/editor/dialogs/scriptpropertiesdialog.h @@ -3,13 +3,14 @@ class QLineEdit; struct Script; class ProjectTreeModel; +class MainWindow; class ScriptPropertiesDialog : public CodeEditorDialog { Q_OBJECT public: - ScriptPropertiesDialog(Script &script, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + ScriptPropertiesDialog(Script &script, ProjectTreeModel &projectModel, MainWindow &mainWindow); void accept() override; diff --git a/src/editor/dialogs/soundpropertiesdialog.cpp b/src/editor/dialogs/soundpropertiesdialog.cpp index 24e1ace..baf3530 100644 --- a/src/editor/dialogs/soundpropertiesdialog.cpp +++ b/src/editor/dialogs/soundpropertiesdialog.cpp @@ -9,9 +9,10 @@ #include "projectcontainer.h" #include "models/projecttreemodel.h" +#include "mainwindow.h" -SoundPropertiesDialog::SoundPropertiesDialog(Sound &sound, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +SoundPropertiesDialog::SoundPropertiesDialog(Sound &sound, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_sound{sound}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/soundpropertiesdialog.h b/src/editor/dialogs/soundpropertiesdialog.h index 7e568a5..1c4c4dd 100644 --- a/src/editor/dialogs/soundpropertiesdialog.h +++ b/src/editor/dialogs/soundpropertiesdialog.h @@ -9,13 +9,14 @@ namespace Ui { class SoundPropertiesDialog; } struct Sound; class ProjectTreeModel; +class MainWindow; class SoundPropertiesDialog : public QDialog { Q_OBJECT public: - explicit SoundPropertiesDialog(Sound &sound, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit SoundPropertiesDialog(Sound &sound, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~SoundPropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/spritepropertiesdialog.cpp b/src/editor/dialogs/spritepropertiesdialog.cpp index 51a17f9..ef74135 100644 --- a/src/editor/dialogs/spritepropertiesdialog.cpp +++ b/src/editor/dialogs/spritepropertiesdialog.cpp @@ -10,9 +10,10 @@ #include "models/projecttreemodel.h" #include "editspritedialog.h" #include "maskpropertiesdialog.h" +#include "mainwindow.h" -SpritePropertiesDialog::SpritePropertiesDialog(Sprite &sprite, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +SpritePropertiesDialog::SpritePropertiesDialog(Sprite &sprite, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_sprite{sprite}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/spritepropertiesdialog.h b/src/editor/dialogs/spritepropertiesdialog.h index fc7b2f8..a655d7e 100644 --- a/src/editor/dialogs/spritepropertiesdialog.h +++ b/src/editor/dialogs/spritepropertiesdialog.h @@ -8,13 +8,14 @@ namespace Ui { class SpritePropertiesDialog; } struct Sprite; class ProjectTreeModel; +class MainWindow; class SpritePropertiesDialog : public QDialog { Q_OBJECT public: - explicit SpritePropertiesDialog(Sprite &sprite, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit SpritePropertiesDialog(Sprite &sprite, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~SpritePropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/timelinepropertiesdialog.cpp b/src/editor/dialogs/timelinepropertiesdialog.cpp index bfbc594..1e9c777 100644 --- a/src/editor/dialogs/timelinepropertiesdialog.cpp +++ b/src/editor/dialogs/timelinepropertiesdialog.cpp @@ -11,9 +11,10 @@ #include "models/projecttreemodel.h" #include "models/timelinemomentsmodel.h" #include "dialogs/deletemomentsdialog.h" +#include "mainwindow.h" -TimeLinePropertiesDialog::TimeLinePropertiesDialog(TimeLine &timeLine, ProjectTreeModel &projectModel, QWidget *parent) : - QDialog{parent}, +TimeLinePropertiesDialog::TimeLinePropertiesDialog(TimeLine &timeLine, ProjectTreeModel &projectModel, MainWindow &mainWindow) : + QDialog{&mainWindow}, m_ui{std::make_unique()}, m_timeLine{timeLine}, m_projectModel{projectModel}, diff --git a/src/editor/dialogs/timelinepropertiesdialog.h b/src/editor/dialogs/timelinepropertiesdialog.h index b7df03e..9ebe262 100644 --- a/src/editor/dialogs/timelinepropertiesdialog.h +++ b/src/editor/dialogs/timelinepropertiesdialog.h @@ -9,13 +9,14 @@ namespace Ui { class TimeLinePropertiesDialog; } class ProjectTreeModel; class TimelineMomentsModel; +class MainWindow; class TimeLinePropertiesDialog : public QDialog { Q_OBJECT public: - explicit TimeLinePropertiesDialog(TimeLine &timeLine, ProjectTreeModel &projectModel, QWidget *parent = nullptr); + explicit TimeLinePropertiesDialog(TimeLine &timeLine, ProjectTreeModel &projectModel, MainWindow &mainWindow); ~TimeLinePropertiesDialog(); void accept() override; diff --git a/src/editor/dialogs/triggersdialog.ui b/src/editor/dialogs/triggersdialog.ui index 45d1ed5..79678fa 100644 --- a/src/editor/dialogs/triggersdialog.ui +++ b/src/editor/dialogs/triggersdialog.ui @@ -13,6 +13,10 @@ Triggers + + + :/qtgameengine/icons/trigger.png:/qtgameengine/icons/trigger.png + diff --git a/src/editor/icons/included-files.png b/src/editor/icons/included-files.png new file mode 100644 index 0000000000000000000000000000000000000000..822673e3aa80af1d93a3f3010ec4e1c4f0e3dfe0 GIT binary patch literal 1789 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEd&2`c~9tYbM{&U=jb1l@d?o`b#U*3LqYHsAE zo+VdL<$XSw6#ag0rSbgxdn)t84*ZvC3HE1RU{b84I)Nd8VK&2=G^->b0}G3aqMV#J zyHkvQ_9<}eX}QYlrFrS)mVJBn69anKR&j#wUwV|Rq8c+_Uzeb(>Cv$bfAkN>GrlA)kTg@*Gtz(u}wOe zq9fG#N5S*b#o6Zh_h!tWZ~o`g!7hf%jEomW_4W1Zbx!-<|G#v>6s6B!G;b{q+~U4C zNNHll_PuN0_I|l^srjmp+Us`yFqQ+`-r5Rtaj`V0bZLliop@d(;3|0habapn$ro;? zj*1b;ZgKs0E)EBx9Ryfxs=x6p4B%L`?BFtyDix)Y^78$xiZ#eJ~Fbhf6thl{d4TtvG3g6+^fI-5QyOF3%*`? zfS*-Cfa&z6gzEV_`*Ux19Dn?1`QgL!`}_Oj-@ka#Vb;pf&LW~N@`TyTk%e(uYU8bK zn=9Tg_jX#e+FMdi?q5|($`h%EfMAXfV)7L%J6tDb&f0KV#An;@IhMt0MPFZC%?@7| z^OI}N?OV+8d>=eGEZ7;WqZ78jFZ%rA{d@ae8#fl#78e^ETUuH&mfzC(u<_}}bLQ#s ziaVkcUSD1P=zf!egMceXOT&(SozoWe|NhL*&dxT!cKv$q%a<>I+dM9w$FzH!L&E}w z5Z}Yko~g;%R<*o+n=8V_I%8R=&V>+PR}-nD7bAG)&Ydf zQ=ICRSbCL#@xtA^cjumd`ex?LnZFb6s22!cDF2qTUd8j^ccy|a#mGqt+FT)_tty@q zR5-hSmurYLt$W?!q7)z^xh&IZl1iXJON!n6`E%#bua7y)Ud_E_g}BDAlD|P-id{-3 zzK6ekGt)WEb?-?mzLyugwyLVCdbD}-=IIP~T&HRzm^<%QyTHX{Bk+i2 z!KzgqF1H*y0%A6#TD}%`v}fX{F7?kzqH_F?SV&67QIf{uh-x6@_fI{ zi~EKi+G+=zdD3^iu`CX4T3e-kMWALai#LbG&ySuA4zIR{MArJBb5gCAlh@g@NA{WQ zb^f_-Z(eyd?eUZQAN6nUk(Z~J?|f5Pdg|8JUE&{{&#k`PAsen5;jjOoeNOoDCdHbS zEPFTdNi**I%Jg;Gp}G^5rCK+)ZV~wgRvCMFm!tiYJyuiS{yD*zdXM*A>7iLJe~aSg zZYo<~^ZI$UZC!*v$vn`mLEIlxy=FsmY&TP1%^m#`taDNt0h~ z?az4wZ1X!gK7JKh@$Ku3SAJE;t7j&E{;^)vx^*`HcgAXVoxgt+%A0Gd=CIsYFy%n< zmxFU>uJW_7tiE%~Xj=a(g*zuFKX*G}%gKL!?S$XHlJR*hT-w^&r+3Dj%gN85&d<-t zq94C^%RD<%qlB8^DXtBcrlwzauR2wG^76^;F>WB{0lj-Vo}$aoYR;To3*_xxRLMIN^ho&L8eKf;%5EFJf57z`(%Z>FVdQ I&MBb@0F*CCh5!Hn literal 0 HcmV?d00001 diff --git a/src/editor/icons/trigger.png b/src/editor/icons/trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..574e3092d174fe7f1f5148109bbf80ac6ac70fea GIT binary patch literal 4591 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hEo+2FmN$2 zFtRW(g48fDFfbyqnHZTFm>C!t+87uZgczB@YC!6w7+JyW9tH*mX()RN0|SEwR1HXv zAtMt5F9QR^90mpkBSt0$5s>W+3=Em=5WDsnYEaA+d&2f#+FQH=KxP*+$xYkM}a?#g=GanB@>0-dvoa~?fFn4|NL%o#d|x4jB7K}zN#?# zZa8l)JJ&^j!3utx6eON+NuH ztdjF{^%7I^lT!66atlBa#$aP#QIMFNom!%hl$xHIXRGvn_kJaX%oJOta8q9c-vZ~< zj7*QJqSW9jzmVjr>}1OnC3`zAn+mIn+=ATHl0=1y+?>2(s|s5su(?)w#a19;eI*63 zl9Fs&r3l{u1?T*tR0R_~6Fmc6*NV(CBPBa71)HLjG^-#NH>eRsDQUJ!86_nJR{Hwo z<>h+i#(Mch>H3D2mX`VkM*2oZx6y6&U|kit1t=;@GSd)&h2k5K4A?u!4ynj3fSZe=8s>MfVsIE)x#TC8f}H2+ zVygtQ-zp_PIWxry%rrMlO-{BjG1N6mO*GOqNl7!+wMb4j*0oGBv`jQJF*7i0NfnH{2id9llqG^(ak+H71p|Pc|NwT?-uBDlgfo@7_YMMn_l4Y`` zxiOLv{zaMTnR$sh$gTnzl>#yb};8u+S8+g@+sjST5v>IzI4tqii>+bMu5Lt;QcO$`q+tv2zK3{M|UEV~zKhMKKHf#ZDm%Q+ z^7!H7HFv)6m2a5(VIRlcTb*Ku?mPdm-#zL4lWXa2FMbAH-l;CnB+$UXqQJn&;lO~# ztp8kfV>ai`7==oX4R0PsI#g`2D*4X0p-Et`NgCt9^1>~}(X2{KITTMn-fn$>$0^70 zk(qz&#K2yK&`Cj^3bB)eTPLj6SjnVV9=a{FB`Ec!nxNP9r?Z__Y)xFm*&-92=49=( zdao0M@u6$y{W~Y#F%kXT-f{hU8t=o!ejh4jw0tl2PF|}Ra?|QIm($g=m$wQ|y8mB) Xk&1Tqlxt!Qpw6?WtDnm{r-UW|e#SvK literal 0 HcmV?d00001 diff --git a/src/editor/mainwindow.cpp b/src/editor/mainwindow.cpp index 0e60e31..ea68149 100644 --- a/src/editor/mainwindow.cpp +++ b/src/editor/mainwindow.cpp @@ -232,7 +232,7 @@ void MainWindow::openPropertiesWindowFor(T &entry) return; } - auto dialog = new PropertiesDialogFor{entry, *m_projectTreeModel, this}; + auto dialog = new PropertiesDialogFor{entry, *m_projectTreeModel, *this}; auto subwindow = m_ui->mdiArea->addSubWindow(dialog); auto action = m_ui->menuWindow->addAction(dialog->windowTitle()); m_actionGroupWindows->addAction(action); diff --git a/src/editor/mainwindow.h b/src/editor/mainwindow.h index 3052dcf..4cb3e6a 100644 --- a/src/editor/mainwindow.h +++ b/src/editor/mainwindow.h @@ -65,7 +65,9 @@ private slots: void showGlobalGameSettings(); void showExtensionPackages(); void showDefineConstants(); +public slots: void showDefineTriggers(); +private slots: void showIncludedFiles(); void runGame(); void debugGame(); diff --git a/src/editor/mainwindow.ui b/src/editor/mainwindow.ui index 132b8cf..a86dd98 100644 --- a/src/editor/mainwindow.ui +++ b/src/editor/mainwindow.ui @@ -634,6 +634,10 @@ + + + :/qtgameengine/icons/trigger.png:/qtgameengine/icons/trigger.png + &Define Triggers... @@ -642,6 +646,10 @@ + + + :/qtgameengine/icons/included-files.png:/qtgameengine/icons/included-files.png + Inc&luded Files... diff --git a/src/editor/resources_editor.qrc b/src/editor/resources_editor.qrc index 19f3e97..ff651c3 100644 --- a/src/editor/resources_editor.qrc +++ b/src/editor/resources_editor.qrc @@ -49,6 +49,7 @@ icons/grid.png icons/help.png icons/import-resources.png + icons/included-files.png icons/info.png icons/isometric.png icons/lock.png @@ -90,6 +91,7 @@ icons/tile.png icons/timeline-file.png icons/timeline.png + icons/trigger.png icons/undo.png icons/unlock.png icons/blue-arrow-down.png diff --git a/src/editor/widgets/actiondragwidget.cpp b/src/editor/widgets/actiondragwidget.cpp index 2f0f329..9fbb904 100644 --- a/src/editor/widgets/actiondragwidget.cpp +++ b/src/editor/widgets/actiondragwidget.cpp @@ -5,7 +5,6 @@ #include #include -#include "projectcontainer.h" #include "projectserialization.h" #include "stdserialization.h" @@ -39,7 +38,7 @@ void ActionDragWidget::mouseMoveEvent(QMouseEvent *event) QMimeData *mimeData = new QMimeData; QByteArray encoded; QDataStream stream(&encoded, QDataStream::WriteOnly); - stream << Action{ExecuteCodeAction{ .script = "hatschi" }}; + stream << m_action; mimeData->setData("custom", encoded); drag->setMimeData(mimeData); diff --git a/src/editor/widgets/actiondragwidget.h b/src/editor/widgets/actiondragwidget.h index aa1c66b..67edebf 100644 --- a/src/editor/widgets/actiondragwidget.h +++ b/src/editor/widgets/actiondragwidget.h @@ -3,6 +3,8 @@ #include #include +#include "projectcontainer.h" + class ActionDragWidget : public QToolButton { Q_OBJECT @@ -10,10 +12,16 @@ class ActionDragWidget : public QToolButton public: explicit ActionDragWidget(QWidget *parent = nullptr); + const Action &action() const { return m_action; } + void setAction(Action &&action) { m_action = std::move(action); } + void setAction(const Action &action) { m_action = action; } + protected: void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; private: QPoint m_dragStartPosition; + + Action m_action; }; diff --git a/src/projectcontainer.h b/src/projectcontainer.h index f70d9ca..ffba4b5 100644 --- a/src/projectcontainer.h +++ b/src/projectcontainer.h @@ -277,9 +277,14 @@ struct Room std::vector objects; }; +struct IncludedFile { + +}; + struct ProjectContainer { GlobalGameSettings globalGameSettings; + std::list sprites; std::list sounds; std::list backgrounds; @@ -290,6 +295,8 @@ struct ProjectContainer std::list objects; std::list rooms; + std::list includedFiles; + template std::list &containerFor(); template const std::list &containerFor() const; }; diff --git a/src/projectserialization.cpp b/src/projectserialization.cpp index 86dac7b..85e489e 100644 --- a/src/projectserialization.cpp +++ b/src/projectserialization.cpp @@ -408,6 +408,20 @@ QDataStream &operator>>(QDataStream &ds, Room &room) return ds; } +QDataStream &operator<<(QDataStream &ds, const IncludedFile &includedFile) +{ + Q_UNUSED(includedFile); + //ds << includedFile.; + return ds; +} + +QDataStream &operator>>(QDataStream &ds, IncludedFile &includedFile) +{ + Q_UNUSED(includedFile); + //ds >> includedFile.; + return ds; +} + QDataStream &operator<<(QDataStream &ds, const ProjectContainer &project) { ds << project.globalGameSettings @@ -419,7 +433,8 @@ QDataStream &operator<<(QDataStream &ds, const ProjectContainer &project) << project.fonts << project.timeLines << project.objects - << project.rooms; + << project.rooms + << project.includedFiles; return ds; } @@ -434,6 +449,7 @@ QDataStream &operator>>(QDataStream &ds, ProjectContainer &project) >> project.fonts >> project.timeLines >> project.objects - >> project.rooms; + >> project.rooms + >> project.includedFiles; return ds; } diff --git a/src/projectserialization.h b/src/projectserialization.h index 9e20c22..382fdbc 100644 --- a/src/projectserialization.h +++ b/src/projectserialization.h @@ -44,5 +44,7 @@ QDataStream &operator<<(QDataStream &ds, const Room::Object &object); QDataStream &operator>>(QDataStream &ds, Room::Object &object); QDataStream &operator<<(QDataStream &ds, const Room &room); QDataStream &operator>>(QDataStream &ds, Room &room); +QDataStream &operator<<(QDataStream &ds, const IncludedFile &includedFile); +QDataStream &operator>>(QDataStream &ds, IncludedFile &includedFile); QDataStream &operator<<(QDataStream &ds, const ProjectContainer &project);; QDataStream &operator>>(QDataStream &ds, ProjectContainer &project);;