136 lines
4.3 KiB
QML
136 lines
4.3 KiB
QML
import QtQuick
|
|
import RibbonUI
|
|
import org.wangwenx190.FramelessHelper
|
|
|
|
Window {
|
|
id:window
|
|
default property alias content: container.data
|
|
property alias window_items: window_items
|
|
property alias title_bar: titleBar
|
|
property alias popup: pop
|
|
property bool comfirmed_quit: false
|
|
visible: false
|
|
color: {
|
|
if (FramelessHelper.blurBehindWindowEnabled) {
|
|
return "transparent";
|
|
}
|
|
if (FramelessUtils.systemTheme === FramelessHelperConstants.Dark) {
|
|
return FramelessUtils.defaultSystemDarkColor;
|
|
}
|
|
return FramelessUtils.defaultSystemLightColor;
|
|
}
|
|
FramelessHelper.onReady: {
|
|
if (Qt.platform.os === 'windows')
|
|
{
|
|
FramelessHelper.setSystemButton(titleBar.minimizeBtn, FramelessHelperConstants.Minimize);
|
|
FramelessHelper.setSystemButton(titleBar.maximizeBtn, FramelessHelperConstants.Maximize);
|
|
FramelessHelper.setSystemButton(titleBar.closeBtn, FramelessHelperConstants.Close);
|
|
}
|
|
FramelessHelper.setHitTestVisible(titleBar.left_container)
|
|
FramelessHelper.setHitTestVisible(titleBar.right_container)
|
|
FramelessHelper.titleBarItem = titleBar;
|
|
FramelessHelper.moveWindowToDesktopCenter();
|
|
window.visible = true;
|
|
}
|
|
Item{
|
|
id: window_items
|
|
anchors.fill: parent
|
|
RibbonTitleBar {
|
|
id: titleBar
|
|
anchors.topMargin: border_rect.border.width
|
|
anchors.leftMargin: border_rect.border.width
|
|
anchors.rightMargin: border_rect.border.width
|
|
}
|
|
Item{
|
|
id:container
|
|
anchors{
|
|
top: titleBar.bottom
|
|
left: parent.left
|
|
leftMargin: border_rect.border.width
|
|
right: parent.right
|
|
rightMargin: border_rect.border.width
|
|
bottom: parent.bottom
|
|
bottomMargin: border_rect.border.width
|
|
}
|
|
clip: true
|
|
}
|
|
}
|
|
Connections{
|
|
target: RibbonTheme
|
|
function onTheme_modeChanged() {
|
|
if (RibbonTheme.dark_mode)
|
|
FramelessUtils.systemTheme = FramelessHelperConstants.Dark
|
|
else
|
|
FramelessUtils.systemTheme = FramelessHelperConstants.Light
|
|
}
|
|
}
|
|
Rectangle{
|
|
z:99
|
|
anchors.fill: parent
|
|
color: !RibbonTheme.dark_mode ? Qt.rgba(255,255,255,0.3) : Qt.rgba(0,0,0,0.3)
|
|
visible: !Window.active
|
|
}
|
|
Rectangle{
|
|
id: border_rect
|
|
anchors.fill: parent
|
|
color: 'transparent'
|
|
border.color: RibbonTheme.dark_mode ? "#7A7A7A" : "#2C59B7"
|
|
border.width: RibbonTheme.modern_style ? 1 : 0
|
|
radius: 10
|
|
visible: RibbonTheme.modern_style
|
|
}
|
|
RibbonPopup{
|
|
id: pop
|
|
target: window_items
|
|
target_rect: Qt.rect(window_items.x + x, window_items.y + y, width, height)
|
|
blur_enabled: true
|
|
onClosed: contentItem.destroy()
|
|
}
|
|
RibbonPopupDialog{
|
|
id: 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"
|
|
buttonFlags: RibbonPopupDialogType.NegativeButton | RibbonPopupDialogType.PositiveButton | RibbonPopupDialogType.NeutralButton
|
|
onNeutralClicked: window.visibility = Window.Minimized
|
|
onPositiveClicked: {
|
|
comfirmed_quit = true
|
|
Qt.quit()
|
|
}
|
|
}
|
|
onClosing:function(event){
|
|
window.raise()
|
|
event.accepted = comfirmed_quit
|
|
if (!comfirmed_quit)
|
|
dialog.open()
|
|
}
|
|
|
|
function show_popup(content_url, argument)
|
|
{
|
|
let component = Qt.createComponent(content_url,pop)
|
|
|
|
if (component.status === Component.Error) {
|
|
console.log(qsTr("Error loading component:"), component.errorString());
|
|
return
|
|
}
|
|
else
|
|
{
|
|
if (typeof(argument)!='undefined')
|
|
pop.contentItem = component.createObject(pop,argument)
|
|
else
|
|
pop.contentItem = component.createObject(pop)
|
|
}
|
|
pop.open()
|
|
}
|
|
|
|
function close_popup()
|
|
{
|
|
pop.close()
|
|
}
|
|
}
|