• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

rocs/VisualEditor

  • sources
  • kde-4.14
  • kdeedu
  • rocs
  • VisualEditor
  • Scene
GraphScene.cpp
Go to the documentation of this file.
1 /*
2  This file is part of Rocs,
3  Copyright 2004-2011 Tomaz Canabrava <tomaz.canabrava@gmail.com>
4  Copyright 2011-2013 Andreas Cord-Landwehr <cola@uni-paderborn.de>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "GraphScene.h"
21 
22 #include "Data.h"
23 #include "Pointer.h"
24 #include "DataStructure.h"
25 #include "Document.h"
26 #include <DataStructureBackendManager.h>
27 #include "DocumentManager.h"
28 
29 #include "DataItem.h"
30 #include "PointerItem.h"
31 #include "Interface/DataPropertiesWidget.h"
32 #include "Interface/PointerPropertiesWidget.h"
33 
34 #include "Actions/AbstractAction.h"
35 #include "Actions/AlignAction.h"
36 #include "Actions/AssignValueAction.h"
37 #include "Actions/AddDataAction.h"
38 #include "Actions/DeleteAction.h"
39 #include "Actions/PropertiesDialogAction.h"
40 #include "Actions/ZoomAction.h"
41 #include <GraphVisualEditor.h>
42 
43 #include <QGraphicsItem>
44 #include <QGraphicsSceneMouseEvent>
45 #include <QGraphicsSceneWheelEvent>
46 #include <QKeyEvent>
47 #include <QMenu>
48 #include <QGraphicsView>
49 #include <QPointer>
50 
51 #include <KDebug>
52 
53 
54 GraphScene::GraphScene(QObject *parent)
55  : QGraphicsScene(parent)
56  , _graphDocument(0)
57  , _action(0)
58  , _zoomFactor(1)
59 {
60 }
61 
62 void GraphScene::setActiveGraph(DataStructurePtr g)
63 {
64  kDebug() << "Active Graph Set";
65  _graph = g;
66  connect( _graph.get(), SIGNAL(changed()), this, SLOT(update()), Qt::UniqueConnection);
67 }
68 
69 void GraphScene::setAction(QAction *action)
70 {
71  if (_action) {
72  removeEventFilter(_action);
73  }
74  _action = qobject_cast<AbstractAction*>(action);
75  action->setChecked(true);
76  installEventFilter(action);
77 }
78 
79 void GraphScene::setActiveDocument()
80 {
81  kDebug() << "Setting the document in the scene";
82  Document *document = DocumentManager::self().activeDocument();
83  if (_graphDocument == document) {
84  return;
85  } else if (document == 0) {
86  releaseDocument();
87  return;
88  }
89 
90  // set document
91  _graphDocument = document;
92  resize();
93 
94  int size = document->dataStructures().size();
95  for (int i = 0; i < size; i++) {
96  updateGraph(document->dataStructures().at(i));
97  connectGraphSignals(document->dataStructures().at(i));
98  }
99 
100  connect(document, SIGNAL(dataStructureCreated(DataStructurePtr)),
101  this, SLOT(connectGraphSignals(DataStructurePtr)));
102  connect(document, SIGNAL(sceneRectChanged(QRectF)),
103  this, SLOT(resize()));
104 
105  createItems();
106 }
107 
108 void GraphScene::createItems()
109 {
110  foreach(DataStructurePtr g, _graphDocument->dataStructures()) {
111  createItems(g);
112  }
113 }
114 
115 void GraphScene::createItems(DataStructurePtr dataStructure)
116 {
117  foreach(int type, _graphDocument->dataTypeList()) {
118  foreach(DataPtr data, dataStructure->dataList(type)) createData(data);
119  }
120  foreach(int type, _graphDocument->pointerTypeList()) {
121  foreach(PointerPtr pointer, dataStructure->pointers(type)) createEdge(pointer);
122  }
123 }
124 
125 void GraphScene::connectGraphSignals(DataStructurePtr g)
126 {
127  connect(g.get(), SIGNAL(dataCreated(DataPtr)), this, SLOT(createData(DataPtr)));
128  connect(g.get(), SIGNAL(pointerCreated(PointerPtr)), this, SLOT(createEdge(PointerPtr)));
129 }
130 
131 void GraphScene::releaseDocument()
132 {
133  _graphDocument->disconnect(this);
134  disconnect(_graphDocument);
135  foreach(DataStructurePtr ds, _graphDocument->dataStructures()) {
136  ds->disconnect(this);
137  disconnect(ds.get());
138  }
139 }
140 
141 QGraphicsItem * GraphScene::createData(DataPtr n)
142 {
143  DataItem *nItem = (DataItem*)(DataStructureBackendManager::self().dataItem(n));
144  addItem(nItem);
145  addItem(nItem->propertyListItem());
146  return nItem;
147 }
148 
149 QGraphicsItem * GraphScene::createEdge(PointerPtr e)
150 {
151  PointerItem *pointerItem = (PointerItem*)DataStructureBackendManager::self().pointerItem(e);
152  addItem(pointerItem);
153  addItem(pointerItem->propertyListItem());
154  return pointerItem;
155 }
156 
157 void GraphScene::wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)
158 {
159  DataItem *nitem = qgraphicsitem_cast<DataItem*>(itemAt(wheelEvent->scenePos()));
160  if (!nitem) {
161  wheelEvent->ignore();
162  return;
163  }
164 
165  DataPtr movableData = nitem->data();
166  int numDegrees = wheelEvent->delta();
167  if (wheelEvent->orientation() == Qt::Vertical) {
168  if (numDegrees > 0 && movableData->width() + 0.10 < 2.0) {
169  movableData->setWidth(movableData->width() + 0.1);
170  nitem->update();
171  } else if (movableData->width() - 0.10 > 0.15) {
172  movableData->setWidth(movableData->width() - 0.1);
173  nitem->update();
174  }
175  }
176  wheelEvent->accept();
177 }
178 
179 void GraphScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
180 {
181  Q_UNUSED(mouseEvent);
182 }
183 
184 void GraphScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
185 {
186  if (mouseEvent->button() == Qt::MidButton) {
187  if (DataItem *nItem = qgraphicsitem_cast<DataItem*>(itemAt(mouseEvent->scenePos()))) {
188  nItem->data()->setWidth(1);
189  }
190  }
191  QGraphicsScene::mousePressEvent(mouseEvent);
192 }
193 
194 void GraphScene::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
195 {
196  if (mouseEvent->button() == Qt::LeftButton) {
197  QGraphicsItem *i = itemAt(mouseEvent->scenePos());
198  if (DataItem *nItem = qgraphicsitem_cast<DataItem*>(i)) {
199  QPointer<DataPropertiesWidget> dialog = new DataPropertiesWidget(nItem->data());
200  dialog->setPosition(mouseEvent->screenPos());
201  dialog->exec();
202  } else if (PointerItem *eItem = qgraphicsitem_cast<PointerItem*>(i)) {
203  QPointer<PointerPropertiesWidget> dialog = new PointerPropertiesWidget(eItem->pointer());
204  dialog->setPosition(mouseEvent->screenPos());
205  dialog->exec();
206  }
207  }
208  QGraphicsScene::mouseDoubleClickEvent(mouseEvent);
209 }
210 
211 void GraphScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
212 {
213  QGraphicsScene::mouseReleaseEvent(mouseEvent);
214 }
215 
216 void GraphScene::keyPressEvent(QKeyEvent *keyEvent)
217 {
218  keyEvent->accept();
219  emit keyPressed(keyEvent);
220 }
221 
222 void GraphScene::keyReleaseEvent(QKeyEvent *keyEvent)
223 {
224  keyEvent->accept();
225  emit keyReleased(keyEvent);
226 }
227 
228 void GraphScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
229 {
230  event->accept();
231  _contextMenu = createContextMenu(event->scenePos(), event->screenPos());
232  _contextMenu->exec(event->screenPos());
233 }
234 
235 
236 void GraphScene::updateGraph(DataStructurePtr g)
237 {
238  //TODO this is a workaround to trigger updates
239  DataList dataList = g->dataListAll();
240  foreach(DataPtr n, dataList) {
241  n->setColor(n->color());
242  }
243  PointerList pointerList = g->pointerListAll();
244  foreach(PointerPtr e, pointerList) {
245  e->setWidth(e->width());
246  }
247 }
248 
249 void GraphScene::updateDocument()
250 {
251  if (_graphDocument == 0) {
252  return;
253  }
254 
255  clear();
256  int size = _graphDocument->dataStructures().size();
257 
258  for (int i = 0; i < size; i++) {
259  updateGraph(_graphDocument->dataStructures().at(i));
260  }
261 }
262 
263 void GraphScene::resize()
264 {
265  if (!_graphDocument) {
266  return;
267  }
268 
269  // set scene rect according to visual editor rect
270  QRectF graphRect = _graphDocument->sceneRect();
271  QRectF editorRect = GraphVisualEditor::self()->rect();
272 
273  QRectF sceneRect = graphRect;
274  sceneRect.adjust(-200, -200, 200, 200); // increase whiteboard in each direction around data elements
275  if (editorRect.left() < sceneRect.left()) {
276  sceneRect.setLeft(editorRect.left());
277  }
278  if (editorRect.right() > sceneRect.right()) {
279  sceneRect.setRight(editorRect.right());
280  }
281  if (editorRect.top() < sceneRect.top()) {
282  sceneRect.setTop(editorRect.top());
283  }
284  if (editorRect.bottom() > sceneRect.bottom()) {
285  sceneRect.setBottom(editorRect.bottom());
286  }
287 
288  setSceneRect(sceneRect);
289  emit resized();
290 }
291 
292 qreal GraphScene::zoomFactor() const
293 {
294  return _zoomFactor;
295 }
296 
297 void GraphScene::zoomBy(qreal scaleFactor)
298 {
299  if (scaleFactor == 0 || _zoomFactor*scaleFactor < 0.001) {
300  return;
301  }
302  views().at(0)->scale(scaleFactor, scaleFactor);
303  _zoomFactor *= scaleFactor;
304  emit zoomFactorChanged(_zoomFactor);
305 }
306 
307 void GraphScene::zoomTo(qreal scaleFactor)
308 {
309  if (scaleFactor == 0) {
310  return;
311  }
312  views().at(0)->resetMatrix();
313  views().at(0)->scale(scaleFactor, scaleFactor);
314  _zoomFactor = scaleFactor;
315  emit zoomFactorChanged(_zoomFactor);
316 }
317 
318 void GraphScene::zoomToRect(const QRectF &rect)
319 {
320  views().at(0)->fitInView(rect, Qt::KeepAspectRatioByExpanding);
321  //FIXME add computation for new zoomfactor!
322  emit zoomFactorChanged(_zoomFactor);
323 }
324 
325 
326 void GraphScene::resetZoom()
327 {
328  views().at(0)->resetMatrix();
329 }
330 
331 void GraphScene::centerOn(const QPointF &pos)
332 {
333  views().at(0)->centerOn(pos);
334 }
335 
336 
337 QMenu * GraphScene::createContextMenu(const QPointF &scenePosition, const QPointF &screenPosition)
338 {
339  QMenu *menu = new QMenu; // the context menu
340  QMenu *menuDataStructure = menu->addMenu(i18nc("@title:menu", "Data Structure"));
341  QMenu *menuSelected = menu->addMenu(i18nc("@title:menu", "Selected"));
342 
343  // prepare some context information
344  bool contextAtItem = false;
345  DataStructurePtr contextDataStructure;
346  DataPtr contextData;
347  PointerPtr contextPointer;
348  QGraphicsItem *item = itemAt(scenePosition);
349  DataItem *dataItem;
350  PointerItem *pointerItem;
351  if ((dataItem = (qgraphicsitem_cast<DataItem*>(item)))) {
352  contextAtItem = true;
353  contextDataStructure = dataItem->data()->dataStructure();
354  contextData = dataItem->data();
355  }
356  if ((pointerItem = (qgraphicsitem_cast<PointerItem*>(item)))) {
357  contextAtItem = true;
358  contextDataStructure = pointerItem->pointer()->dataStructure();
359  contextPointer = pointerItem->pointer();
360  }
361 
362  // zoom menu
363  QMenu *menuZoom = new QMenu(i18nc("@title:menu", "Zoom"));
364  ZoomAction *zoomAction = new ZoomAction(this, 0);
365  QAction* zoomInAction = new QAction(i18nc("@action:inmenu Zoom", "In"), zoomAction);
366  QAction *zoomOutAction = new QAction(i18nc("@action:inmenu Zoom", "Out"), zoomAction);
367  QAction *zoomResetAction = new QAction(i18nc("@action:inmenu Zoom", "Reset"), zoomAction);
368  menuZoom->addAction(zoomInAction);
369  menuZoom->addAction(zoomOutAction);
370  menuZoom->addAction(zoomResetAction);
371  connect(zoomInAction, SIGNAL(triggered(bool)), zoomAction, SLOT(zoomInCenter()));
372  connect(zoomOutAction, SIGNAL(triggered(bool)), zoomAction, SLOT(zoomOutCenter()));
373  connect(zoomResetAction, SIGNAL(triggered(bool)), zoomAction, SLOT(zoomReset()));
374 
375  // alignment menu
376  QMenu *menuDataStructureAlign = new QMenu(i18n("Align"));
377  AlignAction *alignDataStructureBottom = new AlignAction(i18nc("@action:inmenu align elements at bottom", "Bottom"), AlignAction::Bottom, this);
378  AlignAction *alignDataStructureCenter = new AlignAction(i18nc("@action:inmenu align elements at center", "Center"), AlignAction::HCenter, this);
379  AlignAction *alignDataStructureTop = new AlignAction(i18nc("@action:inmenu align elements at top", "Top"), AlignAction::Top, this);
380  AlignAction *alignDataStructureLeft = new AlignAction(i18nc("@action:inmenu align elements left", "Left"), AlignAction::Left, this);
381  AlignAction *alignDataStructureRight = new AlignAction(i18nc("@action:inmenu align elements right", "Right"), AlignAction::Right, this);
382  AlignAction *alignDataStructureCircle = new AlignAction(i18nc("@action:inmenu align elements as a circle", "Circle"), AlignAction::Circle, this);
383  AlignAction *alignDataStructureTree = new AlignAction(i18nc("@action:inmenu align elements such that crossing edges are minimized", "Minimize Crossing Edges"), AlignAction::MinCutTree, this);
384 
385  if (contextDataStructure) {
386  //FIXME only default data type considered
387  alignDataStructureBottom->registerData(contextDataStructure->dataList(0));
388  alignDataStructureCenter->registerData(contextDataStructure->dataList(0));
389  alignDataStructureTop->registerData(contextDataStructure->dataList(0));
390  alignDataStructureLeft->registerData(contextDataStructure->dataList(0));
391  alignDataStructureRight->registerData(contextDataStructure->dataList(0));
392  alignDataStructureCircle->registerData(contextDataStructure->dataList(0));
393  alignDataStructureTree->registerData(contextDataStructure->dataList(0));
394  }
395  if (contextAtItem) {
396  PropertiesDialogAction *dataStructurePropertiesAction = new PropertiesDialogAction(i18nc("@action:inmenu", "Properties"), contextDataStructure, this);
397  dataStructurePropertiesAction->setPosition(screenPosition);
398  menuDataStructure->addAction(dataStructurePropertiesAction);
399  }
400 
401  menuDataStructureAlign->addAction(alignDataStructureBottom);
402  menuDataStructureAlign->addAction(alignDataStructureCenter);
403  menuDataStructureAlign->addAction(alignDataStructureTop);
404  menuDataStructureAlign->addAction(alignDataStructureLeft);
405  menuDataStructureAlign->addAction(alignDataStructureRight);
406  menuDataStructureAlign->addAction(alignDataStructureCircle);
407  menuDataStructureAlign->addAction(alignDataStructureTree);
408 
409  QMenu *menuSelectedAlign = new QMenu(i18n("Align"));
410  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements at bottom", "Bottom"), AlignAction::Bottom, this));
411  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements at center", "Center"), AlignAction::HCenter, this));
412  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements at top", "Top"), AlignAction::Top, this));
413  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements left", "Left"), AlignAction::Left, this));
414  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements right", "Right"), AlignAction::Right, this));
415  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements as a circle", "Circle"), AlignAction::Circle, this));
416  menuSelectedAlign->addAction(new AlignAction(i18nc("@action:inmenu align elements such that crossing edges are minimized", "Minimize Crossing Edges"), AlignAction::MinCutTree, this));
417 
418  QMenu *menuDataStructureAssignValues = new QMenu(i18nc("@title:menu Assign values", "Values"));
419  menuDataStructureAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Enumerate"), this, AssignValueAction::Enumerate, contextDataStructure, 0));
420  menuDataStructureAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Random Integers"), this, AssignValueAction::RandomInteger, contextDataStructure, 0));
421  menuDataStructureAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Random Reals"), this, AssignValueAction::RandomReal, contextDataStructure, 0));
422 
423  QMenu *menuSelectedAssignValues = new QMenu(i18nc("@title:menu Assign values","Values"));
424  menuSelectedAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Enumerate"), this, AssignValueAction::Enumerate, 0));
425  menuSelectedAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Random Integers"), this, AssignValueAction::RandomInteger, 0));
426  menuSelectedAssignValues->addAction(new AssignValueAction(i18nc("@action:inmenu Value", "Random Reals"), this, AssignValueAction::RandomReal, 0));
427 
428  // puzzling the menu together
429  AddDataAction *addDataAction = new AddDataAction(this);
430  addDataAction->setAddPosition(scenePosition);
431  addDataAction->setCheckable(false); // it doesn't make sense to have a checkbox in the right click menu
432  connect(addDataAction, SIGNAL(triggered(bool)), addDataAction, SLOT(executePress()));
433  DeleteAction *deleteDataStructureAction = new DeleteAction(i18nc("@action:inmenu", "Delete"), this, contextDataStructure, 0);
434  DeleteAction *deleteSelectedAction = new DeleteAction(i18nc("@action:inmenu", "Delete"), this, 0);
435  DeleteAction *deleteItemAction = new DeleteAction(i18nc("@action:inmenu", "Delete"), this, contextData, 0);
436 
437  menuSelected->addMenu(menuSelectedAlign);
438  menuSelected->addMenu(menuSelectedAssignValues);
439  menuSelected->addAction(deleteSelectedAction);
440  menuDataStructure->addMenu(menuDataStructureAlign);
441  menuDataStructure->addMenu(menuDataStructureAssignValues);
442  menuDataStructure->addAction(deleteDataStructureAction);
443 
444  // activate/deactivate context depending on where the user click
445  if (selectedItems().count() == 0) {
446  menuSelected->setDisabled(true);
447  }
448  if (!contextAtItem) {
449  menuDataStructure->setDisabled(true);
450  menu->addAction(addDataAction);
451  menu->addMenu(menuZoom);
452  }
453  if (contextData) {
454  PropertiesDialogAction *dataPropertiesAction = new PropertiesDialogAction(i18nc("@action:inmenu", "Properties"), contextData, this);
455  dataPropertiesAction->setPosition(screenPosition);
456  menu->addAction(dataPropertiesAction);
457  }
458  if (contextPointer) {
459  PropertiesDialogAction *pointerPropertiesAction = new PropertiesDialogAction(i18nc("@action:inmenu", "Properties"), contextPointer, this);
460  pointerPropertiesAction->setPosition(screenPosition);
461  menu->addAction(pointerPropertiesAction);
462  }
463  if (contextAtItem) {
464  menu->addAction(deleteItemAction);
465  }
466 
467  return menu;
468 }
GraphScene::centerOn
void centerOn(const QPointF &pos)
Definition: GraphScene.cpp:331
QGraphicsScene::clear
void clear()
PropertiesDialogAction
Definition: PropertiesDialogAction.h:31
GraphScene::resize
void resize()
Definition: GraphScene.cpp:263
AssignValueAction::RandomReal
Definition: AssignValueAction.h:34
QGraphicsScene
QGraphicsScene::itemAt
QGraphicsItem * itemAt(const QPointF &position) const
QGraphicsScene::selectedItems
QList< QGraphicsItem * > selectedItems() const
AlignAction::Bottom
Definition: AlignAction.h:34
DataItem::data
DataPtr data() const
Definition: DataItem.cpp:102
QGraphicsSceneWheelEvent
QRectF::setRight
void setRight(qreal x)
GraphVisualEditor::self
static GraphVisualEditor * self()
Definition: GraphVisualEditor.cpp:103
QAction::setChecked
void setChecked(bool)
AddDataAction.h
QMenu::addAction
void addAction(QAction *action)
AddDataAction::setAddPosition
void setAddPosition(QPointF position)
Definition: AddDataAction.cpp:57
GraphScene::updateDocument
void updateDocument()
Definition: GraphScene.cpp:249
QPointer
AlignAction::Right
Definition: AlignAction.h:34
GraphScene::zoomToRect
void zoomToRect(const QRectF &rect)
Definition: GraphScene.cpp:318
QGraphicsScene::sceneRect
QRectF sceneRect() const
GraphScene::contextMenuEvent
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
Definition: GraphScene.cpp:228
AssignValueAction.h
QGraphicsSceneMouseEvent::screenPos
QPoint screenPos() const
QRectF::top
qreal top() const
AbstractAction.h
AssignValueAction
Definition: AssignValueAction.h:29
QGraphicsItem
QGraphicsSceneMouseEvent::scenePos
QPointF scenePos() const
PropertiesDialogAction::setPosition
void setPosition(QPointF screenPosition)
Definition: PropertiesDialogAction.cpp:209
GraphScene.h
GraphScene::mouseDoubleClickEvent
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
Definition: GraphScene.cpp:194
QObject::disconnect
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QRectF::left
qreal left() const
QRectF::adjust
void adjust(qreal dx1, qreal dy1, qreal dx2, qreal dy2)
GraphScene::createItems
void createItems()
Create graphic items for all elements on this document.
Definition: GraphScene.cpp:108
QGraphicsItem::update
void update(const QRectF &rect)
QGraphicsSceneContextMenuEvent::scenePos
QPointF scenePos() const
PointerPropertiesWidget.h
QRectF::setLeft
void setLeft(qreal x)
GraphScene::mouseMoveEvent
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
Definition: GraphScene.cpp:179
AssignValueAction::Enumerate
Definition: AssignValueAction.h:34
AbstractAction
the base class for custom actions. This class provides the basic functionality for all custom actions...
Definition: AbstractAction.h:36
QPointF
QGraphicsScene::mousePressEvent
virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
PointerItem.h
QGraphicsScene::mouseReleaseEvent
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
QRectF::bottom
qreal bottom() const
GraphScene::keyReleaseEvent
void keyReleaseEvent(QKeyEvent *keyEvent)
Definition: GraphScene.cpp:222
GraphScene::updateGraph
void updateGraph(DataStructurePtr g)
Definition: GraphScene.cpp:236
GraphVisualEditor.h
PropertiesDialogAction.h
GraphScene::keyReleased
void keyReleased(QKeyEvent *key)
DeleteAction.h
AlignAction::Left
Definition: AlignAction.h:34
QEvent::ignore
void ignore()
QObject::installEventFilter
void installEventFilter(QObject *filterObj)
GraphScene::resetZoom
void resetZoom()
Definition: GraphScene.cpp:326
AlignAction::Top
Definition: AlignAction.h:34
AlignAction::MinCutTree
Definition: AlignAction.h:34
AlignAction::Circle
Definition: AlignAction.h:34
QObject
AlignAction
Definition: AlignAction.h:29
QGraphicsSceneMouseEvent
QGraphicsScene::views
QList< QGraphicsView * > views() const
QGraphicsSceneContextMenuEvent
PointerPropertiesWidget
Definition: PointerPropertiesWidget.h:35
QGraphicsSceneMouseEvent::button
Qt::MouseButton button() const
AddDataAction
The 'Add Node' Action This action holds the 'Add Node' icon and tooltips, and when it's executed...
Definition: AddDataAction.h:33
QMenu::exec
QAction * exec()
GraphScene::GraphScene
GraphScene(QObject *parent)
Definition: GraphScene.cpp:54
QWidget::rect
rect
ZoomAction.h
QMenu
QEvent::accept
void accept()
GraphScene::zoomTo
void zoomTo(qreal scaleFactor)
Definition: GraphScene.cpp:307
GraphScene::zoomFactor
qreal zoomFactor() const
Definition: GraphScene.cpp:292
QRectF::right
qreal right() const
GraphScene::wheelEvent
void wheelEvent(QGraphicsSceneWheelEvent *wheelEvent)
Definition: GraphScene.cpp:157
QKeyEvent
QGraphicsSceneWheelEvent::orientation
Qt::Orientation orientation() const
QGraphicsScene::sceneRectChanged
void sceneRectChanged(const QRectF &rect)
GraphScene::createEdge
QGraphicsItem * createEdge(PointerPtr e)
Definition: GraphScene.cpp:149
QRectF::setBottom
void setBottom(qreal y)
PointerItem::propertyListItem
QGraphicsItem * propertyListItem() const
Definition: PointerItem.cpp:247
GraphScene::zoomBy
void zoomBy(qreal scaleFactor)
Definition: GraphScene.cpp:297
QRectF
GraphScene::setAction
void setAction(QAction *action)
Definition: GraphScene.cpp:69
QRectF::setTop
void setTop(qreal y)
QMenu::addMenu
QAction * addMenu(QMenu *menu)
DataItem
Definition: DataItem.h:38
QAction
PointerItem
Graphics item for data connections.
Definition: PointerItem.h:42
DataPropertiesWidget
Properties Area.
Definition: DataPropertiesWidget.h:34
GraphScene::keyPressEvent
void keyPressEvent(QKeyEvent *keyEvent)
Definition: GraphScene.cpp:216
QGraphicsScene::update
void update(qreal x, qreal y, qreal w, qreal h)
GraphScene::keyPressed
void keyPressed(QKeyEvent *key)
DataItem.h
QGraphicsScene::mouseDoubleClickEvent
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
GraphScene::zoomFactorChanged
void zoomFactorChanged(qreal zoomFactor)
GraphScene::resized
void resized()
AssignValueAction::RandomInteger
Definition: AssignValueAction.h:34
QGraphicsSceneContextMenuEvent::screenPos
QPoint screenPos() const
AlignAction::HCenter
Definition: AlignAction.h:34
ZoomAction
Definition: ZoomAction.h:35
QWidget::setDisabled
void setDisabled(bool disable)
DeleteAction
Definition: DeleteAction.h:31
QGraphicsSceneWheelEvent::scenePos
QPointF scenePos() const
AlignAction::registerData
void registerData(DataList dataList)
register data to be aligned
Definition: AlignAction.cpp:51
GraphScene::mousePressEvent
void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
Definition: GraphScene.cpp:184
QGraphicsScene::addItem
void addItem(QGraphicsItem *item)
GraphScene::setActiveDocument
void setActiveDocument()
Definition: GraphScene.cpp:79
QGraphicsSceneWheelEvent::delta
int delta() const
GraphScene::setActiveGraph
void setActiveGraph(DataStructurePtr g)
Definition: GraphScene.cpp:62
QGraphicsScene::changed
void changed(const QList< QRectF > &region)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
GraphScene::connectGraphSignals
void connectGraphSignals(DataStructurePtr g)
Definition: GraphScene.cpp:125
DataPropertiesWidget.h
DataItem::propertyListItem
QGraphicsItem * propertyListItem() const
Definition: DataItem.cpp:201
AlignAction.h
QObject::removeEventFilter
void removeEventFilter(QObject *obj)
GraphScene::createData
QGraphicsItem * createData(DataPtr n)
Definition: GraphScene.cpp:141
GraphScene::mouseReleaseEvent
void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
Definition: GraphScene.cpp:211
PointerItem::pointer
PointerPtr pointer() const
Definition: PointerItem.cpp:252
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:16:27 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

rocs/VisualEditor

Skip menu "rocs/VisualEditor"
  • Main Page
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal