From ce90f9df4bb0ad26405c68f7e428b77c5c6023a9 Mon Sep 17 00:00:00 2001 From: Kirigaya <1193466151@qq.com> Date: Mon, 2 Sep 2024 20:49:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20sidebar=20+=20signal=20vie?= =?UTF-8?q?w=20tree=20=E6=96=B0=E5=8A=9F=E8=83=BD=EF=BC=9Ashift=20+=20?= =?UTF-8?q?=E9=BC=A0=E6=A0=87=E5=B7=A6=E5=87=BB=E8=BF=9E=E7=BB=AD=E9=80=89?= =?UTF-8?q?=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/sidebar/index.vue | 30 ++++++++-- src/components/treeview/index.vue | 1 + src/components/treeview/signals.vue | 85 ++++++++++++++++++++--------- src/hook/sidebar-select-wire.js | 15 +++++ src/hook/wave-container-view.js | 27 +++++++++ 5 files changed, 126 insertions(+), 32 deletions(-) diff --git a/src/components/sidebar/index.vue b/src/components/sidebar/index.vue index 2e179b1..0ee20fa 100644 --- a/src/components/sidebar/index.vue +++ b/src/components/sidebar/index.vue @@ -23,7 +23,7 @@ @@ -76,6 +76,7 @@ import SignalItem from './signal-item.vue'; import GroupItem from './group-item.vue'; import GroupContextMenu from './group-context-menu.vue'; import { sidebarSelectedWires } from '@/hook/sidebar-select-wire'; +import { genOrderedLinks } from '@/hook/wave-container-view'; const { t } = useI18n(); defineComponent({ name: 'side-bar' }); @@ -102,18 +103,37 @@ function addSignal() { } -function handleItemClick(link) { +function handleItemClick(event, link) { contextmenu.show = false; groupcontextmenu.show = false; + const lastLink = sidebarSelectedWires.lastLink; - if (sidebarSelectedWires.has(link)) { - sidebarSelectedWires.delete(link); + if (event.shiftKey && lastLink !== undefined) { + // 如果按下了 shift,那么把刚刚的 link 到现在之间所有的 link 全部加入 + let addBegin = false; + const links = []; + for (const currentLink of genOrderedLinks({returnGroup: false})) { + if (currentLink === link || currentLink === lastLink) { + links.push(currentLink); + addBegin = !addBegin; + } else if (addBegin) { + links.push(currentLink); + } + } + sidebarSelectedWires.addLinks(links); } else { - sidebarSelectedWires.add(link); + // 如果没有,则加入;有,则删除 + if (sidebarSelectedWires.has(link)) { + sidebarSelectedWires.delete(link); + } else { + sidebarSelectedWires.add(link); + } } } + + function handleSidebarGlobalClick() { contextmenu.show = false; groupcontextmenu.show = false; diff --git a/src/components/treeview/index.vue b/src/components/treeview/index.vue index 5385973..4d5052a 100644 --- a/src/components/treeview/index.vue +++ b/src/components/treeview/index.vue @@ -70,6 +70,7 @@ export default { display: flex; flex-direction: column; transition: height .5s ease-in-out; + user-select: none; } .vcd-module-wrapper { diff --git a/src/components/treeview/signals.vue b/src/components/treeview/signals.vue index d152ac9..d3e7575 100644 --- a/src/components/treeview/signals.vue +++ b/src/components/treeview/signals.vue @@ -4,7 +4,7 @@
@@ -19,42 +19,73 @@
-