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::OutputPreview Class Reference

Widget to draw rendered output of a session. More...

#include <OutputPreview.h>

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

Public Slots

void triggerUpdate ()
 

Signals

void dataModelChanged ()
 

Public Member Functions

 OutputPreview (QWidget *=nullptr)
 
 ~OutputPreview ()
 
QRect desktopRect () const
 Return desktop rectangle. More...
 
- 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< OutputPreview >
 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 resizeEvent (QResizeEvent *)
 
void paintEvent (QPaintEvent *)
 
void timerEvent (QTimerEvent *)
 
- 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 drawBorder (QColor _color, QRect const &_rect, QPoint &_capPos, QString const &_caption)
 
void drawTuning (QPainter &, proj::Tuning const *)
 
void drawScreen (QPainter &, QScreen const *)
 
int verticalMultiplier () const
 
QRect getRectForTuning (proj::Tuning const *)
 Return non transformed rectangle for tuning. More...
 
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

int timerId_ = 0
 
bool needsUpdate_ = true
 
QImage image_
 

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< OutputPreview >
typedef OutputPreview widget_type
 

Detailed Description

Widget to draw rendered output of a session.

Constructor & Destructor Documentation

omni::ui::OutputPreview::OutputPreview ( QWidget *  _parent = nullptr)
30  :
31  QWidget(_parent),
32  TransformedRect<OutputPreview>(this)
33  {
34  startTimer(500.0);
35  }
omni::ui::OutputPreview::~OutputPreview ( )
37 {}

Member Function Documentation

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

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

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

181 {}
QRect omni::ui::OutputPreview::desktopRect ( ) const
virtual

Return desktop rectangle.

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

