You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
150 lines
4.3 KiB
150 lines
4.3 KiB
// Copyright (c) 2021 Proton Technologies AG |
|
// |
|
// This file is part of ProtonMail Bridge. |
|
// |
|
// ProtonMail Bridge is free software: you can redistribute it and/or modify |
|
// it under the terms of the GNU General Public License as published by |
|
// the Free Software Foundation, either version 3 of the License, or |
|
// (at your option) any later version. |
|
// |
|
// ProtonMail Bridge is distributed in the hope that it will be useful, |
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
// GNU General Public License for more details. |
|
// |
|
// You should have received a copy of the GNU General Public License |
|
// along with ProtonMail Bridge. If not, see <https://www.gnu.org/licenses/>. |
|
|
|
// Header of window with logo and buttons |
|
|
|
import QtQuick 2.8 |
|
import ProtonUI 1.0 |
|
import QtQuick.Window 2.2 |
|
|
|
|
|
Rectangle { |
|
id: root |
|
// dimensions |
|
property Window parentWin |
|
property string title: "ProtonMail Bridge" |
|
property bool hasIcon : true |
|
anchors.top : parent.top |
|
anchors.right : parent.right |
|
width : Style.main.width |
|
height : Style.title.height |
|
// style |
|
color : Style.title.background |
|
|
|
signal hideClicked() |
|
|
|
// Drag to move : https://stackoverflow.com/a/18927884 |
|
MouseArea { |
|
property variant clickPos: "1,1" |
|
anchors.fill: parent |
|
onPressed: { |
|
clickPos = Qt.point(mouse.x,mouse.y) |
|
} |
|
onPositionChanged: { |
|
var delta = Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y) |
|
parentWin.x += delta.x; |
|
parentWin.y += delta.y; |
|
} |
|
} |
|
|
|
// logo |
|
Image { |
|
id: imgLogo |
|
height : Style.title.imgHeight |
|
fillMode : Image.PreserveAspectFit |
|
visible: root.hasIcon |
|
anchors { |
|
left : root.left |
|
leftMargin : Style.title.leftMargin |
|
verticalCenter : root.verticalCenter |
|
} |
|
//source : "qrc://logo.svg" |
|
source : "logo.svg" |
|
smooth : true |
|
} |
|
|
|
TextMetrics { |
|
id: titleMetrics |
|
elideWidth: 2*root.width/3 |
|
elide: Qt.ElideMiddle |
|
font: titleText.font |
|
text: root.title |
|
} |
|
|
|
// Title |
|
Text { |
|
id: titleText |
|
anchors { |
|
left : hasIcon ? imgLogo.right : parent.left |
|
leftMargin : hasIcon ? Style.title.leftMargin : Style.main.leftMargin |
|
verticalCenter : root.verticalCenter |
|
} |
|
text : titleMetrics.elidedText |
|
color : Style.title.text |
|
font.pointSize : Style.title.fontSize * Style.pt |
|
} |
|
|
|
// Underline Button |
|
Rectangle { |
|
id: buttonUndrLine |
|
anchors { |
|
verticalCenter : root.verticalCenter |
|
right : buttonCross.left |
|
rightMargin : 2*Style.title.fontSize |
|
} |
|
width : Style.title.fontSize |
|
height : Style.title.fontSize |
|
color : "transparent" |
|
Canvas { |
|
anchors.fill: parent |
|
onPaint: { |
|
var val = Style.title.fontSize |
|
var ctx = getContext("2d") |
|
ctx.strokeStyle = 'white' |
|
ctx.strokeWidth = 4 |
|
ctx.moveTo(0 , val-1) |
|
ctx.lineTo(val, val-1) |
|
ctx.stroke() |
|
} |
|
} |
|
MouseArea { |
|
anchors.fill: parent |
|
onClicked: root.hideClicked() |
|
} |
|
} |
|
|
|
// Cross Button |
|
Rectangle { |
|
id: buttonCross |
|
anchors { |
|
verticalCenter : root.verticalCenter |
|
right : root.right |
|
rightMargin : Style.main.rightMargin |
|
} |
|
width : Style.title.fontSize |
|
height : Style.title.fontSize |
|
color : "transparent" |
|
Canvas { |
|
anchors.fill: parent |
|
onPaint: { |
|
var val = Style.title.fontSize |
|
var ctx = getContext("2d") |
|
ctx.strokeStyle = 'white' |
|
ctx.strokeWidth = 4 |
|
ctx.moveTo(0,0) |
|
ctx.lineTo(val,val) |
|
ctx.moveTo(val,0) |
|
ctx.lineTo(0,val) |
|
ctx.stroke() |
|
} |
|
} |
|
MouseArea { |
|
anchors.fill: parent |
|
onClicked: root.hideClicked() |
|
} |
|
} |
|
}
|
|
|