28 #include <QStringList> 30 #include <QDoubleSpinBox> 39 connect(
this, SIGNAL(
currentIndexChanged(
int)),
this, SLOT(internalCurrentIndexChanged(
int)));
50 for (k = 0; k < unitstrlist.size(); ++k) {
52 if (parts.size() != 3) {
53 qWarning()<<
KLF_FUNC_NAME<<
": Invalid unit specification: "<<unitstrlist[k];
59 u.
factor = parts[2].toDouble();
70 for (k = 0; k < pUnits.size(); ++k) {
81 for (k = 0; k < pUnits.size(); ++k)
82 l <<
QString(
"%2=%3=%1").arg(pUnits[k].factor, 0,
'g').arg(pUnits[k].name, pUnits[k].abbrev);
89 for (k = 0; k < count(); ++k) {
95 qWarning()<<
KLF_FUNC_NAME<<
": unit "<<unitname<<
" not found.";
100 for (k = 0; k < count(); ++k) {
106 qWarning()<<
KLF_FUNC_NAME<<
": unit abbrev. "<<unitAbbrev<<
" not found.";
115 pDelayedUnitSet = pUnits[k].name;
118 emit
unitChanged(pUnits[k].factor, pUnits[k].abbrev);
124 if (event->
type() == QEvent::EnabledChange) {
125 if (isEnabled() && !pDelayedUnitSet.
isEmpty()) {
130 QComboBox::changeEvent(event);
134 void KLFUnitChooser::internalCurrentIndexChanged(
int index)
136 if (index < 0 || index >= count())
140 klfDbg(
"New unit selected : #"<<index<<
" = "<<u.
name) ;
154 pShowUnitSuffix =
true;
155 connect(
this, SIGNAL(
valueChanged(
double)),
this, SLOT(internalValueChanged(
double)));
163 double curValue = value();
164 double curMinimum = minimum();
165 double curMaximum = maximum();
166 double curUnitFactor = pUnitFactor;
167 int curPrecision = decimals();
169 klfDbg(
"unitfactor="<<unitfactor<<
" cur: val="<<curValue<<
",min="<<curMinimum<<
",max="<<curMaximum
170 <<
",prec="<<curPrecision) ;
172 pUnitFactor = unitfactor;
177 int unitRefDecimals = curPrecision - (int)( log((
double)curUnitFactor)/log((
double)10.0) + 0.5 );
179 setDecimals(unitRefDecimals + (
int)( log((
double)pUnitFactor)/log((
double)10.0) + 0.5 ) );
182 setMinimum(curMinimum * curUnitFactor / pUnitFactor);
183 setMaximum(curMaximum * curUnitFactor / pUnitFactor);
186 setValue(curValue * curUnitFactor / pUnitFactor);
193 setSuffix(
" "+suffix);
198 setValue(value / pUnitFactor);
203 pShowUnitSuffix = show;
207 void KLFUnitSpinBox::internalValueChanged(
double valueInExtUnits)
209 klfDbg(
"val in ext. units="<<valueInExtUnits<<
"; our unitfactor="<<pUnitFactor) ;
void setUnits(const QString &unitstrlist)
split(const QString &sep, SplitBehavior behavior=KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive)
void valueInRefUnitChanged(double value)
void setShowUnitSuffix(bool show)
QString unitStringDescription() const
void setCurrentUnitIndex(int k)
#define klfDbg(streamableItems)
join(const QString &separator)
virtual void changeEvent(QEvent *event)
KLFUnitChooser(QWidget *parent=NULL)
void unitChanged(const QString &unitName)
void setCurrentUnit(const QString &unitName)
virtual ~KLFUnitChooser()
addItem(const QString &text, const QVariant &userData=QVariant()
void setUnitWithSuffix(double unitfactor, const QString &suffix)
split(const QRegExp &sep, const QString &str, bool allowEmptyEntries=false)
virtual ~KLFUnitSpinBox()
void setValueInRefUnit(double value)
void setCurrentUnitAbbrev(const QString &unitAbbrev)
itemData(int index, int role=Qt::UserRole)
KLFUnitSpinBox(QWidget *parent=NULL)
void setUnit(double unitfactor)
currentIndexChanged(int index)