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

A widget for seting up fullscreen windows. More...

#include <ScreenSetup.h>

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

Public Slots

void updateScreens ()
 Update screen dimensions. More...
 
void closeFullscreenWindows ()
 
void assignNewTuningToNextFreeScreen ()
 

Signals

void dataModelChanged ()
 

Public Member Functions

 ScreenSetup (QWidget *=nullptr)
 
 ~ScreenSetup ()
 
QRect desktopRect () const
 Pure virtual method which returns overall desktop rect. More...
 
void setTuningList (proj::TuningList *)
 
proj::TuningListtuningList ()
 
proj::TuningList const * tuningList () const
 
- 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...
 
- Public Member Functions inherited from omni::ui::mixin::TransformedRect< ScreenSetup >
 TransformedRect (widget_type *_widget)
 
float scalingFactor () const
 Returns the scaling factor which is needed so that desktopRect_. More...
 
QRectF transformedRect () const
 Returns transformed bounding rect which fits into window and keeps. More...
 
QRectF transformedRect (QRectF const &_rect) const
 Returns Transformed copy of the rect, based on transformed desktop. More...
 
float zoom () const
 Return zoom factor. More...
 
void setZoom (float _zoom)
 Set zoom factor. More...
 

Protected Member Functions

void paintEvent (QPaintEvent *)
 
void mouseMoveEvent (QMouseEvent *)
 
void mouseDoubleClickEvent (QMouseEvent *)
 Detach tuning on double click on screen event. More...
 
void dragEnterEvent (QDragEnterEvent *)
 
void dragMoveEvent (QDragMoveEvent *)
 
void dropEvent (QDropEvent *)
 
- 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 Member Functions

void dataToFrontend ()
 Set session parameters. More...
 
bool frontendToData ()
 Return true if data has changed by front end. More...
 
void assignTuning (omni::proj::Tuning *)
 
SubScreenItemgetSubScreenItemAtPos (QPoint const &)
 Returns pointer to a SubScreenItem under given position Returns null otherwise. More...
 

Private Attributes

friend ScreenItem
 
friend SubScreenItem
 
std::map< QScreen const
*, std::unique_ptr< ScreenItem > > 
screenItems_
 
SubScreenItemcurrentSubScreenItem_ = nullptr
 
proj::TuningListtuningList_ = nullptr
 

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...
 
- Public Types inherited from omni::ui::mixin::TransformedRect< ScreenSetup >
typedef ScreenSetup widget_type
 

Detailed Description

A widget for seting up fullscreen windows.

Holds fullscreen widgets

Constructor & Destructor Documentation

omni::ui::ScreenSetup::ScreenSetup ( QWidget *  _parent = nullptr)
43  :
44  QWidget(_parent),
45  TransformedRect<ScreenSetup>(this)
46  {
47  setMouseTracking(true);
48  setAcceptDrops(true);
49  setAutoFillBackground(true);
50 
51  connect(QGuiApplication::instance(),SIGNAL(screenAdded(QScreen*)),
52  this,SLOT(updateScreens()));
53  connect(QGuiApplication::instance(),SIGNAL(screenRemoved(QScreen*)),
54  this,SLOT(updateScreens()));
55 
56  updateScreens();
57  }
void updateScreens()
Update screen dimensions.
Definition: ScreenSetup.cpp:81
omni::ui::ScreenSetup::~ScreenSetup ( )
60  {
61  screenItems_.clear();
62  }
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102

Member Function Documentation

void omni::ui::ScreenSetup::assignNewTuningToNextFreeScreen ( )
slot

Iterate through all screens and subscreens

