30#include <QJsonDocument>
35struct EditController::Private
39 bool m_editModeEnabled;
42EditController::Private::Private()
43 : m_editModeEnabled(false)
59 return d->m_editModeEnabled;
75 qCDebug(KDSME_VIEW) <<
"sender=" << sender <<
"target=" << target <<
"pos=" << pos <<
"urls=" << urls;
79 if (qobject_cast<Transition *>(sender)) {
80 return qobject_cast<State *>(target);
85 qCDebug(KDSME_VIEW) <<
"No urls";
90 const QUrl &url = urls.first();
92 qCDebug(KDSME_VIEW) <<
"Unexpected Url Schema=" << url.scheme();
102class CreateAndPositionCommand :
public Command
112 m_createcmd->setParentElement(targetElement);
113 setText(m_createcmd->text());
118 Q_ASSERT(m_view->rootState());
123 Element *element = m_createcmd->createdElement();
133 if (size.width() > 0)
134 pos.setX(qMax<qreal>(0, pos.x() - size.width() / 2));
135 if (size.height() > 0)
136 pos.setY(qMax<qreal>(0, pos.y() - size.height() / 2));
137 poscmd.setGeometry(QRectF(pos, size));
142 m_view->setCurrentItem(element);
151 QScopedPointer<CreateElementCommand> m_createcmd;
160 qCDebug(KDSME_VIEW) <<
"sender=" << sender <<
"target=" << target <<
"pos=" << pos <<
"urls=" << urls;
162 if (urls.isEmpty()) {
163 qCDebug(KDSME_VIEW) <<
"No urls";
168 const QUrl &url = urls.first();
170 qCDebug(KDSME_VIEW) <<
"Unexpected Url Schema=" << url.scheme();
174 const QString str = url.toString(QUrl::RemoveScheme);
175 const QString typeString = str.split(u
'/').last();
176 if (typeString.isEmpty())
183 auto *cmd =
new CreateAndPositionCommand(view, type, target, QPointF(pos));
189#include "editcontroller.moc"
KDSME::StateMachineView * stateMachineView
void editModeEnabledChanged(bool editModeEnabled)
EditController(StateMachineView *parent=nullptr)
bool sendDragEnterEvent(KDSME::Element *sender, KDSME::Element *target, const QPoint &pos, const QList< QUrl > &urls)
bool sendDropEvent(KDSME::Element *sender, KDSME::Element *target, const QPoint &pos, const QList< QUrl > &urls)
void setEditModeEnabled(bool editModeEnabled)
static Q_INVOKABLE KDSME::Element::Type stringToType(const char *type)
QSizeF preferredSize() const
Command for modifying properties of KDSME::Element.
Widget for displaying a KDSME::StateMachine in a Qt Quick based view.
KDSME::StateMachineScene * scene
Q_INVOKABLE void sendCommand(KDSME::Command *cmd) const
#define KDSME_QML_URI_PREFIX
KDSME_CORE_EXPORT void importLayout(const QJsonObject &data, State *state)
Import layout data to set properties of state and its children.
KDSME_CORE_EXPORT QJsonObject exportLayout(const State *state)
Export layout of state into a machine-parsable JSON format.