Skip to content

Commit 5455ead

Browse files
committed
Update arrangement actions
1 parent b160a9f commit 5455ead

File tree

7 files changed

+154
-0
lines changed

7 files changed

+154
-0
lines changed

src/plugins/visualeditor/core/ArrangementPanelInterface.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,19 @@ namespace VisualEditor {
138138
return d->arrangementView;
139139
}
140140

141+
ArrangementPanelInterface::Tool ArrangementPanelInterface::tool() const {
142+
Q_D(const ArrangementPanelInterface);
143+
return d->tool;
144+
}
145+
146+
void ArrangementPanelInterface::setTool(Tool tool) {
147+
Q_D(ArrangementPanelInterface);
148+
if (d->tool != tool) {
149+
d->tool = tool;
150+
Q_EMIT toolChanged();
151+
}
152+
}
153+
141154
}
142155

143156
#include "moc_ArrangementPanelInterface.cpp"

src/plugins/visualeditor/core/ArrangementPanelInterface.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ namespace VisualEditor {
3838
Q_PROPERTY(sflow::ScrollBehaviorViewModel *scrollBehaviorViewModel READ scrollBehaviorViewModel CONSTANT)
3939
Q_PROPERTY(sflow::TimelineInteractionController *timelineInteractionController READ timelineInteractionController CONSTANT)
4040
Q_PROPERTY(QQuickItem *arrangementView READ arrangementView CONSTANT)
41+
Q_PROPERTY(Tool tool READ tool WRITE setTool NOTIFY toolChanged)
4142

4243
public:
4344
~ArrangementPanelInterface() override;
@@ -53,6 +54,18 @@ namespace VisualEditor {
5354

5455
QQuickItem *arrangementView() const;
5556

57+
enum Tool {
58+
PointerTool,
59+
PencilTool,
60+
HandTool,
61+
};
62+
Q_ENUM(Tool)
63+
Tool tool() const;
64+
void setTool(Tool tool);
65+
66+
Q_SIGNALS:
67+
void toolChanged();
68+
5669
private:
5770
friend class Internal::ArrangementAddOn;
5871
QScopedPointer<ArrangementPanelInterfacePrivate> d_ptr;

src/plugins/visualeditor/core/ArrangementPanelInterface_p.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace VisualEditor {
1818

1919
QQuickItem *arrangementView;
2020

21+
ArrangementPanelInterface::Tool tool{ArrangementPanelInterface::PointerTool};
22+
2123
void bindTimeViewModel() const;
2224
void bindTimeLayoutViewModel() const;
2325
void bindTimelineInteractionController() const;

src/plugins/visualeditor/internal/addon/ArrangementAddOn.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,17 @@ namespace VisualEditor::Internal {
1919
void ArrangementAddOn::initialize() {
2020
auto windowInterface = windowHandle()->cast<Core::ProjectWindowInterface>();
2121
new ArrangementPanelInterface(windowInterface);
22+
{
23+
QQmlComponent component(Core::RuntimeInterface::qmlEngine(), "DiffScope.VisualEditor", "ArrangementAddOnActions");
24+
if (component.isError()) {
25+
qFatal() << component.errorString();
26+
}
27+
auto o = component.createWithInitialProperties({
28+
{"addOn", QVariant::fromValue(this)},
29+
});
30+
o->setParent(this);
31+
QMetaObject::invokeMethod(o, "registerToContext", windowInterface->actionContext());
32+
}
2233
{
2334
QQmlComponent component(Core::RuntimeInterface::qmlEngine(), "DiffScope.VisualEditor", "ArrangementPanel", this);
2435
if (component.isError()) {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import QtQml
2+
import QtQuick
3+
import QtQuick.Controls
4+
5+
import SVSCraft
6+
import SVSCraft.UIComponents
7+
import SVSCraft.UIComponents.impl
8+
9+
import QActionKit
10+
11+
ActionCollection {
12+
id: d
13+
14+
required property QtObject addOn
15+
readonly property ArrangementPanelInterface arrangementPanelInterface: addOn?.arrangementPanelInterface ?? null
16+
17+
ActionItem {
18+
actionId: "org.diffscope.visualeditor.arrangementPanel.pointerTool"
19+
Action {
20+
checkable: true
21+
checked: d.arrangementPanelInterface.tool === ArrangementPanelInterface.PointerTool
22+
onTriggered: () => {
23+
d.arrangementPanelInterface.tool = ArrangementPanelInterface.PointerTool
24+
Qt.callLater(() => GlobalHelper.setProperty(this, "checked", true))
25+
}
26+
}
27+
}
28+
29+
ActionItem {
30+
actionId: "org.diffscope.visualeditor.arrangementPanel.pencilTool"
31+
Action {
32+
checkable: true
33+
checked: d.arrangementPanelInterface.tool === ArrangementPanelInterface.PencilTool
34+
onTriggered: () => {
35+
d.arrangementPanelInterface.tool = ArrangementPanelInterface.PencilTool
36+
Qt.callLater(() => GlobalHelper.setProperty(this, "checked", true))
37+
}
38+
}
39+
}
40+
41+
ActionItem {
42+
actionId: "org.diffscope.visualeditor.arrangementPanel.handTool"
43+
Action {
44+
checkable: true
45+
checked: d.arrangementPanelInterface.tool === ArrangementPanelInterface.HandTool
46+
onTriggered: () => {
47+
d.arrangementPanelInterface.tool = ArrangementPanelInterface.HandTool
48+
Qt.callLater(() => GlobalHelper.setProperty(this, "checked", true))
49+
}
50+
}
51+
}
52+
53+
}

src/plugins/visualeditor/qml/panels/ArrangementPanel.qml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import QtQml
22
import QtQuick
33
import QtQuick.Controls
4+
import QtQuick.Templates as T
45
import QtQuick.Layouts
56

7+
import QActionKit
8+
69
import SVSCraft
710
import SVSCraft.UIComponents
811

@@ -13,6 +16,46 @@ QtObject {
1316
required property QtObject addOn
1417

1518
readonly property Component arrangementPanelComponent: ActionDockingPane {
19+
Component {
20+
id: dummyItem
21+
Item {}
22+
}
23+
header: ToolBarContainer {
24+
id: toolBar
25+
anchors.fill: parent
26+
spacing: 4
27+
property ActionInstantiator instantiator: ActionInstantiator {
28+
actionId: "org.diffscope.visualeditor.arrangementPanelToolBar"
29+
context: d.addOn?.windowHandle.actionContext ?? null
30+
separatorComponent: ToolBarContainerSeparator {
31+
}
32+
stretchComponent: ToolBarContainerStretch {
33+
}
34+
Component.onCompleted: forceUpdateLayouts()
35+
onObjectAdded: (index, object) => {
36+
if (object instanceof Item) {
37+
toolBar.insertItem(index, object)
38+
} else if (object instanceof T.Action) {
39+
toolBar.insertAction(index, object)
40+
} else if (object instanceof T.Menu) {
41+
toolBar.insertMenu(index, object)
42+
} else {
43+
toolBar.insertItem(index, dummyItem.createObject(this))
44+
}
45+
}
46+
onObjectRemoved: (index, object) => {
47+
if (object instanceof Item) {
48+
toolBar.removeItem(object)
49+
} else if (object instanceof Action) {
50+
toolBar.removeAction(object)
51+
} else if (object instanceof Menu) {
52+
toolBar.removeMenu(object)
53+
} else {
54+
toolBar.removeItem(target.itemAt(index))
55+
}
56+
}
57+
}
58+
}
1659
data: [d.addOn?.arrangementPanelInterface.arrangementView ?? null]
1760
}
1861

src/plugins/visualeditor/res/org.diffscope.visualeditor_actions.xml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,30 @@
1515
</configuration>
1616

1717
<items>
18+
<action id="org.diffscope.visualeditor.arrangementPanel.pointerTool" shortcut="F5" />
19+
<action id="org.diffscope.visualeditor.arrangementPanel.pencilTool" shortcut="F6" />
20+
<action id="org.diffscope.visualeditor.arrangementPanel.handTool" shortcut="F7" />
21+
<action id="org.diffscope.visualeditor.arrangementPanel.alignment" diffscope:excludeFromCommands="true" />
22+
1823
<action id="org.diffscope.visualeditor.panel.arrangement" catalog="org.diffscope.core.workspacePanelWidgets" diffscope:excludeFromCommands="true"/>
1924
<action id="org.diffscope.visualeditor.panel.mixer" catalog="org.diffscope.core.workspacePanelWidgets" diffscope:excludeFromCommands="true"/>
2025
<action id="org.diffscope.visualeditor.panel.pianoRoll" catalog="org.diffscope.core.workspacePanelWidgets" diffscope:excludeFromCommands="true"/>
2126
</items>
2227

28+
<layouts>
29+
<menu id="org.diffscope.visualeditor.arrangementPanelToolBar">
30+
<group id="org.diffscope.visualeditor.arrangementPanelToolBar.toolActions">
31+
<action id="org.diffscope.visualeditor.arrangementPanel.pointerTool" />
32+
<action id="org.diffscope.visualeditor.arrangementPanel.pencilTool" />
33+
<action id="org.diffscope.visualeditor.arrangementPanel.handTool" />
34+
</group>
35+
<group id="org.diffscope.visualeditor.arrangementPanelToolBar.alignmentActions">
36+
<action id="org.diffscope.visualeditor.arrangementPanel.alignment" />
37+
</group>
38+
<stretch />
39+
</menu>
40+
</layouts>
41+
2342
<insertions>
2443

2544
</insertions>

0 commit comments

Comments
 (0)