From 7c37134aab03eb9f44ed61d6aa3ab9f9051e77da Mon Sep 17 00:00:00 2001 From: arcan1s Date: Tue, 10 May 2016 02:16:24 +0300 Subject: [PATCH] rewrite formatters according to rfc #91 --- sources/awesome-widget/plugin/CMakeLists.txt | 4 +- .../plugin/awabstractformatter.cpp | 151 +++++++++ .../plugin/awabstractformatter.h | 45 ++- .../plugin/awdatetimeformatter.cpp | 99 +++++- .../plugin/awdatetimeformatter.h | 23 +- .../plugin/awdatetimeformatter.ui | 167 +++++++++ .../plugin/awfloatformatter.cpp | 160 +++++++-- .../awesome-widget/plugin/awfloatformatter.h | 41 ++- .../awesome-widget/plugin/awfloatformatter.ui | 317 ++++++++++++++++++ .../plugin/awformatterhelper.cpp | 132 ++++++-- .../awesome-widget/plugin/awformatterhelper.h | 13 +- .../awesome-widget/plugin/awnoformatter.cpp | 66 +++- sources/awesome-widget/plugin/awnoformatter.h | 19 +- .../awesome-widget/plugin/awnoformatter.ui | 144 ++++++++ .../plugin/awscriptformatter.cpp | 119 ++++++- .../awesome-widget/plugin/awscriptformatter.h | 29 +- .../plugin/awscriptformatter.ui | 212 ++++++++++++ 17 files changed, 1586 insertions(+), 155 deletions(-) create mode 100644 sources/awesome-widget/plugin/awabstractformatter.cpp create mode 100644 sources/awesome-widget/plugin/awdatetimeformatter.ui create mode 100644 sources/awesome-widget/plugin/awfloatformatter.ui create mode 100644 sources/awesome-widget/plugin/awnoformatter.ui create mode 100644 sources/awesome-widget/plugin/awscriptformatter.ui diff --git a/sources/awesome-widget/plugin/CMakeLists.txt b/sources/awesome-widget/plugin/CMakeLists.txt index 381937f..4d90d57 100644 --- a/sources/awesome-widget/plugin/CMakeLists.txt +++ b/sources/awesome-widget/plugin/CMakeLists.txt @@ -11,9 +11,11 @@ include_directories( ) file(GLOB SUBPROJECT_SOURCE *.cpp ${PROJECT_TRDPARTY_DIR}/fontdialog/*.cpp ${CMAKE_SOURCE_DIR}/*.cpp) +file(GLOB SUBPROJECT_UI *.ui) file(GLOB SUBPROJECT_NOTIFY *.notifyrc) -add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) +qt5_wrap_ui(SUBPROJECT_UI_HEADER ${SUBPROJECT_UI}) +add_library(${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE} ${SUBPROJECT_UI_HEADER}) target_link_libraries(${PLUGIN_NAME} ${PROJECT_LIBRARY} ${Qt_LIBRARIES} ${Kf5_LIBRARIES}) install(TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/awesomewidget) diff --git a/sources/awesome-widget/plugin/awabstractformatter.cpp b/sources/awesome-widget/plugin/awabstractformatter.cpp new file mode 100644 index 0000000..302a00a --- /dev/null +++ b/sources/awesome-widget/plugin/awabstractformatter.cpp @@ -0,0 +1,151 @@ +/*************************************************************************** + * This file is part of awesome-widgets * + * * + * awesome-widgets is free software: you can redistribute it and/or * + * modify it under the terms of the GNU General Public License as * + * published by the Free Software Foundation, either version 3 of the * + * License, or (at your option) any later version. * + * * + * awesome-widgets is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with awesome-widgets. If not, see http://www.gnu.org/licenses/ * + ***************************************************************************/ + +#include "awabstractformatter.h" + +#include +#include +#include + +#include "awdebug.h" + + +AWAbstractFormatter::AWAbstractFormatter(QWidget *parent, + const QString filePath) + : QDialog(parent) + , m_fileName(filePath) +{ + qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + qCDebug(LOG_AW) << "Desktop name" << filePath; + + m_name = m_fileName; +} + + +AWAbstractFormatter::~AWAbstractFormatter() +{ + qCDebug(LOG_AW) << __PRETTY_FUNCTION__; +} + + +void AWAbstractFormatter::copyDefaults(AWAbstractFormatter *_other) const +{ + _other->setComment(m_comment); + _other->setName(m_name); + _other->setType(m_type); +} + + +QString AWAbstractFormatter::writtableConfig() const +{ + QStringList paths = m_fileName.split(QChar('/')); + + QString name = paths.takeLast(); + QString dir = paths.takeLast(); + + return QString("%1/awesomewidgets/%2/%3") + .arg(QStandardPaths::writableLocation( + QStandardPaths::GenericDataLocation)) + .arg(dir) + .arg(name); +} + + +QString AWAbstractFormatter::comment() const +{ + return m_comment; +} + + +QString AWAbstractFormatter::fileName() const +{ + return m_fileName; +} + + +QString AWAbstractFormatter::name() const +{ + return m_name; +} + + +QString AWAbstractFormatter::type() const +{ + return m_type; +} + + +void AWAbstractFormatter::setComment(const QString _comment) +{ + qCDebug(LOG_AW) << "Comment" << _comment; + + m_comment = _comment; +} + + +void AWAbstractFormatter::setName(const QString _name) +{ + qCDebug(LOG_AW) << "Name" << _name; + + m_name = _name; +} + + +void AWAbstractFormatter::setType(const QString _type) +{ + qCDebug(LOG_AW) << "Type" << _type; + + m_type = _type; +} + + +void AWAbstractFormatter::readConfiguration() +{ + QSettings settings(m_fileName, QSettings::IniFormat); + + settings.beginGroup(QString("Desktop Entry")); + setName(settings.value(QString("Name"), m_name).toString()); + setComment(settings.value(QString("Comment"), m_comment).toString()); + setType(settings.value(QString("Type"), m_type).toString()); + settings.endGroup(); +} + + +bool AWAbstractFormatter::tryDelete() const +{ + bool status = QFile::remove(m_fileName); + qCInfo(LOG_AW) << "Remove file" << m_fileName << status; + + return status; +} + + +void AWAbstractFormatter::writeConfiguration() const +{ + QSettings settings(writtableConfig(), QSettings::IniFormat); + qCInfo(LOG_AW) << "Configuration file" << settings.fileName(); + + settings.beginGroup(QString("Desktop Entry")); + settings.setValue(QString("Encoding"), QString("UTF-8")); + settings.setValue(QString("Name"), m_name); + settings.setValue(QString("Comment"), m_comment); + settings.setValue(QString("Type"), m_type); + settings.endGroup(); + + settings.sync(); +} diff --git a/sources/awesome-widget/plugin/awabstractformatter.h b/sources/awesome-widget/plugin/awabstractformatter.h index d873ef5..d953a25 100644 --- a/sources/awesome-widget/plugin/awabstractformatter.h +++ b/sources/awesome-widget/plugin/awabstractformatter.h @@ -18,19 +18,48 @@ #ifndef AWABSTRACTFORMATTER_H #define AWABSTRACTFORMATTER_H -#include +#include #include -class AWAbstractFormatter : public QObject +class AWAbstractFormatter : public QDialog { + Q_OBJECT + Q_PROPERTY(QString comment READ comment WRITE setComment) + Q_PROPERTY(QString fileName READ fileName) + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(QString type READ type WRITE setType) + public: - explicit AWAbstractFormatter(QObject *parent, const QString, const QString) - : QObject(parent){}; - explicit AWAbstractFormatter(QObject *parent) - : QObject(parent){}; - virtual ~AWAbstractFormatter(){}; - virtual QString convert(const QVariant &value) const = 0; + explicit AWAbstractFormatter(QWidget *parent = nullptr, + const QString filePath = QString()); + virtual ~AWAbstractFormatter(); + virtual AWAbstractFormatter *copy(const QString _fileName) = 0; + void copyDefaults(AWAbstractFormatter *_other) const; + virtual QString convert(const QVariant &_value) const = 0; + QString writtableConfig() const; + // properties + QString comment() const; + QString fileName() const; + QString name() const; + QString type() const; + void setComment(const QString _comment = QString("empty")); + void setName(const QString _name = QString("none")); + void setType(const QString _type = QString("NoFormat")); + +public slots: + virtual void readConfiguration(); + virtual int showConfiguration(const QVariant args = QVariant()) = 0; + bool tryDelete() const; + virtual void writeConfiguration() const; + +private: + QString m_fileName; + virtual void translate() = 0; + // properties + QString m_comment = QString("empty"); + QString m_name = QString("none"); + QString m_type = QString("NoFormat"); }; diff --git a/sources/awesome-widget/plugin/awdatetimeformatter.cpp b/sources/awesome-widget/plugin/awdatetimeformatter.cpp index 515dd42..6445fe3 100644 --- a/sources/awesome-widget/plugin/awdatetimeformatter.cpp +++ b/sources/awesome-widget/plugin/awdatetimeformatter.cpp @@ -17,44 +17,69 @@ #include "awdatetimeformatter.h" +#include "ui_awdatetimeformatter.h" + +#include #include +#include #include #include "awdebug.h" -AWDateTimeFormatter::AWDateTimeFormatter(QObject *parent, - const QString filename, - const QString section) - : AWAbstractFormatter(parent, filename, section) +AWDateTimeFormatter::AWDateTimeFormatter(QWidget *parent, + const QString filePath) + : AWAbstractFormatter(parent, filePath) + , ui(new Ui::AWDateTimeFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - init(filename, section); + readConfiguration(); + ui->setupUi(this); + translate(); } -AWDateTimeFormatter::AWDateTimeFormatter(QObject *parent, const QString format) +AWDateTimeFormatter::AWDateTimeFormatter(const QString format, QWidget *parent) : AWAbstractFormatter(parent) + , ui(new Ui::AWDateTimeFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; setFormat(format); + + ui->setupUi(this); + translate(); } AWDateTimeFormatter::~AWDateTimeFormatter() { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + delete ui; } -QString AWDateTimeFormatter::convert(const QVariant &value) const +QString AWDateTimeFormatter::convert(const QVariant &_value) const { - qCDebug(LOG_AW) << "Convert value" << value; + qCDebug(LOG_AW) << "Convert value" << _value; - return value.toDateTime().toString(m_format); + return _value.toDateTime().toString(m_format); +} + + +AWDateTimeFormatter *AWDateTimeFormatter::copy(const QString _fileName) +{ + qCDebug(LOG_LIB) << "File" << _fileName; + + AWDateTimeFormatter *item + = new AWDateTimeFormatter(static_cast(parent()), _fileName); + copyDefaults(item); + item->setFormat(format()); + + return item; } @@ -72,13 +97,59 @@ void AWDateTimeFormatter::setFormat(const QString _format) } -void AWDateTimeFormatter::init(const QString filename, const QString section) +void AWDateTimeFormatter::readConfiguration() { - qCDebug(LOG_AW) << "Looking for section" << section << "in" << filename; + AWAbstractFormatter::readConfiguration(); - QSettings settings(filename, QSettings::IniFormat); + QSettings settings(fileName(), QSettings::IniFormat); - settings.beginGroup(section); - setFormat(settings.value(QString("Format"), QString()).toString()); + settings.beginGroup(QString("Desktop Entry")); + setFormat(settings.value(QString("Format"), m_format).toString()); settings.endGroup(); } + + +int AWDateTimeFormatter::showConfiguration(const QVariant args) +{ + Q_UNUSED(args) + + ui->lineEdit_name->setText(name()); + ui->lineEdit_comment->setText(comment()); + ui->label_typeValue->setText(QString("DateTime")); + ui->lineEdit_format->setText(m_format); + + int ret = exec(); + if (ret != 1) + return ret; + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setType(ui->label_typeValue->text()); + setFormat(ui->lineEdit_format->text()); + + writeConfiguration(); + return ret; +} + + +void AWDateTimeFormatter::writeConfiguration() const +{ + AWAbstractFormatter::writeConfiguration(); + + QSettings settings(writtableConfig(), QSettings::IniFormat); + qCInfo(LOG_LIB) << "Configuration file" << settings.fileName(); + + settings.beginGroup(QString("Desktop Entry")); + settings.setValue(QString("Format"), m_format); + settings.endGroup(); + + settings.sync(); +} + + +void AWDateTimeFormatter::translate() +{ + ui->label_name->setText(i18n("Name")); + ui->label_comment->setText(i18n("Comment")); + ui->label_type->setText(i18n("Type")); + ui->label_format->setText(i18n("Format")); +} diff --git a/sources/awesome-widget/plugin/awdatetimeformatter.h b/sources/awesome-widget/plugin/awdatetimeformatter.h index df8e9d7..b0b1bbc 100644 --- a/sources/awesome-widget/plugin/awdatetimeformatter.h +++ b/sources/awesome-widget/plugin/awdatetimeformatter.h @@ -21,25 +21,36 @@ #include "awabstractformatter.h" +namespace Ui +{ +class AWDateTimeFormatter; +} + class AWDateTimeFormatter : public AWAbstractFormatter { Q_OBJECT Q_PROPERTY(QString format READ format WRITE setFormat) public: - explicit AWDateTimeFormatter(QObject *parent, const QString filename, - const QString section); - explicit AWDateTimeFormatter(QObject *parent, const QString format); + explicit AWDateTimeFormatter(QWidget *parent, const QString filePath); + explicit AWDateTimeFormatter(const QString format, QWidget *parent); virtual ~AWDateTimeFormatter(); - QString convert(const QVariant &value) const; + QString convert(const QVariant &_value) const; + AWDateTimeFormatter *copy(const QString _fileName); // properties QString format() const; void setFormat(const QString _format); +public slots: + void readConfiguration(); + int showConfiguration(const QVariant args = QVariant()); + void writeConfiguration() const; + private: - void init(const QString filename, const QString section); + Ui::AWDateTimeFormatter *ui; + void translate(); // properties - QString m_format; + QString m_format = QString(); }; diff --git a/sources/awesome-widget/plugin/awdatetimeformatter.ui b/sources/awesome-widget/plugin/awdatetimeformatter.ui new file mode 100644 index 0000000..f0f80dc --- /dev/null +++ b/sources/awesome-widget/plugin/awdatetimeformatter.ui @@ -0,0 +1,167 @@ + + + AWDateTimeFormatter + + + + 0 + 0 + 420 + 157 + + + + Configuration + + + + + + + + + 0 + 0 + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + 0 + 0 + + + + Comment + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Format + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + AWDateTimeFormatter + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AWDateTimeFormatter + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/sources/awesome-widget/plugin/awfloatformatter.cpp b/sources/awesome-widget/plugin/awfloatformatter.cpp index 7a6fe2c..ba2a18f 100644 --- a/sources/awesome-widget/plugin/awfloatformatter.cpp +++ b/sources/awesome-widget/plugin/awfloatformatter.cpp @@ -17,51 +17,87 @@ #include "awfloatformatter.h" +#include "ui_awfloatformatter.h" +#include + +#include #include #include "awdebug.h" -AWFloatFormatter::AWFloatFormatter(QObject *parent, const QString filename, - const QString section) - : AWAbstractFormatter(parent, filename, section) +AWFloatFormatter::AWFloatFormatter(QWidget *parent, const QString filePath) + : AWAbstractFormatter(parent, filePath) + , ui(new Ui::AWFloatFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - init(filename, section); + readConfiguration(); + ui->setupUi(this); + translate(); } -AWFloatFormatter::AWFloatFormatter(QObject *parent, const QChar fillChar, +AWFloatFormatter::AWFloatFormatter(const int count, const QChar fillChar, const char format, const double multiplier, const int precision, const double summand, - const int width) + QWidget *parent) : AWAbstractFormatter(parent) + , ui(new Ui::AWFloatFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + setCount(count); setFillChar(fillChar); setFormat(format); setMultiplier(multiplier); setPrecision(precision); setSummand(summand); - setWidth(width); + + ui->setupUi(this); + translate(); } AWFloatFormatter::~AWFloatFormatter() { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + delete ui; } -QString AWFloatFormatter::convert(const QVariant &value) const +QString AWFloatFormatter::convert(const QVariant &_value) const { - qCDebug(LOG_AW) << "Convert value" << value; + qCDebug(LOG_AW) << "Convert value" << _value; - return QString("%1").arg(value.toDouble() * m_multiplier + m_summand, - m_width, m_format, m_precision, m_fillChar); + return QString("%1").arg(_value.toDouble() * m_multiplier + m_summand, + m_count, m_format, m_precision, m_fillChar); +} + + +AWFloatFormatter *AWFloatFormatter::copy(const QString _fileName) +{ + qCDebug(LOG_LIB) << "File" << _fileName; + + AWFloatFormatter *item + = new AWFloatFormatter(static_cast(parent()), _fileName); + copyDefaults(item); + item->setCount(count()); + item->setFormat(format()); + item->setFillChar(fillChar()); + item->setMultiplier(multiplier()); + item->setPrecision(precision()); + item->setSummand(summand()); + + return item; +} + + +int AWFloatFormatter::count() const +{ + return m_count; } @@ -95,9 +131,11 @@ double AWFloatFormatter::summand() const } -int AWFloatFormatter::width() const +void AWFloatFormatter::setCount(const int _count) { - return m_width; + qCDebug(LOG_AW) << "Set width" << _count; + + m_count = _count; } @@ -147,30 +185,90 @@ void AWFloatFormatter::setSummand(const double _summand) } -void AWFloatFormatter::setWidth(const int _width) +void AWFloatFormatter::readConfiguration() { - qCDebug(LOG_AW) << "Set width" << _width; + AWAbstractFormatter::readConfiguration(); - m_width = _width; -} + QSettings settings(fileName(), QSettings::IniFormat); - -void AWFloatFormatter::init(const QString filename, const QString section) -{ - qCDebug(LOG_AW) << "Looking for section" << section << "in" << filename; - - QSettings settings(filename, QSettings::IniFormat); - - settings.beginGroup(section); + settings.beginGroup(QString("Desktop Entry")); + setCount(settings.value(QString("Width"), m_count).toInt()); setFillChar( - settings.value(QString("FillChar"), QString()).toString().at(0)); - setFormat(settings.value(QString("Format"), QString("f")) + settings.value(QString("FillChar"), m_fillChar).toString().at(0)); + setFormat(settings.value(QString("Format"), QString(m_format)) .toString() .at(0) .toLatin1()); - setMultiplier(settings.value(QString("Multiplier"), 1.0).toDouble()); - setPrecision(settings.value(QString("Precision"), -1).toInt()); - setSummand(settings.value(QString("Summand"), 0.0).toDouble()); - setWidth(settings.value(QString("Width"), 0).toInt()); + setMultiplier( + settings.value(QString("Multiplier"), m_multiplier).toDouble()); + setPrecision(settings.value(QString("Precision"), m_precision).toInt()); + setSummand(settings.value(QString("Summand"), m_summand).toDouble()); settings.endGroup(); } + + +int AWFloatFormatter::showConfiguration(const QVariant args) +{ + Q_UNUSED(args) + + ui->lineEdit_name->setText(name()); + ui->lineEdit_comment->setText(comment()); + ui->label_typeValue->setText(QString("Float")); + ui->comboBox_format->setCurrentIndex( + ui->comboBox_format->findText(QString(m_format))); + ui->spinBox_precision->setValue(m_precision); + ui->spinBox_width->setValue(m_count); + ui->lineEdit_fill->setText(QString(m_fillChar)); + ui->doubleSpinBox_multiplier->setValue(m_multiplier); + ui->doubleSpinBox_summand->setValue(m_summand); + + int ret = exec(); + if (ret != 1) + return ret; + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setType(ui->label_typeValue->text()); + setFormat(ui->comboBox_format->currentText().at(0).toLatin1()); + setPrecision(ui->spinBox_precision->value()); + setCount(ui->spinBox_width->value()); + setFillChar(ui->lineEdit_fill->text().at(0)); + setMultiplier(ui->doubleSpinBox_multiplier->value()); + setSummand(ui->doubleSpinBox_summand->value()); + + writeConfiguration(); + return ret; +} + + +void AWFloatFormatter::writeConfiguration() const +{ + AWAbstractFormatter::writeConfiguration(); + + QSettings settings(writtableConfig(), QSettings::IniFormat); + qCInfo(LOG_LIB) << "Configuration file" << settings.fileName(); + + settings.beginGroup(QString("Desktop Entry")); + settings.setValue(QString("Width"), m_count); + settings.setValue(QString("FillChar"), m_fillChar); + settings.setValue(QString("Format"), m_format); + settings.setValue(QString("Multiplier"), m_multiplier); + settings.setValue(QString("Precision"), m_precision); + settings.setValue(QString("Summand"), m_summand); + settings.endGroup(); + + settings.sync(); +} + + +void AWFloatFormatter::translate() +{ + ui->label_name->setText(i18n("Name")); + ui->label_comment->setText(i18n("Comment")); + ui->label_type->setText(i18n("Type")); + ui->label_format->setText(i18n("Format")); + ui->label_precision->setText(i18n("Precision")); + ui->label_width->setText(i18n("Width")); + ui->label_fill->setText(i18n("Fill char")); + ui->label_multiplier->setText(i18n("Multiplier")); + ui->label_summand->setText(i18n("Summand")); +} diff --git a/sources/awesome-widget/plugin/awfloatformatter.h b/sources/awesome-widget/plugin/awfloatformatter.h index 2ee36c8..1a9b28f 100644 --- a/sources/awesome-widget/plugin/awfloatformatter.h +++ b/sources/awesome-widget/plugin/awfloatformatter.h @@ -21,48 +21,59 @@ #include "awabstractformatter.h" +namespace Ui +{ +class AWFloatFormatter; +} + class AWFloatFormatter : public AWAbstractFormatter { Q_OBJECT + Q_PROPERTY(int count READ count WRITE setCount) Q_PROPERTY(QChar fillChar READ fillChar WRITE setFillChar) Q_PROPERTY(char format READ format WRITE setFormat) Q_PROPERTY(double multiplier READ multiplier WRITE setMultiplier) Q_PROPERTY(int precision READ precision WRITE setPrecision) Q_PROPERTY(double summand READ summand WRITE setSummand) - Q_PROPERTY(int width READ width WRITE setWidth) public: - explicit AWFloatFormatter(QObject *parent, const QString filename, - const QString section); - explicit AWFloatFormatter(QObject *parent, const QChar fillChar, + explicit AWFloatFormatter(QWidget *parent, const QString filePath); + explicit AWFloatFormatter(const int count, const QChar fillChar, const char format, const double multiplier, const int precision, const double summand, - const int width); + QWidget *parent); virtual ~AWFloatFormatter(); - QString convert(const QVariant &value) const; + QString convert(const QVariant &_value) const; + AWFloatFormatter *copy(const QString _fileName); // properties + int count() const; QChar fillChar() const; char format() const; double multiplier() const; int precision() const; double summand() const; - int width() const; + void setCount(const int _count); void setFillChar(const QChar _fillChar); void setFormat(char _format); void setMultiplier(const double _multiplier); void setPrecision(const int _precision); void setSummand(const double _summand); - void setWidth(const int _width); + +public slots: + void readConfiguration(); + int showConfiguration(const QVariant args = QVariant()); + void writeConfiguration() const; private: - void init(const QString filename, const QString section); + Ui::AWFloatFormatter *ui; + void translate(); // properties - QChar m_fillChar; - char m_format; - double m_multiplier; - int m_precision; - double m_summand; - int m_width; + int m_count = 0; + QChar m_fillChar = QChar(); + char m_format = 'f'; + double m_multiplier = 1.0; + int m_precision = -1; + double m_summand = 0.0; }; diff --git a/sources/awesome-widget/plugin/awfloatformatter.ui b/sources/awesome-widget/plugin/awfloatformatter.ui new file mode 100644 index 0000000..8d6a1e6 --- /dev/null +++ b/sources/awesome-widget/plugin/awfloatformatter.ui @@ -0,0 +1,317 @@ + + + AWFloatFormatter + + + + 0 + 0 + 420 + 315 + + + + Configuration + + + + + + + + + 0 + 0 + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + 0 + 0 + + + + Comment + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + Format + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + e + + + + + E + + + + + f + + + + + g + + + + + G + + + + + + + + + + + + Precision + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + -1 + + + 10000 + + + + + + + + + + + Width + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + -10000 + + + 10000 + + + + + + + + + + + + 0 + 0 + + + + Fill char + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 1 + + + + + + + + + Qt::Horizontal + + + + + + + + + Multiplier + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + -1000000000.000000000000000 + + + 1000000000.000000000000000 + + + + + + + + + + + Summand + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + -1000000000.000000000000000 + + + 1000000000.000000000000000 + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + AWFloatFormatter + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AWFloatFormatter + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/sources/awesome-widget/plugin/awformatterhelper.cpp b/sources/awesome-widget/plugin/awformatterhelper.cpp index aa6cd4f..cac9759 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.cpp +++ b/sources/awesome-widget/plugin/awformatterhelper.cpp @@ -17,6 +17,7 @@ #include "awformatterhelper.h" +#include #include #include @@ -32,11 +33,10 @@ AWFormatterHelper::AWFormatterHelper(QObject *parent) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - m_genericConfig = QString("%1/awesomewidgets/general.ini") - .arg(QStandardPaths::writableLocation( - QStandardPaths::GenericDataLocation)); #ifdef BUILD_FUTURE - init(); + installDirectories(); + initFormatters(); + initKeys(); #endif /* BUILD_FUTURE */ } @@ -46,6 +46,7 @@ AWFormatterHelper::~AWFormatterHelper() qCDebug(LOG_AW) << __PRETTY_FUNCTION__; m_formatters.clear(); + m_formattersClasses.clear(); } @@ -65,17 +66,16 @@ QStringList AWFormatterHelper::definedFormatters() const } -AWFormatterHelper::FormatterClass -AWFormatterHelper::defineFormatterClass(const QString name) const +QStringList AWFormatterHelper::knownFormatters() const { - qCDebug(LOG_AW) << "Define formatter class for" << name; + return m_formattersClasses.keys(); +} - QSettings settings(m_genericConfig, QSettings::IniFormat); - settings.beginGroup(name); - QString stringType - = settings.value(QString("Type"), QString("NoFormat")).toString(); - settings.endGroup(); +AWFormatterHelper::FormatterClass +AWFormatterHelper::defineFormatterClass(const QString stringType) const +{ + qCDebug(LOG_AW) << "Define formatter class for" << stringType; FormatterClass formatter = FormatterClass::NoFormat; if (stringType == QString("DateTime")) @@ -91,35 +91,97 @@ AWFormatterHelper::defineFormatterClass(const QString name) const } -void AWFormatterHelper::init() +void AWFormatterHelper::initFormatters() { - QSettings settings(m_genericConfig, QSettings::IniFormat); + m_formattersClasses.clear(); + for (int i = m_directories.count() - 1; i >= 0; i--) { + QStringList files + = QDir(m_directories.at(i)).entryList(QDir::Files, QDir::Name); + for (auto file : files) { + if (!file.endsWith(QString(".desktop"))) + continue; + qCInfo(LOG_LIB) << "Found file" << file << "in" + << m_directories.at(i); + QString filePath + = QString("%1/%2").arg(m_directories.at(i)).arg(file); + auto metadata = readMetadata(filePath); + QString name = metadata.first; + if (m_formattersClasses.contains(name)) + continue; + + + switch (metadata.second) { + case FormatterClass::DateTime: + m_formattersClasses[name] + = new AWDateTimeFormatter(nullptr, filePath); + break; + case FormatterClass::Float: + m_formattersClasses[name] + = new AWFloatFormatter(nullptr, filePath); + break; + case FormatterClass::Script: + m_formattersClasses[name] + = new AWScriptFormatter(nullptr, filePath); + break; + case FormatterClass::NoFormat: + m_formattersClasses[name] + = new AWNoFormatter(nullptr, filePath); + break; + } + } + } +} + + +void AWFormatterHelper::initKeys() +{ + m_formatters.clear(); + + QSettings settings(m_formatterConfig, QSettings::IniFormat); settings.beginGroup(QString("Formatters")); QStringList keys = settings.childKeys(); for (auto key : keys) { QString name = settings.value(key).toString(); - FormatterClass formatter = defineFormatterClass(name); - qCInfo(LOG_AW) << "Found formatter" << name << "for key" << key - << "defined as" << static_cast(formatter); - - switch (formatter) { - case FormatterClass::DateTime: - m_formatters[key] - = new AWDateTimeFormatter(this, m_genericConfig, name); - break; - case FormatterClass::Float: - m_formatters[key] - = new AWFloatFormatter(this, m_genericConfig, name); - break; - case FormatterClass::Script: - m_formatters[key] - = new AWScriptFormatter(this, m_genericConfig, name); - break; - case FormatterClass::NoFormat: - m_formatters[key] = new AWNoFormatter(this, m_genericConfig, name); - break; - } + qCInfo(LOG_AW) << "Found formatter" << name << "for key" << key; + m_formatters[key] = m_formattersClasses[name]; } settings.endGroup(); } + + +void AWFormatterHelper::installDirectories() +{ + // create directory at $HOME + QString localDir = QString("%1/awesomewidgets/formatters") + .arg(QStandardPaths::writableLocation( + QStandardPaths::GenericDataLocation)); + QDir localDirectory; + if (localDirectory.mkpath(localDir)) + qCInfo(LOG_LIB) << "Created directory" << localDir; + + m_directories = QStandardPaths::locateAll( + QStandardPaths::GenericDataLocation, + QString("awesomewidgets/formatters"), QStandardPaths::LocateDirectory); + + m_formatterConfig = QString("%1/awesomewidgets/formatters/formatters.ini") + .arg(QStandardPaths::writableLocation( + QStandardPaths::GenericDataLocation)); +} + + +QPair +AWFormatterHelper::readMetadata(const QString filePath) const +{ + qCDebug(LOG_AW) << "Read initial parameters from" << filePath; + + QSettings settings(filePath, QSettings::IniFormat); + settings.beginGroup(QString("Desktop Entry")); + QString name = settings.value(QString("Name"), filePath).toString(); + QString type + = settings.value(QString("Type"), QString("NoFormat")).toString(); + FormatterClass formatter = defineFormatterClass(type); + settings.endGroup(); + + return QPair(name, formatter); +} diff --git a/sources/awesome-widget/plugin/awformatterhelper.h b/sources/awesome-widget/plugin/awformatterhelper.h index 784f5f9..779dd36 100644 --- a/sources/awesome-widget/plugin/awformatterhelper.h +++ b/sources/awesome-widget/plugin/awformatterhelper.h @@ -35,14 +35,21 @@ public: virtual ~AWFormatterHelper(); QString convert(const QVariant &value, const QString name) const; QStringList definedFormatters() const; + QStringList knownFormatters() const; private: AWFormatterHelper::FormatterClass - defineFormatterClass(const QString name) const; - void init(); + defineFormatterClass(const QString stringType) const; + void initFormatters(); + void initKeys(); + void installDirectories(); + QPair + readMetadata(const QString filePath) const; // properties - QString m_genericConfig; + QStringList m_directories; + QString m_formatterConfig; QHash m_formatters; + QHash m_formattersClasses; }; diff --git a/sources/awesome-widget/plugin/awnoformatter.cpp b/sources/awesome-widget/plugin/awnoformatter.cpp index f36a2b5..a7903a2 100644 --- a/sources/awesome-widget/plugin/awnoformatter.cpp +++ b/sources/awesome-widget/plugin/awnoformatter.cpp @@ -17,43 +17,87 @@ #include "awnoformatter.h" +#include "ui_awnoformatter.h" + +#include #include "awdebug.h" -AWNoFormatter::AWNoFormatter(QObject *parent, const QString filename, - const QString section) - : AWAbstractFormatter(parent, filename, section) +AWNoFormatter::AWNoFormatter(QWidget *parent, const QString filePath) + : AWAbstractFormatter(parent, filePath) + , ui(new Ui::AWNoFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - init(filename, section); + readConfiguration(); + ui->setupUi(this); + translate(); } -AWNoFormatter::AWNoFormatter(QObject *parent) +AWNoFormatter::AWNoFormatter(QWidget *parent) : AWAbstractFormatter(parent) + , ui(new Ui::AWNoFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + ui->setupUi(this); + translate(); } AWNoFormatter::~AWNoFormatter() { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + delete ui; } -QString AWNoFormatter::convert(const QVariant &value) const +QString AWNoFormatter::convert(const QVariant &_value) const { - qCDebug(LOG_AW) << "Convert value" << value; + qCDebug(LOG_AW) << "Convert value" << _value; - return value.toString(); + return _value.toString(); } -void AWNoFormatter::init(const QString filename, const QString section) +AWNoFormatter *AWNoFormatter::copy(const QString _fileName) { - qCDebug(LOG_AW) << "Looking for section" << section << "in" << filename; - // dummy method for future references + qCDebug(LOG_LIB) << "File" << _fileName; + + AWNoFormatter *item + = new AWNoFormatter(static_cast(parent()), _fileName); + copyDefaults(item); + + return item; +} + + +int AWNoFormatter::showConfiguration(const QVariant args) +{ + Q_UNUSED(args) + + ui->lineEdit_name->setText(name()); + ui->lineEdit_comment->setText(comment()); + ui->label_typeValue->setText(QString("NoFormat")); + + int ret = exec(); + if (ret != 1) + return ret; + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setType(ui->label_typeValue->text()); + + writeConfiguration(); + return ret; +} + + +void AWNoFormatter::translate() +{ + ui->label_name->setText(i18n("Name")); + ui->label_comment->setText(i18n("Comment")); + ui->label_type->setText(i18n("Type")); } diff --git a/sources/awesome-widget/plugin/awnoformatter.h b/sources/awesome-widget/plugin/awnoformatter.h index 0251b50..77b50c7 100644 --- a/sources/awesome-widget/plugin/awnoformatter.h +++ b/sources/awesome-widget/plugin/awnoformatter.h @@ -21,19 +21,28 @@ #include "awabstractformatter.h" +namespace Ui +{ +class AWNoFormatter; +} + class AWNoFormatter : public AWAbstractFormatter { Q_OBJECT public: - explicit AWNoFormatter(QObject *parent, const QString filename, - const QString section); - explicit AWNoFormatter(QObject *parent); + explicit AWNoFormatter(QWidget *parent, const QString filePath); + explicit AWNoFormatter(QWidget *parent); virtual ~AWNoFormatter(); - QString convert(const QVariant &value) const; + QString convert(const QVariant &_value) const; + AWNoFormatter *copy(const QString _fileName); + +public slots: + int showConfiguration(const QVariant args = QVariant()); private: - void init(const QString filename, const QString section); + Ui::AWNoFormatter *ui; + void translate(); // properties }; diff --git a/sources/awesome-widget/plugin/awnoformatter.ui b/sources/awesome-widget/plugin/awnoformatter.ui new file mode 100644 index 0000000..8112539 --- /dev/null +++ b/sources/awesome-widget/plugin/awnoformatter.ui @@ -0,0 +1,144 @@ + + + AWNoFormatter + + + + 0 + 0 + 420 + 128 + + + + Configuration + + + + + + + + + 0 + 0 + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + 0 + 0 + + + + Comment + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + AWNoFormatter + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AWNoFormatter + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/sources/awesome-widget/plugin/awscriptformatter.cpp b/sources/awesome-widget/plugin/awscriptformatter.cpp index 0f056d2..d2b1eaa 100644 --- a/sources/awesome-widget/plugin/awscriptformatter.cpp +++ b/sources/awesome-widget/plugin/awscriptformatter.cpp @@ -17,27 +17,33 @@ #include "awscriptformatter.h" +#include "ui_awscriptformatter.h" +#include + +#include #include #include #include "awdebug.h" -AWScriptFormatter::AWScriptFormatter(QObject *parent, const QString filename, - const QString section) - : AWAbstractFormatter(parent, filename, section) +AWScriptFormatter::AWScriptFormatter(QWidget *parent, const QString filePath) + : AWAbstractFormatter(parent, filePath) + , ui(new Ui::AWScriptFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; - init(filename, section); - initProgram(); + readConfiguration(); + ui->setupUi(this); + translate(); } -AWScriptFormatter::AWScriptFormatter(QObject *parent, const bool appendCode, - const QString code, const bool hasReturn) +AWScriptFormatter::AWScriptFormatter(const bool appendCode, const QString code, + const bool hasReturn, QWidget *parent) : AWAbstractFormatter(parent) + , ui(new Ui::AWScriptFormatter) { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; @@ -45,23 +51,28 @@ AWScriptFormatter::AWScriptFormatter(QObject *parent, const bool appendCode, setCode(code); setHasReturn(hasReturn); initProgram(); + + ui->setupUi(this); + translate(); } AWScriptFormatter::~AWScriptFormatter() { qCDebug(LOG_AW) << __PRETTY_FUNCTION__; + + delete ui; } -QString AWScriptFormatter::convert(const QVariant &value) const +QString AWScriptFormatter::convert(const QVariant &_value) const { - qCDebug(LOG_AW) << "Convert value" << value; + qCDebug(LOG_AW) << "Convert value" << _value; // init engine QJSEngine engine; QJSValue fn = engine.evaluate(m_program); - QJSValueList args = QJSValueList() << value.toString(); + QJSValueList args = QJSValueList() << _value.toString(); QJSValue result = fn.call(args); if (result.isError()) { @@ -75,6 +86,21 @@ QString AWScriptFormatter::convert(const QVariant &value) const } +AWScriptFormatter *AWScriptFormatter::copy(const QString _fileName) +{ + qCDebug(LOG_LIB) << "File" << _fileName; + + AWScriptFormatter *item + = new AWScriptFormatter(static_cast(parent()), _fileName); + copyDefaults(item); + item->setAppendCode(appendCode()); + item->setCode(code()); + item->setHasReturn(hasReturn()); + + return item; +} + + bool AWScriptFormatter::appendCode() const { return m_appendCode; @@ -123,17 +149,65 @@ void AWScriptFormatter::setHasReturn(const bool _hasReturn) } -void AWScriptFormatter::init(const QString filename, const QString section) +void AWScriptFormatter::readConfiguration() { - qCDebug(LOG_AW) << "Looking for section" << section << "in" << filename; + AWAbstractFormatter::readConfiguration(); - QSettings settings(filename, QSettings::IniFormat); + QSettings settings(fileName(), QSettings::IniFormat); - settings.beginGroup(section); - setAppendCode(settings.value(QString("AppendCode"), true).toBool()); - setCode(settings.value(QString("Code"), QString()).toString()); - setHasReturn(settings.value(QString("HasReturn"), false).toBool()); + settings.beginGroup(QString("Desktop Entry")); + setAppendCode(settings.value(QString("AppendCode"), m_appendCode).toBool()); + setCode(settings.value(QString("Code"), m_code).toString()); + setHasReturn(settings.value(QString("HasReturn"), m_hasReturn).toBool()); settings.endGroup(); + + initProgram(); +} + + +int AWScriptFormatter::showConfiguration(const QVariant args) +{ + Q_UNUSED(args) + + ui->lineEdit_name->setText(name()); + ui->lineEdit_comment->setText(comment()); + ui->label_typeValue->setText(QString("Script")); + ui->checkBox_appendCode->setCheckState(m_appendCode ? Qt::Checked + : Qt::Unchecked); + ui->checkBox_hasReturn->setCheckState(m_hasReturn ? Qt::Checked + : Qt::Unchecked); + ui->textEdit_code->setPlainText(m_code); + + int ret = exec(); + if (ret != 1) + return ret; + setName(ui->lineEdit_name->text()); + setComment(ui->lineEdit_comment->text()); + setType(ui->label_typeValue->text()); + setAppendCode(ui->checkBox_appendCode->checkState() == Qt::Checked); + setHasReturn(ui->checkBox_hasReturn->checkState() == Qt::Checked); + setCode(ui->textEdit_code->toPlainText()); + initProgram(); + + writeConfiguration(); + return ret; +} + + +void AWScriptFormatter::writeConfiguration() const +{ + AWAbstractFormatter::writeConfiguration(); + + QSettings settings(writtableConfig(), QSettings::IniFormat); + qCInfo(LOG_LIB) << "Configuration file" << settings.fileName(); + + settings.beginGroup(QString("Desktop Entry")); + settings.setValue(QString("AppendCode"), m_appendCode); + settings.setValue(QString("Code"), m_code); + settings.setValue(QString("HasReturn"), m_hasReturn); + settings.endGroup(); + + settings.sync(); } @@ -149,3 +223,14 @@ void AWScriptFormatter::initProgram() qCInfo(LOG_AW) << "Create JS engine with code" << m_program; } + + +void AWScriptFormatter::translate() +{ + ui->label_name->setText(i18n("Name")); + ui->label_comment->setText(i18n("Comment")); + ui->label_type->setText(i18n("Type")); + ui->checkBox_appendCode->setText(i18n("Append code")); + ui->checkBox_hasReturn->setText(i18n("Has return")); + ui->label_code->setText(i18n("Code")); +} diff --git a/sources/awesome-widget/plugin/awscriptformatter.h b/sources/awesome-widget/plugin/awscriptformatter.h index 1749e90..3939917 100644 --- a/sources/awesome-widget/plugin/awscriptformatter.h +++ b/sources/awesome-widget/plugin/awscriptformatter.h @@ -21,6 +21,11 @@ #include "awabstractformatter.h" +namespace Ui +{ +class AWScriptFormatter; +} + class AWScriptFormatter : public AWAbstractFormatter { Q_OBJECT @@ -30,12 +35,12 @@ class AWScriptFormatter : public AWAbstractFormatter Q_PROPERTY(QString program READ program) public: - explicit AWScriptFormatter(QObject *parent, const QString filename, - const QString section); - explicit AWScriptFormatter(QObject *parent, const bool appendCode, - const QString code, const bool hasReturn); + explicit AWScriptFormatter(QWidget *parent, const QString filePath); + explicit AWScriptFormatter(const bool appendCode, const QString code, + const bool hasReturn, QWidget *parent); virtual ~AWScriptFormatter(); - QString convert(const QVariant &value) const; + QString convert(const QVariant &_value) const; + AWScriptFormatter *copy(const QString _fileName); // properties bool appendCode() const; QString code() const; @@ -45,13 +50,19 @@ public: void setCode(const QString _code); void setHasReturn(const bool _hasReturn); +public slots: + void readConfiguration(); + int showConfiguration(const QVariant args = QVariant()); + void writeConfiguration() const; + private: - void init(const QString filename, const QString section); + Ui::AWScriptFormatter *ui; void initProgram(); + void translate(); // properties - bool m_appendCode; - QString m_code; - bool m_hasReturn; + bool m_appendCode = true; + QString m_code = QString(); + bool m_hasReturn = false; QString m_program; }; diff --git a/sources/awesome-widget/plugin/awscriptformatter.ui b/sources/awesome-widget/plugin/awscriptformatter.ui new file mode 100644 index 0000000..a752a0d --- /dev/null +++ b/sources/awesome-widget/plugin/awscriptformatter.ui @@ -0,0 +1,212 @@ + + + AWScriptFormatter + + + + 0 + 0 + 420 + 315 + + + + Configuration + + + + + + + + + 0 + 0 + + + + Name + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + 0 + 0 + + + + Comment + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + Type + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Append code + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Has return + + + + + + + + + Qt::Horizontal + + + + + + + + + Code + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + AWScriptFormatter + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AWScriptFormatter + reject() + + + 316 + 260 + + + 286 + 274 + + + + +