Updates for Qt6 + some fixes
This commit is contained in:
parent
259b163b11
commit
9677a077c6
|
@ -1,5 +1,5 @@
|
|||
kisscount (0.8-1) unstable; urgency=low
|
||||
kisscount (0.9-1) unstable; urgency=low
|
||||
|
||||
* Initial release
|
||||
|
||||
-- Grégory Soutadé <soutade@gmail.com> Sat, 8 Oct 2016 20:26:00 +0200
|
||||
-- Grégory Soutadé <soutade@gmail.com> Sat, 3 Dec 2022 20:26:00 +0200
|
||||
|
|
|
@ -51,7 +51,7 @@ KissCount::KissCount(int& argc, char** argv) : QApplication(argc, argv), _user(0
|
|||
_wxUI->close();
|
||||
throw s;
|
||||
}
|
||||
|
||||
|
||||
_wxUI->ChangeUser();
|
||||
_wxUI->setDisabled(false);
|
||||
}
|
||||
|
@ -691,7 +691,7 @@ QFont KissCount::ExtractFont(QString strFont)
|
|||
QString KissCount::CompactFont(const QFont& font)
|
||||
{
|
||||
QString res ;
|
||||
res = res.sprintf("%d;%d;%d;%d;", font.pointSize(), 0, 0, font.weight());
|
||||
res = res.asprintf("%d;%d;%d;%d;", font.pointSize(), 0, 0, font.weight());
|
||||
res += font.family();
|
||||
|
||||
return res;
|
||||
|
|
|
@ -30,24 +30,11 @@
|
|||
|
||||
#include <view/wxUI.hpp>
|
||||
|
||||
#define APP_VERSION "0.8"
|
||||
#define APP_VERSION "0.9"
|
||||
|
||||
#define ESCAPE_CHARS(s) s = s.replace("\"", " ");
|
||||
// #define ESCAPE_CHARS(s) s = s.replace("\"", "\\\""); s = s.replace("\'", "\\\'");
|
||||
/*{ \
|
||||
if (s.Find(wxT("\\\"")) == wxNOT_FOUND) \
|
||||
s.Replace(wxT("\""), wxT("\\\""), true); \
|
||||
if (s.Find(wxT("\\\'")) == wxNOT_FOUND) \
|
||||
s.Replace(wxT("\'"), wxT("\\\'"), true); \
|
||||
}
|
||||
*/
|
||||
#define UNESCAPE_CHARS(s) s = s.replace("\\\"", " ");
|
||||
// #define UNESCAPE_CHARS(s) s = s.replace("\\\"", "\""); s = s.replace("\\\'", "\'");
|
||||
/*{ \
|
||||
s.Replace(wxT("\\\""), wxT("\""), true); \
|
||||
s.Replace(wxT("\\\'"), wxT("\'"), true); \
|
||||
}
|
||||
*/
|
||||
|
||||
class wxUI;
|
||||
class Database;
|
||||
class ImportEngine;
|
||||
|
|
|
@ -529,7 +529,7 @@ void Database::LinkOrUnlinkOperation(User* user, Operation& op)
|
|||
query.clear();
|
||||
|
||||
req = QString("SELECT id, account FROM operation WHERE description=\"%1\" AND month='%2' AND year='%3' AND amount='%4' AND meta='0' AND account !='%5' AND transfert=''")
|
||||
.arg(op.description, QString::number(op.month), QString::number(op.year), v.sprintf("%d", -op.amount), QString::number(op.account));
|
||||
.arg(op.description, QString::number(op.month), QString::number(op.year), v.asprintf("%d", -op.amount), QString::number(op.account));
|
||||
|
||||
EXECUTE_SQL_QUERY(req, );
|
||||
|
||||
|
@ -578,7 +578,7 @@ void Database::UpdateOperation(User* user, Operation& op, bool checkTransfert)
|
|||
|
||||
req = "UPDATE operation SET parent='%1', account='%2', year='%3', month='%4', day='%5', amount='%6', description=:description, category='%8', tag='%9'" ;
|
||||
req = req.arg((op.parent) ? QString::number(op.parent) : "", QString::number(op.account), QString::number(op.year), QString::number(op.month),
|
||||
QString::number(op.day), v.sprintf("%d", op.amount), QString::number(op.category), QString::number(op.tag));
|
||||
QString::number(op.day), v.asprintf("%d", op.amount), QString::number(op.category), QString::number(op.tag));
|
||||
req += ", fix_cost='%1', checked='%2', transfert='%3', meta='%4', virtual='%5', formula=:formula WHERE id='%7'";
|
||||
req = req.arg(QString::number(op.fix_cost), QString::number(op.checked), (op.transfert) ? QString::number(op.transfert): "",
|
||||
QString::number(op.meta), QString::number(op._virtual), QString::number(op.id));
|
||||
|
@ -604,7 +604,7 @@ int Database::AddOperation(User* user, Operation& op, bool checkTransfert)
|
|||
|
||||
req = "INSERT INTO operation ('user', 'parent', 'account', 'year', 'month', 'day', 'amount', 'description', 'category', 'tag', 'fix_cost', 'formula', 'transfert', 'meta', 'virtual', 'checked') VALUES ('%1', '%2', '%3', '%4', '%5', '%6', '%7', :description" ;
|
||||
req = req.arg(QString::number(user->_id), (op.parent) ? QString::number(op.parent): "", QString::number(op.account), QString::number(op.year),
|
||||
QString::number(op.month), QString::number(op.day), v.sprintf("%d", op.amount));
|
||||
QString::number(op.month), QString::number(op.day), v.asprintf("%d", op.amount));
|
||||
req += ", '%1', '%2', '%3', :formula, '%4', '%5', '%6', '%7')";
|
||||
req = req.arg(QString::number(op.category), QString::number(op.tag), QString::number(op.fix_cost), (op.transfert) ? QString::number(op.transfert): "",
|
||||
QString::number(op.meta), QString::number(op._virtual), QString::number(op.checked));
|
||||
|
@ -775,7 +775,7 @@ void Database::SetAccountAmount(int accountId, int month, int year, int amount)
|
|||
QSqlQuery query(_db);
|
||||
|
||||
req = "INSERT or REPLACE INTO account_amount ('account', 'year', 'month', 'amount') VALUES ('%1', '%2', '%3', '%4')" ;
|
||||
req = req.arg(QString::number(accountId), QString::number(year), QString::number(month), v.sprintf("%d", amount));
|
||||
req = req.arg(QString::number(accountId), QString::number(year), QString::number(month), v.asprintf("%d", amount));
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
||||
|
@ -1271,7 +1271,7 @@ void Database::GenerateMonth(User* user, int monthFrom, int yearFrom, int monthT
|
|||
|
||||
req = "INSERT INTO account_amount ('account', 'year', 'month', 'amount') VALUES " ;
|
||||
req += "('%1', '%2', '%3', '%4')";
|
||||
req = req.arg(QString::number(it->id), QString::number(yearTo), QString::number(monthTo), v.sprintf("%d", amount));
|
||||
req = req.arg(QString::number(it->id), QString::number(yearTo), QString::number(monthTo), v.asprintf("%d", amount));
|
||||
|
||||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
@ -1397,9 +1397,12 @@ void Database::UpdatePreference(User* user, const QString& preference)
|
|||
EXECUTE_SQL_UPDATE(req, );
|
||||
}
|
||||
|
||||
std::vector<Operation>* Database::Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo,
|
||||
int* amountFrom, int* amountTo,
|
||||
std::vector<int> categories, int types, std::vector<int> accounts, bool wildcards, std::vector<int> tags)
|
||||
std::vector<Operation>* Database::Search(User* user, QString* description,
|
||||
QDate* dateFrom, QDate* dateTo,
|
||||
int* amountFrom, int* amountTo,
|
||||
std::vector<int> categories, int types,
|
||||
std::vector<int> accounts, bool wildcards,
|
||||
std::vector<int> tags)
|
||||
{
|
||||
QSqlRecord set;
|
||||
QSqlQuery query(_db);
|
||||
|
@ -1466,13 +1469,13 @@ std::vector<Operation>* Database::Search(User* user, QString* description, QDate
|
|||
if (amountFrom)
|
||||
{
|
||||
if (firstCond) req += " AND " ; else firstCond = true;
|
||||
req += "ABS(amount) >= " + v.sprintf("%d", *amountFrom);
|
||||
req += "ABS(amount) >= " + v.asprintf("%d", *amountFrom);
|
||||
}
|
||||
|
||||
if (amountTo)
|
||||
{
|
||||
if (firstCond) req += " AND " ; else firstCond = true;
|
||||
req += "ABS(amount) <= " + v.sprintf("%d", *amountTo);
|
||||
req += "ABS(amount) <= " + v.asprintf("%d", *amountTo);
|
||||
}
|
||||
|
||||
if (categories.size())
|
||||
|
|
|
@ -179,7 +179,8 @@ public:
|
|||
|
||||
std::vector<Operation>* Search(User* user, QString* description, QDate* dateFrom, QDate* dateTo,
|
||||
int* amountFrom, int* amountTo,
|
||||
std::vector<int> categories, int types, std::vector<int> accounts, bool wildcards, std::vector<int> tags);
|
||||
std::vector<int> categories, int types, std::vector<int> accounts,
|
||||
bool wildcards, std::vector<int> tags);
|
||||
|
||||
void GetStats(User* user, int monthFrom, int yearFrom, int monthTo,
|
||||
int yearTo, std::map<int, std::map<int, std::map<int, int> > >* accountAmounts,
|
||||
|
|
|
@ -48,8 +48,8 @@ bool CSVExportEngine::SaveAccounts()
|
|||
Account account;
|
||||
std::map<int, int>::iterator it;
|
||||
|
||||
*_writer << "Accounts" << endl << endl;
|
||||
*_writer << "id;name;number;blocked;virtual;hidden" << endl;
|
||||
*_writer << "Accounts" << Qt::endl << Qt::endl;
|
||||
*_writer << "id;name;number;blocked;virtual;hidden" << Qt::endl;
|
||||
|
||||
for(it=_accounts.begin(); it!=_accounts.end(); it++)
|
||||
{
|
||||
|
@ -78,10 +78,10 @@ bool CSVExportEngine::SaveAccounts()
|
|||
// *_writer << (account.is_owner ? "1" : "0") << ";";
|
||||
*_writer << (account._virtual ? "1" : "0") << ";";
|
||||
*_writer << (account.hidden ? "1" : "0");
|
||||
*_writer << endl;
|
||||
*_writer << Qt::endl;
|
||||
}
|
||||
|
||||
*_writer << endl << endl;
|
||||
*_writer << Qt::endl << Qt::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -91,19 +91,19 @@ bool CSVExportEngine::SaveAccountAmounts()
|
|||
std::map<AccountAmount, int, AccountAmount>::iterator it;
|
||||
QString v;
|
||||
|
||||
*_writer << "Account Amounts" << endl << endl;
|
||||
*_writer << "id;month;year;amount" << endl;
|
||||
*_writer << "Account Amounts" << Qt::endl << Qt::endl;
|
||||
*_writer << "id;month;year;amount" << Qt::endl;
|
||||
|
||||
for(it=_accountAmounts.begin(); it!=_accountAmounts.end(); it++)
|
||||
{
|
||||
*_writer << QString::number(it->first.account) << ";";
|
||||
*_writer << QString::number(it->first.month+1) << ";";
|
||||
*_writer << QString::number(it->first.year) << ";";
|
||||
*_writer << v.sprintf("%d", it->second);
|
||||
*_writer << endl;
|
||||
*_writer << v.asprintf("%d", it->second);
|
||||
*_writer << Qt::endl;
|
||||
}
|
||||
|
||||
*_writer << endl << endl;
|
||||
*_writer << Qt::endl << Qt::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -115,8 +115,8 @@ bool CSVExportEngine::SaveCategories()
|
|||
int rgb;
|
||||
QString v;
|
||||
|
||||
*_writer << "Categories" << endl << endl;
|
||||
*_writer << "id;parent;name;font;backcolor;forecolor;fix_cost" << endl;
|
||||
*_writer << "Categories" << Qt::endl << Qt::endl;
|
||||
*_writer << "id;parent;name;font;backcolor;forecolor;fix_cost" << Qt::endl;
|
||||
|
||||
for(it=_categories.begin(); it!=_categories.end(); it++)
|
||||
{
|
||||
|
@ -131,16 +131,16 @@ bool CSVExportEngine::SaveCategories()
|
|||
rgb = category.backcolor.blue();
|
||||
rgb |= category.backcolor.green() << 8;
|
||||
rgb |= category.backcolor.red() << 16;
|
||||
*_writer << v.sprintf("0x%08X", rgb) << ";";
|
||||
*_writer << v.asprintf("0x%08X", rgb) << ";";
|
||||
rgb = category.forecolor.blue();
|
||||
rgb |= category.forecolor.green() << 8;
|
||||
rgb |= category.forecolor.red() << 16;
|
||||
*_writer << v.sprintf("0x%08X", rgb) << ";";
|
||||
*_writer << v.asprintf("0x%08X", rgb) << ";";
|
||||
*_writer << (category.fix_cost ? "1" : "0");
|
||||
*_writer << endl;
|
||||
*_writer << Qt::endl;
|
||||
}
|
||||
|
||||
*_writer << endl << endl;
|
||||
*_writer << Qt::endl << Qt::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -151,8 +151,8 @@ bool CSVExportEngine::SaveTags()
|
|||
std::map<int, int>::iterator it;
|
||||
QString v;
|
||||
|
||||
*_writer << "Tags" << endl << endl;
|
||||
*_writer << "id;name" << endl;
|
||||
*_writer << "Tags" << Qt::endl << Qt::endl;
|
||||
*_writer << "id;name" << Qt::endl;
|
||||
|
||||
for(it=_tags.begin(); it!=_tags.end(); it++)
|
||||
{
|
||||
|
@ -162,10 +162,10 @@ bool CSVExportEngine::SaveTags()
|
|||
|
||||
*_writer << QString::number(tag.id) << ";";
|
||||
*_writer << "\"" << tag.name << "\"";
|
||||
*_writer << endl;
|
||||
*_writer << Qt::endl;
|
||||
}
|
||||
|
||||
*_writer << endl << endl;
|
||||
*_writer << Qt::endl << Qt::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -175,8 +175,8 @@ bool CSVExportEngine::SaveOperations(std::vector<Operation>* operations)
|
|||
std::vector<Operation>::iterator it;
|
||||
QString v;
|
||||
|
||||
*_writer << "Operations" << endl << endl;
|
||||
*_writer << "id;parent;day;month;year;amount;description;category;fix_cost;account;checked;transfert;formula;meta;virtual;tag" << endl;
|
||||
*_writer << "Operations" << Qt::endl << Qt::endl;
|
||||
*_writer << "id;parent;day;month;year;amount;description;category;fix_cost;account;checked;transfert;formula;meta;virtual;tag" << Qt::endl;
|
||||
|
||||
for(it=operations->begin(); it!=operations->end(); it++)
|
||||
{
|
||||
|
@ -187,7 +187,7 @@ bool CSVExportEngine::SaveOperations(std::vector<Operation>* operations)
|
|||
*_writer << QString::number(it->day+1) << ";";
|
||||
*_writer << QString::number(it->month+1) << ";";
|
||||
*_writer << QString::number(it->year) << ";";
|
||||
*_writer << v.sprintf("%d", it->amount) << ";";
|
||||
*_writer << v.asprintf("%d", it->amount) << ";";
|
||||
*_writer << "\"" << it->description << "\"" << ";";
|
||||
*_writer << QString::number(it->category) << ";";
|
||||
*_writer << (it->fix_cost ? "1" : "0") << ";";
|
||||
|
@ -198,10 +198,10 @@ bool CSVExportEngine::SaveOperations(std::vector<Operation>* operations)
|
|||
*_writer << (it->meta ? "1" : "0") << ";";
|
||||
*_writer << (it->_virtual ? "1" : "0") << ";";
|
||||
*_writer << QString::number(it->tag);
|
||||
*_writer << endl;
|
||||
*_writer << Qt::endl;
|
||||
}
|
||||
|
||||
*_writer << endl << endl;
|
||||
*_writer << Qt::endl << Qt::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -95,7 +95,7 @@ bool XMLExportEngine::SaveAccountAmounts()
|
|||
_writer->writeAttribute("account", QString::number(it->first.account));
|
||||
_writer->writeAttribute("month", QString::number(it->first.month));
|
||||
_writer->writeAttribute("year", QString::number(it->first.year));
|
||||
_writer->writeAttribute("amount", v.sprintf("%d", it->second));
|
||||
_writer->writeAttribute("amount", v.asprintf("%d", it->second));
|
||||
_writer->writeEndElement();
|
||||
}
|
||||
|
||||
|
@ -123,11 +123,11 @@ bool XMLExportEngine::SaveCategories()
|
|||
rgb = category.backcolor.blue();
|
||||
rgb |= category.backcolor.green() << 8;
|
||||
rgb |= category.backcolor.red() << 16;
|
||||
_writer->writeAttribute("backcolor", v.sprintf("0x%08X", rgb));
|
||||
_writer->writeAttribute("backcolor", v.asprintf("0x%08X", rgb));
|
||||
rgb = category.forecolor.blue();
|
||||
rgb |= category.forecolor.green() << 8;
|
||||
rgb |= category.forecolor.red() << 16;
|
||||
_writer->writeAttribute("forecolor", v.sprintf("0x%08X", rgb));
|
||||
_writer->writeAttribute("forecolor", v.asprintf("0x%08X", rgb));
|
||||
_writer->writeAttribute("fix_cost", (category.fix_cost ? "1" : "0"));
|
||||
_writer->writeEndElement();
|
||||
}
|
||||
|
@ -171,7 +171,7 @@ bool XMLExportEngine::SaveOperations(std::vector<Operation>* operations)
|
|||
_writer->writeAttribute("day", QString::number(it->day));
|
||||
_writer->writeAttribute("month", QString::number(it->month));
|
||||
_writer->writeAttribute("year", QString::number(it->year));
|
||||
_writer->writeAttribute("amount", v.sprintf("%d", it->amount));
|
||||
_writer->writeAttribute("amount", v.asprintf("%d", it->amount));
|
||||
_writer->writeAttribute("description", it->description);
|
||||
_writer->writeAttribute("category", QString::number(it->category));
|
||||
_writer->writeAttribute("tag", QString::number(it->tag));
|
||||
|
|
|
@ -24,16 +24,16 @@
|
|||
|
||||
static GrisbiImportEngine grisbiImportEngine;
|
||||
|
||||
void GrisbiImportEngine::LoadAccount(const QXmlAttributes& attrs)
|
||||
void GrisbiImportEngine::LoadAccount(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
int id, i;
|
||||
QString account_number, name, key;
|
||||
Account ac;
|
||||
|
||||
name = attrs.value("name");
|
||||
name = *attrs.value("name").string();
|
||||
id = attrs.value("Number").toInt();
|
||||
account_number = attrs.value("Bank_account_number");
|
||||
key = attrs.value("Key");
|
||||
account_number = *attrs.value("Bank_account_number").string();
|
||||
key = *attrs.value("Key").string();
|
||||
|
||||
account_number += key;
|
||||
|
||||
|
@ -61,13 +61,13 @@ void GrisbiImportEngine::LoadAccount(const QXmlAttributes& attrs)
|
|||
_unresolvedAccounts.push_back(ac);
|
||||
}
|
||||
|
||||
void GrisbiImportEngine::LoadCategory(const QXmlAttributes& attrs)
|
||||
void GrisbiImportEngine::LoadCategory(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
QString name;
|
||||
int id, i;
|
||||
Category cat;
|
||||
|
||||
name = attrs.value("Na");
|
||||
name = *attrs.value("Na").string();
|
||||
id = attrs.value("Nb").toInt();
|
||||
|
||||
UNESCAPE_CHARS(name);
|
||||
|
@ -91,7 +91,7 @@ void GrisbiImportEngine::LoadCategory(const QXmlAttributes& attrs)
|
|||
_unresolvedCategories.push_back(cat);
|
||||
}
|
||||
|
||||
void GrisbiImportEngine::LoadOperation(const QXmlAttributes& attrs)
|
||||
void GrisbiImportEngine::LoadOperation(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
static int id=0;
|
||||
Operation op;
|
||||
|
@ -111,13 +111,13 @@ void GrisbiImportEngine::LoadOperation(const QXmlAttributes& attrs)
|
|||
|
||||
op.account = _accounts[attrs.value("Ac").toInt()];
|
||||
|
||||
date = QDate::fromString(attrs.value("Dt"), "MM/dd/yyyy");
|
||||
date = QDate::fromString(*attrs.value("Dt").string(), QString("MM/dd/yyyy"));
|
||||
op.day = date.day();
|
||||
op.month = date.month();
|
||||
op.year = date.year();
|
||||
op.amount = attrs.value("Am").toInt();
|
||||
op.category = _categories[attrs.value("Ca").toInt()];
|
||||
op.description = attrs.value("No");
|
||||
op.description = *attrs.value("No").string();
|
||||
|
||||
UNESCAPE_CHARS(op.description);
|
||||
|
||||
|
@ -127,7 +127,7 @@ void GrisbiImportEngine::LoadOperation(const QXmlAttributes& attrs)
|
|||
MatchPattern(op.description, op);
|
||||
}
|
||||
|
||||
bool GrisbiImportEngine::startElement (const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& attrs)
|
||||
bool GrisbiImportEngine::startElement (QStringRef qName, const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
static char first = 0;
|
||||
|
||||
|
@ -140,10 +140,10 @@ bool GrisbiImportEngine::startElement (const QString& namespaceURI, const QStrin
|
|||
|
||||
if (qName == "General")
|
||||
{
|
||||
if (attrs.value("File_version") < "0.6.0")
|
||||
if (*attrs.value("File_version").string() < "0.6.0")
|
||||
throw "Unsupported version !";
|
||||
|
||||
if (attrs.value("Crypt_file") == "1")
|
||||
if (*attrs.value("Crypt_file").string() == "1")
|
||||
throw "Crypted file !";
|
||||
}
|
||||
|
||||
|
@ -165,8 +165,6 @@ GrisbiImportEngine::GrisbiImportEngine()
|
|||
|
||||
_shortExt = ".gsb";
|
||||
_longExt = _("Grisbi files (*.gsb)");
|
||||
|
||||
_sax.setContentHandler(this);
|
||||
}
|
||||
|
||||
GrisbiImportEngine::~GrisbiImportEngine()
|
||||
|
@ -177,23 +175,35 @@ bool GrisbiImportEngine::HandleFile(const QString& path, User* user, Database* d
|
|||
{
|
||||
bool res = false;
|
||||
QFile file(path);
|
||||
QXmlStreamReader::TokenType token;
|
||||
|
||||
if (!ImportEngine::HandleFile(path, user, db, kiss)) return false;
|
||||
|
||||
QXmlInputSource *source = new QXmlInputSource(&file);
|
||||
QXmlStreamReader reader(&file);
|
||||
try
|
||||
{
|
||||
res = _sax.parse(source, false);
|
||||
while (!reader.atEnd()) {
|
||||
token = reader.readNext();
|
||||
if (token == QXmlStreamReader::StartElement)
|
||||
startElement(reader.name(), reader.attributes());
|
||||
}
|
||||
if (reader.hasError()) {
|
||||
throw reader.errorString();
|
||||
}
|
||||
LinkChilds();
|
||||
}
|
||||
catch (const char* s)
|
||||
{
|
||||
std::cout << "GrisbiImportEngine :: " << s << std::endl;
|
||||
std::cout << "GrisbiImportEngine : " << s << std::endl;
|
||||
res = false;
|
||||
}
|
||||
catch (QString& e)
|
||||
{
|
||||
std::cout << "GrisbiImportEngine : " << e.toStdString() << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
file.close();
|
||||
delete source;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -20,12 +20,11 @@
|
|||
#ifndef GRISBIIMPORTENGINE_H
|
||||
#define GRISBIIMPORTENGINE_H
|
||||
|
||||
#include <QXmlDefaultHandler>
|
||||
#include <QXmlAttributes>
|
||||
#include <QXmlStreamAttributes>
|
||||
|
||||
#include "ImportEngine.hpp"
|
||||
|
||||
class GrisbiImportEngine : public ImportEngine, public QXmlDefaultHandler {
|
||||
class GrisbiImportEngine : public ImportEngine {
|
||||
public:
|
||||
GrisbiImportEngine();
|
||||
~GrisbiImportEngine();
|
||||
|
@ -33,13 +32,12 @@ public:
|
|||
virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss);
|
||||
|
||||
private:
|
||||
QXmlSimpleReader _sax;
|
||||
|
||||
bool startElement (const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
|
||||
bool startElement (QStringRef qName, const QXmlStreamAttributes& atts);
|
||||
|
||||
void LoadAccount(const QXmlAttributes& atts);
|
||||
void LoadCategory(const QXmlAttributes& atts);
|
||||
void LoadOperation(const QXmlAttributes& atts);
|
||||
void LoadAccount(const QXmlStreamAttributes& atts);
|
||||
void LoadCategory(const QXmlStreamAttributes& atts);
|
||||
void LoadOperation(const QXmlStreamAttributes& atts);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -30,8 +30,6 @@ XMLImportEngine::XMLImportEngine()
|
|||
|
||||
_shortExt = ".xml";
|
||||
_longExt = _("KissCount xml files (*.xml)");
|
||||
|
||||
_sax.setContentHandler(this);
|
||||
}
|
||||
|
||||
XMLImportEngine::~XMLImportEngine()
|
||||
|
@ -42,7 +40,8 @@ bool XMLImportEngine::HandleFile(const QString& path, User* user, Database* db,
|
|||
{
|
||||
bool res = false;
|
||||
QFile file(path);
|
||||
|
||||
QXmlStreamReader::TokenType token;
|
||||
|
||||
if (!ImportEngine::HandleFile(path, user, db, kiss)) return false;
|
||||
|
||||
if (!file.open(QIODevice::ReadOnly))
|
||||
|
@ -51,26 +50,37 @@ bool XMLImportEngine::HandleFile(const QString& path, User* user, Database* db,
|
|||
return false;
|
||||
}
|
||||
|
||||
QXmlInputSource *source = new QXmlInputSource(&file);
|
||||
QXmlStreamReader reader(&file);
|
||||
|
||||
try
|
||||
{
|
||||
res = _sax.parse(source, false);
|
||||
while (!reader.atEnd()) {
|
||||
token = reader.readNext();
|
||||
if (token == QXmlStreamReader::StartElement)
|
||||
startElement(reader.name(), reader.attributes());
|
||||
}
|
||||
if (reader.hasError()) {
|
||||
throw reader.errorString();
|
||||
}
|
||||
LinkChilds();
|
||||
}
|
||||
catch (const char* s)
|
||||
{
|
||||
std::cout << "XMLImportEngine :: " << s << std::endl;
|
||||
std::cout << "XMLImportEngine : " << s << std::endl;
|
||||
res = false;
|
||||
}
|
||||
catch (QString& e)
|
||||
{
|
||||
std::cout << "XMLImportEngine : " << e.toStdString() << std::endl;
|
||||
res = false;
|
||||
}
|
||||
|
||||
file.close();
|
||||
delete source;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
bool XMLImportEngine::startElement (const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& attrs)
|
||||
bool XMLImportEngine::startElement (QStringRef qName, const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
if (qName == "kisscount")
|
||||
{
|
||||
|
@ -93,11 +103,11 @@ bool XMLImportEngine::startElement (const QString& namespaceURI, const QString&
|
|||
else if (qName == "operation")
|
||||
LoadOperation(attrs);
|
||||
else
|
||||
std::cout << "Unknown element : '" << qName.toStdString() << "'" << std::endl;
|
||||
std::cout << "Unknown element : '" << qName.toString().toStdString() << "'" << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
void XMLImportEngine::LoadAccount(const QXmlAttributes& attrs)
|
||||
void XMLImportEngine::LoadAccount(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
int id;
|
||||
Account ac;
|
||||
|
@ -105,15 +115,15 @@ void XMLImportEngine::LoadAccount(const QXmlAttributes& attrs)
|
|||
|
||||
ac.id = 0;
|
||||
|
||||
ac.name = attrs.value("name");
|
||||
ac.name = *attrs.value("name").string();
|
||||
ac.id = id = attrs.value("id").toInt();
|
||||
ac.number = attrs.value("number");
|
||||
ac.number = *attrs.value("number").string();
|
||||
ac.blocked = (attrs.value("blocked") == "1");
|
||||
ac._virtual = (attrs.value("virtual") == "1");
|
||||
ac.hidden = (attrs.value("hidden") == "1");
|
||||
ac._default = (attrs.value("default") == "1");
|
||||
ac.start_date = (QDate::fromString("dd/MM/yyyy", attrs.value("start")));
|
||||
ac.end_date = (QDate::fromString("dd/MM/yyyy", attrs.value("start")));
|
||||
ac.start_date = (QDate::fromString(*attrs.value("start").string(), QString("dd/MM/yyyy")));
|
||||
ac.end_date = (QDate::fromString(*attrs.value("start").string(), QString("dd/MM/yyyy")));
|
||||
|
||||
UNESCAPE_CHARS(ac.name);
|
||||
UNESCAPE_CHARS(ac.number);
|
||||
|
@ -148,7 +158,7 @@ void XMLImportEngine::LoadAccount(const QXmlAttributes& attrs)
|
|||
_unresolvedAccounts.push_back(ac);
|
||||
}
|
||||
|
||||
void XMLImportEngine::LoadAccountAmount(const QXmlAttributes& attrs)
|
||||
void XMLImportEngine::LoadAccountAmount(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
AccountAmount accountAmount;
|
||||
int amount;
|
||||
|
@ -161,7 +171,7 @@ void XMLImportEngine::LoadAccountAmount(const QXmlAttributes& attrs)
|
|||
_accountAmounts[accountAmount] = amount;
|
||||
}
|
||||
|
||||
void XMLImportEngine::LoadCategory(const QXmlAttributes& attrs)
|
||||
void XMLImportEngine::LoadCategory(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
QString name;
|
||||
int id;
|
||||
|
@ -171,10 +181,10 @@ void XMLImportEngine::LoadCategory(const QXmlAttributes& attrs)
|
|||
|
||||
cat.fix_cost = false;
|
||||
|
||||
cat.name = name = attrs.value("name");
|
||||
cat.name = name = *attrs.value("name").string();
|
||||
cat.id = id = attrs.value("id").toInt();
|
||||
cat.parent = attrs.value("parent").toInt();
|
||||
cat.font = attrs.value("font");
|
||||
cat.font = *attrs.value("font").string();
|
||||
|
||||
if (attrs.value("backcolor") != "")
|
||||
{
|
||||
|
@ -210,14 +220,14 @@ void XMLImportEngine::LoadCategory(const QXmlAttributes& attrs)
|
|||
_unresolvedCategories.push_back(cat);
|
||||
}
|
||||
|
||||
void XMLImportEngine::LoadTag(const QXmlAttributes& attrs)
|
||||
void XMLImportEngine::LoadTag(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
QString name;
|
||||
int id;
|
||||
Tag tag;
|
||||
static int unknownTag = 0;
|
||||
|
||||
tag.name = name = attrs.value("name");
|
||||
tag.name = name = *attrs.value("name").string();
|
||||
tag.id = id = attrs.value("id").toInt();
|
||||
|
||||
UNESCAPE_CHARS(tag.name);
|
||||
|
@ -236,7 +246,7 @@ void XMLImportEngine::LoadTag(const QXmlAttributes& attrs)
|
|||
_unresolvedTags.push_back(tag);
|
||||
}
|
||||
|
||||
void XMLImportEngine::LoadOperation(const QXmlAttributes& attrs)
|
||||
void XMLImportEngine::LoadOperation(const QXmlStreamAttributes& attrs)
|
||||
{
|
||||
Operation op;
|
||||
|
||||
|
@ -246,14 +256,14 @@ void XMLImportEngine::LoadOperation(const QXmlAttributes& attrs)
|
|||
op.month = attrs.value("month").toInt();
|
||||
op.year = attrs.value("year").toInt();
|
||||
op.amount = attrs.value("amount").toInt();
|
||||
op.description = attrs.value("description");
|
||||
op.description = *attrs.value("description").string();
|
||||
op.category = attrs.value("category").toInt();
|
||||
op.tag = attrs.value("tag").toInt();
|
||||
op.fix_cost = (attrs.value("fix_cost") == "1");
|
||||
op.account = attrs.value("account").toInt();
|
||||
op.checked = (attrs.value("checked") == "1");
|
||||
op.transfert = attrs.value("transfert").toInt();
|
||||
op.formula = attrs.value("formula");
|
||||
op.formula = *attrs.value("formula").string();
|
||||
op.meta = (attrs.value("meta") == "1");
|
||||
op._virtual = (attrs.value("virtual") == "1");
|
||||
|
||||
|
|
|
@ -20,12 +20,11 @@
|
|||
#ifndef XMLIMPORTENGINE_H
|
||||
#define XMLIMPORTENGINE_H
|
||||
|
||||
#include <QXmlDefaultHandler>
|
||||
#include <QXmlAttributes>
|
||||
#include <QXmlStreamAttributes>
|
||||
|
||||
#include "ImportEngine.hpp"
|
||||
|
||||
class XMLImportEngine : public ImportEngine, public QXmlDefaultHandler {
|
||||
class XMLImportEngine : public ImportEngine {
|
||||
public:
|
||||
XMLImportEngine();
|
||||
~XMLImportEngine();
|
||||
|
@ -33,15 +32,14 @@ public:
|
|||
virtual bool HandleFile(const QString& path, User* user, Database* db, KissCount* kiss);
|
||||
|
||||
private:
|
||||
QXmlSimpleReader _sax;
|
||||
|
||||
bool startElement (const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
|
||||
bool startElement (QStringRef qName, const QXmlStreamAttributes& atts);
|
||||
|
||||
void LoadAccount(const QXmlAttributes& atts);
|
||||
void LoadAccountAmount(const QXmlAttributes& atts);
|
||||
void LoadCategory(const QXmlAttributes& atts);
|
||||
void LoadTag(const QXmlAttributes& atts);
|
||||
void LoadOperation(const QXmlAttributes& atts);
|
||||
void LoadAccount(const QXmlStreamAttributes& atts);
|
||||
void LoadAccountAmount(const QXmlStreamAttributes& atts);
|
||||
void LoadCategory(const QXmlStreamAttributes& atts);
|
||||
void LoadTag(const QXmlStreamAttributes& atts);
|
||||
void LoadOperation(const QXmlStreamAttributes& atts);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -521,7 +521,7 @@ void AccountPanel::InitAccountsGrid(User* user, int month, int year)
|
|||
_accountsGrid->setItem(curLine, ACCOUNT_NAME, new QTableWidgetItem(it->name));
|
||||
value = _kiss->GetAccountAmount(it->id, month, year);
|
||||
|
||||
_accountsGrid->setItem(curLine, ACCOUNT_INIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)value/100)));
|
||||
_accountsGrid->setItem(curLine, ACCOUNT_INIT, new QTableWidgetItem(v.asprintf("%.2lf", (double)value/100)));
|
||||
_accountsGrid->setItem(curLine, ACCOUNT_CUR, new QTableWidgetItem(""));
|
||||
_accountsGrid->setItem(curLine, ACCOUNT_FINAL, new QTableWidgetItem(""));
|
||||
for (i=0; i<NUMBER_COLS_ACCOUNTS; i++)
|
||||
|
@ -723,12 +723,12 @@ void AccountPanel::UpdateStats()
|
|||
}
|
||||
|
||||
balance = totalCredit - totalDebit;
|
||||
_statsGrid->item(CUR_CREDIT, 1)->setText(v.sprintf("%.2lf", (double)curCredit/100));
|
||||
_statsGrid->item(CUR_DEBIT, 1)->setText(v.sprintf("%.2lf", (double)curDebit/100));
|
||||
_statsGrid->item(TOTAL_CREDIT, 1)->setText(v.sprintf("%.2lf", (double)totalCredit/100));
|
||||
_statsGrid->item(TOTAL_DEBIT, 1)->setText(v.sprintf("%.2lf", (double)totalDebit/100));
|
||||
_statsGrid->item(CUR_CREDIT, 1)->setText(v.asprintf("%.2lf", (double)curCredit/100));
|
||||
_statsGrid->item(CUR_DEBIT, 1)->setText(v.asprintf("%.2lf", (double)curDebit/100));
|
||||
_statsGrid->item(TOTAL_CREDIT, 1)->setText(v.asprintf("%.2lf", (double)totalCredit/100));
|
||||
_statsGrid->item(TOTAL_DEBIT, 1)->setText(v.asprintf("%.2lf", (double)totalDebit/100));
|
||||
|
||||
_statsGrid->item(BALANCE, 1)->setText(v.sprintf("%.2lf", (double)balance/100));
|
||||
_statsGrid->item(BALANCE, 1)->setText(v.asprintf("%.2lf", (double)balance/100));
|
||||
_statsGrid->item(BALANCE, 1)->setForeground((balance >= 0) ? QBrush(Qt::green) : QBrush(Qt::red));
|
||||
|
||||
for (i=0, accountIt=user->_accounts.begin(); accountIt!=user->_accounts.end(); accountIt++, i++)
|
||||
|
@ -744,13 +744,13 @@ void AccountPanel::UpdateStats()
|
|||
value = _accountsInitValues[accountIt->id];
|
||||
if (mode == REAL_MODE)
|
||||
value -= (*virtuals)[accountIt->id];
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setText(v.asprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
value = curAccountAmounts[day][accountIt->id];
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setText(v.asprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
value = finalAccountAmount[accountIt->id];
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.asprintf("%.2lf", (double)value/100));
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
}
|
||||
else
|
||||
|
@ -758,13 +758,13 @@ void AccountPanel::UpdateStats()
|
|||
value = _accountsInitValues[accountIt->id] - (*virtuals)[accountIt->id];
|
||||
value2 = (*notChecked)[accountIt->id];
|
||||
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setText(v.asprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_INIT)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
value = curAccountAmounts[day][accountIt->id];
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setText(v.asprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_CUR)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
value = finalAccountAmount[accountIt->id];
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.sprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setText(v.asprintf("%.2lf (%.2lf)", (double)value/100, (double)(value-value2)/100));
|
||||
_accountsGrid->item(i, ACCOUNT_FINAL)->setForeground((value >= 0) ? QBrush(Qt::black) : QBrush(Qt::red));
|
||||
}
|
||||
}
|
||||
|
@ -1013,7 +1013,7 @@ void AccountPanel::OnMenuDelete()
|
|||
void AccountPanel::GenerateMonth(int month, int year)
|
||||
{
|
||||
QString s;
|
||||
const QString syear = s.sprintf("%d", year);
|
||||
const QString syear = s.asprintf("%d", year);
|
||||
QList<QTreeWidgetItem *> items = _tree->findItems(syear, Qt::MatchExactly|Qt::MatchRecursive);
|
||||
QTreeWidgetItem *root, *itemYear = 0, *itemMonth;
|
||||
std::map<int, std::vector<int> > ops ;
|
||||
|
|
|
@ -135,30 +135,32 @@ void CostRepartitionBanner::Reset()
|
|||
|
||||
void CostRepartitionBanner::UpdateCosts(int *categoriesValues, int totalDebit)
|
||||
{
|
||||
int i;
|
||||
int i, curVal;
|
||||
User* user = _kiss->GetUser();
|
||||
unsigned long value, percents, utotalDebit = totalDebit;
|
||||
unsigned long value = 0, percents, utotalDebit = totalDebit;
|
||||
QString v;
|
||||
QPieSeries* series = (QPieSeries*) (_pie->series()[0]);
|
||||
QList<QtCharts::QPieSlice*> slices = series->slices();
|
||||
|
||||
for(i=0; i<user->GetCategoriesNumber(); i++)
|
||||
{
|
||||
curVal = abs(categoriesValues[i]);
|
||||
|
||||
if (totalDebit != 0)
|
||||
{
|
||||
percents = ((categoriesValues[i]*(unsigned long)100))/utotalDebit;
|
||||
percents = ((curVal*(unsigned long)100))/utotalDebit;
|
||||
}
|
||||
else
|
||||
percents = 0.0;
|
||||
|
||||
if (!i)
|
||||
_statsGrid->item(i, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)categoriesValues[i]/100, (int)percents));
|
||||
_statsGrid->item(i, 1)->setText(v.asprintf("%.2lf (%02d %%)", (double)curVal/100, (int)percents));
|
||||
else
|
||||
{
|
||||
_statsGrid->item(i+1, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)categoriesValues[i]/100, (int)percents));
|
||||
_statsGrid->item(i+1, 1)->setText(v.asprintf("%.2lf (%02d %%)", (double)curVal/100, (int)percents));
|
||||
|
||||
slices[i-1]->setValue(categoriesValues[i] / 100);
|
||||
slices[i-1]->setLabelVisible(categoriesValues[i] != 0.0);
|
||||
slices[i-1]->setValue(curVal / 100);
|
||||
slices[i-1]->setLabelVisible(curVal != 0.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +169,7 @@ void CostRepartitionBanner::UpdateCosts(int *categoriesValues, int totalDebit)
|
|||
percents = (value*100)/totalDebit;
|
||||
else
|
||||
percents = 0.0;
|
||||
_statsGrid->item(1, 1)->setText(v.sprintf("%.2lf (%02d %%)", (double)value/100, (int)percents));
|
||||
_statsGrid->item(1, 1)->setText(v.asprintf("%.2lf (%02d %%)", (double)value/100, (int)percents));
|
||||
|
||||
_statsGrid->resizeColumnsToContents();
|
||||
}
|
||||
|
|
|
@ -68,7 +68,12 @@ GenerateDialog::GenerateDialog(KissCount* kiss, wxUI *parent, int month, int yea
|
|||
|
||||
if (toSelect != -1)
|
||||
{
|
||||
_yearFrom->setCurrentIndex(toSelect);
|
||||
/* Index has not been changed if there is only one year */
|
||||
if (toSelect == 0)
|
||||
OnYearFromChange(toSelect);
|
||||
else
|
||||
_yearFrom->setCurrentIndex(toSelect);
|
||||
|
||||
toSelect=0;
|
||||
if (month != -1)
|
||||
{
|
||||
|
|
|
@ -335,15 +335,15 @@ void ImportPanel::OnLoadOperations()
|
|||
|
||||
if (nbAccounts)
|
||||
{
|
||||
message += v.sprintf(_("%d accounts").toStdString().c_str(), nbAccounts);
|
||||
message += v.asprintf(_("%d accounts").toStdString().c_str(), nbAccounts);
|
||||
if (nbCategories) message += _(" and ");
|
||||
}
|
||||
|
||||
if (nbCategories)
|
||||
message += v.sprintf(_("%d categories").toStdString().c_str(), nbCategories);
|
||||
message += v.asprintf(_("%d categories").toStdString().c_str(), nbCategories);
|
||||
|
||||
if (nbTags)
|
||||
message += v.sprintf(_("%d tags").toStdString().c_str(), nbTags);
|
||||
message += v.asprintf(_("%d tags").toStdString().c_str(), nbTags);
|
||||
|
||||
message += _(" will be created, is it ok ?");
|
||||
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
|
||||
#include "SearchPanel.hpp"
|
||||
|
||||
enum SEARCH_TYPE {
|
||||
SEARCH_DEBIT = 0,
|
||||
SEARCH_CREDIT,
|
||||
SEARCH_DEBIT_AND_CREDIT
|
||||
};
|
||||
|
||||
SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent, bool lowResolution) :
|
||||
KissPanel(kiss, parent, lowResolution), _operations(0)
|
||||
{
|
||||
|
@ -33,6 +39,7 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent, bool lowResolution) :
|
|||
|
||||
QVBoxLayout *vbox = new QVBoxLayout;
|
||||
QVBoxLayout *vbox2 = new QVBoxLayout;
|
||||
QVBoxLayout *vbox3 = new QVBoxLayout;
|
||||
QHBoxLayout *hbox = new QHBoxLayout;
|
||||
|
||||
_icons[KissPanel::LOW_RES_ICON] = SEARCH_LOW_ICON;
|
||||
|
@ -72,8 +79,18 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent, bool lowResolution) :
|
|||
_categories[i] = _(categoryIt->name.toStdString().c_str()) ;
|
||||
}
|
||||
|
||||
_searchType = new QComboBox();
|
||||
_searchType->addItem(_("Debit"));
|
||||
_searchType->addItem(_("Credit"));
|
||||
_searchType->addItem(_("Debit+Credit"));
|
||||
|
||||
connect(_searchType, SIGNAL(currentIndexChanged(int)), this, SLOT(OnResultTypeChanged(int)));
|
||||
|
||||
_costRepartitionBanner = new CostRepartitionBanner(_kiss, this, _categories);
|
||||
|
||||
vbox3->addWidget(_searchType);
|
||||
vbox3->addWidget(_costRepartitionBanner);
|
||||
|
||||
vbox2->addWidget(_changeAccountButton);
|
||||
vbox2->addWidget(_changeCategoryButton);
|
||||
vbox2->addWidget(_changeTagButton);
|
||||
|
@ -84,7 +101,7 @@ SearchPanel::SearchPanel(KissCount* kiss, wxUI *parent, bool lowResolution) :
|
|||
hbox->addStretch();
|
||||
hbox->addWidget(_grid);
|
||||
hbox->addStretch();
|
||||
hbox->addWidget(_costRepartitionBanner, 2);
|
||||
hbox->addLayout(vbox3, 2);
|
||||
|
||||
vbox->addLayout(hbox, 2);
|
||||
}
|
||||
|
@ -107,11 +124,12 @@ void SearchPanel::UpdateCostRepartition()
|
|||
{
|
||||
int i;
|
||||
User* user = _kiss->GetUser();
|
||||
double total=0.0;
|
||||
int total=0;
|
||||
std::vector<Operation>::iterator it;
|
||||
Account account;
|
||||
Operation op;
|
||||
|
||||
SEARCH_TYPE searchType = (SEARCH_TYPE) _searchType->currentIndex();
|
||||
|
||||
_costRepartitionBanner->Reset();
|
||||
|
||||
for (i=0; i<user->GetCategoriesNumber(); i++)
|
||||
|
@ -127,11 +145,14 @@ void SearchPanel::UpdateCostRepartition()
|
|||
|
||||
if (account.blocked && op.transfert && op.amount > 0)
|
||||
op.amount = -op.amount;
|
||||
|
||||
if (op.amount >= 0) continue;
|
||||
|
||||
_categoriesValues[_categoriesIndexes[op.category]] -= op.amount;
|
||||
total -= op.amount;
|
||||
if (searchType == SEARCH_DEBIT && op.amount > 0)
|
||||
continue;
|
||||
else if (searchType == SEARCH_CREDIT && op.amount < 0)
|
||||
continue;
|
||||
|
||||
_categoriesValues[_categoriesIndexes[op.category]] += op.amount;
|
||||
total += abs(op.amount);
|
||||
}
|
||||
|
||||
_costRepartitionBanner->UpdateCosts(_categoriesValues, total);
|
||||
|
@ -331,6 +352,11 @@ void SearchPanel::OnButtonRename()
|
|||
NeedReload();
|
||||
}
|
||||
|
||||
void SearchPanel::OnResultTypeChanged(int index)
|
||||
{
|
||||
OnButtonSearch();
|
||||
}
|
||||
|
||||
void SearchPanel::OnShow()
|
||||
{
|
||||
_wxUI->setWindowTitle(_kiss->GetUser()->_name + " - " + _("Search"));
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#define SEARCHPANEL_H
|
||||
|
||||
#include <QtGui>
|
||||
#include <QComboBox>
|
||||
|
||||
#include "view.hpp"
|
||||
#include "grid/GridAccount.hpp"
|
||||
|
@ -53,12 +54,15 @@ private slots:
|
|||
void OnButtonChangeTag();
|
||||
void OnButtonRename();
|
||||
|
||||
void OnResultTypeChanged(int);
|
||||
|
||||
private:
|
||||
void UpdateCostRepartition();
|
||||
|
||||
std::vector<Operation> *_operations;
|
||||
SearchBanner* _banner;
|
||||
GridAccount *_grid;
|
||||
QComboBox *_searchType;
|
||||
CostRepartitionBanner *_costRepartitionBanner;
|
||||
QString* _categories;
|
||||
int *_categoriesValues;
|
||||
|
|
|
@ -93,7 +93,7 @@ void SnapshotsDialog::OnCreate()
|
|||
int i;
|
||||
|
||||
bak = Database::GetDatabaseFile() + ".bak.";
|
||||
bak += v.sprintf("%d.%02d.%02d", curDate.year(), curDate.month(), curDate.day());
|
||||
bak += v.asprintf("%d.%02d.%02d", curDate.year(), curDate.month(), curDate.day());
|
||||
|
||||
if (dir.exists(bak))
|
||||
{
|
||||
|
|
|
@ -165,7 +165,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
|
|||
std::map<int, std::map<int, int> >::iterator accountYearIt;
|
||||
std::map<int, int>::iterator accountMonthIt;
|
||||
int total;
|
||||
int account, i, nbDays;
|
||||
int account, i, nbDays, nbTicks = 0;
|
||||
QString value, v;
|
||||
User* user = _kiss->GetUser();
|
||||
QDate date, start, end;
|
||||
|
@ -195,6 +195,7 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
|
|||
date = QDate(yearFrom, monthFrom+1, i+1);
|
||||
xValue.setDate(date);
|
||||
series->append(xValue.toMSecsSinceEpoch(), 0.0);
|
||||
nbTicks++;
|
||||
}
|
||||
|
||||
series->setName(_("0 line"));
|
||||
|
@ -228,12 +229,13 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
|
|||
// Line on 0 all over the years
|
||||
start = QDate(yearFrom, monthFrom+1, 1);
|
||||
end = QDate(yearTo, monthTo+1, 1);
|
||||
end = end.addMonths(1).addMonths(-1);
|
||||
end = end.addMonths(1);
|
||||
date = start;
|
||||
for (date = start; date <= end; date = date.addMonths(1))
|
||||
{
|
||||
xValue.setDate(date);
|
||||
series->append(xValue.toMSecsSinceEpoch(), 0.0);
|
||||
nbTicks++;
|
||||
}
|
||||
|
||||
axisX->setLabelsAngle(-60);
|
||||
|
@ -282,9 +284,12 @@ void StatsPanel::UpdateStats(int monthFrom, int yearFrom, int monthTo, int yearT
|
|||
QLegend* legend = _plot->legend();
|
||||
legend->setAlignment(Qt::AlignRight);
|
||||
|
||||
_plot->addSeries(series0);
|
||||
_plot->createDefaultAxes();
|
||||
axisX->setTickCount(nbTicks);
|
||||
_plot->setAxisX(axisX, series0);
|
||||
|
||||
// _plot->addAxis(axisX, Qt::AlignRight);
|
||||
|
||||
if (!_chartView)
|
||||
{
|
||||
_chartView = new QChartView(_plot);
|
||||
|
|
|
@ -25,16 +25,18 @@
|
|||
#include <QPushButton>
|
||||
#include <QInputDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QScreen>
|
||||
|
||||
#include "UsersDialog.hpp"
|
||||
|
||||
UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) : QDialog(0, Qt::Dialog), _kiss(kiss), _wxUI(parent)
|
||||
UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) :
|
||||
QDialog(parent, Qt::Dialog|Qt::WindowStaysOnTopHint), _kiss(kiss), _wxUI(parent)
|
||||
{
|
||||
QGridLayout* gridLayout;
|
||||
|
||||
setWindowTitle(_("Users"));
|
||||
setModal(true);
|
||||
|
||||
|
||||
gridLayout = new QGridLayout(this);
|
||||
|
||||
gridLayout->addWidget(new QLabel(_("User "), this), 0, 0);
|
||||
|
@ -64,15 +66,22 @@ UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) : QDialog(0, Qt::Dialog)
|
|||
_users->addItem(*i);
|
||||
}
|
||||
|
||||
_users->setFocus();
|
||||
|
||||
if (users_list.size() == 0)
|
||||
{
|
||||
OnNewUser();
|
||||
throw ExceptionNewUser();
|
||||
}
|
||||
else
|
||||
show();
|
||||
}
|
||||
|
||||
void UsersDialog::showEvent(QShowEvent *event)
|
||||
{
|
||||
QDialog::showEvent(event);
|
||||
// QRect scr = QApplication::primaryScreen()->geometry();
|
||||
// move( scr.center() - rect().center() );
|
||||
// activateWindow();
|
||||
// raise();
|
||||
// setFocus();
|
||||
// std::cout << "SHOW EVENT" << std::endl;
|
||||
}
|
||||
|
||||
void UsersDialog::OnEnter()
|
||||
|
|
|
@ -35,6 +35,9 @@ public:
|
|||
|
||||
class ExceptionNewUser {};
|
||||
|
||||
private:
|
||||
void showEvent(QShowEvent *event);
|
||||
|
||||
private slots:
|
||||
void OnEnter();
|
||||
void OnOK();
|
||||
|
|
|
@ -64,7 +64,7 @@ void CalendarDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
else
|
||||
ac.end_date = _date;
|
||||
}
|
||||
model->setData(index, qVariantFromValue(_date.toString(_dateFormat)));
|
||||
model->setData(index, QVariant::fromValue(_date.toString(_dateFormat)));
|
||||
}
|
||||
|
||||
void CalendarDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -38,7 +38,7 @@ void ChoiceDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
const QModelIndex &index) const
|
||||
{
|
||||
QComboBox *combo = qobject_cast<QComboBox *>(editor);
|
||||
model->setData(index, qVariantFromValue(combo->currentText()));
|
||||
model->setData(index, QVariant::fromValue(combo->currentText()));
|
||||
}
|
||||
|
||||
void ChoiceDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -41,7 +41,7 @@ void DateDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
|
||||
s = QDate(_year, _month, combo->currentIndex()+1).toString(_dateFormat);
|
||||
|
||||
model->setData(index, qVariantFromValue(s));
|
||||
model->setData(index, QVariant::fromValue(s));
|
||||
}
|
||||
|
||||
void DateDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -35,7 +35,7 @@ void FloatDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
bool ok;
|
||||
double value = line->text().toDouble(&ok);
|
||||
if (ok)
|
||||
model->setData(index, qVariantFromValue(s.sprintf("%.2lf", value)));
|
||||
model->setData(index, QVariant::fromValue(s.asprintf("%.2lf", value)));
|
||||
}
|
||||
|
||||
void FloatDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -67,13 +67,13 @@ void FormulaDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
_this->_operations->at(index.row()).formula = value;
|
||||
delete[] str2;
|
||||
res = ParseExp::EvaluateExpr(&opt, true);
|
||||
model->setData(index, qVariantFromValue(s.sprintf("%.2lf", res)));
|
||||
model->setData(index, QVariant::fromValue(s.asprintf("%.2lf", res)));
|
||||
}
|
||||
else
|
||||
{
|
||||
res = value.toDouble(&ok);
|
||||
if (ok)
|
||||
model->setData(index, qVariantFromValue(s.sprintf("%.2lf", res)));
|
||||
model->setData(index, QVariant::fromValue(s.asprintf("%.2lf", res)));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -439,10 +439,10 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
|
|||
setItem(line, OP_DATE, new QTableWidgetItem(_kiss->FormatDate(op.day+1, month+1, year)));
|
||||
if (op.amount < 0)
|
||||
{
|
||||
setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)-op.amount/100)));
|
||||
setItem(line, DEBIT, new QTableWidgetItem(v.asprintf("%.2lf", (double)-op.amount/100)));
|
||||
}
|
||||
else
|
||||
setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)op.amount/100)));
|
||||
setItem(line, CREDIT, new QTableWidgetItem(v.asprintf("%.2lf", (double)op.amount/100)));
|
||||
|
||||
if (!op.meta)
|
||||
setItem(line, ACCOUNT, new QTableWidgetItem(user->GetAccountName(op.account)));
|
||||
|
@ -464,8 +464,8 @@ void GridAccount::InsertOperation(User* user, Operation& op, int line, bool fix,
|
|||
{
|
||||
amount = _kiss->MetaPositiveAmount(op.id);
|
||||
|
||||
setItem(line, DEBIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100)));
|
||||
setItem(line, CREDIT, new QTableWidgetItem(v.sprintf("%.2lf", (double)amount/100)));
|
||||
setItem(line, DEBIT, new QTableWidgetItem(v.asprintf("%.2lf", (double)amount/100)));
|
||||
setItem(line, CREDIT, new QTableWidgetItem(v.asprintf("%.2lf", (double)amount/100)));
|
||||
}
|
||||
|
||||
if (line <= _fixCosts)
|
||||
|
@ -1049,9 +1049,9 @@ void GridAccount::OnOperationModified(int row, int col)
|
|||
|
||||
/* Non null value --> set amount */
|
||||
if (op_tmp.amount > 0)
|
||||
setItem(row, CREDIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)op_tmp.amount/100)));
|
||||
setItem(row, CREDIT, new QTableWidgetItem(value.asprintf("%.2lf", (double)op_tmp.amount/100)));
|
||||
else if (op_tmp.amount < 0)
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)-op_tmp.amount/100)));
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.asprintf("%.2lf", (double)-op_tmp.amount/100)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1062,7 +1062,7 @@ void GridAccount::OnOperationModified(int row, int col)
|
|||
if (new_op.amount < 0)
|
||||
{
|
||||
new_op.amount *= -1.0;
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)new_op.amount/100)));
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.asprintf("%.2lf", (double)new_op.amount/100)));
|
||||
}
|
||||
if (new_op.amount != 0.0) new_op.amount *= -1.0;
|
||||
op_complete--;
|
||||
|
@ -1077,7 +1077,7 @@ void GridAccount::OnOperationModified(int row, int col)
|
|||
if (new_op.amount < 0)
|
||||
{
|
||||
new_op.amount *= -1.0;
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.sprintf("%.2lf", (double)new_op.amount/100)));
|
||||
setItem(row, DEBIT, new QTableWidgetItem(value.asprintf("%.2lf", (double)new_op.amount/100)));
|
||||
}
|
||||
op_complete--;
|
||||
new_op.formula = _displayedOperations[row].formula;
|
||||
|
|
|
@ -35,9 +35,9 @@ void StarDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
QString value = line->text().trimmed();
|
||||
|
||||
if ((*_accounts)[index.row()].shared)
|
||||
model->setData(index, qVariantFromValue(value+ "*"));
|
||||
model->setData(index, QVariant::fromValue(value+ "*"));
|
||||
else
|
||||
model->setData(index, qVariantFromValue(value));
|
||||
model->setData(index, QVariant::fromValue(value));
|
||||
}
|
||||
|
||||
void StarDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -41,9 +41,9 @@ void TabDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
|||
|
||||
if (index.row() < (int) _operations->size() && (*_operations)[index.row()].id &&
|
||||
(*_operations)[index.row()].parent)
|
||||
model->setData(index, qVariantFromValue(" " + value));
|
||||
model->setData(index, QVariant::fromValue(" " + value));
|
||||
else
|
||||
model->setData(index, qVariantFromValue(value));
|
||||
model->setData(index, QVariant::fromValue(value));
|
||||
}
|
||||
|
||||
void TabDelegate::setEditorData(QWidget *editor,
|
||||
|
|
|
@ -31,8 +31,6 @@
|
|||
|
||||
#include "UsersDialog.hpp"
|
||||
|
||||
#include <QDesktopWidget>
|
||||
|
||||
QString wxUI::months[12] ;
|
||||
QColor wxUI::categoryColors[MAX_CATEGORY] = {QColor(0x00, 0x45, 0x86),
|
||||
QColor(0xFF, 0x3E, 0x0E),
|
||||
|
@ -53,11 +51,10 @@ wxUI::wxUI(KissCount* kiss, const QString& title)
|
|||
_needReload(0)
|
||||
{
|
||||
QPushButton* button;
|
||||
QDesktopWidget desk;
|
||||
bool lowRes;
|
||||
int w;
|
||||
|
||||
lowRes = (desk.availableGeometry().width() <= 1024);
|
||||
|
||||
lowRes = (_kiss->primaryScreen()->size().width() <= 1024);
|
||||
|
||||
SetLanguage("");
|
||||
|
||||
|
@ -194,10 +191,9 @@ void wxUI::InitPanels()
|
|||
QPushButton* button;
|
||||
_panels.clear();
|
||||
int id=0;
|
||||
QDesktopWidget desk;
|
||||
bool lowRes;
|
||||
|
||||
lowRes = (desk.availableGeometry().width() <= 1024);
|
||||
lowRes = (_kiss->primaryScreen()->size().width() <= 1024);
|
||||
|
||||
ADD_PANEL(AccountPanel);
|
||||
ADD_PANEL(StatsPanel);
|
||||
|
|
Loading…
Reference in New Issue