Salome HOME
Use choice control for groups
[modules/shaper.git] / src / ModuleBase / ModuleBase_ChoiceCtrl.h
1 // Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or
18 // email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 //
20
21 #ifndef ModuleBase_ChoiceCtrl_H
22 #define ModuleBase_ChoiceCtrl_H
23
24 #include "ModuleBase.h"
25
26 #include <QWidget>
27 #include <QStringList>
28 #include <QList>
29
30 class QLabel;
31 class QComboBox;
32 class QGroupBox;
33 class QButtonGroup;
34
35 /**
36 * \ingroup GUI
37 * A Choice control. It provides a choice in several strings.
38 * It can be represented by several radiobuttons or by combo box.
39 * Radio buttons can be represented as by radiou buttons with text
40 * or by icons in toggle buttons.
41 */
42 class MODULEBASE_EXPORT ModuleBase_ChoiceCtrl: public QWidget
43 {
44 Q_OBJECT
45 public:
46   enum ControlType {
47     RadioButtons,
48     ComboBox
49   };
50
51   /**
52   * Constructor
53   * \param theParent a parent widget
54   * \param theChoiceList a list of choice strings
55   * \param theIconsList a list of icon names for radiou buttons
56   * \param theType a type of choice representation
57   * \param theButtonsDir direction of radio buttons placement
58   */
59   ModuleBase_ChoiceCtrl(QWidget* theParent,
60                         const QStringList& theChoiceList,
61                         const QStringList& theIconsList,
62                         ControlType theType = RadioButtons,
63                         Qt::Orientation theButtonsDir = Qt::Horizontal);
64
65   /// Set label for the controls.
66   /// It is a label for combo box and title for group of radio buttons.
67   /// \param theText a text of the label
68   void setLabel(const QString& theText);
69
70   /// Set Icon for the label. Used only for combo box.
71   /// \param theIcon a name of icon
72   void setLabelIcon(const QString& theIcon);
73
74   /// Set value: Id of button or item of combo box.
75   /// \param theVal a value (from 0 to number of items)
76   void setValue(int theVal);
77
78   /// Set tool tip for label. Used only for combo box.
79   void setTooltip(QString theTip);
80
81   /// Returns currently selected value
82   int value() const;
83
84   /// Returns text of currently selected value
85   QString textValue() const;
86
87   /// Transfer focus on itself
88   bool focusTo();
89
90   /// Returns controls for activation
91   QList<QWidget*> getControls() const;
92
93   /// Set list of choice
94   /// \param theChoiceList a string list of items
95   void setChoiceList(const QStringList& theChoiceList);
96
97 signals:
98   /// A signal raised on change of current value
99   void valueChanged(int theVal);
100
101 private:
102   /// Control type
103   ControlType myType;
104
105   /// A label for cmbo box
106   QLabel* myLabel;
107
108   /// A combo box represerntation of control
109   QComboBox* myCombo;
110
111   /// A group box for radio buttons
112   QGroupBox* myGroupBox;
113
114   /// A group of buttons
115   QButtonGroup* myButtons;
116 };
117
118 #endif