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 {
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
property bool comfirmed_quit: false
property var sub_windows: ({})
visible: false
color: {
if (FramelessHelper.blurBehindWindowEnabled) {
@ -114,7 +119,10 @@ Window {
}
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)
{
@ -128,15 +136,29 @@ Window {
}
sub_windows[window_url].raise()
sub_windows[window_url].requestActivate()
RibbonUI.windowsSet = sub_windows
return
}
else
{
sub_windows[window_url].close()
}
}
var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined);
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
RibbonUI.windowsSet = sub_windows
window.onClosing.connect(function() {
window.destroy()
let sub_windows = RibbonUI.windowsSet
delete sub_windows[window_url]
RibbonUI.windowsSet = sub_windows
});
window.raise()
window.requestActivate()

View File

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