• 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
  • Actions
AlignAction.cpp
Go to the documentation of this file.
1 /*
2  This file is part of Rocs.
3  Copyright 2008 Tomaz Canabrava <tomaz.canabrava@gmail.com>
4  Copyright 2008 Ugo Sangiori <ugorox@gmail.com>
5  Copyright 2011-2012 Andreas Cord-Landwehr <cola@uni-paderborn.de>
6 
7  This program is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public License as
9  published by the Free Software Foundation; either version 2 of
10  the License, or (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #include "AlignAction.h"
22 #include <KIcon>
23 #include "GraphVisualEditor.h"
24 #include "Scene/GraphScene.h"
25 #include "DataStructure.h"
26 #include "Pointer.h"
27 #include "Scene/DataItem.h"
28 #include "Modifiers/Topology.h"
29 
30 #include <KDebug>
31 
32 #include <boost/graph/fruchterman_reingold.hpp>
33 #include <boost/graph/random_layout.hpp>
34 #include <boost/graph/adjacency_list.hpp>
35 #include <boost/graph/topology.hpp>
36 #include <boost/lexical_cast.hpp>
37 #include <boost/random/linear_congruential.hpp>
38 #include <QPair>
39 #include <boost/graph/graph_concepts.hpp>
40 
41 
42 AlignAction::AlignAction(const QString& tooltip, AlignAction::Orientation o, GraphScene* gc)
43  : KAction(KIcon(), tooltip, gc)
44 {
45  _graphScene = gc;
46  setupOrientation(o);
47 
48  connect(this, SIGNAL(triggered()), this, SLOT(align()));
49 }
50 
51 void AlignAction::registerData(DataList dataList)
52 {
53  _registeredData = dataList;
54 }
55 
56 void AlignAction::unsetData()
57 {
58  _registeredData.clear();
59 }
60 
61 void AlignAction::setupOrientation(AlignAction::Orientation o)
62 {
63  _orientation = o;
64  switch (o) {
65  case Left :
66  setIcon(KIcon("rocsalignleft"));
67  break;
68  case Right :
69  setIcon(KIcon("rocsalignright"));
70  break;
71  case Top :
72  setIcon(KIcon("rocsaligntop"));
73  break;
74  case Bottom :
75  setIcon(KIcon("rocsalignbottom"));
76  break;
77  case HCenter :
78  setIcon(KIcon("rocsalignhmiddle"));
79  break;
80  case VCenter :
81  setIcon(KIcon("rocsalignvmiddle"));
82  break;
83  case Circle :
84  setIcon(KIcon("rocsaligncircle"));
85  break;
86  case MinCutTree :
87  setIcon(KIcon("rocsaligntree"));
88  break;
89  }
90 }
91 
92 
93 void AlignAction::align()
94 {
95  DataList dataList;
96  if (_registeredData.empty()) {
97  QList<QGraphicsItem*> itemList = _graphScene->selectedItems();
98  foreach(QGraphicsItem * i, itemList) {
99  if (DataItem *dataItem = qgraphicsitem_cast<DataItem*>(i)) {
100  dataList.append(dataItem->data());
101  }
102  }
103  } else {
104  dataList = _registeredData;
105  }
106 
107  if (dataList.size() < 1) {
108  return;
109  }
110  switch (_orientation) {
111  case Left :
112  case VCenter :
113  qSort(dataList.begin(), dataList.end(), leftLessThan);
114  alignX(dataList);
115  break;
116  case Bottom :
117  case HCenter :
118  qSort(dataList.begin(), dataList.end(), bottomLessThan);
119  alignY(dataList);
120  break;
121  case Right :
122  qSort(dataList.begin(), dataList.end(), rightLessThan);
123  alignX(dataList);
124  break;
125  case Top :
126  qSort(dataList.begin(), dataList.end(), topLessThan);
127  alignY(dataList);
128  break;
129  case Circle :
130  alignCircle(dataList);
131  break;
132  case MinCutTree :
133  alignMinCutTree(dataList);
134  break;
135  }
136 
137  unsetData();
138 }
139 
140 void AlignAction::alignY(DataList dataList)
141 {
142  qreal final = dataList[0]->y();
143 
144  if (_orientation == VCenter || _orientation == HCenter) {
145  qreal otherSide = dataList[dataList.size() - 1]->y();
146  final = (final + otherSide) / 2;
147  }
148  foreach(DataPtr data, dataList) {
149  data->setY(final);
150  }
151 }
152 
153 void AlignAction::alignX(DataList dataList)
154 {
155  qreal final = dataList[0]->x();
156  if (_orientation == VCenter || _orientation == HCenter) {
157  qreal otherSide = dataList[dataList.size() - 1]->x();
158  final = (final + otherSide) / 2;
159  }
160  foreach(DataPtr data, dataList) {
161  data->setX(final);
162  }
163 }
164 
165 void AlignAction::alignCircle(DataList dataList)
166 {
167  Topology topology = Topology();
168  topology.applyCircleAlignment(dataList);
169 }
170 
171 void AlignAction::alignMinCutTree(DataList dataList)
172 {
173  Topology topology = Topology();
174  topology.applyMinCutTreeAlignment(dataList);
175 }
AlignAction::AlignAction
AlignAction(const QString &tooltip, AlignAction::Orientation o, GraphScene *gc)
Creates a new align button.
Definition: AlignAction.cpp:42
QGraphicsScene::selectedItems
QList< QGraphicsItem * > selectedItems() const
AlignAction::Bottom
Definition: AlignAction.h:34
AlignAction::Right
Definition: AlignAction.h:34
AlignAction::VCenter
Definition: AlignAction.h:34
QGraphicsItem
GraphScene.h
GraphVisualEditor.h
AlignAction::Left
Definition: AlignAction.h:34
GraphScene
Definition: GraphScene.h:38
AlignAction::Top
Definition: AlignAction.h:34
AlignAction::MinCutTree
Definition: AlignAction.h:34
AlignAction::Circle
Definition: AlignAction.h:34
AlignAction::unsetData
void unsetData()
unset registered data
Definition: AlignAction.cpp:56
QString
QList
AlignAction::align
void align()
Run the previously specified align algorithm for the selected set of data.
Definition: AlignAction.cpp:93
AlignAction::Orientation
Orientation
Definition: AlignAction.h:34
DataItem
Definition: DataItem.h:38
KAction
DataItem.h
AlignAction::HCenter
Definition: AlignAction.h:34
AlignAction::registerData
void registerData(DataList dataList)
register data to be aligned
Definition: AlignAction.cpp:51
AlignAction.h
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