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 QString& 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 QString& 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 MyMoneyMoney& balance) { m_balance = balance; }
00106   const MyMoneyMoney& 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   virtual KMyMoneyRegister::Action actionType(void) const = 0;
00185 
00186   QWidget* focusWidget(QWidget*) const;
00187   void arrangeWidget(QTable* tbl, int row, int col, QWidget* w) const;
00188 
00189   bool haveNumberField(void) const;
00190 
00191   bool matches(const QString&) const;
00192 
00204   virtual bool maybeTip(const QPoint& relpos, int row, int col, QRect& r, QString& msg);
00205 
00216   virtual int numRowsRegister(bool expanded) const = 0;
00217 
00218   virtual int numRowsRegister(void) const = 0;
00219 
00220   void leaveEditMode(void);
00221   void startEditMode(void);
00222 
00226   virtual TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate) = 0;
00227 
00228   virtual void setVisible(bool visible);
00229 
00230   virtual void setShowBalance(bool showBalance);
00231 
00236   virtual bool showRowInForm(int row) const { Q_UNUSED(row) return true; }
00237 
00242   virtual void setShowRowInForm(int row, bool show) { Q_UNUSED(row); Q_UNUSED(show) }
00243 
00244   virtual void setReducedIntensity(bool reduced) { m_reducedIntensity = reduced; }
00245 
00246 protected:
00247   virtual void markAsErronous(QPainter* p, int row, int col, const QRect& r);
00248   virtual void markAttachment(QPainter* painter, int row, int col, const QRect& r);
00249 
00258   QString reconcileState(bool text = true) const;
00259 
00266   void singleLineMemo(QString& txt, const MyMoneySplit& split) const;
00267 
00268   virtual void setupPalette(const QPalette& palette, QMap<QString, QWidget*>& editWidgets);
00269 
00270 protected:
00271   MyMoneyTransaction      m_transaction;
00272   MyMoneySplit            m_split;
00273   MyMoneyAccount          m_account;
00274   MyMoneyMoney            m_balance;
00275   QTable*                 m_form;
00276   QString                 m_category;
00277   QString                 m_payee;
00278   QString                 m_payeeHeader;
00279   QString                 m_categoryHeader;
00280   QString                 m_splitCurrencyId;
00281   QString                 m_uniqueId;
00282   int                     m_formRowHeight;
00283   bool                    m_selected;
00284   bool                    m_focus;
00285   bool                    m_erronous;
00286   bool                    m_inEdit;
00287   bool                    m_inRegisterEdit;
00288   bool                    m_showBalance;
00289   bool                    m_reducedIntensity;
00290 };
00291 
00292 class StdTransaction : public Transaction
00293 {
00294 public:
00295   StdTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
00296   virtual ~StdTransaction() {}
00297 
00298   virtual const char* className(void) { return "StdTransaction"; }
00299 
00300   bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00301   void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00302 
00303   int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
00304   void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
00305   void loadTab(KMyMoneyTransactionForm::TransactionForm* form);
00306 
00307   int numColsForm(void) const { return 4; }
00308 
00309   void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
00310   void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
00311   void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
00312   void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
00313   KMyMoneyRegister::Action actionType(void) const;
00314 
00315   int numRowsRegister(bool expanded) const;
00316 
00320   int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
00321 
00322   TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
00323 
00328   virtual bool showRowInForm(int row) const;
00329 
00334   virtual void setShowRowInForm(int row, bool show);
00335 
00336 protected:
00337   void setupFormHeader(const QString& id);
00338 
00339 private:
00340   bool m_showAccountRow;
00341 };
00342 
00343 class InvestTransaction : public Transaction
00344 {
00345 public:
00346   InvestTransaction(Register* parent, const MyMoneyTransaction& transaction, const MyMoneySplit& split, int uniqueId);
00347   virtual ~InvestTransaction() {}
00348 
00349   virtual const QString& sortSecurity(void) const { return m_security.name(); }
00350   virtual const char* className(void) { return "InvestTransaction"; }
00351 
00352   // virtual void paintRegisterCell(QPainter* painter, int row, int col, const QRect& r, bool selected, const QColorGroup& cg);
00353 
00354   bool formCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00355   void registerCellText(QString& txt, int& align, int row, int col, QPainter* painter = 0);
00356 
00357   int registerColWidth(int col, const QFontMetrics& cellFontMetrics);
00358   void setupForm(KMyMoneyTransactionForm::TransactionForm* form);
00359 
00363   void loadTab(KMyMoneyTransactionForm::TransactionForm* /* form */) {}
00364 
00365   int numColsForm(void) const { return 4; }
00366 
00367   void arrangeWidgetsInForm(QMap<QString, QWidget*>& editWidgets);
00368   void arrangeWidgetsInRegister(QMap<QString, QWidget*>& editWidgets);
00369   void tabOrderInForm(QWidgetList& tabOrderWidgets) const;
00370   void tabOrderInRegister(QWidgetList& tabOrderWidgets) const;
00371   KMyMoneyRegister::Action actionType(void) const { return KMyMoneyRegister::ActionNone; }
00372 
00373   int numRowsRegister(bool expanded) const;
00374 
00378   int numRowsRegister(void) const { return RegisterItem::numRowsRegister(); }
00379 
00380   TransactionEditor* createEditor(TransactionEditorContainer* regForm, const KMyMoneyRegister::SelectedTransactions& list, const QDate& lastPostDate);
00381 
00382   void splits(MyMoneySplit& assetAccountSplit, QValueList<MyMoneySplit>& interestSplits, QValueList<MyMoneySplit>& feeSplits) const;
00383 
00384 protected:
00385   bool haveShares(void) const;
00386   bool haveFees(void) const;
00387   bool haveInterest(void) const;
00388   bool havePrice(void) const;
00389   bool haveAmount(void) const;
00390   bool haveAssetAccount(void) const;
00391   bool haveSplitRatio(void) const;
00392 
00400   void activity(QString& txt, MyMoneySplit::investTransactionTypeE type) const;
00401 
00402 private:
00403   QValueList<MyMoneySplit>  m_feeSplits;
00404   QValueList<MyMoneySplit>  m_interestSplits;
00405   MyMoneySplit              m_assetAccountSplit;
00406   MyMoneySecurity           m_security;
00407   MyMoneySecurity           m_currency;
00408   MyMoneySplit::investTransactionTypeE    m_transactionType;
00409   QString                   m_feeCategory;
00410   QString                   m_interestCategory;
00411   MyMoneyMoney              m_feeAmount;
00412   MyMoneyMoney              m_interestAmount;
00413   MyMoneyMoney              m_totalAmount;
00414 };
00415 
00416 }; // namespace
00417 
00418 #endif
00419 // vim:cin:si:ai:et:ts=2:sw=2:
00420 

Generated on Wed Jan 26 13:03:18 2011 for KMyMoney by  doxygen 1.5.6