Skip to content

Commit 221dd2f

Browse files
committed
refactor: move compensation menu so it can be relocated added elsewhere
This is useful, e.g. for plugins, to call into the compensation menu. Concrete example: a probing plugin.
1 parent af8c668 commit 221dd2f

File tree

4 files changed

+107
-109
lines changed

4 files changed

+107
-109
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<template>
2+
<div>
3+
<v-menu offset-y left :disabled="uiFrozen">
4+
<template #activator="{ on }">
5+
<v-btn v-show="visibleAxes.length" color="primary" block class="mx-0 move-btn" v-on="on" :disabled="uiFrozen">
6+
{{ $t("panel.movement.compensation") }}
7+
<v-icon>mdi-menu-down</v-icon>
8+
</v-btn>
9+
</template>
10+
11+
<v-card>
12+
<v-list>
13+
<div v-show="isCompensationEnabled">
14+
<v-list-item>
15+
<v-spacer />
16+
{{ $t("panel.movement.compensationInUse", [compensationType]) }}
17+
<v-spacer />
18+
</v-list-item>
19+
20+
<v-divider />
21+
</div>
22+
23+
<v-list-item @click="sendCode('G32')">
24+
<v-icon class="mr-1">mdi-format-vertical-align-center</v-icon>
25+
{{ $t(isDelta ? "panel.movement.runDelta" : "panel.movement.runBed") }}
26+
</v-list-item>
27+
<v-list-item :disabled="!isCompensationEnabled" @click="sendCode('M561')">
28+
<v-icon class="mr-1">mdi-border-none</v-icon>
29+
{{ $t("panel.movement.disableBedCompensation") }}
30+
</v-list-item>
31+
32+
<v-divider />
33+
34+
<v-list-item @click="sendCode('G29')">
35+
<v-icon class="mr-1">mdi-grid</v-icon>
36+
{{ $t("panel.movement.runMesh") }}
37+
</v-list-item>
38+
<v-list-item @click="showMeshEditDialog = true">
39+
<v-icon class="mr-1">mdi-pencil</v-icon>
40+
{{ $t("panel.movement.editMesh") }}
41+
</v-list-item>
42+
<v-list-item @click="sendCode('G29 S1')">
43+
<v-icon class="mr-1">mdi-content-save</v-icon>
44+
{{ $t("panel.movement.loadMesh") }}
45+
</v-list-item>
46+
<v-list-item :disabled="!isCompensationEnabled" @click="sendCode('G29 S2')">
47+
<v-icon class="mr-1">mdi-grid-off</v-icon>
48+
{{ $t("panel.movement.disableMeshCompensation") }}
49+
</v-list-item>
50+
</v-list>
51+
</v-card>
52+
</v-menu>
53+
<mesh-edit-dialog :shown.sync="showMeshEditDialog" />
54+
</div>
55+
</template>
56+
57+
<script lang="ts">
58+
import Vue from "vue";
59+
import { Axis, KinematicsName, MoveCompensationType } from "@duet3d/objectmodel";
60+
import store from "@/store";
61+
62+
interface CompensationMenuData {
63+
showMeshEditDialog: boolean;
64+
}
65+
66+
export default Vue.extend({
67+
data(): CompensationMenuData {
68+
return {
69+
showMeshEditDialog: false,
70+
};
71+
},
72+
computed: {
73+
uiFrozen(): boolean {
74+
return store.getters["uiFrozen"];
75+
},
76+
isCompensationEnabled(): boolean {
77+
return store.state.machine.model.move.compensation.type !== MoveCompensationType.none;
78+
},
79+
compensationType(): MoveCompensationType {
80+
return store.state.machine.model.move.compensation.type;
81+
},
82+
visibleAxes(): Axis[] {
83+
return store.state.machine.model.move.axes.filter((axis: Axis) => axis.visible);
84+
},
85+
isDelta(): boolean {
86+
return [KinematicsName.delta, KinematicsName.rotaryDelta].includes(store.state.machine.model.move.kinematics.name);
87+
},
88+
},
89+
methods: {
90+
async sendCode(code: string): Promise<void> {
91+
await store.dispatch("machine/sendCode", code);
92+
},
93+
},
94+
watch: {
95+
isConnected() {
96+
// Hide dialogs when the connection is interrupted
97+
this.showMeshEditDialog = false;
98+
},
99+
},
100+
});
101+
</script>

