RibbonTitleBar and RibbonWindow: Update for windows and improve window manager.

This commit is contained in:
Mentalflow 2024-04-05 14:27:17 +08:00
parent 2e6d85352a
commit 6ee70bc297
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
4 changed files with 33 additions and 33 deletions

View File

@ -6,7 +6,7 @@ import RibbonUI
Item { Item {
id: control id: control
height: 30 height: 30
property int minimumWidth: title_text.implicitWidth + left_container.width + right_container.width + (Qt.platform.os === "osx" ? 65 : 0) + 40 property int minimumWidth: title_text.implicitWidth + Math.max(left_container.width, right_container.width) * 2 + (Qt.platform.os === "osx" ? 65 : 0) + 20
property string title: Window.window.title property string title: Window.window.title
property bool show_style_switch: true property bool show_style_switch: true
property bool show_darkmode_btn: true property bool show_darkmode_btn: true

View File

@ -4,11 +4,13 @@ import org.wangwenx190.FramelessHelper
Window { Window {
id:window id:window
minimumWidth: title_bar.minimumWidth
default property alias content: container.data default property alias content: container.data
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) {
@ -75,8 +77,8 @@ Window {
anchors.fill: parent anchors.fill: parent
color: 'transparent' color: 'transparent'
border.color: RibbonTheme.dark_mode ? "#7A7A7A" : "#2C59B7" border.color: RibbonTheme.dark_mode ? "#7A7A7A" : "#2C59B7"
border.width: RibbonTheme.modern_style ? 1 : 0 border.width: RibbonTheme.modern_style ? Qt.platform.os === 'windows' ? 2 : 1 : 0
radius: 10 radius: Qt.platform.os === 'windows' ? 8 : 10
visible: RibbonTheme.modern_style visible: RibbonTheme.modern_style
} }
RibbonPopup{ RibbonPopup{
@ -111,38 +113,35 @@ Window {
close_dialog.open() close_dialog.open()
} }
Loader{ function show_window(window_url, args){
id: window_loader if (sub_windows.hasOwnProperty(window_url))
property var args {
onLoaded: { if (args && Object.keys(args).length)
item.onClosing.connect(function(){ {
window_loader.source = "" for (let arg in args){
}) sub_windows[window_url][arg] = args[arg]
if (!window_loader.args)
return
else if(Object.keys(window_loader.args).length){
for (let arg in window_loader.args){
item[arg] = window_loader.args[arg]
} }
} }
else{ if (!sub_windows[window_url].visible)
console.error("RibbonWindow: Arguments error, please check.") {
sub_windows[window_url].show()
} }
item.show() sub_windows[window_url].raise()
sub_windows[window_url].requestActivate()
return
} }
} var component = Qt.createComponent(window_url, Component.PreferSynchronous, undefined);
if (component.status === Component.Ready) {
function show_window(window_url, args){ var window = component.createObject(undefined, args);
if (window_url === window_loader.source && window_loader.status === Loader.Ready) sub_windows[window_url] = window
window_loader.item.raise() window.onClosing.connect(function() {
else window.destroy()
window_loader.source = window_url delete sub_windows[window_url]
if (args !== window_loader.args && Object.keys(window_loader.args).length && window_loader.status === Loader.Ready) });
{ window.raise()
window_loader.args = args window.requestActivate()
for (let arg in window_loader.args){ } else if (component.status === Component.Error) {
window_loader.item[arg] = window_loader.args[arg] console.error("RibbonWindow: Error loading Window:", component.errorString())
}
} }
} }

View File

@ -1,5 +1,6 @@
#include "ribbonui.h" #include "ribbonui.h"
#include <QMutex> #include <QMutex>
#include <QOperatingSystemVersion>
#define STR(x) #x #define STR(x) #x
#define JOIN(a,b,c) STR(a.b.c) #define JOIN(a,b,c) STR(a.b.c)
#define VER_JOIN(x) JOIN x #define VER_JOIN(x) JOIN x
@ -9,6 +10,7 @@ RibbonUI::RibbonUI(QQuickItem *parent)
{ {
_version = VER_JOIN((RIBBONUI_VERSION)); _version = VER_JOIN((RIBBONUI_VERSION));
_qt_version = QString(qVersion()).replace('.',"").toInt(); _qt_version = QString(qVersion()).replace('.',"").toInt();
_is_win11 = QOperatingSystemVersion::current() >= QOperatingSystemVersion(QOperatingSystemVersion::Windows, 10, 0, 22000);
} }
RibbonUI* RibbonUI::instance(){ RibbonUI* RibbonUI::instance(){
@ -26,9 +28,7 @@ void RibbonUI::init()
{ {
qputenv("QT_QUICK_CONTROLS_STYLE","Basic"); qputenv("QT_QUICK_CONTROLS_STYLE","Basic");
FramelessHelper::Quick::initialize(); FramelessHelper::Quick::initialize();
#ifdef Q_OS_WIN
FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder); FramelessConfig::instance()->set(Global::Option::ForceHideWindowFrameBorder);
#endif
FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial); FramelessConfig::instance()->set(Global::Option::DisableLazyInitializationForMicaMaterial);
FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow); FramelessConfig::instance()->set(Global::Option::CenterWindowBeforeShow);
FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow); FramelessConfig::instance()->set(Global::Option::EnableBlurBehindWindow);

View File

@ -15,6 +15,7 @@ class RibbonUI : public QQuickItem
QML_NAMED_ELEMENT(RibbonUI) QML_NAMED_ELEMENT(RibbonUI)
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)
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();}