Omnidome
Fulldome Mapping Software Toolkit
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Signals | Public Member Functions | Protected Member Functions | Private Slots | Private Member Functions | Private Attributes
omni::ui::Scene Class Reference

Dock widget that contains view settings for the scene. More...

#include <Scene.h>

Inheritance diagram for omni::ui::Scene:
Inheritance graph
[legend]
Collaboration diagram for omni::ui::Scene:
Collaboration graph
[legend]

Signals

void dataModelChanged ()
 
void unitChanged ()
 
void sceneScaleChanged (bool)
 Signal when scene scale has changed. Bool param tells if values should be rescaled. More...
 

Public Member Functions

 Scene (QWidget *_parent=nullptr)
 
 ~Scene ()
 
- Public Member Functions inherited from omni::ui::DockWidget
 DockWidget (QWidget *=nullptr)
 
template<typename UI >
 DockWidget (UI &_ui, QWidget *_parent=nullptr)
 
virtual ~DockWidget ()
 
- Public Member Functions inherited from omni::ui::mixin::DataModel< DATAMODEL, SHARED >
 DataModel ()
 
void setDataModel (pointer_type _dataModel)
 Set new data model. More...
 
pointer_type dataModel ()
 Return pointer to data model. More...
 
const pointer_type dataModel () const
 Return pointer to data model (const version) More...
 
virtual void updateFrontend ()
 Push data to frontend widgets and all child widgets. More...
 
virtual void updateDataModel ()
 Update the data model interface. More...
 

Protected Member Functions

void showEvent (QShowEvent *)
 
- Protected Member Functions inherited from omni::ui::DockWidget
template<typename UI >
void setup (UI &_ui)
 Setup ui form UI parameter is smart pointer (e.g. unique_ptr) to UI form. More...
 
- Protected Member Functions inherited from omni::ui::mixin::Locked
template<typename F >
void locked (F f)
 Lock widget and execute given functor. More...
 
bool isLocked () const
 Return true if widget is locked. More...
 

Private Slots

void setSceneScale ()
 
void fitSceneSizeToCanvas ()
 
void setUnit ()
 
void showArrangeMode ()
 
void showLiveMode ()
 

Private Member Functions

void dataToFrontend ()
 Pure virtual method which determines how data model is represented in frontend. More...
 
bool frontendToData ()
 Return true if data has changed by front end. More...
 

Private Attributes

std::unique_ptr< Ui::Scene > ui_
 
std::set< QWidget * > sceneSizeWidgets_
 Set of Widgets for manipulating scene size and units. More...
 

Additional Inherited Members

- Public Types inherited from omni::ui::mixin::DataModel< DATAMODEL, SHARED >
typedef DATAMODEL data_model_type
 Data type. More...
 
typedef DataModel
< data_model_type, SHARED > 
type
 This type. More...
 
typedef detail::PointerType
< data_model_type, SHARED > 
pointer_type_handler
 Pointer type handler. More...
 
typedef pointer_type_handler::type pointer_type
 Derived pointer type. More...
 

Detailed Description

Dock widget that contains view settings for the scene.

Constructor & Destructor Documentation

