From 50a2805c3fe1db9739d11090bda0cb3a3fa8ffdb Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Tue, 14 Apr 2020 21:56:04 +0200 Subject: [PATCH] gui/MultiSelect: Add user_add_item parameter to constructor adds a button and signal to the MultiSelect, allowing client code to implement adding items from user input. --- gui/MultiSelect.cpp | 17 +++++++++++++++-- gui/MultiSelect.h | 9 ++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/gui/MultiSelect.cpp b/gui/MultiSelect.cpp index 2578eba..98c6dac 100644 --- a/gui/MultiSelect.cpp +++ b/gui/MultiSelect.cpp @@ -28,8 +28,8 @@ #include #include "MultiSelect.h" -MultiSelect::MultiSelect(const QString& text, QWidget *parent) : -QPushButton (text + ": none", parent) +MultiSelect::MultiSelect(const QString& text, bool user_can_add, QWidget *parent) : +QPushButton (text + ": none", parent) { QPushButton* btn; QVBoxLayout* layout; @@ -52,6 +52,13 @@ QPushButton (text + ": none", parent) QObject::connect(btn, SIGNAL(clicked()), m_dialog, SLOT(accept())); QObject::connect(m_dialog, SIGNAL(accepted()), this, SLOT(selectionConfirmed())); QObject::connect(m_list, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(listItemClicked(QListWidgetItem*))); + + // Configured to let users add items. provide button and signal. + if (user_can_add) { + btn = new QPushButton("Add"); + layout->addWidget(btn); + QObject::connect(btn, SIGNAL(clicked()), this, SLOT(addBtnClicked())); + } } void MultiSelect::addItem(const QString& text, bool checked) @@ -125,6 +132,12 @@ void MultiSelect::listItemClicked(QListWidgetItem *item) item->setCheckState(checked ? Qt::Unchecked : Qt::Checked); } +void MultiSelect::addBtnClicked() +{ + // Just emit addNewItem event. + emit addNewItem(); +} + void MultiSelect::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { diff --git a/gui/MultiSelect.h b/gui/MultiSelect.h index 830c4d0..84ed207 100644 --- a/gui/MultiSelect.h +++ b/gui/MultiSelect.h @@ -43,7 +43,7 @@ class MultiSelect : public QPushButton { Q_OBJECT public: - MultiSelect(const QString& text, QWidget *parent = 0); + MultiSelect(const QString& text, bool user_add_item = false, QWidget *parent = 0); // Items. @@ -61,6 +61,10 @@ signals: // This signal is emitted whenever the user has made a new selection. void selectionChanged(QStringList selected); + // This signal is emitted whenever the user clicks the "Add" button. + // NOTE: Will only be emitted if `user_add_item` has been set to `true` in the constructor. + void addNewItem(); + private slots : // Called when the dialog is accepted. @@ -69,6 +73,9 @@ private slots : // Called when a list item is clicked on. void listItemClicked(QListWidgetItem *item); + // Called when the add button is clicked on. + void addBtnClicked(); + protected : // Event handlers