00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <qlayout.h>
00011 #include <qlineedit.h>
00012 #include "qwt_counter.h"
00013 #include "qwt_arrbtn.h"
00014
00024 QwtCounter::QwtCounter(QWidget *parent, const char *name ):
00025 QWidget(parent,name)
00026 {
00027 d_increment[Button1] = 1;
00028 d_increment[Button2] = 10;
00029 d_increment[Button3] = 100;
00030
00031 QHBoxLayout *layout = new QHBoxLayout(this);
00032 layout->setAutoAdd(TRUE);
00033
00034 int i;
00035 for(i=0;i<ButtonCnt;i++)
00036 {
00037 QwtArrowButton *btn =
00038 new QwtArrowButton(i+1, Qt::DownArrow,this);
00039 btn->setFocusPolicy(StrongFocus);
00040
00041 connect(btn, SIGNAL(released()), SLOT(btnReleased()));
00042 connect(btn, SIGNAL(clicked()), SLOT(btnClicked()));
00043
00044 d_buttonDown[i] = btn;
00045 }
00046
00047 d_valueEdit = new QLineEdit(this);
00048 d_valueEdit->setReadOnly(TRUE);
00049 d_valueEdit->setFocusPolicy(NoFocus);
00050
00051 layout->setStretchFactor(d_valueEdit, 10);
00052
00053 for(i=0;i<ButtonCnt;i++)
00054 {
00055 QwtArrowButton *btn =
00056 new QwtArrowButton(i+1, Qt::UpArrow, this);
00057 btn->setFocusPolicy(StrongFocus);
00058
00059 connect(btn, SIGNAL(released()), SLOT(btnReleased()));
00060 connect(btn, SIGNAL(clicked()), SLOT(btnClicked()));
00061
00062 d_buttonUp[i] = btn;
00063 }
00064
00065 setNumButtons(2);
00066 setRange(0.0,1.0,0.001);
00067 setValue(0.0);
00068 }
00069
00079 void QwtCounter::setIncSteps(QwtCounter::Button btn, int nSteps)
00080 {
00081 if (( btn >= 0) && (btn < ButtonCnt))
00082 d_increment[btn] = nSteps;
00083 }
00084
00091 int QwtCounter::incSteps(QwtCounter::Button btn) const
00092 {
00093 if (( btn >= 0) && (btn < ButtonCnt))
00094 return d_increment[btn];
00095
00096 return 0;
00097 }
00098
00106 void QwtCounter::setValue(double v)
00107 {
00108 QwtDblRange::setValue(v);
00109
00110 showNum(value());
00111 updateButtons();
00112 }
00113
00117 void QwtCounter::valueChange()
00118 {
00119 showNum(value());
00120 updateButtons();
00121
00122 emit valueChanged(value());
00123 }
00124
00128 void QwtCounter::updateButtons()
00129 {
00130 for ( int i = 0; i < ButtonCnt; i++ )
00131 {
00132 d_buttonDown[i]->setEnabled(value() > minValue());
00133 d_buttonUp[i]->setEnabled(value() < maxValue());
00134 }
00135 }
00136
00141 void QwtCounter::setNumButtons(int n)
00142 {
00143 if ( n<0 || n>ButtonCnt )
00144 return;
00145
00146 for ( int i = 0; i < ButtonCnt; i++ )
00147 {
00148 if ( i < n )
00149 {
00150 d_buttonDown[i]->show();
00151 d_buttonUp[i]->show();
00152 }
00153 else
00154 {
00155 d_buttonDown[i]->hide();
00156 d_buttonUp[i]->hide();
00157 }
00158 }
00159
00160 d_nButtons = n;
00161 }
00162
00166 int QwtCounter::numButtons() const
00167 {
00168 return d_nButtons;
00169 }
00170
00172 void QwtCounter::showNum(double d)
00173 {
00174 QString v;
00175 v.setNum(d);
00176
00177 d_valueEdit->setText(v);
00178 d_valueEdit->setCursorPosition(0);
00179 }
00180
00182 void QwtCounter::btnClicked()
00183 {
00184 for ( int i = 0; i < ButtonCnt; i++ )
00185 {
00186 if ( d_buttonUp[i] == sender() )
00187 incValue(d_increment[i]);
00188
00189 if ( d_buttonDown[i] == sender() )
00190 incValue(-d_increment[i]);
00191 }
00192 }
00193
00195 void QwtCounter::btnReleased()
00196 {
00197 emit buttonReleased(value());
00198 }
00199
00207 void QwtCounter::fontChange(const QFont &f)
00208 {
00209 QWidget::fontChange( f );
00210 d_valueEdit->setFont(font());
00211 }
00212
00214 QSize QwtCounter::sizeHint() const
00215 {
00216 QString tmp;
00217 QFontMetrics fm(d_valueEdit->font());
00218
00219 int w = fm.width(tmp.setNum(minValue()));
00220 int w1 = fm.width(tmp.setNum(maxValue()));
00221 if ( w1 > w )
00222 w = w1;
00223 w1 = fm.width(tmp.setNum(minValue() + step()));
00224 if ( w1 > w )
00225 w = w1;
00226 w1 = fm.width(tmp.setNum(maxValue() - step()));
00227 if ( w1 > w )
00228 w = w1;
00229
00230
00231
00232
00233 w += d_valueEdit->minimumSizeHint().width() - fm.maxWidth();
00234
00235
00236
00237
00238 w += QWidget::sizeHint().width() - d_valueEdit->sizeHint().width();
00239
00240 return QSize(w, QWidget::sizeHint().height());
00241 }
00242
00244 QSizePolicy QwtCounter::sizePolicy() const
00245 {
00246 QSizePolicy sp;
00247 sp.setHorData( QSizePolicy::Preferred );
00248 sp.setVerData( QSizePolicy::Fixed );
00249 return sp;
00250 }