omni::ui::Scene::Scene ( QWidget *  _parent = nullptr)
28  :
29  DockWidget(_parent),
30  ui_(new Ui::Scene)
31  {
32  this->setup(ui_);
33 
34  this->locked([&]() {
35  connect(ui_->chkInput,
36  &QCheckBox::clicked,
37  this,
39  connect(ui_->chkGrid, &QCheckBox::clicked, this, &Scene::updateDataModel);
40  connect(ui_->boxProjectors,
41  static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
42  this, &Scene::updateDataModel);
43  connect(ui_->boxProjectedAreas,
44  static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
45  this, &Scene::updateDataModel);
46 
47  connect(ui_->boxProjectedAreas,
48  static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
49  this, &Scene::updateDataModel);
50 
51  ui_->sliderInsideOutside->setRange(0.0,1.0);
52  ui_->sliderInsideOutside->setGripSize(0.0);
53  ui_->sliderInsideOutside->setPageStep(0.1);
54  ui_->sliderInsideOutside->setSingleStep(0.01);
55 
56  connect(ui_->sliderInsideOutside, &RangedFloat::valueChanged,
57  this, &Scene::updateDataModel);
58 
59  ui_->sliderFOV->setRange(10.0,100.0);
60  ui_->sliderFOV->setLabel("FOV");
61  ui_->sliderFOV->setGripSize(0.0);
62  ui_->sliderFOV->setPageStep(1.0);
63  ui_->sliderFOV->setSingleStep(0.1);
64 
65  connect(ui_->sliderFOV, &RangedFloat::valueChanged,
66  this, &Scene::updateDataModel);
67 
68  ui_->sliderWireframe->setRange(0.0,1.0);
69  ui_->sliderWireframe->setGripSize(0.0);
70  ui_->sliderInsideOutside->setPageStep(0.1);
71  ui_->sliderInsideOutside->setSingleStep(0.01);
72 
73  connect(ui_->sliderWireframe, &RangedFloat::valueChanged,
74  this, &Scene::updateDataModel);
75 
76  connect(ui_->boxSize, SIGNAL(currentIndexChanged(int)), this,
77  SLOT(setSceneScale()));
78  connect(ui_->boxUnit, SIGNAL(currentIndexChanged(int)), this,
79  SLOT(setUnit()));
80  connect(ui_->btnFitToCanvas, SIGNAL(clicked()), this,
81  SLOT(fitSceneSizeToCanvas()));
82 
84  ui_->boxSize,
85  ui_->boxUnit,
86  ui_->btnFitToCanvas,
87  ui_->lbSceneSize,
88  ui_->lbUnit,
89  ui_->chkRescaleValues
90  };
91  });
92  }
void setUnit()
Definition: Scene.cpp:159
void setup(UI &_ui)
Setup ui form UI parameter is smart pointer (e.g. unique_ptr) to UI form.
Definition: DockWidget.h:44
void fitSceneSizeToCanvas()
Definition: Scene.cpp:126
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
void locked(F f)
Lock widget and execute given functor.
Definition: Locked.h:30
DockWidget(QWidget *=nullptr)
Definition: DockWidget.cpp:24
virtual void updateDataModel()
Update the data model interface.
Definition: DataModel.h:134
void setSceneScale()
Definition: Scene.cpp:150
std::set< QWidget * > sceneSizeWidgets_
Set of Widgets for manipulating scene size and units.
Definition: Scene.h:63
omni::ui::Scene::~Scene ( )
94  {
95  }

Member Function Documentation

void omni::ui::Scene::dataModelChanged ( )
signal
void omni::ui::Scene::dataToFrontend ( )
privatevirtual

Pure virtual method which determines how data model is represented in frontend.

Implements omni::ui::mixin::DataModel< DATAMODEL, SHARED >.

