From d29a6e9ce478a0a5156ee72c2f80b5ddf65c84f1 Mon Sep 17 00:00:00 2001 From: T1ti <40864460+T1ti@users.noreply.github.com> Date: Wed, 11 Sep 2024 05:38:07 +0200 Subject: [PATCH] change list widgets selection signals to trigger on selection rather than click, to add support for keyboard browsing --- src/noggit/rendering/Primitives.cpp | 2 +- src/noggit/rendering/Primitives.hpp | 2 +- src/noggit/tools/LightTool.cpp | 2 +- src/noggit/ui/GroundEffectsTool.cpp | 6 +-- src/noggit/ui/ObjectEditor.cpp | 2 +- src/noggit/ui/object_palette.cpp | 15 +++++--- src/noggit/ui/texture_palette_small.cpp | 11 ++++-- .../EditorWindows/SoundEntryPickerWindow.cpp | 30 +++++++++------ .../ZoneIntroMusicPickerWindow.cpp | 38 +++++++++++-------- .../EditorWindows/ZoneMusicPickerWindow.cpp | 18 ++++++--- .../windows/SoundPlayer/SoundEntryPlayer.cpp | 12 ++++-- .../ui/windows/noggitWindow/NoggitWindow.cpp | 15 ++++++-- 12 files changed, 94 insertions(+), 59 deletions(-) diff --git a/src/noggit/rendering/Primitives.cpp b/src/noggit/rendering/Primitives.cpp index d9831113..0f89ae71 100755 --- a/src/noggit/rendering/Primitives.cpp +++ b/src/noggit/rendering/Primitives.cpp @@ -513,7 +513,7 @@ void Square::setup_buffers() } void Line::draw(glm::mat4x4 const& mvp - , std::vector const points + , std::vector const& points , glm::vec4 const& color , bool spline ) diff --git a/src/noggit/rendering/Primitives.hpp b/src/noggit/rendering/Primitives.hpp index b9b96c2a..f57a8c76 100755 --- a/src/noggit/rendering/Primitives.hpp +++ b/src/noggit/rendering/Primitives.hpp @@ -158,7 +158,7 @@ namespace Noggit::Rendering::Primitives { public: void initSpline(); - void draw(glm::mat4x4 const& mvp, std::vector const points, glm::vec4 const& color, bool spline); + void draw(glm::mat4x4 const& mvp, std::vector const& points, glm::vec4 const& color, bool spline); void unload(); private: diff --git a/src/noggit/tools/LightTool.cpp b/src/noggit/tools/LightTool.cpp index 9a8f44bc..05866c7e 100644 --- a/src/noggit/tools/LightTool.cpp +++ b/src/noggit/tools/LightTool.cpp @@ -22,7 +22,7 @@ namespace Noggit char const* LightTool::name() const { - return "Light Editor"; + return "Lightning Editor"; } editing_mode LightTool::editingMode() const diff --git a/src/noggit/ui/GroundEffectsTool.cpp b/src/noggit/ui/GroundEffectsTool.cpp index 0a4f4414..84bd958f 100644 --- a/src/noggit/ui/GroundEffectsTool.cpp +++ b/src/noggit/ui/GroundEffectsTool.cpp @@ -344,10 +344,8 @@ namespace Noggit pal.setColor(_cbbox_effect_sets->backgroundRole(), QColor::fromRgbF(_effects_colors[index].r, _effects_colors[index].g, _effects_colors[index].b)); _cbbox_effect_sets->setPalette(pal); }); - - QObject::connect(_effect_sets_list, &QListWidget::itemClicked - , [this](QListWidgetItem* item) - { + QObject::connect(_effect_sets_list, &QListWidget::itemSelectionChanged, [this]() + { int index = _effect_sets_list->currentIndex().row(); auto effect = getSelectedGroundEffect(); diff --git a/src/noggit/ui/ObjectEditor.cpp b/src/noggit/ui/ObjectEditor.cpp index 1f88c69a..8388ab28 100755 --- a/src/noggit/ui/ObjectEditor.cpp +++ b/src/noggit/ui/ObjectEditor.cpp @@ -305,7 +305,7 @@ namespace Noggit auto importBox_content = new QWidget(this); auto importBox_content_layout = new QGridLayout (importBox_content); importBox_content_layout->setAlignment(Qt::AlignTop); - importBox->setExpanderTitle("Import"); + importBox->setExpanderTitle("Import (old, use Asset Browser)"); importBox->setExpanded(_settings->value ("object_editor/import_box", false).toBool()); QPushButton *toTxt = new QPushButton("To Text File", this); diff --git a/src/noggit/ui/object_palette.cpp b/src/noggit/ui/object_palette.cpp index 3179059b..729a2413 100755 --- a/src/noggit/ui/object_palette.cpp +++ b/src/noggit/ui/object_palette.cpp @@ -36,6 +36,7 @@ namespace Noggit setFlow(QListWidget::LeftToRight); setWrapping(true); setSelectionMode(QAbstractItemView::SingleSelection); + setSelectionBehavior(QAbstractItemView::SelectItems); setAcceptDrops(false); setMovement(Movement::Static); setResizeMode(QListView::Adjust); @@ -87,7 +88,6 @@ namespace Noggit _object_paths = std::unordered_set(); _object_list = new ObjectList(this); - layout->addWidget(_object_list, 0, 0); _preview_renderer = new Noggit::Ui::Tools::PreviewRenderer(_object_list->iconSize().width(), @@ -100,13 +100,16 @@ namespace Noggit _preview_renderer->setModelOffscreen("world/wmo/azeroth/buildings/human_farm/farm.wmo"); _preview_renderer->renderToPixmap(); - connect(_object_list, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) - { - emit selected(item->toolTip().toStdString()); - } + QObject::connect(_object_list, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _object_list->currentItem(); + if (item) + { + emit selected(item->toolTip().toStdString()); + } + } ); - QVBoxLayout* button_layout = new QVBoxLayout(this); _add_button = new QPushButton(this); diff --git a/src/noggit/ui/texture_palette_small.cpp b/src/noggit/ui/texture_palette_small.cpp index 3bef69f3..3f409102 100755 --- a/src/noggit/ui/texture_palette_small.cpp +++ b/src/noggit/ui/texture_palette_small.cpp @@ -35,6 +35,7 @@ namespace Noggit setFlow(QListWidget::LeftToRight); setWrapping(false); setSelectionMode(QAbstractItemView::SingleSelection); + setSelectionBehavior(QAbstractItemView::SelectItems); setAcceptDrops(false); setMovement(Movement::Static); setResizeMode(QListView::Adjust); @@ -92,11 +93,13 @@ namespace Noggit layout->addWidget(_texture_list, 0, 0); - connect(_texture_list, &QListWidget::itemClicked - , this - , [=](QListWidgetItem* item) + QObject::connect(_texture_list, &QListWidget::itemSelectionChanged, [this]() { - emit selected("tileset/" + item->toolTip().toStdString()); + QListWidgetItem* const item = _texture_list->currentItem(); + if (item) + { + emit selected("tileset/" + item->toolTip().toStdString()); + } } ); diff --git a/src/noggit/ui/windows/EditorWindows/SoundEntryPickerWindow.cpp b/src/noggit/ui/windows/EditorWindows/SoundEntryPickerWindow.cpp index 551706d8..9c35f66a 100644 --- a/src/noggit/ui/windows/EditorWindows/SoundEntryPickerWindow.cpp +++ b/src/noggit/ui/windows/EditorWindows/SoundEntryPickerWindow.cpp @@ -62,7 +62,7 @@ namespace Noggit _picker_listview = new QListWidget(this); _picker_listview->setFixedSize(280, 460); _picker_listview->setSelectionMode(QListWidget::SingleSelection); - // _picker_listview->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); + _picker_listview->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectItems); list_layout->addWidget(_picker_listview); if (sound_type_filter == -1) @@ -209,9 +209,15 @@ namespace Noggit } }); - connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { - select_entry(item->data(1).toInt()); - }); + QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _picker_listview->currentItem(); + if (item) + { + select_entry(item->data(Qt::UserRole).toInt()); + } + } + ); connect(select_entry_btn, &QPushButton::clicked, [=]() { // auto selection = _picker_listview->selectedItems(); @@ -219,20 +225,20 @@ namespace Noggit if (selected_item == nullptr) return; - button->setProperty("id", selected_item->data(1).toInt()); - button->setText(selected_item->text()); - this->close(); - }); + button->setProperty("id", selected_item->data(Qt::UserRole).toInt()); + button->setText(selected_item->text()); + this->close(); + }); connect(select_entry_none_btn, &QPushButton::clicked, [=]() { button->setText("-NONE-"); button->setProperty("id", 0); this->close(); - }); + }); connect(save_music_entry_btn, &QPushButton::clicked, [=]() { save_entry(_entry_id); - }); + }); connect(add_file_button, &QPushButton::clicked, [=]() { @@ -265,7 +271,7 @@ namespace Noggit // add new tree item auto item = new QListWidgetItem(); - item->setData(1, new_id); + item->setData(Qt::UserRole, new_id); std::stringstream ss; _picker_listview->addItem(item); @@ -286,7 +292,7 @@ namespace Noggit continue; auto item = new QListWidgetItem(); - item->setData(1, i->getInt(SoundEntriesDB::ID)); + item->setData(Qt::UserRole, i->getInt(SoundEntriesDB::ID)); std::stringstream ss; ss << i->getInt(SoundEntriesDB::ID) << "-" << i->getString(SoundEntriesDB::Name); diff --git a/src/noggit/ui/windows/EditorWindows/ZoneIntroMusicPickerWindow.cpp b/src/noggit/ui/windows/EditorWindows/ZoneIntroMusicPickerWindow.cpp index fde15010..7026b8ee 100644 --- a/src/noggit/ui/windows/EditorWindows/ZoneIntroMusicPickerWindow.cpp +++ b/src/noggit/ui/windows/EditorWindows/ZoneIntroMusicPickerWindow.cpp @@ -121,24 +121,30 @@ namespace Noggit // unhide all } - // hide all items - for (int i = 0; i < _picker_listview->count(); i++) - { - auto item = _picker_listview->item(i); - item->setHidden(true); - } - // unhide matching items - auto matching_items = _picker_listview->findItems(obj, Qt::MatchContains); + // hide all items + for (int i = 0; i < _picker_listview->count(); i++) + { + auto item = _picker_listview->item(i); + item->setHidden(true); + } + // unhide matching items + auto matching_items = _picker_listview->findItems(obj, Qt::MatchContains); - for (auto item : matching_items) - { - item->setHidden(false); - } - }); + for (auto item : matching_items) + { + item->setHidden(false); + } + }); - connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { - select_entry(item->data(1).toInt()); - }); + QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _picker_listview->currentItem(); + if (item) + { + select_entry(item->data(Qt::UserRole).toInt()); + } + } + ); connect(select_entry_btn, &QPushButton::clicked, [=]() { // auto selection = _picker_listview->selectedItems(); diff --git a/src/noggit/ui/windows/EditorWindows/ZoneMusicPickerWindow.cpp b/src/noggit/ui/windows/EditorWindows/ZoneMusicPickerWindow.cpp index fe26d1fb..09b0df46 100644 --- a/src/noggit/ui/windows/EditorWindows/ZoneMusicPickerWindow.cpp +++ b/src/noggit/ui/windows/EditorWindows/ZoneMusicPickerWindow.cpp @@ -58,7 +58,7 @@ namespace Noggit for (DBCFile::Iterator i = gZoneMusicDB.begin(); i != gZoneMusicDB.end(); ++i) { auto item = new QListWidgetItem(); - item->setData(1, i->getInt(ZoneMusicDB::ID)); + item->setData(Qt::UserRole, i->getInt(ZoneMusicDB::ID)); std::stringstream ss; ss << i->getInt(ZoneMusicDB::ID) << "-" << i->getString(ZoneMusicDB::Name); @@ -180,9 +180,15 @@ namespace Noggit } }); - connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { - select_entry(item->data(1).toInt()); - }); + QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _picker_listview->currentItem(); + if (item) + { + select_entry(item->data(Qt::UserRole).toInt()); + } + } + ); connect(select_entry_btn, &QPushButton::clicked, [=]() { // auto selection = _picker_listview->selectedItems(); @@ -190,7 +196,7 @@ namespace Noggit if (selected_item == nullptr) return; - button->setProperty("id", selected_item->data(1).toInt()); + button->setProperty("id", selected_item->data(Qt::UserRole).toInt()); button->setText(selected_item->text()); this->close(); }); @@ -236,7 +242,7 @@ namespace Noggit // add new tree item auto item = new QListWidgetItem(); - item->setData(1, new_id); + item->setData(Qt::UserRole, new_id); std::stringstream ss; _picker_listview->addItem(item); diff --git a/src/noggit/ui/windows/SoundPlayer/SoundEntryPlayer.cpp b/src/noggit/ui/windows/SoundPlayer/SoundEntryPlayer.cpp index 37bae57f..f71d57cb 100644 --- a/src/noggit/ui/windows/SoundPlayer/SoundEntryPlayer.cpp +++ b/src/noggit/ui/windows/SoundPlayer/SoundEntryPlayer.cpp @@ -92,9 +92,15 @@ namespace Noggit _files_listview->setSelectionMode(QListWidget::SingleSelection); layout->addWidget(_files_listview); - connect(_files_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { - play_selected_sound(); - }); + QObject::connect(_files_listview, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _files_listview->currentItem(); + if (item) + { + play_selected_sound(); + } + } + ); // connect volume connect(_volume_slider, &QSlider::valueChanged, [&](int v) { diff --git a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp index 33781434..0d812bff 100755 --- a/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp +++ b/src/noggit/ui/windows/noggitWindow/NoggitWindow.cpp @@ -307,10 +307,17 @@ namespace Noggit::Ui::Windows layout->setAlignment(Qt::AlignLeft); QListWidget* bookmarks_table(new QListWidget(widget)); _continents_table = new QListWidget(widget); - QObject::connect(_continents_table, &QListWidget::itemClicked, [this](QListWidgetItem* item) - { - loadMap(item->data(Qt::UserRole).toInt()); - } + _continents_table->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); + _continents_table->setSelectionBehavior(QAbstractItemView::SelectItems); + + QObject::connect(_continents_table, &QListWidget::itemSelectionChanged, [this]() + { + QListWidgetItem* const item = _continents_table->currentItem(); + if (item) + { + loadMap(item->data(Qt::UserRole).toInt()); + } + } );