fix: UI fixes related to feedback form beta-phase (#494)
* fix: truncated settings menu Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: change probe chips to label Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor(timelapse): change button color and make responsive Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: change display helpers of some buttons * fix(#390): encodeURI of thumbnails in files page Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: responsivity of timelapse-page Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor(timelapse): more responsiveness Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor(timelapse): no frames found visibility Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: tooltip on disabled retract /extrude buttons * refactor(editor): show "read-only" in title if file is not writable * fix: visibility of reload button Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: select printer dialog new ui style Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: add attach prop to inputs w dropdowns Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: paddings of panels on spec. viewports Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: hide spin buttons on number inputs Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: hide-spin-buttons after merging timelapseTab Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: add overlay-scrollbar to sidebar Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: scrollbars in settingsmenu Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * feat: remember current path when leaving gcode-files-page Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: remove comment in gcodefilespanel Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * feat: remember current path in timlapse files panel Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * feat: remember current path in config files panel Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: console text colors and add css classes Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: filepanel-path-persistance to new db layout Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: settings tab scrollbars Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: button logic in heigthmap Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: color home button in heightmap Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: heightmap add color to small buttons Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * refactor: sidebar behavior on touch devices Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: reapply tooltip patch after merge Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: temp sidebar remove touch-condition Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * feat: add save-action for non persistant settings Signed-off-by: steadyjaw <martin.keilaus@gmail.com> * fix: use new save action in setters Signed-off-by: steadyjaw <martin.keilaus@gmail.com>
This commit is contained in:
parent
c1b344e94c
commit
b6966f05ee
@ -3,7 +3,7 @@
|
|||||||
<v-btn icon tile @click="showSettings = true">
|
<v-btn icon tile @click="showSettings = true">
|
||||||
<v-icon>mdi-cogs</v-icon>
|
<v-icon>mdi-cogs</v-icon>
|
||||||
</v-btn>
|
</v-btn>
|
||||||
<v-dialog v-model="showSettings" width="900" persistent :fullscreen="isMobile" @keydown.esc="showSettings = false">
|
<v-dialog v-model="showSettings" width="900" persistent :fullscreen="isMobile" @keydown.esc="showSettings = false" scrollable>
|
||||||
<panel :title="$t('Settings.InterfaceSettings')" icon="mdi-cogs" card-class="settings-menu-dialog" :margin-bottom="false" style="overflow: hidden;" :height="isMobile ? 0 : 548">
|
<panel :title="$t('Settings.InterfaceSettings')" icon="mdi-cogs" card-class="settings-menu-dialog" :margin-bottom="false" style="overflow: hidden;" :height="isMobile ? 0 : 548">
|
||||||
<template v-slot:buttons>
|
<template v-slot:buttons>
|
||||||
<v-btn icon tile @click="showSettings = false"><v-icon>mdi-close-thick</v-icon></v-btn>
|
<v-btn icon tile @click="showSettings = false"><v-icon>mdi-close-thick</v-icon></v-btn>
|
||||||
@ -187,18 +187,18 @@ export default class TheSettingsMenu extends Mixins(BaseMixin) {
|
|||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.settings-tabs {
|
.settings-tabs {
|
||||||
height: auto;
|
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
max-height: calc(var(--app-height) - 96px);
|
height: calc(var(--app-height) - 96px);
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-tabs-bar {
|
.settings-tabs-bar {
|
||||||
border-right: 1px solid rgba(255, 255, 255, 0.12);
|
border-right: 1px solid rgba(255, 255, 255, 0.12);
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.settings-tabs-bar.height500,
|
|
||||||
.settings-tabs.height500 {
|
.settings-tabs.height500 {
|
||||||
max-height: 500px;
|
height: 500px;
|
||||||
|
max-height: calc(var(--app-height) - 111px);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
@ -2,24 +2,33 @@
|
|||||||
.nav-logo {
|
.nav-logo {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.small-list-item {
|
.small-list-item {
|
||||||
height: var(--sidebar-menu-item-height);
|
height: var(--sidebar-menu-item-height);
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-text-decoration {
|
.no-text-decoration {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.no-background:before {
|
.no-background:before {
|
||||||
background-color: rgba(255, 255, 255, 0) !important;
|
background-color: rgba(255, 255, 255, 0) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.no-border {
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.active-nav-item {
|
.active-nav-item {
|
||||||
border-right: 4px solid var(--v-primary-base);
|
border-right: 4px solid var(--v-primary-base);
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item-icon {
|
.menu-item-icon {
|
||||||
opacity: .85;
|
opacity: .85;
|
||||||
}
|
}
|
||||||
|
|
||||||
.menu-item-title {
|
.menu-item-title {
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
@ -27,56 +36,75 @@
|
|||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
opacity: .85;
|
opacity: .85;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nav-scrollbar {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-navigation-drawer v-model="naviDrawer" :src="sidebarBackground" :mini-variant="(navigationStyle === 'iconsOnly')" :key="navigationStyle" :width="navigationWidth" clipped app>
|
<v-navigation-drawer v-model="naviDrawer" :src="sidebarBackground" :mini-variant="(navigationStyle === 'iconsOnly')" :key="navigationStyle" :width="navigationWidth" :temporary="boolNaviTemp" :hide-overlay="!isMobile" clipped app :style="cssVars">
|
||||||
<v-list class="pr-0 pt-0 ml-0">
|
<overlay-scrollbars class="nav-scrollbar">
|
||||||
<v-list-item-group active-class="active-nav-item">
|
<v-list class="pr-0 pt-0 ml-0">
|
||||||
<template v-if="countPrinters">
|
<v-list-item-group active-class="active-nav-item">
|
||||||
<v-tooltip right>
|
<v-list-item
|
||||||
<template v-slot:activator="{ on, attrs }">
|
router to="/"
|
||||||
<v-list-item
|
class="d-flex d-sm-none sidebar-logo no-text-decoration no-background no-border"
|
||||||
router to="/allPrinters"
|
:style="'height: ' + topbarHeight + 'px'"
|
||||||
class="small-list-item mt-1"
|
:ripple="false"
|
||||||
v-bind="attrs"
|
>
|
||||||
v-on="on"
|
<template v-if="sidebarLogo">
|
||||||
>
|
<img :src="sidebarLogo" style="height: 32px;" class="nav-logo mr-3" alt="Logo" />
|
||||||
<v-list-item-icon class="my-3 mr-3 menu-item-icon">
|
</template>
|
||||||
<v-icon>mdi-view-dashboard-outline</v-icon>
|
<template v-else>
|
||||||
</v-list-item-icon>
|
<mainsail-logo :color="logoColor" style="height: 32px;" class="nav-logo mr-4" :ripple="false"></mainsail-logo>
|
||||||
<v-list-item-content>
|
</template>
|
||||||
<v-list-item-title tile class="menu-item-title">{{ $t("App.Printers") }}</v-list-item-title>
|
<span class="text-h6 font-weight-regular text-truncate"> {{ printerName }} </span>
|
||||||
</v-list-item-content>
|
</v-list-item>
|
||||||
|
<template v-if="countPrinters">
|
||||||
|
<v-tooltip right :open-delay="500" :disabled="navigationStyle !== 'iconsOnly'">
|
||||||
|
<template v-slot:activator="{ on, attrs }">
|
||||||
|
<v-list-item
|
||||||
|
router to="/allPrinters"
|
||||||
|
class="small-list-item mt-1"
|
||||||
|
v-bind="attrs"
|
||||||
|
v-on="on"
|
||||||
|
>
|
||||||
|
<v-list-item-icon class="my-3 mr-3 menu-item-icon">
|
||||||
|
<v-icon>mdi-view-dashboard-outline</v-icon>
|
||||||
|
</v-list-item-icon>
|
||||||
|
<v-list-item-content>
|
||||||
|
<v-list-item-title tile class="menu-item-title">{{ $t("App.Printers") }}</v-list-item-title>
|
||||||
|
</v-list-item-content>
|
||||||
|
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</template>
|
</template>
|
||||||
<span v-if="navigationStyle === 'iconsOnly'">{{ $t("App.Printers") }}</span>
|
<span>{{ $t("App.Printers") }}</span>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
<v-divider class="my-1"></v-divider>
|
<v-divider class="my-1"></v-divider>
|
||||||
</template>
|
</template>
|
||||||
<div v-for="(category, index) in naviPoints" :key="index">
|
<div v-for="(category, index) in naviPoints" :key="index">
|
||||||
<v-tooltip right :open-delay="500" :disabled="navigationStyle !== 'iconsOnly'">
|
<v-tooltip right :open-delay="500" :disabled="navigationStyle !== 'iconsOnly'">
|
||||||
<template v-slot:activator="{ on, attrs }">
|
<template v-slot:activator="{ on, attrs }">
|
||||||
<v-list-item
|
<v-list-item
|
||||||
router :to="category.path"
|
router :to="category.path"
|
||||||
class="small-list-item"
|
class="small-list-item"
|
||||||
v-bind="attrs"
|
v-bind="attrs"
|
||||||
v-on="on"
|
v-on="on"
|
||||||
>
|
>
|
||||||
<v-list-item-icon class="my-3 mr-3 menu-item-icon">
|
<v-list-item-icon class="my-3 mr-3 menu-item-icon">
|
||||||
<v-icon>mdi-{{ category.icon }}</v-icon>
|
<v-icon>mdi-{{ category.icon }}</v-icon>
|
||||||
</v-list-item-icon>
|
</v-list-item-icon>
|
||||||
<v-list-item-content>
|
<v-list-item-content>
|
||||||
<v-list-item-title tile class="menu-item-title">{{ $t(`Router.${category.title}`) }}</v-list-item-title>
|
<v-list-item-title tile class="menu-item-title">{{ $t(`Router.${category.title}`) }}</v-list-item-title>
|
||||||
</v-list-item-content>
|
</v-list-item-content>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</template>
|
</template>
|
||||||
<span>{{ $t(`Router.${category.title}`) }}</span>
|
<span>{{ $t(`Router.${category.title}`) }}</span>
|
||||||
</v-tooltip>
|
</v-tooltip>
|
||||||
</div>
|
</div>
|
||||||
</v-list-item-group>
|
</v-list-item-group>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
</overlay-scrollbars>
|
||||||
<template v-slot:append>
|
<template v-slot:append>
|
||||||
<v-list-item class="small-list-item mb-2">
|
<v-list-item class="small-list-item mb-2">
|
||||||
<v-list-item-icon class="menu-item-icon">
|
<v-list-item-icon class="menu-item-icon">
|
||||||
@ -95,17 +123,20 @@ import BaseMixin from '@/components/mixins/base'
|
|||||||
import {PrinterStateKlipperConfig} from '@/store/printer/types'
|
import {PrinterStateKlipperConfig} from '@/store/printer/types'
|
||||||
import TheSelectPrinterDialog from '@/components/TheSelectPrinterDialog.vue'
|
import TheSelectPrinterDialog from '@/components/TheSelectPrinterDialog.vue'
|
||||||
import AboutModal from '@/components/modals/AboutModal.vue'
|
import AboutModal from '@/components/modals/AboutModal.vue'
|
||||||
import {navigationWidth} from '@/store/variables'
|
import {navigationWidth, topbarHeight} from '@/store/variables'
|
||||||
|
import MainsailLogo from '@/components/ui/MainsailLogo.vue'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: {
|
components: {
|
||||||
TheSelectPrinterDialog,
|
TheSelectPrinterDialog,
|
||||||
AboutModal
|
AboutModal,
|
||||||
|
MainsailLogo
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export default class TheSidebar extends Mixins(BaseMixin) {
|
export default class TheSidebar extends Mixins(BaseMixin) {
|
||||||
navigationWidth = navigationWidth
|
navigationWidth = navigationWidth
|
||||||
|
topbarHeight = topbarHeight
|
||||||
|
|
||||||
get naviDrawer(): boolean {
|
get naviDrawer(): boolean {
|
||||||
return this.$store.state.naviDrawer
|
return this.$store.state.naviDrawer
|
||||||
@ -157,6 +188,39 @@ export default class TheSidebar extends Mixins(BaseMixin) {
|
|||||||
return this.$store.getters['farm/countPrinters']
|
return this.$store.getters['farm/countPrinters']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get boolNaviTemp(): boolean {
|
||||||
|
if(!this.isMobile && this.$vuetify.breakpoint.mdAndDown) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
get cssVars(): any {
|
||||||
|
if(this.boolNaviTemp){
|
||||||
|
return {
|
||||||
|
'top': `${topbarHeight}px !important`,
|
||||||
|
'padding-bottom': `${topbarHeight}px`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
get sidebarLogo(): string {
|
||||||
|
return this.$store.getters['files/getSidebarLogo']
|
||||||
|
}
|
||||||
|
|
||||||
|
get logoColor(): string {
|
||||||
|
return this.$store.state.gui.uiSettings.logo
|
||||||
|
}
|
||||||
|
|
||||||
|
get printerName():string {
|
||||||
|
if (this.$store.state.gui.general.printername.length)
|
||||||
|
return this.$store.state.gui.general.printername
|
||||||
|
|
||||||
|
return this.$store.state.printer.hostname
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
showInNavi(route: AppRoute): boolean {
|
showInNavi(route: AppRoute): boolean {
|
||||||
if (['shutdown', 'error', 'disconnected'].includes(this.klippy_state) && !route.alwaysShow) return false
|
if (['shutdown', 'error', 'disconnected'].includes(this.klippy_state) && !route.alwaysShow) return false
|
||||||
else if (route.title === 'Webcam' && !this.boolNaviWebcam) return false
|
else if (route.title === 'Webcam' && !this.boolNaviWebcam) return false
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<v-row :class="'ma-0 '+entryStyle">
|
<v-row :class="'ma-0 '+entryStyle">
|
||||||
<v-col class="col-auto pr-0 text--secondary">{{ event.formatTime }}</v-col>
|
<v-col class="col-auto pr-0 text--disabled console-time">{{ event.formatTime }}</v-col>
|
||||||
<v-col :class="colorConsoleMessage(event)" v-html="event.formatMessage" @click.capture="commandClick"></v-col>
|
<v-col :class="colorConsoleMessage(event) + ' ' + 'console-message'" v-html="event.formatMessage" @click.capture="commandClick"></v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -46,9 +46,9 @@ export default class ConsoleTableEntry extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
colorConsoleMessage(item: ServerStateEvent): string {
|
colorConsoleMessage(item: ServerStateEvent): string {
|
||||||
if (item.message.startsWith('!! ')) return 'red--text'
|
if (item.message.startsWith('!! ')) return 'error--text'
|
||||||
|
|
||||||
return 'white--text'
|
return 'text--primary'
|
||||||
}
|
}
|
||||||
|
|
||||||
commandClick(event: Event) {
|
commandClick(event: Event) {
|
||||||
|
@ -470,7 +470,6 @@ export default class GcodefilesPanel extends Mixins(BaseMixin) {
|
|||||||
private search = ''
|
private search = ''
|
||||||
private selected = []
|
private selected = []
|
||||||
private hideHeaderColums = []
|
private hideHeaderColums = []
|
||||||
private currentPath = 'gcodes'
|
|
||||||
private dropzone = {
|
private dropzone = {
|
||||||
visibility: 'hidden',
|
visibility: 'hidden',
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
@ -563,6 +562,14 @@ export default class GcodefilesPanel extends Mixins(BaseMixin) {
|
|||||||
(value: string) => value.indexOf(' ') === -1 || 'Name contains spaces!'
|
(value: string) => value.indexOf(' ') === -1 || 'Name contains spaces!'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
get currentPath() {
|
||||||
|
return this.$store.state.gui.view.gcodefiles.currentPath
|
||||||
|
}
|
||||||
|
|
||||||
|
set currentPath(newVal) {
|
||||||
|
this.$store.dispatch('gui/saveSettingWithoutUpload', { name: 'view.gcodefiles.currentPath', value: newVal })
|
||||||
|
}
|
||||||
|
|
||||||
get headers() {
|
get headers() {
|
||||||
const headers = [
|
const headers = [
|
||||||
{ text: '', value: '', align: 'left', configable: false, visible: true, filterable: false },
|
{ text: '', value: '', align: 'left', configable: false, visible: true, filterable: false },
|
||||||
|
@ -365,8 +365,6 @@ export default class ConfigFilesPanel extends Mixins(BaseMixin) {
|
|||||||
private selected = []
|
private selected = []
|
||||||
private options = { }
|
private options = { }
|
||||||
private currentPage = 1
|
private currentPage = 1
|
||||||
private currentPath = ''
|
|
||||||
private root = 'config'
|
|
||||||
private contextMenu: contextMenu = {
|
private contextMenu: contextMenu = {
|
||||||
shown: false,
|
shown: false,
|
||||||
isDirectory: false,
|
isDirectory: false,
|
||||||
@ -580,6 +578,22 @@ export default class ConfigFilesPanel extends Mixins(BaseMixin) {
|
|||||||
return this.$store.state.server.registered_directories.filter((dir: string) => !hiddenRootDirectories.includes(dir)).sort()
|
return this.$store.state.server.registered_directories.filter((dir: string) => !hiddenRootDirectories.includes(dir)).sort()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get root() {
|
||||||
|
return this.$store.state.gui.view.configfiles.rootPath
|
||||||
|
}
|
||||||
|
|
||||||
|
set root(newVal) {
|
||||||
|
this.$store.dispatch('gui/saveSettingWithoutUpload', { name: 'view.configfiles.rootPath', value: newVal })
|
||||||
|
}
|
||||||
|
|
||||||
|
get currentPath() {
|
||||||
|
return this.$store.state.gui.view.configfiles.currentPath
|
||||||
|
}
|
||||||
|
|
||||||
|
set currentPath(newVal) {
|
||||||
|
this.$store.dispatch('gui/saveSettingWithoutUpload', { name: 'view.configfiles.currentPath', value: newVal })
|
||||||
|
}
|
||||||
|
|
||||||
refreshFileList() {
|
refreshFileList() {
|
||||||
this.$socket.emit('server.files.get_directory', { path: this.absolutePath.substring(1) }, { action: 'files/getDirectory' })
|
this.$socket.emit('server.files.get_directory', { path: this.absolutePath.substring(1) }, { action: 'files/getDirectory' })
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
<v-card-text>
|
<v-card-text>
|
||||||
<v-row>
|
<v-row>
|
||||||
<v-col class="col-12 py-2 d-flex align-center">
|
<v-col class="col-12 py-2 d-flex align-center">
|
||||||
<span><b>{{ $t('Timelapse.CurrentPath') }}:</b> {{ this.currentPath !== 'timelapse' ? "/"+this.currentPath.substring(7) : "/" }}</span>
|
<span><b>{{ $t('Timelapse.CurrentPath') }}:</b> {{ this.currentPath !== 'timelapse' ? "/"+this.currentPath.substring(10) : "/" }}</span>
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
<template v-if="this.disk_usage !== null">
|
<template v-if="this.disk_usage !== null">
|
||||||
<v-tooltip top>
|
<v-tooltip top>
|
||||||
@ -284,7 +284,6 @@ export default class TimelapseFilesPanel extends Mixins(BaseMixin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private search = ''
|
private search = ''
|
||||||
private currentPath = 'timelapse'
|
|
||||||
private boolVideoDialog = false
|
private boolVideoDialog = false
|
||||||
private videoDialogFilename = ''
|
private videoDialogFilename = ''
|
||||||
|
|
||||||
@ -405,6 +404,14 @@ export default class TimelapseFilesPanel extends Mixins(BaseMixin) {
|
|||||||
}) ?? []
|
}) ?? []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get currentPath() {
|
||||||
|
return this.$store.state.gui.view.timelapse.currentPath
|
||||||
|
}
|
||||||
|
|
||||||
|
set currentPath(newVal) {
|
||||||
|
this.$store.dispatch('gui/saveSettingWithoutUpload', { name: 'view.timelapse.currentPath', value: newVal })
|
||||||
|
}
|
||||||
|
|
||||||
createDirectory() {
|
createDirectory() {
|
||||||
this.dialogCreateDirectory.name = ''
|
this.dialogCreateDirectory.name = ''
|
||||||
this.dialogCreateDirectory.show = true
|
this.dialogCreateDirectory.show = true
|
||||||
|
@ -8,23 +8,23 @@
|
|||||||
<v-col class="col-12 col-md-8 pb-0">
|
<v-col class="col-12 col-md-8 pb-0">
|
||||||
<panel card-class="heightmap-map-panel" :title="$t('Heightmap.Heightmap')" icon="mdi-grid">
|
<panel card-class="heightmap-map-panel" :title="$t('Heightmap.Heightmap')" icon="mdi-grid">
|
||||||
<template v-slot:buttons-title>
|
<template v-slot:buttons-title>
|
||||||
<v-btn text tile color="primary" class="ml-1 d-none d-sm-inline-flex" v-if="bed_mesh" @click="openRenameProfile()">{{ bed_mesh ? bed_mesh.profile_name : "" }}</v-btn>
|
<v-btn text tile color="primary" class="ml-1 d-none d-sm-inline-flex" v-if="meshLoaded" @click="openRenameProfile()">{{ bed_mesh.profile_name }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:buttons>
|
<template v-slot:buttons>
|
||||||
<v-btn text tile color="primary" class=" d-sm-none" @click="openRenameProfile()">{{ bed_mesh ? bed_mesh.profile_name : "" }}</v-btn>
|
<v-btn text tile color="primary" class="d-sm-none" v-if="meshLoaded" @click="openRenameProfile()">{{ bed_mesh ? bed_mesh.profile_name : "" }}</v-btn>
|
||||||
<v-btn icon tile class="d-none d-sm-flex" @click="homePrinter" :loading="loadings.includes('homeAll')" :title="$t('Heightmap.TitleHomeAll')" :ripple="true"><v-icon>mdi-home</v-icon></v-btn>
|
<v-btn icon tile class="d-none d-sm-flex" @click="homePrinter" :color="homedAxes.includes('xyz') ? 'primary' : 'warning'" :loading="loadings.includes('homeAll')" :title="$t('Heightmap.TitleHomeAll')" :ripple="true"><v-icon>mdi-home</v-icon></v-btn>
|
||||||
<v-btn text tile class="d-none d-sm-flex" @click="clearBedMesh" :loading="loadings.includes('bedMeshClear')" v-if="bed_mesh" :title="$t('Heightmap.TitleClear')">{{ $t('Heightmap.Clear') }}</v-btn>
|
<v-btn text tile class="d-none d-sm-flex" @click="clearBedMesh" :loading="loadings.includes('bedMeshClear')" v-if="meshLoaded" :title="$t('Heightmap.TitleClear')">{{ $t('Heightmap.Clear') }}</v-btn>
|
||||||
<v-btn text tile class="d-none d-sm-flex" @click="calibrateDialog = true" :loading="loadings.includes('bedMeshCalibrate')" :disabled="printerIsPrinting" :title="$t('Heightmap.TitleCalibrate')">{{ $t('Heightmap.Calibrate') }}</v-btn>
|
<v-btn text tile class="d-none d-sm-flex" @click="calibrateDialog = true" :loading="loadings.includes('bedMeshCalibrate')" :disabled="printerIsPrinting" :title="$t('Heightmap.TitleCalibrate')">{{ $t('Heightmap.Calibrate') }}</v-btn>
|
||||||
</template>
|
</template>
|
||||||
<v-card-text class="d-sm-none text-center pb-0">
|
<v-card-text class="d-sm-none text-center pb-0">
|
||||||
<v-item-group tile class="v-btn-toggle" name="controllers">
|
<v-item-group tile class="v-btn-toggle" name="controllers">
|
||||||
<v-btn text small class="px-2 minwidth-0" color="primary" @click="homePrinter" :loading="loadings.includes('homeAll')" :title="$t('Heightmap.TitleHomeAll')"><v-icon small>mdi-home</v-icon></v-btn>
|
<v-btn text small class="px-2 minwidth-0" :color="homedAxes.includes('xyz') ? 'primary' : 'warning'" @click="homePrinter" :loading="loadings.includes('homeAll')" :title="$t('Heightmap.TitleHomeAll')"><v-icon :color="homedAxes.includes('xyz') ? 'primary' : 'warning'" small>mdi-home</v-icon></v-btn>
|
||||||
<v-btn text small class="px-2 minwidth-0" color="primary" @click="clearBedMesh" :loading="loadings.includes('bedMeshClear')" v-if="bed_mesh" :title="$t('Heightmap.TitleClear')">{{ $t('Heightmap.Clear') }}</v-btn>
|
<v-btn text small class="px-2 minwidth-0" color="primary" @click="clearBedMesh" :loading="loadings.includes('bedMeshClear')" v-if="bed_mesh" :title="$t('Heightmap.TitleClear')">{{ $t('Heightmap.Clear') }}</v-btn>
|
||||||
<v-btn text small class="px-2 minwidth-0" color="primary" @click="calibrateDialog = true" :loading="loadings.includes('bedMeshCalibrate')" :disabled="printerIsPrinting" :title="$t('Heightmap.TitleCalibrate')">{{ $t('Heightmap.Calibrate') }}</v-btn>
|
<v-btn text small class="px-2 minwidth-0" color="primary" @click="calibrateDialog = true" :loading="loadings.includes('bedMeshCalibrate')" :disabled="printerIsPrinting" :title="$t('Heightmap.TitleCalibrate')">{{ $t('Heightmap.Calibrate') }}</v-btn>
|
||||||
</v-item-group>
|
</v-item-group>
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
<template v-if="!(bed_mesh)">
|
<template v-if="!(meshLoaded)">
|
||||||
<v-card-text>
|
<v-card-text class="text-center py-3 font-italic">
|
||||||
{{ $t('Heightmap.NoBedMeshHasBeenLoadedYet') }}
|
{{ $t('Heightmap.NoBedMeshHasBeenLoadedYet') }}
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
</template>
|
</template>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
</panel>
|
</panel>
|
||||||
</v-col>
|
</v-col>
|
||||||
<v-col class="col-12 col-md-4">
|
<v-col class="col-12 col-md-4">
|
||||||
<panel :title="$t('Heightmap.CurrentMesh.Headline')" v-if="bed_mesh !== null && bed_mesh.profile_name !== ''" card-class="heightmap-current-mesh-panel" icon="mdi-information" :collapsible="true" class="mt-0">
|
<panel :title="$t('Heightmap.CurrentMesh.Headline')" v-if="meshLoaded" card-class="heightmap-current-mesh-panel" icon="mdi-information" :collapsible="true" class="mt-0">
|
||||||
<v-card-text class="py-3 px-0">
|
<v-card-text class="py-3 px-0">
|
||||||
<v-row class="px-3">
|
<v-row class="px-3">
|
||||||
<v-col>{{ $t('Heightmap.CurrentMesh.Name') }}</v-col>
|
<v-col>{{ $t('Heightmap.CurrentMesh.Name') }}</v-col>
|
||||||
@ -184,6 +184,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import {Component, Mixins, Watch} from 'vue-property-decorator'
|
import {Component, Mixins, Watch} from 'vue-property-decorator'
|
||||||
import BaseMixin from '@/components/mixins/base'
|
import BaseMixin from '@/components/mixins/base'
|
||||||
|
import ControlMixin from '@/components/mixins/control'
|
||||||
|
|
||||||
import { createComponent } from 'echarts-for-vue'
|
import { createComponent } from 'echarts-for-vue'
|
||||||
import * as echarts from 'echarts'
|
import * as echarts from 'echarts'
|
||||||
@ -211,7 +212,7 @@ interface HeightmapSerie {
|
|||||||
ECharts: createComponent({ echarts }),
|
ECharts: createComponent({ echarts }),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export default class PageHeightmap extends Mixins(BaseMixin) {
|
export default class PageHeightmap extends Mixins(BaseMixin, ControlMixin) {
|
||||||
|
|
||||||
$refs!: {
|
$refs!: {
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
@ -726,6 +727,14 @@ export default class PageHeightmap extends Mixins(BaseMixin) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get meshLoaded() {
|
||||||
|
if(this.bed_mesh !== null) {
|
||||||
|
return this.bed_mesh.profile_name !== ''
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tooltipFormatter(data: any): string {
|
tooltipFormatter(data: any): string {
|
||||||
const outputArray: string[] = []
|
const outputArray: string[] = []
|
||||||
outputArray.push('<b>'+data.seriesName+'</b>')
|
outputArray.push('<b>'+data.seriesName+'</b>')
|
||||||
|
@ -117,6 +117,10 @@ export const actions: ActionTree<GuiState, RootState> = {
|
|||||||
Vue.$socket.emit('server.database.post_item', { namespace: 'mainsail', key: payload.name, value: payload.value })
|
Vue.$socket.emit('server.database.post_item', { namespace: 'mainsail', key: payload.name, value: payload.value })
|
||||||
},
|
},
|
||||||
|
|
||||||
|
saveSettingWithoutUpload({ commit }, payload) {
|
||||||
|
commit('saveSetting', payload)
|
||||||
|
},
|
||||||
|
|
||||||
updateSettings(_, payload) {
|
updateSettings(_, payload) {
|
||||||
const keyName = payload.keyName
|
const keyName = payload.keyName
|
||||||
let newState = payload.newVal
|
let newState = payload.newVal
|
||||||
|
@ -143,7 +143,9 @@ export const getDefaultState = (): GuiState => {
|
|||||||
sortBy: 'filename',
|
sortBy: 'filename',
|
||||||
sortDesc: false,
|
sortDesc: false,
|
||||||
showHiddenFiles: false,
|
showHiddenFiles: false,
|
||||||
hideBackupFiles: false
|
hideBackupFiles: false,
|
||||||
|
currentPath: '',
|
||||||
|
rootPath: 'config'
|
||||||
},
|
},
|
||||||
gcodefiles: {
|
gcodefiles: {
|
||||||
countPerPage: 10,
|
countPerPage: 10,
|
||||||
@ -151,7 +153,8 @@ export const getDefaultState = (): GuiState => {
|
|||||||
sortDesc: true,
|
sortDesc: true,
|
||||||
showHiddenFiles: false,
|
showHiddenFiles: false,
|
||||||
showPrintedFiles: true,
|
showPrintedFiles: true,
|
||||||
hideMetadataColums: []
|
hideMetadataColums: [],
|
||||||
|
currentPath: 'gcodes'
|
||||||
},
|
},
|
||||||
heightmap: {
|
heightmap: {
|
||||||
probed: true,
|
probed: true,
|
||||||
@ -193,6 +196,7 @@ export const getDefaultState = (): GuiState => {
|
|||||||
sortBy: 'modified',
|
sortBy: 'modified',
|
||||||
sortDesc: true,
|
sortDesc: true,
|
||||||
showHiddenFiles: false,
|
showHiddenFiles: false,
|
||||||
|
currentPath: 'timelapse'
|
||||||
},
|
},
|
||||||
webcam: {
|
webcam: {
|
||||||
currentCam: {
|
currentCam: {
|
||||||
|
@ -93,6 +93,8 @@ export interface GuiState {
|
|||||||
sortDesc: boolean
|
sortDesc: boolean
|
||||||
showHiddenFiles: boolean
|
showHiddenFiles: boolean
|
||||||
hideBackupFiles: boolean
|
hideBackupFiles: boolean
|
||||||
|
currentPath: string
|
||||||
|
rootPath: string
|
||||||
}
|
}
|
||||||
gcodefiles: {
|
gcodefiles: {
|
||||||
countPerPage: number
|
countPerPage: number
|
||||||
@ -101,6 +103,7 @@ export interface GuiState {
|
|||||||
showHiddenFiles: boolean
|
showHiddenFiles: boolean
|
||||||
showPrintedFiles: boolean
|
showPrintedFiles: boolean
|
||||||
hideMetadataColums: string[]
|
hideMetadataColums: string[]
|
||||||
|
currentPath: string
|
||||||
}
|
}
|
||||||
heightmap: {
|
heightmap: {
|
||||||
probed: boolean
|
probed: boolean
|
||||||
@ -131,6 +134,7 @@ export interface GuiState {
|
|||||||
sortBy: string
|
sortBy: string
|
||||||
sortDesc: boolean
|
sortDesc: boolean
|
||||||
showHiddenFiles: boolean
|
showHiddenFiles: boolean
|
||||||
|
currentPath: string
|
||||||
}
|
}
|
||||||
webcam: {
|
webcam: {
|
||||||
currentCam: {
|
currentCam: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user