Compare commits

...

2 Commits

Author SHA1 Message Date
Mentalflow 56f21299f0
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.
2024-04-20 22:00:19 +08:00
Mentalflow 6419045f0e
RibbonWindow: Use an unified set to store sub windows pointers. 2024-04-20 21:13:28 +08:00
2 changed files with 34 additions and 11 deletions

View File

@ -5,12 +5,17 @@ import org.wangwenx190.FramelessHelper
Window { Window {
id:window id:window
minimumWidth: title_bar.minimumWidth minimumWidth: title_bar.minimumWidth
enum Status {
Stardard,
SingleTask,
SingleInstance
}
default property alias content: container.data default property alias content: container.data
property int windowStatus: RibbonWindow.Status.Stardard
property alias window_items: window_items property alias window_items: window_items
property alias title_bar: titleBar property alias title_bar: titleBar
property alias popup: pop property alias popup: pop
property bool comfirmed_quit: false property bool comfirmed_quit: false
property var sub_windows: ({})
visible: false visible: false
color: { color: {
if (FramelessHelper.blurBehindWindowEnabled) { if (FramelessHelper.blurBehindWindowEnabled) {
@ -114,7 +119,10 @@ Window {
} }
function show_window(window_url, args){ function show_window(window_url, args){
if (sub_windows.hasOwnProperty(window_url)) let sub_windows = RibbonUI.windowsSet
if (sub_windows.hasOwnProperty(window_url)&&sub_windows[window_url]['windowStatus'] !== RibbonWindow.Status.Stardard)
{
if (sub_windows[window_url]['windowStatus'] === RibbonWindow.Status.SingleInstance)
{ {
if (args && Object.keys(args).length) if (args && Object.keys(args).length)
{ {
@ -128,15 +136,29 @@ Window {
} }
sub_windows[window_url].raise() sub_windows[window_url].raise()
sub_windows[window_url].requestActivate() sub_windows[window_url].requestActivate()
RibbonUI.windowsSet = sub_windows
return return
} }
else
{
sub_windows[window_url].close()
}
}
var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined); var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined);
if (component.status === Component.Ready) { if (component.status === Component.Ready) {
var window = component.createObject(undefined, args); var window = component.createObject(undefined, args)
if (!(window instanceof Window))
{
console.error("RibbonWindow: Error loading Window: Instance is not Window.")
return
}
sub_windows[window_url] = window sub_windows[window_url] = window
RibbonUI.windowsSet = sub_windows
window.onClosing.connect(function() { window.onClosing.connect(function() {
window.destroy() window.destroy()
let sub_windows = RibbonUI.windowsSet
delete sub_windows[window_url] delete sub_windows[window_url]
RibbonUI.windowsSet = sub_windows
}); });
window.raise() window.raise()
window.requestActivate() window.requestActivate()

View File

@ -16,6 +16,7 @@ class RibbonUI : public QQuickItem
Q_PROPERTY_R(QString, version) Q_PROPERTY_R(QString, version)
Q_PROPERTY_R(int, qt_version) Q_PROPERTY_R(int, qt_version)
Q_PROPERTY_R(int, is_win11) Q_PROPERTY_R(int, is_win11)
Q_PROPERTY_RW(QVariantMap, windowsSet)
public: public:
static RibbonUI* instance(); static RibbonUI* instance();
static RibbonUI* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();} static RibbonUI* create(QQmlEngine *qmlEngine, QJSEngine *jsEngine){return instance();}