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 @@
+
+ {
+ if (!loading && evt.keyCode == 27) {
+ show_dialog = false;
+ }
+ if (
+ evt.keyCode == 37 &&
+ (current_index != -1 || multiple_select.length > 1)
+ ) {
+ //左
+ sub_x();
+ }
+ if (
+ evt.keyCode == 38 &&
+ (current_index != -1 || multiple_select.length > 1)
+ ) {
+ //上
+ sub_y();
+ }
+ if (
+ evt.keyCode == 39 &&
+ (current_index != -1 || multiple_select.length > 1)
+ ) {
+ //右
+ add_x();
+ }
+ if (
+ evt.keyCode == 40 &&
+ (current_index != -1 || multiple_select.length > 1)
+ ) {
+ //下
+ add_y();
+ }
+ if (evt.keyCode == 17) {
+ //ctrl
+ multiple = true;
+ }
+ //对齐
+ if (evt.keyCode == 87 && multiple_select.length > 1) {
+ //上
+ alignTop();
+ }
+ if (evt.keyCode == 83 && multiple_select.length > 1) {
+ //下
+ alignBottom();
+ }
+ if (evt.keyCode == 65 && multiple_select.length > 1) {
+ //左
+ alignLeft();
+ }
+ if (evt.keyCode == 68 && multiple_select.length > 1) {
+ //右
+ alignRight();
+ }
+ //保存魔墙配置
+ if (evt.keyCode==83&&evt.shiftKey) {
+ //右
+ export_magic_wall();
+ }
+ }
+ "
+ @keyup="
+ (evt) => {
+ if (evt.keyCode == 17) {
+ //ctrl
+ multiple = false;
+ }
+ }
+ "
+ >
+
+
+
+
+
+ {{ $t("magic wall") }}
+
+
+
+
+
+ {{ $t("close") }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("angle") }}
+
+
+
+
+
+
+ angle:
+
+
+
+
+ °
+
+
+
+
+ °
+
+
+
+
+
+
+ {{ $t("physical central location") }}
+
+
+
+
+
+ X:
+
+
+
+
+ px
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+ Y:
+
+
+
+
+ px
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("close this window") }}
+
+
+
+
+ {{ $t("close other windows") }}
+
+
+
+
+ {{ $t("close all windows") }}
+
+
+
+
+ {{ item.uuid }}
+
+ x:{{ item.centerx }} y:{{ item.centery }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ $t("monitors list")
+ }}
+
+
+
+
+
+ W:
+
+
+
+
+ mm
+
+
+
+
+ mm
+
+
+
+
+ H:
+
+
+
+
+ mm
+
+
+
+
+ mm
+
+
+
+
+
+
+
+
+
+
+
+ onDragStart(
+ evt,
+ test_monitor_list[(item - 1) * 4 + (j - 1)]
+ )
+ "
+ @dragend="(evt) => onDragend(evt, item, j)"
+ >
+ {{ test_monitor_list[(item - 1) * 4 + (j - 1)].uuid }}
+ W:{{
+ filter_px(
+ test_monitor_list[(item - 1) * 4 + (j - 1)].cmw
+ )
+ }}
+ H:{{
+ filter_px(
+ test_monitor_list[(item - 1) * 4 + (j - 1)].cmh
+ )
+ }}
+
+
+
+
+
+ onDragStart(
+ evt,
+ test_monitor_list[(item - 1) * 4 + (j - 1)]
+ )
+ "
+ @dragend="(evt) => onDragend(evt, item, j)"
+ >
+ {{ test_monitor_list[(item - 1) * 4 + (j - 1)].uuid }}
+ W:{{
+ filter_px(
+ test_monitor_list[(item - 1) * 4 + (j - 1)].cmw
+ )
+ }}
+ H:{{
+ filter_px(
+ test_monitor_list[(item - 1) * 4 + (j - 1)].cmh
+ )
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 @@
-
-
-
-
- windowDBClick(item.window_id)"
- @edit_volume="edit_volume"
- @mute_unmute="mute_unmute"
- @start_polling="start_polling"
- @stop_polling="stop_polling"
- @polling_setting="polling_setting"
- @edit_rect="editRect"
- :ref="'window_' + item.window_id"
- :id="'window_' + item.window_id"
- :uuid="item.uuid"
- :disable="plan_running"
- :mouse_area_flag="area_open_window_flag"
- :signal_source_table_uuid="item.signal_source_table_uuid"
- :window="item"
- :plan_running="plan_running"
- :show_pollong_setting_context_menu="true"
- class="window fit"
- >
-
-
-
-
-
-
-
-
-
-
-
-
- {{ $t("open window") }}
-
-
-
-
-
- {{ $t("close all windows") }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ windowDBClick(item.window_id)"
+ @edit_volume="edit_volume"
+ @mute_unmute="mute_unmute"
+ @start_polling="start_polling"
+ @stop_polling="stop_polling"
+ @polling_setting="polling_setting"
+ @edit_rect="editRect"
+ :ref="'window_' + item.window_id"
+ :id="'window_' + item.window_id"
+ :uuid="item.uuid"
+ :disable="plan_running"
+ :mouse_area_flag="area_open_window_flag"
+ :signal_source_table_uuid="item.signal_source_table_uuid"
+ :window="item"
+ :plan_running="plan_running"
+ :show_pollong_setting_context_menu="true"
+ class="window fit"
+ >
+
+
+
+
+
+
+ {{ item.id + 1 }}
+
+
+
+
+
+
+
+
+ {{ $t("open window") }}
+
+
+
+
+
+ {{ $t("close all windows") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t("open window") }}
+
+
+
+
+
+ {{ $t("close all windows") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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) {