109  {
110  auto* _tuning = dataModel()->tunings()[dataModel()->tunings().size()-1];
111  if (!_tuning) return;
112 
113  /// Iterate through all screens and subscreens
114  for (auto& _screenItem : screenItems_) {
115  auto* _item = _screenItem.second.get();
116  auto* _screen = _screenItem.first;
117  int _numSubScreens = _item->numSubScreens();
118  for (int _subScreenIndex = 0; _subScreenIndex < _numSubScreens; ++_subScreenIndex) {
119  auto* _subScreenItem = _item->item(_subScreenIndex);
120  if (_subScreenItem->tuningWidget()) continue;
121 
122  // If sub screen item has no tuning widget assigned its free.
123  // So we can assign the tuning here
124  _tuning->setScreen(_screen,_subScreenIndex);
125  assignTuning(_tuning);
126  this->update();
127  return; // Nothing more to do
128  }
129  }
130  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void assignTuning(omni::proj::Tuning *)
Definition: ScreenSetup.cpp:132
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void omni::ui::ScreenSetup::assignTuning ( omni::proj::Tuning _tuning)
private
132  {
133  if (!_tuning->screen()) return; // No assignment for default screen
134  if (!screenItems_.count(_tuning->screen())) {
135  _tuning->assignVirtualScreen();
136  return;
137  }
138 
139  auto* _subScreenItem = screenItems_.at(_tuning->screen())->item(_tuning->subScreenIndex());
140  if (!_subScreenItem) return;
141 
142  auto* _tuningWidget = tuningList_->widgetFromTuning(_tuning);
143  if (!_tuningWidget) return;
144  _subScreenItem->attachTuningWidget(_tuningWidget);
145  }
void assignVirtualScreen()
Assign virtual screen to tuning.
Definition: Tuning.cpp:44
Tuning * widgetFromTuning(omni::proj::Tuning *)
Definition: TuningList.cpp:72
proj::TuningList * tuningList_
Definition: ScreenSetup.h:104
int subScreenIndex() const
Definition: Tuning.cpp:61
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
QScreen const * screen() const
Definition: Tuning.cpp:56
void omni::ui::ScreenSetup::closeFullscreenWindows ( )
slot
101  {
102  for (auto& _screenItem : screenItems_) {
103  _screenItem.second->fullscreen()->close();
104  _screenItem.second->fullscreen()->deleteLater();
105  }
106  screenItems_.clear();
107  }
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void omni::ui::ScreenSetup::dataModelChanged ( )
signal
void omni::ui::ScreenSetup::dataToFrontend ( )
privatevirtual

Set session parameters.

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

77  {
78  updateScreens();
79  }
void updateScreens()
Update screen dimensions.
Definition: ScreenSetup.cpp:81
QRect omni::ui::ScreenSetup::desktopRect ( ) const
inlinevirtual

Pure virtual method which returns overall desktop rect.

Implements omni::ui::mixin::TransformedRect< ScreenSetup >.

55  {
57  }
static QRect desktopRect(bool _excludeStandardScreen=true)
Definition: ScreenSetup.cpp:180
void omni::ui::ScreenSetup::dragEnterEvent ( QDragEnterEvent *  event)
protected
206  {
208  for (auto& _item : screenItems_)
209  _item.second->endDrop();
210 
211  if (event->mimeData()->hasFormat("text/plain"))
212  {
213  auto* _tuningWidget = static_cast<proj::Tuning*>(event->source());
214  if (!_tuningWidget->tuning()) return;
215 
216  if (currentSubScreenItem_) {
217  auto _color = _tuningWidget->tuning()->color();
219  }
220  event->acceptProposedAction();
221  }
222 
223  if (currentSubScreenItem_) {
224  update();
225  }
226  }
ScreenItem * parent()
Pointer to parent screen.
Definition: ScreenItem.cpp:37
SubScreenItem * currentSubScreenItem_
Definition: ScreenSetup.h:103
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void startDrop(QColor const &_color=QColor("#FFFFFF"))
Drop and color of drop.
Definition: ScreenItem.cpp:209
SubScreenItem * getSubScreenItemAtPos(QPoint const &)
Returns pointer to a SubScreenItem under given position Returns null otherwise.
Definition: ScreenSetup.cpp:191
void omni::ui::ScreenSetup::dragMoveEvent ( QDragMoveEvent *  event)
protected
229  {
230  auto* _screenItem = getSubScreenItemAtPos(event->pos());
231  if (_screenItem == currentSubScreenItem_) {
232  return;
233  }
234 
235  for (auto& _item : screenItems_)
236  _item.second->endDrop();
237 
238  currentSubScreenItem_ = _screenItem;
239 
240  if (event->mimeData()->hasFormat("text/plain"))
241  {
242  auto* _tuningWidget = static_cast<proj::Tuning*>(event->source());
243  if (!_tuningWidget->tuning()) return;
244 
245  if (currentSubScreenItem_) {
246  auto _color = _tuningWidget->tuning()->color();
248  }
249  event->acceptProposedAction();
250  }
251  if (currentSubScreenItem_) {
252  update();
253  }
254  }
ScreenItem * parent()
Pointer to parent screen.
Definition: ScreenItem.cpp:37
SubScreenItem * currentSubScreenItem_
Definition: ScreenSetup.h:103
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void startDrop(QColor const &_color=QColor("#FFFFFF"))
Drop and color of drop.
Definition: ScreenItem.cpp:209
SubScreenItem * getSubScreenItemAtPos(QPoint const &)
Returns pointer to a SubScreenItem under given position Returns null otherwise.
Definition: ScreenSetup.cpp:191
void omni::ui::ScreenSetup::dropEvent ( QDropEvent *  event)
protected
257  {
258  for (auto& _item : screenItems_)
259  _item.second->endDrop();
260 
262 
264  {
265  auto* _tuningWidget = static_cast<proj::Tuning*>(event->source());
266  if (!_tuningWidget->tuning()) return;
267 
268  // Detach tuning from all screens if already assigned
269  for (auto& _screenItem : screenItems_) {
270  _screenItem.second->detachTuningWidget(_tuningWidget);
271  }
272 
274  event->acceptProposedAction();
275  }
276 
277  for (auto& _screenItem : screenItems_)
278  {
279  auto& _item = _screenItem.second;
280  _item->endDrop();
281  }
282 
283  currentSubScreenItem_ = nullptr;
284  }
void attachTuningWidget(omni::ui::proj::Tuning *_tuning)
Attach tuning widget to this subscreen.
Definition: ScreenItem.cpp:124
void detachTuningWidget()
Detach current tuning widget from this subscreen.
Definition: ScreenItem.cpp:132
SubScreenItem * currentSubScreenItem_
Definition: ScreenSetup.h:103
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
SubScreenItem * getSubScreenItemAtPos(QPoint const &)
Returns pointer to a SubScreenItem under given position Returns null otherwise.
Definition: ScreenSetup.cpp:191
bool omni::ui::ScreenSetup::frontendToData ( )
inlineprivatevirtual

Return true if data has changed by front end.

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

91  {
92  return false;
93  }
SubScreenItem * omni::ui::ScreenSetup::getSubScreenItemAtPos ( QPoint const &  _pos)
private

Returns pointer to a SubScreenItem under given position Returns null otherwise.

192  {
193  for (auto& _screenItem : screenItems_)
194  {
195  auto& _item = _screenItem.second;
196  _item->setHoverIndex(_pos);
197  if (_item->hoveredItem())
198  {
199  return _item->hoveredItem();
200  }
201  }
202  return nullptr;
203  }
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void omni::ui::ScreenSetup::mouseDoubleClickEvent ( QMouseEvent *  _event)
protected

Detach tuning on double click on screen event.

182  {
183  auto _subScreenItem = getSubScreenItemAtPos(_event->pos());
184  if (_subScreenItem)
185  {
186  _subScreenItem->detachTuningWidget();
187  update();
188  }
189  }
void detachTuningWidget()
Detach current tuning widget from this subscreen.
Definition: ScreenItem.cpp:132
SubScreenItem * getSubScreenItemAtPos(QPoint const &)
Returns pointer to a SubScreenItem under given position Returns null otherwise.
Definition: ScreenSetup.cpp:191
void omni::ui::ScreenSetup::mouseMoveEvent ( QMouseEvent *  _event)
protected
172  {
173  for (auto& _screenItem : screenItems_)
174  {
175  auto& _item = _screenItem.second;
176  _item->setHoverIndex(_event->pos());
177  }
178  update();
179  }
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void omni::ui::ScreenSetup::paintEvent ( QPaintEvent *  )
protected

Draw all items

148  {
149  QPainter _p(this);
150  _p.setPen(QPen(QColor("#ffffff").darker(150),3));
151 
152  if (screenItems_.empty())
153  {
154  QFont _font("Helvetica",30 / devicePixelRatio());
155  _p.setFont(_font);
156  _p.setBrush(QBrush("#cccccc"));
157  _p.drawText(rect(),Qt::AlignCenter,"No screen connected.");
158  return;
159  }
160 
161  _p.setPen(QPen(QColor("#ffffff").darker(150),3));
162  _p.drawRect(transformedRect());
163 
164  /// Draw all items
165  for (auto& _item : screenItems_)
166  {
167  _item.second->paint(_p);
168  }
169  }
QRectF transformedRect() const
Returns transformed bounding rect which fits into window and keeps.
Definition: TransformedRect.h:75
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102
void omni::ui::ScreenSetup::setTuningList ( proj::TuningList _list)
64  {
65  tuningList_ = _list;
66  connect(tuningList_,SIGNAL(tuningAdded()),this,SLOT(assignNewTuningToNextFreeScreen()));
67  }
proj::TuningList * tuningList_
Definition: ScreenSetup.h:104
void assignNewTuningToNextFreeScreen()
Definition: ScreenSetup.cpp:109
proj::TuningList * omni::ui::ScreenSetup::tuningList ( )
69  {
70  return tuningList_;
71  }
proj::TuningList * tuningList_
Definition: ScreenSetup.h:104
proj::TuningList const * omni::ui::ScreenSetup::tuningList ( ) const
73  {
74  return tuningList_;
75  }
proj::TuningList * tuningList_
Definition: ScreenSetup.h:104
void omni::ui::ScreenSetup::updateScreens ( )
slot

Update screen dimensions.

82  {
83  screenItems_.clear();
84 
85  auto _screens = omni::proj::ScreenSetup::screens();
86 
87  for (auto& _screen : _screens)
88  {
90  screenItems_[_screen].reset(new ScreenItem(*this,_screen));
91  }
92 
93  if (tuningList_) {
94  for (auto& _tuning : dataModel()->tunings()) {
95  assignTuning(_tuning.get());
96  }
97  }
98  update();
99  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
void assignTuning(omni::proj::Tuning *)
Definition: ScreenSetup.cpp:132
friend ScreenItem
Definition: ScreenSetup.h:85
static std::vector< QScreen const * > screens(bool _excludeStandardScreen=true)
Return vector, optionally excluded standard screen.
Definition: ScreenSetup.cpp:189
proj::TuningList * tuningList_
Definition: ScreenSetup.h:104
static QScreen const * standardScreen()
Return standard screen, where omnidome has to be placed.
Definition: ScreenSetup.cpp:52
#define OMNI_DEBUG
Definition: util.h:122
std::map< QScreen const *, std::unique_ptr< ScreenItem > > screenItems_
Definition: ScreenSetup.h:102

Field Documentation

SubScreenItem* omni::ui::ScreenSetup::currentSubScreenItem_ = nullptr
private
friend omni::ui::ScreenSetup::ScreenItem
private
std::map<QScreen const *, std::unique_ptr<ScreenItem> > omni::ui::ScreenSetup::screenItems_
private
friend omni::ui::ScreenSetup::SubScreenItem
private
proj::TuningList* omni::ui::ScreenSetup::tuningList_ = nullptr
private

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