summaryrefslogtreecommitdiffstats
path: root/kmymoney2/widgets/kmymoneyedit.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmymoney2/widgets/kmymoneyedit.h')
-rw-r--r--kmymoney2/widgets/kmymoneyedit.h243
1 files changed, 243 insertions, 0 deletions
diff --git a/kmymoney2/widgets/kmymoneyedit.h b/kmymoney2/widgets/kmymoneyedit.h
new file mode 100644
index 0000000..6415a0c
--- /dev/null
+++ b/kmymoney2/widgets/kmymoneyedit.h
@@ -0,0 +1,243 @@
+/***************************************************************************
+ kmymoneyedit.h
+ -------------------
+ copyright : (C) 2000 by Michael Edwardes
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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 KMYMONEYEDIT_H
+#define KMYMONEYEDIT_H
+
+#include "kdecompat.h"
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qhbox.h>
+#include <qvalidator.h>
+
+class QVBox;
+class QWidget;
+
+// ----------------------------------------------------------------------------
+// KDE Includes
+
+#include <klineedit.h>
+class KPushButton;
+
+// ----------------------------------------------------------------------------
+// Project Includes
+
+#include <kmymoney/kmymoneylineedit.h>
+#include <kmymoney/mymoneysecurity.h>
+class MyMoneyMoney;
+class kMyMoneyCalculator;
+
+#if KDE_VERSION <= KDE_MAKE_VERSION(3,1,0)
+ #define KDoubleValidator QDoubleValidator
+#endif
+
+/**
+ * This class is derived from KDoubleValidator and uses
+ * the monetary symbols instead of the numeric symbols.
+ * Also, it always accepts localized input.
+ *
+ * @author Thomas Baumgart
+ */
+class kMyMoneyMoneyValidator : public QDoubleValidator
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Constuct a locale-aware KDoubleValidator with default range
+ * (whatever QDoubleValidator uses for that) and parent @p
+ * parent
+ */
+ kMyMoneyMoneyValidator( QObject * parent, const char * name=0 );
+ /**
+ * Constuct a locale-aware KDoubleValidator for range [@p bottom,@p
+ * top] and a precision of @p decimals decimals after the decimal
+ * point.
+ */
+ kMyMoneyMoneyValidator( double bottom, double top, int decimals,
+ QObject * parent, const char * name=0 );
+ /**
+ * Destructs the validator.
+ */
+ virtual ~kMyMoneyMoneyValidator() {}
+
+ /** Overloaded for internal reasons. The API is not affected. */
+ virtual QValidator::State validate( QString & input, int & pos ) const;
+};
+
+/**
+ * This class represents a widget to enter monetary values.
+ * It has an edit field and a button to select a popup
+ * calculator. The result of the calculator (if used) is
+ * stored in the edit field.
+ *
+ * @author Michael Edwardes, Thomas Baumgart
+ */
+class kMyMoneyEdit : public QHBox
+{
+ Q_OBJECT
+ Q_PROPERTY(bool calculatorButtonVisibility READ isCalculatorButtonVisible WRITE setCalculatorButtonVisible);
+ Q_PROPERTY(bool resetButtonVisibility READ isResetButtonVisible WRITE setResetButtonVisible);
+ Q_PROPERTY(bool allowEmpty READ isEmptyAllowed WRITE setAllowEmpty);
+ Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly )
+
+private:
+ QString previousText; // keep track of what has been typed
+ QString m_text; // keep track of what was the original value
+ kMyMoneyCalculator* m_calculator;
+ QVBox* m_calculatorFrame;
+ kMyMoneyLineEdit* m_edit;
+ KPushButton* m_calcButton;
+ KPushButton* m_resetButton;
+ int m_prec;
+ bool calculatorButtonVisibility;
+ bool allowEmpty;
+
+private:
+ /**
+ * Internal helper function for value() and ensureFractionalPart(void).
+ */
+ void ensureFractionalPart(QString& txt) const;
+
+protected:
+ /**
+ * This method ensures that the text version contains a
+ * fractional part.
+ */
+ void ensureFractionalPart(void);
+
+ /**
+ * This method opens the calculator and replays the key
+ * event pointed to by @p ev. If @p ev is 0, then no key
+ * event is replayed.
+ *
+ * @param ev pointer to QKeyEvent that started the calculator.
+ */
+ void calculatorOpen(QKeyEvent* ev);
+
+ /**
+ * Helper method for constructors.
+ */
+ void init(void);
+
+protected slots:
+ void theTextChanged(const QString & text);
+ void slotCalculatorResult(void);
+ void slotCalculatorOpen(void);
+
+public:
+ kMyMoneyEdit(QWidget *parent=0, const char *name=0, const int prec = -2);
+ kMyMoneyEdit(const MyMoneySecurity& eq, QWidget *parent=0, const char *name=0);
+ ~kMyMoneyEdit();
+
+ /**
+ * @deprecated Use value() instead
+ */
+ // MyMoneyMoney getMoneyValue(void) KDE_DEPRECATED;
+
+ MyMoneyMoney value(void) const;
+
+ void setValue(const MyMoneyMoney& value);
+
+ bool isValid(void) const;
+
+ virtual bool eventFilter(QObject * , QEvent * );
+
+ /**
+ * This method returns the value of the edit field in "numerator/denominator" format.
+ * If you want to get the text of the edit field, use lineedit()->text() instead.
+ */
+ QString text(void) const { return value().toString(); };
+
+ void setMinimumWidth(int w) { m_edit->setMinimumWidth(w); };
+
+ /**
+ * Set the number of fractional digits that should be shown
+ *
+ * @param prec number of fractional digits.
+ *
+ * @note should be used prior to calling loadText()
+ * @sa precision
+ */
+ void setPrecision(const int prec);
+
+ /**
+ * return the number of fractional digits
+ * @sa setPrecision
+ */
+ int precision(void) { return m_prec; };
+
+ QWidget* focusWidget(void) const;
+
+ /**
+ * This method allows to modify the behavior of the widget
+ * such that it accepts an empty value (all blank) or not.
+ * The default is to not accept an emtpy input and to
+ * convert an empty field into 0.00 upon loss of focus.
+ *
+ * @param allowed if @a true, empty input is allowed, if @a false
+ * emtpy input will be converted to 0.00
+ */
+ void setAllowEmpty(bool allowed = true);
+
+ /** Overloaded for internal reasons. The API is not affected. */
+ void setValidator(const QValidator* v);
+
+ bool isCalculatorButtonVisible(void) const;
+
+ bool isResetButtonVisible(void) const;
+
+ bool isEmptyAllowed(void) const;
+
+ KLineEdit* lineedit(void) const;
+
+ void setHint(const QString& hint) const;
+
+ bool isReadOnly(void) const;
+
+public slots:
+ void loadText(const QString& text);
+ void resetText(void);
+ void clearText(void);
+
+ void setText(const QString& txt) { setValue(MyMoneyMoney(txt)); };
+
+ /**
+ * This method allows to show/hide the calculator button of the widget.
+ * The parameter @p show controls the behavior. Default is to show the
+ * button.
+ *
+ * @param show if true, button is shown, if false it is hidden
+ */
+ void setCalculatorButtonVisible(const bool show);
+
+ void setResetButtonVisible(const bool show);
+
+ void setReadOnly(bool readOnly);
+
+signals: // Signals
+ /**
+ * This signal is sent, when the focus leaves this widget and
+ * the amount has been changed by user during this session.
+ */
+ void valueChanged(const QString& text);
+
+ void textChanged(const QString& text);
+};
+
+#endif