39  {
40  if (!dataModel()) return QRect();
41 
42  using namespace render;
43  auto& _exportSettings = dataModel()->exportSettings();
44 
45  QRect _rect = _exportSettings.excludeUnassignedProjectors()
46  ? dataModel()->screenSetup().desktopRect()
47  : dataModel()->screenSetup().combinedDesktopRect();
48 
49  if (_exportSettings.outputType() == OutputType::PLAIN_IMAGE) {
50  _rect.setHeight(_rect.height() * verticalMultiplier());
51  }
52 
53  return _rect;
54  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
int verticalMultiplier() const
Definition: OutputPreview.cpp:159
void omni::ui::OutputPreview::drawBorder ( QColor  _color,
QRect const &  _rect,
QPoint &  _capPos,
QString const &  _caption 
)
private
void omni::ui::OutputPreview::drawScreen ( QPainter &  _p,
QScreen const *  _screen 
)
private
144  {
145  auto& _screenSetup = dataModel()->screenSetup();
146 
147  _p.setPen(QPen(QColor("#FFFFFF")));
148  _p.setBrush(Qt::NoBrush);
149  auto _rect = _screenSetup.screenGeometry(_screen);
150  _rect.translate(-desktopRect().topLeft());
151 
152  for (int i = 0; i < verticalMultiplier(); ++i) {
153  _p.drawRect(transformedRect(_rect.translated(0,
154  _rect.height() *
155  i)));
156  }
157  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
int verticalMultiplier() const
Definition: OutputPreview.cpp:159
QRect desktopRect() const
Return desktop rectangle.
Definition: OutputPreview.cpp:39
QRectF transformedRect() const
Returns transformed bounding rect which fits into window and keeps.
Definition: TransformedRect.h:75
void omni::ui::OutputPreview::drawTuning ( QPainter &  _p,
proj::Tuning const *  _tuning 
)
private
111  {
112  auto & _screenSetup = dataModel()->screenSetup();
113 
114  QRectF _imageRect(_tuning->contentGeometry().translated(-ScreenSetup::desktopRect().topLeft() + _tuning->screenGeometry().topLeft()));
115  auto _tuningImageRect = this->transformedRect(_imageRect).toRect();
116 
117  auto& _exportSettings = dataModel()->exportSettings();
118 
119  proj::Calibration _calib(_exportSettings.outputMode());
120  _calib.setRenderSize(_tuningImageRect.size());
121  _calib.render(*_tuning);
122 
123  QImage _image;
124 
125  if (_exportSettings.outputType() == render::OutputType::PLAIN_IMAGE) {
126  _image = _calib.toImage();
127  } else {
128  _image = _calib.toPreviewImage();
129  }
130 
131  _p.drawImage(_tuningImageRect.topLeft(), _image);
132  _p.setPen(QPen(_tuning->color(), 2));
133  _p.setBrush(Qt::NoBrush);
134 
135  for (int i = 0; i < verticalMultiplier(); ++i) {
136  _p.drawRect(transformedRect(_imageRect.translated(0,
137  _imageRect.
138  height() *
139  i)).adjusted(1,
140  1, -1, -1));
141  }
142  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
QRect desktopRect() const
Pure virtual method which returns overall desktop rect.
Definition: ScreenSetup.h:55
int verticalMultiplier() const
Definition: OutputPreview.cpp:159
QRectF transformedRect() const
Returns transformed bounding rect which fits into window and keeps.
Definition: TransformedRect.h:75
bool omni::ui::OutputPreview::frontendToData ( )
inlineprivatevirtual

Return true if data has changed by front end.

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

72  {
73  return false;
74  }
QRect omni::ui::OutputPreview::getRectForTuning ( proj::Tuning const *  )
private

Return non transformed rectangle for tuning.

void omni::ui::OutputPreview::paintEvent ( QPaintEvent *  _event)
protected
64  {
65  if (!dataModel()) return;
66 
67  auto& _screenSetup = dataModel()->screenSetup();
68  auto& _exportSettings = dataModel()->exportSettings();
69 
70  auto _rect = this->rect();
71 
72  QPainter _painter(this);
73  _painter.setBrush(QBrush("#080808"));
74  _painter.setPen(Qt::NoPen);
75  _painter.drawRect(_rect);
76 
77  QRectF _imageRect(0, 0, image_.width(), image_.height());
78 
79  // _painter.drawImage(_imageRect,image_);
80  auto _screens = _screenSetup.usedScreens();
81 
82  if (_screens.empty()) {
83  QFont _font("Helvetica",30 / devicePixelRatio());
84  _painter.setFont(_font);
85  _painter.setPen(QPen("#ffffff"));
86  _painter.setBrush(QBrush("#cccccc"));
87  _painter.drawText(rect(),Qt::AlignCenter,"Nothing to export!");
88  return;
89  }
90 
91  for (auto& _screen : _screens) {
92  drawScreen(_painter, _screen);
93  }
94 
95  for (auto& _tuning : dataModel()->tunings()) {
96  if (!_tuning->hasScreen() && _exportSettings.excludeUnassignedProjectors()) continue;
97 
98  drawTuning(_painter,_tuning.get());
99  }
100 
101  needsUpdate_ = false;
102  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118
QImage image_
Definition: OutputPreview.h:78
void drawScreen(QPainter &, QScreen const *)
Definition: OutputPreview.cpp:144
void drawTuning(QPainter &, proj::Tuning const *)
Definition: OutputPreview.cpp:110
bool needsUpdate_
Definition: OutputPreview.h:77
void omni::ui::OutputPreview::resizeEvent ( QResizeEvent *  _event)
protected
60  {
61  triggerUpdate();
62  }
void triggerUpdate()
Definition: OutputPreview.cpp:56
void omni::ui::OutputPreview::timerEvent ( QTimerEvent *  )
protected
104  {
105  if (needsUpdate_) {
106  update();
107  }
108  }
bool needsUpdate_
Definition: OutputPreview.h:77
void omni::ui::OutputPreview::triggerUpdate ( )
slot
56  {
57  needsUpdate_ = true;
58  }
bool needsUpdate_
Definition: OutputPreview.h:77
int omni::ui::OutputPreview::verticalMultiplier ( ) const
private
159  {
160  auto& _exportSettings = dataModel()->exportSettings();
161 
162  using namespace render;
163 
164  if (_exportSettings.outputType() != OutputType::PLAIN_IMAGE) {
165  return 1;
166  }
167 
168  switch (_exportSettings.mappingOutputMode()) {
170  return 2;
171 
173  return 3;
174 
175  default:
176  return 1;
177  }
178  return 1;
179  }
pointer_type dataModel()
Return pointer to data model.
Definition: DataModel.h:118

Field Documentation

QImage omni::ui::OutputPreview::image_
private
bool omni::ui::OutputPreview::needsUpdate_ = true
private
int omni::ui::OutputPreview::timerId_ = 0
private

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