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