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) {
73 addItem(u.
name, QVariant::fromValue<Unit>(u));
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) {
90 if (itemData(k).value<
Unit>().name == unitname) {
95 qWarning()<<
KLF_FUNC_NAME<<
": unit "<<unitname<<
" not found.";
100 for (k = 0; k < count(); ++k) {
101 if (itemData(k).value<
Unit>().abbrev == unitAbbrev) {
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())
139 Unit u = itemData(index).value<
Unit>();
140 klfDbg(
"New unit selected : #"<<index<<
" = "<<u.
name) ;
151 : QDoubleSpinBox(parent)
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 setCurrentUnit(const QString &unitName)
void setShowUnitSuffix(bool show)
void setUnits(const QString &unitstrlist)
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
#define klfDbg(streamableItems)
print debug stream items
void setUnitWithSuffix(double unitfactor, const QString &suffix)
QString unitStringDescription() const
QString join(const QString &separator) const
virtual ~KLFUnitChooser()
KLFUnitSpinBox(QWidget *parent=NULL)
void valueInRefUnitChanged(double value)
virtual void changeEvent(QEvent *event)
virtual ~KLFUnitSpinBox()
KLFUnitChooser(QWidget *parent=NULL)
void setCurrentUnitIndex(int k)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
void setValueInRefUnit(double value)
void unitChanged(const QString &unitName)
void setCurrentUnitAbbrev(const QString &unitAbbrev)
void setUnit(double unitfactor)