CMS 3D CMS Logo

IgQtRangeControlCommon.cc

Go to the documentation of this file.
00001 //<<<<<< INCLUDES                                                       >>>>>>
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 //<<<<<< PRIVATE DEFINES                                                >>>>>>
00020 //<<<<<< PRIVATE CONSTANTS                                              >>>>>>
00021 //<<<<<< PRIVATE TYPES                                                  >>>>>>
00022 //<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
00023 //<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
00024 //<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
00025 //<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
00026 //<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
00027 //<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
00028 
00029 IgQtRangeControlCommon::IgQtRangeControlCommon (QWidget *parent, int /*parts*/,
00030                                                 const char *name /* = 0 */)
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     // Add backward buttons
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         // Adding What's this help messages
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     // Add text edit for the value (FIXME: optional label vs. text)
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         // Adding What's this help messages
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     // Add forward buttons
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         // Adding What's this help messages
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     // Add slider below the row
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         // Adding What's this help messages
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 /*value*/)
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& /*newval*/)
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 /* = -1 */)
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 /*= true*/)
00358 { m_valueEditable = editable; }
00359     
00360 void
00361 IgQtRangeControlCommon::rangeEditable (bool editable /*= true*/)
00362 { m_rangeEditable = editable; }
00363     
00364 void
00365 IgQtRangeControlCommon::stepEditable (bool editable /*= true*/)
00366 { m_stepEditable = editable; }
00367 
00368 void
00369 IgQtRangeControlCommon::precisionEditable (bool editable /*= true*/)
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 /*=true*/)
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 }

Generated on Tue Jun 9 17:38:38 2009 for CMSSW by  doxygen 1.5.4