From dcd7e4d86fea821a6b8d450555661d731325a3bb Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Sun, 30 Jun 2024 20:54:18 +0200 Subject: [PATCH] new asset browser filter UI settings --- src/noggit/DBC.cpp | 1 + src/noggit/MapView.cpp | 2 +- src/noggit/ui/ObjectEditor.cpp | 4 + .../ui/tools/AssetBrowser/Ui/AssetBrowser.cpp | 80 ++++++++++++-- .../ui/tools/AssetBrowser/Ui/AssetBrowser.hpp | 21 +++- .../ui/tools/AssetBrowser/Ui/AssetBrowser.ui | 101 +++++++++++++++++- .../widgets/ProjectListItem.cpp | 1 + 7 files changed, 194 insertions(+), 16 deletions(-) diff --git a/src/noggit/DBC.cpp b/src/noggit/DBC.cpp index 47fbdc15..6e1e961f 100755 --- a/src/noggit/DBC.cpp +++ b/src/noggit/DBC.cpp @@ -5,6 +5,7 @@ #include #include #include +#include AreaDB gAreaDB; MapDB gMapDB; diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 7e8797f5..a10ea288 100755 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -2328,7 +2328,7 @@ void MapView::setupHelpMenu() { ShellExecute ( nullptr , "open" - , "https://gitlab.com/prophecy-rp/noggit-red/-/tree/noggit-shadowlands?ref_type=heads" + , "https://gitlab.com/prophecy-rp/noggit-red/" , nullptr , nullptr , SW_SHOWNORMAL diff --git a/src/noggit/ui/ObjectEditor.cpp b/src/noggit/ui/ObjectEditor.cpp index a7471e6b..148247dc 100755 --- a/src/noggit/ui/ObjectEditor.cpp +++ b/src/noggit/ui/ObjectEditor.cpp @@ -16,6 +16,7 @@ #include #include "noggit/ActionManager.hpp" #include "noggit/Action.hpp" +#include #include #include @@ -100,8 +101,10 @@ namespace Noggit layout->addWidget(drag_selection_depth_group);*/ QPushButton* asset_browser_btn = new QPushButton("Asset browser", this); + asset_browser_btn->setIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::file)); layout->addWidget(asset_browser_btn); QPushButton* object_palette_btn = new QPushButton("Object palette", this); + object_palette_btn->setIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::palette)); layout->addWidget(object_palette_btn); _wmo_group = new QGroupBox("Selected WMO Options"); @@ -115,6 +118,7 @@ namespace Noggit wmo_layout->addRow("Name Set:", _nameSetSelector); auto clipboard_box = new QGroupBox("Clipboard"); + // clipboard_box->setWindowIcon(Noggit::Ui::FontAwesomeIcon(Noggit::Ui::FontAwesome::clipboard)); auto clipboard_layout = new QVBoxLayout(clipboard_box); _filename = new QLabel(this); diff --git a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.cpp b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.cpp index dcb182b3..92d1c903 100755 --- a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.cpp +++ b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.cpp @@ -35,6 +35,37 @@ AssetBrowserWidget::AssetBrowserWidget(MapView* map_view, QWidget *parent) setWindowFlags(windowFlags() | Qt::Tool | Qt::WindowStaysOnTopHint); + ui->checkBox_M2s->setChecked(true); + ui->checkBox_WMOs->setChecked(true); + connect(ui->checkBox_M2s, &QCheckBox::stateChanged, [&](int state) + { + updateModelData(); + }); + + connect(ui->checkBox_WMOs, &QCheckBox::stateChanged, [&](int state) + { + updateModelData(); + }); + + ui->comboBox_BrowseMode->addItems(brosweModeLabels.keys()); + + // set combobox browse mode to World + for (auto it = brosweModeLabels.constBegin(); it != brosweModeLabels.constEnd(); ++it) { + if (it.value() == asset_browse_mode::world) { + ui->comboBox_BrowseMode->setCurrentText(it.key()); + break; + } + } + + connect(ui->comboBox_BrowseMode, qOverload(&QComboBox::currentIndexChanged) + , [this](int index) + { + asset_browse_mode mode = brosweModeLabels[ui->comboBox_BrowseMode->currentText()]; + + set_browse_mode(mode); + } + ); + _model = new QStandardItemModel(this); // _sort_model = new QSortFilterProxyModel(this); _sort_model = new NoggitExpendableFilterProxyModel; @@ -274,8 +305,14 @@ void AssetBrowserWidget::setupConnectsCommon() [this](bool state) {ui->viewport->_draw_grid.set(state);}); } -bool AssetBrowserWidget::validateBrowseMode(QString wow_file_path) +bool AssetBrowserWidget::validateBrowseMode(const QString& wow_file_path) { + // if (_browse_mode == asset_browse_mode::detail_doodads) + // { + // _sort_model->setFilterFixedString("world/nodxt/detail"); + // } + + // TODO : do it in sort model instead? switch (_browse_mode) { @@ -391,8 +428,9 @@ void AssetBrowserWidget::updateModelData() QString q_path = QString(filename.c_str()); - if (!((q_path.endsWith(".wmo") && !_wmo_group_and_lod_regex.match(q_path).hasMatch()) - || q_path.endsWith(".m2"))) + if (!( (ui->checkBox_WMOs->isChecked() && q_path.endsWith(".wmo") && !_wmo_group_and_lod_regex.match(q_path).hasMatch()) + || (ui->checkBox_M2s->isChecked() && q_path.endsWith(".m2")) + )) continue; if (!validateBrowseMode(q_path)) @@ -409,10 +447,21 @@ void AssetBrowserWidget::updateModelData() _sort_model->setSortRole(Qt::UserRole); _sort_model->sort(0, Qt::AscendingOrder); - // TODO : set default layout for the modes + // TODO : set default layout(base folder) for the modes if (_browse_mode != asset_browse_mode::ALL) { // expend base directories + // ui->listfileTree->expand(); + } + + // those modes don't have subfolders, can auto expend without it becoming a mess + if (_browse_mode == asset_browse_mode::detail_doodads + || _browse_mode == asset_browse_mode::spells + || _browse_mode == asset_browse_mode::skybox + || _browse_mode == asset_browse_mode::cameras + || _browse_mode == asset_browse_mode::particles) + { + ui->listfileTree->expandAll(); } } @@ -423,17 +472,28 @@ AssetBrowserWidget::~AssetBrowserWidget() } void AssetBrowserWidget::set_browse_mode(asset_browse_mode browse_mode) -{ +{ if (_browse_mode == browse_mode) return; + { + QSignalBlocker const combobox_blocker(ui->comboBox_BrowseMode); + + QString key_text = ""; + + for (auto it = brosweModeLabels.constBegin(); it != brosweModeLabels.constEnd(); ++it) { + if (it.value() == browse_mode) { + key_text = it.key(); + break; + } + } + // if (key_text.isEmpty()) + + ui->comboBox_BrowseMode->setCurrentText(key_text); + } + _browse_mode = browse_mode; updateModelData(); - // if (_browse_mode == asset_browse_mode::detail_doodads) - // { - // _sort_model->setFilterFixedString("world/nodxt/detail"); - // } - } void AssetBrowserWidget::keyPressEvent(QKeyEvent *event) diff --git a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.hpp b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.hpp index 11158125..6332eebf 100755 --- a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.hpp +++ b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.hpp @@ -11,6 +11,7 @@ #include #include #include +#include class MapView; @@ -54,7 +55,6 @@ private: } }; - namespace Noggit::Ui::Tools::AssetBrowser { enum class asset_browse_mode @@ -72,11 +72,12 @@ namespace Noggit::Ui::Tools::AssetBrowser }; } - namespace Noggit { namespace Ui::Tools::AssetBrowser::Ui { + + class AssetBrowserWidget : public QMainWindow { Q_OBJECT @@ -103,7 +104,21 @@ namespace Noggit void updateModelData(); void recurseDirectory(Model::TreeManager& tree_mgr, const QString& s_dir, const QString& project_dir); - bool validateBrowseMode(QString wow_file_path); + inline bool validateBrowseMode(const QString& wow_file_path); + + // commented objects that shouldn't be placed on the map, still accessible through Show all + const QMap brosweModeLabels = { + { "World Objects", asset_browse_mode::world }, + // { "Detail Doodads", asset_browse_mode::detail_doodads }, + // { "Skybox", asset_browse_mode::skybox }, + // { "Creatures", asset_browse_mode::creatures }, + // { "Characters", asset_browse_mode::characters }, + // {"Particles", asset_browse_mode::particles }, + // {"Cameras", asset_browse_mode::cameras }, + { "Items", asset_browse_mode::items }, + { "Spells", asset_browse_mode::spells }, + { "Show All", asset_browse_mode::ALL }, + }; protected: void keyPressEvent(QKeyEvent* event) override; diff --git a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.ui b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.ui index 7d8db540..870bfaf4 100755 --- a/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.ui +++ b/src/noggit/ui/tools/AssetBrowser/Ui/AssetBrowser.ui @@ -7,7 +7,7 @@ 0 0 960 - 324 + 400 @@ -110,7 +110,7 @@ 0 - + 0 @@ -231,6 +231,103 @@ + + + + + + Browse Mode + + + + + + + + 0 + 0 + + + + + 160 + 0 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + false + + + + + + + 0 + 0 + + + + WMOs (*.wmo) + + + true + + + false + + + + + + + + 0 + 0 + + + + Models (*.m2) + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + diff --git a/src/noggit/ui/windows/projectSelection/widgets/ProjectListItem.cpp b/src/noggit/ui/windows/projectSelection/widgets/ProjectListItem.cpp index 4ef68f42..5c8eb805 100755 --- a/src/noggit/ui/windows/projectSelection/widgets/ProjectListItem.cpp +++ b/src/noggit/ui/windows/projectSelection/widgets/ProjectListItem.cpp @@ -1,4 +1,5 @@ #include +#include namespace Noggit::Ui::Widget {