00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef TRANSACTION_H
00019 #define TRANSACTION_H
00020
00021
00022
00023
00024 #include <qpalette.h>
00025
00026
00027
00028
00029
00030
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 };
00046
00047 namespace KMyMoneyRegister {
00048
00049
00050
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
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* , int , int , const QRect& , bool , const QColorGroup& );
00161
00162 virtual bool formCellText(QString& , int& , int , int , QPainter* ) { return false; }
00163 virtual void registerCellText(QString& , int& , int , int , QPainter* ) {}
00164 virtual int registerColWidth(int , const QFontMetrics& ) { 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
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* ) {}
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 };
00417
00418 #endif
00419
00420