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.
kmymoney/kmymoney2/dialogs/investtransactioneditor.h

175 lines
7.0 KiB

/***************************************************************************
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
TQ_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