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