mirror of
https://gitee.com/hoslay/ddei-editor.git
synced 2025-12-06 17:18:36 +08:00
118 lines
3.6 KiB
TypeScript
118 lines
3.6 KiB
TypeScript
import {DDeiEnumBusCommandType} from "ddei-framework";
|
||
import {DDeiEditor} from "ddei-framework";
|
||
import {DDeiEditorEnumBusCommandType} from "ddei-framework";
|
||
import {DDeiEditorState} from "ddei-framework";
|
||
import {DDeiSheet} from "ddei-framework";
|
||
import { DDeiMenuBase, DDeiEditorUtil, DDeiUtil } from "ddei-framework";
|
||
/**
|
||
* 复制页签
|
||
*/
|
||
class MenuCopySheet extends DDeiMenuBase {
|
||
|
||
|
||
name: string = "ddei-core-menu-copy-sheet"
|
||
|
||
|
||
|
||
/**
|
||
* 缺省实例
|
||
*/
|
||
static defaultIns: MenuCopySheet = new MenuCopySheet();
|
||
|
||
defaultOptions: object = {
|
||
'label': '复制',
|
||
'icon': '#icon-paste',
|
||
'models': ["DDeiSheet"],
|
||
'disabled': false
|
||
}
|
||
|
||
|
||
static configuration(options, fullConfig: boolean = false) {
|
||
//解析options,只使用自己相关的
|
||
if (options) {
|
||
let newOptions = {}
|
||
if (fullConfig) {
|
||
if (fullConfig) {
|
||
if (options[MenuCopySheet.defaultIns.name]) {
|
||
for (let i in options[MenuCopySheet.defaultIns.name]) {
|
||
newOptions[i] = options[MenuCopySheet.defaultIns.name][i]
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
newOptions = options
|
||
}
|
||
if (newOptions && Object.keys(newOptions).length !== 0) {
|
||
let panels = new MenuCopySheet(newOptions);
|
||
return panels;
|
||
}
|
||
}
|
||
return MenuCopySheet;
|
||
}
|
||
/**
|
||
* 执行的方法
|
||
*/
|
||
action(model: object, evt: Event): void {
|
||
if (model.modelType == 'DDeiSheet') {
|
||
//将sheet插入文件
|
||
let editor = DDeiEditor.ACTIVE_INSTANCE
|
||
let file = editor?.files[editor.currentFileIndex];
|
||
let ddInstance = model.stage.ddInstance
|
||
let rsState = DDeiEditorUtil.invokeCallbackFunc("EVENT_ADD_SHEET_BEFORE", "ADD_SHEET", null, ddInstance, null)
|
||
if (rsState != -1) {
|
||
|
||
let sheetJson = model.toJSON()
|
||
//获取当前dpi缩放,不同终端编辑可能造成dpi不一致,因此需要对比还原
|
||
let dpi = ddInstance.dpi?.x
|
||
//执行转换,将存储的标尺坐标转换为网页坐标
|
||
if (!sheetJson.stage.dpi) {
|
||
sheetJson.stage.dpi = dpi;
|
||
}
|
||
let unit = sheetJson.stage.unit;
|
||
//只有保存了dpi和unit才需要转换,并且unit为像素也不需要转换
|
||
if (dpi && unit && unit != 'px') {
|
||
sheetJson.stage?.layers?.forEach(layer => {
|
||
DDeiUtil.convertChildrenJsonUnit(layer, sheetJson.stage, unit);
|
||
});
|
||
}
|
||
|
||
let newSheet = DDeiSheet.loadFromJSON(sheetJson, { currentDdInstance: ddInstance });
|
||
|
||
|
||
file.sheets.splice(file?.currentSheetIndex + 1, 0, newSheet);
|
||
newSheet.name = "页面-" + file.sheets.length
|
||
file.changeSheet(file.currentSheetIndex + 1);
|
||
let stage = newSheet.stage;
|
||
stage.ddInstance = ddInstance;
|
||
//刷新页面
|
||
ddInstance.stage = stage;
|
||
|
||
//加载场景渲染器
|
||
stage.initRender();
|
||
editor.changeState(DDeiEditorState.DESIGNING);
|
||
editor.bus.push(DDeiEditorEnumBusCommandType.ClearTemplateUI);
|
||
editor.bus.push(DDeiEnumBusCommandType.RefreshShape, null, null);
|
||
//记录日志
|
||
editor.bus.push(DDeiEnumBusCommandType.AddHistroy)
|
||
editor.bus.push(DDeiEditorEnumBusCommandType.RefreshEditorParts, { parts: ["bottommenu"] })
|
||
editor.bus?.executeAll();
|
||
editor.editorViewer?.changeFileModifyDirty();
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 判定是否显示的方法
|
||
*/
|
||
isVisiable(model: object): boolean {
|
||
if(model){
|
||
let allowEditSheet = model.stage.ddInstance?.AC_DESIGN_EDIT != false ? true : false
|
||
return allowEditSheet && !this.disabled;
|
||
}
|
||
return false
|
||
}
|
||
|
||
}
|
||
|
||
export default MenuCopySheet;
|