qml: styling addresses/address details
This commit is contained in:
@@ -11,247 +11,229 @@ Pane {
|
||||
id: root
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
padding: 0
|
||||
|
||||
property string address
|
||||
|
||||
property string title: qsTr("Address details")
|
||||
|
||||
signal addressDetailsChanged
|
||||
|
||||
property QtObject menu: Menu {
|
||||
id: menu
|
||||
MenuItem {
|
||||
icon.color: 'transparent'
|
||||
action: Action {
|
||||
text: qsTr('Spend from')
|
||||
icon.source: '../../icons/tab_send.png'
|
||||
enabled: false
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
icon.color: 'transparent'
|
||||
action: Action {
|
||||
text: qsTr('Sign/Verify')
|
||||
icon.source: '../../icons/key.png'
|
||||
enabled: false
|
||||
}
|
||||
}
|
||||
MenuItem {
|
||||
icon.color: 'transparent'
|
||||
action: Action {
|
||||
text: qsTr('Encrypt/Decrypt')
|
||||
icon.source: '../../icons/mail_icon.png'
|
||||
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 {
|
||||
ColumnLayout {
|
||||
anchors.fill: parent
|
||||
contentHeight: rootLayout.height
|
||||
clip:true
|
||||
interactive: height < contentHeight
|
||||
spacing: 0
|
||||
|
||||
GridLayout {
|
||||
id: rootLayout
|
||||
width: parent.width
|
||||
columns: 2
|
||||
Flickable {
|
||||
Layout.preferredWidth: parent.width
|
||||
Layout.fillHeight: true
|
||||
|
||||
Label {
|
||||
text: qsTr('Address')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
leftMargin: constants.paddingLarge
|
||||
rightMargin: constants.paddingLarge
|
||||
topMargin: constants.paddingLarge
|
||||
|
||||
TextHighlightPane {
|
||||
Layout.columnSpan: 2
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
leftPadding: constants.paddingSmall
|
||||
contentHeight: rootLayout.height
|
||||
clip:true
|
||||
interactive: height < contentHeight
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
text: root.address
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
font.family: FixedFont
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
ToolButton {
|
||||
icon.source: '../../icons/share.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
var dialog = app.genericShareDialog.createObject(root,
|
||||
{ title: qsTr('Address'), text: root.address }
|
||||
)
|
||||
dialog.open()
|
||||
}
|
||||
}
|
||||
GridLayout {
|
||||
id: rootLayout
|
||||
width: parent.width
|
||||
|
||||
columns: 2
|
||||
|
||||
Label {
|
||||
text: qsTr('Address')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Label')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
TextHighlightPane {
|
||||
id: labelContent
|
||||
|
||||
property bool editmode: false
|
||||
|
||||
Layout.columnSpan: 2
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
leftPadding: constants.paddingSmall
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
visible: !labelContent.editmode
|
||||
text: addressdetails.label
|
||||
wrapMode: Text.Wrap
|
||||
Layout.fillWidth: true
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
}
|
||||
ToolButton {
|
||||
visible: !labelContent.editmode
|
||||
icon.source: '../../icons/pen.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
labelEdit.text = addressdetails.label
|
||||
labelContent.editmode = true
|
||||
labelEdit.focus = true
|
||||
}
|
||||
}
|
||||
TextField {
|
||||
id: labelEdit
|
||||
visible: labelContent.editmode
|
||||
text: addressdetails.label
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
ToolButton {
|
||||
visible: labelContent.editmode
|
||||
icon.source: '../../icons/confirmed.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
labelContent.editmode = false
|
||||
addressdetails.set_label(labelEdit.text)
|
||||
}
|
||||
}
|
||||
ToolButton {
|
||||
visible: labelContent.editmode
|
||||
icon.source: '../../icons/closebutton.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: labelContent.editmode = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Public keys')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: addressdetails.pubkeys
|
||||
delegate: TextHighlightPane {
|
||||
TextHighlightPane {
|
||||
Layout.columnSpan: 2
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
leftPadding: constants.paddingSmall
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
text: modelData
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
text: root.address
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
font.family: FixedFont
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
ToolButton {
|
||||
icon.source: '../../icons/share.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
var dialog = app.genericShareDialog.createObject(root,
|
||||
{ title: qsTr('Public key'), text: modelData }
|
||||
{ title: qsTr('Address'), text: root.address }
|
||||
)
|
||||
dialog.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Script type')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.scriptType
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Balance')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Label {
|
||||
font.family: FixedFont
|
||||
text: Config.formatSats(addressdetails.balance)
|
||||
}
|
||||
Label {
|
||||
text: qsTr('Label')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
text: Config.baseUnit
|
||||
}
|
||||
|
||||
TextHighlightPane {
|
||||
id: labelContent
|
||||
|
||||
property bool editmode: false
|
||||
|
||||
Layout.columnSpan: 2
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
leftPadding: constants.paddingSmall
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
visible: !labelContent.editmode
|
||||
text: addressdetails.label
|
||||
wrapMode: Text.Wrap
|
||||
Layout.fillWidth: true
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
}
|
||||
ToolButton {
|
||||
visible: !labelContent.editmode
|
||||
icon.source: '../../icons/pen.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
labelEdit.text = addressdetails.label
|
||||
labelContent.editmode = true
|
||||
labelEdit.focus = true
|
||||
}
|
||||
}
|
||||
TextField {
|
||||
id: labelEdit
|
||||
visible: labelContent.editmode
|
||||
text: addressdetails.label
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
ToolButton {
|
||||
visible: labelContent.editmode
|
||||
icon.source: '../../icons/confirmed.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
labelContent.editmode = false
|
||||
addressdetails.set_label(labelEdit.text)
|
||||
}
|
||||
}
|
||||
ToolButton {
|
||||
visible: labelContent.editmode
|
||||
icon.source: '../../icons/closebutton.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: labelContent.editmode = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: Daemon.fx.enabled
|
||||
? '(' + Daemon.fx.fiatValue(addressdetails.balance) + ' ' + Daemon.fx.fiatCurrency + ')'
|
||||
: ''
|
||||
text: qsTr('Public keys')
|
||||
Layout.columnSpan: 2
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Repeater {
|
||||
model: addressdetails.pubkeys
|
||||
delegate: TextHighlightPane {
|
||||
Layout.columnSpan: 2
|
||||
Layout.fillWidth: true
|
||||
padding: 0
|
||||
leftPadding: constants.paddingSmall
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
text: modelData
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
font.family: FixedFont
|
||||
}
|
||||
ToolButton {
|
||||
icon.source: '../../icons/share.png'
|
||||
icon.color: 'transparent'
|
||||
onClicked: {
|
||||
var dialog = app.genericShareDialog.createObject(root,
|
||||
{ title: qsTr('Public key'), text: modelData }
|
||||
)
|
||||
dialog.open()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Script type')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.scriptType
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Balance')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Label {
|
||||
font.family: FixedFont
|
||||
text: Config.formatSats(addressdetails.balance)
|
||||
}
|
||||
Label {
|
||||
color: Material.accentColor
|
||||
text: Config.baseUnit
|
||||
}
|
||||
Label {
|
||||
text: Daemon.fx.enabled
|
||||
? '(' + Daemon.fx.fiatValue(addressdetails.balance) + ' ' + Daemon.fx.fiatCurrency + ')'
|
||||
: ''
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Transactions')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.numTx
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Derivation path')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.derivationPath
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Frozen')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.isFrozen ? qsTr('Frozen') : qsTr('Not frozen')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Transactions')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.numTx
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Derivation path')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.derivationPath
|
||||
}
|
||||
|
||||
Label {
|
||||
text: qsTr('Frozen')
|
||||
color: Material.accentColor
|
||||
}
|
||||
|
||||
Label {
|
||||
text: addressdetails.isFrozen ? qsTr('Frozen') : qsTr('Not frozen')
|
||||
}
|
||||
FlatButton {
|
||||
Layout.fillWidth: true
|
||||
text: addressdetails.isFrozen ? qsTr('Unfreeze address') : qsTr('Freeze address')
|
||||
onClicked: addressdetails.freeze(!addressdetails.isFrozen)
|
||||
icon.source: '../../icons/seal.png'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ Pane {
|
||||
id: rootItem
|
||||
padding: 0
|
||||
width: parent.width
|
||||
property string title: Daemon.currentWallet.name + ' - ' + qsTr('Addresses')
|
||||
|
||||
ColumnLayout {
|
||||
id: layout
|
||||
@@ -50,17 +49,15 @@ Pane {
|
||||
|
||||
ColumnLayout {
|
||||
id: delegateLayout
|
||||
width: parent.width
|
||||
spacing: 0
|
||||
x: constants.paddingMedium
|
||||
width: parent.width - 2*constants.paddingMedium
|
||||
|
||||
Item {
|
||||
Layout.preferredWidth: 1
|
||||
Layout.preferredHeight: constants.paddingTiny
|
||||
}
|
||||
|
||||
GridLayout {
|
||||
columns: 2
|
||||
Layout.topMargin: constants.paddingSmall
|
||||
Layout.leftMargin: constants.paddingLarge
|
||||
Layout.rightMargin: constants.paddingLarge
|
||||
|
||||
Label {
|
||||
id: indexLabel
|
||||
font.bold: true
|
||||
@@ -137,30 +134,25 @@ Pane {
|
||||
|
||||
Component {
|
||||
id: sectionDelegate
|
||||
Rectangle {
|
||||
Item {
|
||||
id: root
|
||||
width: ListView.view.width
|
||||
height: childrenRect.height
|
||||
color: 'transparent'
|
||||
|
||||
required property string section
|
||||
|
||||
RowLayout {
|
||||
x: constants.paddingMedium
|
||||
width: parent.width - 2 * constants.paddingMedium
|
||||
|
||||
Rectangle {
|
||||
Layout.preferredHeight: 1
|
||||
Layout.fillWidth: true
|
||||
ColumnLayout {
|
||||
width: parent.width
|
||||
Label {
|
||||
Layout.topMargin: constants.paddingLarge
|
||||
Layout.leftMargin: constants.paddingLarge
|
||||
text: root.section + ' ' + qsTr('addresses')
|
||||
font.pixelSize: constants.fontSizeLarge
|
||||
color: Material.accentColor
|
||||
}
|
||||
Label {
|
||||
padding: constants.paddingMedium
|
||||
text: root.section + ' ' + qsTr('addresses')
|
||||
font.bold: true
|
||||
font.pixelSize: constants.fontSizeMedium
|
||||
}
|
||||
Rectangle {
|
||||
Layout.leftMargin: constants.paddingLarge
|
||||
Layout.rightMargin: constants.paddingLarge
|
||||
Layout.preferredHeight: 1
|
||||
Layout.fillWidth: true
|
||||
color: Material.accentColor
|
||||
|
||||
Reference in New Issue
Block a user