CMS 3D CMS Logo

Ig3DEnumControl.cc

Go to the documentation of this file.
00001 //<<<<<< INCLUDES                                                       >>>>>>
00002 
00003 #include "Iguana/GLBrowsers/interface/Ig3DEnumControl.h"
00004 #include "Iguana/GLBrowsers/interface/IgControlCategory.h"
00005 #include <Inventor/fields/SoSFEnum.h>
00006 #include <classlib/utils/DebugAids.h>
00007 #include <qlayout.h>
00008 #include <qlabel.h>
00009 #include <qcombobox.h>
00010 
00011 //<<<<<< PRIVATE DEFINES                                                >>>>>>
00012 //<<<<<< PRIVATE CONSTANTS                                              >>>>>>
00013 //<<<<<< PRIVATE TYPES                                                  >>>>>>
00014 //<<<<<< PRIVATE VARIABLE DEFINITIONS                                   >>>>>>
00015 //<<<<<< PUBLIC VARIABLE DEFINITIONS                                    >>>>>>
00016 //<<<<<< CLASS STRUCTURE INITIALIZATION                                 >>>>>>
00017 //<<<<<< PRIVATE FUNCTION DEFINITIONS                                   >>>>>>
00018 //<<<<<< PUBLIC FUNCTION DEFINITIONS                                    >>>>>>
00019 //<<<<<< MEMBER FUNCTION DEFINITIONS                                    >>>>>>
00020 
00021 Ig3DEnumControl::Ig3DEnumControl (IgControlCategory *pane, QString label)
00022     : Ig3DFieldControl (pane)
00023 {
00024     ASSERT (pane);
00025     ASSERT (pane->bodyArea ());
00026     ASSERT (pane->bodyLayout ());
00027 
00028     QWidget     *area = pane->bodyArea ();
00029     int         row = gridRows ();
00030 
00031     ASSERT (row >= 0);
00032 
00033     // Add a new row to the grid, label on the left and the value on the right
00034     QWidget     *vlab = makeIndentedLabel (label, area);
00035     addGridWidget (vlab, row, 0);
00036 
00037     m_value = new QComboBox (area);
00038     m_value->setEditable(false);
00039     addGridWidget (makeSpacedBox (area, m_value), row, 1);
00040 
00041     // Always reflect the state of the real value control and vice versa.
00042     connect (m_value,            SIGNAL (activated    (int)), 
00043              this,               SLOT   (valueChanged (int)));
00044     connect (this,               SIGNAL (editable   (bool)), 
00045              m_value,            SLOT   (setEnabled (bool)));
00046     connect (this,               SIGNAL (editable   (bool)), 
00047              vlab,               SLOT   (setEnabled (bool)));
00048 }
00049 
00051 SoSFEnum *
00052 Ig3DEnumControl::field (void) const
00053 { return static_cast<SoSFEnum *> (Ig3DFieldControl::field ()); }
00054 
00055 void
00056 Ig3DEnumControl::setField (SoSFEnum *field)
00057 {
00058     Ig3DFieldControl::setField (field);
00059     if (field)
00060     {
00061       int nums = field->getNumEnums ();
00062       if (nums != m_enums.size ())
00063       {
00064         m_enums.clear ();
00065         m_value->clear ();
00066         SbName name;
00067         for(int i=0; i < nums; i++)
00068         {
00069           m_enums.push_back (field->getEnum(i, name));
00070           m_value->insertItem (name.getString ());
00071         }
00072       }
00073     }
00074 }
00075 
00076 int
00077 Ig3DEnumControl::fieldValue (void) const
00078 { ASSERT (field ()); return field ()->getValue (); }
00079 
00081 int
00082 Ig3DEnumControl::value (void) const
00083 { return m_enums[m_value->currentItem ()]; }
00084 
00085 void
00086 Ig3DEnumControl::setValue (int newval)
00087 {
00088     int index = findIndex (newval);
00089     ASSERT (index != -1);
00090     
00091     m_value->setCurrentItem (index);
00092     setDirty (true);
00093 }
00094 
00095 void
00096 Ig3DEnumControl::updateValue (void)
00097 { setValue (fieldValue ()); }
00098 
00099 void
00100 Ig3DEnumControl::applyValue (void)
00101 { field ()->setValue (value ()); }
00102 
00104 int
00105 Ig3DEnumControl::findIndex (int value)
00106 {
00107     int index = -1;
00108     for (unsigned int i = 0; i < m_enums.size (); i++)
00109     {
00110       if (m_enums[i] == value) { index = i ; break; }
00111     }    
00112     return index;
00113 }
00114 
00115 void
00116 Ig3DEnumControl::addValidValue (int value, const QString &name)
00117 {
00118     int index = findIndex (value);
00119     ASSERT (index == -1);
00120     
00121     m_value->insertItem (name);
00122     m_enums.push_back (value);
00123 }
00124 
00125 void
00126 Ig3DEnumControl::valueChanged (int index)
00127 {
00128     if (fieldValue () != m_enums[index])
00129       setDirty (true);
00130 }
00132 QWidget *
00133 Ig3DEnumControl::widget () const
00134 { return m_value; }

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