mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-05-04 04:13:49 +00:00
do not derive from qwidget in aggregates
This commit is contained in:
parent
33a41bb6c0
commit
0a15a098a2
@ -26,9 +26,8 @@
|
||||
#include <utility>
|
||||
|
||||
|
||||
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<QPushButton *>(_button) == copyButton)
|
||||
copyItem(ui->listWidget);
|
||||
else if (dynamic_cast<QPushButton *>(_button) == createButton)
|
||||
doCreateItem(ui->listWidget);
|
||||
else if (dynamic_cast<QPushButton *>(_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<QPushButton *>(_button) == copyButton)
|
||||
return copyItem();
|
||||
else if (dynamic_cast<QPushButton *>(_button) == createButton)
|
||||
return doCreateItem();
|
||||
else if (dynamic_cast<QPushButton *>(_button) == deleteButton)
|
||||
return deleteItem();
|
||||
else if (ui->buttonBox->buttonRole(_button) == QDialogButtonBox::AcceptRole)
|
||||
return editItem();
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
#ifndef ABSTRACTEXTITEMAGGREGATOR_H
|
||||
#define ABSTRACTEXTITEMAGGREGATOR_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QStandardPaths>
|
||||
|
||||
#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 <class T> void createItem()
|
||||
void copyItem(QListWidget *_widget);
|
||||
template <class T> 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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@
|
||||
template <class T> 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<AbstractExtItem *> m_items;
|
||||
QList<T *> m_activeItems;
|
||||
|
||||
void doCreateItem() override { return createItem<T>(); }
|
||||
void doCreateItem(QListWidget *_widget) override { return createItem<T>(_widget); }
|
||||
|
||||
QList<AbstractExtItem *> 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;
|
||||
};
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user