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.
247 lines
7.4 KiB
247 lines
7.4 KiB
15 years ago
|
/* This file is part of the KDE project
|
||
|
Copyright (C) 2002, Rob Buis(buis@kde.org)
|
||
|
Copyright (C) 2004, Nicolas GOUTTE <goutte@kde.org>
|
||
|
|
||
|
This library is free software; you can redistribute it and/or
|
||
|
modify it under the terms of the GNU Library General Public
|
||
|
License as published by the Free Software Foundation; either
|
||
|
version 2 of the License, or (at your option) any later version.
|
||
|
|
||
|
This library is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
Library General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU Library General Public License
|
||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
* Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
#ifndef __KOUNITWIDGETS_H__
|
||
|
#define __KOUNITWIDGETS_H__
|
||
|
|
||
|
#include <knuminput.h>
|
||
|
#include <knumvalidator.h>
|
||
|
#include <klineedit.h>
|
||
|
#include <kcombobox.h>
|
||
|
#include <KoUnit.h>
|
||
|
#include <koffice_export.h>
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------
|
||
|
// Support classes
|
||
|
|
||
|
|
||
|
class KoUnitDoubleBase;
|
||
|
|
||
|
// ### TODO: put it out of the public header file (if possible)
|
||
|
/**
|
||
|
* Validator for the unit widget classes
|
||
|
* \internal
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleValidator : public KDoubleValidator
|
||
|
{
|
||
|
public:
|
||
|
KoUnitDoubleValidator( KoUnitDoubleBase *base, QObject *parent, const char *name = 0 );
|
||
|
|
||
|
virtual QValidator::State validate( QString &, int & ) const;
|
||
|
|
||
|
private:
|
||
|
KoUnitDoubleBase *m_base;
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Base for the unit widgets
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleBase
|
||
|
{
|
||
|
public:
|
||
|
KoUnitDoubleBase( KoUnit::Unit unit, unsigned int precision ) : m_unit( unit ), m_precision( precision ) {}
|
||
|
virtual ~KoUnitDoubleBase() {}
|
||
|
|
||
|
virtual void changeValue( double ) = 0;
|
||
|
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT ) = 0;
|
||
|
|
||
|
void setValueInUnit( double value, KoUnit::Unit unit )
|
||
|
{
|
||
|
changeValue( KoUnit::ptToUnit( KoUnit::fromUserValue( value, unit ), m_unit ) );
|
||
|
}
|
||
|
|
||
|
void setPrecision( unsigned int precision ) { m_precision = precision; };
|
||
|
|
||
|
protected:
|
||
|
friend class KoUnitDoubleValidator;
|
||
|
/**
|
||
|
* Transform the double in a nice text, using locale symbols
|
||
|
* @param value the number as double
|
||
|
* @return the resulting string
|
||
|
*/
|
||
|
QString getVisibleText( double value ) const;
|
||
|
/**
|
||
|
* Transfrom a string into a double, while taking care of locale specific symbols.
|
||
|
* @param str the string to transform into a number
|
||
|
* @param ok true, if the conversion was succesful
|
||
|
* @return the value as double
|
||
|
*/
|
||
|
double toDouble( const QString& str, bool* ok ) const;
|
||
|
|
||
|
protected:
|
||
|
KoUnitDoubleValidator *m_validator;
|
||
|
KoUnit::Unit m_unit;
|
||
|
unsigned int m_precision;
|
||
|
};
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------
|
||
|
// Widget classes
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Spin box for double precision numbers with unit display
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleSpinBox : public KDoubleSpinBox, public KoUnitDoubleBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
KoUnitDoubleSpinBox( QWidget *parent = 0L, const char *name = 0L );
|
||
|
// lower, upper, step and value are in pt
|
||
|
KoUnitDoubleSpinBox( 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 );
|
||
|
// added so the class can be used in .ui files(by Tymoteusz Majewski, maju7@o2.pl)
|
||
|
virtual void changeValue( double );
|
||
|
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
|
||
|
|
||
|
/// @return the current value, converted in points
|
||
|
double value( void ) const;
|
||
|
|
||
|
/// Set minimum value in points.
|
||
|
void setMinValue(double min);
|
||
|
|
||
|
/// Set maximum value in points.
|
||
|
void setMaxValue(double max);
|
||
|
|
||
|
/// Set step size in the current unit.
|
||
|
void setLineStep(double step);
|
||
|
|
||
|
/// Set step size in points.
|
||
|
void setLineStepPt(double step);
|
||
|
|
||
|
/// Set minimum, maximum value and the step size (all in points) (by Tymoteusz Majewski, maju7@o2.pl)
|
||
|
void setMinMaxStep( double min, double max, double step );
|
||
|
|
||
|
signals:
|
||
|
/// emitted like valueChanged in the parent, but this one emits the point value
|
||
|
void valueChangedPt( double );
|
||
|
|
||
|
|
||
|
private:
|
||
|
double m_lowerInPoints; ///< lowest value in points
|
||
|
double m_upperInPoints; ///< highest value in points
|
||
|
double m_stepInPoints; ///< step in points
|
||
|
|
||
|
private slots:
|
||
|
// exists to do emits for valueChangedPt
|
||
|
void privateValueChanged();
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Line edit for double precision numbers with unit display
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleLineEdit : public KLineEdit, public KoUnitDoubleBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
KoUnitDoubleLineEdit( QWidget *parent = 0L, const char *name = 0L );
|
||
|
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 );
|
||
|
|
||
|
virtual void changeValue( double );
|
||
|
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
|
||
|
|
||
|
/// @return the current value, converted in points
|
||
|
double value( void ) const;
|
||
|
|
||
|
protected:
|
||
|
bool eventFilter( QObject* obj, QEvent* ev );
|
||
|
|
||
|
private:
|
||
|
double m_value;
|
||
|
double m_lower;
|
||
|
double m_upper;
|
||
|
double m_lowerInPoints; ///< lowest value in points
|
||
|
double m_upperInPoints; ///< highest value in points
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Combo box for double precision numbers with unit display
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleComboBox : public KComboBox, public KoUnitDoubleBase
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
KoUnitDoubleComboBox( QWidget *parent = 0L, const char *name = 0L );
|
||
|
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 );
|
||
|
|
||
|
virtual void changeValue( double );
|
||
|
void updateValue( double );
|
||
|
virtual void setUnit( KoUnit::Unit = KoUnit::U_PT );
|
||
|
|
||
|
/// @return the current value, converted in points
|
||
|
double value( void ) const;
|
||
|
void insertItem( double, int index = -1 );
|
||
|
|
||
|
protected:
|
||
|
bool eventFilter( QObject* obj, QEvent* ev );
|
||
|
|
||
|
signals:
|
||
|
void valueChanged(double);
|
||
|
|
||
|
private slots:
|
||
|
void slotActivated( int );
|
||
|
|
||
|
protected:
|
||
|
double m_value;
|
||
|
double m_lower;
|
||
|
double m_upper;
|
||
|
double m_lowerInPoints; ///< lowest value in points
|
||
|
double m_upperInPoints; ///< highest value in points
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Combo box (with spin control) for double precision numbers with unit display
|
||
|
* \since 1.4 (change of behavior)
|
||
|
*/
|
||
|
class KOFFICEUI_EXPORT KoUnitDoubleSpinComboBox : public QWidget
|
||
|
{
|
||
|
Q_OBJECT
|
||
|
public:
|
||
|
KoUnitDoubleSpinComboBox( QWidget *parent = 0L, const char *name = 0L );
|
||
|
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 );
|
||
|
|
||
|
void insertItem( double, int index = -1 );
|
||
|
void updateValue( double );
|
||
|
/// @return the current value, converted in points
|
||
|
double value( void ) const;
|
||
|
|
||
|
signals:
|
||
|
void valueChanged(double);
|
||
|
|
||
|
private slots:
|
||
|
void slotUpClicked();
|
||
|
void slotDownClicked();
|
||
|
|
||
|
private:
|
||
|
KoUnitDoubleComboBox *m_combo;
|
||
|
double m_step;
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|