1
0
This commit is contained in:
Sander van Grieken
2022-10-19 14:15:24 +02:00
parent 717b6dd5fb
commit c7cdd42665
7 changed files with 497 additions and 525 deletions

View File

@@ -24,7 +24,6 @@ Pane {
icon.color: 'transparent' icon.color: 'transparent'
action: Action { action: Action {
text: qsTr('Spend from') text: qsTr('Spend from')
//onTriggered:
icon.source: '../../icons/tab_send.png' icon.source: '../../icons/tab_send.png'
enabled: false enabled: false
} }
@@ -45,6 +44,14 @@ Pane {
enabled: false enabled: false
} }
} }
MenuItem {
icon.color: 'transparent'
action: Action {
text: addressdetails.isFrozen ? qsTr('Unfreeze') : qsTr('Freeze')
onTriggered: addressdetails.freeze(!addressdetails.isFrozen)
icon.source: '../../icons/seal.png'
}
}
} }
Flickable { Flickable {
@@ -245,15 +252,6 @@ Pane {
Label { Label {
text: addressdetails.isFrozen ? qsTr('Frozen') : qsTr('Not frozen') text: addressdetails.isFrozen ? qsTr('Frozen') : qsTr('Not frozen')
} }
ColumnLayout {
Layout.columnSpan: 2
Button {
text: addressdetails.isFrozen ? qsTr('Unfreeze') : qsTr('Freeze')
onClicked: addressdetails.freeze(!addressdetails.isFrozen)
}
}
} }
} }

View File

