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/kmymoneysplittable.h

266 lines
8.4 KiB

/***************************************************************************
kmymoneysplittable.h - description
-------------------
begin : Thu Jan 10 2002
copyright : (C) 2000-2002 by Michael Edwardes
email : mte@users.sourceforge.net
Javier Campos Morales <javi_c@users.sourceforge.net>
Felix Rodriguez <frodriguez@users.sourceforge.net>
John C <thetacoturtle@users.sourceforge.net>
Thomas Baumgart <ipwizard@users.sourceforge.net>
Kevin Tambascio <ktambascio@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 KMYMONEYSPLITTABLE_H
#define KMYMONEYSPLITTABLE_H
// ----------------------------------------------------------------------------
// QT Includes
#include <tqwidget.h>
#include <tqtable.h>
#include <tqwidgetlist.h>
#include <tqguardedptr.h>
// ----------------------------------------------------------------------------
// KDE Includes
class KPopupMenu;
class KPushButton;
// ----------------------------------------------------------------------------
// Project Includes
#include "../mymoney/mymoneytransaction.h"
#include "../mymoney/mymoneyaccount.h"
class KMyMoneyCategory;
class kMyMoneyLineEdit;
class kMyMoneyEdit;
/**
* @author Thomas Baumgart
*/
class kMyMoneySplitTable : public TQTable
{
Q_OBJECT
public:
kMyMoneySplitTable(TQWidget *parent=0, const char *name=0);
virtual ~kMyMoneySplitTable();
void paintCell(TQPainter *p, int row, int col, const TQRect& r, bool /*selected*/);
void paintFocus(TQPainter *p, const TQRect &cr);
/**
* This method is used to load the widget with the information about
* the transaction @p t. The split referencing the account @p acc is
* not shown in the widget.
*
* @param t reference to transaction to be shown/modified
* @param s reference to split that is to be hidden
* @param acc reference to account
*/
void setTransaction(const MyMoneyTransaction& t, const MyMoneySplit& s, const MyMoneyAccount& acc);
/**
* This method is used to retrieve the transaction from the widget.
*/
const MyMoneyTransaction& transaction(void) const { return m_transaction; }
/**
* Returns a list of MyMoneySplit objects. It contains all but the one
* referencing the account passed in setTransaction().
*
* @param t reference to transaction
* @return list of splits
*/
const TQValueList<MyMoneySplit> getSplits(const MyMoneyTransaction& t) const;
void setup(const TQMap<TQString, MyMoneyMoney>& priceInfo);
protected:
void contentsMousePressEvent( TQMouseEvent* e );
void contentsMouseReleaseEvent( TQMouseEvent* e );
void contentsMouseDoubleClickEvent( TQMouseEvent* e );
bool eventFilter(TQObject *o, TQEvent *e);
void endEdit(int row, int col, bool accept, bool replace );
void resizeEvent(TQResizeEvent*);
TQWidget* createEditWidgets(void);
void destroyEditWidgets(void);
/**
* This method handles the focus of the keyboard. When in edit mode
* (m_editCategory widget is visible) the keyboard focus is handled
* according to the widgets that are referenced in m_tabOrderWidgets.
* If not in edit mode, the base class functionality is provided.
*
* @param next true if forward-tab, false if backward-tab was
* pressed by the user
*/
virtual bool focusNextPrevChild(bool next);
void addToTabOrder(TQWidget* w);
/**
* convenience function for setCurrentCell(int row, int col)
*/
void setCurrentCell(int row) { setCurrentCell(row, 0); }
void updateTransactionTableSize(void);
/**
* This method returns the current state of the inline editing mode
*
* @return true if inline edit mode is on, false otherwise
*/
bool isEditMode(void) const;
/**
* This method retuns the background color for a given @p row.
*
* @param row the row in question
* @return the color as TQColor object
*/
const TQColor rowBackgroundColor(const int row) const;
void endEdit(bool keyboardDriven);
public slots:
/** No descriptions */
virtual void setCurrentCell(int row, int col);
virtual void setNumRows(int r);
TQWidget* slotStartEdit(void);
void slotEndEdit(void);
void slotEndEditKeyboard(void);
void slotDeleteSplit(void);
void slotCancelEdit(void);
void slotDuplicateSplit(void);
protected slots:
virtual void columnWidthChanged(int col);
/// move the focus to the selected @p row.
void slotSetFocus(int row, int col = 0, int button = Qt::LeftButton, const TQPoint & mousePos = TQPoint(0, 0));
/**
* Calling this slot refills the widget with the data
* passed in the argument @p t.
*
* @param t reference to transaction data
*/
void slotUpdateData(const MyMoneyTransaction& t);
void slotLoadEditWidgets(void);
signals:
/**
* This signal is emitted whenever the return key is pressed
* and the widget is not in edit mode.
*/
void escapePressed(void);
/**
* This signal is emitted whenever the return key is pressed
* and the widget is not in edit mode.
*/
void returnPressed(void);
/**
* This signal is emitted whenever the transaction data has been changed
*
* @param t modified transaction data
*/
void transactionChanged(const MyMoneyTransaction& t);
/**
* This signal is sent out, when a new category needs to be created
* @sa KMyMoneyCombo::createItem()
*
* @param txt The name of the category to be created
* @param id A connected slot should store the id of the created object in this variable
*/
void createCategory(const TQString& txt, TQString& id);
/**
* Signal is emitted, if any of the widgets enters (@a state equals @a true)
* or leaves (@a state equals @a false) object creation mode.
*
* @param state Enter (@a true) or leave (@a false) object creation
*/
void objectCreation(bool state);
private:
/// the currently selected row (will be printed as selected)
int m_currentRow;
/// the number of rows filled with data
int m_maxRows;
/// indication if inline editing mode is on or not
bool m_editMode;
MyMoneyTransaction m_transaction;
MyMoneyAccount m_account;
MyMoneySplit m_split;
MyMoneySplit m_hiddenSplit;
unsigned m_amountWidth;
/**
* This member keeps a pointer to the context menu
*/
KPopupMenu* m_contextMenu;
/// keeps the id of the delete entry in the context menu
int m_contextMenuDelete;
/// keeps the id of the duplicate entry in the context menu
int m_contextMenuDuplicate;
/**
* This member contains a pointer to the input widget for the category.
* The widget will be created and destroyed dynamically in createInputWidgets()
* and destroyInputWidgets().
*/
TQGuardedPtr<KMyMoneyCategory> m_editCategory;
/**
* This member contains a pointer to the input widget for the memo.
* The widget will be created and destroyed dynamically in createInputWidgets()
* and destroyInputWidgets().
*/
TQGuardedPtr<kMyMoneyLineEdit> m_editMemo;
/**
* This member contains a pointer to the input widget for the amount.
* The widget will be created and destroyed dynamically in createInputWidgets()
* and destroyInputWidgets().
*/
TQGuardedPtr<kMyMoneyEdit> m_editAmount;
/**
* This member keeps the tab order for the above widgets
*/
TQWidgetList m_tabOrderWidgets;
TQGuardedPtr<TQFrame> m_registerButtonFrame;
TQGuardedPtr<KPushButton> m_registerEnterButton;
TQGuardedPtr<KPushButton> m_registerCancelButton;
TQMap<TQString, MyMoneyMoney> m_priceInfo;
};
#endif