src/components/misc/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import NotificationDisplay from "./NotificationDisplay.vue";
77
import PanelLink from "./PanelLink.vue";
88
import StatusLabel from "./StatusLabel.vue";
99
import ThumbnailImg from "./ThumbnailImg.vue";
10+
import CompensationMenu from "./CompensationMenu.vue";
1011

1112
Vue.component("directory-breadcrumbs", DirectoryBreadcrumbs);
1213
Vue.component("job-progress", JobProgress);
@@ -15,3 +16,4 @@ Vue.component("notification-display", NotificationDisplay);
1516
Vue.component("panel-link", PanelLink);
1617
Vue.component("status-label", StatusLabel);
1718
Vue.component("thumbnail-img", ThumbnailImg);
19+
Vue.component("compensation-menu", CompensationMenu);

src/components/panels/CNCMovementPanel.vue

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -29,57 +29,7 @@
2929
</code-btn>
3030
</v-col>
3131
<v-col cols="6" order="2" md="8" order-md="2">
32-
<v-menu offset-y left :disabled="uiFrozen">
33-
<template #activator="{ on }">
34-
<v-btn v-show="visibleAxes.length" color="primary" block class="mx-0 move-btn"
35-
:disabled="uiFrozen" v-on="on">
36-
{{ $t("panel.movement.compensation") }}
37-
<v-icon>mdi-menu-down</v-icon>
38-
</v-btn>
39-
</template>
40-
41-
<v-card>
42-
<v-list>
43-
<div v-show="isCompensationEnabled">
44-
<v-list-item>
45-
<v-spacer />
46-
{{ $t("panel.movement.compensationInUse", [compensationType]) }}
47-
<v-spacer />
48-
</v-list-item>
49-
50-
<v-divider />
51-
</div>
52-
53-
<v-list-item @click="sendCode('G32')">
54-
<v-icon class="mr-1">mdi-format-vertical-align-center</v-icon>
55-
{{ $t(isDelta ? "panel.movement.runDelta" : "panel.movement.runBed") }}
56-
</v-list-item>
57-
<v-list-item :disabled="!isCompensationEnabled" @click="sendCode('M561')">
58-
<v-icon class="mr-1">mdi-border-none</v-icon>
59-
{{ $t("panel.movement.disableBedCompensation") }}
60-
</v-list-item>
61-
62-
<v-divider />
63-
64-
<v-list-item @click="sendCode('G29')">
65-
<v-icon class="mr-1">mdi-grid</v-icon>
66-
{{ $t("panel.movement.runMesh") }}
67-
</v-list-item>
68-
<v-list-item @click="showMeshEditDialog = true">
69-
<v-icon class="mr-1">mdi-pencil</v-icon>
70-
{{ $t("panel.movement.editMesh") }}
71-
</v-list-item>
72-
<v-list-item @click="sendCode('G29 S1')">
73-
<v-icon class="mr-1">mdi-content-save</v-icon>
74-
{{ $t("panel.movement.loadMesh") }}
75-
</v-list-item>
76-
<v-list-item :disabled="!isCompensationEnabled" @click="sendCode('G29 S2')">
77-
<v-icon class="mr-1">mdi-grid-off</v-icon>
78-
{{ $t("panel.movement.disableMeshCompensation") }}
79-
</v-list-item>
80-
</v-list>
81-
</v-card>
82-
</v-menu>
32+
<compensation-menu />
8333
</v-col>
8434
<v-col cols="12" order="3" md="2" order-md="3">
8535
<v-btn @click="setWorkplaceZero" block class="move-btn">
@@ -162,15 +112,14 @@
162112
{{ $t("panel.movement.noAxes") }}
163113
</v-alert>
164114

