You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmymoney/kmymoney2/dialogs/ksecuritylisteditor.cpp

221 lines
8.1 KiB

/***************************************************************************
ksecuritylisteditor.cpp - description
-------------------
begin : Wed Dec 16 2004
copyright : (C) 2004 by Thomas Baumgart
email : ipwizard@users.sourceforge.net
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
// ----------------------------------------------------------------------------
// QT Includes
#include <tqcheckbox.h>
// ----------------------------------------------------------------------------
// KDE Includes
#include <kpushbutton.h>
#include <klistview.h>
#include <kguiitem.h>
#include <kiconloader.h>
#include <kglobal.h>
#include <klocale.h>
#include <kmessagebox.h>
// ----------------------------------------------------------------------------
// Project Includes
#include "ksecuritylisteditor.h"
#include "../mymoney/mymoneysecurity.h"
#include "../mymoney/mymoneyfile.h"
#include "../dialogs/knewinvestmentwizard.h"
#include "../kmymoneyutils.h"
#define ID_COL 0
#define TYPE_COL 1
#define NAME_COL 2
#define SYMBOL_COL 3
#define MARKET_COL 4
#define CURR_COL 5
#define ACCFRACT_COL 6
#define CASHFRACT_COL 7
#define CURRENCY_MARKET TQString("ISO 4217")
KSecurityListEditor::KSecurityListEditor(TQWidget *parent, const char *name) :
KSecurityListEditorDecl(parent, name)
{
m_listView->setColumnWidth(ID_COL, 0);
m_listView->setColumnWidthMode(NAME_COL, TQListView::Maximum);
m_listView->setColumnWidthMode(ID_COL, TQListView::Manual);
m_listView->setColumnAlignment(CURR_COL, TQt::AlignHCenter);
m_listView->setMultiSelection(false);
m_listView->setAllColumnsShowFocus(true);
KIconLoader *il = TDEGlobal::iconLoader();
KGuiItem removeButtenItem( i18n( "&Delete" ),
TQIconSet(il->loadIcon("delete", KIcon::Small, KIcon::SizeSmall)),
i18n("Delete this entry"),
i18n("Remove this security item from the file"));
m_deleteButton->setGuiItem(removeButtenItem);
KGuiItem addButtenItem( i18n( "&Add" ),
TQIconSet(il->loadIcon("file_new", KIcon::Small, KIcon::SizeSmall)),
i18n("Add a new entry"),
i18n("Create a new security entry."));
m_addButton->setGuiItem(addButtenItem);
KGuiItem editButtenItem( i18n( "&Edit" ),
TQIconSet(il->loadIcon("edit", KIcon::Small, KIcon::SizeSmall)),
i18n("Modify the selected entry"),
i18n("Change the security information of the selected entry."));
m_editButton->setGuiItem(editButtenItem);
KGuiItem okButtenItem( i18n("&Close" ),
TQIconSet(il->loadIcon("button_ok", KIcon::Small, KIcon::SizeSmall)),
i18n("Close the dialog"),
i18n("Use this to close the dialog and return to the application."));
m_closeButton->setGuiItem(okButtenItem);
connect(m_closeButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(reject()));
connect(m_showCurrencyButton, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotLoadList()));
connect(m_listView, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotUpdateButtons()));
connect(m_editButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotEditSecurity()));
connect(m_deleteButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotDeleteSecurity()));
// FIXME for now, the only way to add a new security is to add a new investment
m_addButton->hide();
slotLoadList();
}
KSecurityListEditor::~KSecurityListEditor()
{
}
void KSecurityListEditor::slotLoadList(void)
{
m_listView->clear();
TQValueList<MyMoneySecurity> list = MyMoneyFile::instance()->securityList();
TQValueList<MyMoneySecurity>::ConstIterator it;
if(m_showCurrencyButton->isChecked()) {
list += MyMoneyFile::instance()->currencyList();
}
for(it = list.begin(); it != list.end(); ++it) {
TDEListViewItem* newItem = new TDEListViewItem(m_listView, TQString((*it).id()));
fillItem(newItem, *it);
}
slotUpdateButtons();
}
void KSecurityListEditor::fillItem(TQListViewItem* item, const MyMoneySecurity& security)
{
TQString market = security.tradingMarket();
MyMoneySecurity tradingCurrency;
if(security.isCurrency())
market = CURRENCY_MARKET;
else
tradingCurrency = MyMoneyFile::instance()->security(security.tradingCurrency());
item->setText(TYPE_COL, KMyMoneyUtils::securityTypeToString(security.securityType()));
item->setText(NAME_COL, security.name());
item->setText(SYMBOL_COL, security.tradingSymbol());
item->setText(MARKET_COL, market);
item->setText(CURR_COL, tradingCurrency.tradingSymbol());
item->setText(ACCFRACT_COL, TQString::number(security.smallestAccountFraction()));
// smallestCashFraction is only applicable for currencies
if(security.isCurrency())
item->setText(CASHFRACT_COL, TQString::number(security.smallestCashFraction()));
}
void KSecurityListEditor::slotUpdateButtons(void)
{
TQListViewItem* item = m_listView->selectedItem();
if(item) {
MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
m_editButton->setEnabled(item->text(MARKET_COL) != CURRENCY_MARKET);
m_deleteButton->setEnabled(!MyMoneyFile::instance()->isReferenced(security));
} else {
m_editButton->setEnabled(false);
m_deleteButton->setEnabled(false);
}
}
void KSecurityListEditor::slotEditSecurity(void)
{
TQListViewItem* item = m_listView->selectedItem();
if(item) {
MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
KNewInvestmentWizard dlg(security, this, "KNewInvestmentWizard");
if(dlg.exec() == TQDialog::Accepted) {
dlg.createObjects(TQString());
security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
fillItem(item, security);
}
}
}
void KSecurityListEditor::slotDeleteSecurity(void)
{
TQListViewItem* item = m_listView->selectedItem();
if(item) {
MyMoneySecurity security = MyMoneyFile::instance()->security(item->text(ID_COL).latin1());
TQString msg;
TQString dontAsk;
if(security.isCurrency()) {
msg = TQString("<p>") + i18n("Do you really want to remove the currency <b>%1</b> from the file?</p><i>Note: It is currently not supported to add currencies.</i>").arg(security.name());
dontAsk = "DeleteCurrency";
} else {
msg = TQString("<p>") + i18n("Do you really want to remove the %1 <b>%2</b> from the file?").arg(KMyMoneyUtils::securityTypeToString(security.securityType())).arg(security.name());
dontAsk = "DeleteSecurity";
}
if(KMessageBox::questionYesNo(this, msg, i18n("Delete security"), KStdGuiItem::yes(), KStdGuiItem::no(), dontAsk) == KMessageBox::Yes) {
MyMoneyFileTransaction ft;
try {
if(security.isCurrency())
MyMoneyFile::instance()->removeCurrency(security);
else
MyMoneyFile::instance()->removeSecurity(security);
ft.commit();
slotLoadList();
} catch(MyMoneyException *e) {
delete e;
}
}
}
}
// Make sure, that these definitions are only used within this file
// this does not seem to be necessary, but when building RPMs the
// build option 'final' is used and all CPP files are concatenated.
// So it could well be, that in another CPP file these definitions
// are also used.
#undef ID_COL
#undef TYPE_COL
#undef NAME_COL
#undef SYMBOL_COL
#undef MARKET_COL
#undef CURR_COL
#undef ACCFRACT_COL
#undef CASHFRACT_COL
#include "ksecuritylisteditor.moc"