Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

transaction.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                           transaction.h  -  description
00003                              -------------------
00004     begin                : Tue Jun 13 2006
00005     copyright            : (C) 2000-2006 by Thomas Baumgart
00006     email                : Thomas Baumgart <ipwizard@users.sourceforge.net>
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 
00018 #ifndef TRANSACTION_H
00019 #define TRANSACTION_H
00020 
00021 // ----------------------------------------------------------------------------
00022 // QT Includes
00023 
00024 #include <qpalette.h>
00025 
00026 // ----------------------------------------------------------------------------
00027 // KDE Includes
00028 
00029 // ----------------------------------------------------------------------------
00030 // Project Includes
00031 
00032 #include <kmymoney/registeritem.h>
00033 #include <kmymoney/mymoneytransaction.h>
00034 #include <kmymoney/mymoneysplit.h>
00035 #include <kmymoney/mymoneysecurity.h>
00036 #include <kmymoney/selectedtransaction.h>
00037 #include <kmymoney/mymoneyaccount.h>
00038 
00039 class QTable;
00040 class TransactionEditor;
00041 class TransactionEditorContainer;
00042 
00043 namespace KMyMoneyTransactionForm {
00044   class TransactionForm;
00045 }; // namespace
00046 
00047 namespace KMyMoneyRegister {
00048 
00049 // keep the following list in sync with code in the constructor
00050 // of KMyMoneyRegister::Register in register.cpp
00051 typedef enum {
00052   NumberColumn = 0,
00053   DateColumn,
00054   AccountColumn,
00055   SecurityColumn,
00056   DetailColumn,
00057   ReconcileFlagColumn,
00058   PaymentColumn,
00059   DepositColumn,
00060   QuantityColumn,
00061   PriceColumn,
00062   ValueColumn,
00063   BalanceColumn,
00064   // insert new values above this line
00065   MaxColumns
00066 } Column;
00067 
00068 class Transaction : public RegisterItem
00069 {
00070 public:
00071   Transaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
00072   virtual ~Transaction() {}
00073 
00074   virtual const char* className(void) { return "Transaction"; }
00075 
00076   bool isSelectable(void) const { return true; }
00077   bool isSelected(void) const { return m_selected; }
00078   void setSelected(bool selected);
00079 
00080   bool canHaveFocus(void) const { return true; }
00081   bool hasFocus(void) const { return m_focus; }
00082   bool hasEditorOpen(void) const { return m_inEdit; }
00083 
00084   virtual bool isScheduled(void) const { return false; }
00085 
00086   void setFocus(bool focus, bool updateLens = true);
00087 
00088   bool isErronous(void) const { return m_erronous; }
00089 
00090   virtual const QDate& sortPostDate(void) const { return m_transaction.postDate(); }
00091   virtual int sortSamePostDate(void) const { return 2; }
00092   virtual const QDate& sortEntryDate(void) const { return m_transaction.entryDate(); }
00093   virtual const QString& sortPayee(void) const { return m_payee; }
00094   virtual const MyMoneyMoney& sortValue(void) const { return m_split.shares(); }
00095   virtual const QString& sortNumber(void) const { return m_split.number(); }
00096   virtual const QCString& sortEntryOrder(void) const { return m_uniqueId; }
00097   virtual CashFlowDirection sortType(void) const { return m_split.shares().isNegative() ? Payment : Deposit; }
00098   virtual const QString& sortCategory(void) const { return m_category; }
00099   virtual MyMoneySplit::reconcileFlagE sortReconcileState(void) const { return m_split.reconcileFlag(); }
00100 
00101   virtual const QCString& id(void) const { return m_uniqueId; }
00102   const MyMoneyTransaction& transaction(void) const { return m_transaction; }
00103   const MyMoneySplit& split(void) const { return m_split; }
00104 
00105   void setBalance(const QString& balance) { m_balance = balance; }
00106   const QString& balance(void) const { return m_balance; }
00107 
00108   virtual int rowHeightHint(void) const;
00109 
00129   virtual bool paintRegisterCellSetup(QPainter* painter, int& row, int& col, QRect& cellRect, QRect& textRect, QColorGroup& cg, QBrush& brush);
00130 
00140   void paintRegisterCellFocus(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg);
00141 
00154   virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
00155   virtual void paintRegisterCellText(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg, int align, const QString& txt);
00156   virtual void paintRegisterCellBackground(QPainter* painter, int row, int col, const QRect& r, const QBrush& backgroundBrush);
00157   virtual void paintRegisterGrid(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg) const;
00158   virtual void paintRegisterIcons(QPainter* painter, int row, int col, const QRect& r, const QColorGroup& cg);
00159 
00160   virtual void paintFormCell(QPainter* /* painter */, int /* row */, int /* col */, const QRect& /* r */, bool /* selected */, const QColorGroup& /* cg */);
00161 
00162   virtual bool formCellText(QString& /* txt */, int& /* align */, int /* row */, int /* col */, QPainter* /* painter */) { return false; }
00163   virtual void registerCellText(QString& /* txt */, int& /* align */, int /* row */, int /* col */, QPainter* /* painter */) {}
00164   virtual int registerColWidth(int /* col */, const QFontMetrics& /* cellFontMetrics */) { return 0; }
00165 
00169   void registerCellText(QString& txt, int row, int col);
00170 
00171   virtual int formRowHeight(int row);
00172   virtual int formRowHeight(void) const;
00173 
00174   virtual void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
00175   virtual void setupFormPalette(QMap<QString, QWidget*>& editWidgets);
00176   virtual void setupRegisterPalette(QMap<QString, QWidget*>& editWidgets);
00177   virtual void loadTab(KMyMoneyTransactionForm::TransactionForm* form) = 0;
00178 
00179   virtual void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets) = 0;
00180   virtual void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets) = 0;
00181   virtual void tabOrderInForm(QWidgetList& tabOrderWidgets) const = 0;
00182   virtual void tabOrderInRegister(QWidgetList& tabOrderWidgets) const = 0;
00183 
00184   QWidget* focusWidget(QWidget*) const;
00185   void arrangeWidget(QTable* tbl, int row, int col, QWidget* w) const;
00186 
00187   bool haveNumberField(void) const;
00188 
00189   bool matches(const QString&) const;
00190 
00202   virtual bool maybeTip(const QPoint& relpos, int row, int col, QRect& r, QString& msg);
00203 
00214   virtual int numRowsRegister(bool expanded) const = 0;
00215 
00216   virtual int numRowsRegister(void) const = 0;
00217 
00218   void leaveEditMode(void);
00219   void startEditMode(void);
00220 
00224   virtual TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) = 0;
00225 
00226   virtual void setVisible(bool visible);
00227 
00228   virtual void setShowBalance(bool showBalance);
00229 
00234   virtual bool showRowInForm(int row) const { Q_UNUSED(row) return true; }
00235 
00240   virtual void setShowRowInForm(int row, bool show) { Q_UNUSED(row); Q_UNUSED(show) }
00241 
00242   virtual void setReducedIntensity(bool reduced) { m_reducedIntensity = reduced; }
00243 
00244 protected:
00245   virtual void markAsErronous(QPainter* p, int row, int col, const QRect& r);
00246   virtual void markAttachment(QPainter* painter, int row, int col, const QRect& r);
00247 
00256   QString reconcileState(bool text = true) const;
00257 
00264   void singleLineMemo(QString& txt, const MyMoneySplit& split) const;
00265 
00266   virtual void setupPalette(const QPalette& palette, QMap<QString, QWidget*>& editWidgets);
00267 
00268 protected:
00269   MyMoneyTransaction      m_transaction;
00270   MyMoneySplit            m_split;
00271   MyMoneyAccount          m_account;
00272   QTable*                 m_form;
00273   QString                 m_category;
00274   QString                 m_payee;
00275   QString                 m_payeeHeader;
00276   QString                 m_balance;
00277   QString                 m_categoryHeader;
00278   QCString                m_splitCurrencyId;
00279   QCString                m_uniqueId;
00280   int                     m_formRowHeight;
00281   bool                    m_selected;
00282   bool                    m_focus;
00283   bool                    m_erronous;
00284   bool                    m_inEdit;
00285   bool                    m_inRegisterEdit;
00286   bool                    m_showBalance;
00287   bool                    m_reducedIntensity;
00288 };
00289 
00290 class StdTransaction : public Transaction
00291 {
00292 public:
00293   StdTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
00294   virtual ~StdTransaction() {}
00295 
00296   virtual const char* className(void) { return "StdTransaction"; }
00297 
00298   bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00299   void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00300 
00301   int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
00302   void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
00303   void loadTab(KMyMoneyTransactionForm::TransactionForm* form);
00304 
00305   int numColsForm(void) const { return 4; }
00306 
00307   void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
00308   void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
00309   void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
00310   void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
00311 
00312   int numRowsRegister(bool expanded) const;
00313 
00317   int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
00318 
00319   TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
00320 
00325   virtual bool showRowInForm(int row) const;
00326 
00331   virtual void setShowRowInForm(int row, bool show);
00332 
00333 protected:
00334   void setupFormHeader(const QCString& id);
00335 
00336 private:
00337   bool m_showAccountRow;
00338 };
00339 
00340 class InvestTransaction : public Transaction
00341 {
00342 public:
00343   InvestTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
00344   virtual ~InvestTransaction() {}
00345 
00346   virtual const QString& sortSecurity(void) const { return m_security.name(); }
00347   virtual const char* className(void) { return "InvestTransaction"; }
00348 
00349   // virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
00350 
00351   bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00352   void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00353 
00354   int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
00355   void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
00356 
00360   void loadTab(KMyMoneyTransactionForm::TransactionForm* /* form */) {}
00361 
00362   int numColsForm(void) const { return 4; }
00363 
00364   void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
00365   void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
00366   void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
00367   void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
00368 
00369   int numRowsRegister(bool expanded) const;
00370 
00374   int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
00375 
00376   TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
00377 
00378   void splits(MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& feeSplits) const;
00379 
00380 protected:
00381   bool haveShares(void) const;
00382   bool haveFees(void) const;
00383   bool haveInterest(void) const;
00384   bool havePrice(void) const;
00385   bool haveAmount(void) const;
00386   bool haveAssetAccount(void) const;
00387   bool haveSplitRatio(void) const;
00388 
00396   void activity(QString& txt, MyMoneySplit::investTransactionTypeE type) const;
00397 
00398 private:
00399   QValueList<MyMoneySplit>  m_feeSplits;
00400   QValueList<MyMoneySplit>  m_interestSplits;
00401   MyMoneySplit              m_assetAccountSplit;
00402   MyMoneySecurity           m_security;
00403   MyMoneySecurity           m_currency;
00404   MyMoneySplit::investTransactionTypeE    m_transactionType;
00405   QString                   m_feeCategory;
00406   QString                   m_interestCategory;
00407   MyMoneyMoney              m_feeAmount;
00408   MyMoneyMoney              m_interestAmount;
00409   MyMoneyMoney              m_totalAmount;
00410 };
00411 
00412 }; // namespace
00413 
00414 #endif
00415 // vim:cin:si:ai:et:ts=2:sw=2:
00416 

Generated on Mon Nov 17 11:59:20 2008 for KMyMoney by  doxygen 1.4.1