Changeset View
Changeset View
Standalone View
Standalone View
kmymoney/views/kbudgetview.cpp
1 | /*************************************************************************** | 1 | /*************************************************************************** | ||
---|---|---|---|---|---|
2 | kbudgetview.cpp | 2 | kbudgetview.cpp | ||
3 | --------------- | 3 | --------------- | ||
4 | begin : Thu Jan 10 2006 | 4 | begin : Thu Jan 10 2006 | ||
5 | copyright : (C) 2006 by Darren Gould | 5 | copyright : (C) 2006 by Darren Gould | ||
6 | email : darren_gould@gmx.de | 6 | email : darren_gould@gmx.de | ||
7 | Alvaro Soliverez <asoliverez@gmail.com> | 7 | Alvaro Soliverez <asoliverez@gmail.com> | ||
8 | (C) 2017 by Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> | ||||
8 | ***************************************************************************/ | 9 | ***************************************************************************/ | ||
9 | 10 | | |||
10 | /*************************************************************************** | 11 | /*************************************************************************** | ||
11 | * * | 12 | * * | ||
12 | * This program is free software; you can redistribute it and/or modify * | 13 | * This program is free software; you can redistribute it and/or modify * | ||
13 | * it under the terms of the GNU General Public License as published by * | 14 | * it under the terms of the GNU General Public License as published by * | ||
14 | * the Free Software Foundation; either version 2 of the License, or * | 15 | * the Free Software Foundation; either version 2 of the License, or * | ||
15 | * (at your option) any later version. * | 16 | * (at your option) any later version. * | ||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Line(s) | |||||
110 | // *** KBudgetView Implementation *** | 111 | // *** KBudgetView Implementation *** | ||
111 | //TODO: This has to go to user settings | 112 | //TODO: This has to go to user settings | ||
112 | const int KBudgetView::m_iBudgetYearsAhead = 5; | 113 | const int KBudgetView::m_iBudgetYearsAhead = 5; | ||
113 | const int KBudgetView::m_iBudgetYearsBack = 3; | 114 | const int KBudgetView::m_iBudgetYearsBack = 3; | ||
114 | 115 | | |||
115 | BudgetAccountsProxyModel::BudgetAccountsProxyModel(QObject *parent/* = 0*/) : | 116 | BudgetAccountsProxyModel::BudgetAccountsProxyModel(QObject *parent/* = 0*/) : | ||
116 | AccountsViewFilterProxyModel(parent) | 117 | AccountsViewFilterProxyModel(parent) | ||
117 | { | 118 | { | ||
118 | addAccountGroup(MyMoneyAccount::Income); | 119 | addAccountGroup(QVector<MyMoneyAccount::_accountTypeE> {MyMoneyAccount::Income, MyMoneyAccount::Expense}); | ||
119 | addAccountGroup(MyMoneyAccount::Expense); | | |||
120 | } | 120 | } | ||
121 | 121 | | |||
122 | /** | 122 | /** | ||
123 | * This function was reimplemented to add the data needed by the other columns that this model | 123 | * This function was reimplemented to add the data needed by the other columns that this model | ||
124 | * is adding besides the columns of the @ref AccountsModel. | 124 | * is adding besides the columns of the @ref AccountsModel. | ||
125 | */ | 125 | */ | ||
126 | QVariant BudgetAccountsProxyModel::data(const QModelIndex &index, int role) const | 126 | QVariant BudgetAccountsProxyModel::data(const QModelIndex &index, int role) const | ||
127 | { | 127 | { | ||
128 | if (!MyMoneyFile::instance()->storageAttached()) | 128 | if (!MyMoneyFile::instance()->storageAttached()) | ||
129 | return QVariant(); | 129 | return QVariant(); | ||
130 | QModelIndex normalizedIndex = BudgetAccountsProxyModel::index(index.row(), 0, index.parent()); | 130 | const auto sourceColumn = m_mdlColumns->at(mapToSource(index).column()); | ||
131 | if (role == AccountsModel::AccountBalanceRole || | 131 | static QVector<AccountsModel::Columns> columnsToProcess {AccountsModel::TotalBalance, AccountsModel::TotalValue/*, AccountsModel::PostedValue*/, AccountsModel::Account}; | ||
132 | role == AccountsModel::AccountBalanceDisplayRole || | 132 | if (columnsToProcess.contains(sourceColumn)) { | ||
133 | role == AccountsModel::AccountValueRole || | 133 | const auto ixAccount = mapToSource(BudgetAccountsProxyModel::index(index.row(), AccountsModel::Account, index.parent())); | ||
134 | role == AccountsModel::AccountValueDisplayRole) { | 134 | const auto account = ixAccount.data(AccountsModel::AccountRole).value<MyMoneyAccount>(); | ||
135 | QVariant accountData = data(normalizedIndex, AccountsModel::AccountRole); | 135 | auto const file = MyMoneyFile::instance(); | ||
136 | if (accountData.canConvert<MyMoneyAccount>()) { | 136 | | ||
137 | MyMoneyAccount account = accountData.value<MyMoneyAccount>(); | | |||
138 | MyMoneyMoney balance = accountBalance(account.id()); | | |||
139 | MyMoneyMoney value = accountValue(account, balance); | | |||
140 | switch (role) { | 137 | switch (role) { | ||
141 | case AccountsModel::AccountBalanceRole: | 138 | case Qt::DisplayRole: | ||
142 | return QVariant::fromValue(balance); | 139 | { | ||
143 | case AccountsModel::AccountBalanceDisplayRole: | 140 | switch (sourceColumn) { | ||
144 | if (MyMoneyFile::instance()->security(account.currencyId()) != MyMoneyFile::instance()->baseCurrency()) { | 141 | case AccountsModel::TotalBalance: | ||
145 | return MyMoneyUtils::formatMoney(balance, MyMoneyFile::instance()->security(account.currencyId())); | 142 | if (file->security(account.currencyId()) != file->baseCurrency()) | ||
146 | } else { | 143 | return QVariant(MyMoneyUtils::formatMoney(accountBalance(account.id()), file->security(account.currencyId()))); | ||
144 | else | ||||
147 | return QVariant(); | 145 | return QVariant(); | ||
148 | } | 146 | case AccountsModel::TotalValue: | ||
149 | case AccountsModel::AccountValueRole: | 147 | return QVariant(MyMoneyUtils::formatMoney(computeTotalValue(ixAccount), file->baseCurrency())); | ||
150 | return QVariant::fromValue(value); | 148 | // FIXME: Posted value doesn't correspond with total value without below code. Investigate why and wheather it matters. | ||
151 | case AccountsModel::AccountValueDisplayRole: | 149 | // case AccountsModel::PostedValue: | ||
152 | return MyMoneyUtils::formatMoney(value, MyMoneyFile::instance()->baseCurrency()); | 150 | // return QVariant(MyMoneyUtils::formatMoney(accountValue(account, accountBalance(account.id())), file->baseCurrency())); | ||
153 | } | 151 | default: | ||
152 | break; | ||||
154 | } | 153 | } | ||
155 | } | 154 | } | ||
156 | if (role == AccountsModel::AccountTotalValueRole || | 155 | case AccountsModel::AccountBalanceRole: | ||
157 | role == AccountsModel::AccountTotalValueDisplayRole) { | 156 | if (file->security(account.currencyId()) != file->baseCurrency()) | ||
158 | MyMoneyMoney totalValue = computeTotalValue(mapToSource(normalizedIndex)); | 157 | return QVariant::fromValue(accountBalance(account.id())); | ||
159 | switch (role) { | 158 | else | ||
159 | return QVariant(); | ||||
160 | case AccountsModel::AccountTotalValueRole: | 160 | case AccountsModel::AccountTotalValueRole: | ||
161 | return QVariant::fromValue(totalValue); | 161 | return QVariant::fromValue(computeTotalValue(ixAccount)); | ||
162 | case AccountsModel::AccountTotalValueDisplayRole: | 162 | case AccountsModel::AccountValueRole: | ||
163 | return MyMoneyUtils::formatMoney(totalValue, MyMoneyFile::instance()->baseCurrency()); | 163 | return QVariant::fromValue(accountValue(account, accountBalance(account.id()))); | ||
164 | default: | ||||
165 | break; | ||||
164 | } | 166 | } | ||
165 | } | 167 | } | ||
166 | return AccountsViewFilterProxyModel::data(index, role); | 168 | return AccountsViewFilterProxyModel::data(index, role); | ||
167 | } | 169 | } | ||
168 | 170 | | |||
169 | Qt::ItemFlags BudgetAccountsProxyModel::flags(const QModelIndex &index) const | 171 | Qt::ItemFlags BudgetAccountsProxyModel::flags(const QModelIndex &index) const | ||
170 | { | 172 | { | ||
171 | Qt::ItemFlags flags = AccountsViewFilterProxyModel::flags(index); | 173 | Qt::ItemFlags flags = AccountsViewFilterProxyModel::flags(index); | ||
Show All 26 Lines | 199 | { | |||
198 | m_budget = budget; | 200 | m_budget = budget; | ||
199 | invalidate(); | 201 | invalidate(); | ||
200 | checkBalance(); | 202 | checkBalance(); | ||
201 | } | 203 | } | ||
202 | 204 | | |||
203 | bool BudgetAccountsProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const | 205 | bool BudgetAccountsProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const | ||
204 | { | 206 | { | ||
205 | if (hideUnusedIncomeExpenseAccounts()) { | 207 | if (hideUnusedIncomeExpenseAccounts()) { | ||
206 | QModelIndex index = sourceModel()->index(source_row, 0, source_parent); | 208 | const auto index = sourceModel()->index(source_row, AccountsModel::Account, source_parent); | ||
207 | QVariant accountData = sourceModel()->data(index, AccountsModel::AccountRole); | 209 | const auto accountData = sourceModel()->data(index, AccountsModel::AccountRole); | ||
208 | if (accountData.canConvert<MyMoneyAccount>()) { | 210 | if (accountData.canConvert<MyMoneyAccount>()) { | ||
209 | MyMoneyAccount account = accountData.value<MyMoneyAccount>(); | 211 | const auto account = accountData.value<MyMoneyAccount>(); | ||
210 | MyMoneyMoney balance; | 212 | MyMoneyMoney balance; | ||
211 | // find out if the account is budgeted | 213 | // find out if the account is budgeted | ||
212 | MyMoneyBudget::AccountGroup budgetAccount = m_budget.account(account.id()); | 214 | const auto budgetAccount = m_budget.account(account.id()); | ||
213 | if (budgetAccount.id() == account.id()) { | 215 | if (budgetAccount.id() == account.id()) { | ||
214 | balance = budgetAccount.balance(); | 216 | balance = budgetAccount.balance(); | ||
215 | switch (budgetAccount.budgetLevel()) { | 217 | switch (budgetAccount.budgetLevel()) { | ||
216 | case MyMoneyBudget::AccountGroup::eMonthly: | 218 | case MyMoneyBudget::AccountGroup::eMonthly: | ||
217 | balance = balance * 12; | 219 | balance *= MyMoneyMoney(12); | ||
218 | break; | 220 | break; | ||
219 | default: | 221 | default: | ||
220 | break; | 222 | break; | ||
221 | } | 223 | } | ||
222 | } | 224 | } | ||
223 | if (!balance.isZero()) | 225 | if (!balance.isZero()) | ||
224 | return AccountsFilterProxyModel::filterAcceptsRow(source_row, source_parent); | 226 | return AccountsFilterProxyModel::filterAcceptsRow(source_row, source_parent); | ||
225 | } | 227 | } | ||
226 | for (int i = 0; i < sourceModel()->rowCount(index); ++i) { | 228 | for (auto i = 0; i < sourceModel()->rowCount(index); ++i) { | ||
227 | if (filterAcceptsRow(i, index)) | 229 | if (filterAcceptsRow(i, index)) | ||
228 | return AccountsFilterProxyModel::filterAcceptsRow(i, index); | 230 | return AccountsFilterProxyModel::filterAcceptsRow(i, index); | ||
229 | } | 231 | } | ||
230 | return false; | 232 | return false; | ||
231 | } | 233 | } | ||
232 | return AccountsFilterProxyModel::filterAcceptsRow(source_row, source_parent); | 234 | return AccountsFilterProxyModel::filterAcceptsRow(source_row, source_parent); | ||
233 | } | 235 | } | ||
234 | 236 | | |||
235 | bool BudgetAccountsProxyModel::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const | | |||
236 | { | | |||
237 | if (source_column == AccountsModel::Tax || source_column == AccountsModel::VAT) | | |||
238 | return false; | | |||
239 | return AccountsFilterProxyModel::filterAcceptsColumn(source_column, source_parent); | | |||
240 | } | | |||
241 | | ||||
242 | MyMoneyMoney BudgetAccountsProxyModel::accountBalance(const QString &accountId) const | 237 | MyMoneyMoney BudgetAccountsProxyModel::accountBalance(const QString &accountId) const | ||
243 | { | 238 | { | ||
244 | MyMoneyMoney balance; | 239 | MyMoneyMoney balance; | ||
245 | // find out if the account is budgeted | 240 | // find out if the account is budgeted | ||
246 | MyMoneyBudget::AccountGroup budgetAccount = m_budget.account(accountId); | 241 | MyMoneyBudget::AccountGroup budgetAccount = m_budget.account(accountId); | ||
247 | if (budgetAccount.id() == accountId) { | 242 | if (budgetAccount.id() == accountId) { | ||
248 | balance = budgetAccount.balance(); | 243 | balance = budgetAccount.balance(); | ||
249 | switch (budgetAccount.budgetLevel()) { | 244 | switch (budgetAccount.budgetLevel()) { | ||
250 | case MyMoneyBudget::AccountGroup::eMonthly: | 245 | case MyMoneyBudget::AccountGroup::eMonthly: | ||
251 | balance = balance * 12; | 246 | balance *= MyMoneyMoney(12); | ||
252 | break; | 247 | break; | ||
253 | default: | 248 | default: | ||
254 | break; | 249 | break; | ||
255 | } | 250 | } | ||
256 | } | 251 | } | ||
257 | return balance; | 252 | return balance; | ||
258 | } | 253 | } | ||
259 | 254 | | |||
260 | MyMoneyMoney BudgetAccountsProxyModel::accountValue(const MyMoneyAccount &account, const MyMoneyMoney &balance) const | 255 | MyMoneyMoney BudgetAccountsProxyModel::accountValue(const MyMoneyAccount &account, const MyMoneyMoney &balance) const | ||
261 | { | 256 | { | ||
262 | return Models::instance()->accountsModel()->accountValue(account, balance); | 257 | return Models::instance()->accountsModel()->accountValue(account, balance); | ||
263 | } | 258 | } | ||
264 | 259 | | |||
265 | MyMoneyMoney BudgetAccountsProxyModel::computeTotalValue(const QModelIndex &source_index) const | 260 | MyMoneyMoney BudgetAccountsProxyModel::computeTotalValue(const QModelIndex &source_index) const | ||
266 | { | 261 | { | ||
267 | MyMoneyMoney totalValue; | 262 | auto model = sourceModel(); | ||
268 | QVariant accountData = sourceModel()->data(source_index, AccountsModel::AccountRole); | 263 | auto account = model->data(source_index, AccountsModel::AccountRole).value<MyMoneyAccount>(); | ||
269 | if (accountData.canConvert<MyMoneyAccount>()) { | 264 | auto totalValue = accountValue(account, accountBalance(account.id())); | ||
270 | MyMoneyAccount account = accountData.value<MyMoneyAccount>(); | 265 | for (auto i = 0; i < model->rowCount(source_index); ++i) | ||
271 | totalValue = accountValue(account, accountBalance(account.id())); | 266 | totalValue += computeTotalValue(model->index(i, AccountsModel::Account, source_index)); | ||
272 | for (int i = 0; i < sourceModel()->rowCount(source_index); ++i) { | | |||
273 | totalValue += computeTotalValue(sourceModel()->index(i, 0, source_index)); | | |||
274 | } | | |||
275 | } | | |||
276 | return totalValue; | 267 | return totalValue; | ||
277 | } | 268 | } | ||
278 | 269 | | |||
279 | void BudgetAccountsProxyModel::checkBalance() | 270 | void BudgetAccountsProxyModel::checkBalance() | ||
280 | { | 271 | { | ||
281 | // compute the balance | 272 | // compute the balance | ||
282 | QModelIndexList incomeList = match(index(0, 0), | 273 | QModelIndexList incomeList = match(index(0, 0), | ||
283 | AccountsModel::AccountIdRole, | 274 | AccountsModel::AccountIdRole, | ||
Show All 17 Lines | 286 | if (!incomeList.isEmpty() && !expenseList.isEmpty()) { | |||
301 | } | 292 | } | ||
302 | } | 293 | } | ||
303 | if (m_lastBalance != balance) { | 294 | if (m_lastBalance != balance) { | ||
304 | m_lastBalance = balance; | 295 | m_lastBalance = balance; | ||
305 | emit balanceChanged(m_lastBalance); | 296 | emit balanceChanged(m_lastBalance); | ||
306 | } | 297 | } | ||
307 | } | 298 | } | ||
308 | 299 | | |||
309 | KBudgetView::KBudgetView(QWidget *parent) : | 300 | KBudgetView::KBudgetView(KMyMoneyApp *kmymoney, KMyMoneyView *kmymoneyview) : | ||
310 | QWidget(parent), | 301 | QWidget(nullptr), | ||
302 | m_kmymoney(kmymoney), | ||||
303 | m_kmymoneyview(kmymoneyview), | ||||
311 | m_needReload(false), | 304 | m_needReload(false), | ||
312 | m_needLoad(true), | 305 | m_needLoad(true), | ||
313 | m_inSelection(false) | 306 | m_inSelection(false) | ||
314 | { | 307 | { | ||
315 | } | 308 | } | ||
316 | 309 | | |||
317 | KBudgetView::~KBudgetView() | 310 | KBudgetView::~KBudgetView() | ||
318 | { | 311 | { | ||
319 | if(!m_needLoad) { | 312 | if(!m_needLoad) { | ||
320 | // remember the splitter settings for startup | 313 | // remember the splitter settings for startup | ||
321 | KConfigGroup grp = KSharedConfig::openConfig()->group("Last Use Settings"); | 314 | KConfigGroup grp = KSharedConfig::openConfig()->group("Last Use Settings"); | ||
322 | grp.writeEntry("KBudgetViewSplitterSize", m_splitter->saveState()); | 315 | grp.writeEntry("KBudgetViewSplitterSize", m_splitter->saveState()); | ||
323 | grp.sync(); | 316 | grp.sync(); | ||
324 | } | 317 | } | ||
325 | } | 318 | } | ||
326 | 319 | | |||
320 | KRecursiveFilterProxyModel *KBudgetView::getProxyModel() | ||||
321 | { | ||||
322 | return m_filterProxyModel; | ||||
323 | } | ||||
324 | | ||||
325 | QList<AccountsModel::Columns> *KBudgetView::getProxyColumns() | ||||
326 | { | ||||
327 | return m_accountTree->getColumns(KMyMoneyView::View::Budget); | ||||
328 | } | ||||
329 | | ||||
330 | bool KBudgetView::isLoaded() | ||||
331 | { | ||||
332 | return !m_needLoad; | ||||
333 | } | ||||
334 | | ||||
327 | void KBudgetView::init() | 335 | void KBudgetView::init() | ||
328 | { | 336 | { | ||
329 | m_needLoad = false; | 337 | m_needLoad = false; | ||
330 | setupUi(this); | 338 | setupUi(this); | ||
331 | 339 | | |||
332 | m_budgetList->setRootIsDecorated(false); | 340 | m_budgetList->setRootIsDecorated(false); | ||
333 | m_budgetList->setContextMenuPolicy(Qt::CustomContextMenu); | 341 | m_budgetList->setContextMenuPolicy(Qt::CustomContextMenu); | ||
334 | 342 | | |||
Show All 27 Lines | |||||
362 | 370 | | |||
363 | KGuiItem resetButtonItem(QString(), | 371 | KGuiItem resetButtonItem(QString(), | ||
364 | QIcon::fromTheme(g_Icons[Icon::EditUndo]), | 372 | QIcon::fromTheme(g_Icons[Icon::EditUndo]), | ||
365 | i18n("Revert budget to last saved state"), | 373 | i18n("Revert budget to last saved state"), | ||
366 | i18n("Use this to discard the modified data.")); | 374 | i18n("Use this to discard the modified data.")); | ||
367 | KGuiItem::assign(m_resetButton, resetButtonItem); | 375 | KGuiItem::assign(m_resetButton, resetButtonItem); | ||
368 | m_resetButton->setToolTip(resetButtonItem.toolTip()); | 376 | m_resetButton->setToolTip(resetButtonItem.toolTip()); | ||
369 | 377 | | |||
370 | KGuiItem collapseGuiItem(QString(), | 378 | m_collapseButton->setIcon(QIcon::fromTheme(g_Icons[Icon::ListCollapse])); | ||
371 | QIcon::fromTheme(g_Icons[Icon::ListCollapse]), | 379 | m_expandButton->setIcon(QIcon::fromTheme(g_Icons[Icon::ListExpand])); | ||
372 | QString(), | | |||
373 | QString()); | | |||
374 | KGuiItem expandGuiItem(QString(), | | |||
375 | QIcon::fromTheme(g_Icons[Icon::ListExpand]), | | |||
376 | QString(), | | |||
377 | QString()); | | |||
378 | KGuiItem::assign(m_collapseButton, collapseGuiItem); | | |||
379 | KGuiItem::assign(m_expandButton, expandGuiItem); | | |||
380 | 380 | | |||
381 | m_filterProxyModel = new BudgetAccountsProxyModel(this); | 381 | m_filterProxyModel = new BudgetAccountsProxyModel(this); | ||
382 | m_filterProxyModel->setSourceModel(Models::instance()->accountsModel()); | 382 | | ||
383 | auto const model = Models::instance()->accountsModel(); | ||||
384 | m_filterProxyModel->init(model, getProxyColumns()); | ||||
383 | m_filterProxyModel->setFilterKeyColumn(-1); | 385 | m_filterProxyModel->setFilterKeyColumn(-1); | ||
386 | m_accountTree->init(m_filterProxyModel, model->getColumns()); | ||||
384 | 387 | | |||
385 | m_accountTree->setModel(m_filterProxyModel); | 388 | connect(this, &KBudgetView::openContextMenu, m_kmymoney, &KMyMoneyApp::slotShowBudgetContextMenu); | ||
386 | m_accountTree->setConfigGroupName("KBudgetsView"); | 389 | connect(this, &KBudgetView::selectObjects, m_kmymoney, &KMyMoneyApp::slotSelectBudget); | ||
387 | m_accountTree->setAlternatingRowColors(true); | 390 | connect(m_kmymoney, &KMyMoneyApp::budgetRename, this, &KBudgetView::slotStartRename); | ||
388 | m_accountTree->setIconSize(QSize(22, 22)); | 391 | connect(this, &KBudgetView::aboutToShow, m_kmymoneyview, &KMyMoneyView::aboutToChangeView); | ||
389 | m_accountTree->setSortingEnabled(true); | | |||
390 | 392 | | |||
391 | connect(m_filterProxyModel, SIGNAL(balanceChanged(MyMoneyMoney)), this, SLOT(slotBudgetBalanceChanged(MyMoneyMoney))); | 393 | connect(m_filterProxyModel, &BudgetAccountsProxyModel::balanceChanged, this, &KBudgetView::slotBudgetBalanceChanged); | ||
392 | 394 | | |||
393 | // let the model know if the item is expanded or collapsed | 395 | // let the model know if the item is expanded or collapsed | ||
394 | connect(m_accountTree, SIGNAL(collapsed(QModelIndex)), m_filterProxyModel, SLOT(collapsed(QModelIndex))); | 396 | connect(m_accountTree, &QTreeView::collapsed, m_filterProxyModel, &AccountsViewFilterProxyModel::collapsed); | ||
395 | connect(m_accountTree, SIGNAL(expanded(QModelIndex)), m_filterProxyModel, SLOT(expanded(QModelIndex))); | 397 | connect(m_accountTree, &QTreeView::expanded, m_filterProxyModel, &AccountsViewFilterProxyModel::expanded); | ||
398 | connect(m_accountTree, &KMyMoneyAccountTreeView::columnToggled , m_kmymoneyview, &KMyMoneyView::slotAccountTreeViewChanged); | ||||
396 | 399 | | |||
397 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), this, SLOT(slotSelectAccount(MyMoneyObject))); | 400 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), this, SLOT(slotSelectAccount(MyMoneyObject))); | ||
398 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), kmymoney, SLOT(slotSelectAccount(MyMoneyObject))); | 401 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), m_kmymoney, SLOT(slotSelectAccount(MyMoneyObject))); | ||
399 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), kmymoney, SLOT(slotSelectInstitution(MyMoneyObject))); | 402 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), m_kmymoney, SLOT(slotSelectInstitution(MyMoneyObject))); | ||
400 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), kmymoney, SLOT(slotSelectInvestment(MyMoneyObject))); | 403 | connect(m_accountTree, SIGNAL(selectObject(MyMoneyObject)), m_kmymoney, SLOT(slotSelectInvestment(MyMoneyObject))); | ||
401 | connect(m_accountTree, SIGNAL(openContextMenu(MyMoneyObject)), kmymoney, SLOT(slotShowAccountContextMenu(MyMoneyObject))); | 404 | connect(m_accountTree, &KMyMoneyAccountTreeView::openContextMenu, m_kmymoney, &KMyMoneyApp::slotShowAccountContextMenu); | ||
402 | connect(m_accountTree, SIGNAL(openObject(MyMoneyObject)), kmymoney, SLOT(slotAccountOpen(MyMoneyObject))); | 405 | connect(m_accountTree, SIGNAL(openObject(MyMoneyObject)), m_kmymoney, SLOT(slotAccountOpen(MyMoneyObject))); | ||
403 | 406 | | |||
404 | connect(m_budgetList, SIGNAL(customContextMenuRequested(QPoint)), | 407 | connect(m_budgetList, &QWidget::customContextMenuRequested, | ||
405 | this, SLOT(slotOpenContextMenu(QPoint))); | 408 | this, &KBudgetView::slotOpenContextMenu); | ||
406 | connect(m_budgetList->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(slotSelectBudget())); | 409 | connect(m_budgetList->selectionModel(), &QItemSelectionModel::selectionChanged, this, &KBudgetView::slotSelectBudget); | ||
407 | connect(m_budgetList, SIGNAL(itemChanged(QTreeWidgetItem*,int)), this, SLOT(slotItemChanged(QTreeWidgetItem*,int))); | 410 | connect(m_budgetList, &QTreeWidget::itemChanged, this, &KBudgetView::slotItemChanged); | ||
408 | 411 | | |||
409 | connect(m_cbBudgetSubaccounts, SIGNAL(clicked()), this, SLOT(cb_includesSubaccounts_clicked())); | 412 | connect(m_cbBudgetSubaccounts, &QAbstractButton::clicked, this, &KBudgetView::cb_includesSubaccounts_clicked); | ||
410 | 413 | | |||
411 | // connect the buttons to the actions. Make sure the enabled state | 414 | // connect the buttons to the actions. Make sure the enabled state | ||
412 | // of the actions is reflected by the buttons | 415 | // of the actions is reflected by the buttons | ||
413 | connect(m_renameButton, SIGNAL(clicked()), kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetRename]), SLOT(trigger())); | 416 | connect(m_renameButton, &QAbstractButton::clicked, kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetRename]), &QAction::trigger); | ||
414 | connect(m_deleteButton, SIGNAL(clicked()), kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetDelete]), SLOT(trigger())); | 417 | connect(m_deleteButton, &QAbstractButton::clicked, kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetDelete]), &QAction::trigger); | ||
415 | 418 | | |||
416 | connect(m_budgetValue, SIGNAL(valuesChanged()), this, SLOT(slotBudgetedAmountChanged())); | 419 | connect(m_budgetValue, &KBudgetValues::valuesChanged, this, &KBudgetView::slotBudgetedAmountChanged); | ||
417 | 420 | | |||
418 | connect(m_newButton, SIGNAL(clicked()), this, SLOT(slotNewBudget())); | 421 | connect(m_newButton, &QAbstractButton::clicked, this, &KBudgetView::slotNewBudget); | ||
419 | connect(m_updateButton, SIGNAL(pressed()), this, SLOT(slotUpdateBudget())); | 422 | connect(m_updateButton, &QAbstractButton::pressed, this, &KBudgetView::slotUpdateBudget); | ||
420 | connect(m_resetButton, SIGNAL(pressed()), this, SLOT(slotResetBudget())); | 423 | connect(m_resetButton, &QAbstractButton::pressed, this, &KBudgetView::slotResetBudget); | ||
421 | 424 | | |||
422 | connect(m_hideUnusedButton, SIGNAL(toggled(bool)), this, SLOT(slotHideUnused(bool))); | 425 | connect(m_hideUnusedButton, &QAbstractButton::toggled, this, &KBudgetView::slotHideUnused); | ||
423 | 426 | | |||
424 | connect(m_collapseButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse())); | 427 | connect(m_collapseButton, &QAbstractButton::clicked, this, &KBudgetView::slotExpandCollapse); | ||
425 | connect(m_expandButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse())); | 428 | connect(m_expandButton, &QAbstractButton::clicked, this, &KBudgetView::slotExpandCollapse); | ||
426 | 429 | | |||
427 | // connect the two buttons to all required slots | 430 | // connect the two buttons to all required slots | ||
428 | connect(m_collapseButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse())); | 431 | connect(m_collapseButton, &QAbstractButton::clicked, this, &KBudgetView::slotExpandCollapse); | ||
429 | connect(m_collapseButton, SIGNAL(clicked()), m_accountTree, SLOT(collapseAll())); | 432 | connect(m_collapseButton, &QAbstractButton::clicked, m_accountTree, &KMyMoneyAccountTreeView::collapseAll); | ||
430 | connect(m_accountTree, SIGNAL(collapsedAll()), m_filterProxyModel, SLOT(collapseAll())); | 433 | connect(m_accountTree, &KMyMoneyAccountTreeView::collapsedAll, m_filterProxyModel, &AccountsViewFilterProxyModel::collapseAll); | ||
431 | connect(m_expandButton, SIGNAL(clicked()), this, SLOT(slotExpandCollapse())); | 434 | connect(m_expandButton, &QAbstractButton::clicked, this, &KBudgetView::slotExpandCollapse); | ||
432 | connect(m_expandButton, SIGNAL(clicked()), m_accountTree, SLOT(expandAll())); | 435 | connect(m_expandButton, &QAbstractButton::clicked, m_accountTree, &KMyMoneyAccountTreeView::expandAll); | ||
433 | connect(m_accountTree, SIGNAL(expandedAll()), m_filterProxyModel, SLOT(expandAll())); | 436 | connect(m_accountTree, &KMyMoneyAccountTreeView::expandedAll, m_filterProxyModel, &AccountsViewFilterProxyModel::expandAll); | ||
434 | 437 | | |||
435 | connect(m_searchWidget, SIGNAL(textChanged(QString)), m_filterProxyModel, SLOT(setFilterFixedString(QString))); | 438 | connect(m_searchWidget, SIGNAL(textChanged(QString)), m_filterProxyModel, SLOT(setFilterFixedString(QString))); | ||
436 | 439 | | |||
437 | // setup initial state | 440 | // setup initial state | ||
438 | m_newButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetNew])->isEnabled()); | 441 | m_newButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetNew])->isEnabled()); | ||
439 | m_renameButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetRename])->isEnabled()); | 442 | m_renameButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetRename])->isEnabled()); | ||
440 | m_deleteButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetDelete])->isEnabled()); | 443 | m_deleteButton->setEnabled(kmymoney->actionCollection()->action(kmymoney->s_Actions[Action::BudgetDelete])->isEnabled()); | ||
441 | 444 | | |||
442 | connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotRefreshView())); | 445 | connect(MyMoneyFile::instance(), &MyMoneyFile::dataChanged, this, &KBudgetView::slotRefreshView); | ||
443 | 446 | | |||
444 | KConfigGroup grp = KSharedConfig::openConfig()->group("Last Use Settings"); | 447 | KConfigGroup grp = KSharedConfig::openConfig()->group("Last Use Settings"); | ||
445 | m_splitter->restoreState(grp.readEntry("KBudgetViewSplitterSize", QByteArray())); | 448 | m_splitter->restoreState(grp.readEntry("KBudgetViewSplitterSize", QByteArray())); | ||
446 | m_splitter->setChildrenCollapsible(false); | 449 | m_splitter->setChildrenCollapsible(false); | ||
447 | } | 450 | } | ||
448 | 451 | | |||
449 | 452 | | |||
450 | void KBudgetView::showEvent(QShowEvent * event) | 453 | void KBudgetView::showEvent(QShowEvent * event) | ||
▲ Show 20 Lines • Show All 437 Lines • ▼ Show 20 Line(s) | 885 | { | |||
888 | } catch (const MyMoneyException &e) { | 891 | } catch (const MyMoneyException &e) { | ||
889 | KMessageBox::detailedSorry(0, i18n("Unable to modify budget"), | 892 | KMessageBox::detailedSorry(0, i18n("Unable to modify budget"), | ||
890 | i18n("%1 thrown in %2:%3", e.what(), e.file(), e.line())); | 893 | i18n("%1 thrown in %2:%3", e.what(), e.file(), e.line())); | ||
891 | } | 894 | } | ||
892 | } | 895 | } | ||
893 | 896 | | |||
894 | void KBudgetView::slotBudgetBalanceChanged(const MyMoneyMoney &balance) | 897 | void KBudgetView::slotBudgetBalanceChanged(const MyMoneyMoney &balance) | ||
895 | { | 898 | { | ||
896 | QString s(i18nc("The balance of the selected budget", "Balance: ")); | 899 | m_kmymoneyview->slotNetBalProChanged(balance, m_balanceLabel, KMyMoneyView::View::Budget); | ||
897 | | ||||
898 | s.replace(QString(" "), QString(" ")); | | |||
899 | if (balance.isNegative()) { | | |||
900 | s += "<b><font color=\"red\">"; | | |||
901 | } | | |||
902 | const MyMoneySecurity& sec = MyMoneyFile::instance()->baseCurrency(); | | |||
903 | QString v(MyMoneyUtils::formatMoney(balance, sec)); | | |||
904 | s += v.replace(QString(" "), QString(" ")); | | |||
905 | if (balance.isNegative()) { | | |||
906 | s += "</font></b>"; | | |||
907 | } | | |||
908 | | ||||
909 | m_balanceLabel->setFont(KMyMoneyGlobalSettings::listCellFont()); | | |||
910 | m_balanceLabel->setText(s); | | |||
911 | } | 900 | } |