diff --git a/dialogs/buchungdialog.h b/dialogs/buchungdialog.h index fdee1ff..5377f4a 100644 --- a/dialogs/buchungdialog.h +++ b/dialogs/buchungdialog.h @@ -2,10 +2,9 @@ #define BUCHUNGDIALOG_H #include +#include -namespace Ui { -class BuchungDialog; -} +namespace Ui { class BuchungDialog; } class BuchungDialog : public QDialog { diff --git a/dialogs/buchungdialog.ui b/dialogs/buchungdialog.ui index 9dbe081..1bb157f 100644 --- a/dialogs/buchungdialog.ui +++ b/dialogs/buchungdialog.ui @@ -85,6 +85,19 @@ true + + QComboBox::NoInsert + + + + K + + + + + G + + diff --git a/dialogs/kontierungdialog.cpp b/dialogs/kontierungdialog.cpp index c9bdc91..3042c63 100644 --- a/dialogs/kontierungdialog.cpp +++ b/dialogs/kontierungdialog.cpp @@ -2,21 +2,59 @@ #include "ui_kontierungdialog.h" #include -#include +#include #include #include +#include -KontierungDialog::KontierungDialog(Zeiterfassung &erfassung, const Zeiterfassung::UserInfo &userInfo, - const QMap &projekte, QWidget *parent) : +KontierungDialog::KontierungDialog(const QMap &projekte, const QSettings &settings, + QWidget *parent) : QDialog(parent), - ui(new Ui::KontierungDialog), - m_erfassung(erfassung), - m_userInfo(userInfo) + ui(new Ui::KontierungDialog) { ui->setupUi(this); - for(auto iter = projekte.constBegin(); iter != projekte.constEnd(); iter++) - ui->comboBoxProjekt->addItem(iter.value() % " (" % iter.key() % ')', iter.key()); + { + auto preferedProjekte = settings.value("projekte", QStringList()).toStringList(); + + for(const auto &preferedProjekt : preferedProjekte) + { + if(!projekte.contains(preferedProjekt)) + { + qWarning() << "cannot find projekt" << preferedProjekt; + continue; + } + + ui->comboBoxProjekt->addItem(projekte.value(preferedProjekt) % " (" % preferedProjekt % ')', preferedProjekt); + } + + if(preferedProjekte.count()) + { + ui->comboBoxProjekt->addItem(QStringLiteral("--------------")); + + auto model = qobject_cast(ui->comboBoxProjekt->model()); + auto item = model->item(ui->comboBoxProjekt->count() - 1); + item->setFlags(item->flags() & ~(Qt::ItemIsSelectable|Qt::ItemIsEnabled)); + } + + for(auto iter = projekte.constBegin(); iter != projekte.constEnd(); iter++) + { + if(!preferedProjekte.contains(iter.key())) + ui->comboBoxProjekt->addItem(iter.value() % " (" % iter.key() % ')', iter.key()); + } + } + + for(const auto &subprojekt : settings.value("subprojekte", QStringList()).toStringList()) + ui->comboBoxSubprojekt->addItem(subprojekt); + ui->comboBoxSubprojekt->clearEditText(); + + for(const auto &workpackage : settings.value("workpackages", QStringList()).toStringList()) + ui->comboBoxWorkpackage->addItem(workpackage); + ui->comboBoxWorkpackage->clearEditText(); + + for(const auto &text : settings.value("texte", QStringList()).toStringList()) + ui->comboBoxText->addItem(text); + ui->comboBoxText->clearEditText(); } KontierungDialog::~KontierungDialog() @@ -60,30 +98,30 @@ void KontierungDialog::setProjekt(const QString &projekt) QString KontierungDialog::getSubprojekt() const { - return ui->lineEditSubprojekt->text(); + return ui->comboBoxSubprojekt->currentText(); } void KontierungDialog::setSubprojekt(const QString &subprojekt) { - ui->lineEditSubprojekt->setText(subprojekt); + ui->comboBoxSubprojekt->setCurrentText(subprojekt); } QString KontierungDialog::getWorkpackage() const { - return ui->lineEditWorkpackage->text(); + return ui->comboBoxWorkpackage->currentText(); } void KontierungDialog::setWorkpackage(const QString &workpackage) { - ui->lineEditWorkpackage->setText(workpackage); + ui->comboBoxWorkpackage->setCurrentText(workpackage); } QString KontierungDialog::getText() const { - return ui->lineEditText->text(); + return ui->comboBoxText->currentText(); } void KontierungDialog::setText(const QString &text) { - ui->lineEditText->setText(text); + ui->comboBoxText->setCurrentText(text); } diff --git a/dialogs/kontierungdialog.h b/dialogs/kontierungdialog.h index 717fa47..4899278 100644 --- a/dialogs/kontierungdialog.h +++ b/dialogs/kontierungdialog.h @@ -2,8 +2,10 @@ #define KONTIERUNGDIALOG_H #include +#include -#include "zeiterfassung.h" +template class QMap; +class QSettings; namespace Ui { class KontierungDialog; } @@ -12,8 +14,8 @@ class KontierungDialog : public QDialog Q_OBJECT public: - explicit KontierungDialog(Zeiterfassung &erfassung, const Zeiterfassung::UserInfo &userInfo, - const QMap &projekte, QWidget *parent = 0); + explicit KontierungDialog(const QMap &projekte, const QSettings &settings, + QWidget *parent = 0); ~KontierungDialog(); QTime getTime() const; @@ -36,8 +38,6 @@ public: private: Ui::KontierungDialog *ui; - Zeiterfassung &m_erfassung; - const Zeiterfassung::UserInfo &m_userInfo; }; #endif // KONTIERUNGDIALOG_H diff --git a/dialogs/kontierungdialog.ui b/dialogs/kontierungdialog.ui index 6a3ba6a..ab8d7d4 100644 --- a/dialogs/kontierungdialog.ui +++ b/dialogs/kontierungdialog.ui @@ -58,9 +58,6 @@ Subprojekt: - - lineEditSubprojekt - @@ -68,9 +65,6 @@ Workpackage: - - lineEditWorkpackage - @@ -78,9 +72,6 @@ Text: - - lineEditText - @@ -108,13 +99,34 @@ - + + + true + + + QComboBox::NoInsert + + - + + + true + + + QComboBox::NoInsert + + - + + + true + + + QComboBox::NoInsert + + diff --git a/mainwindow.cpp b/mainwindow.cpp index 0546a67..a856922 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -488,7 +488,7 @@ void MainWindow::contextMenuKontierung(const QPoint &pos) auto selectedAction = menu.exec(ui->treeViewKontierungen->viewport()->mapToGlobal(pos)); if(selectedAction == editAction) { - KontierungDialog dialog(m_erfassung, m_userInfo, m_projekte, this); + KontierungDialog dialog(m_projekte, m_settings, this); dialog.setTime(kontierung.time); dialog.setTimespan(kontierung.timespan); dialog.setProjekt(kontierung.projekt); @@ -523,6 +523,11 @@ void MainWindow::contextMenuKontierung(const QPoint &pos) ui->pushButtonEnd->setEnabled(false); ui->treeViewKontierungen->setEnabled(false); + addPreferedEntry("projekte", dialog.getProjekt()); + addPreferedEntry("subprojekte", dialog.getSubprojekt()); + addPreferedEntry("workpackages", dialog.getWorkpackage()); + addPreferedEntry("texte", dialog.getText()); + clearStrips(); if(m_kontierungenModel->refresh(m_userInfo.userId, ui->dateEditDate->date(), ui->dateEditDate->date())) @@ -606,7 +611,7 @@ void MainWindow::contextMenuKontierung(const QPoint &pos) auto selectedAction = menu.exec(ui->treeViewKontierungen->viewport()->mapToGlobal(pos)); if(selectedAction == createAction) { - KontierungDialog dialog(m_erfassung, m_userInfo, m_projekte, this); + KontierungDialog dialog(m_projekte, m_settings, this); again2: if(dialog.exec() == QDialog::Accepted) { @@ -635,6 +640,11 @@ void MainWindow::contextMenuKontierung(const QPoint &pos) ui->pushButtonEnd->setEnabled(false); ui->treeViewKontierungen->setEnabled(false); + addPreferedEntry("projekte", dialog.getProjekt()); + addPreferedEntry("subprojekte", dialog.getSubprojekt()); + addPreferedEntry("workpackages", dialog.getWorkpackage()); + addPreferedEntry("texte", dialog.getText()); + clearStrips(); if(m_kontierungenModel->refresh(m_userInfo.userId, ui->dateEditDate->date(), ui->dateEditDate->date())) @@ -736,36 +746,10 @@ void MainWindow::pushButtonStartPressed() return; } - { - QStringList projekte = m_settings.value("projekte", QStringList()).toStringList(); - projekte.removeAll(ui->comboBoxProjekt->currentData().toString()); - projekte.prepend(ui->comboBoxProjekt->currentData().toString()); - m_settings.setValue("projekte", projekte); - } - - if(!ui->comboBoxSubprojekt->currentText().trimmed().isEmpty()) - { - QStringList subprojekte = m_settings.value("subprojekte", QStringList()).toStringList(); - subprojekte.removeAll(ui->comboBoxSubprojekt->currentText()); - subprojekte.prepend(ui->comboBoxSubprojekt->currentText()); - m_settings.setValue("subprojekte", subprojekte); - } - - if(!ui->comboBoxWorkpackage->currentText().trimmed().isEmpty()) - { - QStringList workpackages = m_settings.value("workpackages", QStringList()).toStringList(); - workpackages.removeAll(ui->comboBoxWorkpackage->currentText()); - workpackages.prepend(ui->comboBoxWorkpackage->currentText()); - m_settings.setValue("workpackages", workpackages); - } - - if(!ui->comboBoxText->currentText().trimmed().isEmpty()) - { - QStringList texte = m_settings.value("texte", QStringList()).toStringList(); - texte.removeAll(ui->comboBoxText->currentText()); - texte.prepend(ui->comboBoxText->currentText()); - m_settings.setValue("texte", texte); - } + addPreferedEntry("projekte", ui->comboBoxProjekt->currentData().toString()); + addPreferedEntry("subprojekte", ui->comboBoxSubprojekt->currentText()); + addPreferedEntry("workpackages", ui->comboBoxWorkpackage->currentText()); + addPreferedEntry("texte", ui->comboBoxText->currentText()); updateComboboxes(); @@ -819,6 +803,17 @@ void MainWindow::pushButtonEndPressed() refresh(); } +void MainWindow::addPreferedEntry(const QString &name, const QString &value) +{ + if(value.trimmed().isEmpty()) + return; + + QStringList entries = m_settings.value(name, QStringList()).toStringList(); + entries.removeAll(value); + entries.prepend(value); + m_settings.setValue(name, entries); +} + void MainWindow::validateEntries() { ui->timeEditTime->setMinimumTime(QTime(0, 0)); diff --git a/mainwindow.h b/mainwindow.h index 46e62e9..57f6ce0 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -40,6 +40,7 @@ private Q_SLOTS: void pushButtonEndPressed(); private: + void addPreferedEntry(const QString &name, const QString &value); void validateEntries(); void updateComboboxes(); void updateAuswertung();