change list widgets selection signals to trigger on selection rather than click, to add support for keyboard browsing

This commit is contained in:
T1ti
2024-09-11 05:38:07 +02:00
parent 144e519bb0
commit d29a6e9ce4
12 changed files with 94 additions and 59 deletions

View File

@@ -513,7 +513,7 @@ void Square::setup_buffers()
} }
void Line::draw(glm::mat4x4 const& mvp void Line::draw(glm::mat4x4 const& mvp
, std::vector<glm::vec3> const points , std::vector<glm::vec3> const& points
, glm::vec4 const& color , glm::vec4 const& color
, bool spline , bool spline
) )

View File

@@ -158,7 +158,7 @@ namespace Noggit::Rendering::Primitives
{ {
public: public:
void initSpline(); void initSpline();
void draw(glm::mat4x4 const& mvp, std::vector<glm::vec3> const points, glm::vec4 const& color, bool spline); void draw(glm::mat4x4 const& mvp, std::vector<glm::vec3> const& points, glm::vec4 const& color, bool spline);
void unload(); void unload();
private: private:

View File

@@ -22,7 +22,7 @@ namespace Noggit
char const* LightTool::name() const char const* LightTool::name() const
{ {
return "Light Editor"; return "Lightning Editor";
} }
editing_mode LightTool::editingMode() const editing_mode LightTool::editingMode() const

View File

@@ -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)); 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); _cbbox_effect_sets->setPalette(pal);
}); });
QObject::connect(_effect_sets_list, &QListWidget::itemSelectionChanged, [this]()
QObject::connect(_effect_sets_list, &QListWidget::itemClicked {
, [this](QListWidgetItem* item)
{
int index = _effect_sets_list->currentIndex().row(); int index = _effect_sets_list->currentIndex().row();
auto effect = getSelectedGroundEffect(); auto effect = getSelectedGroundEffect();

View File

@@ -305,7 +305,7 @@ namespace Noggit
auto importBox_content = new QWidget(this); auto importBox_content = new QWidget(this);
auto importBox_content_layout = new QGridLayout (importBox_content); auto importBox_content_layout = new QGridLayout (importBox_content);
importBox_content_layout->setAlignment(Qt::AlignTop); 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()); importBox->setExpanded(_settings->value ("object_editor/import_box", false).toBool());
QPushButton *toTxt = new QPushButton("To Text File", this); QPushButton *toTxt = new QPushButton("To Text File", this);

View File

@@ -36,6 +36,7 @@ namespace Noggit
setFlow(QListWidget::LeftToRight); setFlow(QListWidget::LeftToRight);
setWrapping(true); setWrapping(true);
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);
setSelectionBehavior(QAbstractItemView::SelectItems);
setAcceptDrops(false); setAcceptDrops(false);
setMovement(Movement::Static); setMovement(Movement::Static);
setResizeMode(QListView::Adjust); setResizeMode(QListView::Adjust);
@@ -87,7 +88,6 @@ namespace Noggit
_object_paths = std::unordered_set<std::string>(); _object_paths = std::unordered_set<std::string>();
_object_list = new ObjectList(this); _object_list = new ObjectList(this);
layout->addWidget(_object_list, 0, 0); layout->addWidget(_object_list, 0, 0);
_preview_renderer = new Noggit::Ui::Tools::PreviewRenderer(_object_list->iconSize().width(), _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->setModelOffscreen("world/wmo/azeroth/buildings/human_farm/farm.wmo");
_preview_renderer->renderToPixmap(); _preview_renderer->renderToPixmap();
connect(_object_list, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) QObject::connect(_object_list, &QListWidget::itemSelectionChanged, [this]()
{ {
emit selected(item->toolTip().toStdString()); QListWidgetItem* const item = _object_list->currentItem();
} if (item)
{
emit selected(item->toolTip().toStdString());
}
}
); );
QVBoxLayout* button_layout = new QVBoxLayout(this); QVBoxLayout* button_layout = new QVBoxLayout(this);
_add_button = new QPushButton(this); _add_button = new QPushButton(this);

View File

@@ -35,6 +35,7 @@ namespace Noggit
setFlow(QListWidget::LeftToRight); setFlow(QListWidget::LeftToRight);
setWrapping(false); setWrapping(false);
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);
setSelectionBehavior(QAbstractItemView::SelectItems);
setAcceptDrops(false); setAcceptDrops(false);
setMovement(Movement::Static); setMovement(Movement::Static);
setResizeMode(QListView::Adjust); setResizeMode(QListView::Adjust);
@@ -92,11 +93,13 @@ namespace Noggit
layout->addWidget(_texture_list, 0, 0); layout->addWidget(_texture_list, 0, 0);
connect(_texture_list, &QListWidget::itemClicked QObject::connect(_texture_list, &QListWidget::itemSelectionChanged, [this]()
, this
, [=](QListWidgetItem* item)
{ {
emit selected("tileset/" + item->toolTip().toStdString()); QListWidgetItem* const item = _texture_list->currentItem();
if (item)
{
emit selected("tileset/" + item->toolTip().toStdString());
}
} }
); );

View File

@@ -62,7 +62,7 @@ namespace Noggit
_picker_listview = new QListWidget(this); _picker_listview = new QListWidget(this);
_picker_listview->setFixedSize(280, 460); _picker_listview->setFixedSize(280, 460);
_picker_listview->setSelectionMode(QListWidget::SingleSelection); _picker_listview->setSelectionMode(QListWidget::SingleSelection);
// _picker_listview->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); _picker_listview->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectItems);
list_layout->addWidget(_picker_listview); list_layout->addWidget(_picker_listview);
if (sound_type_filter == -1) if (sound_type_filter == -1)
@@ -209,9 +209,15 @@ namespace Noggit
} }
}); });
connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]()
select_entry(item->data(1).toInt()); {
}); QListWidgetItem* const item = _picker_listview->currentItem();
if (item)
{
select_entry(item->data(Qt::UserRole).toInt());
}
}
);
connect(select_entry_btn, &QPushButton::clicked, [=]() { connect(select_entry_btn, &QPushButton::clicked, [=]() {
// auto selection = _picker_listview->selectedItems(); // auto selection = _picker_listview->selectedItems();
@@ -219,20 +225,20 @@ namespace Noggit
if (selected_item == nullptr) if (selected_item == nullptr)
return; return;
button->setProperty("id", selected_item->data(1).toInt()); button->setProperty("id", selected_item->data(Qt::UserRole).toInt());
button->setText(selected_item->text()); button->setText(selected_item->text());
this->close(); this->close();
}); });
connect(select_entry_none_btn, &QPushButton::clicked, [=]() { connect(select_entry_none_btn, &QPushButton::clicked, [=]() {
button->setText("-NONE-"); button->setText("-NONE-");
button->setProperty("id", 0); button->setProperty("id", 0);
this->close(); this->close();
}); });
connect(save_music_entry_btn, &QPushButton::clicked, [=]() { connect(save_music_entry_btn, &QPushButton::clicked, [=]() {
save_entry(_entry_id); save_entry(_entry_id);
}); });
connect(add_file_button, &QPushButton::clicked, [=]() { connect(add_file_button, &QPushButton::clicked, [=]() {
@@ -265,7 +271,7 @@ namespace Noggit
// add new tree item // add new tree item
auto item = new QListWidgetItem(); auto item = new QListWidgetItem();
item->setData(1, new_id); item->setData(Qt::UserRole, new_id);
std::stringstream ss; std::stringstream ss;
_picker_listview->addItem(item); _picker_listview->addItem(item);
@@ -286,7 +292,7 @@ namespace Noggit
continue; continue;
auto item = new QListWidgetItem(); auto item = new QListWidgetItem();
item->setData(1, i->getInt(SoundEntriesDB::ID)); item->setData(Qt::UserRole, i->getInt(SoundEntriesDB::ID));
std::stringstream ss; std::stringstream ss;
ss << i->getInt(SoundEntriesDB::ID) << "-" << i->getString(SoundEntriesDB::Name); ss << i->getInt(SoundEntriesDB::ID) << "-" << i->getString(SoundEntriesDB::Name);

View File

@@ -121,24 +121,30 @@ namespace Noggit
// unhide all // unhide all
} }
// hide all items // hide all items
for (int i = 0; i < _picker_listview->count(); i++) for (int i = 0; i < _picker_listview->count(); i++)
{ {
auto item = _picker_listview->item(i); auto item = _picker_listview->item(i);
item->setHidden(true); item->setHidden(true);
} }
// unhide matching items // unhide matching items
auto matching_items = _picker_listview->findItems(obj, Qt::MatchContains); auto matching_items = _picker_listview->findItems(obj, Qt::MatchContains);
for (auto item : matching_items) for (auto item : matching_items)
{ {
item->setHidden(false); item->setHidden(false);
} }
}); });
connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]()
select_entry(item->data(1).toInt()); {
}); QListWidgetItem* const item = _picker_listview->currentItem();
if (item)
{
select_entry(item->data(Qt::UserRole).toInt());
}
}
);
connect(select_entry_btn, &QPushButton::clicked, [=]() { connect(select_entry_btn, &QPushButton::clicked, [=]() {
// auto selection = _picker_listview->selectedItems(); // auto selection = _picker_listview->selectedItems();

View File

@@ -58,7 +58,7 @@ namespace Noggit
for (DBCFile::Iterator i = gZoneMusicDB.begin(); i != gZoneMusicDB.end(); ++i) for (DBCFile::Iterator i = gZoneMusicDB.begin(); i != gZoneMusicDB.end(); ++i)
{ {
auto item = new QListWidgetItem(); auto item = new QListWidgetItem();
item->setData(1, i->getInt(ZoneMusicDB::ID)); item->setData(Qt::UserRole, i->getInt(ZoneMusicDB::ID));
std::stringstream ss; std::stringstream ss;
ss << i->getInt(ZoneMusicDB::ID) << "-" << i->getString(ZoneMusicDB::Name); ss << i->getInt(ZoneMusicDB::ID) << "-" << i->getString(ZoneMusicDB::Name);
@@ -180,9 +180,15 @@ namespace Noggit
} }
}); });
connect(_picker_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { QObject::connect(_picker_listview, &QListWidget::itemSelectionChanged, [this]()
select_entry(item->data(1).toInt()); {
}); QListWidgetItem* const item = _picker_listview->currentItem();
if (item)
{
select_entry(item->data(Qt::UserRole).toInt());
}
}
);
connect(select_entry_btn, &QPushButton::clicked, [=]() { connect(select_entry_btn, &QPushButton::clicked, [=]() {
// auto selection = _picker_listview->selectedItems(); // auto selection = _picker_listview->selectedItems();
@@ -190,7 +196,7 @@ namespace Noggit
if (selected_item == nullptr) if (selected_item == nullptr)
return; return;
button->setProperty("id", selected_item->data(1).toInt()); button->setProperty("id", selected_item->data(Qt::UserRole).toInt());
button->setText(selected_item->text()); button->setText(selected_item->text());
this->close(); this->close();
}); });
@@ -236,7 +242,7 @@ namespace Noggit
// add new tree item // add new tree item
auto item = new QListWidgetItem(); auto item = new QListWidgetItem();
item->setData(1, new_id); item->setData(Qt::UserRole, new_id);
std::stringstream ss; std::stringstream ss;
_picker_listview->addItem(item); _picker_listview->addItem(item);

