summaryrefslogtreecommitdiffstats
path: root/kmymoney2/kmymoney2.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmymoney2/kmymoney2.h')
-rw-r--r--kmymoney2/kmymoney2.h1306
1 files changed, 1306 insertions, 0 deletions
diff --git a/kmymoney2/kmymoney2.h b/kmymoney2/kmymoney2.h
new file mode 100644
index 0000000..77d5c86
--- /dev/null
+++ b/kmymoney2/kmymoney2.h
@@ -0,0 +1,1306 @@
+/***************************************************************************
+ kmymoney2.h
+ -------------------
+ copyright : (C) 2000-2001 by Michael Edwardes
+ email : mte@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. *
+ * *
+ ***************************************************************************/
+#ifndef KMYMONEY2_H
+#define KMYMONEY2_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qapplication.h>
+class QTimer;
+class QLabel;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kapplication.h>
+#include <kmainwindow.h>
+#include <kaccel.h>
+#include <kaction.h>
+#include <kprocess.h>
+#include <kurl.h>
+#include <kfile.h>
+#include <dcopobject.h>
+class KComboBox;
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/mymoneyscheduled.h>
+#include <kmymoney/mymoneyinstitution.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneybudget.h>
+#include <kmymoney/kmymoneyplugin.h>
+#include <kmymoney/register.h>
+#include <kmymoney/kmymoneyutils.h>
+
+class QSignalMapper;
+class KProgress;
+class KMyMoneyView;
+class MyMoneyQifReader;
+class MyMoneyStatementReader;
+class MyMoneyStatement;
+class IMyMoneyStorage;
+class KFindTransactionDlg;
+class TransactionEditor;
+class KEndingBalanceDlg;
+class KPluginInfo;
+
+namespace KMyMoneyPlugin { class ImporterPlugin; }
+
+/*! \mainpage KMyMoney Main Page for API documentation.
+ *
+ * \section intro Introduction
+ *
+ * This is the API documentation for KMyMoney. It should be used as a reference
+ * for KMyMoney developers and users who wish to see how KMyMoney works. This
+ * documentation will be kept up-to-date as development progresses and should be
+ * read for new features that have been developed in KMyMoney.
+ *
+ * The latest version of this document is available from the project's web-site
+ * at http://kmymoney2.sourceforge.net/ and is generated daily by doxygen reading
+ * the header files found in the CVS main branch.
+ */
+
+/**
+ * The base class for KMyMoney application windows. It sets up the main
+ * window and reads the config file as well as providing a menubar, toolbar
+ * and statusbar.
+ *
+ * @see KMyMoneyView
+ *
+ * @author Michael Edwardes 2000-2001
+ * @author Thomas Baumgart 2006-2008
+ *
+ * @short Main application class.
+ */
+class KMyMoney2App : public KMainWindow, public DCOPObject
+{
+ Q_OBJECT
+ K_DCOP
+
+protected slots:
+ void slotFileSaveAsFilterChanged(const QString& filter);
+
+ /**
+ * This slot is intended to be used as part of auto saving. This is used when the
+ * QTimer emits the timeout signal and simply checks that the file is dirty (has
+ * received modifications to it's contents), and call the apropriate method to
+ * save the file. Furthermore, re-starts the timer (possibly not needed).
+ * @author mvillarino 2005
+ * @see KMyMoney2App::slotDataChanged()
+ */
+ void slotAutoSave(void);
+
+ /**
+ * This slot re-enables all message for which the "Don't show again"
+ * option had been selected.
+ */
+ void slotEnableMessages(void);
+
+ /**
+ * Called when the user asks for file information.
+ */
+ void slotFileFileInfo(void);
+
+ void slotPerformanceTest(void);
+
+ /**
+ * Debugging only: turn on/off traces
+ */
+ void slotToggleTraces(void);
+
+ /**
+ * Debugging only: turn on/off timers
+ */
+ void slotToggleTimers(void);
+
+ /**
+ * Called when the user asks for the personal information.
+ */
+ void slotFileViewPersonal(void);
+
+ /**
+ * Called when the user wishes to import tab delimeted transactions
+ * into the current account. An account must be open for this to
+ * work. Calls KMyMoneyView::slotAccountImportAscii.
+ *
+ * @see MyMoneyAccount
+ */
+ void slotQifImport(void);
+
+ /**
+ * Called when a QIF import is finished.
+ */
+ void slotQifImportFinished(void);
+
+ /**
+ * Opens a file selector dialog for the user to choose an existing OFX
+ * file from the file system to be imported. This slot is expected to
+ * be called from the UI.
+ */
+ void slotGncImport(void);
+
+ /**
+ * Open a dialog with a chart of the balance for the currently selected
+ * account (m_selectedAccount). Return once the dialog is closed. Don't do
+ * anything if no account is selected or charts are not available.
+ */
+ void slotAccountChart(void);
+
+ /**
+ * Opens a file selector dialog for the user to choose an existing KMM
+ * statement file from the file system to be imported. This is for testing
+ * only. KMM statement files are not designed to be exposed to the user.
+ */
+ void slotStatementImport(void);
+
+ void slotLoadAccountTemplates(void);
+ void slotSaveAccountTemplates(void);
+
+ /**
+ * Called when the user wishes to export some transaction to a
+ * QIF formatted file. An account must be open for this to work.
+ * Uses MyMoneyQifWriter() for the actual output.
+ */
+ void slotQifExport(void);
+
+ /**
+ * Open up the application wide settings dialog.
+ *
+ * @see KSettingsDlg
+ */
+ void slotSettings(void);
+
+ /** No descriptions */
+ void slotFileBackup(void);
+
+ void slotShowTipOfTheDay(void);
+
+ void slotQifProfileEditor(void);
+
+ void slotShowPreviousView(void);
+
+ void slotShowNextView(void);
+
+ void slotSecurityEditor(void);
+
+ /**
+ * Brings up a dialog to let the user search for specific transaction(s). It then
+ * opens a results window to display those transactions.
+ */
+ void slotFindTransaction(void);
+
+ /**
+ * Destroys a possibly open the search dialog
+ */
+ void slotCloseSearchDialog(void);
+
+ /**
+ * Preloads the input dialog with the data of the current
+ * selected institution and brings up the input dialog
+ * and saves the information entered.
+ */
+ void slotInstitutionEdit(const MyMoneyObject& obj = MyMoneyInstitution());
+
+ /**
+ * Deletes the current selected institution.
+ */
+ void slotInstitutionDelete(void);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ * The dialog will be preset with the name. The parent defaults to
+ * MyMoneyFile::expense()
+ *
+ * @param name Name of the account to be created. Could include a full hierarchy
+ * @param id reference to storage which will receive the id after successful creation
+ *
+ * @note Typically, this slot can be connected to the
+ * StdTransactionEditor::createCategory(const QString&, QString&) or
+ * KMyMoneyCombo::createItem(const QString&, QString&) signal.
+ */
+ void slotCategoryNew(const QString& name, QString& id);
+
+ /**
+ * Calls the print logic for the current view
+ */
+ void slotPrintView(void);
+
+ /**
+ * Create a new investment
+ */
+ void slotInvestmentNew(void);
+
+ /**
+ * Create a new investment in a given @p parent investment account
+ */
+ void slotInvestmentNew(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * This slot opens the investment editor to edit the currently
+ * selected investment if possible
+ */
+ void slotInvestmentEdit(void);
+
+ /**
+ * Deletes the current selected investment.
+ */
+ void slotInvestmentDelete(void);
+
+ /**
+ * Performs online update for currently selected investment
+ */
+ void slotOnlinePriceUpdate(void);
+
+ /**
+ * Performs manual update for currently selected investment
+ */
+ void slotManualPriceUpdate(void);
+
+ /**
+ * Call this slot, if any configuration parameter has changed
+ */
+ void slotUpdateConfiguration(void);
+
+ /**
+ */
+ void slotPayeeNew(const QString& newnameBase, QString& id);
+ void slotPayeeNew(void);
+
+ /**
+ */
+ void slotPayeeDelete(void);
+
+ /**
+ */
+ void slotBudgetNew(void);
+
+ /**
+ */
+ void slotBudgetDelete(void);
+
+ /**
+ */
+ void slotBudgetCopy(void);
+
+ /**
+ */
+ void slotBudgetChangeYear(void);
+
+ /**
+ */
+ void slotBudgetForecast(void);
+
+ /**
+ */
+ void slotCurrencyNew(void);
+
+ /**
+ */
+ void slotCurrencyRename(QListViewItem* item, int, const QString& txt);
+
+ /**
+ */
+ void slotCurrencyDelete(void);
+
+ /**
+ */
+ void slotCurrencySetBase(void);
+
+ /**
+ * This slot is used to start new features during the development cycle
+ */
+ void slotNewFeature(void);
+
+ /**
+ */
+ void slotTransactionsNew(void);
+
+ /**
+ */
+ void slotTransactionsEdit(void);
+
+ /**
+ */
+ void slotTransactionsEditSplits(void);
+
+ /**
+ */
+ void slotTransactionsDelete(void);
+
+ /**
+ */
+ void slotTransactionsEnter(void);
+
+ /**
+ */
+ void slotTransactionsCancel(void);
+
+ /**
+ */
+ void slotTransactionsCancelOrEnter(bool& okToSelect);
+
+ /**
+ */
+ void slotTransactionDuplicate(void);
+
+ /**
+ */
+ void slotToggleReconciliationFlag(void);
+
+ /**
+ */
+ void slotMarkTransactionCleared(void);
+
+ /**
+ */
+ void slotMarkTransactionReconciled(void);
+
+ /**
+ */
+ void slotMarkTransactionNotReconciled(void);
+
+ /**
+ */
+ void slotTransactionGotoAccount(void);
+
+ /**
+ */
+ void slotTransactionGotoPayee(void);
+
+ /**
+ */
+ void slotTransactionCreateSchedule(void);
+
+ /**
+ */
+ void slotTransactionAssignNumber(void);
+
+ /**
+ */
+ void slotTransactionCombine(void);
+
+ /**
+ * Accept the selected transactions that are marked as 'imported' and remove the flag
+ */
+ void slotTransactionsAccept(void);
+
+ /**
+ * This slot triggers an update of all views and restarts
+ * a single shot timer to call itself again at beginning of
+ * the next day.
+ */
+ void slotDateChanged(void);
+
+ /**
+ * This slot will be called when the engine data changed
+ * and the application object needs to update it's state.
+ */
+ void slotDataChanged(void);
+
+ void slotMoveToAccount(const QString& id);
+
+ void slotUpdateMoveToAccountMenu(void);
+
+ /**
+ * This slot collects information for a new scheduled transaction
+ * based on transaction @a t and @a occurence and saves it in the engine.
+ */
+ void slotScheduleNew(const MyMoneyTransaction& t, MyMoneySchedule::occurenceE occurence = MyMoneySchedule::OCCUR_MONTHLY);
+
+ /**
+ */
+ void slotScheduleDuplicate(void);
+
+ void slotKDELanguageSettings(void);
+
+ void slotAccountMapOnline(void);
+ void slotAccountUnmapOnline(void);
+ void slotAccountUpdateOnline(void);
+ void slotAccountUpdateOnlineAll(void);
+
+ void slotManageGpgKeys(void);
+ void slotKeySelected(int idx);
+
+public:
+ /**
+ * This method checks if there is at least one asset or liability account
+ * in the current storage object. If not, it starts the new account wizard.
+ */
+ void createInitialAccount(void);
+
+ /**
+ * This method returns the last URL used or an empty URL
+ * depending on the option setting if the last file should
+ * be opened during startup or the open file dialog should
+ * be displayed.
+ *
+ * @return URL of last opened file or empty if the program
+ * should start with the open file dialog
+ */
+ const KURL lastOpenedURL(void);
+
+ /**
+ * construtor of KMyMoney2App, calls all init functions to create the application.
+ */
+ KMyMoney2App(QWidget* parent=0, const char* name=0);
+
+ /**
+ * Destructor
+ */
+ ~KMyMoney2App();
+
+ /** Init wizard dialog */
+ bool initWizard(void);
+
+ static void progressCallback(int current, int total, const QString&);
+
+ void writeLastUsedDir(const QString& directory);
+ QString readLastUsedDir(void) const;
+ void writeLastUsedFile(const QString& fileName);
+ QString readLastUsedFile(void) const;
+
+ /**
+ * Returns whether there is an importer available that can handle this file
+ */
+ bool isImportableFile( const KURL& url );
+
+ /**
+ * This method is used to update the caption of the application window.
+ * It set's the caption to "filename [modified] - KMyMoney".
+ *
+ * @param skipActions if true, the actions will not be updated. This
+ * is usually onyl required by some early calls when
+ * these widgets are not yet created (the default is false).
+ */
+ void updateCaption(bool skipActions = false);
+
+ /**
+ * This method returns a list of all 'other' dcop registered kmymoney processes.
+ * It's a subset of the return of DCOPclient()->registeredApplications().
+ *
+ * @retval QStringList of process ids
+ */
+ const QValueList<QCString> instanceList(void) const;
+
+ /**
+ * Dump a list of the names of all defined KActions to stdout.
+ */
+ void dumpActions(void) const;
+
+ /**
+ * Popup the context menu with the respective @p containerName.
+ * Valid container names are defined in kmymoney2ui.rc
+ */
+ void showContextMenu(const QString& containerName);
+
+ /**
+ * This method opens the category editor with the data found in @a account. The
+ * parent account is preset to @a parent but can be modified. If the user
+ * acknowledges, the category is created.
+ */
+ void createCategory(MyMoneyAccount& account, const MyMoneyAccount& parent);
+
+ /**
+ * This method returns the account for a given @a key - @a value pair.
+ * If the account is not found in the list of accounts, MyMoneyAccount()
+ * is returned.
+ */
+ const MyMoneyAccount& account(const QString& key, const QString& value) const;
+
+ /**
+ * This method set the online parameters stored in @a kvps with the
+ * account referenced by @a acc.
+ */
+ void setAccountOnlineParameters(const MyMoneyAccount& acc, const MyMoneyKeyValueContainer& kvps);
+
+ KURL selectFile(const QString& title, const QString& path, const QString& mask, KFile::Mode mode);
+
+ const MyMoneyAccount& findAccount(const MyMoneyAccount& acc, const MyMoneyAccount& parent) const;
+
+ void createAccount(MyMoneyAccount& newAccount, MyMoneyAccount& parentAccount, MyMoneyAccount& brokerageAccount, MyMoneyMoney openingBal);
+
+k_dcop:
+ // Note: Don't use e.g. filename(void) but use filename() because
+ // otherwise the kidl compiler produces uncompilable results.
+ const QString filename() const;
+
+ void webConnect(const QString&, const QCString& asn_id);
+
+ /**
+ * Checks if the file with the @a url already exists. If so,
+ * the user is asked if he/she wants to override the file.
+ * If the user's answer is negative, @p false will be returned.
+ * @p true will be returned in all other cases.
+ */
+ bool okToWriteFile(const KURL& url);
+
+ // QValueList<MyMoneyAccount> accountList() const;
+
+protected:
+ /** save general Options like all bar positions and status as well as the geometry and the recent file list to the configuration
+ * file
+ */
+ void saveOptions(void);
+
+ /**
+ * Creates the interfaces necessary for the plugins to work. Therefore,
+ * this method must be called prior to loadPlugins().
+ */
+ void createInterfaces(void);
+
+ /**
+ * load all available plugins. Make sure you have called createInterfaces()
+ * before you call this one.
+ */
+ void loadPlugins(void);
+
+ /** read general Options again and initialize all variables like the recent file list
+ */
+ void readOptions(void);
+
+ /** initializes the KActions of the application */
+ void initActions(void);
+
+ /** initializes the dynamic menus (account selectors) */
+ void initDynamicMenus(void);
+
+ /** sets up the statusbar for the main window by initialzing a statuslabel.
+ */
+ void initStatusBar(void);
+
+ /** queryClose is called by KTMainWindow on each closeEvent of a window. Against the
+ * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall
+ * be saved if Modified; on cancel the closeEvent is rejected.
+ * @see KTMainWindow#queryClose
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryClose(void);
+
+ /** queryExit is called by KTMainWindow when the last window of the application is going to be closed during the closeEvent().
+ * Against the default implementation that just returns true, this calls saveOptions() to save the settings of the last window's
+ * properties.
+ * @see KTMainWindow#queryExit
+ * @see KTMainWindow#closeEvent
+ */
+ virtual bool queryExit(void);
+
+ void slotCheckSchedules(void);
+
+ virtual void resizeEvent(QResizeEvent*);
+
+ void createSchedule(MyMoneySchedule newSchedule, MyMoneyAccount& newAccount);
+
+ /**
+ * This method checks, if an account can be closed or not. An account
+ * can be closed if:
+ *
+ * - the balance is zero and
+ * - all children are already closed and
+ * - there is no unfinished schedule referencing the account
+ *
+ * @param acc reference to MyMoneyAccount object in question
+ * @retval true account can be closed
+ * @retval false account cannot be closed
+ */
+ bool canCloseAccount(const MyMoneyAccount& acc) const;
+
+ /**
+ * Check if a list contains a payee with a given id
+ *
+ * @param list const reference to value list
+ * @param id const reference to id
+ *
+ * @retval true object has been found
+ * @retval false object is not in list
+ */
+ bool payeeInList(const QValueList<MyMoneyPayee>& list, const QString& id) const;
+
+ /**
+ * Mark the selected transactions as provided by @a flag. If
+ * flag is @a MyMoneySplit::Unknown, the future state depends
+ * on the current stat of the split's flag accoring to the
+ * following table:
+ *
+ * - NotReconciled --> Cleared
+ * - Cleared --> Reconciled
+ * - Reconciled --> NotReconciled
+ */
+ void markTransaction(MyMoneySplit::reconcileFlagE flag);
+
+ /**
+ * This method allows to enter the next scheduled transaction of
+ * the given schedule @a s. In case @a extendedKeys is @a true,
+ * the given schedule can also be skipped or ignored.
+ * If @a autoEnter is @a true and the schedule does not contain
+ * an estimated value, the schedule is entered as is without further
+ * interaction with the user. In all other cases, the user will
+ * be presented a dialog and allowed to adjust the values for this
+ * instance of the schedule.
+ *
+ * The transaction will be created and entered into the ledger
+ * and the schedule updated.
+ */
+ KMyMoneyUtils::EnterScheduleResultCodeE enterSchedule(MyMoneySchedule& s, bool autoEnter = false, bool extendedKeys = false);
+
+ /**
+ * Creates a new institution entry in the MyMoneyFile engine
+ *
+ * @param institution MyMoneyInstitution object containing the data of
+ * the institution to be created.
+ */
+ void createInstitution(MyMoneyInstitution& institution);
+
+ /**
+ * This method unmatches the currently selected transactions
+ */
+ void transactionUnmatch(void);
+
+ /**
+ * This method matches the currently selected transactions
+ */
+ void transactionMatch(void);
+
+public slots:
+ void slotFileInfoDialog(void);
+
+ /** */
+ void slotFileNew(void);
+
+ /** Open a new window */
+ void slotFileNewWindow(void);
+
+ /** open a file and load it into the document*/
+ void slotFileOpen(void);
+
+ /** opens a file from the recent files menu */
+
+ void slotFileOpenRecent(const KURL& url);
+
+ /** open a SQL database */
+ void slotOpenDatabase(void);
+
+ /**
+ * saves the current document. If it has no name yet, the user
+ * will be queried for it.
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotFileSave(void);
+
+ /**
+ * ask the user for the filename and save the current document
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotFileSaveAs(void);
+
+ /**
+ * ask the user to select a database and save the current document
+ *
+ * @retval false save operation failed
+ * @retval true save operation was successful
+ */
+ bool slotSaveAsDatabase(void);
+
+ /** asks for saving if the file is modified, then closes the actual file and window */
+ void slotFileCloseWindow(void);
+
+ /** asks for saving if the file is modified, then closes the actual file */
+ void slotFileClose(void);
+
+ /**
+ * closes all open windows by calling close() on each memberList item
+ * until the list is empty, then quits the application.
+ * If queryClose() returns false because the user canceled the
+ * saveModified() dialog, the closing breaks.
+ */
+ void slotFileQuit(void);
+
+ void slotFileConsitencyCheck(void);
+
+ /**
+ * fires up the price table editor
+ */
+ void slotPriceDialog(void);
+
+ /**
+ * fires up the currency table editor
+ */
+ void slotCurrencyDialog(void);
+
+ /**
+ * Toggles the hide reconciled transactions setting
+ */
+ void slotHideReconciledTransactions(void);
+
+ /**
+ * Toggles the hide unused categories setting
+ */
+ void slotHideUnusedCategories(void);
+
+ /**
+ * Toggles the show all accounts setting
+ */
+ void slotShowAllAccounts(void);
+
+
+ /**
+ * changes the statusbar contents for the standard label permanently,
+ * used to indicate current actions. Returns the previous value for
+ * 'stacked' usage.
+ *
+ * @param text the text that is displayed in the statusbar
+ */
+ const QString slotStatusMsg(const QString &text);
+
+ /**
+ * This method changes the progress bar in the status line according
+ * to the parameters @p current and @p total. The following special
+ * cases exist:
+ *
+ * - current = -1 and total = -1 will reset the progress bar
+ * - current = ?? and total != 0 will setup the 100% mark to @p total
+ * - current = xx and total == 0 will set the percentage
+ *
+ * @param current the current value with respect to the initialised
+ * 100% mark
+ * @param total the total value (100%)
+ */
+ void slotStatusProgressBar(int current, int total = 0);
+
+ /** No descriptions */
+ void slotProcessExited(void);
+
+ /**
+ * Called to update stock and currency prices from the user menu
+ */
+ void slotEquityPriceUpdate(void);
+
+ /**
+ * Imports a KMM statement into the engine, triggering the appropriate
+ * UI to handle account matching, payee creation, and someday
+ * payee and transaction matching.
+ */
+ bool slotStatementImport(const MyMoneyStatement& s);
+
+ /**
+ * Essentially similiar to the above slot, except this will load the file
+ * from disk first, given the URL.
+ */
+ bool slotStatementImport(const QString& url);
+
+ /**
+ * This slot starts the reconciliation of the currently selected account
+ */
+ void slotAccountReconcileStart(void);
+
+ /**
+ * This slot finishes a previously started reconciliation
+ */
+ void slotAccountReconcileFinish(void);
+
+ /**
+ * This slot postpones a previously started reconciliations
+ */
+ void slotAccountReconcilePostpone(void);
+
+ /**
+ * This slot deletes the currently selected account if possible
+ */
+ void slotAccountDelete(void);
+
+ /**
+ * This slot opens the account editor to edit the currently
+ * selected account if possible
+ */
+ void slotAccountEdit(void);
+
+ /**
+ * This slot opens the selected account in the ledger view
+ */
+ void slotAccountOpen(const MyMoneyObject& = MyMoneyAccount());
+
+ /**
+ * This slot closes the currently selected account if possible
+ */
+ void slotAccountClose(void);
+
+ /**
+ * This slot re-openes the currently selected account if possible
+ */
+ void slotAccountReopen(void);
+
+ /**
+ * This slot reparents account @p src to be a child of account @p dest
+ *
+ * @param src account to be reparented
+ * @param dest new parent
+ */
+ void slotReparentAccount(const MyMoneyAccount& src, const MyMoneyAccount& dest);
+
+ /**
+ * This slot reparents account @p src to be a held at institution @p dest
+ *
+ * @param src account to be reparented
+ * @param dest new parent institution
+ */
+ void slotReparentAccount(const MyMoneyAccount& src, const MyMoneyInstitution& dest);
+
+ /**
+ * This slot creates a transaction report for the selected account
+ * and opens it in the reports view.
+ */
+ void slotAccountTransactionReport(void);
+
+ /**
+ * This slot opens the account options menu at the current cursor
+ * position.
+ */
+ void slotShowAccountContextMenu(const MyMoneyObject&);
+
+ /**
+ * This slot opens the schedule options menu at the current cursor
+ * position.
+ */
+ void slotShowScheduleContextMenu(void);
+
+ /**
+ * This slot opens the institution options menu at the current cursor
+ * position.
+ */
+ void slotShowInstitutionContextMenu(const MyMoneyObject&);
+
+ /**
+ * This slot opens the investment options menu at the current cursor
+ * position.
+ */
+ void slotShowInvestmentContextMenu(void);
+
+ /**
+ * This slot opens the payee options menu at the current cursor
+ * position.
+ */
+ void slotShowPayeeContextMenu(void);
+
+ /**
+ * This slot opens the budget options menu at the current cursor
+ * position.
+ */
+ void slotShowBudgetContextMenu(void);
+
+ /**
+ * This slot opens the transaction options menu at the current cursor
+ * position.
+ */
+ void slotShowTransactionContextMenu(void);
+
+ /**
+ * This slot opens the currency options menu at the current cursor
+ * position.
+ */
+ void slotShowCurrencyContextMenu(void);
+
+ /**
+ * This slot collects information for a new scheduled transaction
+ * and saves it in the engine. @sa slotScheduleNew(const MyMoneyTransaction&)
+ */
+ void slotScheduleNew(void);
+
+ /**
+ * This slot allows to edit information the currently selected schedule
+ */
+ void slotScheduleEdit(void);
+
+ /**
+ * This slot allows to delete the currently selected schedule
+ */
+ void slotScheduleDelete(void);
+
+ /**
+ * This slot allows to enter the next scheduled transaction of
+ * the currently selected schedule
+ */
+ void slotScheduleEnter(void);
+
+ /**
+ * This slot allows to skip the next scheduled transaction of
+ * the currently selected schedule
+ */
+ void slotScheduleSkip(void);
+
+ /**
+ * This slot fires up the KCalc application
+ */
+ void slotToolsStartKCalc(void);
+
+ void slotResetSelections(void);
+
+ void slotSelectAccount(const MyMoneyObject& account = MyMoneyAccount());
+
+ void slotSelectInstitution(const MyMoneyObject& institution = MyMoneyInstitution());
+
+ void slotSelectInvestment(const MyMoneyObject& account = MyMoneyAccount());
+
+ void slotSelectSchedule(const MyMoneySchedule& schedule = MyMoneySchedule());
+
+ void slotSelectPayees(const QValueList<MyMoneyPayee>& list);
+
+ void slotSelectBudget(const QValueList<MyMoneyBudget>& list);
+
+ void slotSelectTransactions(const KMyMoneyRegister::SelectedTransactions& list);
+
+ void slotSelectCurrency(const MyMoneySecurity& currency = MyMoneySecurity());
+
+ void slotTransactionMatch(void);
+
+ /**
+ * Brings up the new account wizard and saves the information.
+ */
+ void slotAccountNew(void);
+ void slotAccountNew(MyMoneyAccount&);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ */
+ void slotCategoryNew(void);
+
+ /**
+ * Brings up the new category editor and saves the information.
+ * The dialog will be preset with the name and parent account.
+ *
+ * @param account reference of category to be created. The @p name member
+ * should be filled by the caller. The object will be filled
+ * with additional information during the creation process
+ * esp. the @p id member.
+ * @param parent reference to parent account (defaults to none)
+ */
+ void slotCategoryNew(MyMoneyAccount& account, const MyMoneyAccount& parent = MyMoneyAccount());
+
+ /**
+ * This method updates all KAction items to the current state.
+ */
+ void slotUpdateActions(void);
+
+ /**
+ * Brings up the input dialog and saves the information.
+ */
+ void slotInstitutionNew(void);
+
+ /**
+ * Brings up the input dialog and saves the information. If
+ * the institution has been created, the @a id member is filled,
+ * otherwise it is empty.
+ *
+ * @param institution reference to data to be used to create the
+ * institution. id member will be updated.
+ */
+ void slotInstitutionNew(MyMoneyInstitution& institution);
+
+ /**
+ * Called whenever a plugin is plugged in
+ */
+ void slotPluginPlug(KPluginInfo*);
+
+ /**
+ * Called whenever a plugin is unplugged
+ */
+ void slotPluginUnplug(KPluginInfo*);
+
+private:
+ // bool verifyImportedData(const MyMoneyAccount& account);
+
+ /**
+ * Load the status bar with the 'ready' message. This is hold in a single
+ * place, so that is consistent with isReady().
+ */
+ void ready(void);
+
+ /**
+ * Check if the status bar contains the 'ready' message. The return
+ * value is used e.g. to detect if a quit operation is allowed or not.
+ *
+ * @retval true application is idle
+ * @retval false application is active working on a longer operation
+ */
+ bool isReady(void);
+
+ /**
+ * Delete a possibly existing transaction editor but make sure to remove
+ * any reference to it so that we avoid using a half-dead object
+ */
+ void deleteTransactionEditor(void);
+
+ /**
+ * delete all selected transactions w/o further questions
+ */
+ void doDeleteTransactions(void);
+
+ /**
+ * Exchanges all references in transaction @a _t to account @a fromId
+ * into references to account @a toId. Returns @a true if at least
+ * one split has been changed, @a false otherwise.
+ */
+ bool exchangeAccountInTransaction(MyMoneyTransaction& _t, const QString& fromId, const QString& toId);
+
+signals:
+ /**
+ * This signal is emitted when a new file is loaded. In the case file
+ * is closed, this signal is also emitted with an empty url.
+ */
+ void fileLoaded(const KURL& url);
+
+ /**
+ * This signal is emitted when a payee/list of payees has been selected by
+ * the GUI. If no payee is selected or the selection is removed,
+ * @p payees is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void payeesSelected(const QValueList<MyMoneyPayee>& payees);
+
+ /**
+ * This signal is emitted when a transaction/list of transactions has been selected by
+ * the GUI. If no transaction is selected or the selection is removed,
+ * @p transactions is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void transactionsSelected(const KMyMoneyRegister::SelectedTransactions& transactions);
+
+ /**
+ * This signal is sent out, when the user presses Ctrl+A or activates
+ * the Select all transactions action.
+ */
+ void selectAllTransactions(void);
+
+ /**
+ * This signal is emitted when a list of budgets has been selected by
+ * the GUI. If no budget is selected or the selection is removed,
+ * @a budget is identical to an empty QValueList. This signal is used
+ * by plugins to get information about changes.
+ */
+ void budgetSelected(const QValueList<MyMoneyBudget>& budget);
+ void budgetRename(void);
+
+ /**
+ * This signal is emitted when a new account has been selected by
+ * the GUI. If no account is selected or the selection is removed,
+ * @a account is identical to MyMoneyAccount(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void accountSelected(const MyMoneyAccount& account);
+ void investmentSelected(const MyMoneyAccount& account);
+
+ /**
+ * This signal is emitted when a new institution has been selected by
+ * the GUI. If no institution is selected or the selection is removed,
+ * @a institution is identical to MyMoneyInstitution(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void institutionSelected(const MyMoneyInstitution& institution);
+
+ /**
+ * This signal is emitted when a new schedule has been selected by
+ * the GUI. If no schedule is selected or the selection is removed,
+ * @a schedule is identical to MyMoneySchedule(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void scheduleSelected(const MyMoneySchedule& schedule);
+
+ /**
+ * This signal is emitted when a new currency has been selected by
+ * the GUI. If no currency is selected or the selection is removed,
+ * @a currency is identical to MyMoneySecurity(). This signal is used
+ * by plugins to get information about changes.
+ */
+ void currencySelected(const MyMoneySecurity& currency);
+
+ void payeeRename(void);
+ void payeeCreated(const QString& id);
+
+ void currencyRename(void);
+ void currencyCreated(const QString& id);
+
+ void startMatchTransaction(const MyMoneyTransaction& t);
+ void cancelMatchTransaction(void);
+
+ /**
+ * This signal is emitted when an account has been successfully reconciled
+ * and all transactions are updated in the engine. It can be used by plugins
+ * to create reconciliation reports.
+ *
+ * @param account the account data
+ * @param date the reconciliation date as provided through the dialog
+ * @param startingBalance the starting balance as provided through the dialog
+ * @param endingBalance the ending balance as provided through the dialog
+ * @param transactionList reference to QValueList of QPair containing all
+ * transaction/split pairs processed by the reconciliation.
+ */
+ void accountReconciled(const MyMoneyAccount& account, const QDate& date, const MyMoneyMoney& startingBalance, const MyMoneyMoney& endingBalance, const QValueList<QPair<MyMoneyTransaction, MyMoneySplit> >& transactionList);
+
+public:
+ /**
+ * This method retrieves a pointer to a KAction object from actionCollection().
+ * If the action with the name @p actionName is not found, a pointer to
+ * a static non-configured KAction object is returned and a warning is
+ * printed to stderr.
+ *
+ * @param actionName name of the action to be retrieved
+ * @return pointer to KAction object (or derivative)
+ */
+ KAction* action(const QString& actionName) const;
+
+ /**
+ * This method is implemented for convenience. It returns a dynamic_cast-ed
+ * pointer to an action found in actionCollection().
+ * If the action with the name @p actionName is not found or the object
+ * is not of type KToggleAction, a pointer to a static non-configured
+ * KToggleAction object is returned and a warning is printed to stderr.
+ */
+ KToggleAction* toggleAction(const QString& actionName) const;
+
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /*
+ * Actually, one should write "Private * const d" but that confuses the KIDL
+ * compiler in this context. It complains about the const keyword. So we leave
+ * it out here
+ */
+ /// \internal d-pointer instance.
+ Private* d;
+
+ /** the configuration object of the application */
+ KConfig *config;
+
+ QMap<QString,KMyMoneyPlugin::ImporterPlugin*> m_importerPlugins;
+
+ QMap<QString, KMyMoneyPlugin::OnlinePlugin*> m_onlinePlugins;
+
+ enum backupStateE {
+ BACKUP_IDLE = 0,
+ BACKUP_MOUNTING,
+ BACKUP_COPYING,
+ BACKUP_UNMOUNTING
+ };
+ /**
+ * The following variable represents the state while crafting a backup.
+ * It can have the following values
+ *
+ * - IDLE: the default value if not performing a backup
+ * - MOUNTING: when a mount command has been issued
+ * - COPYING: when a copy command has been issued
+ * - UNMOUNTING: when an unmount command has been issued
+ */
+ backupStateE m_backupState;
+
+ /**
+ * This variable keeps the result of the backup operation.
+ */
+ int m_backupResult;
+
+ /**
+ * This variable is set, when the user selected to mount/unmount
+ * the backup volume.
+ */
+ bool m_backupMount;
+
+ KProcess proc;
+
+ /// A pointer to the view holding the tabs.
+ KMyMoneyView *myMoneyView;
+
+ /// The URL of the file currently being edited when open.
+ KURL m_fileName;
+
+ bool m_startDialog;
+ QString m_mountpoint;
+
+ KProgress* progressBar;
+
+ QString m_statusMsg;
+
+ int m_progressUpdate;
+ int m_nextUpdate;
+
+ MyMoneyQifReader* m_qifReader;
+ MyMoneyStatementReader* m_smtReader;
+ KFindTransactionDlg* m_searchDlg;
+
+ bool m_bCheckSchedules;
+
+ KToolBarPopupAction* m_previousViewButton;
+ KToolBarPopupAction* m_nextViewButton;
+
+ QObject* m_pluginInterface;
+
+ MyMoneyAccount m_selectedAccount;
+ MyMoneyAccount m_reconciliationAccount;
+ MyMoneyAccount m_selectedInvestment;
+ MyMoneyInstitution m_selectedInstitution;
+ MyMoneySchedule m_selectedSchedule;
+ MyMoneySecurity m_selectedCurrency;
+ QValueList<MyMoneyPayee> m_selectedPayees;
+ QValueList<MyMoneyBudget> m_selectedBudgets;
+ KMyMoneyRegister::SelectedTransactions m_selectedTransactions;
+
+ // This is Auto Saving related
+ bool m_autoSaveEnabled;
+ QTimer* m_autoSaveTimer;
+ int m_autoSavePeriod;
+ bool m_inAutoSaving;
+
+ // Pointer to the combo box used for key selection during
+ // File/Save as
+ KComboBox* m_saveEncrypted;
+
+ // pointer to the current transaction editor
+ TransactionEditor* m_transactionEditor;
+
+ // Reconciliation dialog
+ KEndingBalanceDlg* m_endingBalanceDlg;
+
+ // id's that need to be remembered
+ QString m_accountGoto, m_payeeGoto;
+
+ QStringList m_additionalGpgKeys;
+ QLabel* m_additionalKeyLabel;
+ KPushButton* m_additionalKeyButton;
+};
+
+extern KMyMoney2App *kmymoney2;
+
+class KMStatus
+{
+public:
+ KMStatus (const QString &text);
+ ~KMStatus();
+private:
+ QString m_prevText;
+};
+
+#define KMSTATUS(msg) KMStatus _thisStatus(msg)
+
+#endif // KMYMONEY2_H