00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#ifndef __KOUNITWIDGETS_H__
00022
#define __KOUNITWIDGETS_H__
00023
00024
#include <knuminput.h>
00025
#include <knumvalidator.h>
00026
#include <klineedit.h>
00027
#include <kcombobox.h>
00028
#include <koUnit.h>
00029
00030
class KoUnitDoubleBase;
00031
00032
class KoUnitDoubleValidator :
public KDoubleValidator
00033 {
00034
public:
00035 KoUnitDoubleValidator( KoUnitDoubleBase *base,
QObject *parent,
const char *name = 0 );
00036
00037
virtual QValidator::State validate(
QString &,
int & ) const;
00038
00039 private:
00040 KoUnitDoubleBase *m_base;
00041 };
00042
00043 class KoUnitDoubleBase
00044 {
00045
public:
00046 KoUnitDoubleBase( KoUnit::Unit unit,
unsigned int precision ) : m_unit( unit ), m_precision( precision ) {}
00047
virtual ~KoUnitDoubleBase() {}
00048
00049
virtual void changeValue(
double ) = 0;
00050
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT ) = 0;
00051
00052
void setValueInUnit(
double value, KoUnit::Unit unit )
00053 {
00054 changeValue( KoUnit::ptToUnit( KoUnit::ptFromUnit( value, unit ), m_unit ) );
00055 }
00056
00057
void setPrecision(
unsigned int precision ) { m_precision = precision; };
00058
00059
protected:
00060
friend class KoUnitDoubleValidator;
00061
00067
QString getVisibleText(
double value )
const;
00074
static double toDouble(
const QString& str,
bool* ok );
00075
00076 KoUnitDoubleValidator *m_validator;
00077 KoUnit::Unit m_unit;
00078
unsigned int m_precision;
00079 };
00080
00081
class KoUnitDoubleSpinBox :
public KDoubleSpinBox,
public KoUnitDoubleBase
00082 {
00083
public:
00084 KoUnitDoubleSpinBox(
QWidget *parent,
double lower,
double upper,
double step,
double value = 0.0,
00085 KoUnit::Unit unit = KoUnit::U_PT,
unsigned int precision = 2,
const char *name = 0 );
00086
00087
virtual void changeValue(
double );
00088
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
00089 };
00090
00091
class KoUnitDoubleLineEdit :
public KLineEdit,
public KoUnitDoubleBase
00092 {
00093
public:
00094 KoUnitDoubleLineEdit(
QWidget *parent,
double lower,
double upper,
double value = 0.0, KoUnit::Unit unit = KoUnit::U_PT,
unsigned int precision = 2,
const char *name = 0 );
00095
00096
virtual void changeValue(
double );
00097
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
00098
00099
double value()
const {
return m_value; }
00100
00101
protected:
00102
bool eventFilter(
QObject* obj,
QEvent* ev );
00103
00104
private:
00105
double m_value;
00106
double m_lower;
00107
double m_upper;
00108 };
00109
00110
class KoUnitDoubleComboBox :
public KComboBox,
public KoUnitDoubleBase
00111 {
00112 Q_OBJECT
00113
public:
00114 KoUnitDoubleComboBox(
QWidget *parent,
double lower,
double upper,
double value = 0.0, KoUnit::Unit unit = KoUnit::U_PT,
unsigned int precision = 2,
const char *name = 0 );
00115
00116
virtual void changeValue(
double );
00117
void updateValue(
double );
00118
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
00119
00120
double value()
const {
return m_value; }
00121
void insertItem(
double,
int index = -1 );
00122
00123
protected:
00124
bool eventFilter(
QObject* obj,
QEvent* ev );
00125
00126 signals:
00127
void valueChanged(
double);
00128
00129
private slots:
00130
void slotActivated(
int );
00131
00132
protected:
00133
double m_value;
00134
double m_lower;
00135
double m_upper;
00136 };
00137
00138
class KoUnitDoubleSpinComboBox :
public QWidget
00139 {
00140 Q_OBJECT
00141
public:
00142 KoUnitDoubleSpinComboBox(
QWidget *parent,
double lower,
double upper,
double step,
double value = 0.0, KoUnit::Unit unit = KoUnit::U_PT,
unsigned int precision = 2,
const char *name = 0 );
00143
00144
void insertItem(
double,
int index = -1 );
00145
void updateValue(
double );
00146
double value() const;
00147
00148 signals:
00149
void valueChanged(
double);
00150
00151 private slots:
00152
void slotUpClicked();
00153
void slotDownClicked();
00154
00155 private:
00156 KoUnitDoubleComboBox *m_combo;
00157
double m_step;
00158 };
00159
00160 #endif
00161