From 56f21299f0c7dc8f49460d864a61d98160feb60a Mon Sep 17 00:00:00 2001 From: Mentalflow <312902918@qq.com> Date: Sat, 20 Apr 2024 21:54:29 +0800 Subject: [PATCH] RibbonWindow: Add windowStatus property. 1. RibbonWindow.Status.Stardard: Create new window instance whether it already has one or not. 2. RibbonWindow.Status.SingleTask: If it already has one instance, the current instance will be closed and a new one will be created. 2. RibbonWindow.Status.SingleInstance: If it already has one instance, the current instance will be activated, no new instance will be created. --- lib_source/qml/RibbonWindow.qml | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/lib_source/qml/RibbonWindow.qml b/lib_source/qml/RibbonWindow.qml index d8d9bff..034400c 100644 --- a/lib_source/qml/RibbonWindow.qml +++ b/lib_source/qml/RibbonWindow.qml @@ -5,7 +5,13 @@ import org.wangwenx190.FramelessHelper Window { id:window minimumWidth: title_bar.minimumWidth + enum Status { + Stardard, + SingleTask, + SingleInstance + } default property alias content: container.data + property int windowStatus: RibbonWindow.Status.Stardard property alias window_items: window_items property alias title_bar: titleBar property alias popup: pop @@ -114,22 +120,29 @@ Window { function show_window(window_url, args){ let sub_windows = RibbonUI.windowsSet - if (sub_windows.hasOwnProperty(window_url)) + if (sub_windows.hasOwnProperty(window_url)&&sub_windows[window_url]['windowStatus'] !== RibbonWindow.Status.Stardard) { - if (args && Object.keys(args).length) + if (sub_windows[window_url]['windowStatus'] === RibbonWindow.Status.SingleInstance) { - for (let arg in args){ - sub_windows[window_url][arg] = args[arg] + if (args && Object.keys(args).length) + { + for (let arg in args){ + sub_windows[window_url][arg] = args[arg] + } } + if (!sub_windows[window_url].visible) + { + sub_windows[window_url].show() + } + sub_windows[window_url].raise() + sub_windows[window_url].requestActivate() + RibbonUI.windowsSet = sub_windows + return } - if (!sub_windows[window_url].visible) + else { - sub_windows[window_url].show() + sub_windows[window_url].close() } - sub_windows[window_url].raise() - sub_windows[window_url].requestActivate() - RibbonUI.windowsSet = sub_windows - return } var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined); if (component.status === Component.Ready) {