Add auto-completion for description field in GridAccount

This commit is contained in:
Grégory Soutadé 2012-02-26 21:16:45 +01:00
parent 37626b09e1
commit 88e06dacce
8 changed files with 69 additions and 5 deletions

View File

@ -454,6 +454,18 @@ bool KissCount::SearchPreviousOperation(Operation* res, Operation& op, int month
return false; return false;
} }
void KissCount::GetHistory(int month, int year, QStringList& list)
{
month -= 3;
if (month < 0)
{
year -= 1;
month += 12;
}
_db->GetHistory(month, year, list);
}
void KissCount::GetStats(int monthFrom, int yearFrom, int monthTo, int yearTo, void KissCount::GetStats(int monthFrom, int yearFrom, int monthTo, int yearTo,
std::map<int, std::map<int, std::map<int, double> > >* accountAmounts, std::map<int, std::map<int, std::map<int, double> > >* accountAmounts,
std::map<int, double>* categories) std::map<int, double>* categories)

View File

@ -135,6 +135,8 @@ public:
void UpdateImportPattern(); void UpdateImportPattern();
void GetHistory(int month, int year, QStringList& list);
private: private:
wxUI* _wxUI; wxUI* _wxUI;
Database* _db; Database* _db;

View File

@ -1727,3 +1727,24 @@ void Database::UpdateImportPattern(User* user)
} }
} }
} }
void Database::GetHistory(int month, int year, QStringList& list)
{
QSqlRecord set ;
QSqlQuery query(_db);
QString req;
req = QString("SELECT DISTINCT description AS d FROM operation");
req += " WHERE (year > '" + QString::number(year) + "' OR (year == '" + QString::number(year) + "' AND month >= '" + QString::number(month) + "'))";
req += " ORDER by description";
EXECUTE_SQL_QUERY(req, );
while (query.next())
{
set = query.record();
list << set.value("d").toString();
}
}

View File

@ -28,7 +28,7 @@
#include <controller/KissCount.hpp> #include <controller/KissCount.hpp>
#include "model.hpp" #include "model.hpp"
#define BDD_FILE "/.kisscount/kc.bdd" #define BDD_FILE "kc.bdd"
#define INIT_SCRIPT RESSOURCES_ROOT "init.sql" #define INIT_SCRIPT RESSOURCES_ROOT "init.sql"
@ -146,6 +146,8 @@ public:
void UpdateImportPattern(User* user); void UpdateImportPattern(User* user);
void GetHistory(int month, int year, QStringList& list);
/* Database Update */ /* Database Update */
void CheckDatabaseVersion(); void CheckDatabaseVersion();

View File

@ -49,7 +49,7 @@ GridAccount::GridAccount(KissCount* kiss, QWidget *parent,
_parent(parent), _kiss(kiss), _setWeek(setWeek), _parent(parent), _kiss(kiss), _setWeek(setWeek),
_databaseSynchronization(synchronizeWithDatabase), _loadOperations(false), _databaseSynchronization(synchronizeWithDatabase), _loadOperations(false),
_curMonth(0), _curYear(0), _treeSignalMapper(this), _checkSignalMapper(this), _curMonth(0), _curYear(0), _treeSignalMapper(this), _checkSignalMapper(this),
_deleteSignalMapper(this), _inModification(false) _deleteSignalMapper(this), _inModification(false), _completer(0)
{ {
DEFAULT_FONT(font); DEFAULT_FONT(font);
int i; int i;
@ -136,6 +136,8 @@ GridAccount::~GridAccount()
{ {
delete[] _categories; delete[] _categories;
delete[] _accounts; delete[] _accounts;
if (_completer)
delete _completer;
} }
void GridAccount::ResetWeeks() void GridAccount::ResetWeeks()
@ -196,6 +198,7 @@ void GridAccount::LoadOperations(std::vector<Operation>* operations, int month,
User* user = _kiss->GetUser(); User* user = _kiss->GetUser();
int curLine = 0; int curLine = 0;
Operation NULLop; Operation NULLop;
QStringList list;
NULLop.id = 0; NULLop.id = 0;
@ -211,7 +214,20 @@ void GridAccount::LoadOperations(std::vector<Operation>* operations, int month,
if (rowCount() > 1) if (rowCount() > 1)
setRowCount(1); setRowCount(1);
TabDelegate* descriptionEditor = new TabDelegate(this, &_displayedOperations); if (_completer)
{
delete _completer;
_completer = 0;
}
if (_canAddOperation)
{
_kiss->GetHistory(month, year, list);
_completer = new QCompleter(list);
_completer->setCaseSensitivity(Qt::CaseInsensitive);
}
TabDelegate* descriptionEditor = new TabDelegate(this, &_displayedOperations, _completer);
setItemDelegateForColumn(DESCRIPTION, descriptionEditor); setItemDelegateForColumn(DESCRIPTION, descriptionEditor);
ChoiceDelegate* categoryEditor = new ChoiceDelegate(this, _categories, user->GetCategoriesNumber()-1); ChoiceDelegate* categoryEditor = new ChoiceDelegate(this, _categories, user->GetCategoriesNumber()-1);

View File

@ -29,6 +29,7 @@
#include <QTableWidget> #include <QTableWidget>
#include <QSignalMapper> #include <QSignalMapper>
#include <QCompleter>
class KissCount; class KissCount;
@ -83,6 +84,7 @@ private:
int _curMonth, _curYear; int _curMonth, _curYear;
QSignalMapper _treeSignalMapper, _checkSignalMapper, _deleteSignalMapper; QSignalMapper _treeSignalMapper, _checkSignalMapper, _deleteSignalMapper;
bool _inModification; bool _inModification;
QCompleter* _completer;
void SetWeek(int week, int line); void SetWeek(int week, int line);
void ResetWeeks(); void ResetWeeks();

View File

@ -24,7 +24,12 @@
QWidget * TabDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const QWidget * TabDelegate::createEditor (QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{ {
return new QLineEdit(parent); QLineEdit* lineEdit = new QLineEdit(parent);
if (_completer)
lineEdit->setCompleter(_completer);
return lineEdit;
} }
void TabDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, void TabDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,

View File

@ -28,7 +28,10 @@ class TabDelegate : public TableViewDelegate
Q_OBJECT; Q_OBJECT;
public: public:
TabDelegate(QWidget *parent = 0, std::vector<Operation>* operations=0) : TableViewDelegate(parent), _operations(operations) {} TabDelegate(QWidget *parent = 0, std::vector<Operation>* operations=0, QCompleter* completer=0) :
TableViewDelegate(parent), _operations(operations),
_completer(completer)
{}
QWidget * createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const; QWidget * createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const; void setEditorData(QWidget *editor, const QModelIndex &index) const;
@ -37,6 +40,7 @@ public:
private: private:
std::vector<Operation>* _operations; std::vector<Operation>* _operations;
QCompleter* _completer;
}; };
#endif #endif