LibreCAD
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Friends Macros
LCViewer::LCADViewer Class Reference

#include <lcadviewer.h>

Inheritance diagram for LCViewer::LCADViewer:
Collaboration diagram for LCViewer::LCADViewer:

Public Slots

void setVerticalOffset (int v)
 
void setHorizontalOffset (int v)
 

Signals

void mouseMoveEvent ()
 
void mousePressEvent ()
 
void mouseReleaseEvent ()
 
void drawEvent (const DrawEvent &)
 
void selectedItemsEvent (const SelectedItemsEvent &)
 

Public Member Functions

 LCADViewer (QWidget *parent=0)
 
 ~LCADViewer ()
 
void setDocument (std::shared_ptr< lc::Document > document)
 
void setSnapManager (std::shared_ptr< SnapManager > snapmanager)
 
void setDragManager (DragManager_SPtr dragManager)
 
std::shared_ptr< DocumentCanvas > documentCanvas () const
 
void autoScale () const
 
void setOperationActive (bool operationActive)
 
const std::shared_ptr
< DocumentCanvas > & 
docCanvas () const
 

Protected Member Functions

void paintEvent (QPaintEvent *)
 
virtual void mousePressEvent (QMouseEvent *event)
 
virtual void mouseMoveEvent (QMouseEvent *event)
 
virtual void mouseReleaseEvent (QMouseEvent *event)
 
virtual void wheelEvent (QWheelEvent *event)
 
virtual void keyPressEvent (QKeyEvent *event)
 
virtual void keyReleaseEvent (QKeyEvent *event)
 
virtual void resizeEvent (QResizeEvent *event)
 

Private Member Functions

void createPainters (unsigned int width, unsigned int height)
 
void deletePainters ()
 
void updateBackground ()
 
void updateDocument ()
 
void on_commitProcessEvent (const lc::CommitProcessEvent &)
 

Private Attributes

bool _altKeyActive
 
bool _ctrlKeyActive
 
std::shared_ptr< DocumentCanvas > _docCanvas
 
bool _mouseScrollKeyActive
 
bool _operationActive
 
std::map< LcPainter *, QImage * > imagemaps
 
double _scale
 
double _zoomMin
 
double _zoomMax
 
int v_ = 0
 
int h_ = 0
 
bool _scaleLineWidth
 
QPoint startSelectPos
 
std::shared_ptr< lc::Document > _document
 
std::shared_ptr< SnapManager > _snapManager
 
DragManager_SPtr _dragManager
 
LcPainter * _backgroundPainter
 
LcPainter * _documentPainter
 
LcPainter * _foregroundPainter
 

Detailed Description

Definition at line 61 of file lcadviewer.h.

Constructor & Destructor Documentation

LCADViewer::LCADViewer ( QWidget *  parent = 0)

Definition at line 7 of file lcadviewer.cpp.

