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.
628 lines
19 KiB
628 lines
19 KiB
/***************************************************************************
|
|
kmymoneyview.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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#ifndef KMYMONEYVIEW_H
|
|
#define KMYMONEYVIEW_H
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// QT Includes
|
|
|
|
#include <tqwidget.h>
|
|
class TQVBox;
|
|
class TQFile;
|
|
class TQVBoxLayout;
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// KDE Includes
|
|
|
|
#include <kpopupmenu.h>
|
|
#include <kjanuswidget.h>
|
|
|
|
#include <kurl.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Project Includes
|
|
|
|
#include <kmymoney/mymoneyaccount.h>
|
|
#include <kmymoney/mymoneyinstitution.h>
|
|
#include <kmymoney/mymoneytransaction.h>
|
|
#include <kmymoney/mymoneyscheduled.h>
|
|
#include <kmymoney/mymoneysecurity.h>
|
|
#include <kmymoney/selectedtransaction.h>
|
|
|
|
class KHomeView;
|
|
class KAccountsView;
|
|
class KCategoriesView;
|
|
class KInstitutionsView;
|
|
class KPayeesView;
|
|
class KBudgetView;
|
|
class KScheduledView;
|
|
class KGlobalLedgerView;
|
|
class IMyMoneyStorageFormat;
|
|
class MyMoneyTransaction;
|
|
class KInvestmentView;
|
|
class KReportsView;
|
|
class KMyMoneyViewBase;
|
|
class MyMoneyReport;
|
|
class TransactionEditor;
|
|
class KForecastView;
|
|
|
|
/**
|
|
* This class represents the view of the MyMoneyFile which contains
|
|
* Banks/Accounts/Transactions, Recurring transactions (or Bills & Deposits)
|
|
* and scripts (yet to be implemented). Each different aspect of the file
|
|
* is represented by a tab within the view.
|
|
*
|
|
* @author Michael Edwardes 2001 Copyright 2000-2001
|
|
*
|
|
* @short Handles the view of the MyMoneyFile.
|
|
*/
|
|
class KMyMoneyView : public KJanusWidget
|
|
{
|
|
Q_OBJECT
|
|
TQ_OBJECT
|
|
|
|
public:
|
|
enum viewID {
|
|
HomeView = 0,
|
|
AccountsView,
|
|
InstitutionsView,
|
|
SchedulesView,
|
|
CategoriesView,
|
|
PayeesView,
|
|
LedgersView,
|
|
InvestmentsView,
|
|
ReportsView,
|
|
BudgetView,
|
|
ForecastView
|
|
};
|
|
// file actions for plugin
|
|
enum fileActions {
|
|
preOpen, postOpen, preSave, postSave, preClose, postClose
|
|
};
|
|
|
|
private:
|
|
enum menuID {
|
|
AccountNew = 1,
|
|
AccountOpen,
|
|
AccountReconcile,
|
|
AccountEdit,
|
|
AccountDelete,
|
|
AccountOnlineMap,
|
|
AccountOnlineUpdate,
|
|
AccountOfxConnect,
|
|
CategoryNew
|
|
};
|
|
|
|
typedef enum storageTypeE { // not used but keep for future implementation
|
|
Memory = 0,
|
|
Database
|
|
} _storageType;
|
|
|
|
KHomeView *m_homeView;
|
|
KAccountsView *m_accountsView;
|
|
KInstitutionsView *m_institutionsView;
|
|
KCategoriesView *m_categoriesView;
|
|
KPayeesView *m_payeesView;
|
|
KBudgetView *m_budgetView;
|
|
KScheduledView *m_scheduledView;
|
|
KGlobalLedgerView *m_ledgerView;
|
|
KInvestmentView *m_investmentView;
|
|
KReportsView* m_reportsView;
|
|
KForecastView* m_forecastView;
|
|
|
|
TQVBox* m_homeViewFrame;
|
|
TQVBox* m_accountsViewFrame;
|
|
TQVBox* m_institutionsViewFrame;
|
|
TQVBox* m_categoriesViewFrame;
|
|
TQVBox* m_payeesViewFrame;
|
|
TQVBox* m_budgetViewFrame;
|
|
TQVBox* m_scheduleViewFrame;
|
|
TQVBox* m_ledgerViewFrame;
|
|
TQVBox* m_investmentViewFrame;
|
|
TQVBox* m_reportsViewFrame;
|
|
TQVBox* m_forecastViewFrame;
|
|
|
|
bool m_inConstructor;
|
|
|
|
bool m_fileOpen;
|
|
|
|
int m_fmode;
|
|
|
|
// bool m_bankRightClick;
|
|
// MyMoneyInstitution m_accountsInstitution;
|
|
|
|
// Keep a note of the file type
|
|
typedef enum _fileTypeE {
|
|
KmmBinary = 0, // native, binary
|
|
KmmXML, // native, XML
|
|
KmmDb, // SQL database
|
|
/* insert new native file types above this line */
|
|
MaxNativeFileType,
|
|
/* and non-native types below */
|
|
GncXML // Gnucash XML
|
|
}fileTypeE;
|
|
fileTypeE m_fileType;
|
|
|
|
private:
|
|
void addTitleBar(TQWidget* parent, const TQString& title);
|
|
|
|
void ungetString(TQIODevice *qfile, char * buf, int len);
|
|
|
|
/**
|
|
* This method creates the currency @p curr if it does not exist and
|
|
* @p create is @p true. If the currency already exists, it checks
|
|
* if the name is equal. If it is not, the name of the object in the
|
|
* engine is updated to the name passed with @p curr.
|
|
*
|
|
* @param curr MyMoneySecurity to be checked
|
|
* @param create If true and currency does not exist it will be created
|
|
If false currency will not be created even if it does not exist
|
|
*/
|
|
void loadDefaultCurrency(const MyMoneySecurity& curr, const bool create);
|
|
|
|
/**
|
|
*
|
|
*/
|
|
void loadAncientCurrency(const TQString& id, const TQString& name, const TQString& sym, const TQDate& date, const MyMoneyMoney& rate, const TQString& newId, const int partsPerUnit = 100, const int smallestCashFraction = 100, const int smallestAccountFraction = 0);
|
|
|
|
/**
|
|
* if no base currency is defined, start the dialog and force it to be set
|
|
*/
|
|
void selectBaseCurrency(void);
|
|
|
|
/**
|
|
* This method attaches an empty storage object to the MyMoneyFile
|
|
* object. It calls removeStorage() to remove a possibly attached
|
|
* storage object.
|
|
*/
|
|
void newStorage(storageTypeE = Memory);
|
|
|
|
/**
|
|
* This method removes an attached storage from the MyMoneyFile
|
|
* object.
|
|
*/
|
|
void removeStorage(void);
|
|
|
|
void viewAccountList(const TQString& selectAccount); // Show the accounts view
|
|
|
|
static void progressCallback(int current, int total, const TQString&);
|
|
|
|
/**
|
|
*/
|
|
void fixFile_0(void);
|
|
void fixFile_1(void);
|
|
void fixFile_2(void);
|
|
|
|
/**
|
|
*/
|
|
void fixLoanAccount_0(MyMoneyAccount acc);
|
|
|
|
/**
|
|
*/
|
|
void fixTransactions_0(void);
|
|
void fixSchedule_0(MyMoneySchedule sched);
|
|
void fixDuplicateAccounts_0(MyMoneyTransaction& t);
|
|
|
|
void createSchedule(MyMoneySchedule s, MyMoneyAccount& a);
|
|
|
|
void checkAccountName(const MyMoneyAccount& acc, const TQString& name) const;
|
|
|
|
public:
|
|
/**
|
|
* The constructor for KMyMoneyView. Just creates all the tabs for the
|
|
* different aspects of the MyMoneyFile.
|
|
*/
|
|
KMyMoneyView(TQWidget *parent=0, const char *name=0);
|
|
|
|
/**
|
|
* Destructor
|
|
*/
|
|
~KMyMoneyView();
|
|
|
|
/**
|
|
* Makes sure that a MyMoneyFile is open and has been created succesfully.
|
|
*
|
|
* @return Whether the file is open and initialised
|
|
*/
|
|
bool fileOpen(void);
|
|
|
|
/**
|
|
* Closes the open MyMoneyFile and frees all the allocated memory, I hope !
|
|
*/
|
|
void closeFile(void);
|
|
|
|
|
|
/**
|
|
* Calls MyMoneyFile::readAllData which reads a MyMoneyFile into appropriate
|
|
* data structures in memory. The return result is examined to make sure no
|
|
* errors occured whilst parsing.
|
|
*
|
|
* @param url The URL to read from.
|
|
* If no protocol is specified, file:// is assumed.
|
|
*
|
|
* @return Whether the read was successfull.
|
|
*/
|
|
bool readFile(const KURL& url);
|
|
|
|
/**
|
|
* Saves the data into permanent storage using the XML format.
|
|
*
|
|
* @param url The URL to save into.
|
|
* If no protocol is specified, file:// is assumed.
|
|
* @param keyList TQString containing a comma separated list of keys
|
|
* to be used for encryption. If @p keyList is empty,
|
|
* the file will be saved unencrypted (the default)
|
|
*
|
|
* @retval false save operation failed
|
|
* @retval true save operation was successful
|
|
*/
|
|
bool saveFile(const KURL& url, const TQString& keyList = TQString());
|
|
/**
|
|
* Saves the data into permanent storage on a new or empty SQL database.
|
|
*
|
|
* @param url The pseudo of tyhe database
|
|
*
|
|
* @retval false save operation failed
|
|
* @retval true save operation was successful
|
|
*/
|
|
//const bool saveDatabase(const KURL& url); This no longer relevant
|
|
/**
|
|
* Saves the data into permanent storage on a new or empty SQL database.
|
|
*
|
|
* @param url The pseudo URL of the database
|
|
*
|
|
* @retval false save operation failed
|
|
* @retval true save operation was successful
|
|
*/
|
|
bool saveAsDatabase(const KURL& url);
|
|
|
|
/**
|
|
* Call this to find out if the currently open file is native KMM
|
|
*
|
|
* @retval true file is native
|
|
* @retval false file is foreign
|
|
*/
|
|
bool isNativeFile() { return (m_fileOpen && (m_fileType < MaxNativeFileType)); }
|
|
|
|
/**
|
|
* Call this to find out if the currently open file is a sql database
|
|
*
|
|
* @retval true file is database
|
|
* @retval false file is serial
|
|
*/
|
|
bool isDatabase()
|
|
{ return (m_fileOpen && ((m_fileType == KmmDb))); }
|
|
|
|
/**
|
|
* Call this to see if the MyMoneyFile contains any unsaved data.
|
|
*
|
|
* @retval true if any data has been modified but not saved
|
|
* @retval false otherwise
|
|
*/
|
|
bool dirty(void);
|
|
|
|
/**
|
|
* Close the currently opened file and create an empty new file.
|
|
*
|
|
* @see MyMoneyFile
|
|
*/
|
|
void newFile(void);
|
|
|
|
/**
|
|
* Moves the view up from transaction to Bank/Account view.
|
|
*/
|
|
void viewUp(void);
|
|
|
|
/**
|
|
* This method allows to set the enable state of all views (except home view)
|
|
* The argument @p state controls the availability.
|
|
*
|
|
* @param state Controls whether views are disabled @p (0), enabled @p (1) or
|
|
* enabled/disabled according to an open file @p (-1). The latter
|
|
* is the default.
|
|
*/
|
|
void enableViews(int state = -1);
|
|
|
|
KMyMoneyViewBase* addPage(const TQString& title, const TQString& icon = TQString());
|
|
|
|
void addWidget(TQWidget* w);
|
|
|
|
virtual bool showPage(int index);
|
|
|
|
/**
|
|
* check if the current view allows to create a transaction
|
|
*
|
|
* @param list list of selected transactions
|
|
* @param tooltip reference to string receiving the tooltip text
|
|
* which explains why the modify function is not available (in case
|
|
* of returning @c false)
|
|
*
|
|
* @retval true Yes, view allows to create a transaction (tooltip is not changed)
|
|
* @retval false No, view cannot to create a transaction (tooltip is updated with message)
|
|
*/
|
|
bool canCreateTransactions(const KMyMoneyRegister::SelectedTransactions& list, TQString& tooltip) const;
|
|
|
|
/**
|
|
* check if the current view allows to modify (edit/delete) the selected transactions
|
|
*
|
|
* @param list list of selected transactions
|
|
* @param tooltip reference to string receiving the tooltip text
|
|
* which explains why the modify function is not available (in case
|
|
* of returning @c false)
|
|
*
|
|
* @retval true Yes, view allows to edit/delete transactions (tooltip is not changed)
|
|
* @retval false No, view cannot edit/delete transactions (tooltip is updated with message)
|
|
*/
|
|
bool canModifyTransactions(const KMyMoneyRegister::SelectedTransactions& list, TQString& tooltip) const;
|
|
|
|
bool canDuplicateTransactions(const KMyMoneyRegister::SelectedTransactions& list, TQString& tooltip) const;
|
|
|
|
/**
|
|
* check if the current view allows to edit the selected transactions
|
|
*
|
|
* @param list list of selected transactions
|
|
* @param tooltip reference to string receiving the tooltip text
|
|
* which explains why the edit function is not available (in case
|
|
* of returning @c false)
|
|
*
|
|
* @retval true Yes, view allows to enter/edit transactions
|
|
* @retval false No, view cannot enter/edit transactions
|
|
*/
|
|
bool canEditTransactions(const KMyMoneyRegister::SelectedTransactions& list, TQString& tooltip) const;
|
|
|
|
/**
|
|
* check if the current view allows to print something
|
|
*
|
|
* @retval true Yes, view allows to print
|
|
* @retval false No, view cannot print
|
|
*/
|
|
bool canPrint(void);
|
|
|
|
TransactionEditor* startEdit(const KMyMoneyRegister::SelectedTransactions&);
|
|
|
|
bool createNewTransaction(void);
|
|
|
|
/**
|
|
* Used to start reconciliation of account @a account. It switches the
|
|
* ledger view into reconciliation mode and updates the view.
|
|
*
|
|
* @param account account which should be reconciled
|
|
* @param reconciliationDate the statement date
|
|
* @param endingBalance the ending balance entered for this account
|
|
*
|
|
* @retval true Reconciliation started
|
|
* @retval false Account cannot be reconciled
|
|
*/
|
|
bool startReconciliation(const MyMoneyAccount& account, const TQDate& reconciliationDate, const MyMoneyMoney& endingBalance);
|
|
|
|
/**
|
|
* Used to finish reconciliation of account @a account. It switches the
|
|
* ledger view to normal mode and updates the view.
|
|
*
|
|
* @param account account which should be reconciled
|
|
*/
|
|
void finishReconciliation(const MyMoneyAccount& account);
|
|
|
|
/**
|
|
* This method preloads all known currencies into the engine.
|
|
*/
|
|
void loadDefaultCurrencies(void);
|
|
|
|
void loadAncientCurrencies(void);
|
|
|
|
void showTitleBar(bool show);
|
|
|
|
public slots:
|
|
/**
|
|
* This slot writes information about the page passed as argument @p widget
|
|
* in the kmymoney2.rc file so that in can be selected automatically when
|
|
* the application is started again.
|
|
*
|
|
* @param widget pointer to page widget
|
|
*/
|
|
void slotRememberPage(TQWidget* widget);
|
|
|
|
/**
|
|
* Brings up a dialog to change the list(s) settings and saves them into the
|
|
* class KMyMoneySettings (a singleton).
|
|
*
|
|
* @see KListSettingsDlg
|
|
* Refreshs all views. Used e.g. after settings have been changed or
|
|
* data has been loaded from external sources (TQIF import).
|
|
**/
|
|
void slotRefreshViews();
|
|
|
|
/**
|
|
* Called, whenever the ledger view should pop up and a specific
|
|
* transaction in an account should be shown. If @p transaction
|
|
* is empty, the last transaction should be selected
|
|
*
|
|
* @param acc The ID of the account to be shown
|
|
* @param transaction The ID of the transaction to be selected
|
|
*/
|
|
void slotLedgerSelected(const TQString& acc, const TQString& transaction = TQString());
|
|
|
|
/**
|
|
* Called, whenever the payees view should pop up and a specific
|
|
* transaction in an account should be shown.
|
|
*
|
|
* @param payeeId The ID of the payee to be shown
|
|
* @param accountId The ID of the account to be shown
|
|
* @param transactionId The ID of the transaction to be selected
|
|
*/
|
|
void slotPayeeSelected(const TQString& payeeId, const TQString& accountId, const TQString& transactionId);
|
|
|
|
/**
|
|
* Called, whenever the schedule view should pop up and a specific
|
|
* schedule should be shown.
|
|
*
|
|
* @param schedule The ID of the schedule to be shown
|
|
*/
|
|
void slotScheduleSelected(const TQString& schedule);
|
|
|
|
/**
|
|
* Called, whenever the report view should pop up and a specific
|
|
* report should be shown.
|
|
*
|
|
* @param reportid The ID of the report to be shown
|
|
*/
|
|
void slotShowReport(const TQString& reportid);
|
|
|
|
/**
|
|
* Same as the above, but the caller passes in an actual report
|
|
* definition to be shown.
|
|
*
|
|
* @param report The report to be shown
|
|
*/
|
|
void slotShowReport(const MyMoneyReport& report);
|
|
|
|
/**
|
|
* This slot prints the current view.
|
|
*/
|
|
void slotPrintView(void);
|
|
|
|
/**
|
|
* This slot switches the view to present the home page
|
|
*/
|
|
void slotShowHomePage(void) { showPage(0); }
|
|
|
|
protected slots:
|
|
/**
|
|
* Called when the user changes the detail
|
|
* setting of the transaction register
|
|
*
|
|
* @param detailed if true, the register is shown with all details
|
|
*/
|
|
void slotShowTransactionDetail(bool detailed);
|
|
|
|
/**
|
|
* eventually replace this with KMyMoney2App::slotCurrencySetBase(void).
|
|
* it contains the same code
|
|
*
|
|
* @deprecated
|
|
*/
|
|
void slotSetBaseCurrency(const MyMoneySecurity& baseCurrency);
|
|
|
|
private:
|
|
/**
|
|
* This method is called from readFile to open a database file which
|
|
* is to be processed in 'proper' database mode, i.e. in-place updates
|
|
*
|
|
* @param dbaseURL pseudo-KURL representation of database
|
|
*
|
|
* @retval true Database opened successfully
|
|
* @retval false Could not open or read database
|
|
*/
|
|
bool openDatabase (const KURL& dbaseURL);
|
|
/**
|
|
* This method is used after a file or database has been
|
|
* read into storage, and performs various initialization tasks
|
|
*
|
|
* @retval true all went okay
|
|
* @retval false an exception occurred during this process
|
|
*/
|
|
bool initializeStorage();
|
|
/**
|
|
* This method is used by saveFile() to store the data
|
|
* either directly in the destination file if it is on
|
|
* the local file system or in a temporary file when
|
|
* the final destination is reached over a network
|
|
* protocol (e.g. FTP)
|
|
*
|
|
* @param qf pointer to TQFile representing the opened file
|
|
* @param writer pointer to the formatter
|
|
* @param plaintext whether to override any compression & encryption settings
|
|
* @param keyList TQString containing a comma separated list of keys to be used for encryption
|
|
* If @p keyList is empty, the file will be saved unencrypted
|
|
*
|
|
* @note This method will close the file when it is written.
|
|
*/
|
|
void saveToLocalFile(TQFile* qf, IMyMoneyStorageFormat* writer, bool plaintext=false, const TQString& keyList = TQString());
|
|
|
|
/**
|
|
* Internal method used by slotAccountNew() and slotAccountCategory().
|
|
*/
|
|
void accountNew(const bool createCategory);
|
|
|
|
signals:
|
|
/**
|
|
* This signal is emitted whenever a view is selected.
|
|
* The parameter @p view is identified as one of KMyMoneyView::viewID.
|
|
*/
|
|
void viewActivated(int view);
|
|
|
|
void accountSelectedForContextMenu(const MyMoneyAccount& acc);
|
|
|
|
void viewStateChanged(bool enabled);
|
|
/**
|
|
* This signal is emitted to inform the kmmFile plugin when various file actions
|
|
* occur. The Action parameter distinguishes between them.
|
|
*/
|
|
void kmmFilePlugin (unsigned int action);
|
|
|
|
/**
|
|
* Signal is emitted when reconciliation starts or ends. In case of end,
|
|
* @a account is MyMoneyAccount()
|
|
*
|
|
* @param account account for which reconciliation starts or MyMoneyAccount()
|
|
* if reconciliation ends.
|
|
* @param reconciliationDate the statement date
|
|
* @param endingBalance collected ending balance when reconciliation starts
|
|
* 0 otherwise
|
|
*/
|
|
void reconciliationStarts(const MyMoneyAccount& account, const TQDate& reconciliationDate, const MyMoneyMoney& endingBalance);
|
|
|
|
};
|
|
|
|
/**
|
|
* This class is an abstract base class that all specific views
|
|
* should be based on.
|
|
*/
|
|
class KMyMoneyViewBase : public TQWidget
|
|
{
|
|
Q_OBJECT
|
|
TQ_OBJECT
|
|
public:
|
|
KMyMoneyViewBase(TQWidget* parent, const char *name, const TQString& title);
|
|
virtual ~KMyMoneyViewBase();
|
|
|
|
void setTitle(const TQString& title);
|
|
TQVBoxLayout* layout(void) const;
|
|
void addWidget(TQWidget* w);
|
|
|
|
/**
|
|
* This method is used to edit the currently selected transactions
|
|
* The default implementation returns @p false which signals to the caller, that
|
|
* the view was not capable to edit the transactions.
|
|
*
|
|
* @retval false view was not capable to edit transactions
|
|
* @retval true view was capable to edit the transactions and did so
|
|
*/
|
|
bool editTransactions(const TQValueList<MyMoneyTransaction>& transactions) const { Q_UNUSED(transactions) return false; }
|
|
private:
|
|
/// \internal d-pointer class.
|
|
class Private;
|
|
/// \internal d-pointer instance.
|
|
Private* const d;
|
|
|
|
};
|
|
#endif
|