diff --git a/electron/components/contextMenu.js b/electron/components/contextMenu.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c72277cd2398eb1c2f7fd7e306b4726e8dd36d --- /dev/null +++ b/electron/components/contextMenu.js @@ -0,0 +1,29 @@ +const { ipcMain, Menu } = require('electron'); +const path = require('path'); + +const contextTemplate = [ + { + label: 'Ajouter', + submenu: [ + { + label: 'Ajouter du texte', + click: () => { console.log('Ajout d\'une page texte'); } + }, + { + label: 'Ajouter une vidéo', + click: () => { console.log('Ajout d\'une page vidéo'); } + } + ] + }, + { + label: 'Dupliquer', + click: () => { console.log('Duplication de la page'); } + }, + { + label: 'Supprimer', + click: () => { console.log('Suppression de la page'); } + } +]; + + +module.exports.popupMenu = Menu.buildFromTemplate(contextTemplate); \ No newline at end of file diff --git a/electron/electron.js b/electron/electron.js index f0bb0e1cd7da25792bfe0dcf8098b8eb4466ee75..4c5741f132c4968e56fbeec378d07e684378bedd 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -10,6 +10,8 @@ const { cleanPreview } = require('./components/preview'); const path = require('path'); const store = require('./components/store'); +const { popupMenu } = require('./components/contextMenu'); + let mainWindow; let splashWindow; // Open file with editor, on windows : using argv | on macOS using open-file event (see below) @@ -78,4 +80,8 @@ app.whenReady().then(() => { cleanPreview(); app.quit(); }); + + mainWindow.webContents.on('context-menu', () => { + popupMenu.popup(mainWindow.webContents); + }); }); \ No newline at end of file diff --git a/src/features/sideBar/SideBarV0.vue b/src/features/sideBar/SideBarV0.vue index b3eb96ad9f00697d3d3ef96c1b8a081edcf34bae..3b2ef36111669a6363e94b935fe12825a73a2f3a 100644 --- a/src/features/sideBar/SideBarV0.vue +++ b/src/features/sideBar/SideBarV0.vue @@ -17,6 +17,7 @@ const editorStore = useEditorStore(); :side-action="item" /> </div> + <button class="btn btn-content" @click="editorStore.addNewPage('text')">Add page</button> </div> </template> diff --git a/src/shared/stores/editorStore.ts b/src/shared/stores/editorStore.ts index bb3d894bd971beaad664c7112e4f4e19223e68e2..4300e5e97bcae198cb82e91424dbedcd05f2d6f2 100644 --- a/src/shared/stores/editorStore.ts +++ b/src/shared/stores/editorStore.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { ePocProject, Form, FormButton, Screen, SideAction } from '@/src/shared/interfaces'; +import { ePocProject, Form, FormButton, NodeElement, Screen, SideAction } from '@/src/shared/interfaces'; import { toRaw } from 'vue'; import { applyNodeChanges, getConnectedEdges, useVueFlow } from '@vue-flow/core'; @@ -248,6 +248,31 @@ export const useEditorStore = defineStore('editor', { node.data.elements.push(newElement); this.addElementToScreen(node.id, newElement.action); + }, + addNewPage(type: string, following?: string) { + console.log('adding a new page of type', type); + + const elements: NodeElement[] = []; + const id = this.generateId(); + + elements.push({ + id: this.generateId(), + action: { icon: 'icon-texte', type: 'text', label: 'Texte' }, + formType: 'text', + formValues: {}, + parentId: id, + contentId: this.generateContentId(), + }); + + const newNode = { + id: id, + type: 'content', + data: { type: type, readyToDrop: false, animated: false, elements: elements, formType: 'screen', formValues: {}, contentId: id }, + position: { x: 200, y: 200 }, + deletable: false + }; + + addNodes([newNode]); } } });