From fa8061d144a31f40ea2ce7f1812fd409fc7ff07b Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 11 Jan 2018 21:37:29 +0100 Subject: [PATCH 01/45] Added context menu to absences view --- plugins/absenceplugin/absencedialog.cpp | 49 +++++++++++++++++++ plugins/absenceplugin/absencedialog.h | 1 + plugins/absenceplugin/absencedialog.ui | 6 ++- plugins/absenceplugin/absencesmodel.cpp | 22 +++++++-- plugins/absenceplugin/absencesmodel.h | 7 +++ .../translations/absenceplugin_de.ts | 41 +++++++++++++--- .../translations/absenceplugin_en.ts | 41 +++++++++++++--- 7 files changed, 147 insertions(+), 20 deletions(-) diff --git a/plugins/absenceplugin/absencedialog.cpp b/plugins/absenceplugin/absencedialog.cpp index e45b41b..3706455 100644 --- a/plugins/absenceplugin/absencedialog.cpp +++ b/plugins/absenceplugin/absencedialog.cpp @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include "absencesmodel.h" @@ -21,6 +23,8 @@ AbsenceDialog::AbsenceDialog(int userId, const QDate &date, ZeiterfassungApi &er ui->treeView->setModel(m_model); ui->treeView->setEnabled(m_model->enabled()); connect(m_model, &AbsencesModel::enabledChanged, ui->treeView, &QWidget::setEnabled); + + connect(ui->treeView, &QWidget::customContextMenuRequested, this, &AbsenceDialog::customContextMenuRequested); } AbsenceDialog::~AbsenceDialog() @@ -32,3 +36,48 @@ void AbsenceDialog::errorOccured(const QString &message) { QMessageBox::warning(this, tr("Could not load absences!"), tr("Could not load absences!") % "\n\n" % message); } + +void AbsenceDialog::customContextMenuRequested(const QPoint &pos) +{ + auto index = ui->treeView->indexAt(pos); + + if(!index.isValid()) + { + QMenu menu; + auto createAction = menu.addAction(tr("Create absence")); + auto refreshAction = menu.addAction(QIcon(QPixmap(QStringLiteral(":/zeiterfassungguilib/images/refresh.png"))), tr("Refresh absences")); + auto selectedAction = menu.exec(ui->treeView->viewport()->mapToGlobal(pos)); + if(selectedAction == createAction) + { + //TODO + } + else if(selectedAction == refreshAction) + { + m_model->refresh(); + } + } + else + { + auto absence = m_model->absences().at(index.row()); + + QMenu menu; + auto editAction = menu.addAction(tr("Edit absence")); + auto deleteAction = menu.addAction(tr("Delete absence")); + auto selectedAction = menu.exec(ui->treeView->viewport()->mapToGlobal(pos)); + if(selectedAction == editAction) + { + //TODO + } + else if(selectedAction == deleteAction) + { + QMessageBox msgBox; + msgBox.setText(tr("Do you really want to delete the absence?")); + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + if(msgBox.exec() == QMessageBox::Yes) + { + //TODO + } + } + } +} diff --git a/plugins/absenceplugin/absencedialog.h b/plugins/absenceplugin/absencedialog.h index f8d0721..9ab7e80 100644 --- a/plugins/absenceplugin/absencedialog.h +++ b/plugins/absenceplugin/absencedialog.h @@ -19,6 +19,7 @@ public: private Q_SLOTS: void errorOccured(const QString &message); + void customContextMenuRequested(const QPoint &pos); private: Ui::AbsenceDialog *ui; diff --git a/plugins/absenceplugin/absencedialog.ui b/plugins/absenceplugin/absencedialog.ui index eb6a823..4db3095 100644 --- a/plugins/absenceplugin/absencedialog.ui +++ b/plugins/absenceplugin/absencedialog.ui @@ -27,7 +27,11 @@ - + + + Qt::CustomContextMenu + + diff --git a/plugins/absenceplugin/absencesmodel.cpp b/plugins/absenceplugin/absencesmodel.cpp index 774bc41..81ac369 100644 --- a/plugins/absenceplugin/absencesmodel.cpp +++ b/plugins/absenceplugin/absencesmodel.cpp @@ -7,6 +7,8 @@ AbsencesModel::AbsencesModel(int userId, const QDate &date, ZeiterfassungApi &er m_userId(userId), m_erfassung(erfassung) { + connect(this, &AbsencesModel::dateChanged, this, &AbsencesModel::refresh); + setDate(date); } @@ -15,6 +17,16 @@ bool AbsencesModel::enabled() const return m_reply == Q_NULLPTR; } +const QDate &AbsencesModel::date() const +{ + return m_date; +} + +const QVector &AbsencesModel::absences() const +{ + return m_absences; +} + int AbsencesModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) @@ -76,10 +88,8 @@ QVariant AbsencesModel::headerData(int section, Qt::Orientation orientation, int return QVariant(); } -void AbsencesModel::setDate(const QDate &date) +void AbsencesModel::refresh() { - m_date = date; - auto oldEnabled = enabled(); m_reply = m_erfassung.doGetAbsences(m_userId, m_date, m_date); @@ -89,6 +99,12 @@ void AbsencesModel::setDate(const QDate &date) Q_EMIT enabledChanged(enabled()); } +void AbsencesModel::setDate(const QDate &date) +{ + if(m_date != date) + Q_EMIT dateChanged(m_date = date); +} + void AbsencesModel::finished() { if(!m_reply->success()) diff --git a/plugins/absenceplugin/absencesmodel.h b/plugins/absenceplugin/absencesmodel.h index 0353e5e..b183f69 100644 --- a/plugins/absenceplugin/absencesmodel.h +++ b/plugins/absenceplugin/absencesmodel.h @@ -13,12 +13,17 @@ class AbsencesModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged) + Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY dateChanged) public: explicit AbsencesModel(int userId, const QDate &date, ZeiterfassungApi &erfassung, QObject *parent = Q_NULLPTR); bool enabled() const; + const QDate &date() const; + + const QVector &absences() const; + // QAbstractItemModel interface int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE; @@ -27,9 +32,11 @@ public: Q_SIGNALS: void enabledChanged(bool enabled); + void dateChanged(const QDate &date); void errorOccured(const QString &message); public Q_SLOTS: + void refresh(); void setDate(const QDate &date); private Q_SLOTS: diff --git a/plugins/absenceplugin/translations/absenceplugin_de.ts b/plugins/absenceplugin/translations/absenceplugin_de.ts index 847675b..131891c 100644 --- a/plugins/absenceplugin/translations/absenceplugin_de.ts +++ b/plugins/absenceplugin/translations/absenceplugin_de.ts @@ -9,20 +9,45 @@ Abwesenheiten - + Absences for %0 Abwesenheiten für %0 - + dd.MM.yyyy dd.MM.yyyy - + Could not load absences! Konnte Abwesenheiten nicht laden! + + + Create absence + Abwesenheit erstellen + + + + Refresh absences + Abwesenheiten aktualisieren + + + + Edit absence + Abwesenheit bearbeiten + + + + Delete absence + Abwesenheit löschen + + + + Do you really want to delete the absence? + Möchten Sie die Abwesenheit wirklich löschen? + AbsenceWidget @@ -35,27 +60,27 @@ AbsencesModel - + Id Id - + Start Start - + End Ende - + Hour Category Stunden Kategorie - + Text Text diff --git a/plugins/absenceplugin/translations/absenceplugin_en.ts b/plugins/absenceplugin/translations/absenceplugin_en.ts index b16ff41..0794cbf 100644 --- a/plugins/absenceplugin/translations/absenceplugin_en.ts +++ b/plugins/absenceplugin/translations/absenceplugin_en.ts @@ -9,20 +9,45 @@ - + Absences for %0 - + dd.MM.yyyy - + Could not load absences! + + + Create absence + + + + + Refresh absences + + + + + Edit absence + + + + + Delete absence + + + + + Do you really want to delete the absence? + + AbsenceWidget @@ -35,27 +60,27 @@ AbsencesModel - + Id - + Start - + End - + Hour Category - + Text -- 2.50.1 From 0fb147a0f7537669a1ac99cede5eb1ad4df81e03 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 11 Jan 2018 21:49:41 +0100 Subject: [PATCH 02/45] Added make install step to .travis.yml --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index afb2677..09cf03d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,7 @@ cache: directories: - qt5 -before_script: +install: - mkdir -p qt5 - if [ ! -d qt5/.git ] ; then rm qt5 -Rf ; git clone --branch=5.10 git://code.qt.io/qt/qt5.git ; fi - pushd qt5 @@ -24,4 +24,5 @@ script: - pushd build - ../qt5/build/bin/qmake .. -config release - make -j2 + - make install - popd -- 2.50.1 From 7b894d46d438945f5101329e0ec20939a514d7cf Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Tue, 13 Feb 2018 06:22:12 +0100 Subject: [PATCH 03/45] Fixed wrong date in now button #63 --- zeiterfassungguilib/mainwindow.cpp | 8 +++++++- zeiterfassungguilib/mainwindow.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index 79eea54..c5e10cf 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -60,7 +60,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); - connect(ui->pushButtonNow, &QAbstractButton::pressed, this, [=](){ ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); }); + connect(ui->pushButtonNow, &QAbstractButton::pressed, this, &MainWindow::pushButtonNowPressed); m_getProjectsReply = erfassung.doGetProjects(userInfo.userId, QDate::currentDate()); connect(m_getProjectsReply.get(), &ZeiterfassungReply::finished, this, &MainWindow::getProjectsFinished); @@ -172,6 +172,12 @@ void MainWindow::getProjectsFinished() m_getProjectsReply = Q_NULLPTR; } +void MainWindow::pushButtonNowPressed() +{ + ui->dateEditDate->setDate(QDate::currentDate()); + ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); +} + void MainWindow::pushButtonStartPressed() { auto bookingsChanged = false; diff --git a/zeiterfassungguilib/mainwindow.h b/zeiterfassungguilib/mainwindow.h index a6e5a5b..940a71f 100644 --- a/zeiterfassungguilib/mainwindow.h +++ b/zeiterfassungguilib/mainwindow.h @@ -52,6 +52,7 @@ Q_SIGNALS: private Q_SLOTS: void getProjectsFinished(); + void pushButtonNowPressed(); void pushButtonStartPressed(); void pushButtonEndPressed(); void dateChangedSlot(const QDate &date); -- 2.50.1 From 0b1fa67af4b42c99a2e20a394408ed74ddf162cb Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Wed, 28 Feb 2018 18:34:42 +0100 Subject: [PATCH 04/45] Implemented timer updating time --- zeiterfassungguilib/mainwindow.cpp | 16 +++++++++++++++- zeiterfassungguilib/mainwindow.h | 6 ++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index c5e10cf..b514a4a 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include "zeiterfassungapi.h" @@ -33,7 +34,8 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), - m_currentStripWidget(Q_NULLPTR) + m_currentStripWidget(Q_NULLPTR), + m_timerId(-1) { ui->setupUi(this); @@ -74,6 +76,8 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); + m_timerId = startTimer(60000); + for(quint8 i = 0; i < 7; i++) { m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek); @@ -154,6 +158,16 @@ const std::array &MainWindow::stripsWidgets() const return m_stripsWidgets; } +void MainWindow::timerEvent(QTimerEvent *event) +{ + if(event->timerId() == m_timerId) + { + ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); + } + else + QMainWindow::timerEvent(event); +} + void MainWindow::getProjectsFinished() { if(m_getProjectsReply->success()) diff --git a/zeiterfassungguilib/mainwindow.h b/zeiterfassungguilib/mainwindow.h index 940a71f..2f1666b 100644 --- a/zeiterfassungguilib/mainwindow.h +++ b/zeiterfassungguilib/mainwindow.h @@ -50,6 +50,10 @@ Q_SIGNALS: void dateChanged(const QDate &date); void refreshEverything(); +protected: + // QObject interface + virtual void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE; + private Q_SLOTS: void getProjectsFinished(); void pushButtonNowPressed(); @@ -76,4 +80,6 @@ private: std::array m_stripsWidgets; StripsWidget *m_currentStripWidget; + + int m_timerId; }; -- 2.50.1 From d8e86051d27bde4e4d53778effdf2a088e0687d5 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Wed, 28 Feb 2018 18:45:57 +0100 Subject: [PATCH 05/45] Time will not be updated anymore after manual change --- zeiterfassungguilib/mainwindow.cpp | 114 +++++++++++++++++------------ 1 file changed, 68 insertions(+), 46 deletions(-) diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index b514a4a..dfd8689 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include "zeiterfassungapi.h" @@ -60,6 +61,13 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonPrev, &QAbstractButton::pressed, this, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(-1)); }); connect(ui->pushButtonNext, &QAbstractButton::pressed, this, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(1)); }); + connect(ui->timeEditTime, &QTimeEdit::timeChanged, this, [&](){ + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } + }); ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); connect(ui->pushButtonNow, &QAbstractButton::pressed, this, &MainWindow::pushButtonNowPressed); @@ -162,6 +170,7 @@ void MainWindow::timerEvent(QTimerEvent *event) { if(event->timerId() == m_timerId) { + QSignalBlocker blocker(ui->timeEditTime); ui->timeEditTime->setTime(timeNormalise(QTime::currentTime())); } else @@ -194,7 +203,11 @@ void MainWindow::pushButtonNowPressed() void MainWindow::pushButtonStartPressed() { - auto bookingsChanged = false; + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } if(m_currentStripWidget->bookings().rbegin() == m_currentStripWidget->bookings().rend() || m_currentStripWidget->bookings().rbegin()->type == QStringLiteral("G")) @@ -209,55 +222,55 @@ void MainWindow::pushButtonStartPressed() { QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } - - bookingsChanged = true; } - auto timeAssignmentTime = m_currentStripWidget->timeAssignmentTime(); - - if(m_currentStripWidget->timeAssignments().rbegin() != m_currentStripWidget->timeAssignments().rend()) { - auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); - if(timeAssignment.timespan == QTime(0, 0)) - { - auto timespan = timeBetween(m_currentStripWidget->lastTimeAssignmentStart(), ui->timeEditTime->time()); + auto timeAssignmentTime = m_currentStripWidget->timeAssignmentTime(); - auto reply = m_erfassung.doUpdateTimeAssignment(timeAssignment.id, m_userInfo.userId, timeAssignment.date, - timeAssignment.time, timespan, - timeAssignment.project, timeAssignment.subproject, - timeAssignment.workpackage, timeAssignment.text); + if(m_currentStripWidget->timeAssignments().rbegin() != m_currentStripWidget->timeAssignments().rend()) + { + auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); + if(timeAssignment.timespan == QTime(0, 0)) + { + auto timespan = timeBetween(m_currentStripWidget->lastTimeAssignmentStart(), ui->timeEditTime->time()); + + auto reply = m_erfassung.doUpdateTimeAssignment(timeAssignment.id, m_userInfo.userId, timeAssignment.date, + timeAssignment.time, timespan, + timeAssignment.project, timeAssignment.subproject, + timeAssignment.workpackage, timeAssignment.text); + + reply->waitForFinished(); + + if(reply->success()) + timeAssignmentTime = timeAdd(timeAssignmentTime, timespan); + else + { + QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); + m_currentStripWidget->refresh(); + goto after; + } + } + } + + { + auto reply = m_erfassung.doCreateTimeAssignment(m_userInfo.userId, ui->dateEditDate->date(), + timeAssignmentTime, QTime(0, 0), + ui->comboBoxProject->currentData().toString(), ui->comboBoxSubproject->currentText(), + ui->comboBoxWorkpackage->currentText(), ui->comboBoxText->currentText()); reply->waitForFinished(); - if(reply->success()) - timeAssignmentTime = timeAdd(timeAssignmentTime, timespan); - else + if(!reply->success()) { - QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); + QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } } - { - auto reply = m_erfassung.doCreateTimeAssignment(m_userInfo.userId, ui->dateEditDate->date(), - timeAssignmentTime, QTime(0, 0), - ui->comboBoxProject->currentData().toString(), ui->comboBoxSubproject->currentText(), - ui->comboBoxWorkpackage->currentText(), ui->comboBoxText->currentText()); - - reply->waitForFinished(); - - if(!reply->success()) - { - QMessageBox::warning(this, tr("Could not create time assignment!"), tr("Could not create time assignment!") % "\n\n" % reply->message()); - m_currentStripWidget->refresh(); - return; - } - } - m_settings.prependProject(ui->comboBoxProject->currentData().toString()); m_settings.prependSubproject(ui->comboBoxSubproject->currentText()); m_settings.prependWorkpackage(ui->comboBoxWorkpackage->currentText()); @@ -265,17 +278,22 @@ void MainWindow::pushButtonStartPressed() updateComboboxes(); - if(bookingsChanged) - { - m_currentStripWidget->refresh(); - //refreshReport(); - } - else - m_currentStripWidget->refreshTimeAssignments(); + //m_currentStripWidget->refresh(); + //refreshReport(); + Q_EMIT refreshEverything(); + + after: + m_timerId = startTimer(60000); } void MainWindow::pushButtonEndPressed() { + if(m_timerId != -1) + { + killTimer(m_timerId); + m_timerId = -1; + } + { auto timeAssignment = *m_currentStripWidget->timeAssignments().rbegin(); Q_ASSERT(timeAssignment.timespan == QTime(0, 0)); @@ -293,7 +311,7 @@ void MainWindow::pushButtonEndPressed() { QMessageBox::warning(this, tr("Could not edit time assignment!"), tr("Could not edit time assignment!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } @@ -308,12 +326,16 @@ void MainWindow::pushButtonEndPressed() { QMessageBox::warning(this, tr("Could not create booking!"), tr("Could not create booking!") % "\n\n" % reply->message()); m_currentStripWidget->refresh(); - return; + goto after; } } - m_currentStripWidget->refresh(); + //m_currentStripWidget->refresh(); //refreshReport(); + Q_EMIT refreshEverything(); + + after: + m_timerId = startTimer(60000); } void MainWindow::dateChangedSlot(const QDate &date) -- 2.50.1 From 89d4748117bce9d80a83fde6286ba3e527170848 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 13:28:20 +0100 Subject: [PATCH 06/45] Added plugin settings widget factory method --- zeiterfassungguilib/zeiterfassungplugin.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/zeiterfassungguilib/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index ed50fb2..4e447c7 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -15,6 +15,8 @@ public: explicit ZeiterfassungPlugin(QObject *parent = Q_NULLPTR); virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } + + virtual QWidget *settingsWidget(QWidget *parent = Q_NULLPTR) { Q_UNUSED(parent) return Q_NULLPTR; } }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0") -- 2.50.1 From 237be4ffe5910e5f2945ef5713a5934335092d01 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 13:32:50 +0100 Subject: [PATCH 07/45] Added SettingsWidget class --- zeiterfassungguilib/settingswidget.cpp | 7 +++++++ zeiterfassungguilib/settingswidget.h | 19 +++++++++++++++++++ zeiterfassungguilib/zeiterfassungguilib.pro | 2 ++ zeiterfassungguilib/zeiterfassungplugin.h | 3 ++- 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 zeiterfassungguilib/settingswidget.cpp create mode 100644 zeiterfassungguilib/settingswidget.h diff --git a/zeiterfassungguilib/settingswidget.cpp b/zeiterfassungguilib/settingswidget.cpp new file mode 100644 index 0000000..d4c4878 --- /dev/null +++ b/zeiterfassungguilib/settingswidget.cpp @@ -0,0 +1,7 @@ +#include "settingswidget.h" + +SettingsWidget::SettingsWidget(QWidget *parent) : + QWidget(parent) +{ + +} diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h new file mode 100644 index 0000000..d1d7a40 --- /dev/null +++ b/zeiterfassungguilib/settingswidget.h @@ -0,0 +1,19 @@ +#ifndef SETTINGSWIDGET_H +#define SETTINGSWIDGET_H + +#include +#include + +#include "zeiterfassungguilib_global.h" + +class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget +{ + Q_OBJECT +public: + explicit SettingsWidget(QWidget *parent = nullptr); + +public Q_SLOTS: + virtual void apply() { } +}; + +#endif // SETTINGSWIDGET_H diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index a3e9a2d..30e4962 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -18,6 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA DEFINES += ZEITERFASSUNGGUILIB_LIBRARY SOURCES += mainwindow.cpp \ + settingswidget.cpp \ stripfactory.cpp \ stripswidget.cpp \ zeiterfassungdialog.cpp \ @@ -27,6 +28,7 @@ SOURCES += mainwindow.cpp \ dialogs/settingsdialog.cpp HEADERS += mainwindow.h \ + settingswidget.h \ stripfactory.h \ stripswidget.h \ zeiterfassungguilib_global.h \ diff --git a/zeiterfassungguilib/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index 4e447c7..df265f2 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -6,6 +6,7 @@ class MainWindow; class StripsWidget; +class SettingsWidget; class ZEITERFASSUNGGUILIBSHARED_EXPORT ZeiterfassungPlugin : public QObject { @@ -16,7 +17,7 @@ public: virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } - virtual QWidget *settingsWidget(QWidget *parent = Q_NULLPTR) { Q_UNUSED(parent) return Q_NULLPTR; } + virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) { Q_UNUSED(parent) return Q_NULLPTR; } }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0") -- 2.50.1 From 942be5a42edd3b472d8c5e8a777d59bea62fe819 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 13:39:38 +0100 Subject: [PATCH 08/45] Added WeatherSettings --- plugins/weatherplugin/weatherplugin.cpp | 6 ++++++ plugins/weatherplugin/weatherplugin.h | 2 ++ plugins/weatherplugin/weatherplugin.pro | 2 ++ plugins/weatherplugin/weathersettings.cpp | 20 ++++++++++++++++++++ plugins/weatherplugin/weathersettings.h | 18 ++++++++++++++++++ zeiterfassungguilib/settingswidget.h | 2 +- 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 plugins/weatherplugin/weathersettings.cpp create mode 100644 plugins/weatherplugin/weathersettings.h diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index b308b11..35842f3 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -9,6 +9,7 @@ #include "mainwindow.h" #include "weatherwidget.h" +#include "weathersettings.h" WeatherPlugin::WeatherPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -34,3 +35,8 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) { mainWindow.statusBar()->addWidget(new WeatherWidget(mainWindow)); } + +SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) +{ + return new WeatherSettings(parent); +} diff --git a/plugins/weatherplugin/weatherplugin.h b/plugins/weatherplugin/weatherplugin.h index 07f4f68..f9d7b79 100644 --- a/plugins/weatherplugin/weatherplugin.h +++ b/plugins/weatherplugin/weatherplugin.h @@ -17,6 +17,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/weatherplugin/weatherplugin.pro b/plugins/weatherplugin/weatherplugin.pro index 02016bc..398a0a2 100644 --- a/plugins/weatherplugin/weatherplugin.pro +++ b/plugins/weatherplugin/weatherplugin.pro @@ -17,9 +17,11 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += weatherplugin.h \ + weathersettings.h \ weatherwidget.h SOURCES += weatherplugin.cpp \ + weathersettings.cpp \ weatherwidget.cpp FORMS += diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp new file mode 100644 index 0000000..946ac68 --- /dev/null +++ b/plugins/weatherplugin/weathersettings.cpp @@ -0,0 +1,20 @@ +#include "weathersettings.h" + +#include +#include +#include + +WeatherSettings::WeatherSettings(QWidget *parent) : + SettingsWidget(parent) +{ + auto layout = new QFormLayout(this); + + layout->addRow(tr("Weather API:"), new QLineEdit(this)); + + setLayout(layout); +} + +void WeatherSettings::apply() +{ + qDebug() << "called"; +} diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h new file mode 100644 index 0000000..e65e53c --- /dev/null +++ b/plugins/weatherplugin/weathersettings.h @@ -0,0 +1,18 @@ +#ifndef WEATHERSETTINGS_H +#define WEATHERSETTINGS_H + +#include + +#include "settingswidget.h" + +class WeatherSettings : public SettingsWidget +{ + Q_OBJECT +public: + explicit WeatherSettings(QWidget *parent = Q_NULLPTR); + +public Q_SLOTS: + void apply() Q_DECL_OVERRIDE; +}; + +#endif // WEATHERSETTINGS_H diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h index d1d7a40..dc3dd6b 100644 --- a/zeiterfassungguilib/settingswidget.h +++ b/zeiterfassungguilib/settingswidget.h @@ -10,7 +10,7 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget { Q_OBJECT public: - explicit SettingsWidget(QWidget *parent = nullptr); + explicit SettingsWidget(QWidget *parent = Q_NULLPTR); public Q_SLOTS: virtual void apply() { } -- 2.50.1 From 7cea7aed9ccc2776f006475eeed90fbdcb3dfb4c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 13:54:21 +0100 Subject: [PATCH 09/45] Plugins now get stored in a QSet --- plugins/weatherplugin/weatherplugin.cpp | 2 +- plugins/weatherplugin/weatherplugin.h | 2 +- zeiterfassung/main.cpp | 25 ++++--- zeiterfassungguilib/dialogs/settingsdialog.ui | 75 ++++++++++++------- zeiterfassungguilib/mainwindow.cpp | 3 +- zeiterfassungguilib/mainwindow.h | 4 +- zeiterfassungguilib/zeiterfassungplugin.h | 2 +- 7 files changed, 69 insertions(+), 44 deletions(-) diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index 35842f3..04d6066 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -36,7 +36,7 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) mainWindow.statusBar()->addWidget(new WeatherWidget(mainWindow)); } -SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) +SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) const { return new WeatherSettings(parent); } diff --git a/plugins/weatherplugin/weatherplugin.h b/plugins/weatherplugin/weatherplugin.h index f9d7b79..9ad7646 100644 --- a/plugins/weatherplugin/weatherplugin.h +++ b/plugins/weatherplugin/weatherplugin.h @@ -17,7 +17,7 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; - SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; private: QTranslator m_translator; diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index dc8fc86..7dbc081 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -34,7 +34,8 @@ struct { QTranslator zeiterfassungguilibTranslator; } translators; -QVector > pluginLoaders; +QSet > pluginLoaders; +QSet plugins; bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) { @@ -290,7 +291,16 @@ bool loadPlugins(QSplashScreen &splashScreen) continue; } - pluginLoaders.append(pluginLoader); + if(auto plugin = qobject_cast(pluginLoader->instance())) + { + pluginLoaders.insert(pluginLoader); + plugins.insert(plugin); + } + else + QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"), + QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader->fileName()) % + "\n\n" % pluginLoader->errorString()); + } return ok; @@ -350,16 +360,11 @@ int main(int argc, char *argv[]) loadPlugins(splashScreen); - MainWindow mainWindow(settings, erfassung, userInfo, stripFactory); + MainWindow mainWindow(settings, erfassung, userInfo, stripFactory, plugins); splashScreen.finish(&mainWindow); - for(auto &pluginLoader : pluginLoaders) - if(auto plugin = qobject_cast(pluginLoader->instance())) - plugin->attachTo(mainWindow); - else - QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"), - QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader->fileName()) % - "\n\n" % pluginLoader->errorString()); + for(auto &plugin : plugins) + plugin->attachTo(mainWindow); mainWindow.show(); diff --git a/zeiterfassungguilib/dialogs/settingsdialog.ui b/zeiterfassungguilib/dialogs/settingsdialog.ui index b43be14..f1eed28 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.ui +++ b/zeiterfassungguilib/dialogs/settingsdialog.ui @@ -6,8 +6,8 @@ 0 0 - 647 - 162 + 340 + 164 @@ -19,7 +19,7 @@ Settings - + @@ -33,35 +33,52 @@ - - - - - Language: - - - comboBoxLanguage - - - - - - - - - - Theme: - - - comboBoxTheme - - - - - + + + + + + + Language: + + + comboBoxLanguage + + + + + + + + + + Theme: + + + comboBoxTheme + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index dfd8689..a456487 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -28,13 +28,14 @@ #include "replies/updatetimeassignmentreply.h" MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo, - StripFactory &stripFactory, QWidget *parent) : + StripFactory &stripFactory, const QSet &plugins, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_settings(settings), m_erfassung(erfassung), m_userInfo(userInfo), m_stripFactory(stripFactory), + m_plugins(plugins), m_currentStripWidget(Q_NULLPTR), m_timerId(-1) { diff --git a/zeiterfassungguilib/mainwindow.h b/zeiterfassungguilib/mainwindow.h index 2f1666b..3b3d57c 100644 --- a/zeiterfassungguilib/mainwindow.h +++ b/zeiterfassungguilib/mainwindow.h @@ -18,6 +18,7 @@ class QBoxLayout; namespace Ui { class MainWindow; } class ZeiterfassungSettings; class StripFactory; +class ZeiterfassungPlugin; class StripsWidget; class ZEITERFASSUNGGUILIBSHARED_EXPORT MainWindow : public QMainWindow @@ -26,7 +27,7 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT MainWindow : public QMainWindow public: explicit MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfassung, const GetUserInfoReply::UserInfo &userInfo, - StripFactory &stripFactory, QWidget *parent = Q_NULLPTR); + StripFactory &stripFactory, const QSet &plugins, QWidget *parent = Q_NULLPTR); ~MainWindow(); QMenu *menuFile() const; @@ -73,6 +74,7 @@ private: ZeiterfassungApi &m_erfassung; const GetUserInfoReply::UserInfo &m_userInfo; StripFactory &m_stripFactory; + const QSet &m_plugins; std::unique_ptr m_getProjectsReply; diff --git a/zeiterfassungguilib/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index df265f2..d691db1 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -17,7 +17,7 @@ public: virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } - virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) { Q_UNUSED(parent) return Q_NULLPTR; } + virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const { Q_UNUSED(parent) return Q_NULLPTR; } }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0") -- 2.50.1 From cf3b5f4660d3c7d1dc0abe125121c33ce5455d28 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:07:50 +0100 Subject: [PATCH 10/45] Plugins can now have their own settings in the SettingsDialog #64 --- plugins/weatherplugin/weathersettings.cpp | 1 + zeiterfassung/main.cpp | 16 ++++++---------- zeiterfassungguilib/dialogs/settingsdialog.cpp | 15 ++++++++++++++- zeiterfassungguilib/dialogs/settingsdialog.h | 7 +++++-- zeiterfassungguilib/mainwindow.cpp | 2 +- zeiterfassungguilib/settingswidget.cpp | 1 - 6 files changed, 27 insertions(+), 15 deletions(-) diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index 946ac68..da6f31b 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -8,6 +8,7 @@ WeatherSettings::WeatherSettings(QWidget *parent) : SettingsWidget(parent) { auto layout = new QFormLayout(this); + layout->setMargin(0); layout->addRow(tr("Weather API:"), new QLineEdit(this)); diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index 7dbc081..48676f2 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -34,7 +34,6 @@ struct { QTranslator zeiterfassungguilibTranslator; } translators; -QSet > pluginLoaders; QSet plugins; bool loadAndInstallTranslator(QTranslator &translator, const QString &filename) @@ -281,25 +280,22 @@ bool loadPlugins(QSplashScreen &splashScreen) continue; // to skip windows junk files } - auto pluginLoader = std::make_shared(fileInfo.filePath()); - if(!pluginLoader->load()) + QPluginLoader pluginLoader(fileInfo.filePath()); + if(!pluginLoader.load()) { QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!"), QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()) % - "\n\n" % pluginLoader->errorString()); + "\n\n" % pluginLoader.errorString()); ok = false; continue; } - if(auto plugin = qobject_cast(pluginLoader->instance())) - { - pluginLoaders.insert(pluginLoader); + if(auto plugin = qobject_cast(pluginLoader.instance())) plugins.insert(plugin); - } else QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Plugin not valid %0!"), - QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader->fileName()) % - "\n\n" % pluginLoader->errorString()); + QCoreApplication::translate("main", "Plugin not valid %0!").arg(pluginLoader.fileName()) % + "\n\n" % pluginLoader.errorString()); } diff --git a/zeiterfassungguilib/dialogs/settingsdialog.cpp b/zeiterfassungguilib/dialogs/settingsdialog.cpp index ea84650..7df0f0d 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.cpp +++ b/zeiterfassungguilib/dialogs/settingsdialog.cpp @@ -5,12 +5,15 @@ #include #include #include +#include #include #include #include "zeiterfassungsettings.h" +#include "zeiterfassungplugin.h" +#include "settingswidget.h" -SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) : +SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSet &plugins, QWidget *parent) : ZeiterfassungDialog(parent), ui(new Ui::SettingsDialog), m_settings(settings) @@ -40,6 +43,16 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent) ui->comboBoxTheme->setCurrentIndex(index); } + for(const auto plugin : plugins) + { + auto widget = plugin->settingsWidget(this); + if(!widget) + continue; + + ui->verticalLayout->addWidget(widget); + m_settingsWidgets.append(widget); + } + connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::submit); } diff --git a/zeiterfassungguilib/dialogs/settingsdialog.h b/zeiterfassungguilib/dialogs/settingsdialog.h index 3315276..149869d 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.h +++ b/zeiterfassungguilib/dialogs/settingsdialog.h @@ -3,15 +3,17 @@ #include "zeiterfassungguilib_global.h" #include "zeiterfassungdialog.h" -class ZeiterfassungSettings; namespace Ui { class SettingsDialog; } +class ZeiterfassungSettings; +class ZeiterfassungPlugin; +class SettingsWidget; class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsDialog : public ZeiterfassungDialog { Q_OBJECT public: - explicit SettingsDialog(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + explicit SettingsDialog(ZeiterfassungSettings &settings, const QSet &plugins, QWidget *parent = Q_NULLPTR); ~SettingsDialog(); private Q_SLOTS: @@ -20,4 +22,5 @@ private Q_SLOTS: private: Ui::SettingsDialog *ui; ZeiterfassungSettings &m_settings; + QVector m_settingsWidgets; }; diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index a456487..df471f6 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -50,7 +50,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass ui->actionRefresh->setShortcut(QKeySequence::Refresh); connect(ui->actionRefresh, &QAction::triggered, this, &MainWindow::refreshEverything); - connect(ui->actionSettings, &QAction::triggered, this, [this](){ SettingsDialog(m_settings, this).exec(); }); + connect(ui->actionSettings, &QAction::triggered, this, [this](){ SettingsDialog(m_settings, m_plugins, this).exec(); }); ui->actionHelp->setShortcut(QKeySequence::HelpContents); diff --git a/zeiterfassungguilib/settingswidget.cpp b/zeiterfassungguilib/settingswidget.cpp index d4c4878..1a0fa90 100644 --- a/zeiterfassungguilib/settingswidget.cpp +++ b/zeiterfassungguilib/settingswidget.cpp @@ -3,5 +3,4 @@ SettingsWidget::SettingsWidget(QWidget *parent) : QWidget(parent) { - } -- 2.50.1 From 18be548da241b811194d4e3507cf9d782ec8a198 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:21:43 +0100 Subject: [PATCH 11/45] Added isValid() to SettingsWidget --- plugins/weatherplugin/weathersettings.cpp | 8 ++++++++ plugins/weatherplugin/weathersettings.h | 2 ++ zeiterfassungguilib/dialogs/settingsdialog.cpp | 17 ++++++++++++++--- zeiterfassungguilib/settingswidget.h | 2 ++ 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index da6f31b..7fc257a 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -15,6 +15,14 @@ WeatherSettings::WeatherSettings(QWidget *parent) : setLayout(layout); } +bool WeatherSettings::isValid(QString &message) const +{ + Q_UNUSED(message) + + qDebug() << "called"; + return true; +} + void WeatherSettings::apply() { qDebug() << "called"; diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index e65e53c..edbc4b2 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -11,6 +11,8 @@ class WeatherSettings : public SettingsWidget public: explicit WeatherSettings(QWidget *parent = Q_NULLPTR); + bool isValid(QString &message) const Q_DECL_OVERRIDE; + public Q_SLOTS: void apply() Q_DECL_OVERRIDE; }; diff --git a/zeiterfassungguilib/dialogs/settingsdialog.cpp b/zeiterfassungguilib/dialogs/settingsdialog.cpp index 7df0f0d..57e915e 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.cpp +++ b/zeiterfassungguilib/dialogs/settingsdialog.cpp @@ -72,10 +72,21 @@ void SettingsDialog::submit() return; } + for(const auto widget : m_settingsWidgets) + { + QString message; + if(!widget->isValid(message)) + { + QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % message); + return; + } + } + if(ui->comboBoxLanguage->currentData().value() != m_settings.language()) { m_settings.setLanguage(ui->comboBoxLanguage->currentData().value()); - warning = true; + //TODO #73 Allow changing of the language without restart + QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!")); } auto theme = ui->comboBoxTheme->currentData().toString(); @@ -108,8 +119,8 @@ void SettingsDialog::submit() m_settings.setTheme(theme); } - if(warning) - QMessageBox::information(this, tr("Restart required!"), tr("To apply the new settings a restart is required!")); + for(const auto widget : m_settingsWidgets) + widget->apply(); accept(); } diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h index dc3dd6b..56fee50 100644 --- a/zeiterfassungguilib/settingswidget.h +++ b/zeiterfassungguilib/settingswidget.h @@ -12,6 +12,8 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget public: explicit SettingsWidget(QWidget *parent = Q_NULLPTR); + virtual bool isValid(QString &message) const { Q_UNUSED(message) return true; } + public Q_SLOTS: virtual void apply() { } }; -- 2.50.1 From ad10f67af989314dfecc67f0534446142d3d3e37 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:32:02 +0100 Subject: [PATCH 12/45] Added settings argument to ZeiterfassungPlugin::settingsWidget --- plugins/weatherplugin/weatherplugin.cpp | 4 ++-- plugins/weatherplugin/weatherplugin.h | 5 ++++- plugins/weatherplugin/weathersettings.cpp | 5 +++-- plugins/weatherplugin/weathersettings.h | 7 ++++++- zeiterfassungguilib/dialogs/settingsdialog.cpp | 10 ++++------ zeiterfassungguilib/zeiterfassungplugin.cpp | 8 +++++++- zeiterfassungguilib/zeiterfassungplugin.h | 3 ++- 7 files changed, 28 insertions(+), 14 deletions(-) diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index 04d6066..baac5db 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -36,7 +36,7 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) mainWindow.statusBar()->addWidget(new WeatherWidget(mainWindow)); } -SettingsWidget *WeatherPlugin::settingsWidget(QWidget *parent) const +SettingsWidget *WeatherPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const { - return new WeatherSettings(parent); + return new WeatherSettings(settings, parent); } diff --git a/plugins/weatherplugin/weatherplugin.h b/plugins/weatherplugin/weatherplugin.h index 9ad7646..f4fd64c 100644 --- a/plugins/weatherplugin/weatherplugin.h +++ b/plugins/weatherplugin/weatherplugin.h @@ -5,6 +5,9 @@ #include "zeiterfassungplugin.h" +class SettingsWidget; +class ZeiterfassungSettings; + class Q_DECL_EXPORT WeatherPlugin : public ZeiterfassungPlugin { Q_OBJECT @@ -17,7 +20,7 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; - SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; private: QTranslator m_translator; diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index 7fc257a..b89296f 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -4,8 +4,9 @@ #include #include -WeatherSettings::WeatherSettings(QWidget *parent) : - SettingsWidget(parent) +WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) { auto layout = new QFormLayout(this); layout->setMargin(0); diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index edbc4b2..f4a9e8d 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -5,16 +5,21 @@ #include "settingswidget.h" +class ZeiterfassungSettings; + class WeatherSettings : public SettingsWidget { Q_OBJECT public: - explicit WeatherSettings(QWidget *parent = Q_NULLPTR); + explicit WeatherSettings(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); bool isValid(QString &message) const Q_DECL_OVERRIDE; public Q_SLOTS: void apply() Q_DECL_OVERRIDE; + +private: + ZeiterfassungSettings &m_settings; }; #endif // WEATHERSETTINGS_H diff --git a/zeiterfassungguilib/dialogs/settingsdialog.cpp b/zeiterfassungguilib/dialogs/settingsdialog.cpp index 57e915e..2e2c315 100644 --- a/zeiterfassungguilib/dialogs/settingsdialog.cpp +++ b/zeiterfassungguilib/dialogs/settingsdialog.cpp @@ -24,7 +24,7 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSetcomboBoxLanguage->addItem(tr("German"), QLocale::German); { - auto index = ui->comboBoxLanguage->findData(settings.language()); + auto index = ui->comboBoxLanguage->findData(m_settings.language()); if(index == -1) QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % tr("Unknown language!")); ui->comboBoxLanguage->setCurrentIndex(index); @@ -35,9 +35,9 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSetcomboBoxTheme->addItem(entry.baseName(), entry.baseName()); - if(!settings.theme().isEmpty()) + if(!m_settings.theme().isEmpty()) { - auto index = ui->comboBoxTheme->findData(settings.theme()); + auto index = ui->comboBoxTheme->findData(m_settings.theme()); if(index == -1) QMessageBox::warning(this, tr("Invalid settings!"), tr("Invalid settings!") % "\n\n" % tr("Unknown theme!")); ui->comboBoxTheme->setCurrentIndex(index); @@ -45,7 +45,7 @@ SettingsDialog::SettingsDialog(ZeiterfassungSettings &settings, const QSetsettingsWidget(this); + auto widget = plugin->settingsWidget(m_settings, this); if(!widget) continue; @@ -63,8 +63,6 @@ SettingsDialog::~SettingsDialog() void SettingsDialog::submit() { - auto warning = false; - if(ui->comboBoxLanguage->currentIndex() == -1 || ui->comboBoxTheme->currentIndex() == -1) { diff --git a/zeiterfassungguilib/zeiterfassungplugin.cpp b/zeiterfassungguilib/zeiterfassungplugin.cpp index 4436d93..0f0913a 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.cpp +++ b/zeiterfassungguilib/zeiterfassungplugin.cpp @@ -3,5 +3,11 @@ ZeiterfassungPlugin::ZeiterfassungPlugin(QObject *parent) : QObject(parent) { - +} + +SettingsWidget *ZeiterfassungPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + Q_UNUSED(settings) + Q_UNUSED(parent) + return Q_NULLPTR; } diff --git a/zeiterfassungguilib/zeiterfassungplugin.h b/zeiterfassungguilib/zeiterfassungplugin.h index d691db1..bcfc883 100644 --- a/zeiterfassungguilib/zeiterfassungplugin.h +++ b/zeiterfassungguilib/zeiterfassungplugin.h @@ -7,6 +7,7 @@ class MainWindow; class StripsWidget; class SettingsWidget; +class ZeiterfassungSettings; class ZEITERFASSUNGGUILIBSHARED_EXPORT ZeiterfassungPlugin : public QObject { @@ -17,7 +18,7 @@ public: virtual void attachTo(MainWindow &mainWindow) { Q_UNUSED(mainWindow) } - virtual SettingsWidget *settingsWidget(QWidget *parent = Q_NULLPTR) const { Q_UNUSED(parent) return Q_NULLPTR; } + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const; }; Q_DECLARE_INTERFACE(ZeiterfassungPlugin, "dbsoftware.zeiterfassung.plugin/1.0") -- 2.50.1 From 73ea366466170b5d49457945cd6a9a84fa4e759f Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:34:40 +0100 Subject: [PATCH 13/45] Improved Docker caching --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index 5fca3e4..e997ef7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,10 @@ RUN apt update \ && apt install tzdata -y \ && rm /var/lib/apt/lists/* /var/log/* -Rf +RUN apt update \ + && apt install libssl1.0.0 ca-certificates libqt5core5a libqt5gui5 libqt5network5 libqt5multimedia5 -y \ + && rm /var/lib/apt/lists/* /var/log/* -Rf + RUN apt update \ && apt install git-core g++ make qt5-default qtmultimedia5-dev qttools5-dev qttools5-dev-tools -y \ && rm /var/lib/apt/lists/* /var/log/* -Rf -- 2.50.1 From bfd6b3e0e6745d52622f251f6aff1d0d214f9246 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:37:15 +0100 Subject: [PATCH 14/45] Moved line edit into member --- plugins/weatherplugin/weathersettings.cpp | 3 ++- plugins/weatherplugin/weathersettings.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index b89296f..a9a51b6 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -11,7 +11,8 @@ WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings, QWidget *paren auto layout = new QFormLayout(this); layout->setMargin(0); - layout->addRow(tr("Weather API:"), new QLineEdit(this)); + m_lineEdit = new QLineEdit(this); + layout->addRow(tr("Weather API:"), m_lineEdit); setLayout(layout); } diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index f4a9e8d..e0a1b7a 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -20,6 +20,8 @@ public Q_SLOTS: private: ZeiterfassungSettings &m_settings; + + QLineEdit *m_lineEdit; }; #endif // WEATHERSETTINGS_H -- 2.50.1 From ef2d9b4dcc756edd1cba1db324d7554d291d3217 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:46:34 +0100 Subject: [PATCH 15/45] Added settings wrapper for weather --- plugins/weatherplugin/weatherplugin.cpp | 4 +-- plugins/weatherplugin/weatherplugin.pro | 2 ++ plugins/weatherplugin/weathersettings.cpp | 26 +++++----------- plugins/weatherplugin/weathersettings.h | 17 +++------- .../weatherplugin/weathersettingswidget.cpp | 31 +++++++++++++++++++ plugins/weatherplugin/weathersettingswidget.h | 29 +++++++++++++++++ plugins/weatherplugin/weatherwidget.cpp | 7 +++-- 7 files changed, 81 insertions(+), 35 deletions(-) create mode 100644 plugins/weatherplugin/weathersettingswidget.cpp create mode 100644 plugins/weatherplugin/weathersettingswidget.h diff --git a/plugins/weatherplugin/weatherplugin.cpp b/plugins/weatherplugin/weatherplugin.cpp index baac5db..a09feee 100644 --- a/plugins/weatherplugin/weatherplugin.cpp +++ b/plugins/weatherplugin/weatherplugin.cpp @@ -9,7 +9,7 @@ #include "mainwindow.h" #include "weatherwidget.h" -#include "weathersettings.h" +#include "weathersettingswidget.h" WeatherPlugin::WeatherPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -38,5 +38,5 @@ void WeatherPlugin::attachTo(MainWindow &mainWindow) SettingsWidget *WeatherPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const { - return new WeatherSettings(settings, parent); + return new WeatherSettingsWidget(settings, parent); } diff --git a/plugins/weatherplugin/weatherplugin.pro b/plugins/weatherplugin/weatherplugin.pro index 398a0a2..ebed643 100644 --- a/plugins/weatherplugin/weatherplugin.pro +++ b/plugins/weatherplugin/weatherplugin.pro @@ -18,10 +18,12 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += weatherplugin.h \ weathersettings.h \ + weathersettingswidget.h \ weatherwidget.h SOURCES += weatherplugin.cpp \ weathersettings.cpp \ + weathersettingswidget.cpp \ weatherwidget.cpp FORMS += diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index a9a51b6..52f4062 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -1,31 +1,21 @@ #include "weathersettings.h" -#include -#include -#include +#include "zeiterfassungsettings.h" -WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings, QWidget *parent) : - SettingsWidget(parent), +WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings) : m_settings(settings) { - auto layout = new QFormLayout(this); - layout->setMargin(0); - m_lineEdit = new QLineEdit(this); - layout->addRow(tr("Weather API:"), m_lineEdit); - - setLayout(layout); } -bool WeatherSettings::isValid(QString &message) const +QUrl WeatherSettings::url() const { - Q_UNUSED(message) - - qDebug() << "called"; - return true; + return m_settings.value(QStringLiteral("WeatherPlugin/url"), + QUrl(QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83"))) + .toUrl(); } -void WeatherSettings::apply() +void WeatherSettings::setUrl(const QUrl &url) { - qDebug() << "called"; + m_settings.setValue(QStringLiteral("WeatherPlugin/url"), url); } diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index e0a1b7a..eaa0ff4 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -1,27 +1,20 @@ #ifndef WEATHERSETTINGS_H #define WEATHERSETTINGS_H -#include - -#include "settingswidget.h" +#include class ZeiterfassungSettings; -class WeatherSettings : public SettingsWidget +class WeatherSettings { - Q_OBJECT public: - explicit WeatherSettings(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + WeatherSettings(ZeiterfassungSettings &settings); - bool isValid(QString &message) const Q_DECL_OVERRIDE; - -public Q_SLOTS: - void apply() Q_DECL_OVERRIDE; + QUrl url() const; + void setUrl(const QUrl &url); private: ZeiterfassungSettings &m_settings; - - QLineEdit *m_lineEdit; }; #endif // WEATHERSETTINGS_H diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp new file mode 100644 index 0000000..78fef05 --- /dev/null +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -0,0 +1,31 @@ +#include "weathersettingswidget.h" + +#include +#include +#include + +WeatherSettingsWidget::WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_lineEdit = new QLineEdit(this); + layout->addRow(tr("Weather API:"), m_lineEdit); + + setLayout(layout); +} + +bool WeatherSettingsWidget::isValid(QString &message) const +{ + Q_UNUSED(message) + + qDebug() << "called"; + return true; +} + +void WeatherSettingsWidget::apply() +{ + qDebug() << "called"; +} diff --git a/plugins/weatherplugin/weathersettingswidget.h b/plugins/weatherplugin/weathersettingswidget.h new file mode 100644 index 0000000..ffc8920 --- /dev/null +++ b/plugins/weatherplugin/weathersettingswidget.h @@ -0,0 +1,29 @@ +#ifndef WEATHERSETTINGS_H +#define WEATHERSETTINGS_H + +#include + +#include "settingswidget.h" + +class QLineEdit; + +class ZeiterfassungSettings; + +class WeatherSettingsWidget : public SettingsWidget +{ + Q_OBJECT +public: + explicit WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + void apply() Q_DECL_OVERRIDE; + +private: + ZeiterfassungSettings &m_settings; + + QLineEdit *m_lineEdit; +}; + +#endif // WEATHERSETTINGS_H diff --git a/plugins/weatherplugin/weatherwidget.cpp b/plugins/weatherplugin/weatherwidget.cpp index 764bf99..9d62b09 100644 --- a/plugins/weatherplugin/weatherwidget.cpp +++ b/plugins/weatherplugin/weatherwidget.cpp @@ -14,6 +14,8 @@ #include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" +#include "weathersettings.h" + WeatherWidget::WeatherWidget(MainWindow &mainWindow) : QLabel(&mainWindow), m_mainWindow(mainWindow) @@ -30,10 +32,9 @@ void WeatherWidget::refresh() { setText(tr("Loading...")); - auto url = m_mainWindow.settings().value(QStringLiteral("WeatherPlugin/url"), - QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83")).toString(); + auto url = WeatherSettings(m_mainWindow.settings()).url(); - m_reply = std::unique_ptr(m_mainWindow.erfassung().manager()->get(QNetworkRequest(QUrl(url)))); + m_reply = std::unique_ptr(m_mainWindow.erfassung().manager()->get(QNetworkRequest(url))); connect(m_reply.get(), &QNetworkReply::finished, this, &WeatherWidget::finished); } -- 2.50.1 From 8760c046f3d59d6f4abe9c4a7c4db936b390c9fd Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:50:27 +0100 Subject: [PATCH 16/45] QLineEdit now shows weather api url --- plugins/weatherplugin/weathersettingswidget.cpp | 2 +- plugins/weatherplugin/weathersettingswidget.h | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp index 78fef05..bbc1ae8 100644 --- a/plugins/weatherplugin/weathersettingswidget.cpp +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -11,7 +11,7 @@ WeatherSettingsWidget::WeatherSettingsWidget(ZeiterfassungSettings &settings, QW auto layout = new QFormLayout(this); layout->setMargin(0); - m_lineEdit = new QLineEdit(this); + m_lineEdit = new QLineEdit(m_settings.url().toString(), this); layout->addRow(tr("Weather API:"), m_lineEdit); setLayout(layout); diff --git a/plugins/weatherplugin/weathersettingswidget.h b/plugins/weatherplugin/weathersettingswidget.h index ffc8920..d962a33 100644 --- a/plugins/weatherplugin/weathersettingswidget.h +++ b/plugins/weatherplugin/weathersettingswidget.h @@ -1,10 +1,12 @@ -#ifndef WEATHERSETTINGS_H -#define WEATHERSETTINGS_H +#ifndef WEATHERSETTINGSWIDGET_H +#define WEATHERSETTINGSWIDGET_H #include #include "settingswidget.h" +#include "weathersettings.h" + class QLineEdit; class ZeiterfassungSettings; @@ -21,9 +23,9 @@ public Q_SLOTS: void apply() Q_DECL_OVERRIDE; private: - ZeiterfassungSettings &m_settings; + WeatherSettings m_settings; QLineEdit *m_lineEdit; }; -#endif // WEATHERSETTINGS_H +#endif // WEATHERSETTINGSWIDGET_H -- 2.50.1 From 5f093b22feccab507dc996fdea298e5f5d23fb51 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 14:55:29 +0100 Subject: [PATCH 17/45] Implemented WeatherSettingsWidget::isValid --- plugins/weatherplugin/weathersettingswidget.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp index bbc1ae8..d48c4e2 100644 --- a/plugins/weatherplugin/weathersettingswidget.cpp +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -19,13 +19,15 @@ WeatherSettingsWidget::WeatherSettingsWidget(ZeiterfassungSettings &settings, QW bool WeatherSettingsWidget::isValid(QString &message) const { - Q_UNUSED(message) + auto valid = QUrl::fromUserInput(m_lineEdit->text()).isValid(); - qDebug() << "called"; - return true; + if(!valid) + message = tr("The weather api url is invalid!"); + + return valid; } void WeatherSettingsWidget::apply() { - qDebug() << "called"; + m_settings.setUrl(QUrl::fromUserInput(m_lineEdit->text())); } -- 2.50.1 From ac1edf2372dca7f347c3bcbb8cc4042ccc47429d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:16:23 +0100 Subject: [PATCH 18/45] The url is now stored as a QUrl in settings --- zeiterfassung/main.cpp | 17 +++++++-- zeiterfassungcorelib/zeiterfassungapi.cpp | 38 +++++++++---------- zeiterfassungcorelib/zeiterfassungapi.h | 9 +++-- .../zeiterfassungsettings.cpp | 6 +-- zeiterfassungcorelib/zeiterfassungsettings.h | 5 ++- 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index dc8fc86..04df232 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -178,14 +178,23 @@ bool loadLoginPage(QSplashScreen &splashScreen, ZeiterfassungSettings &settings, QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not access Zeiterfassung!"), QCoreApplication::translate("main", "Could not access Zeiterfassung!") % "\n\n" % reply->message()); + inputAgain: bool ok; - auto url = QInputDialog::getText(&splashScreen, QCoreApplication::translate("main", "Base url"), - QCoreApplication::translate("main", "Please enter the base url to the Zeiterfassung:"), - QLineEdit::Normal, settings.url(), &ok); + auto text = QInputDialog::getText(&splashScreen, QCoreApplication::translate("main", "Base url"), + QCoreApplication::translate("main", "Please enter the base url to the Zeiterfassung:"), + QLineEdit::Normal, settings.url().toString(), &ok); if(!ok) return false; + auto url = QUrl::fromUserInput(text); + if(!url.isValid()) + { + QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Invalid url!"), + QCoreApplication::translate("main", "This url is not valid!")); + goto inputAgain; + } + settings.setUrl(url); erfassung.setUrl(url); @@ -335,7 +344,7 @@ int main(int argc, char *argv[]) if(!loadStripLayouts(splashScreen, stripFactory)) return -3; - ZeiterfassungApi erfassung(settings.url(), &app); + ZeiterfassungApi erfassung(settings.url().toString(), &app); if(!loadLoginPage(splashScreen, settings, erfassung)) return -4; diff --git a/zeiterfassungcorelib/zeiterfassungapi.cpp b/zeiterfassungcorelib/zeiterfassungapi.cpp index 16d0a02..a125acc 100644 --- a/zeiterfassungcorelib/zeiterfassungapi.cpp +++ b/zeiterfassungcorelib/zeiterfassungapi.cpp @@ -28,19 +28,19 @@ //add support for pre cpp14 compilers #include "cpp14polyfills.h" -ZeiterfassungApi::ZeiterfassungApi(const QString &url, QObject *parent) : +ZeiterfassungApi::ZeiterfassungApi(const QUrl &url, QObject *parent) : QObject(parent), m_url(url), m_manager(new QNetworkAccessManager(this)) { } -const QString &ZeiterfassungApi::url() const +const QUrl &ZeiterfassungApi::url() const { return m_url; } -void ZeiterfassungApi::setUrl(const QString &url) +void ZeiterfassungApi::setUrl(const QUrl &url) { m_url = url; } @@ -52,14 +52,14 @@ QNetworkAccessManager *ZeiterfassungApi::manager() const std::unique_ptr ZeiterfassungApi::doLoginPage() { - QNetworkRequest request(QUrl(m_url % "pages/login.jsp")); + QNetworkRequest request(QUrl(m_url.toString() % "pages/login.jsp")); return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doLogin(const QString &username, const QString &password) { - QNetworkRequest request(QUrl(m_url % "pages/j_spring_security_check")); + QNetworkRequest request(QUrl(m_url.toString() % "pages/j_spring_security_check")); request.setHeader(QNetworkRequest::ContentTypeHeader, QByteArrayLiteral("application/x-www-form-urlencoded")); request.setMaximumRedirectsAllowed(0); @@ -70,10 +70,10 @@ std::unique_ptr ZeiterfassungApi::doLogin(const QString &username, c std::unique_ptr ZeiterfassungApi::doUserInfo() { - QNetworkRequest request0(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO")); + QNetworkRequest request0(QUrl(m_url.toString() % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO")); request0.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home")); - QNetworkRequest request1(QUrl(m_url % "json/persons")); + QNetworkRequest request1(QUrl(m_url.toString() % "json/persons")); request1.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); return std::make_unique(std::unique_ptr(m_manager->get(request0)), @@ -83,7 +83,7 @@ std::unique_ptr ZeiterfassungApi::doUserInfo() std::unique_ptr ZeiterfassungApi::doGetBookings(int userId, const QDate &start, const QDate &end) { QNetworkRequest request(QUrl(QStringLiteral("%0json/bookings?start=%1&end=%2&pnrLst=%3") - .arg(m_url) + .arg(m_url.toString()) .arg(start.toString(QStringLiteral("yyyyMMdd"))) .arg(end.toString(QStringLiteral("yyyyMMdd"))) .arg(userId))); @@ -95,7 +95,7 @@ std::unique_ptr ZeiterfassungApi::doGetBookings(int userId, co std::unique_ptr ZeiterfassungApi::doCreateBooking(int userId, const QDate &date, const QTime &time, const QTime ×pan, const QString &type, const QString &text) { - QNetworkRequest request(QUrl(m_url % "json/booking")); + QNetworkRequest request(QUrl(m_url.toString() % "json/booking")); request.setHeader(QNetworkRequest::ContentTypeHeader, QByteArrayLiteral("application/json")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -118,7 +118,7 @@ std::unique_ptr ZeiterfassungApi::doCreateBooking(int userId std::unique_ptr ZeiterfassungApi::doUpdateBooking(int bookingId, int userId, const QDate &date, const QTime &time, const QTime ×pan, const QString &type, const QString &text) { - QNetworkRequest request(QUrl(QStringLiteral("%0json/booking/%1").arg(m_url).arg(bookingId))); + QNetworkRequest request(QUrl(QStringLiteral("%0json/booking/%1").arg(m_url.toString()).arg(bookingId))); request.setHeader(QNetworkRequest::ContentTypeHeader, QByteArrayLiteral("application/json")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -142,7 +142,7 @@ std::unique_ptr ZeiterfassungApi::doUpdateBooking(int bookin std::unique_ptr ZeiterfassungApi::doDeleteBooking(int bookingId) { QNetworkRequest request(QUrl(QStringLiteral("%0json/booking/%1?text=") - .arg(m_url) + .arg(m_url.toString()) .arg(bookingId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -152,7 +152,7 @@ std::unique_ptr ZeiterfassungApi::doDeleteBooking(int bookin std::unique_ptr ZeiterfassungApi::doGetTimeAssignments(int userId, const QDate &start, const QDate &end) { QNetworkRequest request(QUrl(QStringLiteral("%0json/azebooking?start=%1&end=%2&pnrLst=%3") - .arg(m_url) + .arg(m_url.toString()) .arg(start.toString(QStringLiteral("yyyyMMdd"))) .arg(end.toString(QStringLiteral("yyyyMMdd"))) .arg(userId))); @@ -166,7 +166,7 @@ std::unique_ptr ZeiterfassungApi::doCreateTimeAssignm const QString &subproject, const QString &workpackage, const QString &text) { - QNetworkRequest request(QUrl(m_url % "json/azebooking")); + QNetworkRequest request(QUrl(m_url.toString() % "json/azebooking")); request.setHeader(QNetworkRequest::ContentTypeHeader, QByteArrayLiteral("application/json")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -207,7 +207,7 @@ std::unique_ptr ZeiterfassungApi::doUpdateTimeAssignm const QString &subproject, const QString &workpackage, const QString &text) { - QNetworkRequest request(QUrl(QStringLiteral("%0json/azebooking/%1").arg(m_url).arg(timeAssignmentId))); + QNetworkRequest request(QUrl(QStringLiteral("%0json/azebooking/%1").arg(m_url.toString()).arg(timeAssignmentId))); request.setHeader(QNetworkRequest::ContentTypeHeader, QByteArrayLiteral("application/json")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -251,7 +251,7 @@ std::unique_ptr ZeiterfassungApi::doUpdateTimeAssignm std::unique_ptr ZeiterfassungApi::doDeleteTimeAssignment(int timeAssignmentId) { QNetworkRequest request(QUrl(QStringLiteral("%0json/azebooking/%1") - .arg(m_url) + .arg(m_url.toString()) .arg(timeAssignmentId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -261,7 +261,7 @@ std::unique_ptr ZeiterfassungApi::doDeleteTimeAssignm std::unique_ptr ZeiterfassungApi::doGetProjects(int userId, const QDate &date) { QNetworkRequest request(QUrl(QStringLiteral("%0json/combobox?persnr=%1&date=%2&dqkey=KOST&kowert0=&kowert1=&kowert2=&term=") - .arg(m_url) + .arg(m_url.toString()) .arg(userId) .arg(date.toString(QStringLiteral("yyyyMMdd"))))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -272,7 +272,7 @@ std::unique_ptr ZeiterfassungApi::doGetProjects(int userId, co std::unique_ptr ZeiterfassungApi::doGetReport(int userId, const QDate &date) { QNetworkRequest request(QUrl(QStringLiteral("%0json/auswertung/month?persNr=%1&date=%2") - .arg(m_url) + .arg(m_url.toString()) .arg(userId) .arg(date.toString(QStringLiteral("yyyyMMdd"))))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); @@ -282,7 +282,7 @@ std::unique_ptr ZeiterfassungApi::doGetReport(int userId, const std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() { - QNetworkRequest request(QUrl(m_url % "json/presencestatus")); + QNetworkRequest request(QUrl(m_url.toString() % "json/presencestatus")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("presenceStatus")); return std::make_unique(std::unique_ptr(m_manager->get(request)), this); @@ -291,7 +291,7 @@ std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() std::unique_ptr ZeiterfassungApi::doGetAbsences(int userId, const QDate &start, const QDate &end) { QNetworkRequest request(QUrl(QStringLiteral("%0json/fulldayAbsences?start=%1&end=%2&pnrLst=%3") - .arg(m_url) + .arg(m_url.toString()) .arg(start.toString(QStringLiteral("yyyyMMdd"))) .arg(end.toString(QStringLiteral("yyyyMMdd"))) .arg(userId))); diff --git a/zeiterfassungcorelib/zeiterfassungapi.h b/zeiterfassungcorelib/zeiterfassungapi.h index 8af9b71..a3f3107 100644 --- a/zeiterfassungcorelib/zeiterfassungapi.h +++ b/zeiterfassungcorelib/zeiterfassungapi.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -32,10 +33,10 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT ZeiterfassungApi : public QObject Q_OBJECT public: - explicit ZeiterfassungApi(const QString &url, QObject *parent = Q_NULLPTR); + explicit ZeiterfassungApi(const QUrl &url, QObject *parent = Q_NULLPTR); - const QString &url() const; - void setUrl(const QString &url); + const QUrl &url() const; + void setUrl(const QUrl &url); QNetworkAccessManager *manager() const; @@ -67,6 +68,6 @@ public: std::unique_ptr doGetAbsences(int userId, const QDate &start, const QDate &end); private: - QString m_url; + QUrl m_url; QNetworkAccessManager *m_manager; }; diff --git a/zeiterfassungcorelib/zeiterfassungsettings.cpp b/zeiterfassungcorelib/zeiterfassungsettings.cpp index 18149be..0e9d5b2 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.cpp +++ b/zeiterfassungcorelib/zeiterfassungsettings.cpp @@ -42,12 +42,12 @@ void ZeiterfassungSettings::setLanguage(QLocale::Language language) setValue(QStringLiteral("language"), language); } -QString ZeiterfassungSettings::url() const +QUrl ZeiterfassungSettings::url() const { - return value(QStringLiteral("url"), QStringLiteral("http://10.1.0.11:8080/evoApps/")).toString(); + return value(QStringLiteral("url"), QUrl(QStringLiteral("http://10.1.0.11:8080/evoApps/"))).toUrl(); } -void ZeiterfassungSettings::setUrl(const QString &url) +void ZeiterfassungSettings::setUrl(const QUrl &url) { setValue(QStringLiteral("url"), url); } diff --git a/zeiterfassungcorelib/zeiterfassungsettings.h b/zeiterfassungcorelib/zeiterfassungsettings.h index 843ea9c..1fe7c60 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.h +++ b/zeiterfassungcorelib/zeiterfassungsettings.h @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -25,8 +26,8 @@ public: QLocale::Language language() const; void setLanguage(QLocale::Language language); - QString url() const; - void setUrl(const QString &url); + QUrl url() const; + void setUrl(const QUrl &url); QString username() const; void setUsername(const QString &username); -- 2.50.1 From 245c05a045318f1b73f5b58eb00d1913c11bf68d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:27:39 +0100 Subject: [PATCH 19/45] Added LunchMealSettingsWrapper --- plugins/lunchmealplugin/lunchmealplugin.pro | 6 ++-- plugins/lunchmealplugin/lunchmealsettings.cpp | 31 +++++++++++++++++++ plugins/lunchmealplugin/lunchmealsettings.h | 23 ++++++++++++++ plugins/lunchmealplugin/lunchmealwidget.cpp | 8 ++--- 4 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 plugins/lunchmealplugin/lunchmealsettings.cpp create mode 100644 plugins/lunchmealplugin/lunchmealsettings.h diff --git a/plugins/lunchmealplugin/lunchmealplugin.pro b/plugins/lunchmealplugin/lunchmealplugin.pro index daf797d..1579638 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.pro +++ b/plugins/lunchmealplugin/lunchmealplugin.pro @@ -18,11 +18,13 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += lunchmealdialog.h \ lunchmealplugin.h \ - lunchmealwidget.h + lunchmealwidget.h \ + lunchmealsettings.h SOURCES += lunchmealdialog.cpp \ lunchmealplugin.cpp \ - lunchmealwidget.cpp + lunchmealwidget.cpp \ + lunchmealsettings.cpp FORMS += lunchmealdialog.ui diff --git a/plugins/lunchmealplugin/lunchmealsettings.cpp b/plugins/lunchmealplugin/lunchmealsettings.cpp new file mode 100644 index 0000000..f210fb6 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettings.cpp @@ -0,0 +1,31 @@ +#include "lunchmealsettings.h" + +#include "zeiterfassungsettings.h" + +LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings) : + m_settings(settings) +{ + +} + +QUrl LunchMealSettings::url() const +{ + return m_settings.value(QStringLiteral("LunchMealPlugin/url"), + QUrl(QStringLiteral("https://brunner.ninja/lunch/%0.txt"))) + .toUrl(); +} + +void LunchMealSettings::setUrl(const QUrl &url) +{ + m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url); +} + +QString LunchMealSettings::dateFormat() const +{ + return m_settings.value(QStringLiteral("LunchMealPlugin/dateFormat"), QStringLiteral("yyyy-MM-dd")).toString(); +} + +void LunchMealSettings::setDateFormat(const QString &dateFormat) +{ + m_settings.setValue(QStringLiteral("LunchMealPlugin/dateFormat"), dateFormat); +} diff --git a/plugins/lunchmealplugin/lunchmealsettings.h b/plugins/lunchmealplugin/lunchmealsettings.h new file mode 100644 index 0000000..63d4c83 --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettings.h @@ -0,0 +1,23 @@ +#ifndef LUNCHMEALSETTINGS_H +#define LUNCHMEALSETTINGS_H + +#include + +class ZeiterfassungSettings; + +class LunchMealSettings +{ +public: + LunchMealSettings(ZeiterfassungSettings &settings); + + QUrl url() const; + void setUrl(const QUrl &url); + + QString dateFormat() const; + void setDateFormat(const QString &dateFormat); + +private: + ZeiterfassungSettings &m_settings; +}; + +#endif // LUNCHMEALSETTINGS_H diff --git a/plugins/lunchmealplugin/lunchmealwidget.cpp b/plugins/lunchmealplugin/lunchmealwidget.cpp index 47d6649..6083b3c 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.cpp +++ b/plugins/lunchmealplugin/lunchmealwidget.cpp @@ -9,10 +9,10 @@ #include "stripswidget.h" #include "mainwindow.h" -#include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" #include "lunchmealdialog.h" +#include "lunchmealsettings.h" LunchMealWidget::LunchMealWidget(StripsWidget &stripsWidget) : QToolButton(&stripsWidget), @@ -38,11 +38,9 @@ void LunchMealWidget::dateChanged(const QDate &date) setEnabled(false); setVisible(false); - const auto &settings = m_stripsWidget.mainWindow().settings(); + LunchMealSettings settings(m_stripsWidget.mainWindow().settings()); - auto url = settings.value(QStringLiteral("LunchMealPlugin/url"), - QStringLiteral("https://brunner.ninja/lunch/%0.txt")).toString() - .arg(date.toString(settings.value(QStringLiteral("LunchMealPlugin/dateFormat"), QStringLiteral("yyyy-MM-dd")).toString())); + auto url = settings.url().toString().arg(date.toString(settings.dateFormat())); m_reply = std::unique_ptr(m_stripsWidget.mainWindow().erfassung().manager()->get(QNetworkRequest(QUrl(url)))); connect(m_reply.get(), &QNetworkReply::finished, this, &LunchMealWidget::finished); } -- 2.50.1 From 9f442bfda9deced884e98bb1efd042b1055871a3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:32:15 +0100 Subject: [PATCH 20/45] Added LunchMealSettingsWidget --- plugins/lunchmealplugin/lunchmealplugin.pro | 10 ++++--- .../lunchmealsettingswidget.cpp | 29 +++++++++++++++++++ .../lunchmealplugin/lunchmealsettingswidget.h | 27 +++++++++++++++++ .../weatherplugin/weathersettingswidget.cpp | 1 - 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 plugins/lunchmealplugin/lunchmealsettingswidget.cpp create mode 100644 plugins/lunchmealplugin/lunchmealsettingswidget.h diff --git a/plugins/lunchmealplugin/lunchmealplugin.pro b/plugins/lunchmealplugin/lunchmealplugin.pro index 1579638..f2d730d 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.pro +++ b/plugins/lunchmealplugin/lunchmealplugin.pro @@ -17,14 +17,16 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += lunchmealdialog.h \ + lunchmealsettings.h \ + lunchmealsettingswidget.h \ lunchmealplugin.h \ - lunchmealwidget.h \ - lunchmealsettings.h + lunchmealwidget.h SOURCES += lunchmealdialog.cpp \ + lunchmealsettings.cpp \ + lunchmealsettingswidget.cpp \ lunchmealplugin.cpp \ - lunchmealwidget.cpp \ - lunchmealsettings.cpp + lunchmealwidget.cpp FORMS += lunchmealdialog.ui diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp new file mode 100644 index 0000000..b9529df --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -0,0 +1,29 @@ +#include "lunchmealsettingswidget.h" + +#include +#include + +LunchMealSettingsWidget::LunchMealSettingsWidget(QWidget *parent) : + SettingsWidget(parent) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_lineEditUrl = new QLineEdit(m_settings.url().toString(), this); + layout->addRow(tr("Lunch meal API:"), m_lineEditUrl); + + m_lineEditDateFormat = new QLineEdit(m_settings.dateFormat(), this); + layout->addRow(tr("Lunch meal date format:"), m_lineEditDateFormat); + + setLayout(layout); +} + +bool LunchMealSettingsWidget::isValid(QString &message) const +{ + +} + +void LunchMealSettingsWidget::apply() +{ + +} diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.h b/plugins/lunchmealplugin/lunchmealsettingswidget.h new file mode 100644 index 0000000..7cd6d9f --- /dev/null +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.h @@ -0,0 +1,27 @@ +#ifndef LUNCHMEALSETTINGSWIDGET_H +#define LUNCHMEALSETTINGSWIDGET_H + +#include "settingswidget.h" + +#include "lunchmealsettings.h" + +class LunchMealSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + explicit LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = nullptr); + + virtual bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + virtual void apply() Q_DECL_OVERRIDE; + +private: + LunchMealSettings m_settings; + + QLineEdit *m_lineEditUrl; + QLineEdit *m_lineEditDateFormat; +}; + +#endif // LUNCHMEALSETTINGSWIDGET_H diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp index d48c4e2..2e14db6 100644 --- a/plugins/weatherplugin/weathersettingswidget.cpp +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -2,7 +2,6 @@ #include #include -#include WeatherSettingsWidget::WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : SettingsWidget(parent), -- 2.50.1 From d242dd29bbcf2ec2f7e2ecbbc390a03c34475cb3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:35:29 +0100 Subject: [PATCH 21/45] Registered LunchMealSettingsWidget --- plugins/lunchmealplugin/lunchmealplugin.cpp | 6 ++++++ plugins/lunchmealplugin/lunchmealplugin.h | 2 ++ plugins/lunchmealplugin/lunchmealsettingswidget.cpp | 7 +++++-- plugins/lunchmealplugin/lunchmealsettingswidget.h | 4 +++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealplugin.cpp b/plugins/lunchmealplugin/lunchmealplugin.cpp index 0379d21..a7414d8 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.cpp +++ b/plugins/lunchmealplugin/lunchmealplugin.cpp @@ -10,6 +10,7 @@ #include "stripswidget.h" #include "lunchmealwidget.h" +#include "lunchmealsettingswidget.h" LunchMealPlugin::LunchMealPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -36,3 +37,8 @@ void LunchMealPlugin::attachTo(MainWindow &mainWindow) for(auto stripsWidget : mainWindow.stripsWidgets()) stripsWidget->headerLayout()->addWidget(new LunchMealWidget(*stripsWidget)); } + +SettingsWidget *LunchMealPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new LunchMealSettingsWidget(settings, parent); +} diff --git a/plugins/lunchmealplugin/lunchmealplugin.h b/plugins/lunchmealplugin/lunchmealplugin.h index 8b14f85..d74a61a 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.h +++ b/plugins/lunchmealplugin/lunchmealplugin.h @@ -19,6 +19,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp index b9529df..b6fe25e 100644 --- a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -3,8 +3,9 @@ #include #include -LunchMealSettingsWidget::LunchMealSettingsWidget(QWidget *parent) : - SettingsWidget(parent) +LunchMealSettingsWidget::LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) { auto layout = new QFormLayout(this); layout->setMargin(0); @@ -20,7 +21,9 @@ LunchMealSettingsWidget::LunchMealSettingsWidget(QWidget *parent) : bool LunchMealSettingsWidget::isValid(QString &message) const { + Q_UNUSED(message) + return true; } void LunchMealSettingsWidget::apply() diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.h b/plugins/lunchmealplugin/lunchmealsettingswidget.h index 7cd6d9f..90f7ff0 100644 --- a/plugins/lunchmealplugin/lunchmealsettingswidget.h +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.h @@ -5,12 +5,14 @@ #include "lunchmealsettings.h" +class QLineEdit; + class LunchMealSettingsWidget : public SettingsWidget { Q_OBJECT public: - explicit LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = nullptr); + explicit LunchMealSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); virtual bool isValid(QString &message) const Q_DECL_OVERRIDE; -- 2.50.1 From 2e69567096de312609fb4fe0696fca99a8d7afd7 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:37:47 +0100 Subject: [PATCH 22/45] Implemented isValid and apply() of LunchMealSettingsWidget (Fixes #67) --- plugins/lunchmealplugin/lunchmealsettingswidget.cpp | 11 +++++++++-- plugins/weatherplugin/weathersettingswidget.cpp | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp index b6fe25e..0fff7b3 100644 --- a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -21,12 +21,19 @@ LunchMealSettingsWidget::LunchMealSettingsWidget(ZeiterfassungSettings &settings bool LunchMealSettingsWidget::isValid(QString &message) const { - Q_UNUSED(message) + auto valid = QUrl::fromUserInput(m_lineEditUrl->text()).isValid(); - return true; + if(!valid) + message = tr("The lunch meal api url is invalid!"); + + return valid; } void LunchMealSettingsWidget::apply() { + auto url = QUrl::fromUserInput(m_lineEditUrl->text()); + if(m_settings.url() != url) + m_settings.setUrl(url); + m_settings.setDateFormat(m_lineEditDateFormat->text()); } diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp index 2e14db6..5be082a 100644 --- a/plugins/weatherplugin/weathersettingswidget.cpp +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -28,5 +28,7 @@ bool WeatherSettingsWidget::isValid(QString &message) const void WeatherSettingsWidget::apply() { - m_settings.setUrl(QUrl::fromUserInput(m_lineEdit->text())); + auto url = QUrl::fromUserInput(m_lineEdit->text()); + if(m_settings.url() != url) + m_settings.setUrl(url); } -- 2.50.1 From 972ecdb971cbdd9afa226b977fcfb407fb595db1 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Sun, 11 Mar 2018 15:40:06 +0100 Subject: [PATCH 23/45] Fixed indentation --- zeiterfassungcorelib/zeiterfassungsettings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeiterfassungcorelib/zeiterfassungsettings.h b/zeiterfassungcorelib/zeiterfassungsettings.h index 1fe7c60..4ea1510 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.h +++ b/zeiterfassungcorelib/zeiterfassungsettings.h @@ -15,7 +15,7 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT ZeiterfassungSettings : public QSettings public: explicit ZeiterfassungSettings(const QString &organization, - const QString &application = QString(), QObject *parent = Q_NULLPTR); + const QString &application = QString(), QObject *parent = Q_NULLPTR); ZeiterfassungSettings(Scope scope, const QString &organization, const QString &application = QString(), QObject *parent = Q_NULLPTR); ZeiterfassungSettings(Format format, Scope scope, const QString &organization, -- 2.50.1 From 26f1c820800abb2993a4ec9f31b07048093e843e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Tue, 13 Mar 2018 21:06:12 +0100 Subject: [PATCH 24/45] Added WebRadioSettings --- plugins/webradioplugin/webradiodialog.cpp | 19 +++---------- plugins/webradioplugin/webradiodialog.h | 4 +++ plugins/webradioplugin/webradioplugin.pro | 6 +++-- plugins/webradioplugin/webradiosettings.cpp | 30 +++++++++++++++++++++ plugins/webradioplugin/webradiosettings.h | 20 ++++++++++++++ 5 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 plugins/webradioplugin/webradiosettings.cpp create mode 100644 plugins/webradioplugin/webradiosettings.h diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index fd5e855..2ca4f89 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -7,7 +7,8 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : ZeiterfassungDialog(&mainWindow), ui(new Ui::WebRadioDialog), - m_mainWindow(mainWindow) + m_mainWindow(mainWindow), + m_settings(m_mainWindow.settings()) { ui->setupUi(this); @@ -18,22 +19,8 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : connect(m_player, &QMediaPlayer::mediaStatusChanged, this, &WebRadioDialog::updateWidgets); connect(m_player, static_cast(&QMediaPlayer::error), this, &WebRadioDialog::error); - for(const auto &url : m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/urls"), QStringList { - QStringLiteral("http://stream.drumandbass.fm:9002"), - QStringLiteral("http://stream.trap.fm:6002"), - QStringLiteral("http://stream.dubbase.fm:7002"), - QStringLiteral("http://lw1.mp3.tb-group.fm/hb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/tb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/tt.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/ht.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/trb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), - QStringLiteral("https://live.helsinki.at:8088/live160.ogg") - }).toStringList()) - { + for(const auto &url : m_settings.urls()) ui->comboBox->addItem(url, url); - } ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString())); diff --git a/plugins/webradioplugin/webradiodialog.h b/plugins/webradioplugin/webradiodialog.h index 6dbda8d..b1c6c73 100644 --- a/plugins/webradioplugin/webradiodialog.h +++ b/plugins/webradioplugin/webradiodialog.h @@ -4,6 +4,8 @@ #include "zeiterfassungdialog.h" +#include "webradiosettings.h" + class MainWindow; namespace Ui { class WebRadioDialog; } @@ -30,5 +32,7 @@ private: Ui::WebRadioDialog *ui; MainWindow &m_mainWindow; + WebRadioSettings m_settings; + QMediaPlayer *m_player; }; diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index 1024a95..c796eff 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -17,10 +17,12 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += webradiodialog.h \ - webradioplugin.h + webradioplugin.h \ + webradiosettings.h SOURCES += webradiodialog.cpp \ - webradioplugin.cpp + webradioplugin.cpp \ + webradiosettings.cpp FORMS += webradiodialog.ui diff --git a/plugins/webradioplugin/webradiosettings.cpp b/plugins/webradioplugin/webradiosettings.cpp new file mode 100644 index 0000000..652d94d --- /dev/null +++ b/plugins/webradioplugin/webradiosettings.cpp @@ -0,0 +1,30 @@ +#include "webradiosettings.h" + +#include "zeiterfassungsettings.h" + +WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings) : + m_settings(settings) +{ +} + +QStringList WebRadioSettings::urls() const +{ + return m_settings.value(QStringLiteral("WebRadioPlugin/urls"), QStringList { + QStringLiteral("http://stream.drumandbass.fm:9002"), + QStringLiteral("http://stream.trap.fm:6002"), + QStringLiteral("http://stream.dubbase.fm:7002"), + QStringLiteral("http://lw1.mp3.tb-group.fm/hb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tt.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ht.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/trb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), + QStringLiteral("https://live.helsinki.at:8088/live160.ogg") + }).toStringList(); +} + +void WebRadioSettings::setUrls(const QStringList &urls) +{ + m_settings.setValue(QStringLiteral("WebRadioPlugin/urls"), urls); +} diff --git a/plugins/webradioplugin/webradiosettings.h b/plugins/webradioplugin/webradiosettings.h new file mode 100644 index 0000000..4993eda --- /dev/null +++ b/plugins/webradioplugin/webradiosettings.h @@ -0,0 +1,20 @@ +#ifndef WEBRADIOSETTINGS_H +#define WEBRADIOSETTINGS_H + +#include + +class ZeiterfassungSettings; + +class WebRadioSettings +{ +public: + WebRadioSettings(ZeiterfassungSettings &settings); + + QStringList urls() const; + void setUrls(const QStringList &urls); + +private: + ZeiterfassungSettings &m_settings; +}; + +#endif // WEBRADIOSETTINGS_H -- 2.50.1 From 6fb58b1b74cdf7d4f825e678ed10515ac95f0e24 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE <0xfeedc0de64@gmail.com> Date: Tue, 13 Mar 2018 21:10:49 +0100 Subject: [PATCH 25/45] Implemented WebRadioSettings::lastUrl and WebRadioSettings::volume --- plugins/webradioplugin/webradiodialog.cpp | 8 ++++---- plugins/webradioplugin/webradiosettings.cpp | 20 ++++++++++++++++++++ plugins/webradioplugin/webradiosettings.h | 6 ++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/plugins/webradioplugin/webradiodialog.cpp b/plugins/webradioplugin/webradiodialog.cpp index 2ca4f89..236ee90 100644 --- a/plugins/webradioplugin/webradiodialog.cpp +++ b/plugins/webradioplugin/webradiodialog.cpp @@ -22,7 +22,7 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : for(const auto &url : m_settings.urls()) ui->comboBox->addItem(url, url); - ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/lastUrl")).toString())); + ui->comboBox->setCurrentIndex(ui->comboBox->findData(m_settings.lastUrl())); connect(ui->comboBox, static_cast(&QComboBox::currentIndexChanged), this, &WebRadioDialog::currentIndexChanged); @@ -34,7 +34,7 @@ WebRadioDialog::WebRadioDialog(MainWindow &mainWindow) : connect(ui->pushButtonPause, &QAbstractButton::pressed, m_player, &QMediaPlayer::pause); connect(ui->pushButtonStop, &QAbstractButton::pressed, m_player, &QMediaPlayer::stop); - m_player->setVolume(m_mainWindow.settings().value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt()); + m_player->setVolume(m_settings.volume()); ui->horizontalSlider->setValue(m_player->volume()); connect(ui->horizontalSlider, &QAbstractSlider::valueChanged, this, &WebRadioDialog::volumeChanged); @@ -106,7 +106,7 @@ void WebRadioDialog::play() if(ui->comboBox->currentIndex() == -1) return; - m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/lastUrl"), ui->comboBox->currentData().toString()); + m_settings.setLastUrl(ui->comboBox->currentData().toString()); m_player->play(); } @@ -123,6 +123,6 @@ void WebRadioDialog::updateWidgets() void WebRadioDialog::volumeChanged(int volume) { - m_mainWindow.settings().setValue(QStringLiteral("WebRadioPlugin/volume"), volume); + m_settings.setVolume(volume); m_player->setVolume(volume); } diff --git a/plugins/webradioplugin/webradiosettings.cpp b/plugins/webradioplugin/webradiosettings.cpp index 652d94d..eb6bb44 100644 --- a/plugins/webradioplugin/webradiosettings.cpp +++ b/plugins/webradioplugin/webradiosettings.cpp @@ -28,3 +28,23 @@ void WebRadioSettings::setUrls(const QStringList &urls) { m_settings.setValue(QStringLiteral("WebRadioPlugin/urls"), urls); } + +QString WebRadioSettings::lastUrl() const +{ + return m_settings.value(QStringLiteral("WebRadioPlugin/lastUrl")).toString(); +} + +void WebRadioSettings::setLastUrl(const QString &lastUrl) +{ + m_settings.setValue(QStringLiteral("WebRadioPlugin/lastUrl"), lastUrl); +} + +int WebRadioSettings::volume() const +{ + return m_settings.value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt(); +} + +void WebRadioSettings::setVolume(int volume) +{ + m_settings.setValue(QStringLiteral("WebRadioPlugin/volume"), volume); +} diff --git a/plugins/webradioplugin/webradiosettings.h b/plugins/webradioplugin/webradiosettings.h index 4993eda..0f1cc4c 100644 --- a/plugins/webradioplugin/webradiosettings.h +++ b/plugins/webradioplugin/webradiosettings.h @@ -13,6 +13,12 @@ public: QStringList urls() const; void setUrls(const QStringList &urls); + QString lastUrl() const; + void setLastUrl(const QString &lastUrl); + + int volume() const; + void setVolume(int volume); + private: ZeiterfassungSettings &m_settings; }; -- 2.50.1 From 3cddf79149ca1716bf4eef0c65d7d49d846319c0 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 15 Mar 2018 22:53:09 +0100 Subject: [PATCH 26/45] Added QStringListWidget lib --- .gitmodules | 3 +++ zeiterfassungguilib/QStringListWidget | 1 + zeiterfassungguilib/zeiterfassungguilib.pro | 2 ++ 3 files changed, 6 insertions(+) create mode 100644 .gitmodules create mode 160000 zeiterfassungguilib/QStringListWidget diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..464f0ed --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "zeiterfassungguilib/QStringListWidget"] + path = zeiterfassungguilib/QStringListWidget + url = https://github.com/0xFEEDC0DE64/QStringListWidget.git diff --git a/zeiterfassungguilib/QStringListWidget b/zeiterfassungguilib/QStringListWidget new file mode 160000 index 0000000..03bbb01 --- /dev/null +++ b/zeiterfassungguilib/QStringListWidget @@ -0,0 +1 @@ +Subproject commit 03bbb01a26eb7c7cd81ab59abc35a78b324974b7 diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index 30e4962..15c428a 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -49,3 +49,5 @@ TRANSLATIONS += translations/zeiterfassungguilib_en.ts \ translations/zeiterfassungguilib_de.ts include($${PROJECT_ROOT}/lrelease.pri) + +include(QStringListWidget/QStringListWidget.pri) -- 2.50.1 From 67c668ab6c67e15a382e5782f3420d81601e1b12 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 15 Mar 2018 23:38:41 +0100 Subject: [PATCH 27/45] Updated QStringListWidget lib --- zeiterfassungguilib/QStringListWidget | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeiterfassungguilib/QStringListWidget b/zeiterfassungguilib/QStringListWidget index 03bbb01..0090c29 160000 --- a/zeiterfassungguilib/QStringListWidget +++ b/zeiterfassungguilib/QStringListWidget @@ -1 +1 @@ -Subproject commit 03bbb01a26eb7c7cd81ab59abc35a78b324974b7 +Subproject commit 0090c29663d23293d6d0b90f8dd9f7ac57170df1 -- 2.50.1 From 1f622e80d1fa1d21d6060cba7b78f5b7ea2fe21f Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 15 Mar 2018 23:54:33 +0100 Subject: [PATCH 28/45] Added WebRadioSettingsWidget --- plugins/webradioplugin/webradioplugin.cpp | 6 ++++ plugins/webradioplugin/webradioplugin.h | 2 ++ plugins/webradioplugin/webradioplugin.pro | 6 ++-- .../webradioplugin/webradiosettingswidget.cpp | 28 ++++++++++++++++ .../webradioplugin/webradiosettingswidget.h | 32 +++++++++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 plugins/webradioplugin/webradiosettingswidget.cpp create mode 100644 plugins/webradioplugin/webradiosettingswidget.h diff --git a/plugins/webradioplugin/webradioplugin.cpp b/plugins/webradioplugin/webradioplugin.cpp index 9a749d7..d75bfcb 100644 --- a/plugins/webradioplugin/webradioplugin.cpp +++ b/plugins/webradioplugin/webradioplugin.cpp @@ -10,6 +10,7 @@ #include "mainwindow.h" #include "webradiodialog.h" +#include "webradiosettingswidget.h" WebRadioPlugin::WebRadioPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -37,3 +38,8 @@ void WebRadioPlugin::attachTo(MainWindow &mainWindow) mainWindow.menuTools()->addAction(QIcon(QStringLiteral(":/zeiterfassung/plugins/webradioplugin/images/web-radio.png")), tr("Play webradio"), dialog, &QWidget::show); } + +SettingsWidget *WebRadioPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new WebRadioSettingsWidget(settings, parent); +} diff --git a/plugins/webradioplugin/webradioplugin.h b/plugins/webradioplugin/webradioplugin.h index e11932d..6644b3f 100644 --- a/plugins/webradioplugin/webradioplugin.h +++ b/plugins/webradioplugin/webradioplugin.h @@ -17,6 +17,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index c796eff..0c8ee81 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -18,11 +18,13 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += webradiodialog.h \ webradioplugin.h \ - webradiosettings.h + webradiosettings.h \ + webradiosettingswidget.h SOURCES += webradiodialog.cpp \ webradioplugin.cpp \ - webradiosettings.cpp + webradiosettings.cpp \ + webradiosettingswidget.cpp FORMS += webradiodialog.ui diff --git a/plugins/webradioplugin/webradiosettingswidget.cpp b/plugins/webradioplugin/webradiosettingswidget.cpp new file mode 100644 index 0000000..5ab799f --- /dev/null +++ b/plugins/webradioplugin/webradiosettingswidget.cpp @@ -0,0 +1,28 @@ +#include "webradiosettingswidget.h" + +#include + +#include "QStringListWidget/qstringlistwidget.h" + +WebRadioSettingsWidget::WebRadioSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_urlsWidget = new QStringListWidget(m_settings.urls(), this); + layout->addRow(tr("URLs:"), m_urlsWidget); + + setLayout(layout); +} + +bool WebRadioSettingsWidget::isValid(QString &message) const +{ + +} + +void WebRadioSettingsWidget::apply() +{ + +} diff --git a/plugins/webradioplugin/webradiosettingswidget.h b/plugins/webradioplugin/webradiosettingswidget.h new file mode 100644 index 0000000..1499985 --- /dev/null +++ b/plugins/webradioplugin/webradiosettingswidget.h @@ -0,0 +1,32 @@ +#ifndef WEBRADIOSETTINGSWIDGET_H +#define WEBRADIOSETTINGSWIDGET_H + +#include + +#include "settingswidget.h" + +#include "webradiosettings.h" + +class QStringListWidget; + +class ZeiterfassungSettings; + +class WebRadioSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + explicit WebRadioSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + void apply() Q_DECL_OVERRIDE; + +private: + WebRadioSettings m_settings; + + QStringListWidget *m_urlsWidget; +}; + +#endif // WEBRADIOSETTINGSWIDGET_H -- 2.50.1 From 96b5177c844c8b0a19e1025df747fe67eef61327 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 15 Mar 2018 23:54:44 +0100 Subject: [PATCH 29/45] Code cleanup --- plugins/lunchmealplugin/lunchmealwidget.h | 1 + plugins/weatherplugin/weathersettingswidget.h | 1 + zeiterfassungguilib/settingswidget.h | 1 + 3 files changed, 3 insertions(+) diff --git a/plugins/lunchmealplugin/lunchmealwidget.h b/plugins/lunchmealplugin/lunchmealwidget.h index fb7e3c7..a3a9f77 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.h +++ b/plugins/lunchmealplugin/lunchmealwidget.h @@ -10,6 +10,7 @@ class StripsWidget; class LunchMealWidget : public QToolButton { Q_OBJECT + public: explicit LunchMealWidget(StripsWidget &stripsWidget); diff --git a/plugins/weatherplugin/weathersettingswidget.h b/plugins/weatherplugin/weathersettingswidget.h index d962a33..e291159 100644 --- a/plugins/weatherplugin/weathersettingswidget.h +++ b/plugins/weatherplugin/weathersettingswidget.h @@ -14,6 +14,7 @@ class ZeiterfassungSettings; class WeatherSettingsWidget : public SettingsWidget { Q_OBJECT + public: explicit WeatherSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); diff --git a/zeiterfassungguilib/settingswidget.h b/zeiterfassungguilib/settingswidget.h index 56fee50..ed671be 100644 --- a/zeiterfassungguilib/settingswidget.h +++ b/zeiterfassungguilib/settingswidget.h @@ -9,6 +9,7 @@ class ZEITERFASSUNGGUILIBSHARED_EXPORT SettingsWidget : public QWidget { Q_OBJECT + public: explicit SettingsWidget(QWidget *parent = Q_NULLPTR); -- 2.50.1 From 74c7efbc85a11a8d6ec974923a78269a1335eeb8 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Thu, 15 Mar 2018 23:57:57 +0100 Subject: [PATCH 30/45] Implemented WebRadioSettingsWidget::isValid --- plugins/webradioplugin/webradiosettingswidget.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/webradioplugin/webradiosettingswidget.cpp b/plugins/webradioplugin/webradiosettingswidget.cpp index 5ab799f..de171ee 100644 --- a/plugins/webradioplugin/webradiosettingswidget.cpp +++ b/plugins/webradioplugin/webradiosettingswidget.cpp @@ -19,7 +19,16 @@ WebRadioSettingsWidget::WebRadioSettingsWidget(ZeiterfassungSettings &settings, bool WebRadioSettingsWidget::isValid(QString &message) const { + for(const auto &url : m_urlsWidget->stringList()) + { + if(!QUrl::fromUserInput(url).isValid()) + { + message = tr("A web radio url is invalid!"); + return false; + } + } + return true; } void WebRadioSettingsWidget::apply() -- 2.50.1 From 99d0e6dba9f1e73d3e51b1b013b6b9489247f65c Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Fri, 16 Mar 2018 01:24:01 +0100 Subject: [PATCH 31/45] Implemented WebRadioSettingsWidget::apply() --- plugins/webradioplugin/webradiosettingswidget.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/webradioplugin/webradiosettingswidget.cpp b/plugins/webradioplugin/webradiosettingswidget.cpp index de171ee..84ab61c 100644 --- a/plugins/webradioplugin/webradiosettingswidget.cpp +++ b/plugins/webradioplugin/webradiosettingswidget.cpp @@ -33,5 +33,6 @@ bool WebRadioSettingsWidget::isValid(QString &message) const void WebRadioSettingsWidget::apply() { - + if(m_urlsWidget->stringList() != m_settings.urls()) + m_settings.setUrls(m_urlsWidget->stringList()); } -- 2.50.1 From a7652b5db2b82afea8d30967fbb26e055038bbaa Mon Sep 17 00:00:00 2001 From: Daniel Brunner Date: Fri, 16 Mar 2018 12:26:56 +0100 Subject: [PATCH 32/45] Fixed url encoding bug in LunchMealPlugin --- plugins/lunchmealplugin/lunchmealsettings.cpp | 8 ++++---- plugins/lunchmealplugin/lunchmealsettings.h | 5 +++-- plugins/lunchmealplugin/lunchmealsettingswidget.cpp | 10 +++++----- plugins/lunchmealplugin/lunchmealwidget.cpp | 4 ++-- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealsettings.cpp b/plugins/lunchmealplugin/lunchmealsettings.cpp index f210fb6..9e09a0b 100644 --- a/plugins/lunchmealplugin/lunchmealsettings.cpp +++ b/plugins/lunchmealplugin/lunchmealsettings.cpp @@ -8,14 +8,14 @@ LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings) : } -QUrl LunchMealSettings::url() const +QString LunchMealSettings::url() const { return m_settings.value(QStringLiteral("LunchMealPlugin/url"), - QUrl(QStringLiteral("https://brunner.ninja/lunch/%0.txt"))) - .toUrl(); + QStringLiteral("https://brunner.ninja/lunch/%0.txt")) + .toString(); } -void LunchMealSettings::setUrl(const QUrl &url) +void LunchMealSettings::setUrl(const QString &url) { m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url); } diff --git a/plugins/lunchmealplugin/lunchmealsettings.h b/plugins/lunchmealplugin/lunchmealsettings.h index 63d4c83..6d07af7 100644 --- a/plugins/lunchmealplugin/lunchmealsettings.h +++ b/plugins/lunchmealplugin/lunchmealsettings.h @@ -10,8 +10,9 @@ class LunchMealSettings public: LunchMealSettings(ZeiterfassungSettings &settings); - QUrl url() const; - void setUrl(const QUrl &url); + // no QString becuase placeholder %0 encodes wrong in urls! + QString url() const; + void setUrl(const QString &url); QString dateFormat() const; void setDateFormat(const QString &dateFormat); diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp index 0fff7b3..2b43df6 100644 --- a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -10,7 +10,7 @@ LunchMealSettingsWidget::LunchMealSettingsWidget(ZeiterfassungSettings &settings auto layout = new QFormLayout(this); layout->setMargin(0); - m_lineEditUrl = new QLineEdit(m_settings.url().toString(), this); + m_lineEditUrl = new QLineEdit(m_settings.url(), this); layout->addRow(tr("Lunch meal API:"), m_lineEditUrl); m_lineEditDateFormat = new QLineEdit(m_settings.dateFormat(), this); @@ -31,9 +31,9 @@ bool LunchMealSettingsWidget::isValid(QString &message) const void LunchMealSettingsWidget::apply() { - auto url = QUrl::fromUserInput(m_lineEditUrl->text()); - if(m_settings.url() != url) - m_settings.setUrl(url); + if(m_settings.url() != m_lineEditUrl->text()) + m_settings.setUrl(m_lineEditUrl->text()); - m_settings.setDateFormat(m_lineEditDateFormat->text()); + if(m_settings.dateFormat() != m_lineEditDateFormat->text()) + m_settings.setDateFormat(m_lineEditDateFormat->text()); } diff --git a/plugins/lunchmealplugin/lunchmealwidget.cpp b/plugins/lunchmealplugin/lunchmealwidget.cpp index 6083b3c..b5dd611 100644 --- a/plugins/lunchmealplugin/lunchmealwidget.cpp +++ b/plugins/lunchmealplugin/lunchmealwidget.cpp @@ -40,8 +40,8 @@ void LunchMealWidget::dateChanged(const QDate &date) LunchMealSettings settings(m_stripsWidget.mainWindow().settings()); - auto url = settings.url().toString().arg(date.toString(settings.dateFormat())); - m_reply = std::unique_ptr(m_stripsWidget.mainWindow().erfassung().manager()->get(QNetworkRequest(QUrl(url)))); + auto url = QUrl(settings.url().arg(date.toString(settings.dateFormat()))); + m_reply = std::unique_ptr(m_stripsWidget.mainWindow().erfassung().manager()->get(QNetworkRequest(url))); connect(m_reply.get(), &QNetworkReply::finished, this, &LunchMealWidget::finished); } -- 2.50.1 From 3d7220cf6144ef8dff3ea9d2dcea78eda9bb870f Mon Sep 17 00:00:00 2001 From: Daniel Brunner Date: Fri, 16 Mar 2018 12:27:13 +0100 Subject: [PATCH 33/45] Fixed bug in error message on plugin loading --- zeiterfassung/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zeiterfassung/main.cpp b/zeiterfassung/main.cpp index 0a1afc4..21a4aef 100755 --- a/zeiterfassung/main.cpp +++ b/zeiterfassung/main.cpp @@ -292,7 +292,7 @@ bool loadPlugins(QSplashScreen &splashScreen) QPluginLoader pluginLoader(fileInfo.filePath()); if(!pluginLoader.load()) { - QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!"), + QMessageBox::warning(&splashScreen, QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()), QCoreApplication::translate("main", "Could not load plugin %0!").arg(fileInfo.fileName()) % "\n\n" % pluginLoader.errorString()); ok = false; -- 2.50.1 From a3818d13ed2de0f0f3adc40513ce384a5b622617 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 12:44:39 +0100 Subject: [PATCH 34/45] Implemented changed signals in ZeiterfassungSettings --- .../dialogs/timeassignmentdialog.cpp | 2 +- .../zeiterfassungsettings.cpp | 108 +++++++++++++----- zeiterfassungcorelib/zeiterfassungsettings.h | 38 +++++- zeiterfassungguilib/mainwindow.cpp | 2 +- 4 files changed, 115 insertions(+), 35 deletions(-) diff --git a/plugins/advancedviewplugin/dialogs/timeassignmentdialog.cpp b/plugins/advancedviewplugin/dialogs/timeassignmentdialog.cpp index 35d074a..13abd07 100644 --- a/plugins/advancedviewplugin/dialogs/timeassignmentdialog.cpp +++ b/plugins/advancedviewplugin/dialogs/timeassignmentdialog.cpp @@ -44,7 +44,7 @@ TimeAssignmentDialog::TimeAssignmentDialog(const QMap &project ui->comboBoxWorkpackage->addItem(workpackage); ui->comboBoxWorkpackage->clearEditText(); - for(const auto &text : settings.texte()) + for(const auto &text : settings.texts()) ui->comboBoxText->addItem(text); ui->comboBoxText->clearEditText(); } diff --git a/zeiterfassungcorelib/zeiterfassungsettings.cpp b/zeiterfassungcorelib/zeiterfassungsettings.cpp index 0e9d5b2..42da8f2 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.cpp +++ b/zeiterfassungcorelib/zeiterfassungsettings.cpp @@ -1,5 +1,17 @@ #include "zeiterfassungsettings.h" +const QString ZeiterfassungSettings::m_language("language"); +const QString ZeiterfassungSettings::m_url("url"); +const QString ZeiterfassungSettings::m_username("username"); +const QString ZeiterfassungSettings::m_password("password"); +const QString ZeiterfassungSettings::m_projects("projects"); +const QString ZeiterfassungSettings::m_subprojects("subprojects"); +const QString ZeiterfassungSettings::m_workpackages("workpackages"); +const QString ZeiterfassungSettings::m_texts("texte"); +const QString ZeiterfassungSettings::m_theme("theme"); +const QLocale::Language ZeiterfassungSettings::m_defaultLanguage(QLocale::AnyLanguage); +const QUrl ZeiterfassungSettings::m_defaultUrl(QStringLiteral("http://10.1.0.11:8080/evoApps/")); + ZeiterfassungSettings::ZeiterfassungSettings(const QString &organization, const QString &application, QObject *parent) : QSettings(organization, application, parent) @@ -34,121 +46,157 @@ ZeiterfassungSettings::ZeiterfassungSettings(QObject *parent) : QLocale::Language ZeiterfassungSettings::language() const { - return value(QStringLiteral("language"), QLocale::AnyLanguage).value(); + return value(m_language, m_defaultLanguage).value(); } void ZeiterfassungSettings::setLanguage(QLocale::Language language) { - setValue(QStringLiteral("language"), language); + if(this->language() != language) + { + setValue(m_language, language); + Q_EMIT languageChanged(language); + } } QUrl ZeiterfassungSettings::url() const { - return value(QStringLiteral("url"), QUrl(QStringLiteral("http://10.1.0.11:8080/evoApps/"))).toUrl(); + return value(m_url, m_defaultUrl).toUrl(); } void ZeiterfassungSettings::setUrl(const QUrl &url) { - setValue(QStringLiteral("url"), url); + if(this->url() != url) + { + setValue(m_url, url); + Q_EMIT urlChanged(url); + } } QString ZeiterfassungSettings::username() const { - return value(QStringLiteral("username")).toString(); + return value(m_username).toString(); } void ZeiterfassungSettings::setUsername(const QString &username) { - setValue(QStringLiteral("username"), username); + if(this->username() != username) + { + setValue(m_username, username); + Q_EMIT usernameChanged(username); + } } QString ZeiterfassungSettings::password() const { - return value(QStringLiteral("password")).toString(); + return value(m_password).toString(); } void ZeiterfassungSettings::setPassword(const QString &password) { - setValue(QStringLiteral("password"), password); + if(this->password() != password) + { + setValue(m_password, password); + Q_EMIT passwordChanged(password); + } } QStringList ZeiterfassungSettings::projects() const { - return value(QStringLiteral("projects")).toStringList(); + return value(m_projects).toStringList(); } void ZeiterfassungSettings::setProjects(const QStringList &projects) { - setValue(QStringLiteral("projects"), projects); + if(this->projects() != projects) + { + setValue(m_projects, projects); + Q_EMIT projectsChanged(projects); + } } void ZeiterfassungSettings::prependProject(const QString &project) { - prependItem(QStringLiteral("projects"), project); + setProjects(prependItem(projects(), project)); } QStringList ZeiterfassungSettings::subprojects() const { - return value(QStringLiteral("subprojects")).toStringList(); + return value(m_subprojects).toStringList(); } void ZeiterfassungSettings::setSubprojects(const QStringList &subprojects) { - setValue(QStringLiteral("subprojects"), subprojects); + if(this->subprojects() != subprojects) + { + setValue(m_subprojects, subprojects); + Q_EMIT subprojectsChanged(subprojects); + } } void ZeiterfassungSettings::prependSubproject(const QString &subproject) { - prependItem(QStringLiteral("subprojects"), subproject); + setSubprojects(prependItem(subprojects(), subproject)); } QStringList ZeiterfassungSettings::workpackages() const { - return value(QStringLiteral("workpackages")).toStringList(); + return value(m_workpackages).toStringList(); } void ZeiterfassungSettings::setWorkpackages(const QStringList &workpackages) { - setValue(QStringLiteral("workpackages"), workpackages); + if(this->workpackages() != workpackages) + { + setValue(m_workpackages, workpackages); + Q_EMIT workpackagesChanged(workpackages); + } } void ZeiterfassungSettings::prependWorkpackage(const QString &workpackage) { - prependItem(QStringLiteral("workpackages"), workpackage); + setWorkpackages(prependItem(workpackages(), workpackage)); } -QStringList ZeiterfassungSettings::texte() const +QStringList ZeiterfassungSettings::texts() const { - return value(QStringLiteral("texte")).toStringList(); + return value(m_texts).toStringList(); } -void ZeiterfassungSettings::setTexte(const QStringList &texte) +void ZeiterfassungSettings::setTexts(const QStringList &texts) { - setValue(QStringLiteral("texte"), texte); + if(this->texts() != texts) + { + setValue(m_texts, texts); + Q_EMIT textsChanged(texts); + } } void ZeiterfassungSettings::prependText(const QString &text) { - prependItem(QStringLiteral("texte"), text); + setTexts(prependItem(texts(), text)); } QString ZeiterfassungSettings::theme() const { - return value(QStringLiteral("theme")).toString(); + return value(m_theme).toString(); } void ZeiterfassungSettings::setTheme(const QString &theme) { - setValue(QStringLiteral("theme"), theme); + if(this->theme() != theme) + { + setValue(m_theme, theme); + Q_EMIT themeChanged(theme); + } } -void ZeiterfassungSettings::prependItem(const QString &name, const QString &item) +QStringList ZeiterfassungSettings::prependItem(QStringList list, const QString &item) { if(item.trimmed().isEmpty()) - return; + return list; - auto entries = value(name).toStringList(); - entries.removeAll(item); - entries.prepend(item); - setValue(name, entries); + list.removeAll(item); + list.prepend(item); + + return list; } diff --git a/zeiterfassungcorelib/zeiterfassungsettings.h b/zeiterfassungcorelib/zeiterfassungsettings.h index 4ea1510..8b35a75 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.h +++ b/zeiterfassungcorelib/zeiterfassungsettings.h @@ -12,6 +12,15 @@ class ZEITERFASSUNGCORELIBSHARED_EXPORT ZeiterfassungSettings : public QSettings { Q_OBJECT + Q_PROPERTY(QLocale::Language language READ language WRITE setLanguage NOTIFY languageChanged) + Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) + Q_PROPERTY(QString username READ username WRITE setUsername NOTIFY usernameChanged) + Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged) + Q_PROPERTY(QStringList projects READ projects WRITE setProjects NOTIFY projectsChanged) + Q_PROPERTY(QStringList subprojects READ subprojects WRITE setSubprojects NOTIFY subprojectsChanged) + Q_PROPERTY(QStringList workpackages READ workpackages WRITE setWorkpackages NOTIFY workpackagesChanged) + Q_PROPERTY(QStringList texts READ texts WRITE setTexts NOTIFY textsChanged) + Q_PROPERTY(QString theme READ theme WRITE setTheme NOTIFY themeChanged) public: explicit ZeiterfassungSettings(const QString &organization, @@ -47,13 +56,36 @@ public: void setWorkpackages(const QStringList &workpackages); void prependWorkpackage(const QString &workpackage); - QStringList texte() const; - void setTexte(const QStringList &texte); + QStringList texts() const; + void setTexts(const QStringList &texts); void prependText(const QString &text); QString theme() const; void setTheme(const QString &theme); +Q_SIGNALS: + void languageChanged(QLocale::Language language); + void urlChanged(const QUrl &url); + void usernameChanged(const QString &username); + void passwordChanged(const QString &password); + void projectsChanged(const QStringList &projects); + void subprojectsChanged(const QStringList &subprojects); + void workpackagesChanged(const QStringList &workpackages); + void textsChanged(const QStringList &texts); + void themeChanged(const QString &theme); + private: - void prependItem(const QString &name, const QString &item); + QStringList prependItem(QStringList list, const QString &item); + + static const QString m_language; + static const QString m_url; + static const QString m_username; + static const QString m_password; + static const QString m_projects; + static const QString m_subprojects; + static const QString m_workpackages; + static const QString m_texts; + static const QString m_theme; + static const QLocale::Language m_defaultLanguage; + static const QUrl m_defaultUrl; }; diff --git a/zeiterfassungguilib/mainwindow.cpp b/zeiterfassungguilib/mainwindow.cpp index df471f6..01ea863 100644 --- a/zeiterfassungguilib/mainwindow.cpp +++ b/zeiterfassungguilib/mainwindow.cpp @@ -458,7 +458,7 @@ void MainWindow::updateComboboxes() ui->comboBoxText->clear(); { - auto texte = m_settings.texte(); + auto texte = m_settings.texts(); for(const auto &text : texte) ui->comboBoxText->addItem(text); if(texte.count()) -- 2.50.1 From 5061cfcdba73b30bbe7f215a66521abafcacec94 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 12:53:26 +0100 Subject: [PATCH 35/45] Implemented changed signals in LunchMealSettings --- plugins/lunchmealplugin/lunchmealsettings.cpp | 26 ++++++++++++++----- plugins/lunchmealplugin/lunchmealsettings.h | 18 +++++++++++-- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealsettings.cpp b/plugins/lunchmealplugin/lunchmealsettings.cpp index 9e09a0b..9c3dcc1 100644 --- a/plugins/lunchmealplugin/lunchmealsettings.cpp +++ b/plugins/lunchmealplugin/lunchmealsettings.cpp @@ -2,7 +2,13 @@ #include "zeiterfassungsettings.h" -LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings) : +const QString LunchMealSettings::m_url("LunchMealPlugin/url"); +const QString LunchMealSettings::m_dateFormat("LunchMealPlugin/dateFormat"); +const QString LunchMealSettings::m_defaultUrl("https://brunner.ninja/lunch/%0.txt"); +const QString LunchMealSettings::m_defaultDateFormat("yyyy-MM-dd"); + +LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings, QObject *parent) : + QObject(parent), m_settings(settings) { @@ -10,22 +16,28 @@ LunchMealSettings::LunchMealSettings(ZeiterfassungSettings &settings) : QString LunchMealSettings::url() const { - return m_settings.value(QStringLiteral("LunchMealPlugin/url"), - QStringLiteral("https://brunner.ninja/lunch/%0.txt")) - .toString(); + return m_settings.value(m_url, m_defaultUrl).toString(); } void LunchMealSettings::setUrl(const QString &url) { - m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url); + if(this->url() != url) + { + m_settings.setValue(QStringLiteral("LunchMealPlugin/url"), url); + Q_EMIT urlChanged(url); + } } QString LunchMealSettings::dateFormat() const { - return m_settings.value(QStringLiteral("LunchMealPlugin/dateFormat"), QStringLiteral("yyyy-MM-dd")).toString(); + return m_settings.value(m_dateFormat, m_defaultDateFormat).toString(); } void LunchMealSettings::setDateFormat(const QString &dateFormat) { - m_settings.setValue(QStringLiteral("LunchMealPlugin/dateFormat"), dateFormat); + if(this->dateFormat() != dateFormat) + { + m_settings.setValue(QStringLiteral("LunchMealPlugin/dateFormat"), dateFormat); + Q_EMIT dateFormatChanged(dateFormat); + } } diff --git a/plugins/lunchmealplugin/lunchmealsettings.h b/plugins/lunchmealplugin/lunchmealsettings.h index 6d07af7..daa3d2b 100644 --- a/plugins/lunchmealplugin/lunchmealsettings.h +++ b/plugins/lunchmealplugin/lunchmealsettings.h @@ -1,14 +1,19 @@ #ifndef LUNCHMEALSETTINGS_H #define LUNCHMEALSETTINGS_H +#include #include class ZeiterfassungSettings; -class LunchMealSettings +class LunchMealSettings : public QObject { + Q_OBJECT + Q_PROPERTY(QString url READ url WRITE setUrl NOTIFY urlChanged) + Q_PROPERTY(QString dateFormat READ dateFormat WRITE setDateFormat NOTIFY dateFormatChanged) + public: - LunchMealSettings(ZeiterfassungSettings &settings); + LunchMealSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR); // no QString becuase placeholder %0 encodes wrong in urls! QString url() const; @@ -17,8 +22,17 @@ public: QString dateFormat() const; void setDateFormat(const QString &dateFormat); +Q_SIGNALS: + void urlChanged(const QString &url); + void dateFormatChanged(const QString &dateFormat); + private: ZeiterfassungSettings &m_settings; + + static const QString m_url; + static const QString m_dateFormat; + static const QString m_defaultUrl; + static const QString m_defaultDateFormat; }; #endif // LUNCHMEALSETTINGS_H -- 2.50.1 From 54aa0e9379b9001efed83ee29af49a6a4351cd87 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 13:12:49 +0100 Subject: [PATCH 36/45] Added settings to presenceplugin for interval #80 --- plugins/presenceplugin/presenceplugin.cpp | 6 ++++ plugins/presenceplugin/presenceplugin.h | 2 ++ plugins/presenceplugin/presenceplugin.pro | 8 +++-- plugins/presenceplugin/presencesettings.cpp | 27 +++++++++++++++++ plugins/presenceplugin/presencesettings.h | 29 +++++++++++++++++++ .../presenceplugin/presencesettingswidget.cpp | 29 +++++++++++++++++++ .../presenceplugin/presencesettingswidget.h | 28 ++++++++++++++++++ plugins/presenceplugin/presencewidget.cpp | 8 ++--- 8 files changed, 131 insertions(+), 6 deletions(-) create mode 100644 plugins/presenceplugin/presencesettings.cpp create mode 100644 plugins/presenceplugin/presencesettings.h create mode 100644 plugins/presenceplugin/presencesettingswidget.cpp create mode 100644 plugins/presenceplugin/presencesettingswidget.h diff --git a/plugins/presenceplugin/presenceplugin.cpp b/plugins/presenceplugin/presenceplugin.cpp index 870f593..c954e20 100644 --- a/plugins/presenceplugin/presenceplugin.cpp +++ b/plugins/presenceplugin/presenceplugin.cpp @@ -9,6 +9,7 @@ #include "mainwindow.h" #include "presencewidget.h" +#include "presencesettingswidget.h" PresencePlugin::PresencePlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -34,3 +35,8 @@ void PresencePlugin::attachTo(MainWindow &mainWindow) { mainWindow.statusBar()->addWidget(new PresenceWidget(mainWindow)); } + +SettingsWidget *PresencePlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new PresenceSettingsWidget(settings, parent); +} diff --git a/plugins/presenceplugin/presenceplugin.h b/plugins/presenceplugin/presenceplugin.h index 2907b7f..2f578dc 100644 --- a/plugins/presenceplugin/presenceplugin.h +++ b/plugins/presenceplugin/presenceplugin.h @@ -19,6 +19,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/presenceplugin/presenceplugin.pro b/plugins/presenceplugin/presenceplugin.pro index c4b421b..82d4ba5 100644 --- a/plugins/presenceplugin/presenceplugin.pro +++ b/plugins/presenceplugin/presenceplugin.pro @@ -17,10 +17,14 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += presenceplugin.h \ - presencewidget.h + presencewidget.h \ + presencesettings.h \ + presencesettingswidget.h SOURCES += presenceplugin.cpp \ - presencewidget.cpp + presencewidget.cpp \ + presencesettings.cpp \ + presencesettingswidget.cpp FORMS += diff --git a/plugins/presenceplugin/presencesettings.cpp b/plugins/presenceplugin/presencesettings.cpp new file mode 100644 index 0000000..d1e315c --- /dev/null +++ b/plugins/presenceplugin/presencesettings.cpp @@ -0,0 +1,27 @@ +#include "presencesettings.h" + +#include "zeiterfassungsettings.h" + +const QString PresenceSettings::m_interval("PresencePlugin/interval"); +const int PresenceSettings::m_defaultInterval(60000); + +PresenceSettings::PresenceSettings(ZeiterfassungSettings &settings, QObject *parent) : + QObject(parent), + m_settings(settings) +{ + +} + +int PresenceSettings::interval() const +{ + return m_settings.value(m_interval, m_defaultInterval).toInt(); +} + +void PresenceSettings::setInterval(int interval) +{ + if(this->interval() != interval) + { + m_settings.setValue(m_interval, interval); + Q_EMIT intervalChanged(interval); + } +} diff --git a/plugins/presenceplugin/presencesettings.h b/plugins/presenceplugin/presencesettings.h new file mode 100644 index 0000000..5df7126 --- /dev/null +++ b/plugins/presenceplugin/presencesettings.h @@ -0,0 +1,29 @@ +#ifndef PRESENCESETTINGS_H +#define PRESENCESETTINGS_H + +#include + +class ZeiterfassungSettings; + +class PresenceSettings : public QObject +{ + Q_OBJECT + Q_PROPERTY(int interval READ interval WRITE setInterval NOTIFY intervalChanged) + +public: + PresenceSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR); + + int interval() const; + void setInterval(int interval); + +Q_SIGNALS: + void intervalChanged(int interval); + +private: + ZeiterfassungSettings &m_settings; + + static const QString m_interval; + static const int m_defaultInterval; +}; + +#endif // PRESENCESETTINGS_H diff --git a/plugins/presenceplugin/presencesettingswidget.cpp b/plugins/presenceplugin/presencesettingswidget.cpp new file mode 100644 index 0000000..bd7e027 --- /dev/null +++ b/plugins/presenceplugin/presencesettingswidget.cpp @@ -0,0 +1,29 @@ +#include "presencesettingswidget.h" + +#include +#include + +PresenceSettingsWidget::PresenceSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_spinBox = new QSpinBox(this); + m_spinBox->setRange(0, std::numeric_limits::max()); + m_spinBox->setValue(m_settings.interval()); + layout->addRow(tr("Interval(ms):"), m_spinBox); + + setLayout(layout); +} + +bool PresenceSettingsWidget::isValid(QString &message) const +{ + return true; +} + +void PresenceSettingsWidget::apply() +{ + m_settings.setInterval(m_spinBox->value()); +} diff --git a/plugins/presenceplugin/presencesettingswidget.h b/plugins/presenceplugin/presencesettingswidget.h new file mode 100644 index 0000000..6aaf882 --- /dev/null +++ b/plugins/presenceplugin/presencesettingswidget.h @@ -0,0 +1,28 @@ +#ifndef PRESENCESETTINGSWIDGET_H +#define PRESENCESETTINGSWIDGET_H + +#include "settingswidget.h" + +#include "presencesettings.h" + +class QSpinBox; + +class PresenceSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + explicit PresenceSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + virtual bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + virtual void apply() Q_DECL_OVERRIDE; + +private: + PresenceSettings m_settings; + + QSpinBox *m_spinBox; +}; + +#endif // PRESENCESETTINGSWIDGET_H diff --git a/plugins/presenceplugin/presencewidget.cpp b/plugins/presenceplugin/presencewidget.cpp index ee7ddbb..85af498 100644 --- a/plugins/presenceplugin/presencewidget.cpp +++ b/plugins/presenceplugin/presencewidget.cpp @@ -1,17 +1,17 @@ #include "presencewidget.h" #include -#include +#include #include #include #include #include -#include - #include "mainwindow.h" #include "zeiterfassungapi.h" +#include "presencesettings.h" + PresenceWidget::PresenceWidget(MainWindow &mainWindow) : QPushButton(&mainWindow), m_mainWindow(mainWindow) @@ -27,7 +27,7 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : m_mainWindow.menuView()->addAction(m_action); auto timer = new QTimer(this); - timer->setInterval(60000); + timer->setInterval(PresenceSettings(mainWindow.settings()).interval()); connect(timer, &QTimer::timeout, this, &PresenceWidget::refresh); timer->start(); -- 2.50.1 From 36c2c143a5540573da39a7b556d33a88567f4895 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 14:51:56 +0100 Subject: [PATCH 37/45] Added UpdaterSettings #81 --- plugins/updaterplugin/updaterdialog.cpp | 12 +++---- plugins/updaterplugin/updaterplugin.cpp | 5 +-- plugins/updaterplugin/updaterplugin.pro | 6 ++-- plugins/updaterplugin/updatersettings.cpp | 42 +++++++++++++++++++++++ plugins/updaterplugin/updatersettings.h | 37 ++++++++++++++++++++ 5 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 plugins/updaterplugin/updatersettings.cpp create mode 100644 plugins/updaterplugin/updatersettings.h diff --git a/plugins/updaterplugin/updaterdialog.cpp b/plugins/updaterplugin/updaterdialog.cpp index 61b3b62..0e3c6f4 100644 --- a/plugins/updaterplugin/updaterdialog.cpp +++ b/plugins/updaterplugin/updaterdialog.cpp @@ -18,6 +18,8 @@ #include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" +#include "updatersettings.h" + UpdaterDialog::UpdaterDialog(MainWindow &mainWindow) : ZeiterfassungDialog(&mainWindow), ui(new Ui::UpdaterDialog), @@ -30,9 +32,7 @@ UpdaterDialog::UpdaterDialog(MainWindow &mainWindow) : connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &UpdaterDialog::acceptedSlot); connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &UpdaterDialog::rejectedSlot); - auto url = m_mainWindow.settings().value(QStringLiteral("UpdaterPlugin/url"), - QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases")).toString(); - m_reply = m_mainWindow.erfassung().manager()->get(QNetworkRequest(QUrl(url))); + m_reply = m_mainWindow.erfassung().manager()->get(QNetworkRequest(UpdaterSettings(mainWindow.settings()).url())); connect(m_reply, &QNetworkReply::finished, this, &UpdaterDialog::finished); } @@ -44,7 +44,7 @@ UpdaterDialog::~UpdaterDialog() void UpdaterDialog::acceptedSlot() { if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + UpdaterSettings(m_mainWindow.settings()).setLastUpdateCheck(QDate::currentDate()); if(!QDesktopServices::openUrl(m_url)) QMessageBox::warning(this, tr("Could not open default webbrowser!"), tr("Could not open default webbrowser!")); @@ -55,7 +55,7 @@ void UpdaterDialog::acceptedSlot() void UpdaterDialog::rejectedSlot() { if(ui->checkBoxDontShow->isChecked()) - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + UpdaterSettings(m_mainWindow.settings()).setLastUpdateCheck(QDate::currentDate()); reject(); } @@ -102,7 +102,7 @@ void UpdaterDialog::finished() } } - m_mainWindow.settings().setValue(QStringLiteral("UpdaterPlugin/lastUpdateCheck"), QDate::currentDate()); + UpdaterSettings(m_mainWindow.settings()).setLastUpdateCheck(QDate::currentDate()); deleteLater(); } diff --git a/plugins/updaterplugin/updaterplugin.cpp b/plugins/updaterplugin/updaterplugin.cpp index c38ace3..be6a508 100644 --- a/plugins/updaterplugin/updaterplugin.cpp +++ b/plugins/updaterplugin/updaterplugin.cpp @@ -9,6 +9,7 @@ #include "zeiterfassungsettings.h" #include "zeiterfassungapi.h" +#include "updatersettings.h" #include "updaterdialog.h" UpdaterPlugin::UpdaterPlugin(QObject *parent) : @@ -33,7 +34,7 @@ UpdaterPlugin::UpdaterPlugin(QObject *parent) : void UpdaterPlugin::attachTo(MainWindow &mainWindow) { - if(mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate().isNull() || - mainWindow.settings().value(QStringLiteral("UpdaterPlugin/lastUpdateCheck")).toDate() < QDate::currentDate()) + auto lastUpdateCheck = UpdaterSettings(mainWindow.settings()).lastUpdateCheck(); + if(lastUpdateCheck.isNull() || lastUpdateCheck < QDate::currentDate()) new UpdaterDialog(mainWindow); } diff --git a/plugins/updaterplugin/updaterplugin.pro b/plugins/updaterplugin/updaterplugin.pro index ec3d037..b27cd2f 100644 --- a/plugins/updaterplugin/updaterplugin.pro +++ b/plugins/updaterplugin/updaterplugin.pro @@ -17,10 +17,12 @@ DEPENDPATH += $$PWD/$${PROJECT_ROOT}/zeiterfassungcorelib $$PWD/$${PROJECT_ROOT} DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSAGELOGCONTEXT HEADERS += updaterdialog.h \ - updaterplugin.h + updaterplugin.h \ + updatersettings.h SOURCES += updaterdialog.cpp \ - updaterplugin.cpp + updaterplugin.cpp \ + updatersettings.cpp FORMS += updaterdialog.ui diff --git a/plugins/updaterplugin/updatersettings.cpp b/plugins/updaterplugin/updatersettings.cpp new file mode 100644 index 0000000..2ea0fff --- /dev/null +++ b/plugins/updaterplugin/updatersettings.cpp @@ -0,0 +1,42 @@ +#include "updatersettings.h" + +#include "zeiterfassungsettings.h" + +const QString UpdaterSettings::m_url("UpdaterPlugin/url"); +const QString UpdaterSettings::m_lastUpdateCheck("UpdaterPlugin/lastUpdateCheck"); +const QUrl UpdaterSettings::m_defaultUrl(QStringLiteral("https://api.github.com/repos/0xFEEDC0DE64/QtZeiterfassung/releases")); + +UpdaterSettings::UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent) : + QObject(parent), + m_settings(settings) +{ + +} + +QUrl UpdaterSettings::url() const +{ + return m_settings.value(m_url, m_defaultUrl).toUrl(); +} + +void UpdaterSettings::setUrl(const QUrl &url) +{ + if(this->url() != url) + { + m_settings.setValue(m_url, url); + Q_EMIT urlChanged(url); + } +} + +QDate UpdaterSettings::lastUpdateCheck() const +{ + return m_settings.value(m_lastUpdateCheck).toDate(); +} + +void UpdaterSettings::setLastUpdateCheck(const QDate &lastUpdateCheck) +{ + if(this->lastUpdateCheck() != lastUpdateCheck) + { + m_settings.setValue(m_lastUpdateCheck, lastUpdateCheck); + Q_EMIT lastUpdateCheckChanged(lastUpdateCheck); + } +} diff --git a/plugins/updaterplugin/updatersettings.h b/plugins/updaterplugin/updatersettings.h new file mode 100644 index 0000000..523a9d2 --- /dev/null +++ b/plugins/updaterplugin/updatersettings.h @@ -0,0 +1,37 @@ +#ifndef UPDATERSETTINGS_H +#define UPDATERSETTINGS_H + +#include +#include +#include + +class ZeiterfassungSettings; + +class UpdaterSettings : public QObject +{ + Q_OBJECT + Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) + Q_PROPERTY(QDate lastUpdateCheck READ lastUpdateCheck WRITE setLastUpdateCheck NOTIFY lastUpdateCheckChanged) + +public: + explicit UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent = nullptr); + + QUrl url() const; + void setUrl(const QUrl &url); + + QDate lastUpdateCheck() const; + void setLastUpdateCheck(const QDate &lastUpdateCheck); + +Q_SIGNALS: + void urlChanged(const QUrl &url); + void lastUpdateCheckChanged(const QDate &lastUpdateCheck); + +private: + ZeiterfassungSettings &m_settings; + + static const QString m_url; + static const QString m_lastUpdateCheck; + static const QUrl m_defaultUrl; +}; + +#endif // UPDATERSETTINGS_H -- 2.50.1 From 937425a4a52ffa4f56c1622dcd2b6628d3cb90a5 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 14:58:59 +0100 Subject: [PATCH 38/45] Added UpdaterSettingsWidget #81 --- plugins/updaterplugin/updaterplugin.cpp | 6 ++++ plugins/updaterplugin/updaterplugin.h | 2 ++ plugins/updaterplugin/updaterplugin.pro | 6 ++-- .../updaterplugin/updatersettingswidget.cpp | 32 +++++++++++++++++++ plugins/updaterplugin/updatersettingswidget.h | 28 ++++++++++++++++ 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 plugins/updaterplugin/updatersettingswidget.cpp create mode 100644 plugins/updaterplugin/updatersettingswidget.h diff --git a/plugins/updaterplugin/updaterplugin.cpp b/plugins/updaterplugin/updaterplugin.cpp index be6a508..5654138 100644 --- a/plugins/updaterplugin/updaterplugin.cpp +++ b/plugins/updaterplugin/updaterplugin.cpp @@ -11,6 +11,7 @@ #include "updatersettings.h" #include "updaterdialog.h" +#include "updatersettingswidget.h" UpdaterPlugin::UpdaterPlugin(QObject *parent) : ZeiterfassungPlugin(parent) @@ -38,3 +39,8 @@ void UpdaterPlugin::attachTo(MainWindow &mainWindow) if(lastUpdateCheck.isNull() || lastUpdateCheck < QDate::currentDate()) new UpdaterDialog(mainWindow); } + +SettingsWidget *UpdaterPlugin::settingsWidget(ZeiterfassungSettings &settings, QWidget *parent) const +{ + return new UpdaterSettingsWidget(settings, parent); +} diff --git a/plugins/updaterplugin/updaterplugin.h b/plugins/updaterplugin/updaterplugin.h index 7cefe30..e98d448 100644 --- a/plugins/updaterplugin/updaterplugin.h +++ b/plugins/updaterplugin/updaterplugin.h @@ -19,6 +19,8 @@ public: // ZeiterfassungPlugin interface void attachTo(MainWindow &mainWindow) Q_DECL_OVERRIDE; + virtual SettingsWidget *settingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR) const Q_DECL_OVERRIDE; + private: QTranslator m_translator; }; diff --git a/plugins/updaterplugin/updaterplugin.pro b/plugins/updaterplugin/updaterplugin.pro index b27cd2f..4ce7cec 100644 --- a/plugins/updaterplugin/updaterplugin.pro +++ b/plugins/updaterplugin/updaterplugin.pro @@ -18,11 +18,13 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += updaterdialog.h \ updaterplugin.h \ - updatersettings.h + updatersettings.h \ + updatersettingswidget.h SOURCES += updaterdialog.cpp \ updaterplugin.cpp \ - updatersettings.cpp + updatersettings.cpp \ + updatersettingswidget.cpp FORMS += updaterdialog.ui diff --git a/plugins/updaterplugin/updatersettingswidget.cpp b/plugins/updaterplugin/updatersettingswidget.cpp new file mode 100644 index 0000000..1b0c63b --- /dev/null +++ b/plugins/updaterplugin/updatersettingswidget.cpp @@ -0,0 +1,32 @@ +#include "updatersettingswidget.h" + +#include +#include + +UpdaterSettingsWidget::UpdaterSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent) : + SettingsWidget(parent), + m_settings(settings) +{ + auto layout = new QFormLayout(this); + layout->setMargin(0); + + m_lineEdit = new QLineEdit(m_settings.url().toString(), this); + layout->addRow(tr("Updater url:"), m_lineEdit); + + setLayout(layout); +} + +bool UpdaterSettingsWidget::isValid(QString &message) const +{ + auto valid = QUrl::fromUserInput(m_lineEdit->text()).isValid(); + + if(!valid) + message = tr("The updater url is invalid!"); + + return valid; +} + +void UpdaterSettingsWidget::apply() +{ + m_settings.setUrl(QUrl(m_lineEdit->text())); +} diff --git a/plugins/updaterplugin/updatersettingswidget.h b/plugins/updaterplugin/updatersettingswidget.h new file mode 100644 index 0000000..b5c0cda --- /dev/null +++ b/plugins/updaterplugin/updatersettingswidget.h @@ -0,0 +1,28 @@ +#ifndef UPDATERSETTINGSWIDGET_H +#define UPDATERSETTINGSWIDGET_H + +#include "settingswidget.h" + +#include "updatersettings.h" + +class QLineEdit; + +class UpdaterSettingsWidget : public SettingsWidget +{ + Q_OBJECT + +public: + explicit UpdaterSettingsWidget(ZeiterfassungSettings &settings, QWidget *parent = Q_NULLPTR); + + virtual bool isValid(QString &message) const Q_DECL_OVERRIDE; + +public Q_SLOTS: + virtual void apply() Q_DECL_OVERRIDE; + +private: + UpdaterSettings m_settings; + + QLineEdit *m_lineEdit; +}; + +#endif // UPDATERSETTINGSWIDGET_H -- 2.50.1 From 099a4593c94a3a7dfc92515ff5712f9cecb92fc6 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 15:18:38 +0100 Subject: [PATCH 39/45] Implemented changed signals in WeatherSettings #76 --- plugins/lunchmealplugin/lunchmealsettingswidget.cpp | 7 ++----- plugins/weatherplugin/weathersettings.cpp | 13 +++++++++---- plugins/weatherplugin/weathersettings.h | 6 ++++++ plugins/weatherplugin/weathersettingswidget.cpp | 4 +--- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp index 2b43df6..a1edbb2 100644 --- a/plugins/lunchmealplugin/lunchmealsettingswidget.cpp +++ b/plugins/lunchmealplugin/lunchmealsettingswidget.cpp @@ -31,9 +31,6 @@ bool LunchMealSettingsWidget::isValid(QString &message) const void LunchMealSettingsWidget::apply() { - if(m_settings.url() != m_lineEditUrl->text()) - m_settings.setUrl(m_lineEditUrl->text()); - - if(m_settings.dateFormat() != m_lineEditDateFormat->text()) - m_settings.setDateFormat(m_lineEditDateFormat->text()); + m_settings.setUrl(m_lineEditUrl->text()); + m_settings.setDateFormat(m_lineEditDateFormat->text()); } diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index 52f4062..00ce224 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -2,6 +2,9 @@ #include "zeiterfassungsettings.h" +const QString WeatherSettings::m_url("WeatherPlugin/url"); +const QUrl WeatherSettings::m_defaultUrl(QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83")); + WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings) : m_settings(settings) { @@ -10,12 +13,14 @@ WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings) : QUrl WeatherSettings::url() const { - return m_settings.value(QStringLiteral("WeatherPlugin/url"), - QUrl(QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83"))) - .toUrl(); + return m_settings.value(m_url, m_defaultUrl).toUrl(); } void WeatherSettings::setUrl(const QUrl &url) { - m_settings.setValue(QStringLiteral("WeatherPlugin/url"), url); + if(this->url() != url) + { + m_settings.setValue(m_url, url); + Q_EMIT urlChanged(url); + } } diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index eaa0ff4..175bb2a 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -13,8 +13,14 @@ public: QUrl url() const; void setUrl(const QUrl &url); +Q_SIGNALS: + void urlChanged(const QUrl &url); + private: ZeiterfassungSettings &m_settings; + + static const QString m_url; + static const QUrl m_defaultUrl; }; #endif // WEATHERSETTINGS_H diff --git a/plugins/weatherplugin/weathersettingswidget.cpp b/plugins/weatherplugin/weathersettingswidget.cpp index 5be082a..2e14db6 100644 --- a/plugins/weatherplugin/weathersettingswidget.cpp +++ b/plugins/weatherplugin/weathersettingswidget.cpp @@ -28,7 +28,5 @@ bool WeatherSettingsWidget::isValid(QString &message) const void WeatherSettingsWidget::apply() { - auto url = QUrl::fromUserInput(m_lineEdit->text()); - if(m_settings.url() != url) - m_settings.setUrl(url); + m_settings.setUrl(QUrl::fromUserInput(m_lineEdit->text())); } -- 2.50.1 From 1ce4232224960a4310c235052695d54ab9d7ad24 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 15:26:40 +0100 Subject: [PATCH 40/45] Implemented changed signals in WebRadioSettings #76 --- plugins/webradioplugin/webradiosettings.cpp | 54 ++++++++++++++------- plugins/webradioplugin/webradiosettings.h | 19 +++++++- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/plugins/webradioplugin/webradiosettings.cpp b/plugins/webradioplugin/webradiosettings.cpp index eb6bb44..8acfae3 100644 --- a/plugins/webradioplugin/webradiosettings.cpp +++ b/plugins/webradioplugin/webradiosettings.cpp @@ -2,6 +2,24 @@ #include "zeiterfassungsettings.h" +const QString WebRadioSettings::m_urls("WebRadioPlugin/urls"); +const QString WebRadioSettings::m_lastUrl("WebRadioPlugin/lastUrl"); +const QString WebRadioSettings::m_volume("WebRadioPlugin/volume"); +const QStringList WebRadioSettings::m_defaultUrls { + QStringLiteral("http://stream.drumandbass.fm:9002"), + QStringLiteral("http://stream.trap.fm:6002"), + QStringLiteral("http://stream.dubbase.fm:7002"), + QStringLiteral("http://lw1.mp3.tb-group.fm/hb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/tt.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ht.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/trb.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), + QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), + QStringLiteral("https://live.helsinki.at:8088/live160.ogg") +}; +const int WebRadioSettings::m_defaultVolume(100); + WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings) : m_settings(settings) { @@ -9,42 +27,42 @@ WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings) : QStringList WebRadioSettings::urls() const { - return m_settings.value(QStringLiteral("WebRadioPlugin/urls"), QStringList { - QStringLiteral("http://stream.drumandbass.fm:9002"), - QStringLiteral("http://stream.trap.fm:6002"), - QStringLiteral("http://stream.dubbase.fm:7002"), - QStringLiteral("http://lw1.mp3.tb-group.fm/hb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/tb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/tt.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/ht.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/trb.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/ct.mp3"), - QStringLiteral("http://lw1.mp3.tb-group.fm/clt.mp3"), - QStringLiteral("https://live.helsinki.at:8088/live160.ogg") - }).toStringList(); + return m_settings.value(m_urls, m_defaultUrls).toStringList(); } void WebRadioSettings::setUrls(const QStringList &urls) { - m_settings.setValue(QStringLiteral("WebRadioPlugin/urls"), urls); + if(this->urls() != urls) + { + m_settings.setValue(m_urls, urls); + Q_EMIT urlsChanged(urls); + } } QString WebRadioSettings::lastUrl() const { - return m_settings.value(QStringLiteral("WebRadioPlugin/lastUrl")).toString(); + return m_settings.value(m_lastUrl).toString(); } void WebRadioSettings::setLastUrl(const QString &lastUrl) { - m_settings.setValue(QStringLiteral("WebRadioPlugin/lastUrl"), lastUrl); + if(this->lastUrl() != lastUrl) + { + m_settings.setValue(m_lastUrl, lastUrl); + Q_EMIT lastUrlChanged(lastUrl); + } } int WebRadioSettings::volume() const { - return m_settings.value(QStringLiteral("WebRadioPlugin/volume"), 100).toInt(); + return m_settings.value(m_volume, m_defaultVolume).toInt(); } void WebRadioSettings::setVolume(int volume) { - m_settings.setValue(QStringLiteral("WebRadioPlugin/volume"), volume); + if(this->volume() != volume) + { + m_settings.setValue(m_volume, volume); + Q_EMIT volumeChanged(volume); + } } diff --git a/plugins/webradioplugin/webradiosettings.h b/plugins/webradioplugin/webradiosettings.h index 0f1cc4c..662e614 100644 --- a/plugins/webradioplugin/webradiosettings.h +++ b/plugins/webradioplugin/webradiosettings.h @@ -1,12 +1,18 @@ #ifndef WEBRADIOSETTINGS_H #define WEBRADIOSETTINGS_H +#include #include class ZeiterfassungSettings; -class WebRadioSettings +class WebRadioSettings : public QObject { + Q_OBJECT + Q_PROPERTY(QStringList urls READ urls WRITE setUrls NOTIFY urlsChanged) + Q_PROPERTY(QString lastUrl READ lastUrl WRITE setLastUrl NOTIFY lastUrlChanged) + Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged) + public: WebRadioSettings(ZeiterfassungSettings &settings); @@ -19,8 +25,19 @@ public: int volume() const; void setVolume(int volume); +Q_SIGNALS: + void urlsChanged(const QStringList &urls); + void lastUrlChanged(const QString &lastUrl); + void volumeChanged(int volume); + private: ZeiterfassungSettings &m_settings; + + static const QString m_urls; + static const QString m_lastUrl; + static const QString m_volume; + static const QStringList m_defaultUrls; + static const int m_defaultVolume; }; #endif // WEBRADIOSETTINGS_H -- 2.50.1 From 2ee5b8703d719327f890c52742999b9c32eda8ff Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 15:29:07 +0100 Subject: [PATCH 41/45] Made settings classes to QObjects to get signals to work #76 --- plugins/updaterplugin/updatersettings.h | 2 +- plugins/weatherplugin/weathersettings.cpp | 3 ++- plugins/weatherplugin/weathersettings.h | 8 ++++++-- plugins/webradioplugin/webradiosettings.cpp | 3 ++- plugins/webradioplugin/webradiosettings.h | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/plugins/updaterplugin/updatersettings.h b/plugins/updaterplugin/updatersettings.h index 523a9d2..dbce8ea 100644 --- a/plugins/updaterplugin/updatersettings.h +++ b/plugins/updaterplugin/updatersettings.h @@ -14,7 +14,7 @@ class UpdaterSettings : public QObject Q_PROPERTY(QDate lastUpdateCheck READ lastUpdateCheck WRITE setLastUpdateCheck NOTIFY lastUpdateCheckChanged) public: - explicit UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent = nullptr); + explicit UpdaterSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR); QUrl url() const; void setUrl(const QUrl &url); diff --git a/plugins/weatherplugin/weathersettings.cpp b/plugins/weatherplugin/weathersettings.cpp index 00ce224..fc9a99c 100644 --- a/plugins/weatherplugin/weathersettings.cpp +++ b/plugins/weatherplugin/weathersettings.cpp @@ -5,7 +5,8 @@ const QString WeatherSettings::m_url("WeatherPlugin/url"); const QUrl WeatherSettings::m_defaultUrl(QStringLiteral("http://api.openweathermap.org/data/2.5/weather?q=Graz,AT&units=metric&APPID=40f6c892c6162680c6c9235169dc9f83")); -WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings) : +WeatherSettings::WeatherSettings(ZeiterfassungSettings &settings, QObject *parent) : + QObject(parent), m_settings(settings) { diff --git a/plugins/weatherplugin/weathersettings.h b/plugins/weatherplugin/weathersettings.h index 175bb2a..92da89f 100644 --- a/plugins/weatherplugin/weathersettings.h +++ b/plugins/weatherplugin/weathersettings.h @@ -1,14 +1,18 @@ #ifndef WEATHERSETTINGS_H #define WEATHERSETTINGS_H +#include #include class ZeiterfassungSettings; -class WeatherSettings +class WeatherSettings : public QObject { + Q_OBJECT + Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) + public: - WeatherSettings(ZeiterfassungSettings &settings); + WeatherSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR); QUrl url() const; void setUrl(const QUrl &url); diff --git a/plugins/webradioplugin/webradiosettings.cpp b/plugins/webradioplugin/webradiosettings.cpp index 8acfae3..8b65a3a 100644 --- a/plugins/webradioplugin/webradiosettings.cpp +++ b/plugins/webradioplugin/webradiosettings.cpp @@ -20,7 +20,8 @@ const QStringList WebRadioSettings::m_defaultUrls { }; const int WebRadioSettings::m_defaultVolume(100); -WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings) : +WebRadioSettings::WebRadioSettings(ZeiterfassungSettings &settings, QObject *parent) : + QObject(parent), m_settings(settings) { } diff --git a/plugins/webradioplugin/webradiosettings.h b/plugins/webradioplugin/webradiosettings.h index 662e614..e70d7da 100644 --- a/plugins/webradioplugin/webradiosettings.h +++ b/plugins/webradioplugin/webradiosettings.h @@ -14,7 +14,7 @@ class WebRadioSettings : public QObject Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged) public: - WebRadioSettings(ZeiterfassungSettings &settings); + WebRadioSettings(ZeiterfassungSettings &settings, QObject *parent = Q_NULLPTR); QStringList urls() const; void setUrls(const QStringList &urls); -- 2.50.1 From a417a762ab598431faa31ba310bba2e4e1bca5d6 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 15:38:54 +0100 Subject: [PATCH 42/45] ZeiterfassungSettings now removes setting entries if they match with their default value --- .../zeiterfassungsettings.cpp | 46 +++++++++++++++---- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/zeiterfassungcorelib/zeiterfassungsettings.cpp b/zeiterfassungcorelib/zeiterfassungsettings.cpp index 42da8f2..8f6aa6c 100644 --- a/zeiterfassungcorelib/zeiterfassungsettings.cpp +++ b/zeiterfassungcorelib/zeiterfassungsettings.cpp @@ -41,7 +41,6 @@ ZeiterfassungSettings::ZeiterfassungSettings(const QString &fileName, QSettings: ZeiterfassungSettings::ZeiterfassungSettings(QObject *parent) : QSettings(parent) { - } QLocale::Language ZeiterfassungSettings::language() const @@ -53,7 +52,10 @@ void ZeiterfassungSettings::setLanguage(QLocale::Language language) { if(this->language() != language) { - setValue(m_language, language); + if(m_defaultLanguage == language) + remove(m_language); + else + setValue(m_language, language); Q_EMIT languageChanged(language); } } @@ -67,7 +69,10 @@ void ZeiterfassungSettings::setUrl(const QUrl &url) { if(this->url() != url) { - setValue(m_url, url); + if(m_defaultUrl == url) + remove(m_url); + else + setValue(m_url, url); Q_EMIT urlChanged(url); } } @@ -81,7 +86,10 @@ void ZeiterfassungSettings::setUsername(const QString &username) { if(this->username() != username) { - setValue(m_username, username); + if(username.isEmpty()) + remove(m_username); + else + setValue(m_username, username); Q_EMIT usernameChanged(username); } } @@ -95,7 +103,10 @@ void ZeiterfassungSettings::setPassword(const QString &password) { if(this->password() != password) { - setValue(m_password, password); + if(password.isEmpty()) + remove(m_password); + else + setValue(m_password, password); Q_EMIT passwordChanged(password); } } @@ -109,7 +120,10 @@ void ZeiterfassungSettings::setProjects(const QStringList &projects) { if(this->projects() != projects) { - setValue(m_projects, projects); + if(projects.isEmpty()) + remove(m_projects); + else + setValue(m_projects, projects); Q_EMIT projectsChanged(projects); } } @@ -128,7 +142,10 @@ void ZeiterfassungSettings::setSubprojects(const QStringList &subprojects) { if(this->subprojects() != subprojects) { - setValue(m_subprojects, subprojects); + if(subprojects.isEmpty()) + remove(m_subprojects); + else + setValue(m_subprojects, subprojects); Q_EMIT subprojectsChanged(subprojects); } } @@ -147,7 +164,10 @@ void ZeiterfassungSettings::setWorkpackages(const QStringList &workpackages) { if(this->workpackages() != workpackages) { - setValue(m_workpackages, workpackages); + if(workpackages.isEmpty()) + remove(m_workpackages); + else + setValue(m_workpackages, workpackages); Q_EMIT workpackagesChanged(workpackages); } } @@ -166,7 +186,10 @@ void ZeiterfassungSettings::setTexts(const QStringList &texts) { if(this->texts() != texts) { - setValue(m_texts, texts); + if(m_texts.isEmpty()) + remove(m_texts); + else + setValue(m_texts, texts); Q_EMIT textsChanged(texts); } } @@ -185,7 +208,10 @@ void ZeiterfassungSettings::setTheme(const QString &theme) { if(this->theme() != theme) { - setValue(m_theme, theme); + if(theme.isEmpty()) + remove(m_theme); + else + setValue(m_theme, theme); Q_EMIT themeChanged(theme); } } -- 2.50.1 From 8dcb98d77ca0a26bb2283f88a169569b63e6c00f Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 16:06:46 +0100 Subject: [PATCH 43/45] Added new ccache config flag #62 --- QtZeiterfassung.pro | 2 ++ plugins/absenceplugin/absenceplugin.pro | 4 +++- plugins/advancedviewplugin/advancedviewplugin.pro | 4 +++- plugins/devtoolsplugin/devtoolsplugin.pro | 4 +++- plugins/lunchmealplugin/lunchmealplugin.pro | 4 +++- plugins/presenceplugin/presenceplugin.pro | 4 +++- plugins/profileplugin/profileplugin.pro | 4 +++- plugins/reportsplugin/reportsplugin.pro | 4 +++- plugins/updaterplugin/updaterplugin.pro | 12 +++++++----- plugins/weatherplugin/weatherplugin.pro | 4 +++- plugins/webradioplugin/webradioplugin.pro | 8 +++++--- zeiterfassung/zeiterfassung.pro | 2 ++ zeiterfassungcorelib/zeiterfassungcorelib.pro | 2 ++ zeiterfassungguilib/zeiterfassungguilib.pro | 2 ++ 14 files changed, 44 insertions(+), 16 deletions(-) diff --git a/QtZeiterfassung.pro b/QtZeiterfassung.pro index 7fae094..6ecd48f 100644 --- a/QtZeiterfassung.pro +++ b/QtZeiterfassung.pro @@ -14,3 +14,5 @@ win32: include(installs_win32.pri) OTHER_FILES += .travis.yml \ Dockerfile + +include(ccache.pri) diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index d938567..bbe1e78 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -35,4 +35,6 @@ TRANSLATIONS += translations/absenceplugin_en.ts \ OTHER_FILES += absenceplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/advancedviewplugin/advancedviewplugin.pro b/plugins/advancedviewplugin/advancedviewplugin.pro index 6c89a24..fc4ae60 100644 --- a/plugins/advancedviewplugin/advancedviewplugin.pro +++ b/plugins/advancedviewplugin/advancedviewplugin.pro @@ -43,4 +43,6 @@ TRANSLATIONS += translations/advancedviewplugin_en.ts \ OTHER_FILES += advancedviewplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/devtoolsplugin/devtoolsplugin.pro b/plugins/devtoolsplugin/devtoolsplugin.pro index 83335cb..b7409cf 100644 --- a/plugins/devtoolsplugin/devtoolsplugin.pro +++ b/plugins/devtoolsplugin/devtoolsplugin.pro @@ -33,4 +33,6 @@ TRANSLATIONS += translations/devtoolsplugin_en.ts \ OTHER_FILES += devtoolsplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/lunchmealplugin/lunchmealplugin.pro b/plugins/lunchmealplugin/lunchmealplugin.pro index f2d730d..8e72145 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.pro +++ b/plugins/lunchmealplugin/lunchmealplugin.pro @@ -37,4 +37,6 @@ TRANSLATIONS += translations/lunchmealplugin_en.ts \ OTHER_FILES += lunchmealplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/presenceplugin/presenceplugin.pro b/plugins/presenceplugin/presenceplugin.pro index 82d4ba5..d190354 100644 --- a/plugins/presenceplugin/presenceplugin.pro +++ b/plugins/presenceplugin/presenceplugin.pro @@ -35,4 +35,6 @@ TRANSLATIONS += translations/presenceplugin_en.ts \ OTHER_FILES += presenceplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/profileplugin/profileplugin.pro b/plugins/profileplugin/profileplugin.pro index 42cd1c0..c2d1580 100644 --- a/plugins/profileplugin/profileplugin.pro +++ b/plugins/profileplugin/profileplugin.pro @@ -31,4 +31,6 @@ TRANSLATIONS += translations/profileplugin_en.ts \ OTHER_FILES += profileplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/reportsplugin/reportsplugin.pro b/plugins/reportsplugin/reportsplugin.pro index 002d60b..d9d734d 100644 --- a/plugins/reportsplugin/reportsplugin.pro +++ b/plugins/reportsplugin/reportsplugin.pro @@ -31,4 +31,6 @@ TRANSLATIONS += translations/reportsplugin_en.ts \ OTHER_FILES += reportsplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/updaterplugin/updaterplugin.pro b/plugins/updaterplugin/updaterplugin.pro index 4ce7cec..403e55d 100644 --- a/plugins/updaterplugin/updaterplugin.pro +++ b/plugins/updaterplugin/updaterplugin.pro @@ -18,13 +18,13 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += updaterdialog.h \ updaterplugin.h \ - updatersettings.h \ - updatersettingswidget.h + updatersettings.h \ + updatersettingswidget.h SOURCES += updaterdialog.cpp \ updaterplugin.cpp \ - updatersettings.cpp \ - updatersettingswidget.cpp + updatersettings.cpp \ + updatersettingswidget.cpp FORMS += updaterdialog.ui @@ -35,4 +35,6 @@ TRANSLATIONS += translations/updaterplugin_en.ts \ OTHER_FILES += updaterplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/weatherplugin/weatherplugin.pro b/plugins/weatherplugin/weatherplugin.pro index ebed643..c6f8c43 100644 --- a/plugins/weatherplugin/weatherplugin.pro +++ b/plugins/weatherplugin/weatherplugin.pro @@ -35,4 +35,6 @@ TRANSLATIONS += translations/weatherplugin_en.ts \ OTHER_FILES += weatherplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index 0c8ee81..df6c374 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -19,12 +19,12 @@ DEFINES += QT_DEPRECATED_WARNINGS QT_DISABLE_DEPRECATED_BEFORE=0x060000 QT_MESSA HEADERS += webradiodialog.h \ webradioplugin.h \ webradiosettings.h \ - webradiosettingswidget.h + webradiosettingswidget.h SOURCES += webradiodialog.cpp \ webradioplugin.cpp \ webradiosettings.cpp \ - webradiosettingswidget.cpp + webradiosettingswidget.cpp FORMS += webradiodialog.ui @@ -35,4 +35,6 @@ TRANSLATIONS += translations/webradioplugin_en.ts \ OTHER_FILES += webradioplugin.json -include(../../lrelease.pri) +include($${PROJECT_ROOT}/ccache.pri) + +include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassung/zeiterfassung.pro b/zeiterfassung/zeiterfassung.pro index 506e989..5d10e21 100755 --- a/zeiterfassung/zeiterfassung.pro +++ b/zeiterfassung/zeiterfassung.pro @@ -32,6 +32,8 @@ RESOURCES += zeiterfassung_resources.qrc TRANSLATIONS += translations/zeiterfassung_en.ts \ translations/zeiterfassung_de.ts +include($${PROJECT_ROOT}ccache.pri) + include($${PROJECT_ROOT}/lrelease.pri) include(installs.pri) diff --git a/zeiterfassungcorelib/zeiterfassungcorelib.pro b/zeiterfassungcorelib/zeiterfassungcorelib.pro index 9ba114a..fedd85b 100644 --- a/zeiterfassungcorelib/zeiterfassungcorelib.pro +++ b/zeiterfassungcorelib/zeiterfassungcorelib.pro @@ -62,4 +62,6 @@ RESOURCES += TRANSLATIONS += translations/zeiterfassungcorelib_en.ts \ translations/zeiterfassungcorelib_de.ts +include($${PROJECT_ROOT}ccache.pri) + include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index 15c428a..759b9e5 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -48,6 +48,8 @@ RESOURCES += zeiterfassungguilib_resources.qrc TRANSLATIONS += translations/zeiterfassungguilib_en.ts \ translations/zeiterfassungguilib_de.ts +include($${PROJECT_ROOT}ccache.pri) + include($${PROJECT_ROOT}/lrelease.pri) include(QStringListWidget/QStringListWidget.pri) -- 2.50.1 From d762049d0760e7bfe64566996609c94663c35fd9 Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 16:18:08 +0100 Subject: [PATCH 44/45] Added ccache to travis #62 --- .travis.yml | 4 +++- ccache.pri | 3 +++ zeiterfassung/zeiterfassung.pro | 2 +- zeiterfassungcorelib/zeiterfassungcorelib.pro | 2 +- zeiterfassungguilib/zeiterfassungguilib.pro | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 ccache.pri diff --git a/.travis.yml b/.travis.yml index 09cf03d..6d2aefd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ compiler: cache: directories: + - ~/.ccache - qt5 install: @@ -18,11 +19,12 @@ install: - if [ ! -f config.summary ] ; then ./configure -prefix `pwd`/build -opensource -confirm-license -nomake examples -nomake tests ; fi - if [ ! -d build ] ; then make -j2 > /dev/null && make install ; fi - popd + - ccache -s script: - mkdir -p build - pushd build - - ../qt5/build/bin/qmake .. -config release + - ../qt5/build/bin/qmake CONFIG+=ccache .. -config release - make -j2 - make install - popd diff --git a/ccache.pri b/ccache.pri new file mode 100644 index 0000000..235b0ae --- /dev/null +++ b/ccache.pri @@ -0,0 +1,3 @@ +ccache { + QMAKE_CXX = ccache $$QMAKE_CXX +} diff --git a/zeiterfassung/zeiterfassung.pro b/zeiterfassung/zeiterfassung.pro index 5d10e21..91696fb 100755 --- a/zeiterfassung/zeiterfassung.pro +++ b/zeiterfassung/zeiterfassung.pro @@ -32,7 +32,7 @@ RESOURCES += zeiterfassung_resources.qrc TRANSLATIONS += translations/zeiterfassung_en.ts \ translations/zeiterfassung_de.ts -include($${PROJECT_ROOT}ccache.pri) +include($${PROJECT_ROOT}/ccache.pri) include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassungcorelib/zeiterfassungcorelib.pro b/zeiterfassungcorelib/zeiterfassungcorelib.pro index fedd85b..5cc9ab4 100644 --- a/zeiterfassungcorelib/zeiterfassungcorelib.pro +++ b/zeiterfassungcorelib/zeiterfassungcorelib.pro @@ -62,6 +62,6 @@ RESOURCES += TRANSLATIONS += translations/zeiterfassungcorelib_en.ts \ translations/zeiterfassungcorelib_de.ts -include($${PROJECT_ROOT}ccache.pri) +include($${PROJECT_ROOT}/ccache.pri) include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index 759b9e5..dc56a64 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -48,7 +48,7 @@ RESOURCES += zeiterfassungguilib_resources.qrc TRANSLATIONS += translations/zeiterfassungguilib_en.ts \ translations/zeiterfassungguilib_de.ts -include($${PROJECT_ROOT}ccache.pri) +include($${PROJECT_ROOT}/ccache.pri) include($${PROJECT_ROOT}/lrelease.pri) -- 2.50.1 From a7a6407696ee0b4720dc504fd06308e4c967523b Mon Sep 17 00:00:00 2001 From: Daniel Brunner <0xFEEDC0DE64@gmail.com> Date: Sat, 24 Mar 2018 16:38:18 +0100 Subject: [PATCH 45/45] Removed ccache feature from qmake again as qmale already offers the same functionality --- QtZeiterfassung.pro | 2 -- ccache.pri | 3 --- plugins/absenceplugin/absenceplugin.pro | 2 -- plugins/advancedviewplugin/advancedviewplugin.pro | 2 -- plugins/devtoolsplugin/devtoolsplugin.pro | 2 -- plugins/lunchmealplugin/lunchmealplugin.pro | 2 -- plugins/presenceplugin/presenceplugin.pro | 2 -- plugins/profileplugin/profileplugin.pro | 2 -- plugins/reportsplugin/reportsplugin.pro | 2 -- plugins/updaterplugin/updaterplugin.pro | 2 -- plugins/weatherplugin/weatherplugin.pro | 2 -- plugins/webradioplugin/webradioplugin.pro | 2 -- zeiterfassung/zeiterfassung.pro | 2 -- zeiterfassungcorelib/zeiterfassungcorelib.pro | 2 -- zeiterfassungguilib/zeiterfassungguilib.pro | 2 -- 15 files changed, 31 deletions(-) delete mode 100644 ccache.pri diff --git a/QtZeiterfassung.pro b/QtZeiterfassung.pro index 6ecd48f..7fae094 100644 --- a/QtZeiterfassung.pro +++ b/QtZeiterfassung.pro @@ -14,5 +14,3 @@ win32: include(installs_win32.pri) OTHER_FILES += .travis.yml \ Dockerfile - -include(ccache.pri) diff --git a/ccache.pri b/ccache.pri deleted file mode 100644 index 235b0ae..0000000 --- a/ccache.pri +++ /dev/null @@ -1,3 +0,0 @@ -ccache { - QMAKE_CXX = ccache $$QMAKE_CXX -} diff --git a/plugins/absenceplugin/absenceplugin.pro b/plugins/absenceplugin/absenceplugin.pro index bbe1e78..b0206c7 100644 --- a/plugins/absenceplugin/absenceplugin.pro +++ b/plugins/absenceplugin/absenceplugin.pro @@ -35,6 +35,4 @@ TRANSLATIONS += translations/absenceplugin_en.ts \ OTHER_FILES += absenceplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/advancedviewplugin/advancedviewplugin.pro b/plugins/advancedviewplugin/advancedviewplugin.pro index fc4ae60..6c90247 100644 --- a/plugins/advancedviewplugin/advancedviewplugin.pro +++ b/plugins/advancedviewplugin/advancedviewplugin.pro @@ -43,6 +43,4 @@ TRANSLATIONS += translations/advancedviewplugin_en.ts \ OTHER_FILES += advancedviewplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/devtoolsplugin/devtoolsplugin.pro b/plugins/devtoolsplugin/devtoolsplugin.pro index b7409cf..1b84eea 100644 --- a/plugins/devtoolsplugin/devtoolsplugin.pro +++ b/plugins/devtoolsplugin/devtoolsplugin.pro @@ -33,6 +33,4 @@ TRANSLATIONS += translations/devtoolsplugin_en.ts \ OTHER_FILES += devtoolsplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/lunchmealplugin/lunchmealplugin.pro b/plugins/lunchmealplugin/lunchmealplugin.pro index 8e72145..a786a82 100644 --- a/plugins/lunchmealplugin/lunchmealplugin.pro +++ b/plugins/lunchmealplugin/lunchmealplugin.pro @@ -37,6 +37,4 @@ TRANSLATIONS += translations/lunchmealplugin_en.ts \ OTHER_FILES += lunchmealplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/presenceplugin/presenceplugin.pro b/plugins/presenceplugin/presenceplugin.pro index d190354..302ff93 100644 --- a/plugins/presenceplugin/presenceplugin.pro +++ b/plugins/presenceplugin/presenceplugin.pro @@ -35,6 +35,4 @@ TRANSLATIONS += translations/presenceplugin_en.ts \ OTHER_FILES += presenceplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/profileplugin/profileplugin.pro b/plugins/profileplugin/profileplugin.pro index c2d1580..c48fefd 100644 --- a/plugins/profileplugin/profileplugin.pro +++ b/plugins/profileplugin/profileplugin.pro @@ -31,6 +31,4 @@ TRANSLATIONS += translations/profileplugin_en.ts \ OTHER_FILES += profileplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/reportsplugin/reportsplugin.pro b/plugins/reportsplugin/reportsplugin.pro index d9d734d..b502ce4 100644 --- a/plugins/reportsplugin/reportsplugin.pro +++ b/plugins/reportsplugin/reportsplugin.pro @@ -31,6 +31,4 @@ TRANSLATIONS += translations/reportsplugin_en.ts \ OTHER_FILES += reportsplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/updaterplugin/updaterplugin.pro b/plugins/updaterplugin/updaterplugin.pro index 403e55d..68e3210 100644 --- a/plugins/updaterplugin/updaterplugin.pro +++ b/plugins/updaterplugin/updaterplugin.pro @@ -35,6 +35,4 @@ TRANSLATIONS += translations/updaterplugin_en.ts \ OTHER_FILES += updaterplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/weatherplugin/weatherplugin.pro b/plugins/weatherplugin/weatherplugin.pro index c6f8c43..2fb4997 100644 --- a/plugins/weatherplugin/weatherplugin.pro +++ b/plugins/weatherplugin/weatherplugin.pro @@ -35,6 +35,4 @@ TRANSLATIONS += translations/weatherplugin_en.ts \ OTHER_FILES += weatherplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/plugins/webradioplugin/webradioplugin.pro b/plugins/webradioplugin/webradioplugin.pro index df6c374..8f7de0b 100644 --- a/plugins/webradioplugin/webradioplugin.pro +++ b/plugins/webradioplugin/webradioplugin.pro @@ -35,6 +35,4 @@ TRANSLATIONS += translations/webradioplugin_en.ts \ OTHER_FILES += webradioplugin.json -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassung/zeiterfassung.pro b/zeiterfassung/zeiterfassung.pro index 91696fb..506e989 100755 --- a/zeiterfassung/zeiterfassung.pro +++ b/zeiterfassung/zeiterfassung.pro @@ -32,8 +32,6 @@ RESOURCES += zeiterfassung_resources.qrc TRANSLATIONS += translations/zeiterfassung_en.ts \ translations/zeiterfassung_de.ts -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) include(installs.pri) diff --git a/zeiterfassungcorelib/zeiterfassungcorelib.pro b/zeiterfassungcorelib/zeiterfassungcorelib.pro index 5cc9ab4..9ba114a 100644 --- a/zeiterfassungcorelib/zeiterfassungcorelib.pro +++ b/zeiterfassungcorelib/zeiterfassungcorelib.pro @@ -62,6 +62,4 @@ RESOURCES += TRANSLATIONS += translations/zeiterfassungcorelib_en.ts \ translations/zeiterfassungcorelib_de.ts -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) diff --git a/zeiterfassungguilib/zeiterfassungguilib.pro b/zeiterfassungguilib/zeiterfassungguilib.pro index dc56a64..15c428a 100644 --- a/zeiterfassungguilib/zeiterfassungguilib.pro +++ b/zeiterfassungguilib/zeiterfassungguilib.pro @@ -48,8 +48,6 @@ RESOURCES += zeiterfassungguilib_resources.qrc TRANSLATIONS += translations/zeiterfassungguilib_en.ts \ translations/zeiterfassungguilib_de.ts -include($${PROJECT_ROOT}/ccache.pri) - include($${PROJECT_ROOT}/lrelease.pri) include(QStringListWidget/QStringListWidget.pri) -- 2.50.1