diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
commit | dadc34655c3ab961b0b0b94a10eaaba710f0b5e8 (patch) | |
tree | 99e72842fe687baea16376a147619b6048d7e441 /kmymoney2/views/kreportsview.cpp | |
download | kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.tar.gz kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.zip |
Added kmymoney
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmymoney2/views/kreportsview.cpp')
-rwxr-xr-x | kmymoney2/views/kreportsview.cpp | 1510 |
1 files changed, 1510 insertions, 0 deletions
diff --git a/kmymoney2/views/kreportsview.cpp b/kmymoney2/views/kreportsview.cpp new file mode 100755 index 0000000..6c7da52 --- /dev/null +++ b/kmymoney2/views/kreportsview.cpp @@ -0,0 +1,1510 @@ +/*************************************************************************** + kreportsview.cpp - description + ------------------- + begin : Sat Mar 27 2004 + copyright : (C) 2000-2004 by Michael Edwardes + email : [email protected] + Javier Campos Morales <[email protected]> + Felix Rodriguez <[email protected]> + John C <[email protected]> + Thomas Baumgart <[email protected]> + Kevin Tambascio <[email protected]> + Ace Jones <[email protected]> + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "kdecompat.h" + +// ---------------------------------------------------------------------------- +// QT Includes + +#include <qlayout.h> +#include <qdatetime.h> +#include <qregexp.h> +#include <qdragobject.h> +#include <qclipboard.h> +#include <qapplication.h> +#include <qprinter.h> +#include <qpainter.h> +#include <qfile.h> +#include <qtimer.h> +#include <qiconset.h> +#include <qpopupmenu.h> +#include <qpushbutton.h> +#include <qtooltip.h> +#include <qcheckbox.h> +#include <qvbox.h> +// ---------------------------------------------------------------------------- +// KDE Includes + +#include <kglobal.h> +#include <kglobalsettings.h> +#include <klocale.h> +#include <kstandarddirs.h> +#include <khtmlview.h> +#include <kconfig.h> +#include <kdebug.h> +#include <kfiledialog.h> +#include <kmessagebox.h> +#include <klistview.h> +#include <kmessagebox.h> + +// ---------------------------------------------------------------------------- +// Project Includes + +#include <kmymoney/mymoneyfile.h> +#include <kmymoney/mymoneyreport.h> +#include <kmymoney/kmymoneyglobalsettings.h> + +#include "kreportsview.h" +#include "../reports/querytable.h" +#include "../reports/objectinfotable.h" +#include "../dialogs/kreportconfigurationfilterdlg.h" +#include "../kmymoneyutils.h" + +using namespace reports; + +#define VIEW_LEDGER "ledger" +#define VIEW_SCHEDULE "schedule" +#define VIEW_WELCOME "welcome" +#define VIEW_HOME "home" +#define VIEW_REPORTS "reports" + +/** + * KReportsView::KReportTab Implementation + */ + +KReportsView::KReportTab::KReportTab(KTabWidget* parent, const MyMoneyReport& report ): + QWidget( parent, "reporttab" ), + m_part( new KHTMLPart( this, "reporttabpart" ) ), + m_chartView( new KReportChartView( this, "reportchart" ) ), + m_control( new kMyMoneyReportControlDecl( this, "reportcontrol" ) ), + m_layout( new QVBoxLayout( this, 11, 6, "reporttablayout" ) ), + m_report( report ), + m_deleteMe( false ), + m_showingChart( false ), + m_needReload( true ), + m_table(0) +{ + m_part->setZoomFactor( KMyMoneyGlobalSettings::fontSizePercentage() ); + + if ( ! KReportChartView::implemented() || m_report.reportType() != MyMoneyReport::ePivotTable ) + { + m_control->buttonChart->hide(); + } + + m_chartView->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); + m_chartView->hide(); + m_layout->addWidget( m_control ); //, 0, Qt::AlignTop ); + m_layout->addWidget( m_part->view() ); + m_layout->addWidget( m_chartView ); + + // I like this icon... + QString icon = KGlobal::dirs()->findResource("icon", "default.kde/16x16/mimetypes/spreadsheet.png"); + // but if it's not there, we'll use ye ol' standard icon + if ( icon == QString::null ) + icon = KGlobal::dirs()->findResource("icon", "hicolor/16x16/apps/kmymoney2.png"); + + parent->insertTab( this, QIconSet(QPixmap(icon)), report.name() ); + parent->setTabEnabled( this, true ); + +#ifdef HAVE_KDCHART + if ( m_report.isChartByDefault() ) + toggleChart(); +#endif +} + +KReportsView::KReportTab::~KReportTab() +{ + delete m_table; +} + +void KReportsView::KReportTab::print(void) +{ + if(m_part && m_part->view()) + m_part->view()->print(); +} + +void KReportsView::KReportTab::copyToClipboard(void) +{ + QTextDrag* pdrag = new QTextDrag( createTable() ); + pdrag->setSubtype("html"); + QApplication::clipboard()->setData(pdrag); +} + +void KReportsView::KReportTab::saveAs( const QString& filename, bool includeCSS ) +{ + QFile file( filename ); + if ( file.open( IO_WriteOnly ) ) + { + if ( QFileInfo(filename).extension(false).lower() == "csv") + { + QTextStream(&file) << m_table->renderCSV(); + } + else { + QTextStream stream(&file); + + QRegExp exp(QString("(.*)(<link.*css\" href=)\"(.*)\">(<meta.*%1\" />)(.*)").arg(KGlobal::locale()->encoding())); + QString table = createTable(); + if(exp.search(table) != -1 && includeCSS) { + QFile cssFile(exp.cap(3)); + if(cssFile.open(IO_ReadOnly)) { + QTextStream cssStream(&cssFile); + stream << exp.cap(1); + stream << exp.cap(4); + stream << endl << "<style type=\"text/css\">" << endl << "<!--" << endl; + stream << cssStream.read(); + stream << "-->" << endl << "</style>" << endl; + stream << exp.cap(5); + cssFile.close(); + } else { + stream << table; + } + } else { + stream << table; + } + } + file.close(); + } +} + +void KReportsView::KReportTab::loadTab(void) +{ + m_needReload = true; + if(isVisible()) { + m_needReload = false; + updateReport(); + } +} + +void KReportsView::KReportTab::show(void) +{ + if(m_needReload) { + m_needReload = false; + updateReport(); + } + QWidget::show(); +} + +void KReportsView::KReportTab::updateReport(void) +{ + // reload the report from the engine. It might have + // been changed by the user + + try { + // Don't try to reload default reports from the engine + if(!m_report.id().isEmpty()) + m_report = MyMoneyFile::instance()->report(m_report.id()); + } catch(MyMoneyException* e) { + delete e; + } + + delete m_table; + m_table = 0; + + if ( m_report.reportType() == MyMoneyReport::ePivotTable ) { + m_table = new PivotTable(m_report); + } else if ( m_report.reportType() == MyMoneyReport::eQueryTable ) { + m_table = new QueryTable(m_report); + } else if ( m_report.reportType() == MyMoneyReport::eInfoTable ) { + m_table = new ObjectInfoTable(m_report); + } + + m_part->begin(); + m_part->write(createTable()); + m_part->end(); + + m_table->drawChart( *m_chartView ); + m_chartView->update(); +} + +QString KReportsView::KReportTab::createTable(const QString& links) +{ + QString filename; + if(!MyMoneyFile::instance()->value("reportstylesheet").isEmpty()) + filename = KGlobal::dirs()->findResource("appdata", QString("html/%1").arg(MyMoneyFile::instance()->value("reportstylesheet"))); + if(filename.isEmpty()) + filename = KGlobal::dirs()->findResource("appdata", "html/kmymoney2.css"); + QString header = QString("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n") + + QString("<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"%1\">").arg(filename); + + header += QString("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=%1\" />").arg(KGlobal::locale()->encoding()); + header += KMyMoneyUtils::variableCSS(); + + header += "</head><body>\n"; + + QString footer = "</body></html>\n"; + + QString html; + try { + html += header; + html += links; + + html += m_table->renderHTML(); + + html += footer; + } + catch(MyMoneyException *e) + { + kdDebug(2) << "KReportsView::KReportTab::createTable(): ERROR " << e->what() << endl; + + QString error = QString(i18n("There was an error creating your report: \"%1\".\nPlease report this error to the developer's list: [email protected]")).arg(e->what()); + + KMessageBox::error(this, error, i18n("Critical Error")); + + html += header; + html += links; + html += "<h1>"+i18n("Unable to generate report")+"</h1><p>"+error+"</p>"; + html += footer; + + delete e; + } + return html; + +} + +void KReportsView::KReportTab::toggleChart(void) +{ + // for now it will just SHOW the chart. In the future it actually has to toggle it. + + if ( m_showingChart ) + { + m_part->show(); + m_chartView->hide(); + + m_control->buttonChart->setText( i18n( "Chart" ) ); + QToolTip::add( m_control->buttonChart, i18n( "Show the chart version of this report" ) ); + } + else + { + m_part->hide(); + m_chartView->show(); + + m_control->buttonChart->setText( i18n( "Report" ) ); + QToolTip::add( m_control->buttonChart, i18n( "Show the report version of this chart" ) ); + } + m_showingChart = ! m_showingChart; +} + +/** + * KReportsView Implementation + */ + +class KReportsView::Private +{ +public: + Private() : + includeCSS(0) {} + + QCheckBox* includeCSS; +}; + +KReportsView::KReportsView(QWidget *parent, const char *name ) : + KMyMoneyViewBase(parent, name, i18n("Reports")), + d(new Private), + m_needReload(false) +{ + m_reportTabWidget = new KTabWidget( this, "m_reportTabWidget" ); + addWidget( m_reportTabWidget ); + m_reportTabWidget->setHoverCloseButton( true ); + + m_listTab = (new QWidget( m_reportTabWidget, "indextab" )); + m_listTabLayout = ( new QVBoxLayout( m_listTab, 11, 6, "indextabLayout") ); + m_reportListView = new KListView( m_listTab, "m_reportListView" ); + m_listTabLayout->addWidget( m_reportListView ); + m_reportTabWidget->insertTab( m_listTab, i18n("Reports") ); + + m_reportListView->addColumn(i18n("Report")); + m_reportListView->addColumn(i18n("Comment")); + m_reportListView->setResizeMode(QListView::AllColumns); + m_reportListView->setAllColumnsShowFocus(true); + m_reportListView->setRootIsDecorated(true); + m_reportListView->setShadeSortColumn(false); + + connect( m_reportTabWidget, SIGNAL(closeRequest(QWidget*)), + this, SLOT(slotClose(QWidget*)) ); + connect(m_reportListView, SIGNAL(doubleClicked(QListViewItem*)), + this, SLOT(slotOpenReport(QListViewItem*))); + connect(m_reportListView, SIGNAL(returnPressed(QListViewItem*)), + this, SLOT(slotOpenReport(QListViewItem*))); + connect( m_reportListView, SIGNAL(contextMenu(KListView*,QListViewItem*,const QPoint &)), + this, SLOT(slotListContextMenu(KListView*,QListViewItem*,const QPoint &))); + + connect(MyMoneyFile::instance(), SIGNAL(dataChanged()), this, SLOT(slotLoadView())); +} + +KReportsView::~KReportsView() +{ + delete d; +} + +void KReportsView::show() +{ + if(m_needReload) { + loadView(); + m_needReload = false; + } + + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + if(tab) + emit reportSelected(tab->report()); + else + emit reportSelected(MyMoneyReport()); + + // don't forget base class implementation + KMyMoneyViewBase::show(); +} + +void KReportsView::slotLoadView(void) +{ + m_needReload = true; + if(isVisible()) { + loadView(); + m_needReload = false; + } +} + +QString KReportsView::KReportGroupListItem::key ( int column, bool ascending ) const +{ + if (column == 0) + return QString::number(m_nr).rightJustify(3,'0'); + else + return KListViewItem::key(column,ascending); +} + +KReportsView::KReportGroupListItem::KReportGroupListItem(KListView* parent, const int nr, QString name) : + KListViewItem(parent), + m_name(name) +{ + setNr(nr); +} + +void KReportsView::KReportGroupListItem::setNr(const int nr) +{ + m_nr = nr; + setText(0, QString("%1. %2").arg(nr).arg(m_name)); +} + +void KReportsView::loadView(void) +{ + ::timetrace("Start KReportsView::loadView"); + + // remember the id of the current selected item and the + // items that are shown 'expanded' + QMap<QString, bool> isOpen; + QListViewItem *item = m_reportListView->selectedItem(); + QString selectedPage = (item) ? item->text(0) : QString(); + + // keep a map of all 'expanded' accounts + QListViewItemIterator it_lvi(m_reportListView); + while(it_lvi.current()) { + item = it_lvi.current(); + if(item && item->isOpen()) { + isOpen[item->text(0)] = true; + } + ++it_lvi; + } + + // remember the upper left corner of the viewport + QPoint startPoint = m_reportListView->viewportToContents(QPoint(0, 0)); + + // turn off updates to avoid flickering during reload + m_reportListView->setUpdatesEnabled(false); + + // + // Rebuild the list page + // + m_reportListView->clear(); + unsigned pagenumber = 1; + + // Default Reports + KReportGroupListItem* chartnode = new KReportGroupListItem(m_reportListView, 10, i18n("Charts")); + + QMap<QString,KReportGroupListItem*> groupitems; + QValueList<ReportGroup> defaultreports; + defaultReports(defaultreports); + QValueList<ReportGroup>::const_iterator it_group = defaultreports.begin(); + while ( it_group != defaultreports.end() ) + { + QString groupname = (*it_group).name(); + KReportGroupListItem* curnode = new KReportGroupListItem(m_reportListView, pagenumber++, (*it_group).title()); + curnode->setOpen(isOpen.find(curnode->text(0)) != isOpen.end()); + groupitems[groupname] = curnode; + + QValueList<MyMoneyReport>::const_iterator it_report = (*it_group).begin(); + while( it_report != (*it_group).end() ) + { + MyMoneyReport report = *it_report; + report.setGroup(groupname); + KReportListItem* r = new KReportListItem( curnode, report ); + if(report.name() == selectedPage) + m_reportListView->setSelected(r, true); + + // ALSO place it into the Charts list if it's displayed as a chart by default + if ( (*it_report).isChartByDefault() ) + new KReportListItem( chartnode, *it_report ); + + ++it_report; + } + + ++it_group; + } + + // Rename the charts item to place it at this point in the list. + chartnode->setNr(pagenumber++); + chartnode->setOpen(isOpen.find(chartnode->text(0)) != isOpen.end()); + + // Custom reports + + KReportGroupListItem* favoritenode = new KReportGroupListItem(m_reportListView,pagenumber++, i18n("Favorite Reports")); + favoritenode->setOpen(isOpen.find(favoritenode->text(0)) != isOpen.end()); + KReportGroupListItem* orphannode = NULL; + + QValueList<MyMoneyReport> customreports = MyMoneyFile::instance()->reportList(); + QValueList<MyMoneyReport>::const_iterator it_report = customreports.begin(); + while( it_report != customreports.end() ) + { + // If this report is in a known group, place it there + KReportGroupListItem* groupnode = groupitems[(*it_report).group()]; + if ( groupnode ) + new KReportListItem( groupnode, *it_report ); + else + // otherwise, place it in the orphanage + { + if ( ! orphannode ) + orphannode = new KReportGroupListItem(m_reportListView, pagenumber++, i18n("Old Customized Reports")); + new KReportListItem( orphannode, *it_report ); + } + + // ALSO place it into the Favorites list if it's a favorite + if ( (*it_report).isFavorite() ) + new KReportListItem( favoritenode, *it_report ); + + // ALSO place it into the Charts list if it's displayed as a chart by default + if ( (*it_report).isChartByDefault() ) + new KReportListItem( chartnode, *it_report ); + + ++it_report; + } + + // reposition viewport + m_reportListView->setContentsPos(startPoint.x(), startPoint.y()); + + // turn updates back on + m_reportListView->setUpdatesEnabled(true); + m_reportListView->repaintContents(); + + // + // Go through the tabs to set their update flag or delete them if needed + // + + int index = 1; + while ( index < m_reportTabWidget->count() ) + { + // TODO: Find some way of detecting the file is closed and kill these tabs!! + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index)); + if ( tab->isReadyToDelete() /* || ! reports.count() */ ) + { + delete tab; + --index; + } + else + tab->loadTab(); + ++index; + } + ::timetrace("Done KReportsView::loadView"); +} + +void KReportsView::slotOpenURL(const KURL &url, const KParts::URLArgs& /* args */) +{ + QString view = url.fileName(false); + QString command = url.queryItem("command").data(); + + if(view == VIEW_REPORTS) { + + if ( command.isEmpty() ) { + // slotRefreshView(); + } else if ( command == "print" ) + slotPrintView(); + else if ( command == "copy" ) + slotCopyView(); + else if ( command == "save" ) + slotSaveView(); + else if ( command == "configure" ) + slotConfigure(); + else if ( command == "duplicate" ) + slotDuplicate(); + else if ( command == "close" ) + slotCloseCurrent(); + else if ( command == "delete" ) + slotDelete(); + else + qDebug("Unknown command '%s' in KReportsView::slotOpenURL()", static_cast<const char*>(command)); + + } else { + qDebug("Unknown view '%s' in KReportsView::slotOpenURL()", view.latin1()); + } +} + +void KReportsView::slotPrintView(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + if(tab) + tab->print(); +} + +void KReportsView::slotCopyView(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + if(tab) + tab->copyToClipboard(); +} + +void KReportsView::slotSaveView(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + if(tab) { + QVBox* vbox = new QVBox(); + d->includeCSS = new QCheckBox(i18n("Include Stylesheet"), vbox); + + // the following code is copied from KFileDialog::getSaveFileName, + // adjust to our local needs (filetypes etc.) and + // enhanced to show the m_saveEncrypted combo box + KFileDialog dlg( ":kmymoney-export", + QString("%1|%2\n").arg("*.csv").arg(i18n("CSV (Filefilter)", "CSV files")) + + QString("%1|%2\n").arg("*.html").arg(i18n("HTML (Filefilter)", "HTML files")), + this, "filedialog", true, vbox); + connect(&dlg, SIGNAL(filterChanged(const QString&)), this, SLOT(slotSaveFilterChanged(const QString&))); + + dlg.setOperationMode( KFileDialog::Saving ); + dlg.setCaption(i18n("Export as")); + slotSaveFilterChanged("*.csv"); // init gui + + if(dlg.exec() == QDialog::Accepted) { + KURL newURL = dlg.selectedURL(); + if (!newURL.isEmpty()) { + QString newName = newURL.prettyURL(0, KURL::StripFileProtocol); + + if(newName.findRev('.') == -1) + newName.append(".html"); + + tab->saveAs( newName, d->includeCSS->isEnabled() && d->includeCSS->isChecked() ); + } + } + } +} + +void KReportsView::slotSaveFilterChanged(const QString& filter) +{ + d->includeCSS->setEnabled(filter == "*.html"); +} + +void KReportsView::slotConfigure(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + + if(tab) { + MyMoneyReport report = tab->report(); + if ( report.comment() == i18n("Default Report") || report.comment() == i18n("Generated Report") ) + { + report.setComment( i18n("Custom Report") ); + report.setName( report.name() + i18n(" (Customized)") ); + } + + KReportConfigurationFilterDlg dlg(report); + + if (dlg.exec()) + { + MyMoneyReport newreport = dlg.getConfig(); + + // If this report has an ID, then MODIFY it, otherwise ADD it + MyMoneyFileTransaction ft; + if ( ! newreport.id().isEmpty() ) + { + MyMoneyFile::instance()->modifyReport(newreport); + ft.commit(); + tab->modifyReport(newreport); + + m_reportTabWidget->changeTab( tab, newreport.name() ); + m_reportTabWidget->showPage(tab); + } + else + { + MyMoneyFile::instance()->addReport(newreport); + ft.commit(); + new KReportListItem( m_reportListView, newreport ); + addReportTab(newreport); + } + } + } +} + +void KReportsView::slotDuplicate(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + + if(tab) { + MyMoneyReport dupe = tab->report(); + dupe.setName( QString(i18n("Copy of %1")).arg(dupe.name()) ); + if ( dupe.comment() == i18n("Default Report") ) + dupe.setComment( i18n("Custom Report") ); + dupe.clearId(); + + KReportConfigurationFilterDlg dlg(dupe); + if (dlg.exec()) + { + dupe = dlg.getConfig(); + MyMoneyFileTransaction ft; + try { + MyMoneyFile::instance()->addReport(dupe); + ft.commit(); + new KReportListItem( m_reportListView, dupe ); + addReportTab(dupe); + } catch(MyMoneyException* e) { + qDebug("Cannot add report"); + delete e; + } + } + } +} + +void KReportsView::slotDelete(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + + if(tab) { + MyMoneyReport report = tab->report(); + if ( ! report.id().isEmpty() ) + { + if ( KMessageBox::Continue == KMessageBox::warningContinueCancel(this, QString("<qt>")+i18n("Are you sure you want to delete report <b>%1</b>? There is no way to recover it!").arg(report.name())+QString("</qt>"), i18n("Delete Report?"))) + { + // close the tab and then remove the report so that it is not + // generated again during the following loadView() call + slotClose(tab); + + MyMoneyFileTransaction ft; + MyMoneyFile::instance()->removeReport(report); + ft.commit(); + } + } + else + KMessageBox::information(this, QString("<qt>")+i18n("Sorry, <b>%1</b> is a default report. You may not delete it.").arg(report.name())+QString("</qt>"), i18n("Delete Report?")); + } +} + +void KReportsView::slotOpenReport(const QString& id) +{ + if ( ! id.isEmpty() ) + { + KReportTab* page = NULL; + int index = 1; + while ( index < m_reportTabWidget->count() ) + { + KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index)); + + if ( current->report().id() == id ) + { + page = current; + break; + } + + ++index; + } + + // Show the tab, or create a new one, as needed + if ( page ) + m_reportTabWidget->showPage( page ); + else + addReportTab(MyMoneyFile::instance()->report(id)); + } +} + +void KReportsView::slotOpenReport(QListViewItem* item) +{ + KReportListItem *reportItem = dynamic_cast<KReportListItem*> (item); + + if ( reportItem ) + { + KReportTab* page = NULL; + + // Find the tab which contains the report indicated by this list item + int index = 1; + while ( index < m_reportTabWidget->count() ) + { + KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index)); + + // If this report has an ID, we'll use the ID to match + if ( ! reportItem->report().id().isEmpty() ) + { + if ( current->report().id() == reportItem->report().id() ) + { + page = current; + break; + } + } + // Otherwise, use the name to match. THIS ASSUMES that no 2 default reports + // have the same name...but that would be pretty a boneheaded thing to do. + else + { + if ( current->report().name() == reportItem->report().name() ) + { + page = current; + break; + } + } + + ++index; + } + + // Show the tab, or create a new one, as needed + if ( page ) + m_reportTabWidget->showPage( page ); + else + addReportTab(reportItem->report()); + } + else if (item) + { + // this is not a KReportListItem, so it's a regular QListViewItem, which + // means its a header. + // + // double-click on a header means toggle the expand/collapse state + + item->setOpen( ! item->isOpen() ); + } +} + +void KReportsView::slotOpenReport(const MyMoneyReport& report) +{ + kdDebug(2) << __func__ << " " << report.name() << endl; + KReportTab* page = NULL; + + // Find the tab which contains the report indicated by this list item + int index = 1; + while ( index < m_reportTabWidget->count() ) + { + KReportTab* current = dynamic_cast<KReportTab*>(m_reportTabWidget->page(index)); + + if ( current->report().name() == report.name() ) + { + page = current; + break; + } + + ++index; + } + + // Show the tab, or create a new one, as needed + if ( page ) + m_reportTabWidget->showPage( page ); + else + addReportTab(report); +} + +void KReportsView::slotToggleChart(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->currentPage()); + if(tab) + tab->toggleChart(); +} + +void KReportsView::slotCloseCurrent(void) +{ + if(m_reportTabWidget->currentPage()) + slotClose(m_reportTabWidget->currentPage()); +} + +void KReportsView::slotClose(QWidget* w) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(w); + if(tab) { + m_reportTabWidget->removePage(tab); + tab->setReadyToDelete(true); + } +} + +void KReportsView::slotCloseAll(void) +{ + KReportTab* tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(1)); + while (tab) + { + m_reportTabWidget->removePage(tab); + tab->setReadyToDelete(true); + + tab = dynamic_cast<KReportTab*>(m_reportTabWidget->page(1)); + } +} + +void KReportsView::addReportTab(const MyMoneyReport& report) +{ + KReportTab* tab = new KReportTab(m_reportTabWidget,report); + + connect( tab->control()->buttonChart, SIGNAL(clicked()), + this, SLOT(slotToggleChart(void ))); + connect( tab->control()->buttonConfigure, SIGNAL(clicked()), + this, SLOT(slotConfigure(void ))); + connect( tab->control()->buttonNew, SIGNAL(clicked()), + this, SLOT(slotDuplicate(void ))); + connect( tab->control()->buttonCopy, SIGNAL(clicked()), + this, SLOT(slotCopyView(void ))); + connect( tab->control()->buttonExport, SIGNAL(clicked()), + this, SLOT(slotSaveView(void ))); + connect( tab->control()->buttonDelete, SIGNAL(clicked()), + this, SLOT(slotDelete(void ))); + connect( tab->control()->buttonClose, SIGNAL(clicked()), + this, SLOT(slotCloseCurrent(void ))); + + // if this is a default report, then you can't delete it! + if ( report.id().isEmpty() ) + tab->control()->buttonDelete->setEnabled(false); + + // slotRefreshView(); + + m_reportTabWidget->showPage(tab); + +} + +void KReportsView::slotListContextMenu(KListView* lv,QListViewItem* item,const QPoint & p) +{ + if ( lv == m_reportListView && item ) + { + QPopupMenu* contextmenu = new QPopupMenu(this); + contextmenu->insertItem( i18n("&Open"), this, SLOT(slotOpenFromList()) ); + contextmenu->insertItem( i18n("&Configure"), this, SLOT(slotConfigureFromList()) ); + contextmenu->insertItem( i18n("&New report"), this, SLOT(slotNewFromList()) ); + contextmenu->insertItem( i18n("&Delete"), this, SLOT(slotDeleteFromList()) ); + + contextmenu->popup(p); + } +} + +void KReportsView::slotOpenFromList(void) +{ + KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem()); + + if ( reportItem ) + slotOpenReport(reportItem); +} + +void KReportsView::slotConfigureFromList(void) +{ + KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem()); + + if ( reportItem ) + { + slotOpenReport(reportItem); + slotConfigure(); + } +} +void KReportsView::slotNewFromList(void) +{ + KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem()); + + if ( reportItem ) + { + slotOpenReport(reportItem); + slotDuplicate(); + } +} + +void KReportsView::slotDeleteFromList(void) +{ + KReportListItem *reportItem = dynamic_cast<KReportListItem*> (m_reportListView->selectedItem()); + + if ( reportItem ) + { + slotOpenReport(reportItem); + slotDelete(); + } +} + +void KReportsView::defaultReports(QValueList<ReportGroup>& groups) +{ + { + ReportGroup list("Income and Expenses", i18n("Income and Expenses")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eExpenseIncome, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentMonth, + MyMoneyReport::eDetailAll, + i18n("Income and Expenses This Month"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eExpenseIncome, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Income and Expenses This Year"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eExpenseIncome, + MyMoneyReport::eYears, + MyMoneyTransactionFilter::allDates, + MyMoneyReport::eDetailAll, + i18n("Income and Expenses By Year"), + i18n("Default Report") + )); + +#ifdef HAVE_KDCHART + list.push_back(MyMoneyReport( + MyMoneyReport::eExpenseIncome, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailTop, + i18n("Income and Expenses Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setChartDataLabels(false); + + list.push_back(MyMoneyReport( + MyMoneyReport::eExpenseIncome, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailGroup, + i18n("Income and Expenses Pie Chart"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartType(MyMoneyReport::eChartPie); + list.back().setShowingRowTotals(false); +#endif + + groups.push_back(list); + } + { + ReportGroup list("Net Worth", i18n("Net Worth")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailTop, + i18n("Net Worth By Month"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::today, + MyMoneyReport::eDetailTop, + i18n("Net Worth Today"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eYears, + MyMoneyTransactionFilter::allDates, + MyMoneyReport::eDetailTop, + i18n("Net Worth By Year"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::next7Days, + MyMoneyReport::eDetailTop, + i18n("7-day Cash Flow Forecast"), + i18n("Default Report") + )); + list.back().setIncludingSchedules( true ); + list.back().setColumnsAreDays( true ); + +#ifdef HAVE_KDCHART + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last12Months, + MyMoneyReport::eDetailTotal, + i18n("Net Worth Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + + list.push_back(MyMoneyReport( + MyMoneyReport::eInstitution, + MyMoneyReport::eQCnone, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailTop, + i18n("Account Balances by Institution"), + i18n("Default Report") + )); +#endif + + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountType, + MyMoneyReport::eQCnone, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailTop, + i18n("Account Balances by Type"), + i18n("Default Report") + )); + + groups.push_back(list); + } + { + ReportGroup list("Transactions", i18n("Transactions")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAccount, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory|MyMoneyReport::eQCbalance, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Transactions by Account"), + i18n("Default Report") + )); + //list.back().setConvertCurrency(false); + list.push_back(MyMoneyReport( + MyMoneyReport::eCategory, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Transactions by Category"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::ePayee, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Transactions by Payee"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eMonth, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Transactions by Month"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eWeek, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Transactions by Week"), + i18n("Default Report") + )); + list.push_back(MyMoneyReport( + MyMoneyReport::eAccount, + MyMoneyReport::eQCloan, + MyMoneyTransactionFilter::allDates, + MyMoneyReport::eDetailAll, + i18n("Loan Transactions"), + i18n("Default Report") + )); + list.back().setLoansOnly(true); + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountReconcile, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCcategory|MyMoneyReport::eQCbalance, + MyMoneyTransactionFilter::last3Months, + MyMoneyReport::eDetailAll, + i18n("Transactions by Reconciliation Status"), + i18n("Default Report") + )); + groups.push_back(list); + } + { + ReportGroup list("CashFlow", i18n("Cash Flow")); + list.push_back(MyMoneyReport( + MyMoneyReport::eCashFlow, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Cash Flow Transactions This Month"), + i18n("Default Report") + )); + groups.push_back(list); + } + { + ReportGroup list("Investments", i18n("Investments")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eTopAccount, + MyMoneyReport::eQCaction|MyMoneyReport::eQCshares|MyMoneyReport::eQCprice, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Investment Transactions"), + i18n("Default Report") + )); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountByTopAccount, + MyMoneyReport::eQCshares|MyMoneyReport::eQCprice, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Investment Holdings by Account"), + i18n("Default Report") + )); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eEquityType, + MyMoneyReport::eQCshares|MyMoneyReport::eQCprice, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Investment Holdings by Type"), + i18n("Default Report") + )); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountByTopAccount, + MyMoneyReport::eQCperformance, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Investment Performance by Account"), + i18n("Default Report") + )); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eEquityType, + MyMoneyReport::eQCperformance, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Investment Performance by Type"), + i18n("Default Report") + )); + list.back().setInvestmentsOnly(true); +#ifdef HAVE_KDCHART + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::today, + MyMoneyReport::eDetailAll, + i18n("Investment Holdings Pie"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartPie); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last12Months, + MyMoneyReport::eDetailAll, + i18n("Investment Worth Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setColumnsAreDays( true ); + list.back().setInvestmentsOnly(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last12Months, + MyMoneyReport::eDetailAll, + i18n("Investment Price Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setColumnsAreDays( true ); + list.back().setInvestmentsOnly(true); + list.back().setIncludingBudgetActuals(false); + list.back().setIncludingPrice(true); + list.back().setConvertCurrency(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last12Months, + MyMoneyReport::eDetailAll, + i18n("Investment Moving Average Price Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setColumnsAreDays( true ); + list.back().setInvestmentsOnly(true); + list.back().setIncludingBudgetActuals(false); + list.back().setIncludingAveragePrice(true); + list.back().setMovingAverageDays(10); + list.back().setConvertCurrency(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last30Days, + MyMoneyReport::eDetailAll, + i18n("Investment Moving Average"), + i18n("Default Report") + )); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setColumnsAreDays( true ); + list.back().setInvestmentsOnly(true); + list.back().setIncludingBudgetActuals(false); + list.back().setIncludingMovingAverage(true); + list.back().setMovingAverageDays(10); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::last30Days, + MyMoneyReport::eDetailAll, + i18n("Investment Moving Average vs Actual"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); + list.back().setColumnsAreDays( true ); + list.back().setInvestmentsOnly(true); + list.back().setIncludingBudgetActuals(true); + list.back().setIncludingMovingAverage(true); + list.back().setMovingAverageDays(10); +#endif + groups.push_back(list); + } + { + ReportGroup list("Taxes", i18n("Taxes")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eCategory, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Tax Transactions by Category"), + i18n("Default Report") + )); + list.back().setTax(true); + list.push_back(MyMoneyReport( + MyMoneyReport::ePayee, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Tax Transactions by Payee"), + i18n("Default Report") + )); + list.back().setTax(true); + list.push_back(MyMoneyReport( + MyMoneyReport::eCategory, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCpayee|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::lastFiscalYear, + MyMoneyReport::eDetailAll, + i18n("Tax Transactions by Category Last Fiscal Year"), + i18n("Default Report") + )); + list.back().setTax(true); + list.push_back(MyMoneyReport( + MyMoneyReport::ePayee, + MyMoneyReport::eQCnumber|MyMoneyReport::eQCcategory|MyMoneyReport::eQCaccount, + MyMoneyTransactionFilter::lastFiscalYear, + MyMoneyReport::eDetailAll, + i18n("Tax Transactions by Payee Last Fiscal Year"), + i18n("Default Report") + )); + list.back().setTax(true); + groups.push_back(list); + } + { + ReportGroup list("Budgeting", i18n("Budgeting")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudgetActual, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToDate, + MyMoneyReport::eDetailAll, + i18n("Budgeted vs. Actual This Year"), + i18n("Default Report") + )); + list.back().setShowingRowTotals(true); + list.back().setBudget("Any",true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudgetActual, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::yearToMonth, + MyMoneyReport::eDetailAll, + i18n("Budgeted vs. Actual This Year (YTM)"), + i18n("Default Report") + )); + list.back().setShowingRowTotals(true); + list.back().setBudget("Any",true); + // in case we're in January, we show the last year + if(QDate::currentDate().month() == 1) { + list.back().setDateFilter(MyMoneyTransactionFilter::lastYear); + } + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudgetActual, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentMonth, + MyMoneyReport::eDetailAll, + i18n("Monthly Budgeted vs. Actual"), + i18n("Default Report") + )); + list.back().setBudget("Any",true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudgetActual, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentYear, + MyMoneyReport::eDetailAll, + i18n("Yearly Budgeted vs. Actual"), + i18n("Default Report") + )); + list.back().setBudget("Any",true); + list.back().setShowingRowTotals(true); + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudget, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentMonth, + MyMoneyReport::eDetailAll, + i18n("Monthly Budget"), + i18n("Default Report") + )); + list.back().setBudget("Any",false); + + list.push_back(MyMoneyReport( + MyMoneyReport::eBudget, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentYear, + MyMoneyReport::eDetailAll, + i18n("Yearly Budget"), + i18n("Default Report") + )); + list.back().setBudget("Any",false); + list.back().setShowingRowTotals(true); +#ifdef HAVE_KDCHART + list.push_back(MyMoneyReport( + MyMoneyReport::eBudgetActual, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::currentYear, + MyMoneyReport::eDetailGroup, + i18n("Yearly Budgeted vs Actual Graph"), + i18n("Default Report") + )); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setBudget("Any",true); + list.back().setChartType(MyMoneyReport::eChartLine); +#endif + + groups.push_back(list); + } + { + ReportGroup list("Forecast", i18n("Forecast")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::next12Months, + MyMoneyReport::eDetailTop, + i18n("Forecast By Month"), + i18n("Default Report") + )); + list.back().setIncludingForecast( true ); + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::nextQuarter, + MyMoneyReport::eDetailTop, + i18n("Forecast Next Quarter"), + i18n("Default Report") + )); + list.back().setColumnsAreDays( true ); + list.back().setIncludingForecast( true ); + +#ifdef HAVE_KDCHART + list.push_back(MyMoneyReport( + MyMoneyReport::eAssetLiability, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::next3Months, + MyMoneyReport::eDetailTotal, + i18n("Net Worth Forecast Graph"), + i18n("Default Report") + )); + list.back().setColumnsAreDays( true ); + list.back().setIncludingForecast( true ); + list.back().setChartByDefault(true); + list.back().setChartGridLines(false); + list.back().setChartType(MyMoneyReport::eChartLine); +#endif + groups.push_back(list); + } + { + ReportGroup list("Information", i18n("General Information")); + + list.push_back(MyMoneyReport( + MyMoneyReport::eSchedule, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::next12Months, + MyMoneyReport::eDetailAll, + i18n("Schedule Information"), + i18n("Default Report") + )); + list.back().setDetailLevel(MyMoneyReport::eDetailAll); + list.push_back(MyMoneyReport( + MyMoneyReport::eSchedule, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::next12Months, + MyMoneyReport::eDetailAll, + i18n("Schedule Summary Information"), + i18n("Default Report") + )); + list.back().setDetailLevel(MyMoneyReport::eDetailTop); + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountInfo, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::today, + MyMoneyReport::eDetailAll, + i18n("Account Information"), + i18n("Default Report") + )); + list.back().setConvertCurrency(false); + list.push_back(MyMoneyReport( + MyMoneyReport::eAccountLoanInfo, + MyMoneyReport::eMonths, + MyMoneyTransactionFilter::today, + MyMoneyReport::eDetailAll, + i18n("Loan Information"), + i18n("Default Report") + )); + list.back().setConvertCurrency(false); + groups.push_back(list); + } +} + +// 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 VIEW_LEDGER +#undef VIEW_SCHEDULE +#undef VIEW_WELCOME +#undef VIEW_HOME +#undef VIEW_REPORTS + +#include "kreportsview.moc" +// vim:cin:si:ai:et:ts=2:sw=2: |