7  :
8  QWidget(parent),
9  _docCanvas(nullptr),
10  _mouseScrollKeyActive(false),
11  _operationActive(false),
12  _scale(1.0),
13  _zoomMin(0.05),
14  _zoomMax(20.0),
15  _scaleLineWidth(false) {
16 
17  setMouseTracking(true);
18  this->_altKeyActive = false;
19  this->_ctrlKeyActive = false;
20  setCursor(Qt::BlankCursor);
21 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
LCADViewer::~LCADViewer ( )

Definition at line 23 of file lcadviewer.cpp.

23  {
25 
26  _document->commitProcessEvent().disconnect<LCADViewer, &LCADViewer::on_commitProcessEvent>(this);
27 }
void on_commitProcessEvent(const lc::CommitProcessEvent &)
Definition: lcadviewer.cpp:53
LCADViewer(QWidget *parent=0)
Definition: lcadviewer.cpp:7
std::shared_ptr< lc::Document > _document
Definition: lcadviewer.h:135

Member Function Documentation

void LCViewer::LCADViewer::autoScale ( ) const
inline

Definition at line 72 of file lcadviewer.h.

72  {
73  documentCanvas()->autoScale(*_documentPainter);
74  }
std::shared_ptr< DocumentCanvas > documentCanvas() const
Definition: lcadviewer.cpp:242
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCADViewer::createPainters ( unsigned int  width,
unsigned int  height 
)
private

Definition at line 271 of file lcadviewer.cpp.

271  {
272  QImage *m_image;
273 
274  m_image = new QImage(width, height, QImage::Format_ARGB32);
275  _backgroundPainter = createCairoImagePainter(m_image->bits(), width, height);
276  imagemaps.insert(std::make_pair(_backgroundPainter, m_image));
277 
278  m_image = new QImage(width, height, QImage::Format_ARGB32);
279  _documentPainter = createCairoImagePainter(m_image->bits(), width, height);
280  imagemaps.insert(std::make_pair(_documentPainter, m_image));
281 
282  m_image = new QImage(width, height, QImage::Format_ARGB32);
283  _foregroundPainter = createCairoImagePainter(m_image->bits(), width, height);
284  imagemaps.insert(std::make_pair(_foregroundPainter, m_image));
285 }
LcPainter * _foregroundPainter
Definition: lcadviewer.h:141
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118
LcPainter * _backgroundPainter
Definition: lcadviewer.h:139
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCADViewer::deletePainters ( )
private

Definition at line 287 of file lcadviewer.cpp.

287  {
288  for(auto pair : imagemaps) {
289  delete pair.first;
290  delete pair.second;
291  }
292 
293  imagemaps.clear();
294 }
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118
const std::shared_ptr< DocumentCanvas > & LCADViewer::docCanvas ( ) const

Definition at line 306 of file lcadviewer.cpp.

306  {
307  return _docCanvas;
308 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
std::shared_ptr< DocumentCanvas > LCADViewer::documentCanvas ( ) const

Definition at line 242 of file lcadviewer.cpp.

242  {
243  return _docCanvas;
244 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
void LCViewer::LCADViewer::drawEvent ( const DrawEvent &  )
signal
void LCADViewer::keyPressEvent ( QKeyEvent *  event)
protectedvirtual

Handle key pressing and release to add additional states to this view

Definition at line 64 of file lcadviewer.cpp.

64  {
65 
66  QWidget::keyPressEvent(event);
67 
68  switch (event->key()) {
69  case Qt::Key_Shift:
70  // When shift key is released we switch back to rubber band
71  // setDragMode(QGraphicsView::ScrollHandDrag);
72  break;
73 
74  case Qt::Key_Alt:
75  //
76  _altKeyActive = true;
77  break;
78 
79  case Qt::Key_Control:
80  _ctrlKeyActive = true;
81  break;
82  }
83 
84 }
void LCADViewer::keyReleaseEvent ( QKeyEvent *  event)
protectedvirtual

Definition at line 86 of file lcadviewer.cpp.

86  {
87  QWidget::keyReleaseEvent(event);
88 
89  switch (event->key()) {
90  case Qt::Key_Shift:
91  // When shift key is released we switch back to rubber band
92  // setDragMode(QGraphicsView::RubberBandDrag);
93  break;
94 
95  case Qt::Key_Alt:
96  //
97  _altKeyActive = false;
98  break;
99 
100  case Qt::Key_Control:
101  _ctrlKeyActive = false;
102  break;
103  }
104 }
void LCADViewer::mouseMoveEvent ( QMouseEvent *  event)
protectedvirtual

Definition at line 158 of file lcadviewer.cpp.

158  {
159  QWidget::mouseMoveEvent(event);
160 
161  _snapManager->setDeviceLocation(event->pos().x(), event->pos().y());
162  _dragManager->onMouseMove();
163 
164  // Selection by area
166  if (!startSelectPos.isNull()) {
167  this->_docCanvas->pan(*_documentPainter, event->pos().x(), event->pos().y());
168 
170  updateDocument();
171  }
172  } else {
173  if (!startSelectPos.isNull()) {
174  bool occopies = startSelectPos.x() < event->pos().x();
175  _docCanvas->makeSelectionDevice(
177  std::min(startSelectPos.x(), event->pos().x()) , std::min(startSelectPos.y(), event->pos().y()),
178  std::abs(startSelectPos.x() - event->pos().x()),
179  std::abs(startSelectPos.y() - event->pos().y()), occopies);
180 
181  updateDocument();
182  }
183  }
184 
185  emit mouseMoveEvent();
186 
187  update();
188 }
std::shared_ptr< SnapManager > _snapManager
Definition: lcadviewer.h:136
DragManager_SPtr _dragManager
Definition: lcadviewer.h:137
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCViewer::LCADViewer::mouseMoveEvent ( )
signal
void LCADViewer::mousePressEvent ( QMouseEvent *  event)
protectedvirtual

Definition at line 190 of file lcadviewer.cpp.

190  {
191  QWidget::mousePressEvent(event);
192 
193  startSelectPos = event->pos();
194 
195  if(!_operationActive) {
196  _dragManager->onMousePress();
197  }
198 
199  if(_dragManager->entityDragged()) {
200  startSelectPos = QPoint();
201  }
202 
203  switch (event->buttons()) {
204  case Qt::MiddleButton: {
205  _mouseScrollKeyActive = true;
206  }
207  break;
208  }
209 
210  emit mousePressEvent();
211 }
DragManager_SPtr _dragManager
Definition: lcadviewer.h:137
void LCViewer::LCADViewer::mousePressEvent ( )
signal
void LCADViewer::mouseReleaseEvent ( QMouseEvent *  event)
protectedvirtual

Definition at line 214 of file lcadviewer.cpp.

214  {
215  startSelectPos = QPoint();
216 
217  _dragManager->onMouseRelease();
218 
219  _docCanvas->closeSelection();
220 
221  std::vector<lc::EntityDistance> emptyList;
222  // MouseReleaseEvent e(this, _lastMousePosition, event, emptyList);
223  // emit mouseReleaseEvent(e);
224  switch (event->button()) {
225  case Qt::MiddleButton: {
226  _mouseScrollKeyActive = false;
227  } break;
228 
229  default: {
230 
231  } break;
232  }
233 
234  _docCanvas->removeSelectionArea();
235  updateDocument();
236 
237  emit mouseReleaseEvent();
238 
239  update();
240 }
DragManager_SPtr _dragManager
Definition: lcadviewer.h:137
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
void LCViewer::LCADViewer::mouseReleaseEvent ( )
signal
void LCADViewer::on_commitProcessEvent ( const lc::CommitProcessEvent &  )
private

Definition at line 53 of file lcadviewer.cpp.

53  {
55  update();
56 }
void LCADViewer::paintEvent ( QPaintEvent *  p)
protected

Definition at line 254 of file lcadviewer.cpp.

254  {
255  if (p->rect().width() == 0 || p->rect().height() == 0) {
256  return;
257  }
258 
259  QPainter painter(this);
260 
261  _foregroundPainter->clear(1.0, 1.0, 1.0, 0.0);
262  _docCanvas->render(*_foregroundPainter, VIEWER_FOREGROUND);
263 
264  painter.drawImage(QPoint(0, 0), *imagemaps.at(_backgroundPainter));
265  painter.drawImage(QPoint(0, 0), *imagemaps.at(_documentPainter));
266  painter.drawImage(QPoint(0, 0), *imagemaps.at(_foregroundPainter));
267 
268  painter.end();
269 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
LcPainter * _foregroundPainter
Definition: lcadviewer.h:141
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118
LcPainter * _backgroundPainter
Definition: lcadviewer.h:139
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCADViewer::resizeEvent ( QResizeEvent *  event)
protectedvirtual

Definition at line 106 of file lcadviewer.cpp.

106  {
107  deletePainters();
108  createPainters(event->size().width(), event->size().height());
109  _docCanvas->newDeviceSize(event->size().width(), event->size().height());
110 
112  updateDocument();
113 }
void createPainters(unsigned int width, unsigned int height)
Definition: lcadviewer.cpp:271
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
void LCViewer::LCADViewer::selectedItemsEvent ( const SelectedItemsEvent &  )
signal
void LCADViewer::setDocument ( std::shared_ptr< lc::Document >  document)

Definition at line 30 of file lcadviewer.cpp.

30  {
31  int width = size().width();
32  int height = size().height();
33 
34  createPainters(width, height);
35 
36  _docCanvas = std::make_shared<DocumentCanvas>(document, [this](double* x, double* y) {
37  _documentPainter->device_to_user(x, y);
38  });
39 
40  _document = document;
41  _document->commitProcessEvent().connect<LCADViewer, &LCADViewer::on_commitProcessEvent>(this);
42 }
void on_commitProcessEvent(const lc::CommitProcessEvent &)
Definition: lcadviewer.cpp:53
LCADViewer(QWidget *parent=0)
Definition: lcadviewer.cpp:7
void createPainters(unsigned int width, unsigned int height)
Definition: lcadviewer.cpp:271
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
std::shared_ptr< lc::Document > _document
Definition: lcadviewer.h:135
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCADViewer::setDragManager ( DragManager_SPtr  dragManager)

Definition at line 48 of file lcadviewer.cpp.

48  {
49  _dragManager = dragManager;
50 }
DragManager_SPtr _dragManager
Definition: lcadviewer.h:137
void LCADViewer::setHorizontalOffset ( int  v)
slot

Definition at line 145 of file lcadviewer.cpp.

145  {
146  int val = h_ - v;
147  for(auto pair : imagemaps) {
148  pair.first->translate(val * 20, 0);
149  }
150  h_ = v;
151 
153  updateDocument();
154  update();
155 }
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118
void LCADViewer::setOperationActive ( bool  operationActive)

Definition at line 246 of file lcadviewer.cpp.

246  {
247  _operationActive = operationActive;
248 
249  if(operationActive == false) {
250  documentCanvas()->removeSelection();
251  }
252 }
std::shared_ptr< DocumentCanvas > documentCanvas() const
Definition: lcadviewer.cpp:242
void LCADViewer::setSnapManager ( std::shared_ptr< SnapManager >  snapmanager)

Definition at line 44 of file lcadviewer.cpp.

44  {
45  _snapManager = snapmanager;
46 }
std::shared_ptr< SnapManager > _snapManager
Definition: lcadviewer.h:136
void LCADViewer::setVerticalOffset ( int  v)
slot

Definition at line 133 of file lcadviewer.cpp.

133  {
134  int val = v_ - v;
135  for(auto pair : imagemaps) {
136  pair.first->translate(0, val * 10);
137  }
138  v_ = v;
139 
141  updateDocument();
142  update();
143 }
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118
void LCADViewer::updateBackground ( )
private

Definition at line 296 of file lcadviewer.cpp.

296  {
297  _backgroundPainter->clear(1.0, 1.0, 1.0, 0.0);
298  _docCanvas->render(*_backgroundPainter, VIEWER_BACKGROUND);
299 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
LcPainter * _backgroundPainter
Definition: lcadviewer.h:139
void LCADViewer::updateDocument ( )
private

Definition at line 301 of file lcadviewer.cpp.

301  {
302  _documentPainter->clear(1.0, 1.0, 1.0, 0.0);
303  _docCanvas->render(*_documentPainter, VIEWER_DOCUMENT);
304 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
LcPainter * _documentPainter
Definition: lcadviewer.h:140
void LCADViewer::wheelEvent ( QWheelEvent *  event)
protectedvirtual

Definition at line 115 of file lcadviewer.cpp.

115  {
116 
117  if (event->angleDelta().y() > 0) {
118  for(auto pair : imagemaps) {
119  _docCanvas->zoom(*pair.first, 1.1, true, event->pos().x(), event->pos().y());
120  }
121  } else if (event->angleDelta().y() < 0) {
122  for(auto pair : imagemaps) {
123  _docCanvas->zoom(*pair.first, 0.9, true, event->pos().x(), event->pos().y());
124  }
125  }
126 
128  updateDocument();
129 
130  this->update();
131 }
std::shared_ptr< DocumentCanvas > _docCanvas
Definition: lcadviewer.h:113
std::map< LcPainter *, QImage * > imagemaps
Definition: lcadviewer.h:118

Member Data Documentation

bool LCViewer::LCADViewer::_altKeyActive
private

Definition at line 110 of file lcadviewer.h.

LcPainter* LCViewer::LCADViewer::_backgroundPainter
private

Definition at line 139 of file lcadviewer.h.

bool LCViewer::LCADViewer::_ctrlKeyActive
private

Definition at line 112 of file lcadviewer.h.

std::shared_ptr<DocumentCanvas> LCViewer::LCADViewer::_docCanvas
private

Definition at line 113 of file lcadviewer.h.

std::shared_ptr<lc::Document> LCViewer::LCADViewer::_document
private

Definition at line 135 of file lcadviewer.h.

LcPainter* LCViewer::LCADViewer::_documentPainter
private

Definition at line 140 of file lcadviewer.h.

DragManager_SPtr LCViewer::LCADViewer::_dragManager
private

Definition at line 137 of file lcadviewer.h.

LcPainter* LCViewer::LCADViewer::_foregroundPainter
private

Definition at line 141 of file lcadviewer.h.

bool LCViewer::LCADViewer::_mouseScrollKeyActive
private

Definition at line 114 of file lcadviewer.h.

bool LCViewer::LCADViewer::_operationActive
private

Definition at line 116 of file lcadviewer.h.

double LCViewer::LCADViewer::_scale
private

Definition at line 120 of file lcadviewer.h.

bool LCViewer::LCADViewer::_scaleLineWidth
private

Definition at line 128 of file lcadviewer.h.

std::shared_ptr<SnapManager> LCViewer::LCADViewer::_snapManager
private

Definition at line 136 of file lcadviewer.h.

double LCViewer::LCADViewer::_zoomMax
private

Definition at line 122 of file lcadviewer.h.

double LCViewer::LCADViewer::_zoomMin
private

Definition at line 121 of file lcadviewer.h.

int LCViewer::LCADViewer::h_ = 0
private

Definition at line 124 of file lcadviewer.h.

std::map<LcPainter*, QImage*> LCViewer::LCADViewer::imagemaps
private

Definition at line 118 of file lcadviewer.h.

QPoint LCViewer::LCADViewer::startSelectPos
private

Definition at line 131 of file lcadviewer.h.

int LCViewer::LCADViewer::v_ = 0
private

Definition at line 123 of file lcadviewer.h.


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