View File

@@ -92,9 +92,15 @@ namespace Noggit
_files_listview->setSelectionMode(QListWidget::SingleSelection); _files_listview->setSelectionMode(QListWidget::SingleSelection);
layout->addWidget(_files_listview); layout->addWidget(_files_listview);
connect(_files_listview, &QListWidget::itemClicked, this, [=](QListWidgetItem* item) { QObject::connect(_files_listview, &QListWidget::itemSelectionChanged, [this]()
play_selected_sound(); {
}); QListWidgetItem* const item = _files_listview->currentItem();
if (item)
{
play_selected_sound();
}
}
);
// connect volume // connect volume
connect(_volume_slider, &QSlider::valueChanged, [&](int v) { connect(_volume_slider, &QSlider::valueChanged, [&](int v) {

View File

@@ -307,10 +307,17 @@ namespace Noggit::Ui::Windows
layout->setAlignment(Qt::AlignLeft); layout->setAlignment(Qt::AlignLeft);
QListWidget* bookmarks_table(new QListWidget(widget)); QListWidget* bookmarks_table(new QListWidget(widget));
_continents_table = new QListWidget(widget); _continents_table = new QListWidget(widget);
QObject::connect(_continents_table, &QListWidget::itemClicked, [this](QListWidgetItem* item) _continents_table->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection);
{ _continents_table->setSelectionBehavior(QAbstractItemView::SelectItems);
loadMap(item->data(Qt::UserRole).toInt());
} QObject::connect(_continents_table, &QListWidget::itemSelectionChanged, [this]()
{
QListWidgetItem* const item = _continents_table->currentItem();
if (item)
{
loadMap(item->data(Qt::UserRole).toInt());
}
}
); );