172  {
173  auto& _scene = dataModel()->scene();
174 
175  ui_->sliderInsideOutside->setValue(_scene.insideOutside());
176  ui_->sliderFOV->setValue(_scene.camera()->fov());
177  ui_->sliderWireframe->setValue(_scene.wireframe());
178 
179  ui_->chkInput->setChecked(_scene.displayInput());
180  ui_->chkGrid->setChecked(_scene.displayGrid());
181  ui_->boxProjectors->setCurrentIndex(util::enumToInt(_scene.displayProjectors()));
182  ui_->boxProjectedAreas->setCurrentIndex(util::enumToInt(_scene.displayProjectedAreas()));
183 
184  // Set current scene size to combobox
185  {
186  int _index = -1;
187  float _minDist = std::numeric_limits<float>::max();
188 
189  for (int i = 0; i < ui_->boxSize->count(); ++i) {
190  float _value = ui_->boxSize->itemText(i).toFloat();
191 
192  if (std::abs(_value - _scene.size()) < _minDist) {
193  _minDist = std::abs(_value - _scene.size());
194  _index = i;
195  }
196  }
197  dataModel()->scene().setSize(ui_->boxSize->itemText(_index).toFloat());
198  ui_->boxSize->setCurrentIndex(_index);
199  }
200 
201  // Set current scene unit to combobox
202  {
203  int _index = 0;
204  QString _abbr("m");
205 
206  for (int i = 0; i < ui_->boxUnit->count(); ++i) {
207  QString _itemText = ui_->boxUnit->itemText(i);
208  _abbr = _itemText.split(' ')[0];
209 
210  if (_abbr == _scene.unit().abbreviation()) {
211  _index = i;
212  break;
213  }
214  }
215  dataModel()->scene().setUnit(_abbr);
216  ui_->boxUnit->setCurrentIndex(_index);
217  emit sceneScaleChanged(false);
218  emit unitChanged();
219  }
220  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void sceneScaleChanged(bool)
Signal when scene scale has changed. Bool param tells if values should be rescaled.
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
auto enumToInt(ENUM const &_v) -> typename std::underlying_type< ENUM >::type
Converts an enum class to integer.
Definition: util.h:105
void omni::ui::Scene::fitSceneSizeToCanvas ( )
privateslot
126  {
127  if (!dataModel() || isLocked()) return;
128 
129  if (!dataModel()->canvas()) return;
130 
131  float _canvasSize = dataModel()->canvas()->radius() * 2.0;
132 
133  int _index = ui_->boxSize->count() - 1;
134 
135  for (int i = 0; i < ui_->boxSize->count(); ++i) {
136  float _value = ui_->boxSize->itemText(i).toFloat();
137  if (_value > _canvasSize) {
138  _index = i;
139  break;
140  }
141  }
142 
143  dataModel()->scene().setSize(ui_->boxSize->itemText(_index).toFloat());
144  this->locked([&]() {
145  ui_->boxSize->setCurrentIndex(_index);
146  });
147  emit sceneScaleChanged(false);
148  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void sceneScaleChanged(bool)
Signal when scene scale has changed. Bool param tells if values should be rescaled.
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
void locked(F f)
Lock widget and execute given functor.
Definition: Locked.h:30
bool isLocked() const
Return true if widget is locked.
Definition: Locked.h:40
bool omni::ui::Scene::frontendToData ( )
privatevirtual

Return true if data has changed by front end.

Implements omni::ui::mixin::DataModel< DATAMODEL, SHARED >.

222  {
223  auto& _scene = dataModel()->scene();
224 
225  _scene.camera()->setFov(ui_->sliderFOV->value());
226  _scene.setInsideOutside(ui_->sliderInsideOutside->value());
227  _scene.setDisplayInput(ui_->chkInput->isChecked());
228  _scene.setDisplayGrid(ui_->chkGrid->isChecked());
229  _scene.setDisplayProjectors(util::intToEnum<visual::ProjectorSelectionMode>(ui_->boxProjectors->currentIndex()));
230  _scene.setDisplayProjectedAreas(util::intToEnum<visual::ProjectorSelectionMode>(ui_->boxProjectedAreas->currentIndex()));
231  _scene.setWireframe(ui_->sliderWireframe->value());
232 
233  return true;
234  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
void omni::ui::Scene::sceneScaleChanged ( bool  )
signal

Signal when scene scale has changed. Bool param tells if values should be rescaled.

void omni::ui::Scene::setSceneScale ( )
privateslot
150  {
151  if (!dataModel() || isLocked()) return;
152 
153  auto& _scene = dataModel()->scene();
154  _scene.setSize(ui_->boxSize->currentText().toFloat());
155 
156  emit sceneScaleChanged(ui_->chkRescaleValues->isChecked());
157  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void sceneScaleChanged(bool)
Signal when scene scale has changed. Bool param tells if values should be rescaled.
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
bool isLocked() const
Return true if widget is locked.
Definition: Locked.h:40
void omni::ui::Scene::setUnit ( )
privateslot
159  {
160  if (!dataModel() || isLocked()) return;
161 
162  auto& _scene = dataModel()->scene();
163  auto && _stringList = ui_->boxUnit->currentText().split(" ");
164 
165  if (_stringList.isEmpty()) return;
166 
167  _scene.setUnit(_stringList[0]);
168 
169  emit unitChanged();
170  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
std::unique_ptr< Ui::Scene > ui_
Definition: Scene.h:60
bool isLocked() const
Return true if widget is locked.
Definition: Locked.h:40
void omni::ui::Scene::showArrangeMode ( )
privateslot
111  {
112  for (auto _widget :sceneSizeWidgets_) {
113  _widget->show();
114  }
115  show();
116  }
std::set< QWidget * > sceneSizeWidgets_
Set of Widgets for manipulating scene size and units.
Definition: Scene.h:63
void omni::ui::Scene::showEvent ( QShowEvent *  _event)
protected
97  {
98  if (!dataModel()) return;
99 
100  switch(dataModel()->mode()) {
102  showArrangeMode();
103  break;
104  default:
105  case Session::Mode::LIVE:
106  showLiveMode();
107  break;
108  }
109  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void showArrangeMode()
Definition: Scene.cpp:111
void showLiveMode()
Definition: Scene.cpp:118
void omni::ui::Scene::showLiveMode ( )
privateslot

Display only the read only settings in live mode

118  {
119  /// Display only the read only settings in live mode
120  for (auto _widget :sceneSizeWidgets_) {
121  _widget->hide();
122  }
123  show();
124  }
std::set< QWidget * > sceneSizeWidgets_
Set of Widgets for manipulating scene size and units.
Definition: Scene.h:63
void omni::ui::Scene::unitChanged ( )
signal

Field Documentation

std::set<QWidget*> omni::ui::Scene::sceneSizeWidgets_
private

Set of Widgets for manipulating scene size and units.

std::unique_ptr<Ui::Scene> omni::ui::Scene::ui_
private

The documentation for this class was generated from the following files: