1
0
Files
electrum/electrum/gui/qml/components/controls/QRImage.qml

89 lines
2.4 KiB
QML

import QtQuick
import QtQuick.Controls
Item {
id: root
property string qrdata
property bool render: true // init to false, then set true if render needs delay
property bool enableToggleText: false // if true, clicking the QR code shows the encoded text
property bool isTextState: false // internal state, if the above is enabled
property var _qrprops: QRIP.getDimensions(qrdata)
width: r.width
height: r.height
Rectangle {
id: r
width: _qrprops.modules * _qrprops.box_size
height: width
color: 'white'
}
Image {
source: qrdata && render ? 'image://qrgen/' + qrdata : ''
visible: !isTextState
Rectangle { // container for logo inside qr code
visible: root.render && _qrprops.valid
color: 'white'
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: _qrprops.icon_modules * _qrprops.box_size
height: _qrprops.icon_modules * _qrprops.box_size
Image {
visible: _qrprops.valid
source: '../../../icons/electrum.png'
x: 1
y: 1
width: parent.width - 2
height: parent.height - 2
scale: 0.9
}
}
Label {
visible: !_qrprops.valid
text: qsTr('Data too big for QR')
anchors.centerIn: parent
}
}
Label {
visible: isTextState
text: qrdata
wrapMode: Text.WrapAnywhere
elide: Text.ElideRight
anchors.centerIn: parent
horizontalAlignment: Qt.AlignHCenter
verticalAlignment: Qt.AlignVCenter
color: 'black'
font.family: FixedFont
font.pixelSize: text.length < 64
? constants.fontSizeXLarge
: constants.fontSizeMedium
width: r.width
height: r.height
}
MouseArea {
anchors.fill: parent
onClicked: {
if (enableToggleText) {
root.isTextState = !root.isTextState
}
}
}
onVisibleChanged: {
if (root.visible) {
// set max brightness to make qr code easier to scan
if (AppController.isMaxBrightnessOnQrDisplayEnabled()) {
AppController.setMaxScreenBrightness()
}
} else {
AppController.resetScreenBrightness()
}
}
}