2010-07-10 16:34:30 +02:00
|
|
|
/*
|
2012-02-01 11:02:54 +01:00
|
|
|
Copyright 2010-2012 Grégory Soutadé
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
This file is part of KissCount.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
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.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
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.
|
2010-07-10 16:34:30 +02:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with KissCount. If not, see <http://www.gnu.org/licenses/>.
|
2010-07-10 16:34:30 +02:00
|
|
|
*/
|
|
|
|
|
2011-09-03 20:40:21 +02:00
|
|
|
#include <QMessageBox>
|
|
|
|
|
2011-09-04 19:25:53 +02:00
|
|
|
#include "AccountPanel.hpp"
|
2011-12-03 11:23:55 +01:00
|
|
|
#include "SearchPanel.hpp"
|
2011-12-18 13:51:04 +01:00
|
|
|
#include "PreferencesPanel.hpp"
|
2011-08-20 14:02:47 +02:00
|
|
|
#include "StatsPanel.hpp"
|
2012-02-20 21:27:51 +01:00
|
|
|
#include "ImportPanel.hpp"
|
2012-02-11 14:02:30 +01:00
|
|
|
#include "ExportPanel.hpp"
|
2011-08-20 14:02:47 +02:00
|
|
|
|
|
|
|
#include "wxUI.hpp"
|
2011-09-04 11:21:30 +02:00
|
|
|
#include "view.hpp"
|
2010-05-14 15:04:01 +02:00
|
|
|
|
2011-09-03 10:38:36 +02:00
|
|
|
#include "UsersDialog.hpp"
|
|
|
|
|
2011-08-27 18:35:36 +02:00
|
|
|
QString wxUI::months[12] ;
|
2011-08-25 17:45:41 +02:00
|
|
|
QColor wxUI::categoryColors[MAX_CATEGORY] = {QColor(0x00, 0x45, 0x86),
|
|
|
|
QColor(0xFF, 0x3E, 0x0E),
|
|
|
|
QColor(0xFF, 0xD3, 0x20),
|
|
|
|
QColor(0x58, 0x9D, 0x1B),
|
|
|
|
QColor(0x7E, 0x00, 0x21),
|
|
|
|
QColor(0x83, 0xCC, 0xFF),
|
|
|
|
QColor(0x31, 0x40, 0x04),
|
|
|
|
QColor(0xB0, 0xCF, 0x00),
|
|
|
|
QColor(0x4B, 0x1F, 0x6F),
|
|
|
|
QColor(0xFF, 0x93, 0x0E),
|
|
|
|
QColor(0xC5, 0x00, 0x0D),
|
|
|
|
QColor(0x00, 0x84, 0xD1)};
|
|
|
|
|
|
|
|
wxUI::wxUI(KissCount* kiss, const QString& title)
|
2012-02-26 14:24:04 +01:00
|
|
|
: QFrame(0), _language(SupportedLanguages::languages[SupportedLanguages::English].name),
|
|
|
|
_kiss(kiss), _signalMapper(this), _curPanel(0), _locale(0),
|
|
|
|
_needReload(false)
|
2010-05-14 15:04:01 +02:00
|
|
|
{
|
2011-09-04 11:21:30 +02:00
|
|
|
QPushButton* button;
|
2010-05-14 15:04:01 +02:00
|
|
|
|
2012-02-26 14:24:04 +01:00
|
|
|
SetLanguage("");
|
|
|
|
|
2011-09-04 11:21:30 +02:00
|
|
|
setWindowTitle(title);
|
2011-09-04 19:25:53 +02:00
|
|
|
|
|
|
|
connect(&_signalMapper, SIGNAL(mapped(int)), this, SLOT(OnButtonClicked(int)));
|
2010-12-20 19:28:24 +01:00
|
|
|
|
2011-09-04 11:21:30 +02:00
|
|
|
_vbox = new QVBoxLayout;
|
|
|
|
_buttonsBox = new QHBoxLayout;
|
|
|
|
|
|
|
|
button = new QPushButton(QIcon(CHANGE_USER_ICON), "", this);
|
|
|
|
button->setFixedSize(128, 128);
|
|
|
|
button->setIconSize(QSize(128, 128));
|
|
|
|
connect(button, SIGNAL(clicked()), this, SLOT(OnButtonChangeUser()));
|
|
|
|
_buttonsBox->addWidget(button);
|
|
|
|
|
|
|
|
button = new QPushButton(QIcon(ABOUT_ICON), "", this);
|
|
|
|
button->setFixedSize(128, 128);
|
|
|
|
button->setIconSize(QSize(128, 128));
|
|
|
|
connect(button, SIGNAL(clicked()), this, SLOT(OnButtonAbout()));
|
|
|
|
_buttonsBox->addWidget(button);
|
|
|
|
|
|
|
|
button = new QPushButton(QIcon(QUIT_ICON), "", this);
|
|
|
|
button->setFixedSize(128, 128);
|
|
|
|
button->setIconSize(QSize(128, 128));
|
|
|
|
connect(button, SIGNAL(clicked()), this, SLOT(OnButtonQuit()));
|
|
|
|
_buttonsBox->addWidget(button);
|
|
|
|
|
|
|
|
_vbox->addLayout(_buttonsBox);
|
|
|
|
setLayout(_vbox);
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
wxUI::~wxUI()
|
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
int i;
|
2010-12-20 19:28:24 +01:00
|
|
|
|
2011-09-04 19:25:53 +02:00
|
|
|
for (i=0; i<(int)_panels.size(); i++)
|
|
|
|
_buttons[i]->disconnect(&_signalMapper, SLOT(map()));
|
2010-12-20 19:28:24 +01:00
|
|
|
|
2010-08-26 21:28:15 +02:00
|
|
|
if (_locale) delete _locale;
|
2010-07-04 19:39:39 +02:00
|
|
|
}
|
|
|
|
|
2011-08-27 18:35:36 +02:00
|
|
|
bool wxUI::SetLanguage(QString language)
|
2010-07-04 19:39:39 +02:00
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
bool res = true;
|
2012-02-26 14:24:04 +01:00
|
|
|
int i;
|
2010-07-07 21:04:38 +02:00
|
|
|
|
2012-02-26 14:24:04 +01:00
|
|
|
if (_locale)
|
|
|
|
{
|
|
|
|
if (language == _language) return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (language == "")
|
|
|
|
{
|
|
|
|
QLocale default_locale = QLocale::system();
|
|
|
|
|
|
|
|
for(i=0; i<SupportedLanguages::NB_SUPPORTED_LANGUAGES; i++)
|
|
|
|
{
|
|
|
|
if (default_locale.language() == SupportedLanguages::languages[i].language)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (i == SupportedLanguages::NB_SUPPORTED_LANGUAGES)
|
|
|
|
i = SupportedLanguages::English;
|
|
|
|
language = SupportedLanguages::languages[i].name;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for(i=0; i<SupportedLanguages::NB_SUPPORTED_LANGUAGES; i++)
|
|
|
|
{
|
|
|
|
if (language == SupportedLanguages::languages[i].name)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (i == SupportedLanguages::NB_SUPPORTED_LANGUAGES)
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_locale)
|
|
|
|
{
|
|
|
|
delete _locale;
|
|
|
|
_kiss->removeTranslator(&_translator);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (i != SupportedLanguages::English)
|
|
|
|
{
|
|
|
|
if (!_translator.load(SupportedLanguages::languages[i].filename, RESSOURCES_ROOT "po"))
|
|
|
|
{
|
|
|
|
i = SupportedLanguages::English;
|
|
|
|
_translator.load(SupportedLanguages::languages[i].filename, RESSOURCES_ROOT "po");
|
|
|
|
_language = SupportedLanguages::languages[i].name;
|
|
|
|
res = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
_kiss->installTranslator(&_translator);
|
|
|
|
}
|
|
|
|
|
|
|
|
_language = SupportedLanguages::languages[i].language;
|
2012-03-27 21:12:55 +02:00
|
|
|
_curLanguage = SupportedLanguages::languages[i];
|
2012-02-26 14:24:04 +01:00
|
|
|
|
|
|
|
_locale = new QLocale(SupportedLanguages::languages[i].language);
|
|
|
|
QLocale::setDefault(*_locale);
|
2012-02-11 12:48:19 +01:00
|
|
|
|
2011-09-04 11:21:30 +02:00
|
|
|
months[0] = _("january");
|
|
|
|
months[1] = _("february");
|
2011-09-04 21:01:32 +02:00
|
|
|
months[2] = _("march");
|
2011-09-04 11:21:30 +02:00
|
|
|
months[3] = _("april");
|
|
|
|
months[4] = _("may");
|
|
|
|
months[5] = _("june");
|
|
|
|
months[6] = _("july");
|
|
|
|
months[7] = _("august");
|
|
|
|
months[8] = _("september");
|
|
|
|
months[9] = _("october");
|
|
|
|
months[10] = _("november");
|
|
|
|
months[11] = _("december") ;
|
2010-08-26 21:28:15 +02:00
|
|
|
|
|
|
|
return res;
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
2011-09-04 19:25:53 +02:00
|
|
|
#define ADD_PANEL(panelName) \
|
|
|
|
panel = new panelName(_kiss, this); \
|
|
|
|
button = panel->GetButton(); \
|
|
|
|
button->setToolTip(panel->GetToolTip()); \
|
|
|
|
_buttonsBox->insertWidget(id, button); \
|
|
|
|
_buttons.insert(_buttons.begin()+id, button); \
|
|
|
|
_panels.push_back(panel); \
|
|
|
|
_signalMapper.setMapping(button, id); \
|
|
|
|
connect(button, SIGNAL(clicked()), &_signalMapper, SLOT(map())); \
|
|
|
|
id++;
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::InitPanels()
|
2010-07-14 11:15:48 +02:00
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
KissPanel* panel;
|
|
|
|
QPushButton* button;
|
|
|
|
_panels.clear();
|
|
|
|
int id=0;
|
2011-08-25 17:45:41 +02:00
|
|
|
|
2011-09-04 19:25:53 +02:00
|
|
|
ADD_PANEL(AccountPanel);
|
2012-02-05 15:54:09 +01:00
|
|
|
ADD_PANEL(StatsPanel);
|
2011-12-03 11:23:55 +01:00
|
|
|
ADD_PANEL(SearchPanel);
|
2011-12-18 13:51:04 +01:00
|
|
|
ADD_PANEL(PreferencesPanel);
|
2012-02-20 21:27:51 +01:00
|
|
|
ADD_PANEL(ImportPanel);
|
2012-02-11 14:02:30 +01:00
|
|
|
ADD_PANEL(ExportPanel);
|
2010-07-14 11:15:48 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::LoadPanels()
|
2010-08-17 18:59:19 +02:00
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
std::vector<KissPanel*>::iterator it;
|
|
|
|
KissPanel* temp;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
if (_curPanel)
|
|
|
|
{
|
|
|
|
_vbox->removeWidget(_curPanel);
|
|
|
|
_curPanel = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_panels.size())
|
|
|
|
{
|
|
|
|
for (i=0; i<(int)_panels.size(); i++)
|
|
|
|
{
|
|
|
|
temp = _panels[i]->CreatePanel();
|
|
|
|
_buttons[i]->disconnect(&_signalMapper, SLOT(map()));
|
|
|
|
_panels[i] = temp;
|
|
|
|
connect(_buttons[i], SIGNAL(clicked()), &_signalMapper, SLOT(map()));
|
|
|
|
_buttons[i]->setToolTip(temp->GetToolTip());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
InitPanels();
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::LoadUser()
|
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
User* user = _kiss->GetUser();
|
2010-05-17 18:03:21 +02:00
|
|
|
|
2011-08-25 17:45:41 +02:00
|
|
|
if (user->_preferences["language"].size())
|
2010-12-20 19:28:24 +01:00
|
|
|
SetLanguage(user->GetLanguage());
|
2012-02-11 12:48:19 +01:00
|
|
|
else
|
|
|
|
SetLanguage(SupportedLanguages::languages[0].name);
|
2010-07-14 11:15:48 +02:00
|
|
|
|
2011-08-06 17:30:16 +02:00
|
|
|
LoadPanels();
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
if (_panels.size())
|
|
|
|
ShowPanel(_panels[0]);
|
2010-05-17 18:03:21 +02:00
|
|
|
}
|
|
|
|
|
2010-12-20 19:28:24 +01:00
|
|
|
void wxUI::ShowPanel(KissPanel* panel)
|
2010-05-17 18:03:21 +02:00
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
int i;
|
|
|
|
User* user = _kiss->GetUser();
|
|
|
|
|
|
|
|
if (!panel) return;
|
|
|
|
|
|
|
|
if (_curPanel)
|
|
|
|
{
|
|
|
|
_vbox->removeWidget(_curPanel);
|
|
|
|
_curPanel->hide();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_needReload)
|
|
|
|
{
|
|
|
|
user->InvalidateOperations();
|
|
|
|
for(i=0; i<(int)_panels.size(); i++)
|
|
|
|
if (_panels[i] == panel) break;
|
|
|
|
LoadPanels();
|
|
|
|
_needReload = false;
|
|
|
|
_curPanel = _panels[i];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
_curPanel = panel;
|
|
|
|
|
|
|
|
_curPanel->OnShow();
|
|
|
|
_vbox->addWidget(_curPanel);
|
|
|
|
_curPanel->show();
|
|
|
|
layout();
|
2010-05-14 15:04:01 +02:00
|
|
|
}
|
2010-06-23 19:32:42 +02:00
|
|
|
|
2011-09-04 19:25:53 +02:00
|
|
|
void wxUI::OnButtonClicked(int id)
|
2010-12-20 19:28:24 +01:00
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
ShowPanel(_panels[id]);
|
2010-12-20 19:28:24 +01:00
|
|
|
}
|
|
|
|
|
2011-09-03 20:40:21 +02:00
|
|
|
void wxUI::OnButtonChangeUser()
|
2010-12-20 19:28:24 +01:00
|
|
|
{
|
|
|
|
ChangeUser();
|
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::ChangeUser()
|
|
|
|
{
|
2011-09-03 10:38:36 +02:00
|
|
|
UsersDialog u(_kiss, this);
|
|
|
|
u.exec();
|
2010-12-20 19:28:24 +01:00
|
|
|
}
|
|
|
|
|
2011-09-03 20:40:21 +02:00
|
|
|
void wxUI::OnButtonAbout()
|
2010-12-20 19:28:24 +01:00
|
|
|
{
|
2012-02-01 11:02:54 +01:00
|
|
|
QMessageBox::information(0, "KissCount " APP_VERSION, _("Personal accounting software\n\nhttp://indefero.soutade.fr/p/kisscount/\n\nLicenced under GNU GPL v3\n\nCopyright (C) 2010-2012 Grégory Soutadé"));
|
2010-12-20 19:28:24 +01:00
|
|
|
}
|
|
|
|
|
2011-09-03 20:40:21 +02:00
|
|
|
void wxUI::OnButtonQuit()
|
2010-12-20 19:28:24 +01:00
|
|
|
{
|
2011-09-04 11:21:30 +02:00
|
|
|
if (QMessageBox::question(0, "KissCount", _("Quit KissCount ?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::No) == QMessageBox::Yes)
|
2011-09-03 20:40:21 +02:00
|
|
|
close();
|
2010-12-20 19:28:24 +01:00
|
|
|
}
|
|
|
|
|
2010-06-23 19:32:42 +02:00
|
|
|
void wxUI::GenerateMonth(int month, int year)
|
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
(dynamic_cast<AccountPanel*>(_panels[0]))->GenerateMonth(month, year);
|
2010-06-23 19:32:42 +02:00
|
|
|
}
|
2010-06-27 21:39:49 +02:00
|
|
|
|
2011-11-01 18:01:17 +01:00
|
|
|
void wxUI::UpdateStats()
|
|
|
|
{
|
|
|
|
if (_curPanel == _panels[0])
|
|
|
|
(dynamic_cast<AccountPanel*>(_panels[0]))->UpdateStats();
|
|
|
|
}
|
|
|
|
|
2010-06-27 21:39:49 +02:00
|
|
|
void wxUI::KillMe()
|
|
|
|
{
|
2011-09-04 19:25:53 +02:00
|
|
|
std::vector<KissPanel*>::iterator it;
|
|
|
|
|
|
|
|
if (_curPanel)
|
|
|
|
{
|
|
|
|
_vbox->removeWidget(_curPanel);
|
|
|
|
_curPanel = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (it=_panels.begin(); it!= _panels.end(); it++)
|
|
|
|
{
|
|
|
|
if (*it)
|
|
|
|
{
|
|
|
|
_buttonsBox->removeWidget(*it);
|
|
|
|
delete *it;
|
|
|
|
}
|
|
|
|
_buttons.erase(_buttons.begin());
|
|
|
|
}
|
|
|
|
|
|
|
|
_panels.clear();
|
2010-06-27 21:39:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void wxUI::NeedReload()
|
|
|
|
{
|
2010-08-26 21:28:15 +02:00
|
|
|
_needReload = true;
|
2010-06-27 21:39:49 +02:00
|
|
|
}
|
2012-03-27 21:12:55 +02:00
|
|
|
|
|
|
|
QString wxUI::GetDateFormat()
|
|
|
|
{
|
|
|
|
return _curLanguage.dateFormat;
|
|
|
|
}
|