diff --git a/sources/awesomewidgets/abstractextitemaggregator.cpp b/sources/awesomewidgets/abstractextitemaggregator.cpp index eb90bf4..42aeeb2 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.cpp +++ b/sources/awesomewidgets/abstractextitemaggregator.cpp @@ -26,9 +26,8 @@ #include -AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _type) - : QDialog(_parent) - , ui(new Ui::AbstractExtItemAggregator) +AbstractExtItemAggregator::AbstractExtItemAggregator(QObject *_parent, QString _type) + : QObject(_parent) , m_type(std::move(_type)) { qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; @@ -39,29 +38,12 @@ AbstractExtItemAggregator::AbstractExtItemAggregator(QWidget *_parent, QString _ QDir localDirectory; if (localDirectory.mkpath(localDir)) qCInfo(LOG_LIB) << "Created directory" << localDir; - - ui->setupUi(this); - copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); - createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); - deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); - - connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(editItemButtonPressed(QAbstractButton *))); - connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - connect(ui->listWidget, SIGNAL(itemActivated(QListWidgetItem *)), this, SLOT(editItemActivated(QListWidgetItem *))); } -AbstractExtItemAggregator::~AbstractExtItemAggregator() +void AbstractExtItemAggregator::copyItem(QListWidget *_widget) { - qCDebug(LOG_LIB) << __PRETTY_FUNCTION__; - - delete ui; -} - - -void AbstractExtItemAggregator::copyItem() -{ - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); auto fileName = getName(); auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") @@ -73,16 +55,16 @@ void AbstractExtItemAggregator::copyItem() auto filePath = QString("%1/%2").arg(dir, fileName); auto newItem = source->copy(filePath, number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::deleteItem() +void AbstractExtItemAggregator::deleteItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to delete"; return; @@ -90,30 +72,63 @@ void AbstractExtItemAggregator::deleteItem() if (source->tryDelete()) { initItems(); - repaintList(); + repaintList(_widget); } } -void AbstractExtItemAggregator::editItem() +void AbstractExtItemAggregator::editItem(QListWidget *_widget) { - auto source = itemFromWidget(); + auto source = itemFromWidget(_widget); if (!source) { qCWarning(LOG_LIB) << "Nothing to edit"; return; } - if (source->showConfiguration(this, configArgs()) == 1) { + if (source->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } } +int AbstractExtItemAggregator::exec() +{ + auto dialog = new QDialog(); + auto ui = new Ui::AbstractExtItemAggregator(); + ui->setupUi(dialog); + + auto copyButton = ui->buttonBox->addButton(i18n("Copy"), QDialogButtonBox::ActionRole); + auto createButton = ui->buttonBox->addButton(i18n("Create"), QDialogButtonBox::ActionRole); + auto deleteButton = ui->buttonBox->addButton(i18n("Remove"), QDialogButtonBox::ActionRole); + + connect(ui->buttonBox, &QDialogButtonBox::clicked, [&](QAbstractButton *_button) { + if (dynamic_cast(_button) == copyButton) + copyItem(ui->listWidget); + else if (dynamic_cast(_button) == createButton) + doCreateItem(ui->listWidget); + else if (dynamic_cast(_button) == deleteButton) + deleteItem(ui->listWidget); + else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) + editItem(ui->listWidget); + }); + connect(ui->buttonBox, &QDialogButtonBox::rejected, [dialog]() { dialog->reject(); }); + connect(ui->listWidget, &QListWidget::itemActivated, [&](QListWidgetItem *) { editItem(ui->listWidget); }); + + repaintList(ui->listWidget); + auto ret = dialog->exec(); + + dialog->deleteLater(); + delete ui; + + return ret; +} + + QString AbstractExtItemAggregator::getName() { bool ok; - auto name = QInputDialog::getText(this, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); + auto name = QInputDialog::getText(nullptr, i18n("Enter file name"), i18n("File name"), QLineEdit::Normal, "", &ok); if ((!ok) || (name.isEmpty())) return ""; if (!name.endsWith(".desktop")) @@ -123,9 +138,9 @@ QString AbstractExtItemAggregator::getName() } -AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const +AbstractExtItem *AbstractExtItemAggregator::itemFromWidget(QListWidget *_widget) const { - auto widgetItem = ui->listWidget->currentItem(); + auto widgetItem = _widget->currentItem(); if (!widgetItem) return nullptr; @@ -144,18 +159,18 @@ AbstractExtItem *AbstractExtItemAggregator::itemFromWidget() const } -void AbstractExtItemAggregator::repaintList() const +void AbstractExtItemAggregator::repaintList(QListWidget *_widget) const { - ui->listWidget->clear(); + _widget->clear(); for (auto &_item : items()) { QString fileName = QFileInfo(_item->fileName()).fileName(); - auto item = new QListWidgetItem(fileName, ui->listWidget); + auto item = new QListWidgetItem(fileName, _widget); QStringList tooltip; tooltip.append(i18n("Name: %1", _item->name())); tooltip.append(i18n("Comment: %1", _item->comment())); tooltip.append(i18n("Identity: %1", _item->uniq())); item->setToolTip(tooltip.join('\n')); - ui->listWidget->addItem(item); + _widget->addItem(item); } } @@ -200,22 +215,3 @@ void AbstractExtItemAggregator::setConfigArgs(const QVariant &_configArgs) m_configArgs = _configArgs; } - - -void AbstractExtItemAggregator::editItemActivated(QListWidgetItem *) -{ - return editItem(); -} - - -void AbstractExtItemAggregator::editItemButtonPressed(QAbstractButton *_button) -{ - if (dynamic_cast(_button) == copyButton) - return copyItem(); - else if (dynamic_cast(_button) == createButton) - return doCreateItem(); - else if (dynamic_cast(_button) == deleteButton) - return deleteItem(); - else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole) - return editItem(); -} diff --git a/sources/awesomewidgets/abstractextitemaggregator.h b/sources/awesomewidgets/abstractextitemaggregator.h index 781a657..aa2704b 100644 --- a/sources/awesomewidgets/abstractextitemaggregator.h +++ b/sources/awesomewidgets/abstractextitemaggregator.h @@ -18,7 +18,6 @@ #ifndef ABSTRACTEXTITEMAGGREGATOR_H #define ABSTRACTEXTITEMAGGREGATOR_H -#include #include #include "abstractextitem.h" @@ -26,27 +25,23 @@ class QAbstractButton; +class QListWidget; class QListWidgetItem; -namespace Ui -{ -class AbstractExtItemAggregator; -} -class AbstractExtItemAggregator : public QDialog +class AbstractExtItemAggregator : public QObject { Q_OBJECT Q_PROPERTY(QVariant configArgs READ configArgs WRITE setConfigArgs) Q_PROPERTY(QVariant type READ type) public: - explicit AbstractExtItemAggregator(QWidget *_parent, QString _type); - ~AbstractExtItemAggregator() override; + explicit AbstractExtItemAggregator(QObject *_parent, QString _type); // methods - void copyItem(); - template void createItem() + void copyItem(QListWidget *_widget); + template void createItem(QListWidget *_widget) { auto fileName = getName(); - int number = uniqNumber(); + auto number = uniqNumber(); auto dir = QString("%1/awesomewidgets/%2") .arg(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), m_type); if (fileName.isEmpty()) { @@ -55,19 +50,20 @@ public: } auto filePath = QString("%1/%2").arg(dir, fileName); - T *newItem = new T(this, filePath); + auto newItem = new T(this, filePath); newItem->setNumber(number); - if (newItem->showConfiguration(this, configArgs()) == 1) { + if (newItem->showConfiguration(nullptr, configArgs()) == 1) { initItems(); - repaintList(); + repaintList(_widget); } }; - void deleteItem(); - void editItem(); + void deleteItem(QListWidget *_widget); + void editItem(QListWidget *_widget); + [[nodiscard]] int exec(); QString getName(); virtual void initItems() = 0; - [[nodiscard]] AbstractExtItem *itemFromWidget() const; - void repaintList() const; + [[nodiscard]] AbstractExtItem *itemFromWidget(QListWidget *_widget) const; + void repaintList(QListWidget *_widget) const; [[nodiscard]] int uniqNumber() const; // get methods [[nodiscard]] QVariant configArgs() const; @@ -77,21 +73,12 @@ public: // set methods void setConfigArgs(const QVariant &_configArgs); -private slots: - void editItemActivated(QListWidgetItem *); - void editItemButtonPressed(QAbstractButton *_button); - private: - // ui - Ui::AbstractExtItemAggregator *ui = nullptr; - QPushButton *copyButton = nullptr; - QPushButton *createButton = nullptr; - QPushButton *deleteButton = nullptr; // properties QVariant m_configArgs; QString m_type; // ui methods - virtual void doCreateItem() = 0; + virtual void doCreateItem(QListWidget *_widget) = 0; }; diff --git a/sources/awesomewidgets/extitemaggregator.h b/sources/awesomewidgets/extitemaggregator.h index 3925b16..91532f7 100644 --- a/sources/awesomewidgets/extitemaggregator.h +++ b/sources/awesomewidgets/extitemaggregator.h @@ -31,7 +31,7 @@ template class ExtItemAggregator : public AbstractExtItemAggregator { public: - explicit ExtItemAggregator(QWidget *_parent, const QString &_type) + explicit ExtItemAggregator(QObject *_parent, const QString &_type) : AbstractExtItemAggregator(_parent, _type) { qSetMessagePattern(AWDebug::LOG_FORMAT); @@ -56,8 +56,7 @@ public: void editItems() { - repaintList(); - int ret = exec(); + auto ret = exec(); qCInfo(LOG_LIB) << "Dialog returns" << ret; }; @@ -123,7 +122,7 @@ private: QList m_items; QList m_activeItems; - void doCreateItem() override { return createItem(); } + void doCreateItem(QListWidget *_widget) override { return createItem(_widget); } QList getItems() { @@ -137,7 +136,7 @@ private: if (!file.endsWith(".desktop")) continue; qCInfo(LOG_LIB) << "Found file" << file << "in" << dir; - QString filePath = QString("%1/%2").arg(dir).arg(file); + auto filePath = QString("%1/%2").arg(dir, file); // check if already exists if (std::any_of(items.cbegin(), items.cend(), [&filePath](AbstractExtItem *item) { return (item->fileName() == filePath); })) @@ -147,8 +146,7 @@ private: } // sort items - std::sort(items.begin(), items.end(), - [](const AbstractExtItem *lhs, const AbstractExtItem *rhs) { return lhs->number() < rhs->number(); }); + std::sort(items.begin(), items.end(), [](auto *lhs, auto *rhs) { return lhs->number() < rhs->number(); }); return items; }; };