summaryrefslogtreecommitdiffstats
path: root/kmymoney2/widgets/kmymoneycombo.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmymoney2/widgets/kmymoneycombo.h')
-rw-r--r--kmymoney2/widgets/kmymoneycombo.h467
1 files changed, 467 insertions, 0 deletions
diff --git a/kmymoney2/widgets/kmymoneycombo.h b/kmymoney2/widgets/kmymoneycombo.h
new file mode 100644
index 0000000..c85847d
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneycombo.h
@@ -0,0 +1,467 @@
+/***************************************************************************
+ kmymoneycombo.h - description
+ -------------------
+ begin : Mon Mar 12 2007
+ copyright : (C) 2007 by Thomas Baumgart
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 KMYMONEYCOMBO_H
+#define KMYMONEYCOMBO_H
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qtimer.h>
+#include <qmutex.h>
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <kcombobox.h>
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/mymoneyutils.h>
+#include <kmymoney/mymoneysplit.h>
+#include <kmymoney/register.h>
+#include <kmymoney/mymoneyaccount.h>
+#include <kmymoney/transaction.h>
+#include <kmymoney/mymoneypayee.h>
+#include <kmymoney/mymoneytransactionfilter.h>
+#include <kmymoney/mymoneyscheduled.h>
+
+class kMyMoneyCompletion;
+class KMyMoneySelector;
+class kMyMoneyLineEdit;
+
+/**
+ * @author Thomas Baumgart
+ */
+class KMyMoneyCombo : public KComboBox
+{
+ Q_OBJECT
+public:
+ KMyMoneyCombo(QWidget *w = 0, const char *name=0);
+ KMyMoneyCombo(bool rw, QWidget *w = 0, const char *name=0);
+
+ /**
+ * This method is used to turn on/off the hint display and to setup the appropriate text.
+ * The hint text is shown in a lighter color if the field is otherwise empty and does
+ * not have the keyboard focus.
+ *
+ * @param hint reference to text. If @a hint is empty, no hint will be shown.
+ */
+ void setHint(const QString& hint) const;
+
+ /**
+ * overridden for internal reasons.
+ *
+ * @param editable make combo box editable (@a true) or selectable only (@a false).
+ */
+ void setEditable(bool editable);
+
+ /**
+ * This method returns a pointer to the completion object of the combo box.
+ *
+ * @return pointer to kMyMoneyCompletion or derivative.
+ */
+ kMyMoneyCompletion* completion(void) const;
+
+ /**
+ * This method returns a pointer to the completion object's selector.
+ *
+ * @return pointer to KMyMoneySelector or derivative.
+ */
+ KMyMoneySelector* selector(void) const;
+
+ /**
+ * This method returns the ids of the currently selected items
+ */
+ void selectedItems(QStringList& list) const;
+
+ /**
+ * This method returns the id of the first selected item.
+ * Usage makes usually only sense when the selection mode
+ * of the associated KMyMoneySelector is QListView::Single.
+ *
+ * @sa KMyMoneySelector::setSelectionMode()
+ *
+ * @param id reference to QString containing the id. If no item
+ * is selected id will be empty.
+ */
+ void selectedItem(QString& id) const KDE_DEPRECATED;
+
+ /**
+ * This method returns the id of the first selected item.
+ * Usage makes usually only sense when the selection mode
+ * of the associated KMyMoneySelector is QListView::Single.
+ *
+ * @sa KMyMoneySelector::setSelectionMode()
+ *
+ * @return reference to QString containing the id. If no item
+ * is selected the QString will be empty.
+ */
+ const QString& selectedItem(void) const { return m_id; }
+
+ /**
+ * This method selects the item with the respective @a id.
+ *
+ * @param id reference to QString containing the id
+ */
+ void setSelectedItem(const QString& id);
+
+ /**
+ * This method checks if the position @a pos is part of the
+ * area of the drop down arrow.
+ */
+ bool isInArrowArea(const QPoint& pos) const;
+
+ void setSuppressObjectCreation(bool suppress) { m_canCreateObjects = !suppress; }
+
+ /**
+ * overridden for internal reasons, no API change
+ */
+ void setCurrentText(const QString& txt = QString()) { KComboBox::setCurrentText(txt); }
+
+ /**
+ * overridden to set the background color of the lineedit as well
+ */
+ void setPaletteBackgroundColor(const QColor& color);
+
+ /**
+ * Overridden to support our own completion box
+ */
+ QSize sizeHint() const;
+
+protected slots:
+ virtual void slotItemSelected(const QString& id);
+
+protected:
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void mousePressEvent(QMouseEvent *e);
+
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void keyPressEvent(QKeyEvent *e);
+
+ /**
+ * reimplemented to support our own popup widget
+ */
+ void paintEvent(QPaintEvent *);
+
+ /**
+ * reimplemented to support detection of new items
+ */
+ void focusOutEvent(QFocusEvent* );
+
+ /**
+ * set the widgets text area based on the item with the given @a id.
+ */
+ virtual void setCurrentTextById(const QString& id);
+
+ /**
+ * Overridden for internal reasons, no API change
+ */
+ void connectNotify(const char* signal);
+
+ /**
+ * Overridden for internal reasons, no API change
+ */
+ void disconnectNotify(const char* signal);
+
+protected:
+ /**
+ * This member keeps a pointer to the object's completion object
+ */
+ kMyMoneyCompletion* m_completion;
+
+ /**
+ * Use our own line edit to provide hint functionality
+ */
+ kMyMoneyLineEdit* m_edit;
+
+ /**
+ * The currently selected item
+ */
+ QString m_id;
+
+signals:
+ void itemSelected(const QString& id);
+ void objectCreation(bool);
+ void createItem(const QString&, QString&);
+
+private:
+ QTimer m_timer;
+ QMutex m_focusMutex;
+ /**
+ * Flag to control object creation. Use setSuppressObjectCreation()
+ * to modify it's setting. Defaults to @a false.
+ */
+ bool m_canCreateObjects;
+
+ /**
+ * Flag to check whether a focusOutEvent processing is underway or not
+ */
+ bool m_inFocusOutEvent;
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * reconciliation.
+ */
+class KMyMoneyReconcileCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyReconcileCombo(QWidget *w = 0, const char *name=0);
+
+ void setState(MyMoneySplit::reconcileFlagE state);
+ MyMoneySplit::reconcileFlagE state(void) const;
+ void removeDontCare(void);
+
+protected slots:
+ void slotSetState(const QString&);
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * actions (Deposit, Withdrawal, etc.).
+ *
+ * @deprecated
+ */
+class KMyMoneyComboAction : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyComboAction(QWidget *w = 0, const char *name=0);
+
+ void setAction(int state);
+ int action(void) const;
+ void protectItem(int id, bool protect);
+
+protected slots:
+ void slotSetAction(const QString&);
+
+signals:
+ void actionSelected(int);
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible states for
+ * actions (Deposit, Withdrawal, etc.).
+ */
+class KMyMoneyCashFlowCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ /**
+ * Create a combo box that contains the entries "Pay to", "From" and
+ * " " for don't care.
+ */
+ KMyMoneyCashFlowCombo(QWidget *w = 0, const char *name=0, MyMoneyAccount::accountTypeE type = MyMoneyAccount::Asset);
+
+ void setDirection(KMyMoneyRegister::CashFlowDirection dir);
+ KMyMoneyRegister::CashFlowDirection direction(void) const { return m_dir; }
+ void removeDontCare(void);
+
+protected slots:
+ void slotSetDirection(const QString& id);
+
+signals:
+ void directionSelected(KMyMoneyRegister::CashFlowDirection);
+
+private:
+ KMyMoneyRegister::CashFlowDirection m_dir;
+};
+
+/**
+ * @author Thomas Baumgart
+ * This class implements a combo box with the possible activities
+ * for investment transactions (buy, sell, dividend, etc.)
+ */
+class KMyMoneyActivityCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ /**
+ * Create a combo box that contains the entries "Buy", "Sell" etc.
+ */
+ KMyMoneyActivityCombo(QWidget *w = 0, const char *name=0);
+
+ void setActivity(MyMoneySplit::investTransactionTypeE activity);
+ MyMoneySplit::investTransactionTypeE activity(void) const { return m_activity; }
+
+protected slots:
+ void slotSetActivity(const QString& id);
+
+signals:
+ void activitySelected(MyMoneySplit::investTransactionTypeE);
+
+private:
+ MyMoneySplit::investTransactionTypeE m_activity;
+};
+
+/**
+ * This class implements a text based payee selector.
+ * When initially used, the widget has the functionality of a KComboBox object.
+ * Whenever a key is pressed, the set of loaded payees is searched for
+ * payees names which match the currently entered text.
+ *
+ * If any match is found a list selection box is opened and the user can use
+ * the up/down, page-up/page-down keys or the mouse to navigate in the list. If
+ * a payee is selected, the selection box is closed. Other key-strokes are
+ * directed to the parent object to manipulate the text. The visible contents of
+ * the selection box is updated with every key-stroke.
+ *
+ * This object is a replacement of the kMyMoneyPayee object and should be used
+ * for new code.
+ *
+ * @author Thomas Baumgart
+ */
+class KMyMoneyPayeeCombo : public KMyMoneyCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyPayeeCombo(QWidget* parent = 0, const char* name = 0);
+
+ void loadPayees(const QValueList<MyMoneyPayee>& list);
+};
+
+class KMyMoneyGeneralCombo : public KComboBox
+{
+ Q_OBJECT
+public:
+ KMyMoneyGeneralCombo(QWidget* parent = 0, const char* name = 0);
+ virtual ~KMyMoneyGeneralCombo();
+
+ void insertItem(const QString& txt, int id, int idx = -1);
+
+ void setItem(int id) KDE_DEPRECATED; // replace with setCurrentItem(id)
+ int item(void) const KDE_DEPRECATED; // replace with currentItem()
+
+ void setCurrentItem(int id);
+ int currentItem(void) const;
+
+ void removeItem(int id);
+
+public slots:
+ void clear(void);
+
+signals:
+ void itemSelected(int id);
+
+protected:
+ // prevent the caller to use the standard KComboBox insertItem function with a default idx
+ void insertItem(const QString&);
+
+protected slots:
+ void slotChangeItem(int idx);
+
+private:
+ /// \internal d-pointer class.
+ class Private;
+ /// \internal d-pointer instance.
+ Private* const d;
+};
+
+
+/**
+ * This class implements a time period selector
+ * @author Thomas Baumgart
+ */
+class KMyMoneyPeriodCombo : public KMyMoneyGeneralCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyPeriodCombo(QWidget* parent = 0, const char* name = 0);
+
+ MyMoneyTransactionFilter::dateOptionE currentItem(void) const;
+ void setCurrentItem(MyMoneyTransactionFilter::dateOptionE id);
+
+ /**
+ * This function returns the actual start date for the given
+ * period definition given by @p id. For user defined periods
+ * the returned value is QDate()
+ */
+ static QDate start(MyMoneyTransactionFilter::dateOptionE id);
+
+ /**
+ * This function returns the actual end date for the given
+ * period definition given by @p id. For user defined periods
+ * the returned value is QDate()
+ */
+ static QDate end(MyMoneyTransactionFilter::dateOptionE id);
+
+ // static void dates(QDate& start, QDate& end, MyMoneyTransactionFilter::dateOptionE id);
+};
+
+/**
+ * This class implements an occurence selector
+ * as a parent class for both OccurencePeriod and Frequency combos
+ *
+ * @author Colin Wright
+ */
+class KMyMoneyOccurenceCombo : public KMyMoneyGeneralCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyOccurenceCombo(QWidget* parent = 0, const char* name = 0);
+
+ MyMoneySchedule::occurenceE currentItem(void) const;
+};
+
+/**
+ * This class implements an occurence period selector
+ *
+ * @author Colin Wright
+ */
+class KMyMoneyOccurencePeriodCombo : public KMyMoneyOccurenceCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyOccurencePeriodCombo(QWidget* parent = 0, const char* name = 0);
+};
+
+/**
+ * This class implements a payment frequency selector
+ * @author Thomas Baumgart
+ */
+class KMyMoneyFrequencyCombo : public KMyMoneyOccurenceCombo
+{
+ Q_OBJECT
+public:
+ KMyMoneyFrequencyCombo(QWidget* parent = 0, const char* name = 0);
+
+ /**
+ * This method returns the number of events for the selected payment
+ * frequency (eg for yearly the return value is 1 and for monthly it
+ * is 12). In case, the frequency cannot be converted (once, every other year, etc.)
+ * the method returns 0.
+ */
+ int eventsPerYear(void) const;
+ /**
+ * This method returns the number of days between two events of
+ * the selected frequency. The return value for months is based
+ * on 30 days and the year is 360 days long.
+ */
+ int daysBetweenEvents(void) const;
+};
+
+#endif