RibbonWindow: Add window manager.

This commit is contained in:
Mentalflow 2024-04-05 01:43:28 +08:00
parent 453a15b37f
commit edeee77c44
Signed by: Mentalflow
GPG Key ID: 5AE68D4401A2EE71
4 changed files with 91 additions and 8 deletions

View File

@ -85,7 +85,7 @@ qt_add_qml_module(${PROJECT_NAME}
URI ${PROJECT_NAME}
VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
RESOURCE_PREFIX "/qt/qml/"
QML_FILES example.qml components/RibbonMessageListViewExample.qml
QML_FILES example.qml about.qml components/RibbonMessageListViewExample.qml
RESOURCES resources/imgs/heart.png resources/imgs/search.png
)

44
example/about.qml Normal file
View File

@ -0,0 +1,44 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import RibbonUI
RibbonWindow {
id: window
width: Math.max(content.width, content.height + title_bar.height) + content.anchors.margins * 2
height: width
title: qsTr("About")
title_bar.show_darkmode_btn: false
title_bar.show_style_switch: false
ColumnLayout{
id: content
anchors{
centerIn: parent
margins: 10
}
spacing: 5
Image {
source: "qrc:/qt/qml/RibbonUI/resources/imgs/icon.png"
fillMode:Image.PreserveAspectFit
Layout.preferredHeight: 120
Layout.preferredWidth: height
Layout.alignment: Qt.AlignHCenter
layer.enabled: true
layer.effect: RibbonShadow{}
}
RibbonText{
Layout.alignment: Qt.AlignHCenter
text: "RibbonUI"
font.pixelSize: 16
}
RibbonText{
Layout.alignment: Qt.AlignHCenter
text: `©${new Date().getFullYear()} mentalfl0w`
}
RibbonText{
Layout.alignment: Qt.AlignHCenter
text: `Version: V${RibbonUI.version}`
}
}
}

View File

@ -8,6 +8,7 @@ RibbonWindow {
width: 1200
height: 800
title: qsTr("RibbonUI APP")
comfirmed_quit: true
property bool modern_style: RibbonTheme.modern_style
RibbonTabBar {
@ -693,6 +694,17 @@ RibbonWindow {
title_bar.right_content:RowLayout{
spacing: 1
layoutDirection: Qt.RightToLeft
RibbonButton{
show_bg:false
icon_source: RibbonIcons.Info
icon_source_filled: RibbonIcons_Filled.Info
tip_text: qsTr("About")
hover_color: Qt.rgba(0,0,0, 0.3)
pressed_color: Qt.rgba(0,0,0, 0.4)
text_color: title_bar.title_text_color
text_color_reverse: false
onClicked: root.show_window(Qt.resolvedUrl("about.qml"))
}
RibbonButton{
show_bg:false
icon_source: RibbonIcons.CalendarStar

View File

@ -85,28 +85,55 @@ Window {
target_rect: Qt.rect(window_items.x + x, window_items.y + y, width, height)
blur_enabled: true
}
RibbonPopupDialog{
id: dialog
id: close_dialog
target: window_items
blur_enabled: true
target_rect: Qt.rect(window_items.x + x, window_items.y + y, width, height)
positiveText: qsTr("Quit")
neutralText: qsTr("Minimize")
negativeText: qsTr("Cancel")
message: "Do you want to quit the APP?"
title: "Please note"
message: qsTr("Do you want to close this window?")
title: qsTr("Please note")
buttonFlags: RibbonPopupDialogType.NegativeButton | RibbonPopupDialogType.PositiveButton | RibbonPopupDialogType.NeutralButton
onNeutralClicked: window.visibility = Window.Minimized
onPositiveClicked: {
comfirmed_quit = true
comfirmed_quit = false
Qt.quit()
}
}
onClosing:function(event){
window.raise()
event.accepted = comfirmed_quit
if (!comfirmed_quit)
dialog.open()
event.accepted = !comfirmed_quit
if (comfirmed_quit)
close_dialog.open()
}
Loader{
id: window_loader
property var args
onLoaded: {
item.onClosing.connect(function(){
window_loader.source = ""
})
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{
console.error("RibbonWindow: Arguments error, please check.")
}
}
}
function show_window(window_url, args){
window_loader.args = args
window_loader.source = window_url
}
function show_popup(content_url, arguments)