/*************************************************************************** investtransactioneditor.h ---------- begin : Fri Dec 15 2006 copyright : (C) 2006 by Thomas Baumgart email : Thomas Baumgart <ipwizard@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 INVESTMENTTRANSACTIONEDITOR_H #define INVESTMENTTRANSACTIONEDITOR_H // ---------------------------------------------------------------------------- // QT Includes // ---------------------------------------------------------------------------- // KDE Includes // ---------------------------------------------------------------------------- // Project Includes #include <kmymoney/transactioneditor.h> class InvestTransactionEditor : public TransactionEditor { friend class InvestTransactionEditorPrivate; Q_OBJECT public: typedef enum { PricePerShare = 1, PricePerTransaction } priceModeE; InvestTransactionEditor(); InvestTransactionEditor(TransactionEditorContainer* regForm, KMyMoneyRegister::InvestTransaction* item, const KMyMoneyRegister::SelectedTransactions& list, const TQDate& lastPostDate); virtual ~InvestTransactionEditor(); /** * This method returns information about the completeness of the data * entered. This can be used to control the availability of the * 'Enter transaction' action. * * @retval true if entering the transaction into the engine * @retval false if not enough information is present to enter the * transaction into the engine * * @param reason will be filled with a string about the reason why the * completeness is not reached. Empty if the return value * is @c true. * * @sa transactionDataSufficient() */ virtual bool isComplete(TQString& reason) const; virtual TQWidget* firstWidget(void) const; virtual bool fixTransactionCommodity(const MyMoneyAccount& /* account */) { return true; } void totalAmount(MyMoneyMoney& amount) const; static void dissectTransaction(const MyMoneyTransaction& transaction, const MyMoneySplit& split, MyMoneySplit& assetAccountSplit, TQValueList<MyMoneySplit>& feeSplits, TQValueList<MyMoneySplit>& interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency, MyMoneySplit::investTransactionTypeE& transactionType); bool setupPrice(const MyMoneyTransaction& t, MyMoneySplit& split); /** * This method creates a transaction based on the contents of the current widgets, * the splits in m_split in single selection mode or an existing transaction/split * and the contents of the widgets in multi selection mode. * * The split referencing the current account is returned as the first split in the * transaction's split list. * * @param t reference to created transaction * @param torig the original transaction * @param sorig the original split * * @param skipPriceDialog if @p true the user will not be requested for price information * (defaults to @p false) * * @return @p false if aborted by user, @p true otherwise * * @note Usually not used directly. If unsure, use enterTransactions() instead. */ bool createTransaction(MyMoneyTransaction& t, const MyMoneyTransaction& torig, const MyMoneySplit& sorig, bool skipPriceDialog = false); priceModeE priceMode(void) const; const MyMoneySecurity& security(void) const { return m_security; } protected slots: void slotCreateSecurity(const TQString& name, TQString& id); void slotCreateFeeCategory(const TQString& name, TQString& id); void slotCreateInterestCategory(const TQString& name, TQString& id); int slotEditInterestSplits(void); int slotEditFeeSplits(void); void slotReloadEditWidgets(void); void slotUpdateActivity(MyMoneySplit::investTransactionTypeE); void slotUpdateSecurity(const TQString& stockId); void slotUpdateInterestCategory(const TQString& id); void slotUpdateInterestVisibility(const TQString&); void slotUpdateFeeCategory(const TQString& id); void slotUpdateFeeVisibility(const TQString&); void slotUpdateTotalAmount(void); protected: /** * This method creates all necessary widgets for this transaction editor. * All signals will be connected to the relevant slots. */ void createEditWidgets(void); /** * This method (re-)loads the widgets with the transaction information * contained in @a m_transaction and @a m_split. * * @param action preset the edit wigdets for @a action if no transaction * is present */ void loadEditWidgets(KMyMoneyRegister::Action action = KMyMoneyRegister::ActionNone); void activityFactory(MyMoneySplit::investTransactionTypeE type); MyMoneyMoney subtotal(const TQValueList<MyMoneySplit>& splits) const; /** * This method creates a transaction to be used for the split fee/interest editor. * It has a reference to a phony account and the splits contained in @a splits . */ bool createPseudoTransaction(MyMoneyTransaction& t, const TQValueList<MyMoneySplit>& splits); /** * Convenience method used by slotEditInterestSplits() and slotEditFeeSplits(). * * @param categoryWidgetName name of the category widget * @param amountWidgetName name of the amount widget * @param splits the splits that make up the transaction to be edited * @param isIncome @c false for fees, @c true for interest * @param slotEditSplits name of the slot to be connected to the focusIn signal of the * category widget named @p categoryWidgetName in case of multiple splits * in @p splits . */ int editSplits(const TQString& categoryWidgetName, const TQString& amountWidgetName, TQValueList<MyMoneySplit>& splits, bool isIncome, const char* slotEditSplits); void updatePriceMode(const MyMoneySplit& split = MyMoneySplit()); void setupFinalWidgets(void); private: MyMoneySplit m_assetAccountSplit; TQValueList<MyMoneySplit> m_interestSplits; TQValueList<MyMoneySplit> m_feeSplits; MyMoneySecurity m_security; MyMoneySecurity m_currency; MyMoneySplit::investTransactionTypeE m_transactionType; /// \internal d-pointer class. class Private; /// \internal d-pointer instance. Private* const d; }; #endif