Sander van Grieken
4 years ago
13 changed files with 388 additions and 316 deletions
@ -1,41 +0,0 @@ |
|||
import QtQuick 2.6 |
|||
|
|||
Item { |
|||
id: rootItem |
|||
width: visbut.width + 10 |
|||
height: visbut.height + 10 |
|||
|
|||
signal clicked |
|||
property string text |
|||
|
|||
Rectangle { |
|||
id: visbut |
|||
border { |
|||
color: '#444444' |
|||
width: 2 |
|||
} |
|||
color: '#dddddd' |
|||
radius: 4 |
|||
|
|||
anchors.centerIn: parent |
|||
width: buttonText.width |
|||
height: buttonText.height |
|||
|
|||
MouseArea { |
|||
anchors.fill: parent |
|||
onClicked: rootItem.clicked() |
|||
} |
|||
} |
|||
|
|||
Text { |
|||
id: buttonText |
|||
leftPadding: 30 |
|||
rightPadding: 30 |
|||
topPadding: 20 |
|||
bottomPadding: 20 |
|||
verticalAlignment: Text.AlignVCenter |
|||
text: rootItem.text |
|||
color: 'red' |
|||
} |
|||
|
|||
} |
@ -1,29 +0,0 @@ |
|||
import QtQuick 2.6 |
|||
|
|||
Item { |
|||
height: 60 |
|||
|
|||
property alias text: label.text |
|||
|
|||
Rectangle { |
|||
anchors.fill: parent |
|||
color: '#cccccc' |
|||
} |
|||
|
|||
Text { |
|||
id: label |
|||
x: 10 |
|||
anchors.verticalCenter: parent.verticalCenter |
|||
font.pointSize: 11 |
|||
color: '#202020' |
|||
} |
|||
|
|||
Rectangle { |
|||
x: 10 |
|||
width: parent.width - 20 |
|||
height: 2 |
|||
anchors.topMargin: 0 |
|||
anchors.top: label.bottom |
|||
color: '#808080' |
|||
} |
|||
} |
@ -0,0 +1,134 @@ |
|||
import QtQuick 2.6 |
|||
import QtQuick.Layouts 1.0 |
|||
import QtQuick.Controls 2.0 |
|||
|
|||
Item { |
|||
id: rootItem |
|||
|
|||
property string title: 'History' |
|||
|
|||
Column { |
|||
width: parent.width |
|||
|
|||
ListView { |
|||
width: parent.width |
|||
height: 200 |
|||
|
|||
model: Daemon.currentWallet.historyModel |
|||
delegate: Item { |
|||
id: delegate |
|||
width: ListView.view.width |
|||
height: txinfo.height |
|||
|
|||
MouseArea { |
|||
anchors.fill: delegate |
|||
onClicked: extinfo.visible = !extinfo.visible |
|||
} |
|||
|
|||
GridLayout { |
|||
id: txinfo |
|||
columns: 4 |
|||
|
|||
x: 6 |
|||
width: delegate.width - 12 |
|||
|
|||
Item { |
|||
id: indicator |
|||
Layout.fillHeight: true |
|||
Layout.rowSpan: 2 |
|||
Rectangle { |
|||
width: 3 |
|||
color: model.incoming ? 'green' : 'red' |
|||
y: 2 |
|||
height: parent.height - 4 |
|||
} |
|||
} |
|||
|
|||
Image { |
|||
readonly property variant tx_icons : [ |
|||
"../../../gui/icons/unconfirmed.png", |
|||
"../../../gui/icons/clock1.png", |
|||
"../../../gui/icons/clock2.png", |
|||
"../../../gui/icons/clock3.png", |
|||
"../../../gui/icons/clock4.png", |
|||
"../../../gui/icons/clock5.png", |
|||
"../../../gui/icons/confirmed.png" |
|||
] |
|||
|
|||
sourceSize.width: 32 |
|||
sourceSize.height: 32 |
|||
Layout.alignment: Qt.AlignVCenter |
|||
source: tx_icons[Math.min(6,model.confirmations)] |
|||
} |
|||
|
|||
Column { |
|||
Layout.fillWidth: true |
|||
|
|||
Label { |
|||
text: model.label !== '' ? model.label : '<no label>' |
|||
color: model.label !== '' ? 'black' : 'gray' |
|||
font.bold: model.label !== '' ? true : false |
|||
} |
|||
Label { |
|||
font.pointSize: 7 |
|||
text: model.date |
|||
} |
|||
} |
|||
|
|||
Column { |
|||
id: valuefee |
|||
Label { |
|||
text: model.bc_value |
|||
font.bold: true |
|||
} |
|||
Label { |
|||
font.pointSize: 6 |
|||
text: 'fee: ' + (model.fee !== undefined ? model.fee : '0') |
|||
} |
|||
} |
|||
|
|||
GridLayout { |
|||
id: extinfo |
|||
visible: false |
|||
columns: 2 |
|||
Layout.columnSpan: 3 |
|||
|
|||
Label { text: 'txid' } |
|||
Label { |
|||
font.pointSize: 6 |
|||
text: model.txid |
|||
elide: Text.ElideMiddle |
|||
Layout.fillWidth: true |
|||
} |
|||
Label { text: 'height' } |
|||
Label { |
|||
font.pointSize: 7 |
|||
text: model.height |
|||
} |
|||
Label { text: 'confirmations' } |
|||
Label { |
|||
font.pointSize: 7 |
|||
text: model.confirmations |
|||
} |
|||
Label { text: 'address' } |
|||
Label { |
|||
font.pointSize: 7 |
|||
elide: Text.ElideMiddle |
|||
Layout.fillWidth: true |
|||
text: { |
|||
for (var i=0; i < Object.keys(model.outputs).length; i++) { |
|||
if (model.outputs[i].value === model.bc_value) { |
|||
return model.outputs[i].address |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
} // delegate |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
@ -0,0 +1,21 @@ |
|||
import QtQuick 2.6 |
|||
import QtQuick.Layouts 1.0 |
|||
import QtQuick.Controls 2.0 |
|||
import QtQuick.Controls.Material 2.0 |
|||
|
|||
Item { |
|||
property string title: qsTr('Network') |
|||
|
|||
GridLayout { |
|||
columns: 2 |
|||
|
|||
Label { text: qsTr("Server: "); color: Material.primaryHighlightedTextColor; font.bold: true } |
|||
Label { text: Network.server } |
|||
Label { text: qsTr("Local Height: "); color: Material.primaryHighlightedTextColor; font.bold: true } |
|||
Label { text: Network.height } |
|||
Label { text: qsTr("Status: "); color: Material.primaryHighlightedTextColor; font.bold: true } |
|||
Label { text: Network.status } |
|||
Label { text: qsTr("Wallet: "); color: Material.primaryHighlightedTextColor; font.bold: true } |
|||
Label { text: Daemon.walletName } |
|||
} |
|||
} |
@ -0,0 +1,41 @@ |
|||
import QtQuick 2.6 |
|||
import QtMultimedia 5.6 |
|||
|
|||
Item { |
|||
|
|||
VideoOutput { |
|||
id: vo |
|||
anchors.fill: parent |
|||
source: camera |
|||
fillMode: VideoOutput.PreserveAspectCrop |
|||
} |
|||
|
|||
MouseArea { |
|||
anchors.fill: parent |
|||
onClicked: { |
|||
vo.grabToImage(function(result) { |
|||
console.log("grab: image=" + (result.image !== undefined) + " url=" + result.url) |
|||
if (result.image !== undefined) { |
|||
console.log('scanning image for QR') |
|||
QR.scanImage(result.image) |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
|
|||
Camera { |
|||
id: camera |
|||
deviceId: QtMultimedia.defaultCamera.deviceId |
|||
viewfinder.resolution: "640x480" |
|||
|
|||
function dumpstats() { |
|||
console.log(camera.viewfinder.resolution) |
|||
console.log(camera.viewfinder.minimumFrameRate) |
|||
console.log(camera.viewfinder.maximumFrameRate) |
|||
var resolutions = camera.supportedViewfinderResolutions() |
|||
resolutions.forEach(function(item, i) { |
|||
console.log('' + item.width + 'x' + item.height) |
|||
}) |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,23 @@ |
|||
import QtQuick 2.6 |
|||
import QtQuick.Controls 2.0 |
|||
|
|||
Item { |
|||
|
|||
property bool toolbar: false |
|||
property string title: 'scan' |
|||
|
|||
QRScan { |
|||
anchors.top: parent.top |
|||
anchors.bottom: button.top |
|||
width: parent.width |
|||
} |
|||
|
|||
Button { |
|||
anchors.horizontalCenter: parent.horizontalCenter |
|||
id: button |
|||
anchors.bottom: parent.bottom |
|||
text: 'Cancel' |
|||
onClicked: app.stack.pop() |
|||
} |
|||
|
|||
} |
@ -0,0 +1,69 @@ |
|||
import QtQuick 2.6 |
|||
import QtQuick.Controls 2.0 |
|||
import QtQuick.Layouts 1.0 |
|||
|
|||
Item { |
|||
id: rootItem |
|||
|
|||
property string title: 'Send' |
|||
|
|||
GridLayout { |
|||
width: rootItem.width - 12 |
|||
anchors.horizontalCenter: parent.horizontalCenter |
|||
columns: 4 |
|||
|
|||
Label { |
|||
Layout.columnSpan: 4 |
|||
Layout.alignment: Qt.AlignHCenter |
|||
text: "Current Balance: 0 mBTC" |
|||
} |
|||
|
|||
Label { |
|||
text: "Recipient" |
|||
} |
|||
|
|||
TextField { |
|||
id: address |
|||
Layout.columnSpan: 3 |
|||
placeholderText: 'Paste address or invoice' |
|||
Layout.fillWidth: true |
|||
} |
|||
|
|||
Label { |
|||
text: "Amount" |
|||
} |
|||
|
|||
TextField { |
|||
id: amount |
|||
placeholderText: 'Amount' |
|||
} |
|||
|
|||
Label { |
|||
text: "Fee" |
|||
} |
|||
|
|||
TextField { |
|||
id: fee |
|||
placeholderText: 'sat/vB' |
|||
} |
|||
|
|||
Column { |
|||
Layout.fillWidth: true |
|||
Layout.columnSpan: 4 |
|||
|
|||
Button { |
|||
anchors.horizontalCenter: parent.horizontalCenter |
|||
text: 'Pay' |
|||
onClicked: { |
|||
var i_amount = parseInt(amount.text) |
|||
if (isNaN(i_amount)) |
|||
return |
|||
var result = Daemon.currentWallet.send_onchain(address.text, i_amount, undefined, false) |
|||
if (result) |
|||
app.stack.pop() |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
@ -1,6 +1,8 @@ |
|||
import QtQuick 2.0 |
|||
|
|||
Item { |
|||
property bool toolbar: false |
|||
|
|||
Rectangle { |
|||
anchors.fill: parent |
|||
color: '#111144' |
@ -0,0 +1,32 @@ |
|||
import QtQuick 2.6 |
|||
import QtQuick.Layouts 1.0 |
|||
import QtQuick.Controls 2.0 |
|||
|
|||
Item { |
|||
property string title: 'Wallets' |
|||
|
|||
ListView { |
|||
width: parent.width |
|||
height: 200 |
|||
model: Daemon.activeWallets |
|||
|
|||
delegate: Item { |
|||
width: ListView.view.width |
|||
|
|||
RowLayout { |
|||
x: 20 |
|||
spacing: 20 |
|||
|
|||
Image { |
|||
source: "../../../gui/kivy/theming/light/wallet.png" |
|||
} |
|||
|
|||
Label { |
|||
font.pointSize: 13 |
|||
text: model.display |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
@ -1,63 +0,0 @@ |
|||
import QtQuick 2.6 |
|||
import QtMultimedia 5.6 |
|||
|
|||
|
|||
Item { |
|||
Column { |
|||
width: parent.width |
|||
|
|||
EHeader { |
|||
text: "Scan QR Code" |
|||
width: parent.width |
|||
} |
|||
|
|||
Item { |
|||
id: voc |
|||
width: parent.width |
|||
height: parent.width |
|||
|
|||
VideoOutput { |
|||
id: vo |
|||
anchors.fill: parent |
|||
source: camera |
|||
//fillMode: VideoOutput.PreserveAspectCrop |
|||
} |
|||
|
|||
MouseArea { |
|||
anchors.fill: parent |
|||
onClicked: { |
|||
vo.grabToImage(function(result) { |
|||
console.log("grab: image=" + (result.image !== undefined) + " url=" + result.url) |
|||
if (result.image !== undefined) { |
|||
console.log('scanning image for QR') |
|||
QR.scanImage(result.image) |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
|
|||
EButton { |
|||
text: 'Exit' |
|||
onClicked: app.stack.pop() |
|||
} |
|||
} |
|||
|
|||
Camera { |
|||
id: camera |
|||
deviceId: QtMultimedia.defaultCamera.deviceId |
|||
viewfinder.resolution: "640x480" |
|||
|
|||
function dumpstats() { |
|||
console.log(camera.viewfinder.resolution) |
|||
console.log(camera.viewfinder.minimumFrameRate) |
|||
console.log(camera.viewfinder.maximumFrameRate) |
|||
var resolutions = camera.supportedViewfinderResolutions() |
|||
resolutions.forEach(function(item, i) { |
|||
console.log('' + item.width + 'x' + item.height) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
@ -1,131 +0,0 @@ |
|||
import QtQuick 2.6 |
|||
|
|||
Item { |
|||
id: rootItem |
|||
|
|||
Column { |
|||
width: parent.width |
|||
|
|||
EHeader { |
|||
text: "History" |
|||
width: parent.width |
|||
} |
|||
|
|||
ListView { |
|||
width: parent.width |
|||
height: 200 |
|||
|
|||
model: Daemon.currentWallet.historyModel |
|||
delegate: Item { |
|||
id: delegate |
|||
width: parent.width |
|||
height: txinfo.height |
|||
|
|||
MouseArea { |
|||
anchors.fill: delegate |
|||
onClicked: extinfo.visible = !extinfo.visible |
|||
} |
|||
|
|||
Row { |
|||
id: txinfo |
|||
Rectangle { |
|||
width: 4 |
|||
height: parent.height |
|||
color: model.incoming ? 'green' : 'red' |
|||
} |
|||
|
|||
Column { |
|||
|
|||
Row { |
|||
id: baseinfo |
|||
spacing: 10 |
|||
|
|||
|
|||
Image { |
|||
readonly property variant tx_icons : [ |
|||
"../../icons/unconfirmed.png", |
|||
"../../icons/clock1.png", |
|||
"../../icons/clock2.png", |
|||
"../../icons/clock3.png", |
|||
"../../icons/clock4.png", |
|||
"../../icons/clock5.png", |
|||
"../../icons/confirmed.png" |
|||
] |
|||
|
|||
width: 32 |
|||
height: 32 |
|||
anchors.verticalCenter: parent.verticalCenter |
|||
source: tx_icons[Math.min(6,Math.floor(model.confirmations/20))] |
|||
} |
|||
|
|||
Column { |
|||
id: content |
|||
width: delegate.width - x - valuefee.width |
|||
|
|||
Text { |
|||
text: model.label !== '' ? model.label : '<no label>' |
|||
color: model.label !== '' ? 'black' : 'gray' |
|||
} |
|||
Text { |
|||
font.pointSize: 7 |
|||
text: model.date |
|||
} |
|||
} |
|||
|
|||
Column { |
|||
id: valuefee |
|||
width: delegate.width * 0.25 |
|||
Text { |
|||
text: model.bc_value |
|||
} |
|||
Text { |
|||
font.pointSize: 7 |
|||
text: 'fee: ' + (model.fee !== undefined ? model.fee : '0') |
|||
} |
|||
} |
|||
} |
|||
|
|||
Row { |
|||
id: extinfo |
|||
visible: false |
|||
|
|||
Column { |
|||
id: extinfoinner |
|||
Text { |
|||
font.pointSize: 6 |
|||
text: 'txid: ' + model.txid |
|||
} |
|||
Text { |
|||
font.pointSize: 7 |
|||
text: 'height: ' + model.height |
|||
} |
|||
Text { |
|||
font.pointSize: 7 |
|||
text: 'confirmations: ' + model.confirmations |
|||
} |
|||
Text { |
|||
font.pointSize: 7 |
|||
text: { |
|||
for (var i=0; i < Object.keys(model.outputs).length; i++) { |
|||
if (model.outputs[i].value === model.bc_value) { |
|||
return 'address: ' + model.outputs[i].address |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
} |
|||
} // delegate |
|||
} |
|||
|
|||
EButton { |
|||
text: 'Back' |
|||
onClicked: app.stack.pop() |
|||
} |
|||
} |
|||
|
|||
} |
Loading…
Reference in new issue