+
+
+
+
+
+
+
+
+ {{ printerName }}
+
-
mdi-content-save{{ $t("App.TopBar.SAVE_CONFIG") }}
-
mdi-file-upload{{ $t("App.TopBar.UploadPrint") }}
-
- mdi-alert-circle-outline{{ $t("App.TopBar.EmergencyStop") }}
+ mdi-alert-circle-outline{{ $t("App.TopBar.EmergencyStop") }}
@@ -90,6 +106,8 @@ import TheTopCornerMenu from '@/components/TheTopCornerMenu.vue'
import TheSettingsMenu from '@/components/TheSettingsMenu.vue'
import TheThrottledStates from '@/components/TheThrottledStates.vue'
import Panel from '@/components/ui/Panel.vue'
+import PrinterSelector from '@/components/ui/PrinterSelector.vue'
+import MainsailLogo from '@/components/ui/MainsailLogo.vue'
type uploadSnackbar = {
status: boolean
@@ -109,7 +127,9 @@ type uploadSnackbar = {
Panel,
TheThrottledStates,
TheSettingsMenu,
- TheTopCornerMenu
+ TheTopCornerMenu,
+ PrinterSelector,
+ MainsailLogo
}
})
export default class TheTopbar extends Mixins(BaseMixin) {
@@ -154,6 +174,33 @@ export default class TheTopbar extends Mixins(BaseMixin) {
return this.$store.state.printer.configfile?.save_config_pending ?? false
}
+ get printerName():string {
+ if (this.$store.state.gui.general.printername.length)
+ return this.$store.state.gui.general.printername
+
+ return this.$store.state.printer.hostname
+ }
+
+ get boolWideNavDrawer() {
+ return this.$store.state.gui.dashboard.boolWideNavDrawer ?? false
+ }
+
+ get countPrinters() {
+ return this.$store.getters['farm/countPrinters']
+ }
+
+ get boolHideUploadAndPrintButton() {
+ return this.$store.state.gui.dashboard.boolHideUploadAndPrintButton ?? false
+ }
+
+ get sidebarLogo(): string {
+ return this.$store.getters['files/getSidebarLogo']
+ }
+
+ get logoColor(): string {
+ return this.$store.state.gui.theme.logo
+ }
+
btnEmergencyStop() {
const confirmOnEmergencyStop = this.$store.state.gui.general.confirmOnEmergencyStop
if (confirmOnEmergencyStop) {
diff --git a/src/components/mixins/base.ts b/src/components/mixins/base.ts
index e4780afa2..7d95dab38 100644
--- a/src/components/mixins/base.ts
+++ b/src/components/mixins/base.ts
@@ -59,4 +59,8 @@ export default class BaseMixin extends Vue {
get isWidescreen() {
return this.$vuetify.breakpoint.xl
}
+
+ get isTouchDevice() {
+ return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0))
+ }
}
\ No newline at end of file
diff --git a/src/components/modals/AboutModal.vue b/src/components/modals/AboutModal.vue
new file mode 100644
index 000000000..e2f771ed8
--- /dev/null
+++ b/src/components/modals/AboutModal.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+ mdi-help-circle-outline
+
+
+
+ v{{ mainsailVersion }}
+ mdi-moon-waning-crescent
+ {{ moonrakerVersion }}
+
+ {{ klipperVersion }}
+
+
+
+
+
+
+ mdi-close-thick
+
+
+
+
+
+
+
+
+
+ Version
+ v2.1.0-alpha
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/components/panels/MiniconsolePanel.vue b/src/components/panels/MiniconsolePanel.vue
index 08740ed2d..b34428d92 100644
--- a/src/components/panels/MiniconsolePanel.vue
+++ b/src/components/panels/MiniconsolePanel.vue
@@ -16,7 +16,26 @@
:title="$t('Panels.MiniconsolePanel.Headline')"
:collapsible="true"
card-class="miniconsole-panel"
+ :hideButtonsOnCollapse="true"
>
+
+
+
+
+
+ mdi-filter
+
+
+
+
+
+
+
+
+
+
+
+
@@ -39,25 +58,14 @@
hide-details
outlined
dense
+ :prepend-icon="isTouchDevice ? 'mdi-chevron-double-right' : ''"
+ @click:prepend="getAutocomplete"
append-icon="mdi-send"
@click:append="doSend"
>
-
-
-
- mdi-filter
-
-
-
-
-
-
-
-
-
-
+
@@ -124,6 +132,7 @@ export default class MiniconsolePanel extends Mixins(BaseMixin) {
return this.$store.getters['server/getConsoleEvents'](this.consoleDirection === 'table', 250)
}
+
@Watch('events')
eventsChanged() {
if (this.consoleDirection === 'shell'){
diff --git a/src/components/panels/StatusPanel.vue b/src/components/panels/StatusPanel.vue
index 63bde286a..ec5daa16c 100644
--- a/src/components/panels/StatusPanel.vue
+++ b/src/components/panels/StatusPanel.vue
@@ -363,28 +363,28 @@ export default class StatusPanel extends Mixins(BaseMixin) {
return [
{
text: this.$t('Panels.StatusPanel.PausePrint'),
- color: 'orange',
+ color: 'warning',
icon: 'mdi-pause',
loadingName: 'statusPrintPause',
status: ['printing'],
click: this.btnPauseJob
}, {
text: this.$t('Panels.StatusPanel.ResumePrint'),
- color: 'orange',
+ color: 'success',
icon: 'mdi-play',
loadingName: 'statusPrintResume',
status: ['paused'],
click: this.btnResumeJob
}, {
text: this.$t('Panels.StatusPanel.ExcludeObject.ExcludeObject'),
- color: 'orange',
+ color: 'warning',
icon: 'mdi-selection-remove',
loadingName: '',
status: this.printing_objects.length ? ['paused', 'printing'] : [],
click: this.btnExcludeObject
}, {
text: this.$t('Panels.StatusPanel.CancelPrint'),
- color: 'red',
+ color: 'error',
icon: 'mdi-stop',
loadingName: 'statusPrintCancel',
status: this.$store.state.gui.general.displayCancelPrint ? ['paused', 'printing'] : ['paused'],
diff --git a/src/components/settings/SettingsUiSettingsTab.vue b/src/components/settings/SettingsUiSettingsTab.vue
index a63046a4c..de9821426 100644
--- a/src/components/settings/SettingsUiSettingsTab.vue
+++ b/src/components/settings/SettingsUiSettingsTab.vue
@@ -59,6 +59,14 @@
+
+
+
+
+
+
+
+
@@ -143,6 +151,22 @@ export default class SettingsUiSettingsTab extends Mixins(BaseMixin) {
this.$store.dispatch('gui/saveSetting', {name: 'general.confirmOnPowerDeviceChange', value: newVal })
}
+ get boolWideNavDrawer() {
+ return this.$store.state.gui.dashboard.boolWideNavDrawer ?? false
+ }
+
+ set boolWideNavDrawer(newVal) {
+ this.$store.dispatch('gui/saveSetting', {name: 'dashboard.boolWideNavDrawer', value: newVal })
+ }
+
+ get boolHideUploadAndPrintButton() {
+ return this.$store.state.gui.dashboard.boolHideUploadAndPrintButton ?? false
+ }
+
+ set boolHideUploadAndPrintButton(newVal) {
+ this.$store.dispatch('gui/toggleHideUploadAndPrintBtn', newVal)
+ }
+
clearColorObject(color: any): string {
if (typeof color === 'object' && 'hex' in color)
color = color.hex
diff --git a/src/components/ui/Panel.vue b/src/components/ui/Panel.vue
index e85c0a946..31c68956a 100644
--- a/src/components/ui/Panel.vue
+++ b/src/components/ui/Panel.vue
@@ -34,8 +34,10 @@
-
-
+
+
+
+
+
+
+
+
+
+
+ mdi-chevron-down
+
+
+
+
+
+ {{ getPrinterName(printer._namespace) }}
+ {{ getPrinterDescription(printer)}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/locales/en.json b/src/locales/en.json
index ba2b88d55..7903137a5 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -670,6 +670,10 @@
"ShowWebcamInNavigation": "Show Webcam in navigation",
"BoolBigThumbnail": "Large thumbnail",
"BoolBigThumbnailDescription": "Display a large thumbnail in the status panel during a print.",
+ "BoolWideNavDrawer": "Wide Navigation Drawer",
+ "BoolWideNavDrawerDescription": "Display a wider Navigation Toolbar",
+ "BoolHideUploadAndPrintButton": "Hide Upload and Print Button",
+ "BoolHideUploadAndPrintButtonDescription": "Show or hide the \"Upload and Print\" button in the topbar.",
"DisplayCANCEL_PRINT": "Display CANCEL_PRINT",
"DisplayCANCEL_PRINTDescription": "Shows the CANCEL_PRINT button permanently - no second layer confirmation needed.",
"DisplayZOffset": "Show Z-Offset-Panel",
diff --git a/src/pages/Console.vue b/src/pages/Console.vue
index 8678a1898..80bbe767d 100644
--- a/src/pages/Console.vue
+++ b/src/pages/Console.vue
@@ -32,6 +32,8 @@
hide-details
outlined
dense
+ :prepend-icon="isTouchDevice ? 'mdi-chevron-double-right' : ''"
+ @click:prepend="getAutocomplete"
append-icon="mdi-send"
@click:append="doSend"
>
diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts
index cc5312fa9..68a80cbb5 100644
--- a/src/plugins/vuetify.ts
+++ b/src/plugins/vuetify.ts
@@ -6,7 +6,16 @@ import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
- theme: { dark: true },
+ theme: {
+ dark: true,
+ themes: {
+ dark: {
+ panel: '#1e1e1e',
+ toolbar: '#272727'
+ }
+ },
+ options: { customProperties: true },
+ },
icons: {
iconfont: 'mdi',
},
diff --git a/src/store/gui/actions.ts b/src/store/gui/actions.ts
index 56f638f1e..bb9706f23 100644
--- a/src/store/gui/actions.ts
+++ b/src/store/gui/actions.ts
@@ -245,4 +245,12 @@ export const actions: ActionTree = {
value: newVal
})
},
+
+ toggleHideUploadAndPrintBtn({commit, dispatch, state}, payload) {
+ commit('toggleHideUploadAndPrintBtn', payload)
+ dispatch('updateSettings', {
+ keyName: 'dashboard.boolHideUploadAndPrintButton',
+ newVal: state.dashboard.boolHideUploadAndPrintButton
+ })
+ }
}
\ No newline at end of file
diff --git a/src/store/gui/index.ts b/src/store/gui/index.ts
index 38c1b4b99..ba3a436a8 100644
--- a/src/store/gui/index.ts
+++ b/src/store/gui/index.ts
@@ -31,6 +31,7 @@ export const getDefaultState = (): GuiState => {
dashboard: {
boolTempchart: true,
boolBigThumbnail: true,
+ boolWideNavDrawer: false,
macroManagement: 'simple',
hiddenMacros: [],
hiddenTempChart: [],
diff --git a/src/store/gui/mutations.ts b/src/store/gui/mutations.ts
index d57f681c2..57e3c11f6 100644
--- a/src/store/gui/mutations.ts
+++ b/src/store/gui/mutations.ts
@@ -102,4 +102,8 @@ export const mutations: MutationTree = {
layoutArray.splice(payload.index, 1)
Vue.set(state.dashboard, payload.layoutname, layoutArray)
},
+
+ toggleHideUploadAndPrintBtn(state, payload) {
+ Vue.set(state.dashboard, 'boolHideUploadAndPrintButton', payload)
+ }
}