BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
DesignerView.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Views/SampleDesigner/DesignerView.cpp
6 //! @brief Implements class DesignerView
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
16 #include "Base/Utils/Assert.h"
20 #include <QDragEnterEvent>
21 #include <QGraphicsScene>
22 #include <QGraphicsView>
23 #include <QMimeData>
24 #include <QShortcut>
25 #include <QVBoxLayout>
26 
27 DesignerView::DesignerView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView(scene, parent)
28 {
29  setAcceptDrops(true);
30  setRenderHint(QPainter::Antialiasing);
31  setMouseTracking(true);
32  setDragMode(QGraphicsView::RubberBandDrag);
33 }
34 
36 {
37  if (dragMode() == QGraphicsView::NoDrag) {
38  return SIMPLE_SELECTION;
39  } else if (dragMode() == QGraphicsView::RubberBandDrag) {
40  return RUBBER_SELECTION;
41  } else if (dragMode() == QGraphicsView::ScrollHandDrag) {
42  return HAND_DRAG;
43  } else {
44  throw GUIHelpers::Error("DesignerView::getSelectionMode() -> Error.");
45  }
46 }
47 
49 {
50  switch (mode) {
51  case SIMPLE_SELECTION:
52  setDragMode(QGraphicsView::NoDrag);
53  setInteractive(true);
55  break;
56  case RUBBER_SELECTION:
57  setDragMode(QGraphicsView::RubberBandDrag);
58  setInteractive(true);
60  break;
61  case HAND_DRAG:
62  setDragMode(QGraphicsView::ScrollHandDrag);
63  setInteractive(false);
65  break;
66  default:
67  break;
68  }
69 }
70 
72 {
73  // fitInView(scene()->itemsBoundingRect() ,Qt::KeepAspectRatio);
74  centerOn(scene()->itemsBoundingRect().center());
75 }
76 
77 void DesignerView::onChangeScale(double new_scale)
78 {
79  QTransform oldMatrix = transform();
80  resetTransform();
81  translate(oldMatrix.dx(), oldMatrix.dy());
82  scale(new_scale, new_scale);
83 }
84 
86 {
87  DesignerScene* designerScene = dynamic_cast<DesignerScene*>(scene());
88  ASSERT(designerScene);
89  designerScene->deleteSelectedItems();
90 }
91 
92 void DesignerView::keyPressEvent(QKeyEvent* event)
93 {
94  switch (event->key()) {
95  case Qt::Key_Left:
96  break;
97  case Qt::Key_Space:
98  if (getSelectionMode() != HAND_DRAG && !event->isAutoRepeat()) {
100  }
101  break;
102  case Qt::Key_Delete:
104  break;
105  case Qt::Key_Backspace:
107  break;
108  default:
109  QWidget::keyPressEvent(event);
110  }
111 }
112 
113 void DesignerView::keyReleaseEvent(QKeyEvent* event)
114 {
115  switch (event->key()) {
116  case Qt::Key_Space:
117 
118  if (getSelectionMode() != RUBBER_SELECTION && !event->isAutoRepeat()) {
119  onSelectionMode(RUBBER_SELECTION); // space released
120  }
121  break;
122  default:
123  QWidget::keyPressEvent(event);
124  }
125 }
Defines the macro ASSERT.
#define ASSERT(condition)
Definition: Assert.h:31
Defines class DesignerMimeData.
Defines class DesignerScene.
Defines class DesignerView.
Defines class GUIHelpers functions.
Main class which represents SessionModel on graphics scene.
Definition: DesignerScene.h:37
void deleteSelectedItems()
propagates deletion of views on the scene to the model
void deleteSelectedItems()
void onChangeScale(double)
void onSelectionMode(int)
void selectionModeChanged(int)
void onCenterView()
DesignerView(QGraphicsScene *scene, QWidget *parent=0)
void keyPressEvent(QKeyEvent *event)
void keyReleaseEvent(QKeyEvent *event)
int getSelectionMode() const