diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui
index 5037faef..50968b41 100644
--- a/forms/mainwindow.ui
+++ b/forms/mainwindow.ui
@@ -1340,6 +1340,16 @@
3
+ -
+
+
+ There are no events on the current map.
+
+
+ Qt::AlignCenter
+
+
+
-
@@ -1457,13 +1467,13 @@
-
- 4
+ 0
Objects
-
+
0
@@ -1476,41 +1486,20 @@
0
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustIgnored
-
+
-
+
true
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
+
0
0
432
- 584
+ 565
-
-
- 0
- 0
-
-
@@ -1520,7 +1509,7 @@
Warps
-
+
0
@@ -1533,41 +1522,20 @@
0
-
- 0
-
- -
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustIgnored
-
+
-
+
true
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
+
0
0
432
- 584
+ 565
-
-
- 0
- 0
-
-
@@ -1577,7 +1545,7 @@
Triggers
-
+
0
@@ -1590,41 +1558,20 @@
0
-
- 0
-
- -
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustIgnored
-
+
-
+
true
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
+
0
0
432
- 584
+ 565
-
-
- 0
- 0
-
-
@@ -1634,7 +1581,7 @@
BGs
-
+
0
@@ -1647,40 +1594,55 @@
0
-
- 0
-
- -
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustIgnored
-
+
-
+
true
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
+
0
0
432
- 584
+ 565
-
-
- 0
- 0
-
+
+
+
+
+
+
+
+ Healspots
+
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+
+ 0
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 432
+ 565
+
@@ -1691,7 +1653,7 @@
Multiple
-
+
0
@@ -1704,27 +1666,12 @@
0
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
- QAbstractScrollArea::AdjustIgnored
-
+
-
+
true
-
- Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
-
+
0
@@ -1733,12 +1680,6 @@
565
-
-
- 0
- 0
-
-
@@ -1746,16 +1687,6 @@
- -
-
-
- There are no events on the current map.
-
-
- Qt::AlignCenter
-
-
-
@@ -2646,6 +2577,11 @@
+
+ NoScrollComboBox
+ QComboBox
+
+
GraphicsView
QGraphicsView
@@ -2656,11 +2592,6 @@
QToolButton
-
- NoScrollComboBox
- QComboBox
-
-
diff --git a/include/mainwindow.h b/include/mainwindow.h
index 62582552..3e998bb7 100644
--- a/include/mainwindow.h
+++ b/include/mainwindow.h
@@ -78,6 +78,7 @@ private slots:
void addNewEvent(QString);
void updateSelectedObjects();
+ void updateObjects();
void on_toolButton_Paint_clicked();
@@ -133,6 +134,8 @@ private slots:
void on_lineEdit_filterBox_textChanged(const QString &arg1);
+ void eventTabChanged(int index);
+
private:
Ui::MainWindow *ui;
TilesetEditor *tilesetEditor = nullptr;
@@ -144,6 +147,21 @@ private:
QIcon* mapIcon;
QIcon* mapEditedIcon;
+ QWidget *eventTabObjectWidget;
+ QWidget *eventTabWarpWidget;
+ QWidget *eventTabTriggerWidget;
+ QWidget *eventTabBGWidget;
+ QWidget *eventTabHealspotWidget;
+ QWidget *eventTabMultipleWidget;
+
+ DraggablePixmapItem *selectedObject;
+ DraggablePixmapItem *selectedWarp;
+ DraggablePixmapItem *selectedTrigger;
+ DraggablePixmapItem *selectedBG;
+ DraggablePixmapItem *selectedHealspot;
+
+ bool isProgrammaticEventTabChange;
+
enum MapSortOrder {
Group = 0,
Name = 1,
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index d203ae7b..799e5bcf 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -28,7 +28,13 @@
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
- ui(new Ui::MainWindow)
+ ui(new Ui::MainWindow),
+ selectedObject(nullptr),
+ selectedWarp(nullptr),
+ selectedTrigger(nullptr),
+ selectedBG(nullptr),
+ selectedHealspot(nullptr),
+ isProgrammaticEventTabChange(false)
{
QCoreApplication::setOrganizationName("pret");
QCoreApplication::setApplicationName("porymap");
@@ -67,11 +73,12 @@ void MainWindow::initCustomUI() {
void MainWindow::initExtraSignals() {
connect(ui->newEventToolButton, SIGNAL(newEventAdded(QString)), this, SLOT(addNewEvent(QString)));
+ connect(ui->tabWidget_EventType, &QTabWidget::currentChanged, this, &MainWindow::eventTabChanged);
}
void MainWindow::initEditor() {
this->editor = new Editor(ui);
- connect(this->editor, SIGNAL(objectsChanged()), this, SLOT(updateSelectedObjects()));
+ connect(this->editor, SIGNAL(objectsChanged()), this, SLOT(updateObjects()));
connect(this->editor, SIGNAL(selectedObjectsChanged()), this, SLOT(updateSelectedObjects()));
connect(this->editor, SIGNAL(loadMapRequested(QString, QString)), this, SLOT(onLoadMapRequested(QString, QString)));
connect(this->editor, SIGNAL(tilesetChanged(QString)), this, SLOT(onTilesetChanged(QString)));
@@ -97,6 +104,14 @@ void MainWindow::initMiscHeapObjects() {
mapListProxyModel->setSourceModel(mapListModel);
ui->mapList->setModel(mapListProxyModel);
+
+ eventTabObjectWidget = ui->tab_Objects;
+ eventTabWarpWidget = ui->tab_Warps;
+ eventTabTriggerWidget = ui->tab_Triggers;
+ eventTabBGWidget = ui->tab_BGs;
+ eventTabHealspotWidget = ui->tab_Healspots;
+ eventTabMultipleWidget = ui->tab_Multiple;
+ ui->tabWidget_EventType->clear();
}
void MainWindow::initMapSortOrder() {
@@ -874,10 +889,73 @@ void MainWindow::addNewEvent(QString event_type)
if (object) {
editor->selectMapEvent(object, false);
}
- updateSelectedObjects();
+ updateObjects();
}
}
+void MainWindow::updateObjects() {
+ ui->tabWidget_EventType->clear();
+ selectedObject = nullptr;
+ selectedWarp = nullptr;
+ selectedTrigger = nullptr;
+ selectedBG = nullptr;
+ selectedHealspot = nullptr;
+
+ bool hasObjects = false;
+ bool hasWarps = false;
+ bool hasTriggers = false;
+ bool hasBGs = false;
+ bool hasHealspots = false;
+
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+
+ if (event_type == EventType::Object) {
+ hasObjects = true;
+ }
+ else if (event_type == EventType::Warp) {
+ hasWarps = true;
+ }
+ else if (event_type == EventType::CoordScript || event_type == EventType::CoordWeather) {
+ hasTriggers = true;
+ }
+ else if (event_type == EventType::Sign || event_type == EventType::HiddenItem || event_type == EventType::SecretBase) {
+ hasBGs = true;
+ }
+ else if (event_type == EventType::HealLocation) {
+ hasHealspots = true;
+ }
+ }
+
+ if (hasObjects)
+ {
+ ui->tabWidget_EventType->addTab(eventTabObjectWidget, "Objects");
+ }
+
+ if (hasWarps)
+ {
+ ui->tabWidget_EventType->addTab(eventTabWarpWidget, "Warps");
+ }
+
+ if (hasTriggers)
+ {
+ ui->tabWidget_EventType->addTab(eventTabTriggerWidget, "Triggers");
+ }
+
+ if (hasBGs)
+ {
+ ui->tabWidget_EventType->addTab(eventTabBGWidget, "BGs");
+ }
+
+ if (hasHealspots)
+ {
+ ui->tabWidget_EventType->addTab(eventTabHealspotWidget, "Healspots");
+ }
+
+ updateSelectedObjects();
+}
+
// Should probably just pass layout and let the editor work it out
void MainWindow::updateSelectedObjects() {
QList *all_events = editor->getObjects();
@@ -1116,33 +1194,37 @@ void MainWindow::updateSelectedObjects() {
//int scroll = ui->scrollArea_4->verticalScrollBar()->value();
- QWidget *target = ui->eventsMultiple_ScrollAreaContents;
+ QWidget *target = ui->scrollAreaWidgetContents_Multiple;
if (events->length() == 1)
{
QString event_type = (*events)[0]->event->get("event_type");
+ isProgrammaticEventTabChange = true;
+
if (event_type == EventType::Object) {
- target = ui->eventsObjects_ScrollAreaContents;
+ target = ui->scrollAreaWidgetContents_Objects;
ui->tabWidget_EventType->setCurrentWidget(ui->tab_Objects);
}
else if (event_type == EventType::Warp) {
- target = ui->eventsWarps_ScrollAreaContents;
+ target = ui->scrollAreaWidgetContents_Warps;
ui->tabWidget_EventType->setCurrentWidget(ui->tab_Warps);
}
else if (event_type == EventType::CoordScript || event_type == EventType::CoordWeather) {
- target = ui->eventsTriggers_ScrollAreaContents;
+ target = ui->scrollAreaWidgetContents_Triggers;
ui->tabWidget_EventType->setCurrentWidget(ui->tab_Triggers);
}
else if (event_type == EventType::Sign || event_type == EventType::HiddenItem || event_type == EventType::SecretBase) {
- target = ui->eventsBGs_ScrollAreaContents;
+ target = ui->scrollAreaWidgetContents_BGs;
ui->tabWidget_EventType->setCurrentWidget(ui->tab_BGs);
}
+ else if (event_type == EventType::HealLocation) {
+ target = ui->scrollAreaWidgetContents_Healspots;
+ ui->tabWidget_EventType->setCurrentWidget(ui->tab_Healspots);
+ }
ui->tabWidget_EventType->removeTab(ui->tabWidget_EventType->indexOf(ui->tab_Multiple));
- if (target->children().length()) {
- qDeleteAll(target->children());
- }
+ isProgrammaticEventTabChange = false;
}
else if (events->length() > 1)
{
@@ -1181,6 +1263,106 @@ void MainWindow::updateSelectedObjects() {
}
}
+void MainWindow::eventTabChanged(int index)
+{
+ if (!isProgrammaticEventTabChange && editor->map != nullptr)
+ {
+ QWidget *tab = ui->tabWidget_EventType->widget(index);
+ DraggablePixmapItem *selectedEvent = nullptr;
+
+ if (tab == eventTabObjectWidget)
+ {
+ if (selectedObject == nullptr)
+ {
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+ if (event_type == EventType::Object)
+ {
+ selectedObject = item;
+ break;
+ }
+ }
+ }
+
+ selectedEvent = selectedObject;
+ }
+ else if (tab == eventTabWarpWidget)
+ {
+ if (selectedWarp == nullptr)
+ {
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+ if (event_type == EventType::Warp)
+ {
+ selectedWarp = item;
+ break;
+ }
+ }
+ }
+
+ selectedEvent = selectedWarp;
+ }
+ else if (tab == eventTabTriggerWidget)
+ {
+ if (selectedTrigger == nullptr)
+ {
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+ if (event_type == EventType::CoordScript || event_type == EventType::CoordWeather)
+ {
+ selectedTrigger = item;
+ break;
+ }
+ }
+ }
+
+ selectedEvent = selectedTrigger;
+ }
+ else if (tab == eventTabBGWidget)
+ {
+ if (selectedBG == nullptr)
+ {
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+ if (event_type == EventType::Sign || event_type == EventType::HiddenItem || event_type == EventType::SecretBase)
+ {
+ selectedBG = item;
+ break;
+ }
+ }
+ }
+
+ selectedEvent = selectedBG;
+ }
+ else if (tab == eventTabHealspotWidget)
+ {
+ if (selectedHealspot == nullptr)
+ {
+ for (DraggablePixmapItem *item : *editor->getObjects())
+ {
+ QString event_type = item->event->get("event_type");
+ if (event_type == EventType::HealLocation)
+ {
+ selectedHealspot = item;
+ break;
+ }
+ }
+ }
+
+ selectedEvent = selectedHealspot;
+ }
+
+ if (selectedObject != nullptr)
+ editor->selectMapEvent(selectedEvent);
+ }
+
+ isProgrammaticEventTabChange = false;
+}
+
void MainWindow::on_toolButton_deleteObject_clicked()
{
if (editor && editor->selected_events) {
@@ -1197,7 +1379,7 @@ void MainWindow::on_toolButton_deleteObject_clicked()
qDebug() << "Cannot delete event of type " << item->event->get("event_type");
}
}
- updateSelectedObjects();
+ updateObjects();
}
}
}