|
|
|
|
@@ -1,10 +1,16 @@
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import OptionsMenu from "./Options/Menu.vue";
|
|
|
|
|
import OptionsStartUp from "./Options/StartUp.vue";
|
|
|
|
|
import OptionsLanguage from "./Options/Language.vue";
|
|
|
|
|
import OptionsGbaMode from "./Options/GbaMode.vue";
|
|
|
|
|
|
|
|
|
|
import ClockMenu from "./Clock/Menu.vue";
|
|
|
|
|
import UserMenu from "./User/Menu.vue";
|
|
|
|
|
import TouchScreenMenu from "./TouchScreen/Menu.vue";
|
|
|
|
|
import Selector from "~/components/Common/ButtonSelector.vue";
|
|
|
|
|
|
|
|
|
|
const settingsStore = useSettingsStore();
|
|
|
|
|
|
|
|
|
|
const { selectedButton: selected, selectorPosition } = useButtonNavigation({
|
|
|
|
|
buttons: {
|
|
|
|
|
options: [31, 119, 49, 49],
|
|
|
|
|
@@ -28,7 +34,11 @@ const { selectedButton: selected, selectorPosition } = useButtonNavigation({
|
|
|
|
|
initialButton: "options",
|
|
|
|
|
onButtonClick: (buttonName: string) => {
|
|
|
|
|
if (isSubmenu(buttonName)) {
|
|
|
|
|
settingsStore.pushNavigation(buttonName);
|
|
|
|
|
router.push({
|
|
|
|
|
query: {
|
|
|
|
|
menu: buttonName,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
navigation: {
|
|
|
|
|
@@ -104,8 +114,6 @@ const { selectedButton: selected, selectorPosition } = useButtonNavigation({
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const settingsStore = useSettingsStore();
|
|
|
|
|
|
|
|
|
|
const isSubmenu = (buttonName: string) => {
|
|
|
|
|
return (
|
|
|
|
|
/^(options|clock|user|touchScreen)[A-Z]/.test(buttonName) &&
|
|
|
|
|
@@ -113,20 +121,64 @@ const isSubmenu = (buttonName: string) => {
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const router = useRouter();
|
|
|
|
|
|
|
|
|
|
onBeforeRouteUpdate((to, from) => {
|
|
|
|
|
const fromMenu = from.query.menu?.toString();
|
|
|
|
|
const toMenu = to.query.menu?.toString();
|
|
|
|
|
|
|
|
|
|
if (!fromMenu && toMenu) {
|
|
|
|
|
settingsStore.setActiveMenu(selected.value);
|
|
|
|
|
} else if (fromMenu && !toMenu) {
|
|
|
|
|
if (fromMenu === "options" || fromMenu === "clock" || fromMenu === "user") {
|
|
|
|
|
selected.value = fromMenu;
|
|
|
|
|
settingsStore.setActiveMenu(null);
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error("Unreachable");
|
|
|
|
|
}
|
|
|
|
|
} else if (fromMenu && toMenu) {
|
|
|
|
|
if (toMenu === "options" || toMenu === "clock" || toMenu === "user") {
|
|
|
|
|
settingsStore.setCurrentSubMenu(null);
|
|
|
|
|
settingsStore.setActiveMenu(selected.value);
|
|
|
|
|
} else {
|
|
|
|
|
settingsStore.setCurrentSubMenu(toMenu);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
watch(
|
|
|
|
|
selected,
|
|
|
|
|
(newSelected) => {
|
|
|
|
|
settingsStore.setActiveMenu(newSelected);
|
|
|
|
|
if (settingsStore.currentSubMenu === null) {
|
|
|
|
|
if (isSubmenu(newSelected)) {
|
|
|
|
|
router.push({
|
|
|
|
|
query: {
|
|
|
|
|
menu: newSelected.split(/[A-Z]/)[0],
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
router.push({ query: { menu: undefined } });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{ immediate: true },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const viewComponents: Record<string, Component> = {
|
|
|
|
|
optionsStartUp: OptionsStartUp,
|
|
|
|
|
optionsLanguage: OptionsLanguage,
|
|
|
|
|
optionsGbaMode: OptionsGbaMode,
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<OptionsMenu :x="33" :y="121" />
|
|
|
|
|
<ClockMenu :x="81" :y="121" />
|
|
|
|
|
<UserMenu :x="129" :y="121" />
|
|
|
|
|
<TouchScreenMenu :x="177" :y="121" :opacity="1" />
|
|
|
|
|
<template v-if="!settingsStore.currentSubMenu">
|
|
|
|
|
<OptionsMenu :x="33" :y="121" />
|
|
|
|
|
<ClockMenu :x="81" :y="121" />
|
|
|
|
|
<UserMenu :x="129" :y="121" />
|
|
|
|
|
<TouchScreenMenu :x="177" :y="121" :opacity="1" />
|
|
|
|
|
|
|
|
|
|
<Selector :rect="selectorPosition" :opacity="1" />
|
|
|
|
|
<Selector :rect="selectorPosition" :opacity="1" />
|
|
|
|
|
</template>
|
|
|
|
|
<component :is="viewComponents[settingsStore.currentSubMenu]" v-else />
|
|
|
|
|
</template>
|
|
|
|
|
|