From c2b6aea35a861d01ed42de502f92797a39c6d721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Mon, 31 Oct 2011 09:14:40 +0100 Subject: [PATCH] Add Generate Dialog & Contextual menu in AccountPanel Fix a bug in year loading --- src/view/GenerateDialog.cpp | 219 ++++++++++++++++++++++++++++++++++++ src/view/GenerateDialog.hpp | 48 ++++++++ 2 files changed, 267 insertions(+) create mode 100644 src/view/GenerateDialog.cpp create mode 100644 src/view/GenerateDialog.hpp diff --git a/src/view/GenerateDialog.cpp b/src/view/GenerateDialog.cpp new file mode 100644 index 0000000..639bf9d --- /dev/null +++ b/src/view/GenerateDialog.cpp @@ -0,0 +1,219 @@ +/* + Copyright 2010-2011 Grégory Soutadé + + This file is part of KissCount. + + KissCount is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + KissCount is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with KissCount. If not, see . +*/ +#include "GenerateDialog.hpp" +#include + +GenerateDialog::GenerateDialog(KissCount* kiss, wxUI *parent, int month, int year) : QDialog(0, Qt::Dialog), _kiss(kiss), _wxUI(parent) +{ + QGridLayout* gridLayout; + std::map >::iterator it; + int i, a, toSelect=-1; + QDate curDate = QDate::currentDate(); + std::vector::iterator monthIt; + QString s; + + // wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + gridLayout = new QGridLayout(this); + + setWindowTitle(_("Generate month")); + setModal(true); + + gridLayout->addWidget(new QLabel(_("From "), this), 0, 0); + + _yearFrom = new QComboBox(this); + gridLayout->addWidget(_yearFrom, 0, 1); + _monthFrom = new QComboBox(this); + gridLayout->addWidget(_monthFrom, 0, 2); + + _yearTo = new QComboBox(this); + gridLayout->addWidget(_yearTo, 1, 1); + _monthTo = new QComboBox(this); + gridLayout->addWidget(_monthTo, 1, 2); + + QPushButton* ok = new QPushButton(_("OK"), this); + QPushButton* cancel = new QPushButton(_("Cancel"), this); + gridLayout->addWidget(ok, 3, 1); + gridLayout->addWidget(cancel, 3, 2); + + connect(ok, SIGNAL(clicked()), this, SLOT(OnOK())); + connect(cancel, SIGNAL(clicked()), this, SLOT(OnCancel())); + + connect(_yearTo, SIGNAL(currentIndexChanged(int)), this, SLOT(OnYearToChange(int))); + connect(_yearFrom, SIGNAL(currentIndexChanged(int)), this, SLOT(OnYearFromChange(int))); + + _ops = _kiss->GetAllOperations(); + + _yearFrom->addItem(""); + _monthFrom->addItem(""); + + for(i=1, it = _ops.begin(); it != _ops.end(); it++, i++) + { + _yearFrom->addItem(s.sprintf("%d", it->first)); + if (year == it->first) + toSelect = i; + } + + if (toSelect != -1) + { + _yearFrom->setCurrentIndex(toSelect); + toSelect=0; + if (month != -1) + { + for(i=0; i<(int)_monthFrom->count(); i++) + { + if (_monthFrom->itemText(i) == wxUI::months[month]) + { + toSelect = i; + break; + } + } + } + _monthFrom->setCurrentIndex(toSelect); + } + else + { + _yearFrom->setCurrentIndex(0); + } + + for(i=2000; i<=2050; i++) + _yearTo->addItem(s.sprintf("%d", i)); + + if (year == -1) + { + _yearTo->setCurrentIndex(curDate.year()-2000); + _monthTo->setCurrentIndex(curDate.month()); + } + else + { + if (month == 11) + year++; + + _yearTo->setCurrentIndex(year-2000); + + if (month == -1) + _monthTo->setCurrentIndex(0); + else + { + for(a=0, i=0, monthIt=_ops[year].begin(); monthIt!=_ops[year].end() && i<12; i++) + { + if (i != *monthIt) + { + a++; + continue; + } + if (*monthIt > month) + break; + monthIt++; + } + _monthTo->setCurrentIndex(a); + } + } +} + +void GenerateDialog::OnYearFromChange(int index) +{ + QString years = _yearFrom->itemText(index); + int year; + std::vector::iterator it; + + _monthFrom->clear(); + + if (!years.length()) + { + _monthFrom->addItem(""); + return; + } + + year = years.toInt(); + + for(it=_ops[year].begin(); it!=_ops[year].end(); it++) + _monthFrom->addItem(wxUI::months[*it]); + _monthFrom->setCurrentIndex(0); + + layout(); +} + +void GenerateDialog::OnYearToChange(int index) +{ + int year, i, ok; + std::vector::iterator it; + + _monthTo->clear(); + + year = _yearTo->currentText().toInt(); + + for (i=0; i<12; i++) + { + ok = 1; + for(it=_ops[year].begin(); it!=_ops[year].end(); it++) + { + if (*it == i) + { + ok=0; break; + } + } + if (ok) + _monthTo->addItem(wxUI::months[i]); + } + + _monthTo->setCurrentIndex(0); + + layout(); +} + +void GenerateDialog::OnOK() +{ + int monthFrom, yearFrom, monthTo, yearTo, i; + + if (!_yearFrom->itemText(_yearFrom->currentIndex()).length()) + { + monthFrom = -1; + yearFrom = -1; + } + else + { + for (i=0; i<12; i++) + { + if (wxUI::months[i] == _monthFrom->itemText(_monthFrom->currentIndex())) + { + monthFrom = i; + break; + } + } + yearFrom = _yearFrom->itemText(_yearFrom->currentIndex()).toInt(); + } + + for (i=0; i<12; i++) + { + if (wxUI::months[i] == _monthTo->itemText(_monthTo->currentIndex())) + { + monthTo = i; + break; + } + } + yearTo = _yearTo->itemText(_yearTo->currentIndex()).toInt(); + + close(); + _kiss->GenerateMonth(monthFrom, yearFrom, monthTo, yearTo); +} + +void GenerateDialog::OnCancel() +{ + close(); +} diff --git a/src/view/GenerateDialog.hpp b/src/view/GenerateDialog.hpp new file mode 100644 index 0000000..d6717f6 --- /dev/null +++ b/src/view/GenerateDialog.hpp @@ -0,0 +1,48 @@ +/* + Copyright 2010-2011 Grégory Soutadé + + This file is part of KissCount. + + KissCount is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + KissCount is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with KissCount. If not, see . +*/ + +#ifndef GENERATEDIALOG_H +#define GENERATEDIALOG_H + +#include +#include +#include + +#include "wxUI.hpp" + +class GenerateDialog : public QDialog +{ + Q_OBJECT; + +public: + GenerateDialog(KissCount* kiss, wxUI *parent, int month, int year); + +private slots: + void OnYearFromChange(int index); + void OnYearToChange(int index); + void OnOK(); + void OnCancel(); + +private: + KissCount* _kiss; + wxUI* _wxUI; + QComboBox* _yearFrom, *_monthFrom, *_yearTo, *_monthTo; + std::map > _ops; +}; +#endif