Browse Source

qml: use custom combobox so we have more control over cropping and styling

enable lightning routing choice combobox
patch-4
Sander van Grieken 3 years ago
parent
commit
c90504986c
  1. 278
      electrum/gui/qml/components/Preferences.qml
  2. 9
      electrum/gui/qml/components/Receive.qml
  3. 14
      electrum/gui/qml/components/controls/ElComboBox.qml

278
electrum/gui/qml/components/Preferences.qml

@ -5,178 +5,184 @@ import QtQuick.Controls.Material 2.0
import org.electrum 1.0 import org.electrum 1.0
import "controls"
Pane { Pane {
id: preferences id: preferences
property string title: qsTr("Preferences") property string title: qsTr("Preferences")
ColumnLayout { property var _baseunits: ['BTC','mBTC','bits','sat']
Flickable {
anchors.fill: parent anchors.fill: parent
contentHeight: rootLayout.height
interactive: height < contentHeight
Flickable { GridLayout {
Layout.fillHeight: true id: rootLayout
Layout.fillWidth: true columns: 2
width: parent.width
GridLayout { Label {
id: rootLayout text: qsTr('Language')
columns: 2 }
Label { ElComboBox {
text: qsTr('Language') id: language
} enabled: false
}
ComboBox { Label {
id: language text: qsTr('Base unit')
enabled: false }
}
Label { ElComboBox {
text: qsTr('Base unit') id: baseUnit
model: _baseunits
onCurrentValueChanged: {
if (activeFocus)
Config.baseUnit = currentValue
} }
}
ComboBox { Switch {
id: baseUnit id: thousands
model: ['BTC','mBTC','bits','sat'] Layout.columnSpan: 2
onCurrentValueChanged: { text: qsTr('Add thousands separators to bitcoin amounts')
if (activeFocus) onCheckedChanged: {
Config.baseUnit = currentValue if (activeFocus)
} Config.thousandsSeparator = checked
} }
}
Switch { Switch {
id: thousands id: checkSoftware
Layout.columnSpan: 2 Layout.columnSpan: 2
text: qsTr('Add thousands separators to bitcoin amounts') text: qsTr('Automatically check for software updates')
onCheckedChanged: { enabled: false
if (activeFocus) }
Config.thousandsSeparator = checked
}
}
Switch { Switch {
id: checkSoftware id: fiatEnable
Layout.columnSpan: 2 text: qsTr('Fiat Currency')
text: qsTr('Automatically check for software updates') onCheckedChanged: {
enabled: false if (activeFocus)
Daemon.fx.enabled = checked
} }
}
Switch { ElComboBox {
id: fiatEnable id: currencies
text: qsTr('Fiat Currency') model: Daemon.fx.currencies
onCheckedChanged: { enabled: Daemon.fx.enabled
if (activeFocus) onCurrentValueChanged: {
Daemon.fx.enabled = checked if (activeFocus)
} Daemon.fx.fiatCurrency = currentValue
} }
}
ComboBox { Switch {
id: currencies id: historicRates
model: Daemon.fx.currencies text: qsTr('Historic rates')
enabled: Daemon.fx.enabled enabled: Daemon.fx.enabled
onCurrentValueChanged: { Layout.columnSpan: 2
if (activeFocus) onCheckedChanged: {
Daemon.fx.fiatCurrency = currentValue if (activeFocus)
} Daemon.fx.historicRates = checked
} }
}
Switch { Label {
id: historicRates text: qsTr('Source')
text: qsTr('Historic rates') enabled: Daemon.fx.enabled
enabled: Daemon.fx.enabled }
Layout.columnSpan: 2
onCheckedChanged: {
if (activeFocus)
Daemon.fx.historicRates = checked
}
}
Label { ElComboBox {
text: qsTr('Source') id: rateSources
enabled: Daemon.fx.enabled enabled: Daemon.fx.enabled
model: Daemon.fx.rateSources
onModelChanged: {
currentIndex = rateSources.indexOfValue(Daemon.fx.rateSource)
} }
onCurrentValueChanged: {
ComboBox { if (activeFocus)
id: rateSources Daemon.fx.rateSource = currentValue
enabled: Daemon.fx.enabled
model: Daemon.fx.rateSources
onModelChanged: {
currentIndex = rateSources.indexOfValue(Daemon.fx.rateSource)
}
onCurrentValueChanged: {
if (activeFocus)
Daemon.fx.rateSource = currentValue
}
} }
}
Switch { Switch {
id: spendUnconfirmed id: spendUnconfirmed
text: qsTr('Spend unconfirmed') text: qsTr('Spend unconfirmed')
Layout.columnSpan: 2 Layout.columnSpan: 2
onCheckedChanged: { onCheckedChanged: {
if (activeFocus) if (activeFocus)
Config.spendUnconfirmed = checked Config.spendUnconfirmed = checked
}
} }
}
Label { Label {
text: qsTr('PIN') text: qsTr('PIN')
} }
RowLayout { RowLayout {
Label { Label {
text: Config.pinCode == '' ? qsTr('Off'): qsTr('On') text: Config.pinCode == '' ? qsTr('Off'): qsTr('On')
color: Material.accentColor color: Material.accentColor
Layout.rightMargin: constants.paddingMedium Layout.rightMargin: constants.paddingMedium
} }
Button { Button {
text: qsTr('Enable') text: qsTr('Enable')
visible: Config.pinCode == '' visible: Config.pinCode == ''
onClicked: { onClicked: {
var dialog = pinSetup.createObject(preferences, {mode: 'enter'}) var dialog = pinSetup.createObject(preferences, {mode: 'enter'})
dialog.accepted.connect(function() { dialog.accepted.connect(function() {
Config.pinCode = dialog.pincode Config.pinCode = dialog.pincode
dialog.close() dialog.close()
}) })
dialog.open() dialog.open()
}
} }
Button { }
text: qsTr('Change') Button {
visible: Config.pinCode != '' text: qsTr('Change')
onClicked: { visible: Config.pinCode != ''
var dialog = pinSetup.createObject(preferences, {mode: 'change', pincode: Config.pinCode}) onClicked: {
dialog.accepted.connect(function() { var dialog = pinSetup.createObject(preferences, {mode: 'change', pincode: Config.pinCode})
Config.pinCode = dialog.pincode dialog.accepted.connect(function() {
dialog.close() Config.pinCode = dialog.pincode
}) dialog.close()
dialog.open() })
} dialog.open()
} }
Button { }
text: qsTr('Remove') Button {
visible: Config.pinCode != '' text: qsTr('Remove')
onClicked: { visible: Config.pinCode != ''
Config.pinCode = '' onClicked: {
} Config.pinCode = ''
} }
} }
}
Label { Label {
text: qsTr('Lightning Routing') text: qsTr('Lightning Routing')
} }
ComboBox { ElComboBox {
id: lnRoutingType id: lnRoutingType
valueRole: 'key' enabled: Daemon.currentWallet && Daemon.currentWallet.isLightning
textRole: 'label'
enabled: Daemon.currentWallet != null && Daemon.currentWallet.isLightning && false valueRole: 'key'
model: ListModel { textRole: 'label'
ListElement { key: 'gossip'; label: qsTr('Gossip') } model: ListModel {
ListElement { key: 'trampoline'; label: qsTr('Trampoline') } ListElement { key: 'gossip'; label: qsTr('Gossip') }
} ListElement { key: 'trampoline'; label: qsTr('Trampoline') }
}
onCurrentValueChanged: {
if (activeFocus)
Config.useGossip = currentValue == 'gossip'
} }
} }
} }
} }
@ -187,7 +193,7 @@ Pane {
} }
Component.onCompleted: { Component.onCompleted: {
baseUnit.currentIndex = ['BTC','mBTC','bits','sat'].indexOf(Config.baseUnit) baseUnit.currentIndex = _baseunits.indexOf(Config.baseUnit)
thousands.checked = Config.thousandsSeparator thousands.checked = Config.thousandsSeparator
currencies.currentIndex = currencies.indexOfValue(Daemon.fx.fiatCurrency) currencies.currentIndex = currencies.indexOfValue(Daemon.fx.fiatCurrency)
historicRates.checked = Daemon.fx.historicRates historicRates.checked = Daemon.fx.historicRates

9
electrum/gui/qml/components/Receive.qml

@ -71,7 +71,7 @@ Pane {
Layout.fillWidth: false Layout.fillWidth: false
} }
ComboBox { ElComboBox {
id: expires id: expires
Layout.columnSpan: 2 Layout.columnSpan: 2
@ -91,13 +91,6 @@ Pane {
expires.currentIndex = 0 expires.currentIndex = 0
} }
} }
// redefine contentItem, as the default crops the widest item
contentItem: Label {
text: expires.currentText
padding: constants.paddingLarge
font.pixelSize: constants.fontSizeMedium
}
} }
Item { width: 1; height: 1; Layout.fillWidth: true } Item { width: 1; height: 1; Layout.fillWidth: true }

14
electrum/gui/qml/components/controls/ElComboBox.qml

@ -0,0 +1,14 @@
import QtQuick.Controls 2.0
ComboBox {
id: cb
// make combobox implicit width a multiple of 32, so it aligns with others
implicitWidth: Math.ceil(contentItem.implicitWidth/32)*32 + constants.paddingXXLarge
// redefine contentItem, as the default crops the text easily
contentItem: Label {
text: cb.currentText
padding: constants.paddingLarge
rightPadding: constants.paddingXXLarge
font.pixelSize: constants.fontSizeMedium
}
}
Loading…
Cancel
Save