MIRA
SingleSelectionListDialog.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2012 by
3  * MetraLabs GmbH (MLAB), GERMANY
4  * and
5  * Neuroinformatics and Cognitive Robotics Labs (NICR) at TU Ilmenau, GERMANY
6  * All rights reserved.
7  *
8  * Contact: info@mira-project.org
9  *
10  * Commercial Usage:
11  * Licensees holding valid commercial licenses may use this file in
12  * accordance with the commercial license agreement provided with the
13  * software or, alternatively, in accordance with the terms contained in
14  * a written agreement between you and MLAB or NICR.
15  *
16  * GNU General Public License Usage:
17  * Alternatively, this file may be used under the terms of the GNU
18  * General Public License version 3.0 as published by the Free Software
19  * Foundation and appearing in the file LICENSE.GPL3 included in the
20  * packaging of this file. Please review the following information to
21  * ensure the GNU General Public License version 3.0 requirements will be
22  * met: http://www.gnu.org/copyleft/gpl.html.
23  * Alternatively you may (at your option) use any later version of the GNU
24  * General Public License if such license has been publicly approved by
25  * MLAB and NICR (or its successors, if any).
26  *
27  * IN NO EVENT SHALL "MLAB" OR "NICR" BE LIABLE TO ANY PARTY FOR DIRECT,
28  * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF
29  * THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF "MLAB" OR
30  * "NICR" HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * "MLAB" AND "NICR" SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING,
33  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
34  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
35  * ON AN "AS IS" BASIS, AND "MLAB" AND "NICR" HAVE NO OBLIGATION TO
36  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR MODIFICATIONS.
37  */
38 
49 #include <QLabel>
50 #include <QLineEdit>
51 
53 #include <widgets/SignalBinder.h>
54 
55 #ifndef _MIRA_SINGLESELECTIONLISTDIALOG_H_
56 #define _MIRA_SINGLESELECTIONLISTDIALOG_H_
57 
58 namespace mira {
59 
61 
101 template <typename T>
103 {
104 public:
105 
106  SingleSelectionListDialog(QWidget* parent=0);
107 
108 public:
109 
110  void setMultiSelection(bool enable) {
111  static_assert(sizeof(T)==0, "setMultipleSelection not supported for SingleSelectionListDialog");
112  }
113 
120  std::pair<QString, T> selectedItem() const;
121 
123  bool hasSelection() const;
124 
125 private:
126 
127  void onSelectionChanged();
128 
129 private:
130  QLineEdit* mNameField;
131  SignalBinder* mSignalBinder;
132 };
133 
135 
136 template <typename T>
138  SelectionListDialog<T>(parent)
139 {
140  QHBoxLayout* layout = new QHBoxLayout;
141  this->mAdditionalContentLayout->addLayout(layout);
142  QLabel* label = new QLabel(this->tr("Name:"),this);
143  layout->addWidget(label);
144 
145  mNameField = new QLineEdit(this);
146  layout->addWidget(mNameField);
147 
148  mSignalBinder = new SignalBinder(this);
149  mSignalBinder->bind(
150  boost::bind(&SingleSelectionListDialog::onSelectionChanged,this));
151  this->connect(
152  this->mTreeWidget, SIGNAL(itemSelectionChanged()), mSignalBinder,
153  SLOT(slot()));
154 }
155 
156 template <typename T>
157 inline std::pair<QString, T> SingleSelectionListDialog<T>::selectedItem() const {
158  if(!hasSelection())
159  MIRA_THROW(XLogical, "No item selected");
160  return std::make_pair(mNameField->text(), this->selectedItems().begin()->second);
161 }
162 
163 template <typename T>
165  return !this->selectedItems().empty();
166 }
167 
168 template <typename T>
170 {
171  auto selection = this->selectedItems();
172  if(selection.empty())
173  mNameField->setText("");
174  else
175  mNameField->setText(selection.begin()->first);
176 }
177 
179 
180 }
181 
182 #endif
Class that provides different slots with different parameters.
Definition: SignalBinder.h:87
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
SingleSelectionListDialog(QWidget *parent=0)
Definition: SingleSelectionListDialog.h:137
Contains the SelectionListDialog widget, a widget for providing the user a dialog where he/she can ch...
Class that allows to bind a function to a Qt slot that is called upon a connected signal...
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:81
QVBoxLayout * mAdditionalContentLayout
Definition: SelectionListDialog.h:178
A dialog for providing the a list, where the items can be grouped in categories.
Definition: SelectionListDialog.h:114
A dialog for providing the a list, where the items can be grouped in categories.
Definition: SingleSelectionListDialog.h:102
bool hasSelection() const
Returns true, if an item was selected.
Definition: SingleSelectionListDialog.h:164
QTreeWidget * mTreeWidget
Definition: SelectionListDialog.h:183
void setMultiSelection(bool enable)
Definition: SingleSelectionListDialog.h:110
void bind(boost::function< void()> f)
binds the given function to the slot "slot()"
Definition: SignalBinder.h:97
std::pair< QString, T > selectedItem() const
Returns a pairs of a string and the data that was assigned in addItem().
Definition: SingleSelectionListDialog.h:157