165-
<mesh-edit-dialog :shown.sync="showMeshEditDialog" />
166115
<input-dialog :shown.sync="moveStepDialog.shown" :title="$t('dialog.changeMoveStep.title')"
167116
:prompt="$t('dialog.changeMoveStep.prompt')" :preset="moveStepDialog.preset" is-numeric-value
168117
@confirmed="moveStepDialogConfirmed" />
169118
</v-card>
170119
</template>
171120

172121
<script lang="ts">
173-
import { Axis, AxisLetter, KinematicsName, MoveCompensationType } from "@duet3d/objectmodel";
122+
import { Axis, AxisLetter } from "@duet3d/objectmodel";
174123
import Vue from "vue";
175124
176125
import store from "@/store";
@@ -180,17 +129,13 @@ export default Vue.extend({
180129
uiFrozen(): boolean { return store.getters["uiFrozen"]; },
181130
moveSteps(): (axisLetter: AxisLetter) => Array<number> { return ((axisLetter: AxisLetter) => store.getters["machine/settings/moveSteps"](axisLetter)); },
182131
numMoveSteps(): number { return store.getters["machine/settings/numMoveSteps"]; },
183-
isCompensationEnabled(): boolean { return store.state.machine.model.move.compensation.type !== MoveCompensationType.none; },
184-
compensationType(): MoveCompensationType { return store.state.machine.model.move.compensation.type; },
185132
visibleAxes(): Array<Axis> { return store.state.machine.model.move.axes.filter(axis => axis.visible); },
186-
isDelta(): boolean { return [KinematicsName.linearDelta, KinematicsName.rotaryDelta].includes(store.state.machine.model.move.kinematics.name); },
187133
unhomedAxes(): Array<Axis> { return store.state.machine.model.move.axes.filter(axis => axis.visible && !axis.homed); },
188134
workCoordinates(): Array<number> { return [...Array(9).keys()].map(i => i + 1); },
189135
workplaceNumber(): number { return store.state.machine.model.move.workplaceNumber; }
190136
},
191137
data() {
192138
return {
193-
showMeshEditDialog: false,
194139
moveStepDialog: {
195140
shown: false,
196141
axis: AxisLetter.X,
@@ -258,7 +203,6 @@ export default Vue.extend({
258203
watch: {
259204
isConnected() {
260205
// Hide dialogs when the connection is interrupted
261-
this.showMeshEditDialog = false;
262206
this.moveStepDialog.shown = false;
263207
},
264208
workplaceNumber(to: number) {

src/components/panels/MovementPanel.vue

Lines changed: 2 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,52 +21,8 @@
2121

2222
<v-spacer />
2323

24-
<v-menu offset-y left>
25-
<template #activator="{ on }">
26-
<v-btn v-show="visibleAxes.length" color="primary" small class="mx-0" :elevation="1" v-on="on">
27-
{{ $t("panel.movement.compensation") }}
28-
<v-icon>mdi-menu-down</v-icon>
29-
</v-btn>
30-
</template>
24+
<compensation-menu />
3125

32-
<v-card>
33-
<v-list>
34-
<template v-show="isCompensationEnabled">
35-
<v-list-item>
36-
<v-spacer />
37-
{{ $t("panel.movement.compensationInUse", [$t(`panel.movement.compensationType.${compensationType}`)]) }}
38-
<v-spacer />
39-
</v-list-item>
40-
41-
<v-divider />
42-
</template>
43-
44-
<v-list-item :disabled="!canHome" @click="sendCode('G32')">
45-
<v-icon class="mr-1">mdi-format-vertical-align-center</v-icon>
46-
{{ isDelta ? $t("panel.movement.runDelta") : $t("panel.movement.runBed") }}
47-
</v-list-item>
48-
49-
<v-divider />
50-
51-
<v-list-item :disabled="!canHome" @click="sendCode('G29')">
52-
<v-icon class="mr-1">mdi-grid</v-icon>
53-
{{ $t("panel.movement.runMesh") }}
54-
</v-list-item>
55-
<v-list-item :disabled="uiFrozen" @click="showMeshEditDialog = true">
56-
<v-icon class="mr-1">mdi-pencil</v-icon>
57-
{{ $t("panel.movement.editMesh") }}
58-
</v-list-item>
59-
<v-list-item :disabled="uiFrozen" @click="sendCode('G29 S1')">
60-
<v-icon class="mr-1">mdi-content-save</v-icon>
61-
{{ $t("panel.movement.loadMesh") }}
62-
</v-list-item>
63-
<v-list-item :disabled="!isCompensationEnabled" @click="sendCode('G29 S2')">
64-
<v-icon class="mr-1">mdi-grid-off</v-icon>
65-
{{ $t("panel.movement.disableMeshCompensation") }}
66-
</v-list-item>
67-
</v-list>
68-
</v-card>
69-
</v-menu>
7026
</v-card-title>
7127

7228
<v-card-text v-show="visibleAxes.length !== 0">
@@ -129,7 +85,6 @@
12985
</v-row>
13086
</v-card-text>
13187

132-
<mesh-edit-dialog :shown.sync="showMeshEditDialog"></mesh-edit-dialog>
13388
<input-dialog :shown.sync="moveStepDialog.shown" :title="$t('dialog.changeMoveStep.title')"
13489
:prompt="$t('dialog.changeMoveStep.prompt')" :preset="moveStepDialog.preset" is-numeric-value
13590
@confirmed="moveStepDialogConfirmed"></input-dialog>
@@ -148,7 +103,7 @@
148103
</template>
149104

150105
<script lang="ts">
151-
import { Axis, AxisLetter, KinematicsName, MachineStatus, MoveCompensationType } from "@duet3d/objectmodel";
106+
import { Axis, AxisLetter, MachineStatus, KinematicsName } from "@duet3d/objectmodel";
152107
import Vue from "vue";
153108
154109
import store from "@/store";
@@ -159,8 +114,6 @@ export default Vue.extend({
159114
uiFrozen(): boolean { return store.getters["uiFrozen"]; },
160115
moveSteps(): (axisLetter: AxisLetter) => Array<number> { return ((axisLetter: AxisLetter) => store.getters["machine/settings/moveSteps"](axisLetter)); },
161116
numMoveSteps(): number { return store.getters["machine/settings/numMoveSteps"]; },
162-
isCompensationEnabled(): boolean { return store.state.machine.model.move.compensation.type !== MoveCompensationType.none; },
163-
compensationType(): MoveCompensationType { return store.state.machine.model.move.compensation.type; },
164117
visibleAxes(): Array<Axis> { return store.state.machine.model.move.axes.filter(axis => axis.visible); },
165118
isDelta(): boolean { return [KinematicsName.linearDelta, KinematicsName.rotaryDelta].includes(store.state.machine.model.move.kinematics.name); },
166119
canHome(): boolean {
@@ -173,7 +126,6 @@ export default Vue.extend({
173126
},
174127
data() {
175128
return {
176-
showMeshEditDialog: false,
177129
moveStepDialog: {
178130
shown: false,
179131
axis: AxisLetter.X,
@@ -220,7 +172,6 @@ export default Vue.extend({
220172
watch: {
221173
isConnected() {
222174
// Hide dialogs when the connection is interrupted
223-
this.showMeshEditDialog = false;
224175
this.moveStepDialog.shown = false;
225176
}
226177
}

0 commit comments

Comments
 (0)