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 +
noscrollcombobox.h
+
GraphicsView QGraphicsView @@ -2656,11 +2592,6 @@ QToolButton
neweventtoolbutton.h
- - NoScrollComboBox - QComboBox -
noscrollcombobox.h
-
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(); } } }