diff --git a/src/components/AdvancedDebugDialog.vue b/src/components/AdvancedDebugDialog.vue index 0c325cb..0e00bf7 100644 --- a/src/components/AdvancedDebugDialog.vue +++ b/src/components/AdvancedDebugDialog.vue @@ -69,15 +69,7 @@ :disable="loading" /> - - - + @@ -85,12 +77,33 @@ + + + + + + + @@ -198,6 +211,9 @@ export default defineComponent({ const function_mirroring_output = ref( $store.state.custom_defines.function_mirroring_output ); + const function_magic_wall = ref( + $store.state.custom_defines.function_magic_wall + ); const target_language = ref("zh-CN"); return { @@ -206,6 +222,7 @@ export default defineComponent({ function_center_control, function_output_board, function_custom_ISV, + function_magic_wall, function_mirroring_output, target_language, @@ -219,6 +236,8 @@ export default defineComponent({ $store.state.custom_defines.function_output_board; function_mirroring_output.value = $store.state.custom_defines.function_mirroring_output; + function_magic_wall.value = + $store.state.custom_defines.function_magic_wall; }, resetData() { loading.value = false; @@ -227,6 +246,7 @@ export default defineComponent({ function_output_board.value = false; function_mirroring_output.value = false; function_custom_ISV.value = false; + function_magic_wall.value=false; }, restartDevice() { @@ -319,6 +339,9 @@ export default defineComponent({ if (function_custom_ISV.value) { attribute |= EDeviceAttribute.CustomISV; } + if (function_magic_wall.value) { + attribute |= EDeviceAttribute.ProductMagicWall; + } GlobalData.getInstance() .getCurrentClient() diff --git a/src/components/ControlPanelDialog.vue b/src/components/ControlPanelDialog.vue new file mode 100644 index 0000000..b92cb13 --- /dev/null +++ b/src/components/ControlPanelDialog.vue @@ -0,0 +1,1929 @@ + + + + + diff --git a/src/components/RegisterDialog.vue b/src/components/RegisterDialog.vue index dd53f63..44b5372 100644 --- a/src/components/RegisterDialog.vue +++ b/src/components/RegisterDialog.vue @@ -303,6 +303,15 @@ :loading="loading" :disable="loading" /> + @@ -419,6 +428,7 @@ export default defineComponent({ const function_output_board = ref(false); const function_mirroring_output = ref(false); const function_custom_ISV = ref(false); + const function_magic_wall = ref(false); const trial_days = ref(0); const last_days = ref(0); @@ -441,6 +451,7 @@ export default defineComponent({ function_output_board.value = false; function_mirroring_output.value = false; function_custom_ISV.value = false; + function_magic_wall.value=false; }; const showDialog = async () => { @@ -472,6 +483,9 @@ export default defineComponent({ $store.state.custom_defines.function_output_board; function_mirroring_output.value = $store.state.custom_defines.function_mirroring_output; + const function_magic_wall = ref( + $store.state.custom_defines.function_magic_wall + ); }; return { @@ -493,6 +507,7 @@ export default defineComponent({ server_address, function_output_board, function_custom_ISV, + function_magic_wall, function_center_control, function_mirroring_output, target_language, @@ -621,6 +636,9 @@ export default defineComponent({ if (function_custom_ISV.value) { attribute |= EDeviceAttribute.CustomISV; } + if (function_magic_wall.value) { + attribute |= EDeviceAttribute.ProductMagicWall; + } GlobalData.getInstance() .getCurrentClient() diff --git a/src/components/SystemSettingDialog.vue b/src/components/SystemSettingDialog.vue index 860fd4b..ae7d3d7 100644 --- a/src/components/SystemSettingDialog.vue +++ b/src/components/SystemSettingDialog.vue @@ -1272,6 +1272,7 @@
{ const settings = await GlobalData.getInstance() .getCurrentClient() @@ -1738,6 +1738,7 @@ export default defineComponent({ output_board_volume.value = settings.volume; output_board_mute.value = settings.mute ? $t.t("on") : $t.t("off"); + { output_board_resolution_options.value = []; for (const item of Object.keys( @@ -2021,6 +2022,9 @@ export default defineComponent({ const applyOutputBoard = async () => { loading.value = true; const request = new Protocol.SetOutputBoardSettingRequestEntity(); + const response = await GlobalData.getInstance() + .getCurrentClient() + ?.getMagicWallConfig(); request.wall_col = parseInt(output_board_wall_col.value.toString()); request.wall_row = parseInt(output_board_wall_row.value.toString()); request.splicing = output_board_splicing.value == $t.t("on"); @@ -2034,13 +2038,20 @@ export default defineComponent({ request.volume = parseInt(output_board_volume.value.toString()); request.mute = output_board_mute.value == $t.t("on"); request.output_board_resolution = output_board_resolution.value; - let success = false; try { await GlobalData.getInstance() .getCurrentClient() ?.setOutputBoardSetting(request); success = true; + if ($store.state.custom_defines.function_magic_wall && response&&success) { + const output_length = + parseInt(output_board_wall_col.value.toString()) * + parseInt(output_board_wall_row.value.toString()); + if (output_length != response.config.col * response.config.row) { + $store.commit("setShowMonitorList", []); + } + } } catch {} $q.notify({ color: success ? "positive" : "negative", @@ -2113,7 +2124,6 @@ export default defineComponent({ const applyUser = async () => { loading.value = true; - console.log("zzz"); const request = new Protocol.SetOutputBoardSettingRequestEntity(); request.wall_col = parseInt(output_board_wall_col.value.toString()); request.wall_row = parseInt(output_board_wall_row.value.toString()); diff --git a/src/entities/EDeviceAttribute.ts b/src/entities/EDeviceAttribute.ts index f72de48..e39f6ca 100644 --- a/src/entities/EDeviceAttribute.ts +++ b/src/entities/EDeviceAttribute.ts @@ -22,7 +22,7 @@ export enum EDeviceAttribute { Reserve18 = 0x00040000, Reserve19 = 0x00080000, Reserve20 = 0x00100000, - Reserve21 = 0x00200000, + ProductMagicWall = 0x00200000, Reserve22 = 0x00400000, Reserve23 = 0x00800000, Reserve24 = 0x01000000, diff --git a/src/entities/MagicWallConfig.ts b/src/entities/MagicWallConfig.ts index 8917983..da169c6 100644 --- a/src/entities/MagicWallConfig.ts +++ b/src/entities/MagicWallConfig.ts @@ -1,8 +1,8 @@ -import RotatedRectF from "./RectF"; +import RotatedRectF, { RotatedRectFWithIndex } from "./RectF"; export default class MagicWallConfig { magic_wall_enable = false; row = 0; col = 0; - windows: RotatedRectF[] = []; + windows: RotatedRectFWithIndex[] = []; } diff --git a/src/entities/RectF.ts b/src/entities/RectF.ts index d84612e..72f8f6e 100644 --- a/src/entities/RectF.ts +++ b/src/entities/RectF.ts @@ -32,3 +32,11 @@ export class RotatedRectF extends RectF { this.angle = angle; } } +export class RotatedRectFWithIndex extends RotatedRectF{ + index:number=0; + percenter:number=0; + initial_h:number=0; + initial_w:number=0; + background_h:number=0; + background_w:number=0; +} diff --git a/src/i18n/en-US/index.ts b/src/i18n/en-US/index.ts index 0fafdf2..d499069 100644 --- a/src/i18n/en-US/index.ts +++ b/src/i18n/en-US/index.ts @@ -57,6 +57,7 @@ export default { Accept: "Accept", "move speed": "Move Speed", "y offset": "Y Offset", + "the number must be greater than 0":"the number must be greater than 0", "pos x": "X Position", "pos y": "Y Position", width: "Width", @@ -432,4 +433,14 @@ export default { "verify key length is 6": "Verify Key Length Is 6", server: "Server", "set cloud server setting": "Set Cloud Server Setting", + "set magic wall":"Set Magic wall", + "update magic wall":"Update Magic Wall", + "magic wall":"Magic Wall", + "angle":"Angle", + "topology diagram":"Topology Diagram", + "physical central location":"Central Location", + "monitors list":"Monitors List", + "resize":"Resize", + "export magic":"Export" + }; diff --git a/src/i18n/zh-CN/index.ts b/src/i18n/zh-CN/index.ts index 1d5aa7b..d0972dd 100644 --- a/src/i18n/zh-CN/index.ts +++ b/src/i18n/zh-CN/index.ts @@ -499,7 +499,7 @@ export default { Warning: "警告", function: "功能", commit: "提交", - "set device function": "设置设备功能成功", + "set device function": "设置设备功能", operator_play_signal_source: "信号源", "toolbar edit window rect": "窗口大小", exit: "退出", @@ -700,4 +700,13 @@ export default { "verify key length is 6": "校验码长度必须为6", server: "服务", "set cloud server setting": "设置云服务器", + "set magic wall":"设置魔墙", + "update magic wall":"更新魔墙", + "magic wall":"魔墙", + "angle":"角度", + "topology diagram":"拓扑图", + "physical central location":"物理中心位置", + "monitors list":"显示器", + "resize":"缩放", + "export magic":"导出" }; diff --git a/src/pages/TopToolBar.vue b/src/pages/TopToolBar.vue index 637f8c1..fe53e3d 100644 --- a/src/pages/TopToolBar.vue +++ b/src/pages/TopToolBar.vue @@ -305,7 +305,7 @@ + + + + + + + {{ $t("magic wall") }} + + + + + + @@ -519,6 +538,9 @@ import { useStore } from "src/store"; import FusionSettingsDialog from "src/components/FusionSettingsDialog.vue"; import GridSettingDialog from "src/components/GridSettingDialog.vue"; import SpecialVideoGridSettingDialog from "src/components/SpecialVideoGridSettingDialog.vue"; + +import ControlPanelDialog from "src/components/ControlPanelDialog.vue"; + import BackgroundImageDialog from "src/components/BackgroundImageDialog.vue"; import RecoveryDatabaseDialog from "src/components/RecoveryDatabaseDialog.vue"; import UpgradeDialog from "src/components/UpgradeDialog.vue"; @@ -550,6 +572,9 @@ export default defineComponent({ components: { GridSettingDialog, SpecialVideoGridSettingDialog, + + ControlPanelDialog, + BackgroundImageDialog, RecoveryDatabaseDialog, UpgradeDialog, @@ -596,7 +621,7 @@ export default defineComponent({ let wendu: any = $store.state.fan_temp.toFixed(1); let sulv: any = 1 - wendu / 150; return "rotate " + sulv + "s linear infinite"; - }); + }); const checkRegistered = () => { if ( GlobalData.getInstance().getCurrentClient()?.is_connected && diff --git a/src/pages/WallPage.vue b/src/pages/WallPage.vue index 0ea35d6..86c9b0a 100644 --- a/src/pages/WallPage.vue +++ b/src/pages/WallPage.vue @@ -1,1320 +1,1660 @@ - - - - - + + + + + diff --git a/src/store/index.ts b/src/store/index.ts index 4afe2cf..62d54f7 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -37,6 +37,7 @@ export class CustomDefines { function_output_board = false; function_center_control = false; function_mirroring_output = false; + function_magic_wall=false; } export interface IWuJieEventBus { @@ -53,7 +54,27 @@ export interface IWuJieInterface { props: any; bus: IWuJieEventBus; } +class test_monitor { + w = 0.0; + h = 0.0; + currentx = 0.0; + currenty = 0.0; + centerx = 0.0; + centery = 0.0; + angle = 0; + id = 0; + constructor(id: number, w: number, h: number) { + this.currentx = 0.0; + this.currenty = 0.0; + this.angle = 0; + this.centerx = 0; + this.centery = 0; + this.id = id; + this.w = w; + this.h = h; + } +} export interface StateInterface { // Define your own store structure, using submodules if needed // example: ExampleStateInterface; @@ -91,6 +112,7 @@ export interface StateInterface { device_attribute: number; power_state: boolean; product_name: string; + show_monitor_list:test_monitor[]; custom_defines: CustomDefines; fusion_configuration: object; isLedPlayer: () => boolean; @@ -359,7 +381,7 @@ export default store(function (/* { ssrContext } */) { power_state: false, fusion_configuration: {}, product_name: EProductNames.LED_PLAYER, - + show_monitor_list:[], custom_defines: new CustomDefines(), selected_projector: "0/0", EnableBlending: false, @@ -380,6 +402,9 @@ export default store(function (/* { ssrContext } */) { setInitialized(state: StateInterface, playload?: any) { state.initialized = true; }, + setShowMonitorList(state: StateInterface, playload?: any) { + state.show_monitor_list = playload + }, updateLandspace(state: StateInterface, playload?: any) { if (typeof playload == "boolean") { state.landspace = playload; @@ -412,6 +437,8 @@ export default store(function (/* { ssrContext } */) { (state.device_attribute & EDeviceAttribute.CenterControl) != 0; state.custom_defines.function_mirroring_output = (state.device_attribute & EDeviceAttribute.MirroringOutput) != 0; + state.custom_defines.function_magic_wall = + (state.device_attribute & EDeviceAttribute.ProductMagicWall) != 0; } }, setAvancedDebug(state: StateInterface, playload?: any) {