Skip to content

Commit 67a67b0

Browse files
committed
[ui] Add stoppable state for the Submit button
When a job has been submitted, the state of the `Submit` button switches to `stoppable`. Clicking it in this state interrupts the node's computation on the farm.
1 parent 32c280e commit 67a67b0

File tree

2 files changed

+58
-20
lines changed

2 files changed

+58
-20
lines changed

meshroom/ui/qml/Controls/NodeActions.qml

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ Item {
1818
property var nodeRepeater: null // Reference to nodeRepeater to find delegates
1919

2020
// Signals
21-
signal computeRequest(var node)
22-
signal stopComputeRequest(var node)
23-
signal deleteDataRequest(var node)
24-
signal submitRequest(var node)
21+
signal computeRequest(var node) // Start local computation
22+
signal stopComputeRequest(var node) // Stop local computation
23+
signal deleteDataRequest(var node) // Delete node data
24+
signal submitRequest(var node) // Start external computation (submission on farm)
25+
signal stopSubmitRequest(var node) // Stop external computation (interrupt tasks on farm)
2526

2627
SystemPalette { id: activePalette }
2728

@@ -120,7 +121,26 @@ Item {
120121
default: return MaterialIcons.send
121122
}
122123
}
124+
property string computeButtonTooltip: {
125+
switch (computeButtonState) {
126+
case NodeActions.ButtonState.STOPPABLE: return "Stop Compute"
127+
default: return "Start Compute"
128+
}
129+
}
130+
123131
property int submitButtonState: NodeActions.ButtonState.LAUNCHABLE
132+
property string submitButtonIcon: {
133+
switch (submitButtonState) {
134+
case NodeActions.ButtonState.STOPPABLE: return MaterialIcons.paragliding
135+
default: return MaterialIcons.rocket_launch
136+
}
137+
}
138+
property string submitButtonTooltip: {
139+
switch (submitButtonState) {
140+
case NodeActions.ButtonState.STOPPABLE: return "Interrupt Job on Render Farm"
141+
default: return "Submit on Render Farm"
142+
}
143+
}
124144

125145
function getComputeButtonState(node) {
126146
if (actionHeader.canStopNode)
@@ -133,10 +153,10 @@ Item {
133153
}
134154

135155
function getSubmitButtonState(node) {
136-
if (actionHeader.nodeIsLocked || actionHeader.canStopNode)
137-
return NodeActions.ButtonState.DISABLED
156+
if (actionHeader.canStopNode)
157+
return NodeActions.ButtonState.STOPPABLE
138158
if (!actionHeader.nodeIsLocked && node.globalStatus == "SUCCESS")
139-
return NodeActions.ButtonState.DISABLED
159+
return NodeActions.ButtonState.DELETABLE
140160
if (actionHeader.canSubmitNode)
141161
return NodeActions.ButtonState.LAUNCHABLE
142162
return NodeActions.ButtonState.DISABLED
@@ -205,13 +225,13 @@ Item {
205225
font.pointSize: 16
206226
text: actionHeader.computeButtonIcon
207227
padding: 6
208-
ToolTip.text: "Start/Stop/Restart Compute"
228+
ToolTip.text: actionHeader.computeButtonTooltip
209229
ToolTip.visible: hovered
210230
ToolTip.delay: 1000
211231
visible: actionHeader.computeButtonState != NodeActions.ButtonState.DELETABLE
212-
enabled: actionHeader.computeButtonState % 2 == 1 // Launchable & Stoppable
232+
enabled: actionHeader.computeButtonState % 2 == 1 && !actionHeader.nodeSubmitted // Launchable & Stoppable, local
213233
// Icon color
214-
textColor: (!enabled && actionHeader.nodeSubmitted) ? Colors.statusColors["SUBMITTED"] : (checked ? palette.highlight : palette.text)
234+
textColor: checked ? palette.highlight : palette.text
215235
// Background color
216236
background: Rectangle {
217237
color: {
@@ -244,7 +264,7 @@ Item {
244264
font.pointSize: 16
245265
text: MaterialIcons.delete_
246266
padding: 6
247-
ToolTip.text: "Delete data"
267+
ToolTip.text: "Delete Data"
248268
ToolTip.visible: hovered
249269
ToolTip.delay: 1000
250270
visible: actionHeader.canRestartNode || actionHeader.computeButtonState == NodeActions.ButtonState.DELETABLE
@@ -265,20 +285,23 @@ Item {
265285
MaterialToolButton {
266286
id: submitButton
267287
font.pointSize: 16
268-
text: MaterialIcons.rocket_launch
288+
text: actionHeader.submitButtonIcon
269289
padding: 6
270-
ToolTip.text: "Submit on Render Farm"
290+
ToolTip.text: actionHeader.submitButtonTooltip
271291
ToolTip.visible: hovered
272292
ToolTip.delay: 1000
273-
visible: root.uigraph ? root.uigraph.canSubmit : false
274-
enabled: actionHeader.submitButtonState != NodeActions.ButtonState.DISABLED
293+
visible: actionHeader.submitButtonState != NodeActions.ButtonState.DELETABLE
294+
enabled: actionHeader.submitButtonState % 2 == 1 && (actionHeader.nodeSubmitted || !actionHeader.nodeIsLocked) // Launchable & Stoppable, external
275295
// Icon color
276-
textColor: (!enabled && actionHeader.nodeSubmitted) ? Colors.statusColors["SUBMITTED"] : (checked ? palette.highlight : palette.text)
296+
textColor: checked ? palette.highlight : palette.text
277297
// Background color
278298
background: Rectangle {
279299
color: {
280300
if (!submitButton.enabled)
281301
return activePalette.button
302+
303+
if (actionHeader.submitButtonState == NodeActions.ButtonState.STOPPABLE)
304+
return submitButton.hovered ? Colors.orange : Qt.darker(Colors.orange, 1.3)
282305
return submitButton.hovered ? activePalette.highlight : activePalette.button
283306
}
284307
opacity: submitButton.hovered ? 1 : root._opacity
@@ -287,8 +310,16 @@ Item {
287310
radius: 3
288311
}
289312
onClicked: {
290-
if (actionHeader.selectedNode) {
291-
root.submitRequest(actionHeader.selectedNode)
313+
switch (actionHeader.submitButtonState) {
314+
case NodeActions.ButtonState.STOPPABLE:
315+
root.stopSubmitRequest(actionHeader.selectedNode)
316+
break
317+
case NodeActions.ButtonState.LAUNCHABLE:
318+
root.submitRequest(actionHeader.selectedNode)
319+
actionHeader.updateProperties(actionHeader.selectedNode)
320+
break
321+
default:
322+
break
292323
}
293324
}
294325
}

meshroom/ui/qml/GraphEditor/GraphEditor.qml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,14 +1093,21 @@ Item {
10931093
uigraph.cancelNodeComputation(node)
10941094
}
10951095
}
1096-
1096+
10971097
onDeleteDataRequest: function(node) {
1098-
uigraph.clearSelectedNodesData();
1098+
uigraph.clearSelectedNodesData()
10991099
}
11001100

11011101
onSubmitRequest: function(node) {
11021102
root.submitRequest([node])
11031103
}
1104+
1105+
onStopSubmitRequest: function(node) {
1106+
if (node.canBeStopped() || node.canBeCanceled()) {
1107+
uigraph.stopNode(node)
1108+
}
1109+
}
1110+
11041111
}
11051112

11061113
MessageDialog {

0 commit comments

Comments
 (0)