import { E_InitEvent } from '../../init/E_InitEvent'; import { MainGlobal } from '../../../utils/MainGlobal'; import { Module } from '../../../../leo/frame/local/Module'; import { Proxy } from '../../../../leo/frame/local/Proxy'; import { ModuleEvent } from '../../../../leo/frame/local/ModuleEvent'; const electron = require('electron'); const ipcMain: Electron.IpcMain = electron.ipcMain; export class SceneRightMenu_Proxy extends Proxy { constructor($module: Module) { super($module); } registerEvents(): any[] { return [E_InitEvent]; } receivedEvents($eventClass: ModuleEvent): void { switch ($eventClass.getClass()) { case E_InitEvent: this.onMenu(); break; } } private onMenu() { let Menu = electron.Menu; let MenuItem = electron.MenuItem; let sceneUnselectArg: any[]; //场景右键菜单 let template_scene_un_select: Electron.MenuItemOptions[] = [ { label: "添加游戏对象", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('add-gameobject')); } }, { label: '添加文本', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('add-text')); } }, { label: '添加素材', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('add-materail')); } }, { type: 'separator' }, { label: '复制', accelerator: 'CmdOrCtrl+C', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('copy')); } }, { label: '粘贴', accelerator: 'CmdOrCtrl+V', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('parse')); } }, { label: '克隆', accelerator: 'CmdOrCtrl+Shift+C', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('clone')); } }, { label: '删除', accelerator: 'Delete', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('delete')); } }, { type: 'separator' }, { label: '全选', accelerator: 'CmdOrCtrl+A', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('select-all')); } }, { label: '取消选择', accelerator: 'CmdOrCtrl+Shift+A', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-unselect-callback', sceneUnselectArg = sceneUnselectArg.concat('unselect')); } } ]; let sceneSelectArg: any[]; let template_scene_select: Electron.MenuItemOptions[] = [ { label: '复制', accelerator: 'CmdOrCtrl+C', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('copy')); } }, { label: '粘贴', accelerator: 'CmdOrCtrl+V', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('parse')); } }, { label: '克隆', accelerator: 'CmdOrCtrl+Shift+C', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('clone')); } }, { label: '删除', accelerator: 'Delete', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('delete')); } }, { type: 'separator' }, { label: '层级', submenu: [ { label: "移动到当前层顶", accelerator: 'Shift+Alt+↑', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('layer-move-top')); } }, { label: "移动到当前层底", accelerator: 'Shift+Alt+↓', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('layer-move-bottom')); } }, { label: "当前层内上移", accelerator: 'Shift+↑', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('layer-move-up')); } }, { label: "当前层内下移", accelerator: 'Shift+↓', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('layer-move-down')); } }, { type: 'separator' }, { label: "移动到Layer4440层" } ] }, { label: '对象', submenu: [ { label: "对齐", submenu: [ { label: "顶对齐", accelerator: "CmdOrCtrl+Alt+↑", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-top-align')); } }, { label: "底对齐", accelerator: "CmdOrCtrl+Alt+↓", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-bottom-align')); } }, { label: "左对齐", accelerator: "CmdOrCtrl+Alt+←", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-left-align')); } }, { label: "右对齐", accelerator: "CmdOrCtrl+Alt+→", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-right-align')); } }, { label: "水平居中对齐", accelerator: "CmdOrCtrl+Alt+C", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-center-align')); } }, { label: "垂直居中对齐", accelerator: "CmdOrCtrl+Alt+M", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-align-middle-align')); } } ] }, { label: "分布", submenu: [ { label: "沿顶边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-top')); } }, { label: "沿底边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-bottom')); } }, { label: "沿左边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-left')); } }, { label: "沿右边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-right')); } }, { label: "水平居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-center')); } }, { label: "垂直居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-distribution-middle')); } } ] }, { label: "匹配", submenu: [ { label: "匹配宽度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-match-width')); } }, { label: "匹配高度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-match-height')); } }, { label: "匹配宽高", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-match-width-height')); } } ] }, { label: "间距", submenu: [ { label: "垂直距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-space-vertical')); } }, { label: "水平距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('object-space-horizontal')); } } ] } ] }, { label: '舞台', submenu: [ { label: "对齐", submenu: [ { label: "顶对齐", accelerator: "CmdOrCtrl+Alt+↑", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-top-align')); } }, { label: "底对齐", accelerator: "CmdOrCtrl+Alt+↓", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-bottom-align')); } }, { label: "左对齐", accelerator: "CmdOrCtrl+Alt+←", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-left-align')); } }, { label: "右对齐", accelerator: "CmdOrCtrl+Alt+→", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-right-align')); } }, { label: "水平居中对齐", accelerator: "CmdOrCtrl+Alt+C", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-center-align')); } }, { label: "垂直居中对齐", accelerator: "CmdOrCtrl+Alt+M", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-align-middle-align')); } } ] }, { label: "分布", submenu: [ { label: "沿顶边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-top')); } }, { label: "沿底边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-bottom')); } }, { label: "沿左边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-left')); } }, { label: "沿右边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-right')); } }, { label: "水平居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-center')); } }, { label: "垂直居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-distribution-middle')); } } ] }, { label: "匹配", submenu: [ { label: "匹配宽度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-match-width')); } }, { label: "匹配高度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-match-height')); } }, { label: "匹配宽高", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-match-width-height')); } } ] }, { label: "间距", submenu: [ { label: "垂直距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-space-vertical')); } }, { label: "水平距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('stage-space-horizontal')); } } ] } ] }, { label: '场景', submenu: [ { label: "对齐", submenu: [ { label: "顶对齐", accelerator: "CmdOrCtrl+Alt+↑", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-top-align')); } }, { label: "底对齐", accelerator: "CmdOrCtrl+Alt+↓", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-bottom-align')); } }, { label: "左对齐", accelerator: "CmdOrCtrl+Alt+←", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-left-align')); } }, { label: "右对齐", accelerator: "CmdOrCtrl+Alt+→", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-right-align')); } }, { label: "水平居中对齐", accelerator: "CmdOrCtrl+Alt+C", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-center-align')); } }, { label: "垂直居中对齐", accelerator: "CmdOrCtrl+Alt+M", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-align-middle-align')); } } ] }, { label: "分布", submenu: [ { label: "沿顶边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-top')); } }, { label: "沿底边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-bottom')); } }, { label: "沿左边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-left')); } }, { label: "沿右边分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-right')); } }, { label: "水平居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-center')); } }, { label: "垂直居中分布", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-distribution-middle')); } } ] }, { label: "匹配", submenu: [ { label: "匹配宽度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-match-width')); } }, { label: "匹配高度", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-match-height')); } }, { label: "匹配宽高", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-match-width-height')); } } ] }, { label: "间距", submenu: [ { label: "垂直距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-space-vertical')); } }, { label: "水平距离相同", click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-space-horizontal')); } } ] } ] }, { label: '全选', accelerator: 'CmdOrCtrl+A', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-select-all')); } }, { label: '取消选择', accelerator: 'CmdOrCtrl+Shift+A', click: () => { MainGlobal.mainWindow.webContents.send('on-scene-select-callback', sceneSelectArg = sceneSelectArg.concat('scene-unselect')); } } ]; ipcMain.on('menu-scene-rightmenu', (event, arg:any[]) => { sceneSelectArg = arg ? arg : []; let menu = Menu.buildFromTemplate(template_scene_select); menu.popup(MainGlobal.mainWindow); }); let curProjectArg: any[]; //项目右键菜单 let template_project: Electron.MenuItemOptions[] = [ { label: "创建", submenu: [ { label: "文件夹", click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback',curProjectArg = curProjectArg.concat('create-folder')); } }, { type: 'separator' }, { label: "TypeScript", click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback',curProjectArg = curProjectArg.concat('create-typescript')); } }, { type: 'separator' }, { label: "场景", accelerator: (function () { if (process.platform === 'darwin') return 'Ctrl+Command+F'; else return "F11"; } ()), click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback',curProjectArg = curProjectArg.concat('create-scene')); } }, { label: "预制体", click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback',curProjectArg = curProjectArg.concat('create-prefab')); } } ] }, { label: '在资源管理器中打开', click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-open-callback', curProjectArg = curProjectArg.concat('open-resourcemanager')); } }, { label: '打开', click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback', curProjectArg = curProjectArg.concat('open-file')); } }, { label: '删除', accelerator: 'CmdOrCtrl+D', click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback',curProjectArg = curProjectArg.concat('delete-file')); } }, { type: 'separator' }, { label: '刷新', accelerator: (function () { if (process.platform === 'darwin') return 'F5'; else return ""; } ()), click: () => { MainGlobal.mainWindow.webContents.send('on-project-menu-callback', curProjectArg = curProjectArg.concat('refresh-file')); } } ]; ipcMain.on('menu-project-rightmenu', (event, arg: any[]) => { curProjectArg = arg ? arg : []; let menu = Menu.buildFromTemplate(template_project); menu.popup(MainGlobal.mainWindow); }); //属性右键菜单 let curPropertyArg: any[]; let template_property: Electron.MenuItemOptions[] = [ { label: '重置', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('reset-component')); } }, { type: 'separator' }, { label: '移除组件', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('remove-component')); } }, { label: '上移', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('up-component')); } }, { label: '下移', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('down-component')); } }, { label: '拷贝组件', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('copy-component')); } }, { label: '粘贴组件', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('parse-component')); } }, { type: 'separator' }, { label: '编辑组件', click: () => { MainGlobal.mainWindow.webContents.send('on-property-menu-callback', curPropertyArg = curPropertyArg.concat('edit-component')); } } ]; ipcMain.on('on-property-menu', (event, arg: any[]) => { curPropertyArg = arg ? arg : []; let menu = Menu.buildFromTemplate(template_property); menu.popup(MainGlobal.mainWindow); }); let curArg: any[]; //游戏对象菜单 let template_hierarchy: Electron.MenuItemOptions[] = [ { label: '复制', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('copy')); } }, { label: '粘贴', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('parse')); } }, { label: '删除', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('delete')); } }, { type: 'separator' }, { label: '重命名', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('rename')); } }, { label: '克隆', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('clone')); } }, { type: 'separator' }, { label: '创建空游戏对象', click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_gamobject')); } }, { label: '创建显示对象', submenu: [ { label: "精灵", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_sprite')); } }, { label: "精灵图", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_spritesheet')); } }, { label: "动画", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_animate')); } }, { label: "按纽", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_button')); } }, { label: "九宫格", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_scale9grid')); } }, { label: "瓦片平铺", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_tiledbackground')); } }, { label: "文本", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_textfield')); } }, { label: "位图字体", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_bitmapfont')); } }, { label: "Tiled", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_tiled')); } }, { label: "骨骼", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_dragonbones')); } }, { label: "粒子", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_displayobject_particles')); } } ] }, { label: '创建媒体', submenu: [ { label: "声音", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_media_audio')); } }, { label: "视频", click: (event) => { MainGlobal.mainWindow.webContents.send('menu-hierarchy-rightmenu-callback', curArg = curArg.concat('create_media_video')); } } ] }, { type: 'separator' }, { label: '创建摄像机' } ]; ipcMain.on('menu-hierarchy-rightmenu', (event, arg:any[]) => { curArg = arg ? arg : []; let menu = Menu.buildFromTemplate(template_hierarchy); menu.popup(MainGlobal.mainWindow); }); } }