From dadc34655c3ab961b0b0b94a10eaaba710f0b5e8 Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 4 Jul 2011 22:38:03 +0000 Subject: Added kmymoney git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmymoney2/dialogs/kcurrencyeditdlg.cpp | 291 +++++++++++++++++++++++++++++++++ 1 file changed, 291 insertions(+) create mode 100644 kmymoney2/dialogs/kcurrencyeditdlg.cpp (limited to 'kmymoney2/dialogs/kcurrencyeditdlg.cpp') diff --git a/kmymoney2/dialogs/kcurrencyeditdlg.cpp b/kmymoney2/dialogs/kcurrencyeditdlg.cpp new file mode 100644 index 0000000..55bac30 --- /dev/null +++ b/kmymoney2/dialogs/kcurrencyeditdlg.cpp @@ -0,0 +1,291 @@ +/*************************************************************************** + kcurrencyeditdlg.cpp - description + ------------------- + begin : Wed Mar 24 2004 + copyright : (C) 2000-2004 by Michael Edwardes + email : mte@users.sourceforge.net + Javier Campos Morales + Felix Rodriguez + John C + Thomas Baumgart + Kevin Tambascio + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include + +// ---------------------------------------------------------------------------- +// QT Includes + +#include +#include + +#include +#include +#include +#include + +// ---------------------------------------------------------------------------- +// KDE Includes + +#include +#include +#include +#include +#include +#include + +// ---------------------------------------------------------------------------- +// Project Includes + +#include "kcurrencyeditdlg.h" + +#include +#include +#include +#include +#include + +#include "../widgets/kmymoneypriceview.h" + +KCurrencyEditDlg::KCurrencyEditDlg(QWidget *parent, const char *name ) : + KCurrencyEditDlgDecl(parent,name) +{ + m_currencyList->addColumn(i18n("Currency")); + m_currencyList->header()->hide(); + + // FIXME: the online source table currently has no functionality + m_onlineSourceTable->hide(); + + connect(m_currencyList, SIGNAL(rightButtonPressed(QListViewItem* , const QPoint&, int)), + this, SLOT(slotListClicked(QListViewItem*, const QPoint&, int))); + connect(m_currencyList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(slotSelectCurrency(QListViewItem*))); + + + connect(m_currencyList, SIGNAL(itemRenamed(QListViewItem*,int,const QString&)), this, SIGNAL(renameCurrency(QListViewItem*,int,const QString&))); + connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadCurrencies())); + + slotLoadCurrencies(); + + connect(m_baseCurrencyButton, SIGNAL(clicked()), this, SLOT(slotSelectBaseCurrency())); + connect(buttonClose, SIGNAL(clicked()), this, SLOT(slotClose())); + + // FIXME: currently, no online help available + buttonHelp->hide(); + + // FIXME this is currently unused so we hide it also + m_description->hide(); + + resize(width()-1, height()-1); + QTimer::singleShot(10, this, SLOT(timerDone())); +} + +void KCurrencyEditDlg::timerDone(void) +{ + if(!m_currency.id().isEmpty()) { + QListViewItemIterator it(m_currencyList); + QListViewItem* q; + while((q = it.current()) != 0) { + KMyMoneyListViewItem* p = static_cast(q); + if(p->id() == m_currency.id()) { + m_currencyList->ensureItemVisible(q); + break; + } + ++it; + } + } + // the resize operation does the trick to adjust + // all widgets in the view to the size they should + // have and show up correctly. Don't ask me, why + // this is, but it cured the problem (ipwizard). + resize(width()+1, height()+1); +} + +KCurrencyEditDlg::~KCurrencyEditDlg() +{ +} + +void KCurrencyEditDlg::resizeEvent(QResizeEvent* /* e*/) +{ + int w = m_currencyList->visibleWidth(); + + m_currencyList->setColumnWidth(0, w); +} + +void KCurrencyEditDlg::slotLoadCurrencies(void) +{ + QValueList list = MyMoneyFile::instance()->currencyList(); + QValueList::ConstIterator it; + QListViewItem *first = 0; + + QString localCurrency(localeconv()->int_curr_symbol); + localCurrency.truncate(3); + + QString baseCurrency = MyMoneyFile::instance()->baseCurrency().id(); + // construct a transparent 16x16 pixmap + QPixmap empty(16, 16); + empty.setMask(QBitmap(16, 16, true)); + + m_currencyList->clear(); + for(it = list.begin(); it != list.end(); ++it) { + KMyMoneyListViewItem* p = new KMyMoneyListViewItem(m_currencyList, (*it).name(), QString(), (*it).id()); + p->setRenameEnabled(0, true); + + if((*it).id() == baseCurrency) { + p->setPixmap(0, QPixmap( locate("icon","hicolor/16x16/apps/kmymoney2.png"))); + if(m_currency.id().isEmpty()) + first = p; + } else { + p->setPixmap(0, empty); + } + + // if we had a previously selected + if(!m_currency.id().isEmpty()) { + if(m_currency.id() == p->id()) + first = p; + } else if ((*it).id() == localCurrency && !first) + first = p; + } + + if(first == 0) + first = m_currencyList->firstChild(); + if(first != 0) { + m_currencyList->setSelected(first, true); + m_currencyList->ensureItemVisible(first); + } + + slotSelectCurrency(first); +} + +void KCurrencyEditDlg::updateCurrency(void) +{ + if(!m_currency.id().isEmpty()) { + if(m_symbolEdit->text() != m_currency.tradingSymbol()) { + m_currency.setTradingSymbol(m_symbolEdit->text()); + MyMoneyFileTransaction ft; + try { + MyMoneyFile::instance()->modifyCurrency(m_currency); + ft.commit(); + } catch(MyMoneyException *e) { + qWarning("Updateing the currency failed!"); + delete e; + } + } + } +} + +void KCurrencyEditDlg::slotSelectCurrency(const QString& id) +{ + QListViewItemIterator it(m_currencyList); + + while(it.current()) { + KMyMoneyListViewItem* p = static_cast(it.current()); + if(p->id() == id) { + slotSelectCurrency(p); + m_currencyList->setSelected(p, true); + m_currencyList->ensureItemVisible(p); + break; + } + ++it; + } +} + +void KCurrencyEditDlg::slotSelectCurrency(QListViewItem *item) +{ + QMap history; + MyMoneyFile* file = MyMoneyFile::instance(); + + updateCurrency(); + + m_detailGroup->setEnabled(item != 0); + m_onlineSourceTable->clear(); + m_idLabel->setText(QString()); + m_symbolEdit->setText(QString()); + + if(item) { + try { + KMyMoneyListViewItem* p = static_cast(item); + m_currency = file->security(p->id()); + m_idLabel->setText(m_currency.id()); + m_symbolEdit->setText(m_currency.tradingSymbol()); + + } catch(MyMoneyException *e) { + delete e; + m_currency = MyMoneySecurity(); + m_onlineSourceTable->clear(); + m_idLabel->setText(QString()); + m_symbolEdit->setText(QString()); + } + m_baseCurrencyButton->setDisabled(m_currency.id() == file->baseCurrency().id()); + emit selectObject(m_currency); + } +} + +void KCurrencyEditDlg::slotClose(void) +{ + updateCurrency(); + accept(); +} + +void KCurrencyEditDlg::slotStartRename(void) +{ + QListViewItemIterator it_l(m_currencyList, QListViewItemIterator::Selected); + QListViewItem* it_v; + if((it_v = it_l.current()) != 0) { + it_v->startRename(0); + } +} + +void KCurrencyEditDlg::slotListClicked(QListViewItem* item, const QPoint&, int) +{ + slotSelectCurrency(item); + emit openContextMenu(m_currency); +} + +void KCurrencyEditDlg::slotRenameCurrency(QListViewItem* item, int /* col */, const QString& txt) +{ + MyMoneyFile* file = MyMoneyFile::instance(); + KMyMoneyListViewItem* p = static_cast(item); + + try { + if(txt != m_currency.name()) { + qDebug("Renaming"); + MyMoneySecurity currency = file->currency(p->id()); + currency.setName(txt); + MyMoneyFileTransaction ft; + try { + file->modifyCurrency(currency); + m_currency = currency; + ft.commit(); + } catch(MyMoneyException* e) { + qDebug("Renaming currency failed"); + delete e; + } + } + } catch(MyMoneyException *e) { + delete e; + updateCurrency(); + } +} + +void KCurrencyEditDlg::slotSelectBaseCurrency(void) +{ + if(!m_currency.id().isEmpty()) { + QListViewItem* p = m_currencyList->selectedItem(); + emit selectBaseCurrency(m_currency); + // in case the dataChanged() signal was not sent out (nested FileTransaction) + // we update the list manually + if(p == m_currencyList->selectedItem()) + slotLoadCurrencies(); + } +} + +#include "kcurrencyeditdlg.moc" -- cgit v1.2.1