@@ -28,6 +28,9 @@ ElDialog {
width: parent.width width: parent.width
height: parent.height height: parent.height
padding: 0
standardButtons: Dialog.Cancel
modal: true modal: true
parent: Overlay.overlay parent: Overlay.overlay
@@ -42,220 +45,201 @@ ElDialog {
: '' : ''
} }
GridLayout { ColumnLayout {
id: layout
width: parent.width width: parent.width
height: parent.height height: parent.height
columns: 2 spacing: 0
Rectangle { GridLayout {
height: 1 width: parent.width
Layout.fillWidth: true columns: 2
Layout.columnSpan: 2 Layout.leftMargin: constants.paddingLarge
color: Material.accentColor Layout.rightMargin: constants.paddingLarge
}
Label {
id: amountLabel
text: qsTr('Amount to send')
}
RowLayout {
Layout.fillWidth: true
Label {
id: btcValue
font.bold: true
}
Label { Label {
text: Config.baseUnit id: amountLabel
text: qsTr('Amount to send')
color: Material.accentColor color: Material.accentColor
} }
Label { RowLayout {
id: fiatValue
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: constants.fontSizeMedium Label {
} id: btcValue
font.bold: true
}
Component.onCompleted: updateAmountText() Label {
Connections { text: Config.baseUnit
target: finalizer color: Material.accentColor
function onEffectiveAmountChanged() { }
updateAmountText()
Label {
id: fiatValue
Layout.fillWidth: true
font.pixelSize: constants.fontSizeMedium
}
Component.onCompleted: updateAmountText()
Connections {
target: finalizer
function onEffectiveAmountChanged() {
updateAmountText()
}
} }
} }
}
Label {
text: qsTr('Mining fee')
}
RowLayout {
Label {
id: fee
text: Config.formatSats(finalizer.fee)
}
Label { Label {
text: Config.baseUnit text: qsTr('Mining fee')
color: Material.accentColor color: Material.accentColor
} }
}
Label { RowLayout {
text: qsTr('Fee rate') Label {
} id: fee
text: Config.formatSats(finalizer.fee)
}
RowLayout { Label {
Label { text: Config.baseUnit
id: feeRate color: Material.accentColor
text: finalizer.feeRate
}
Label {
text: 'sat/vB'
color: Material.accentColor
}
}
Label {
text: qsTr('Target')
}
Label {
id: targetdesc
text: finalizer.target
}
Slider {
id: feeslider
snapMode: Slider.SnapOnRelease
stepSize: 1
from: 0
to: finalizer.sliderSteps
onValueChanged: {
if (activeFocus)
finalizer.sliderPos = value
}
Component.onCompleted: {
value = finalizer.sliderPos
}
Connections {
target: finalizer
function onSliderPosChanged() {
feeslider.value = finalizer.sliderPos
} }
} }
}
ComboBox { Label {
id: target text: qsTr('Fee rate')
textRole: 'text' color: Material.accentColor
valueRole: 'value'
model: [
{ text: qsTr('ETA'), value: 1 },
{ text: qsTr('Mempool'), value: 2 },
{ text: qsTr('Static'), value: 0 }
]
onCurrentValueChanged: {
if (activeFocus)
finalizer.method = currentValue
} }
Component.onCompleted: {
currentIndex = indexOfValue(finalizer.method) RowLayout {
Label {
id: feeRate
text: finalizer.feeRate
}
Label {
text: 'sat/vB'
color: Material.accentColor
}
} }
}
InfoTextArea { Label {
Layout.columnSpan: 2 text: qsTr('Target')
visible: finalizer.warning != '' color: Material.accentColor
text: finalizer.warning }
iconStyle: InfoTextArea.IconStyle.Warn
}
CheckBox { Label {
id: final_cb id: targetdesc
text: qsTr('Replace-by-Fee') text: finalizer.target
Layout.columnSpan: 2 }
checked: finalizer.rbf
visible: finalizer.canRbf
}
Rectangle { Slider {
height: 1 id: feeslider
Layout.fillWidth: true leftPadding: constants.paddingMedium
Layout.columnSpan: 2 snapMode: Slider.SnapOnRelease
color: Material.accentColor stepSize: 1
} from: 0
to: finalizer.sliderSteps
onValueChanged: {
if (activeFocus)
finalizer.sliderPos = value
}
Component.onCompleted: {
value = finalizer.sliderPos
}
Connections {
target: finalizer
function onSliderPosChanged() {
feeslider.value = finalizer.sliderPos
}
}
}
Label { ComboBox {
text: qsTr('Outputs') id: target
Layout.columnSpan: 2 textRole: 'text'
} valueRole: 'value'
model: [
{ text: qsTr('ETA'), value: 1 },
{ text: qsTr('Mempool'), value: 2 },
{ text: qsTr('Static'), value: 0 }
]
onCurrentValueChanged: {
if (activeFocus)
finalizer.method = currentValue
}
Component.onCompleted: {
currentIndex = indexOfValue(finalizer.method)
}
}
Repeater { InfoTextArea {
model: finalizer.outputs
delegate: TextHighlightPane {
Layout.columnSpan: 2 Layout.columnSpan: 2
Layout.fillWidth: true visible: finalizer.warning != ''
padding: 0 text: finalizer.warning
leftPadding: constants.paddingSmall iconStyle: InfoTextArea.IconStyle.Warn
RowLayout { }
width: parent.width
Label { CheckBox {
text: modelData.address id: final_cb
Layout.fillWidth: true text: qsTr('Replace-by-Fee')
wrapMode: Text.Wrap Layout.columnSpan: 2
font.pixelSize: constants.fontSizeLarge checked: finalizer.rbf
font.family: FixedFont visible: finalizer.canRbf
color: modelData.is_mine ? constants.colorMine : Material.foreground }
}
Label { Label {
text: Config.formatSats(modelData.value_sats) text: qsTr('Outputs')
font.pixelSize: constants.fontSizeMedium Layout.columnSpan: 2
font.family: FixedFont color: Material.accentColor
} }
Label {
text: Config.baseUnit Repeater {
font.pixelSize: constants.fontSizeMedium model: finalizer.outputs
color: Material.accentColor delegate: TextHighlightPane {
Layout.columnSpan: 2
Layout.fillWidth: true
padding: 0
leftPadding: constants.paddingSmall
RowLayout {
width: parent.width
Label {
text: modelData.address
Layout.fillWidth: true
wrapMode: Text.Wrap
font.pixelSize: constants.fontSizeLarge
font.family: FixedFont
color: modelData.is_mine ? constants.colorMine : Material.foreground
}
Label {
text: Config.formatSats(modelData.value_sats)
font.pixelSize: constants.fontSizeMedium
font.family: FixedFont
}
Label {
text: Config.baseUnit
font.pixelSize: constants.fontSizeMedium
color: Material.accentColor
}
} }
} }
} }
} }
Rectangle {
height: 1
Layout.fillWidth: true
Layout.columnSpan: 2
color: Material.accentColor
}
Item { Layout.fillHeight: true; Layout.preferredWidth: 1 } Item { Layout.fillHeight: true; Layout.preferredWidth: 1 }
RowLayout { FlatButton {
Layout.columnSpan: 2 id: sendButton
Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true
text: Daemon.currentWallet.isWatchOnly ? qsTr('Finalize') : qsTr('Pay')
Button { icon.source: '../../icons/confirmed.png'
text: qsTr('Cancel') enabled: finalizer.valid
onClicked: { onClicked: {
txcancelled() txaccepted()
dialog.close() dialog.close()
}
}
Button {
id: sendButton
text: Daemon.currentWallet.isWatchOnly ? qsTr('Finalize') : qsTr('Pay')
enabled: finalizer.valid
onClicked: {
txaccepted()
dialog.close()
}
} }
} }
} }
onClosed: txcancelled()
} }

