Go to the documentation of this file.00001 #include "constants.h"
00002
00003 #include "transitionInitialFinal.h"
00004 #include "state.h"
00005 #include "label.h"
00006 #include "transforms.h"
00007
00008 #include <math.h>
00009
00010 #include <QtDebug>
00011
00012 TransitionSELine::TransitionSELine(Editor *parent, State *state, bool start, int direction, bool dimmed):
00013 OneStateTransition(parent,state,dimmed), starting(start), direction(direction)
00014 {
00015 label = NULL;
00016 setZValue(Z_TRANSITION);
00017 setRotation();
00018 }
00019
00020 TransitionSELine::~TransitionSELine()
00021 {
00022 DBGLOG("called");
00023 }
00024
00025 void TransitionSELine::adjust()
00026 {
00027 prepareGeometryChange();
00028 if (!startState)
00029 {
00030 qWarning("TransitionSELine::adjust -> startState is not valid!");
00031 return;
00032 }
00033 startPoint = startState->pos();
00034 setPos(startPoint.x(), startPoint.y());
00035
00036
00037 int offset = (direction == NORTH || direction == SOUTH) ?
00038 startState->getHeight() / 2 :
00039 startState->getWidth() / 2;
00040
00041 line = QLineF(0,-offset,0,-TR_SE_LENGTH-offset);
00042
00043 QPainterPath path;
00044 path.moveTo(starting ? line.p2() : line.p1());
00045 path.lineTo(starting ? line.p1() : line.p2());
00046 p = path;
00047
00048 pa.clear();
00049 QMatrix matrix;
00050
00051 if (starting)
00052 {
00053 matrix.rotate(-90);
00054 pa = matrix.map(m_arrowPoints);
00055 pa.translate(0, -offset);
00056 }
00057 else
00058 {
00059 matrix.rotate(90);
00060 pa = matrix.map(m_arrowPoints);
00061 pa.translate(0,-TR_SE_LENGTH-offset);
00062 }
00063
00064 setLabelPosition();
00065 createStrokes(p);
00066 }
00067
00068 QString TransitionSELine::getTypeName() const
00069 {
00070 return starting ? "Initial" : "Final";
00071 }
00072
00073 void TransitionSELine::setDirection(int d)
00074 {
00075 direction = d;
00076 setRotation();
00077 }
00078
00079 int TransitionSELine::getDirection() const
00080 {
00081 return direction;
00082 }
00083
00084 void TransitionSELine::setRotation()
00085 {
00086 resetTransform();
00087 switch (direction)
00088 {
00089 case NORTH:
00090 break;
00091 case SOUTH:
00092 rotate(180);
00093 break;
00094 case EAST:
00095 rotate(90);
00096 break;
00097 case WEST:
00098 rotate(-90);
00099 break;
00100 case NORTH_EAST:
00101 rotate(45);
00102 break;
00103 case NORTH_WEST:
00104 rotate(-45);
00105 break;
00106 case SOUTH_EAST:
00107 rotate(135);
00108 break;
00109 case SOUTH_WEST:
00110 rotate(-135);
00111 break;
00112 }
00113 adjust();
00114 }
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158 QString TransitionSELine::getVCCommand() const
00159 {
00160 QString command = "\\";
00161
00162 command += getTypeName();
00163
00164 if (getDirection() != (starting ? DEF_TR_S_DIR : DEF_TR_E_DIR))
00165 {
00166 command += "[";
00167 command += getTypeNameSuffix().toLower();
00168 command += "]";
00169 }
00170 command += "{" + startState->getName() + "}";
00171
00172 command += getNextLabelsVCCommand();
00173
00174 return command;
00175 }
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213