{"version":3,"file":"memoryClipboardUtil.mjs","sources":["../../../../src/utils/memoryClipboardUtil.ts"],"sourcesContent":["import { getSelectElement, removeSelectElement, updatePanel } from '@myprint/design/plugins/moveable/moveable';\nimport { elementTypeContainerList, noCopyElementTypeList } from '@myprint/design/constants/common';\nimport { Container, MyElement, Point, SvgData } from '@myprint/design/types/entity';\nimport { addElement, getCurrentPanel } from '@myprint/design/utils/elementUtil';\nimport { parse, stringify } from '@myprint/design/utils/utils';\nimport { ActionEnum, record, Snapshot } from '@myprint/design/utils/historyUtil';\nimport { nextTick } from 'vue-demi';\nimport { px2unit } from '@myprint/design/utils/devicePixelRatio';\n\ntype memoryClipboardType = 'COPY' | 'CUT'\n\nfunction boundElement(newElement: MyElement, parentTmp: Container) {\n    if (newElement.x + newElement.width > parentTmp.width) {\n        newElement.x = parentTmp.width - newElement.width;\n    }\n    if (newElement.y + newElement.height > parentTmp.height) {\n        newElement.y = parentTmp.height - newElement.height;\n    }\n}\n\nfunction getIncr(clipboard: any, id: string) {\n    let pasteNum = clipboard.pasteNumMap[id];\n    if (pasteNum == undefined) {\n        pasteNum = 1;\n        clipboard.pasteNumMap[id] = pasteNum;\n    }\n    return pasteNum;\n}\n\nexport const memoryClipboardUtil = {\n    clipboard: {\n        data: [] as MyElement[],\n        type: 'COPY' as memoryClipboardType,\n        pasteNumMap: {}\n    },\n\n    copy() {\n        const elementList = getSelectElement().filter(v => !noCopyElementTypeList.includes(v.type));\n        if (elementList.length == 0) {\n            return;\n        }\n\n        for (let myElement of this.clipboard.data) {\n            myElement.runtimeOption.cutIngIs = undefined!;\n        }\n        this.clipboard.data = elementList;\n        this.clipboard.type = 'COPY';\n        this.clipboard.pasteNumMap = {};\n    },\n\n    cut() {\n        const elementList = getSelectElement().filter(v => !noCopyElementTypeList.includes(v.type));\n        if (elementList.length == 0) {\n            return;\n        }\n        for (let myElement of this.clipboard.data) {\n            myElement.runtimeOption.cutIngIs = undefined!;\n        }\n        for (let myElement of elementList) {\n            myElement.runtimeOption.cutIngIs = true;\n        }\n        this.clipboard.data = elementList;\n        this.clipboard.type = 'CUT';\n        this.clipboard.pasteNumMap = {};\n    },\n\n    paste() {\n        if (this.clipboard.data == undefined) {\n            return;\n        }\n\n        // 判断当前选中的元素\n        const elementList = getSelectElement();\n        const newElementList: MyElement[] = [];\n        const panel = getCurrentPanel();\n        let parent: Container = panel;\n\n        if (elementList.length == 1 && elementTypeContainerList.includes(elementList[0].type)) {\n            parent = elementList[0];\n        }\n\n        let panelPasteNum = getIncr(this.clipboard, panel.id);\n        let pasteNum = getIncr(this.clipboard, parent.id);\n\n        let x = px2unit(10) * pasteNum;\n        let y = px2unit(10) * pasteNum;\n        // console.log(elementList);\n        if (elementTypeContainerList.includes(parent.type)) {\n            x = -this.clipboard.data[0].x + x;\n            y = -this.clipboard.data[0].y + y;\n        }\n        let incrParent = false;\n        let incrPanel = false;\n\n        if (this.clipboard.type == 'CUT') {\n            for (let myElement of this.clipboard.data) {\n                myElement.runtimeOption.cutIngIs = undefined!;\n            }\n            removeSelectElement(this.clipboard.data);\n            // 删除原来的\n            this.clipboard.type = 'COPY';\n            for (let datum of this.clipboard.data) {\n                const parentTmp = elementTypeContainerList.includes(datum.type) ? getCurrentPanel() : parent;\n                computePosition(datum, parentTmp);\n                boundElement(datum, parentTmp);\n                addElement(getCurrentPanel(), parentTmp, datum);\n                newElementList.push(datum);\n            }\n\n            // 记录历史\n            record(<Snapshot>{\n                type: 'Element',\n                action: ActionEnum.CUT,\n                elementList: newElementList\n            });\n        } else {\n            // 粘贴新的\n            for (let i = 0; i < this.clipboard.data.length; i++) {\n                let datum = this.clipboard.data[i];\n\n                const parentTmp = elementTypeContainerList.includes(datum.type) ? getCurrentPanel() : parent;\n\n                // 设置合适的位置\n                const newElement = parse(stringify(datum, 'parent', 'target'), {} as MyElement);\n\n                switch (newElement.type) {\n                    case 'SvgPolygonLine':\n                    case 'SvgBezierCurve':\n                    case 'SvgBezierCurveThree':\n                    case 'SvgLine':\n                        if (newElement.data) {\n                            const data = JSON.parse(newElement.data) as SvgData;\n                            const points = data.points as Point[];\n                            const controlPoints = data.controlPoints as Point[];\n                            const dataJson = {} as SvgData;\n                            if (points) {\n                                for (let point of points) {\n                                    point.x = px2unit(point.x, panel);\n                                    point.y = px2unit(point.y, panel);\n                                }\n                                dataJson.points = points;\n                            }\n\n                            if (controlPoints) {\n                                for (let point of controlPoints) {\n                                    point.x = px2unit(point.x, panel);\n                                    point.y = px2unit(point.y, panel);\n                                }\n                                dataJson.controlPoints = controlPoints;\n                            }\n\n                            newElement.data = JSON.stringify(dataJson);\n                        }\n                }\n\n                newElement.id = undefined!;\n                computePosition(newElement, parentTmp);\n\n                boundElement(newElement, parentTmp);\n                addElement(getCurrentPanel(), parentTmp, newElement);\n                newElementList.push(newElement);\n            }\n\n            // 记录历史\n            record(<Snapshot>{\n                type: 'Element',\n                action: ActionEnum.PASTE,\n                elementList: newElementList\n            });\n        }\n\n        nextTick(() => {\n            // setSelectedTargets()\n            if (elementTypeContainerList.includes(parent.type)) {\n                newElementList.length = 0;\n                newElementList.push(parent as MyElement);\n            }\n            updatePanel(newElementList);\n        });\n\n        if (incrPanel) {\n            this.clipboard.pasteNumMap[panel.id]++;\n        }\n        if (incrParent) {\n            this.clipboard.pasteNumMap[parent.id]++;\n        }\n\n        function computePosition(newElement: MyElement, parentTmp: Container) {\n            if (parentTmp.type == 'Panel') {\n                // 设置合适的位置\n                newElement.x = newElement.x + px2unit(10) * panelPasteNum;\n                newElement.y = newElement.y + px2unit(10) * panelPasteNum;\n                incrPanel = true;\n            } else {\n                // 设置合适的位置\n                newElement.x = newElement.x + x;\n                newElement.y = newElement.y + y;\n                incrParent = true;\n            }\n        }\n    }\n\n};\n"],"names":[],"mappings":"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"}