00001
00002
00003 #include "Iguana/GLBrowsers/interface/IgQtRangeControlCommon.h"
00004 #include "Iguana/Studio/interface/IgQtLineEdit.h"
00005 #include "Iguana/Studio/interface/IgQtPixButton.h"
00006 #include "Iguana/GLBrowsers/pixmaps/gotoMin.xpm"
00007 #include "Iguana/GLBrowsers/pixmaps/fastRev.xpm"
00008 #include "Iguana/GLBrowsers/pixmaps/rev.xpm"
00009 #include "Iguana/GLBrowsers/pixmaps/fwd.xpm"
00010 #include "Iguana/GLBrowsers/pixmaps/fastFwd.xpm"
00011 #include "Iguana/GLBrowsers/pixmaps/gotoMax.xpm"
00012 #include <qframe.h>
00013 #include <qlayout.h>
00014 #include <qpixmap.h>
00015 #include <qslider.h>
00016 #include <qpopupmenu.h>
00017 #include <qwhatsthis.h>
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 IgQtRangeControlCommon::IgQtRangeControlCommon (QWidget *parent, int ,
00030 const char *name )
00031 : m_stepType (ADD),
00032 m_fwdEnabled (true),
00033 m_revEnabled (true),
00034 m_widget (new QFrame (parent, name)),
00035 m_layout (0),
00036 m_row (0),
00037 m_revMin (0),
00038 m_revLong (0),
00039 m_revSmall (0),
00040 m_text (0),
00041 m_fwdSmall (0),
00042 m_fwdLong (0),
00043 m_fwdMax (0),
00044 m_slider (0),
00045 m_resetChangedValue (0),
00046 m_editSettingMenu (0),
00047 m_editSettingMenuIndex (-1),
00048 m_valueEditable (true),
00049 m_stepEditable (true),
00050 m_rangeEditable (true),
00051 m_precisionEditable (true),
00052 m_emitSettingsChanged (true)
00053 { }
00054
00055 void
00056 IgQtRangeControlCommon::initialize (int parts)
00057 {
00058 QSizePolicy expexp (QSizePolicy::Expanding, QSizePolicy::Expanding);
00059 if (!m_layout)
00060 m_layout = new QVBoxLayout (m_widget, 1, 0);
00061
00062 m_widget->setFrameStyle (QFrame::Plain | QFrame::Box);
00063 m_widget->setFixedHeight (35);
00064
00065 m_row = new QWidget (m_widget);
00066 QHBoxLayout *rowLayout = new QHBoxLayout (m_row, 0, 0);
00067 m_layout->addWidget (m_row);
00068
00069 m_editSettingMenu = new QPopupMenu (0, "m_editSettingMenu");
00070 updateEditSettingConnection (this, SLOT (editSettings (void)));
00071
00072
00073 if (parts & StepperPart)
00074 {
00075 m_revMin = new IgQtPixButton (gotoMin_xpm, m_row);
00076 m_revMin->setPopup (m_editSettingMenu);
00077 m_revLong = new IgQtPixButton (fastRev_xpm, m_row);
00078 m_revLong->setPopup (m_editSettingMenu);
00079 m_revSmall = new IgQtPixButton (rev_xpm, m_row);
00080 m_revSmall->setPopup (m_editSettingMenu);
00081
00082 rowLayout->addWidget (m_revMin);
00083 rowLayout->addWidget (m_revLong);
00084 rowLayout->addWidget (m_revSmall);
00085
00086 connect (m_revMin, SIGNAL (clicked ()), this, SLOT (revMin ()));
00087 connect (m_revLong, SIGNAL (clicked ()), this, SLOT (revLong ()));
00088 connect (m_revSmall, SIGNAL (clicked ()), this, SLOT (revSmall ()));
00089
00090
00091 const char * text_m_revMin =
00092 "Click this to move the value to minimum.";
00093 const char * text_m_revLong =
00094 "Click this to make a long step in reverse direction. Keep the mouse "
00095 "clicked on this if you want to keep on making long steps in reverse "
00096 "direction.";
00097 const char * text_m_revSmall =
00098 "Click this to make a small step in reverse direction. Keep the mouse "
00099 "clicked on this if you want to keep on making small steps in reverse "
00100 "direction.";
00101
00102 QWhatsThis::add(m_revMin, text_m_revMin);
00103 QWhatsThis::add(m_revLong, text_m_revLong);
00104 QWhatsThis::add(m_revSmall, text_m_revSmall);
00105 }
00106
00107
00108 if (parts & ValuePart)
00109 {
00110 m_text = new IgQtLineEdit (m_row);
00111 m_text->setSizePolicy (expexp);
00112 m_text->setReadOnly (false);
00113 m_text->setFocusPolicy (QWidget::StrongFocus);
00114 m_text->setAlignment (AlignRight);
00115 m_text->setFixedWidth (75);
00116 m_text->setText ("0");
00117
00118 rowLayout->addWidget (m_text);
00119 connect (m_text, SIGNAL (valueChanged (const QString&)),
00120 this, SLOT (textChanged (const QString&)));
00121
00122
00123 const char * text_m_text =
00124 "This text box displays the current value of the control. One can "
00125 "also edit value here and hit the \"Enter/Return Key\" to make "
00126 "that value effective.";
00127
00128 QWhatsThis::add(m_text, text_m_text);
00129 }
00130
00131
00132 if (parts & StepperPart)
00133 {
00134 m_fwdSmall = new IgQtPixButton (fwd_xpm, m_row);
00135 m_fwdSmall->setPopup (m_editSettingMenu);
00136 m_fwdLong = new IgQtPixButton (fastFwd_xpm, m_row);
00137 m_fwdLong->setPopup (m_editSettingMenu);
00138 m_fwdMax = new IgQtPixButton (gotoMax_xpm, m_row);
00139 m_fwdMax->setPopup (m_editSettingMenu);
00140
00141 rowLayout->addWidget (m_fwdSmall);
00142 rowLayout->addWidget (m_fwdLong);
00143 rowLayout->addWidget (m_fwdMax);
00144
00145 connect (m_fwdSmall, SIGNAL (clicked ()), this, SLOT (fwdSmall ()));
00146 connect (m_fwdLong, SIGNAL (clicked ()), this, SLOT (fwdLong ()));
00147 connect (m_fwdMax, SIGNAL (clicked ()), this, SLOT (fwdMax ()));
00148
00149
00150 const char * text_m_fwdMax =
00151 "Click this to move the value to maximum.";
00152 const char * text_m_fwdLong =
00153 "Click this to make a long step in forward direction. Keep the "
00154 "mouse clicked on this if you want to keep on making long steps in "
00155 "forward direction.";
00156 const char * text_m_fwdSmall =
00157 "Click this to make a small step in forward direction. Keep the "
00158 "mouse clicked on this if you want to keep on making small steps in "
00159 "forward direction.";
00160
00161 QWhatsThis::add(m_fwdMax, text_m_fwdMax);
00162 QWhatsThis::add(m_fwdLong, text_m_fwdLong);
00163 QWhatsThis::add(m_fwdSmall, text_m_fwdSmall);
00164 }
00165
00166
00167 if (parts & SliderPart)
00168 {
00169 m_slider = new QSlider (Horizontal, m_widget);
00170 m_slider->setSizePolicy (expexp);
00171 m_slider->setFixedHeight (8);
00172 m_slider->setLineStep (1);
00173 m_layout->addWidget (m_slider);
00174
00175 connect (m_slider, SIGNAL (valueChanged (int)),
00176 this, SLOT (sliderChanged (int)));
00177
00178
00179 const char * text_m_slider =
00180 "Click on this slider to make a small step in either reverse or "
00181 "forward direction.";
00182
00183 QWhatsThis::add(m_slider, text_m_slider);
00184 }
00185 }
00186
00190
00192 void
00193 IgQtRangeControlCommon::setStepType (StepType value)
00194 { m_stepType = value; }
00195
00197 IgQtRangeControlCommon::StepType
00198 IgQtRangeControlCommon::getStepType (void) const
00199 { return m_stepType; }
00200
00204
00207 void
00208 IgQtRangeControlCommon::sliderChanged (int )
00209 { }
00210
00211 void
00212 IgQtRangeControlCommon::resetChangedValue (bool value)
00213 { m_resetChangedValue = value; }
00217 void
00218 IgQtRangeControlCommon::revMin (void)
00219 { }
00220
00221 void
00222 IgQtRangeControlCommon::revLong (void)
00223 { }
00224
00225 void
00226 IgQtRangeControlCommon::revSmall (void)
00227 { }
00228
00229 void
00230 IgQtRangeControlCommon::fwdSmall (void)
00231 { }
00232
00233 void
00234 IgQtRangeControlCommon::fwdLong (void)
00235 { }
00236
00237 void
00238 IgQtRangeControlCommon::fwdMax (void)
00239 { }
00240
00241 void
00242 IgQtRangeControlCommon::emitSignals (void)
00243 { }
00247
00248 void
00249 IgQtRangeControlCommon::textChanged (const QString& )
00250 { }
00251
00252 void
00253 IgQtRangeControlCommon::setDirty (bool dirty)
00254 { IgControlItem::setDirty (dirty); }
00255
00256 void
00257 IgQtRangeControlCommon::fwdEnable (bool value)
00258 {
00259 if (m_fwdSmall && m_fwdEnabled != value)
00260 {
00261 m_fwdSmall->setEnabled (value);
00262 m_fwdLong->setEnabled (value);
00263 m_fwdMax->setEnabled (value);
00264 m_fwdEnabled = value;
00265 }
00266 }
00267
00268 void
00269 IgQtRangeControlCommon::revEnable (bool value)
00270 {
00271 if (m_revSmall && m_revEnabled != value)
00272 {
00273 m_revSmall->setEnabled (value);
00274 m_revLong->setEnabled (value);
00275 m_revMin->setEnabled (value);
00276 m_revEnabled = value;
00277 }
00278 }
00279
00280 void
00281 IgQtRangeControlCommon::addFwdButton (QWidget *w)
00282 {
00283 addFwdWidget (w);
00284 connect (w, SIGNAL(clicked()), this, SLOT (fwdSmall ()));
00285 }
00286
00287 void
00288 IgQtRangeControlCommon::addRevButton (QWidget *w)
00289 {
00290 addRevWidget (w);
00291 connect (w, SIGNAL(clicked()), this, SLOT (revSmall ()));
00292 }
00293
00294 void
00295 IgQtRangeControlCommon::addFwdWidget (QWidget *w)
00296 { insertWidget (w, -1); }
00297
00298 void
00299 IgQtRangeControlCommon::addRevWidget (QWidget *w)
00300 { insertWidget (w, 0); }
00301
00302 void
00303 IgQtRangeControlCommon::insertWidget (QWidget *w, int index )
00304 {
00305 w->reparent (m_row, QPoint (0, 0));
00306 ((QBoxLayout *) m_row->layout ())->insertWidget (index, w);
00307 }
00308
00312 QWidget *
00313 IgQtRangeControlCommon::widget (void) const
00314 { return m_widget; }
00315
00319 void
00320 IgQtRangeControlCommon::show (void)
00321 { m_widget->show (); }
00322
00323 void
00324 IgQtRangeControlCommon::hide (void)
00325 { m_widget->hide (); }
00329 void
00330 IgQtRangeControlCommon::editSettingsChanged (void)
00331 { if (isEmitSettingsChanged ()) emit settingsChanged (); }
00332
00333 void
00334 IgQtRangeControlCommon::editSettings (void)
00335 { }
00336
00337 QPopupMenu*
00338 IgQtRangeControlCommon::popupMenu (void) const
00339 { return m_editSettingMenu; }
00340
00341 void
00342 IgQtRangeControlCommon::updateEditSettingConnection (const QObject * receiver,
00343 const char * member)
00344 {
00345 if (m_editSettingMenuIndex != -1)
00346 m_editSettingMenu->removeItemAt (m_editSettingMenuIndex);
00347 int id = m_editSettingMenu->insertItem ("&Edit",
00348 receiver ,
00349 member,
00350 0, -1, m_editSettingMenuIndex);
00351 m_editSettingMenuIndex = m_editSettingMenu->indexOf (id);
00352 }
00356 void
00357 IgQtRangeControlCommon::valueEditable (bool editable )
00358 { m_valueEditable = editable; }
00359
00360 void
00361 IgQtRangeControlCommon::rangeEditable (bool editable )
00362 { m_rangeEditable = editable; }
00363
00364 void
00365 IgQtRangeControlCommon::stepEditable (bool editable )
00366 { m_stepEditable = editable; }
00367
00368 void
00369 IgQtRangeControlCommon::precisionEditable (bool editable )
00370 { m_precisionEditable = editable; }
00371
00372 bool
00373 IgQtRangeControlCommon::isValueEditable (void) const
00374 { return m_valueEditable; }
00375
00376 bool
00377 IgQtRangeControlCommon::isRangeEditable (void) const
00378 { return m_rangeEditable; }
00379
00380 bool
00381 IgQtRangeControlCommon::isStepEditable (void) const
00382 { return m_stepEditable; }
00383
00384 bool
00385 IgQtRangeControlCommon::isPrecisionEditable (void) const
00386 { return m_precisionEditable; }
00387
00388 bool
00389 IgQtRangeControlCommon::isEmitSettingsChanged (void) const
00390 { return m_emitSettingsChanged; }
00391
00392 void
00393 IgQtRangeControlCommon::setEmitSettingsChanged (bool value )
00394 { m_emitSettingsChanged = value; }
00398 QString
00399 IgQtRangeControlCommon::getSettingItem (QString &setting)
00400 {
00401 QString item ("");
00402 int index = setting.find(":");
00403 if (index == -1)
00404 {
00405 item = setting;
00406 setting = "";
00407 }
00408 else
00409 {
00410 item = setting.left(index);
00411 setting = setting.right (setting.length()-index-1);
00412 }
00413 return item;
00414 }
00415
00416 void
00417 IgQtRangeControlCommon::addSettingItem (const QString &item, QString &setting)
00418 {
00419 if (setting.isEmpty ())
00420 setting = item;
00421 else
00422 setting += ":" + item;
00423 }