From 2e89948c1f0dc2b43819ae7d3098c1f21ba97444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Sun, 19 Apr 2020 16:50:07 +0200 Subject: [PATCH] Add ctrl+h shortcut to setup current operation date to yesterday. If called twice, set date to last operation date (if any) --- ChangeLog | 4 +- src/view/grid/GridAccount.cpp | 69 +++++++++++++++++++++++++++++++++++ src/view/grid/GridAccount.hpp | 7 ++-- 3 files changed, 76 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 92ab220..5704b13 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ -v0.9 (27/07/2019) +v0.9 (19/04/2020) ** User ** + Add ctrl+h shortcut to setup current operation date to yesterday. If called twice, set date to last operation date (if any) ** Dev ** + Add a constructor for Operation (to clear all fields) ** Bugs ** Check index in ctrl+t, ctrl+r and suppr callback to avoid doing something on non existant operation diff --git a/src/view/grid/GridAccount.cpp b/src/view/grid/GridAccount.cpp index 48890f2..85aecc1 100644 --- a/src/view/grid/GridAccount.cpp +++ b/src/view/grid/GridAccount.cpp @@ -122,6 +122,7 @@ GridAccount::GridAccount(KissCount* kiss, KissPanel *parent, { _ctrlT = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_T), this, SLOT(OnCtrlT())); _ctrlR = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_R), this, SLOT(OnCtrlR())); + _ctrlH = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_H), this, SLOT(OnCtrlH())); _suppr = new QShortcut(QKeySequence(Qt::Key_Delete), this, SLOT(OnSuppr())); } } @@ -1734,6 +1735,74 @@ void GridAccount::OnCtrlR(void) } } +void GridAccount::OnCtrlH(void) +{ + QModelIndexList selected = selectedIndexes(); + Operation op, prev_op; + QString value; + QDate date; + int row, day; + + if (selected.size() != 1) + return; + + row = selected[0].row(); + + op = _displayedOperations[row]; + + if (op.meta) + return; + + if (!op.id) + { + op.month = _curMonth; + op.year = _curYear; + value = item(row, OP_DATE)->text(); + if (value.length()) + { + date = QDate::fromString(value, _kiss->GetDateLocalFormat()); + op.day = date.day()-1; + } + else + op.day = 0; + + // Set previous operation day + if (row <= _fixCosts) + _lastCtrlH = row; + } + + // Ctrl+H multiple times + // Set day to previous operation day + if (_lastCtrlH == row) + { + if (row < 2) + return; + prev_op = _displayedOperations[row-1]; + // No previous operation or day already equal + if (!prev_op.id || op.day == prev_op.day) + return; + day = prev_op.day; + } + // Set day to yesterday + else + { + day = QDate::currentDate().day()-1; + day--; + } + + _inModification = true ; + + op.day = day; + if (op.id) + UpdateOperation(op); + + item(row, OP_DATE)->setText(_kiss->FormatDate(op.day+1, op.month+1, op.year)); + + _lastCtrlH = row; + + _inModification = false ; +} + void GridAccount::OnSuppr(void) { QModelIndexList selected = selectedIndexes(); diff --git a/src/view/grid/GridAccount.hpp b/src/view/grid/GridAccount.hpp index 93d874c..927dbe4 100644 --- a/src/view/grid/GridAccount.hpp +++ b/src/view/grid/GridAccount.hpp @@ -45,7 +45,7 @@ public: enum {TREE, DESCRIPTION, OP_DATE, DEBIT, CREDIT, CATEGORY, TAG, ACCOUNT, CHECKED, NUMBER_COLS_OPS}; - GridAccount(KissCount* kiss, KissPanel *parent, + GridAccount(KissCount* kiss, KissPanel *parent, bool canAddOperation, bool setWeek, bool synchronizeWithDatabase); ~GridAccount(); @@ -73,6 +73,7 @@ private slots: void OnDeleteClicked(int id); void OnCtrlT(void); void OnCtrlR(void); + void OnCtrlH(void); void OnSuppr(void); private: @@ -89,8 +90,8 @@ private: QSignalMapper _treeSignalMapper, _checkSignalMapper, _deleteSignalMapper; bool _inModification; QCompleter* _completer; - int _transfertCompletionIndex; - QShortcut* _ctrlT, *_ctrlR, *_suppr; + int _transfertCompletionIndex, _lastCtrlH; + QShortcut* _ctrlT, *_ctrlR, *_ctrlH, *_suppr; void SetWeek(int week, int line); void ResetWeeks();