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
, std::vector<glm::vec3> const points
, std::vector<glm::vec3> const& points
, glm::vec4 const& color
, bool spline
)

View File

@@ -158,7 +158,7 @@ namespace Noggit::Rendering::Primitives
{
public:
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();
private:

View File

@@ -22,7 +22,7 @@ namespace Noggit
char const* LightTool::name() const
{
return "Light Editor";
return "Lightning Editor";
}
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));
_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();

View File

@@ -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);

View File

@@ -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<std::string>();
_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);

View File

@@ -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());
}
}
);

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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());
}
}
);