View File

@@ -26,20 +26,6 @@ ElDialog {
color: "#aa000000" color: "#aa000000"
} }
// header: RowLayout {
// width: dialog.width
// Label {
// Layout.fillWidth: true
// text: dialog.title
// visible: dialog.title
// elide: Label.ElideRight
// padding: constants.paddingXLarge
// bottomPadding: 0
// font.bold: true
// font.pixelSize: constants.fontSizeMedium
// }
// }
Flickable { Flickable {
anchors.fill: parent anchors.fill: parent
contentHeight: rootLayout.height contentHeight: rootLayout.height
@@ -51,12 +37,6 @@ ElDialog {
width: parent.width width: parent.width
spacing: constants.paddingMedium spacing: constants.paddingMedium
Rectangle {
height: 1
Layout.fillWidth: true
color: Material.accentColor
}
QRImage { QRImage {
id: qr id: qr
render: dialog.enter ? false : true render: dialog.enter ? false : true
@@ -66,12 +46,6 @@ ElDialog {
Layout.bottomMargin: constants.paddingSmall Layout.bottomMargin: constants.paddingSmall
} }
Rectangle {
height: 1
Layout.fillWidth: true
color: Material.accentColor
}
TextHighlightPane { TextHighlightPane {
Layout.fillWidth: true Layout.fillWidth: true
Label { Label {
@@ -92,15 +66,23 @@ ElDialog {
Layout.fillWidth: true Layout.fillWidth: true
} }
Rectangle {
height: 1
Layout.preferredWidth: qr.width
Layout.alignment: Qt.AlignHCenter
color: Material.accentColor
}
RowLayout { RowLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
Button {
FlatButton {
text: qsTr('Copy') text: qsTr('Copy')
icon.source: '../../icons/copy_bw.png' icon.source: '../../icons/copy_bw.png'
onClicked: AppController.textToClipboard(dialog.text) onClicked: AppController.textToClipboard(dialog.text)
} }
Button { FlatButton {
text: qsTr('Share') text: qsTr('Share')
icon.source: '../../icons/share.png' icon.source: '../../icons/share.png'
onClicked: { onClicked: {

View File

@@ -18,291 +18,297 @@ ElDialog {
title: qsTr('Invoice') title: qsTr('Invoice')
standardButtons: invoice_key != '' ? Dialog.Close : Dialog.Cancel standardButtons: invoice_key != '' ? Dialog.Close : Dialog.Cancel
padding: 0
modal: true modal: true
parent: Overlay.overlay parent: Overlay.overlay
Overlay.modal: Rectangle { Overlay.modal: Rectangle {
color: "#aa000000" color: "#aa000000"
} }
GridLayout { ColumnLayout {
id: layout
width: parent.width width: parent.width
height: parent.height height: parent.height
columns: 2 spacing: 0
Label { GridLayout {
text: qsTr('Type') id: layout
color: Material.accentColor width: parent.width
} Layout.leftMargin: constants.paddingLarge
Layout.rightMargin: constants.paddingLarge
RowLayout { columns: 2
Layout.fillWidth: true
Image {
Layout.preferredWidth: constants.iconSizeSmall
Layout.preferredHeight: constants.iconSizeSmall
source: invoice.invoiceType == Invoice.LightningInvoice
? "../../icons/lightning.png"
: "../../icons/bitcoin.png"
}
Label { Label {
text: invoice.invoiceType == Invoice.OnchainInvoice text: qsTr('Type')
? qsTr('On chain') color: Material.accentColor
: invoice.invoiceType == Invoice.LightningInvoice
? qsTr('Lightning')
: ''
Layout.fillWidth: true
} }
}
Label {
text: qsTr('Status')
color: Material.accentColor
}
Label {
text: invoice.status_str
}
Label {
visible: invoice.invoiceType == Invoice.OnchainInvoice
Layout.columnSpan: 2
text: qsTr('Address')
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.invoiceType == Invoice.OnchainInvoice
Layout.columnSpan: 2
Layout.fillWidth: true
padding: 0
leftPadding: constants.paddingMedium
Label {
width: parent.width
text: invoice.address
font.family: FixedFont
wrapMode: Text.Wrap
}
}
Label {
visible: invoice.invoiceType == Invoice.LightningInvoice
text: qsTr('Remote Pubkey')
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.invoiceType == Invoice.LightningInvoice
Layout.columnSpan: 2
Layout.fillWidth: true
padding: 0
leftPadding: constants.paddingMedium
Label {
width: parent.width
text: invoice.lnprops ? invoice.lnprops.pubkey : ''
font.family: FixedFont
wrapMode: Text.Wrap
}
}
Label {
text: qsTr('Description')
visible: invoice.message
Layout.columnSpan: 2
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.message
Layout.columnSpan: 2
Layout.preferredWidth: parent.width
Layout.alignment: Qt.AlignHCenter
padding: 0
leftPadding: constants.paddingMedium
Label {
text: invoice.message
width: parent.width
font.pixelSize: constants.fontSizeXLarge
wrapMode: Text.Wrap
elide: Text.ElideRight
}
}
Label {
text: qsTr('Amount to send')
color: Material.accentColor
Layout.columnSpan: 2
}
TextHighlightPane {
id: amountContainer
Layout.columnSpan: 2
Layout.preferredWidth: parent.width //* 0.75
Layout.alignment: Qt.AlignHCenter
padding: 0
leftPadding: constants.paddingXXLarge
property bool editmode: false
RowLayout { RowLayout {
id: amountLayout Layout.fillWidth: true
width: parent.width Image {
Layout.preferredWidth: constants.iconSizeSmall
GridLayout { Layout.preferredHeight: constants.iconSizeSmall
visible: !amountContainer.editmode source: invoice.invoiceType == Invoice.LightningInvoice
columns: 2 ? "../../icons/lightning.png"
: "../../icons/bitcoin.png"
Label {
font.pixelSize: constants.fontSizeXLarge
font.family: FixedFont
font.bold: true
text: Config.formatSats(invoice.amount, false)
}
Label {
Layout.fillWidth: true
text: Config.baseUnit
color: Material.accentColor
font.pixelSize: constants.fontSizeXLarge
}
Label {
id: fiatValue
visible: Daemon.fx.enabled
text: Daemon.fx.fiatValue(invoice.amount, false)
font.pixelSize: constants.fontSizeMedium
color: constants.mutedForeground
}
Label {
visible: Daemon.fx.enabled
Layout.fillWidth: true
text: Daemon.fx.fiatCurrency
font.pixelSize: constants.fontSizeMedium
color: constants.mutedForeground
}
} }
ToolButton { Label {
visible: !amountContainer.editmode text: invoice.invoiceType == Invoice.OnchainInvoice
icon.source: '../../icons/pen.png' ? qsTr('On chain')
icon.color: 'transparent' : invoice.invoiceType == Invoice.LightningInvoice
onClicked: { ? qsTr('Lightning')
amountBtc.text = invoice.amount.satsInt == 0 ? '' : Config.formatSats(invoice.amount) : ''
amountContainer.editmode = true
amountBtc.focus = true
}
}
GridLayout {
visible: amountContainer.editmode
Layout.fillWidth: true Layout.fillWidth: true
columns: 2 }
BtcField { }
id: amountBtc
fiatfield: amountFiat Label {
text: qsTr('Status')
color: Material.accentColor
}
Label {
text: invoice.status_str
}
Label {
visible: invoice.invoiceType == Invoice.OnchainInvoice
Layout.columnSpan: 2
text: qsTr('Address')
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.invoiceType == Invoice.OnchainInvoice
Layout.columnSpan: 2
Layout.fillWidth: true
padding: 0
leftPadding: constants.paddingMedium
Label {
width: parent.width
text: invoice.address
font.family: FixedFont
wrapMode: Text.Wrap
}
}
Label {
visible: invoice.invoiceType == Invoice.LightningInvoice
text: qsTr('Remote Pubkey')
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.invoiceType == Invoice.LightningInvoice
Layout.columnSpan: 2
Layout.fillWidth: true
padding: 0
leftPadding: constants.paddingMedium
Label {
width: parent.width
text: invoice.lnprops ? invoice.lnprops.pubkey : ''
font.family: FixedFont
wrapMode: Text.Wrap
}
}
Label {
text: qsTr('Description')
visible: invoice.message
Layout.columnSpan: 2
color: Material.accentColor
}
TextHighlightPane {
visible: invoice.message
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
padding: 0
leftPadding: constants.paddingMedium
Label {
text: invoice.message
width: parent.width
font.pixelSize: constants.fontSizeXLarge
wrapMode: Text.Wrap
elide: Text.ElideRight
}
}
Label {
text: qsTr('Amount to send')
color: Material.accentColor
Layout.columnSpan: 2
}
TextHighlightPane {
id: amountContainer
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter
padding: 0
leftPadding: constants.paddingXXLarge
property bool editmode: false
RowLayout {
id: amountLayout
width: parent.width
GridLayout {
visible: !amountContainer.editmode
columns: 2
Label {
font.pixelSize: constants.fontSizeXLarge
font.family: FixedFont
font.bold: true
text: Config.formatSats(invoice.amount, false)
}
Label {
Layout.fillWidth: true
text: Config.baseUnit
color: Material.accentColor
font.pixelSize: constants.fontSizeXLarge
}
Label {
id: fiatValue
visible: Daemon.fx.enabled
text: Daemon.fx.fiatValue(invoice.amount, false)
font.pixelSize: constants.fontSizeMedium
color: constants.mutedForeground
}
Label {
visible: Daemon.fx.enabled
Layout.fillWidth: true
text: Daemon.fx.fiatCurrency
font.pixelSize: constants.fontSizeMedium
color: constants.mutedForeground
}
} }
Label { ToolButton {
text: Config.baseUnit visible: !amountContainer.editmode
color: Material.accentColor icon.source: '../../icons/pen.png'
icon.color: 'transparent'
onClicked: {
amountBtc.text = invoice.amount.satsInt == 0 ? '' : Config.formatSats(invoice.amount)
amountContainer.editmode = true
amountBtc.focus = true
}
}
GridLayout {
visible: amountContainer.editmode
Layout.fillWidth: true Layout.fillWidth: true
} columns: 2
BtcField {
id: amountBtc
fiatfield: amountFiat
}
FiatField { Label {
id: amountFiat text: Config.baseUnit
btcfield: amountBtc color: Material.accentColor
visible: Daemon.fx.enabled Layout.fillWidth: true
} }
Label { FiatField {
visible: Daemon.fx.enabled id: amountFiat
text: Daemon.fx.fiatCurrency btcfield: amountBtc
color: Material.accentColor visible: Daemon.fx.enabled
}
Label {
visible: Daemon.fx.enabled
text: Daemon.fx.fiatCurrency
color: Material.accentColor
}
}
ToolButton {
visible: amountContainer.editmode
Layout.fillWidth: false
icon.source: '../../icons/confirmed.png'
icon.color: 'transparent'
onClicked: {
amountContainer.editmode = false
invoice.amount = Config.unitsToSats(amountBtc.text)
}
}
ToolButton {
visible: amountContainer.editmode
Layout.fillWidth: false
icon.source: '../../icons/closebutton.png'
icon.color: 'transparent'
onClicked: amountContainer.editmode = false
} }
} }
ToolButton {
visible: amountContainer.editmode
Layout.fillWidth: false
icon.source: '../../icons/confirmed.png'
icon.color: 'transparent'
onClicked: {
amountContainer.editmode = false
invoice.amount = Config.unitsToSats(amountBtc.text)
}
}
ToolButton {
visible: amountContainer.editmode
Layout.fillWidth: false
icon.source: '../../icons/closebutton.png'
icon.color: 'transparent'
onClicked: amountContainer.editmode = false
}
} }
} Item { Layout.preferredHeight: constants.paddingLarge; Layout.preferredWidth: 1 }
Item { Layout.preferredHeight: constants.paddingLarge; Layout.preferredWidth: 1 } InfoTextArea {
Layout.columnSpan: 2
InfoTextArea { Layout.alignment: Qt.AlignHCenter
Layout.columnSpan: 2 visible: invoice.userinfo
Layout.alignment: Qt.AlignHCenter text: invoice.userinfo
visible: invoice.userinfo
text: invoice.userinfo
}
RowLayout {
Layout.columnSpan: 2
Layout.alignment: Qt.AlignHCenter
spacing: constants.paddingMedium
FlatButton {
text: qsTr('Delete')
icon.source: '../../icons/delete.png'
visible: invoice_key != ''
onClicked: {
invoice.wallet.delete_invoice(invoice_key)
dialog.close()
}
}
FlatButton {
text: qsTr('Save')
icon.source: '../../icons/save.png'
visible: invoice_key == ''
enabled: invoice.canSave
onClicked: {
app.stack.push(Qt.resolvedUrl('Invoices.qml'))
invoice.save_invoice()
dialog.close()
}
}
FlatButton {
text: qsTr('Pay')
icon.source: '../../icons/confirmed.png'
enabled: invoice.invoiceType != Invoice.Invalid && invoice.canPay
onClicked: {
if (invoice_key == '') // save invoice if not retrieved from key
invoice.save_invoice()
dialog.close()
doPay() // only signal here
}
} }
} }
Item { Layout.fillHeight: true; Layout.preferredWidth: 1 } Item { Layout.fillHeight: true; Layout.preferredWidth: 1 }
FlatButton {
Layout.fillWidth: true
text: qsTr('Pay')
icon.source: '../../icons/confirmed.png'
enabled: invoice.invoiceType != Invoice.Invalid && invoice.canPay
onClicked: {
if (invoice_key == '') // save invoice if not retrieved from key
invoice.save_invoice()
dialog.close()
doPay() // only signal here
}
}
FlatButton {
Layout.fillWidth: true
text: qsTr('Delete')
icon.source: '../../icons/delete.png'
visible: invoice_key != ''
onClicked: {
invoice.wallet.delete_invoice(invoice_key)
dialog.close()
}
}
FlatButton {
Layout.fillWidth: true
text: qsTr('Save')
icon.source: '../../icons/save.png'
visible: invoice_key == ''
enabled: invoice.canSave
onClicked: {
app.stack.push(Qt.resolvedUrl('Invoices.qml'))
invoice.save_invoice()
dialog.close()
}
}
} }
Component.onCompleted: { Component.onCompleted: {

View File

@@ -19,19 +19,23 @@ ElDialog {
parent: Overlay.overlay parent: Overlay.overlay
modal: true modal: true
x: (parent.width - width) / 2 standardButtons: Dialog.Cancel
y: (parent.height - height) / 2 anchors.centerIn: parent
padding: 0
Overlay.modal: Rectangle { Overlay.modal: Rectangle {
color: "#aa000000" color: "#aa000000"
} }
ColumnLayout { ColumnLayout {
width: parent.width width: parent.width
spacing: 0
InfoTextArea { InfoTextArea {
visible: infotext visible: infotext
text: infotext text: infotext
Layout.preferredWidth: password_layout.width Layout.margins: constants.paddingMedium
Layout.fillWidth: true
} }
GridLayout { GridLayout {
@@ -59,25 +63,15 @@ ElDialog {
} }
} }
RowLayout { FlatButton {
Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true
Layout.topMargin: constants.paddingXXLarge text: qsTr("Ok")
icon.source: '../../icons/confirmed.png'
Button { enabled: confirmPassword ? pw_1.text == pw_2.text : true
text: qsTr("Ok") onClicked: {
enabled: confirmPassword ? pw_1.text == pw_2.text : true password = pw_1.text
onClicked: { passworddialog.accept()
password = pw_1.text
passworddialog.accept()
}
}
Button {
text: qsTr("Cancel")
onClicked: {
passworddialog.reject()
}
} }
} }
} }
} }

View File

@@ -20,7 +20,9 @@ ElDialog {
color: "#aa000000" color: "#aa000000"
} }
header: Item {}
padding: 0 padding: 0
topPadding: 0
function restart() { function restart() {
qrscan.restart() qrscan.restart()
@@ -28,6 +30,7 @@ ElDialog {
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors.fill: parent
spacing: 0
QRScan { QRScan {
id: qrscan id: qrscan

View File

@@ -3,9 +3,7 @@ import QtQuick.Layouts 1.0
import QtQuick.Controls 2.1 import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.0 import QtQuick.Controls.Material 2.0
GridLayout { Item {
property alias text: infotext.text
enum IconStyle { enum IconStyle {
None, None,
Info, Info,
@@ -13,47 +11,54 @@ GridLayout {
Error Error
} }
property alias text: infotext.text
property int iconStyle: InfoTextArea.IconStyle.Info property int iconStyle: InfoTextArea.IconStyle.Info
property alias textFormat: infotext.textFormat property alias textFormat: infotext.textFormat
columns: 1 implicitHeight: layout.height
rowSpacing: 0
Rectangle { ColumnLayout {
height: 2 id: layout
Layout.fillWidth: true
color: Qt.rgba(1,1,1,0.25)
}
TextArea { spacing: 0
id: infotext width: parent.width
Layout.fillWidth: true
Layout.minimumHeight: constants.iconSizeLarge + 2*constants.paddingLarge Rectangle {
readOnly: true height: 2
rightPadding: constants.paddingLarge Layout.fillWidth: true
leftPadding: 2*constants.iconSizeLarge color: Qt.rgba(1,1,1,0.25)
wrapMode: TextInput.Wrap
textFormat: TextEdit.RichText
background: Rectangle {
color: Qt.rgba(1,1,1,0.05) // whiten 5%
} }
Image { TextArea {
source: iconStyle == InfoTextArea.IconStyle.Info ? "../../../icons/info.png" : iconStyle == InfoTextArea.IconStyle.Warn ? "../../../icons/warning.png" : iconStyle == InfoTextArea.IconStyle.Error ? "../../../icons/expired.png" : "" id: infotext
anchors.left: parent.left Layout.fillWidth: true
anchors.top: parent.top Layout.minimumHeight: constants.iconSizeLarge + 2*constants.paddingLarge
anchors.leftMargin: constants.paddingLarge readOnly: true
anchors.topMargin: constants.paddingLarge rightPadding: constants.paddingLarge
height: constants.iconSizeLarge leftPadding: 2*constants.iconSizeLarge
width: constants.iconSizeLarge wrapMode: TextInput.Wrap
fillMode: Image.PreserveAspectCrop textFormat: TextEdit.RichText
background: Rectangle {
color: Qt.rgba(1,1,1,0.05) // whiten 5%
}
Image {
source: iconStyle == InfoTextArea.IconStyle.Info ? "../../../icons/info.png" : iconStyle == InfoTextArea.IconStyle.Warn ? "../../../icons/warning.png" : iconStyle == InfoTextArea.IconStyle.Error ? "../../../icons/expired.png" : ""
anchors.left: parent.left
anchors.top: parent.top
anchors.leftMargin: constants.paddingLarge
anchors.topMargin: constants.paddingLarge
height: constants.iconSizeLarge
width: constants.iconSizeLarge
fillMode: Image.PreserveAspectCrop
}
} }
} Rectangle {
height: 2
Rectangle { Layout.fillWidth: true
height: 2 color: Qt.rgba(0,0,0,0.25)
Layout.fillWidth: true }
color: Qt.rgba(0,0,0,0.25)
} }
} }