mirror of
https://git.wownero.com/wowlet/wowlet.git
synced 2024-08-15 01:03:14 +00:00
Refactor numpad code, transfer screen
This commit is contained in:
parent
8b1250030b
commit
bd38e5e1d8
16 changed files with 259 additions and 252 deletions
|
@ -120,6 +120,14 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
||||||
|
|
||||||
if(openVREnabled) {
|
if(openVREnabled) {
|
||||||
#ifdef HAS_OPENVR
|
#ifdef HAS_OPENVR
|
||||||
|
// @TODO: custom DPI / AA
|
||||||
|
// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL );
|
||||||
|
// QCoreApplication::setAttribute( Qt::AA_Use96Dpi );
|
||||||
|
if(qgetenv("scale") == "1")
|
||||||
|
QCoreApplication::setAttribute( Qt::AA_EnableHighDpiScaling );
|
||||||
|
if(qgetenv("noscale") == "1")
|
||||||
|
QCoreApplication::setAttribute( Qt::AA_DisableHighDpiScaling );
|
||||||
|
|
||||||
QApplication vr_app(argc, argv);
|
QApplication vr_app(argc, argv);
|
||||||
auto *ctx = new AppContext(&parser);
|
auto *ctx = new AppContext(&parser);
|
||||||
auto *vr = new wowletvr::WowletVR(ctx, &parser, &vr_app);
|
auto *vr = new wowletvr::WowletVR(ctx, &parser, &vr_app);
|
||||||
|
|
|
@ -38,7 +38,7 @@ void Prices::cryptoPricesReceived(const QJsonArray &data) {
|
||||||
for(auto &&entry: data) {
|
for(auto &&entry: data) {
|
||||||
marketStruct ms;
|
marketStruct ms;
|
||||||
QJsonObject obj = entry.toObject();
|
QJsonObject obj = entry.toObject();
|
||||||
ms.symbol = obj.value("symbol").toString();
|
ms.symbol = obj.value("symbol").toString().toUpper();
|
||||||
ms.image = obj.value("image").toString();
|
ms.image = obj.value("image").toString();
|
||||||
ms.name = obj.value("name").toString();
|
ms.name = obj.value("name").toString();
|
||||||
ms.price_usd = obj.value("current_price").toDouble();
|
ms.price_usd = obj.value("current_price").toDouble();
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"fontColor": "white",
|
"fontColor": "white",
|
||||||
"fontColorDimmed": "#cccccc",
|
"fontColorDimmed": "#cccccc",
|
||||||
"fontColorBright": "white",
|
"fontColorBright": "white",
|
||||||
"backgroundGradientStartColor": "#194f64",
|
"backgroundGradientStartColor": "#225d73",
|
||||||
"backgroundGradientStopColor": "#192e43",
|
"backgroundGradientStopColor": "#192e43",
|
||||||
"backgroundColor": "#1b2939",
|
"backgroundColor": "#1b2939",
|
||||||
"divideColor": "50ffffff",
|
"divideColor": "50ffffff",
|
||||||
|
|
|
@ -83,10 +83,6 @@ namespace wowletvr {
|
||||||
qRegisterMetaType<TransactionInfo::Direction>();
|
qRegisterMetaType<TransactionInfo::Direction>();
|
||||||
qRegisterMetaType<TransactionHistoryModel::TransactionInfoRole>();
|
qRegisterMetaType<TransactionHistoryModel::TransactionInfoRole>();
|
||||||
|
|
||||||
// @TODO: custom DPI / AA
|
|
||||||
// QCoreApplication::setAttribute( Qt::AA_UseDesktopOpenGL );
|
|
||||||
// QCoreApplication::setAttribute( Qt::AA_Use96Dpi );
|
|
||||||
|
|
||||||
if(!desktopMode) {
|
if(!desktopMode) {
|
||||||
if(!openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay))
|
if(!openvr_init::initializeOpenVR(openvr_init::OpenVrInitializationType::Overlay))
|
||||||
throw std::runtime_error("Error: initializeOpenVR()");
|
throw std::runtime_error("Error: initializeOpenVR()");
|
||||||
|
|
|
@ -57,12 +57,25 @@ namespace wowletvr {
|
||||||
m_pClipboard->setText(text, QClipboard::Selection);
|
m_pClipboard->setText(text, QClipboard::Selection);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_INVOKABLE QString amountToFiat(double amount) {
|
Q_INVOKABLE QString preferredFiat() {
|
||||||
|
return config()->get(Config::preferredFiatCurrency).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_INVOKABLE QString fiatToWow(double amount) {
|
||||||
auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString();
|
auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString();
|
||||||
if (amount <= 0) return QString("0.00 %1").arg(preferredFiatCurrency);
|
if (amount <= 0) return QString("0.00");
|
||||||
|
|
||||||
|
double conversionAmount = AppContext::prices->convert(preferredFiatCurrency, "WOW", amount);
|
||||||
|
return QString("%1").arg(QString::number(conversionAmount, 'f', 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
Q_INVOKABLE QString wowToFiat(double amount) {
|
||||||
|
auto preferredFiatCurrency = config()->get(Config::preferredFiatCurrency).toString();
|
||||||
|
if (amount <= 0) return QString("0.00");
|
||||||
|
|
||||||
double conversionAmount = AppContext::prices->convert("WOW", preferredFiatCurrency, amount);
|
double conversionAmount = AppContext::prices->convert("WOW", preferredFiatCurrency, amount);
|
||||||
return QString("~%1 %2").arg(QString::number(conversionAmount, 'f', 2), preferredFiatCurrency);
|
if(conversionAmount <= 0) return QString("0.00");
|
||||||
|
return QString("~%1").arg(QString::number(conversionAmount, 'f', 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -22,7 +22,8 @@ Rectangle {
|
||||||
color: "transparent"
|
color: "transparent"
|
||||||
|
|
||||||
property var themes: {}
|
property var themes: {}
|
||||||
property string theme: "wownero"
|
property string theme: "default"
|
||||||
|
property string fiatSymbol: "USD"
|
||||||
signal initTheme();
|
signal initTheme();
|
||||||
|
|
||||||
// Components that have been dynamically created need to redraw
|
// Components that have been dynamically created need to redraw
|
||||||
|
@ -309,24 +310,23 @@ Rectangle {
|
||||||
try {
|
try {
|
||||||
appWindow.themes = WowletVR.getThemes();
|
appWindow.themes = WowletVR.getThemes();
|
||||||
appWindow.theme = WowletVR.getCurrentTheme();
|
appWindow.theme = WowletVR.getCurrentTheme();
|
||||||
}
|
} catch(err) {
|
||||||
catch(err) {
|
|
||||||
// for debugging purposes - do not change color codes here, use themes.json instead.
|
// for debugging purposes - do not change color codes here, use themes.json instead.
|
||||||
appWindow.themes = {
|
appWindow.themes = {
|
||||||
"default": {
|
"default": {
|
||||||
"fontColor": "white",
|
"fontColor": "white",
|
||||||
"fontColorDimmed": "#cccccc",
|
"fontColorDimmed": "#cccccc",
|
||||||
"fontColorBright": "#white",
|
"fontColorBright": "white",
|
||||||
"backgroundGradientStartColor": "#194f64",
|
"backgroundGradientStartColor": "#225d73",
|
||||||
"backgroundGradientStopColor": "#192e43",
|
"backgroundGradientStopColor": "#192e43",
|
||||||
},
|
},
|
||||||
"wownero": {
|
"wownero": {
|
||||||
"fontColor": "#bd93f9",
|
"fontColor": "#bd93f9",
|
||||||
"fontColorDimmed": "#cccccc",
|
"fontColorDimmed": "#cccccc",
|
||||||
"fontColorBright": "#e5d3ff",
|
"fontColorBright": "#e5d3ff",
|
||||||
"backgroundGradientStartColor": "#383a59",
|
"backgroundGradientStartColor": "#383a59",
|
||||||
"backgroundGradientStopColor": "#282a36",
|
"backgroundGradientStopColor": "#282a36",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,8 +47,8 @@ ColumnLayout {
|
||||||
Layout.leftMargin: 40
|
Layout.leftMargin: 40
|
||||||
Layout.rightMargin: 40
|
Layout.rightMargin: 40
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: "Greetings: matzman666, qvqc, ez, Gatto, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus"
|
|
||||||
fontSize: 14
|
fontSize: 14
|
||||||
|
text: "Shoutouts: matzman666, qvqc, ez, Gatto, RAGEHAÜZ, cisme, wowario, lza_menace, jwinterm, nioc, asymptotically, azy, selsta, kico, laura, thrmo, rottensox, solar, bl4sty, scoobybejesus"
|
||||||
wrap: true
|
wrap: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ Rectangle {
|
||||||
StackView {
|
StackView {
|
||||||
id: walletView
|
id: walletView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
initialItem: walletDashboardPage
|
||||||
|
|
||||||
pushEnter: Transition {
|
pushEnter: Transition {
|
||||||
PropertyAnimation {
|
PropertyAnimation {
|
||||||
|
@ -72,8 +73,6 @@ Rectangle {
|
||||||
easing.type: Easing.OutCubic
|
easing.type: Easing.OutCubic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialItem: walletDashboardPage
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPageCompleted() {
|
function onPageCompleted() {
|
||||||
|
|
|
@ -6,34 +6,23 @@ import "."
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: root
|
id: root
|
||||||
enabled: true
|
enabled: true
|
||||||
|
spacing: 16
|
||||||
|
|
||||||
property double disabledOpacity: 0.4
|
property double disabledOpacity: 0.4
|
||||||
property var code: [];
|
property bool compact: false
|
||||||
|
|
||||||
signal resolvePressed();
|
signal resolvePressed();
|
||||||
signal codeUpdated(var pin_code);
|
signal buttonPress(string val);
|
||||||
|
signal clearPress();
|
||||||
function onButtonPress(val) {
|
|
||||||
code.push(val);
|
|
||||||
|
|
||||||
if(code.length === 5)
|
|
||||||
code = [val];
|
|
||||||
|
|
||||||
codeUpdated(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
function reset() {
|
|
||||||
root.code = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 20
|
spacing: 18
|
||||||
|
|
||||||
MyNumPadButton {
|
MyNumPadButton {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "1"
|
text: "1"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("1");
|
buttonPress("1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +30,7 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "2"
|
text: "2"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("2");
|
buttonPress("2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,19 +38,19 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "3"
|
text: "3"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("3");
|
buttonPress("3");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 20
|
spacing: 18
|
||||||
|
|
||||||
MyNumPadButton {
|
MyNumPadButton {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "4"
|
text: "4"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("4");
|
buttonPress("4");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,7 +58,7 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "5"
|
text: "5"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("5");
|
buttonPress("5");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,19 +66,19 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "6"
|
text: "6"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("6");
|
buttonPress("6");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 20
|
spacing: 18
|
||||||
|
|
||||||
MyNumPadButton {
|
MyNumPadButton {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "7"
|
text: "7"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("7");
|
buttonPress("7");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +86,7 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "8"
|
text: "8"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("8");
|
buttonPress("8");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,32 +94,44 @@ ColumnLayout {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "9"
|
text: "9"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("9");
|
buttonPress("9");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 20
|
spacing: 18
|
||||||
|
|
||||||
MyNumPadButton {
|
MyNumPadButton {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
text: "0"
|
text: "0"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
onButtonPress("0");
|
buttonPress("0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MyNumPadButton {
|
||||||
|
visible: root.compact
|
||||||
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
|
text: "."
|
||||||
|
onClicked: {
|
||||||
|
buttonPress(".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MyNumPadButton {
|
MyNumPadButton {
|
||||||
opacity: root.enabled ? 1 : disabledOpacity
|
opacity: root.enabled ? 1 : disabledOpacity
|
||||||
|
|
||||||
Layout.preferredWidth: 204
|
Layout.preferredWidth: root.compact ? 106 : 230
|
||||||
fontSize: 16
|
fontSize: 16
|
||||||
text: "Clear"
|
text: root.compact ? "C" : "Clear"
|
||||||
onClicked: {
|
onClicked: {
|
||||||
root.code = [0,0,0,0];
|
clearPress();
|
||||||
root.codeUpdated(root.code);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,8 +11,8 @@ Rectangle {
|
||||||
|
|
||||||
signal clicked;
|
signal clicked;
|
||||||
|
|
||||||
Layout.preferredWidth: 92
|
Layout.preferredWidth: 106
|
||||||
Layout.preferredHeight: 92
|
Layout.preferredHeight: 106
|
||||||
color: Style.btnExitedColor
|
color: Style.btnExitedColor
|
||||||
|
|
||||||
MyText {
|
MyText {
|
||||||
|
|
|
@ -128,7 +128,6 @@ Rectangle {
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: mainLayout
|
id: mainLayout
|
||||||
spacing: 12
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +146,7 @@ Rectangle {
|
||||||
anchors.leftMargin: 40
|
anchors.leftMargin: 40
|
||||||
anchors.rightMargin: 40
|
anchors.rightMargin: 40
|
||||||
|
|
||||||
color: Style.fontColorDimmed
|
color: Style.dividerColor
|
||||||
height: 1
|
height: 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +168,7 @@ Rectangle {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.preferredWidth: 1
|
Layout.preferredWidth: 1
|
||||||
color: Style.fontColorDimmed
|
color: Style.dividerColor
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -204,7 +203,7 @@ Rectangle {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.preferredWidth: 1
|
Layout.preferredWidth: 1
|
||||||
color: Style.fontColorDimmed
|
color: Style.dividerColor
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@ -228,12 +227,21 @@ Rectangle {
|
||||||
Rectangle {
|
Rectangle {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.preferredWidth: 1
|
Layout.preferredWidth: 1
|
||||||
color: Style.fontColorDimmed
|
color: Style.dividerColor
|
||||||
}
|
}
|
||||||
|
|
||||||
MyText {
|
MyText {
|
||||||
fontSize: 14
|
fontSize: 14
|
||||||
text: "Balance: " + WowletVR.amountToFiat(appWindow.spendable);
|
text: {
|
||||||
|
let rtn = "Balance: ";
|
||||||
|
try {
|
||||||
|
rtn += WowletVR.wowToFiat(appWindow.spendable);
|
||||||
|
} catch(err) {
|
||||||
|
rtn += "ERROR";
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn + " " + appWindow.fiatSymbol
|
||||||
|
}
|
||||||
color: Style.fontColorDimmed
|
color: Style.fontColorDimmed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,7 +259,7 @@ Rectangle {
|
||||||
content.Layout.topMargin = 10
|
content.Layout.topMargin = 10
|
||||||
content.Layout.leftMargin = 40
|
content.Layout.leftMargin = 40
|
||||||
content.Layout.rightMargin = 40
|
content.Layout.rightMargin = 40
|
||||||
content.Layout.bottomMargin = 40
|
content.Layout.bottomMargin = 10
|
||||||
|
|
||||||
bigRect.parent = mainLayout
|
bigRect.parent = mainLayout
|
||||||
}
|
}
|
||||||
|
|
|
@ -95,5 +95,10 @@ MyStackViewPage {
|
||||||
|
|
||||||
function onPageCompleted() {
|
function onPageCompleted() {
|
||||||
historyView.onPageCompleted();
|
historyView.onPageCompleted();
|
||||||
|
try {
|
||||||
|
appWindow.fiatSymbol = WowletVR.preferredFiat();
|
||||||
|
} catch(err) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,6 +8,7 @@ import "."
|
||||||
|
|
||||||
MyStackViewPage {
|
MyStackViewPage {
|
||||||
id: sendStateController
|
id: sendStateController
|
||||||
|
height: 800
|
||||||
width: 1600
|
width: 1600
|
||||||
headerText: "Send"
|
headerText: "Send"
|
||||||
|
|
||||||
|
@ -32,9 +33,6 @@ MyStackViewPage {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(previousView !== null && currentView.viewName === "wizardHome")
|
|
||||||
// wizardController.restart();
|
|
||||||
|
|
||||||
if (currentView) {
|
if (currentView) {
|
||||||
sendStack.replace(currentView)
|
sendStack.replace(currentView)
|
||||||
// Calls when view is opened
|
// Calls when view is opened
|
||||||
|
@ -44,10 +42,6 @@ MyStackViewPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
previousView = currentView;
|
previousView = currentView;
|
||||||
|
|
||||||
// reset push direction
|
|
||||||
// if(wizardController.wizardState == "wizardHome")
|
|
||||||
// wizardController.wizardStackView.backTransition = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
states: [
|
states: [
|
||||||
|
@ -105,6 +99,7 @@ MyStackViewPage {
|
||||||
onBackClicked: {
|
onBackClicked: {
|
||||||
// top back button to send/receive menu, reset default states for sendViews
|
// top back button to send/receive menu, reset default states for sendViews
|
||||||
sendStateView.pinPage.onPageCompleted();
|
sendStateView.pinPage.onPageCompleted();
|
||||||
|
sendStateView.qrPage.onPageCompleted();
|
||||||
sendStateView.dashPage.onPageCompleted();
|
sendStateView.dashPage.onPageCompleted();
|
||||||
sendStateView.transferPage.onPageCompleted();
|
sendStateView.transferPage.onPageCompleted();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ ColumnLayout {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
property string _PINLookup: ""
|
property string pin: ""
|
||||||
|
|
||||||
MyText {
|
MyText {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -29,25 +29,11 @@ ColumnLayout {
|
||||||
|
|
||||||
MyNumPad {
|
MyNumPad {
|
||||||
id: numPad
|
id: numPad
|
||||||
onCodeUpdated: {
|
onButtonPress: {
|
||||||
let codeFmt = "";
|
root.pin += val;
|
||||||
|
if(root.pin.length === 4 && root.pin !== "0000") {
|
||||||
for(var i = 0; i != 4; i++) {
|
return addressLookup();
|
||||||
if(pin_code[i] !== undefined) {
|
|
||||||
codeFmt += pin_code[i] + " ";
|
|
||||||
} else {
|
|
||||||
codeFmt += ". ";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// update display thingy
|
|
||||||
codeDisplay.text = codeFmt;
|
|
||||||
|
|
||||||
// lol Qt
|
|
||||||
codeFmt = codeFmt.replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").replace(" ", "").trim();
|
|
||||||
|
|
||||||
if(pin_code.length === 4 && codeFmt != "0000")
|
|
||||||
addressLookup(codeFmt);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +52,7 @@ ColumnLayout {
|
||||||
id: codeDisplay
|
id: codeDisplay
|
||||||
Layout.preferredWidth: 390
|
Layout.preferredWidth: 390
|
||||||
visible: true
|
visible: true
|
||||||
text: "0 0 0 0"
|
text: (root.pin[0] || ".") + " " + (root.pin[1] || ".") + " " + (root.pin[2] || ".") + " " + (root.pin[3] || ".");
|
||||||
color: Style.fontColor
|
color: Style.fontColor
|
||||||
font.bold: true
|
font.bold: true
|
||||||
font.pointSize: 40
|
font.pointSize: 40
|
||||||
|
@ -136,7 +122,7 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
MyText {
|
MyText {
|
||||||
text: _PINLookup
|
text: root.pin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,18 +134,18 @@ ColumnLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
function addressLookup(code) {
|
function addressLookup() {
|
||||||
if(_PINLookup !== "")
|
console.log("addressLookup()");
|
||||||
return;
|
|
||||||
|
|
||||||
_PINLookup = code;
|
|
||||||
|
|
||||||
idleContainer.visible = false;
|
idleContainer.visible = false;
|
||||||
loadingContainer.visible = true;
|
loadingContainer.visible = true;
|
||||||
|
|
||||||
numPad.enabled = false;
|
numPad.enabled = false;
|
||||||
|
|
||||||
ctx.onLookupReceivingPIN(code);
|
try {
|
||||||
|
ctx.onLookupReceivingPIN(root.pin);
|
||||||
|
} catch(err){
|
||||||
|
console.log("ctx.onLookupReceivingPIN() ignored")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPageCompleted(previousView) {
|
function onPageCompleted(previousView) {
|
||||||
|
@ -167,8 +153,9 @@ ColumnLayout {
|
||||||
}
|
}
|
||||||
|
|
||||||
function reset() {
|
function reset() {
|
||||||
|
console.log("SendPagePin reset()");
|
||||||
// reset state
|
// reset state
|
||||||
_PINLookup = "";
|
root.pin = "";
|
||||||
|
|
||||||
idleContainer.visible = true;
|
idleContainer.visible = true;
|
||||||
loadingContainer.visible = false;
|
loadingContainer.visible = false;
|
||||||
|
@ -176,8 +163,6 @@ ColumnLayout {
|
||||||
|
|
||||||
numPad.enabled = true;
|
numPad.enabled = true;
|
||||||
numPad.reset();
|
numPad.reset();
|
||||||
|
|
||||||
codeDisplay.text = "0 0 0 0";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
|
@ -186,7 +171,7 @@ ColumnLayout {
|
||||||
function onPinLookupReceived(address, pin) {
|
function onPinLookupReceived(address, pin) {
|
||||||
console.log("onPinLookupReceived", address);
|
console.log("onPinLookupReceived", address);
|
||||||
|
|
||||||
if(pin === _PINLookup) {
|
if(pin === root.pin) {
|
||||||
sendStateController.destinationAddress = address;
|
sendStateController.destinationAddress = address;
|
||||||
sendStateView.state = "transferPage";
|
sendStateView.state = "transferPage";
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -42,7 +42,11 @@ ColumnLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
|
|
||||||
function onPageCompleted(previousView){
|
function reset() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onPageCompleted(previousView){
|
||||||
|
reset();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,8 @@ ColumnLayout {
|
||||||
spacing: 30
|
spacing: 30
|
||||||
|
|
||||||
property string txDialogText: ""
|
property string txDialogText: ""
|
||||||
property double amount: 0.0
|
property string amount: ""
|
||||||
|
property string amount_type: "wow"
|
||||||
property bool canSend: false
|
property bool canSend: false
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
@ -21,37 +22,85 @@ ColumnLayout {
|
||||||
text: "How much would you like to send?"
|
text: "How much would you like to send?"
|
||||||
}
|
}
|
||||||
|
|
||||||
MyNumPadSendAmount {
|
function count(input, needle) {
|
||||||
id: myNumPadSendAmount
|
return input.split(".").length - 1;
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.preferredHeight: 112
|
|
||||||
Layout.maximumHeight: 112
|
|
||||||
|
|
||||||
onAmountUpdated: {
|
|
||||||
root.amount = amount;
|
|
||||||
fiatText.text = WowletVR.amountToFiat(root.amount);
|
|
||||||
|
|
||||||
// @TODO: tx validation here
|
|
||||||
if(root.amount <= 0) {
|
|
||||||
root.canSend = false;
|
|
||||||
} else if(root.amount > appWindow.spendable) {
|
|
||||||
root.canSend = false;
|
|
||||||
} else {
|
|
||||||
root.canSend = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 30
|
spacing: 40
|
||||||
Layout.topMargin: 20
|
|
||||||
Layout.fillHeight: true
|
ColumnLayout {
|
||||||
Layout.fillWidth: true
|
Layout.preferredWidth: 320
|
||||||
|
Layout.preferredHeight: 400
|
||||||
|
|
||||||
|
MyNumPad {
|
||||||
|
id: numPad
|
||||||
|
compact: true
|
||||||
|
onButtonPress: {
|
||||||
|
let periods = count(root.amount, ".");
|
||||||
|
if(periods == 1 && val === ".") return;
|
||||||
|
if(root.amount === "" && val === ".") return;
|
||||||
|
if(root.amount.length > 7) return;
|
||||||
|
|
||||||
|
root.amount += val;
|
||||||
|
}
|
||||||
|
onClearPress: {
|
||||||
|
root.amount = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.preferredWidth: parent.Layout.preferredWidth
|
||||||
|
color: "transparent"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
spacing: 14
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.preferredWidth: 280
|
||||||
|
|
||||||
|
MyPushButton {
|
||||||
|
id: wowButton
|
||||||
|
opacity: enabled ? 1.0 : 0.4
|
||||||
|
enabled: root.amount_type === "fiat"
|
||||||
|
|
||||||
|
Layout.preferredWidth: 280
|
||||||
|
Layout.preferredHeight: 108
|
||||||
|
|
||||||
|
text: "Wownero"
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
root.amount_type = "wow"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MyPushButton {
|
||||||
|
id: fiatBtn
|
||||||
|
opacity: enabled ? 1.0 : 0.4
|
||||||
|
enabled: root.amount_type === "wow"
|
||||||
|
|
||||||
|
Layout.preferredWidth: 280
|
||||||
|
Layout.preferredHeight: 108
|
||||||
|
|
||||||
|
text: "Fiat"
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
root.amount_type = "fiat"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.fillHeight: true
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
spacing: 10
|
spacing: 10
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.maximumWidth: parent.width / 2
|
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
spacing: 30
|
spacing: 30
|
||||||
|
@ -78,7 +127,21 @@ ColumnLayout {
|
||||||
MyText {
|
MyText {
|
||||||
fontSize: 24
|
fontSize: 24
|
||||||
fontColor: Style.fontColorBright
|
fontColor: Style.fontColorBright
|
||||||
text: root.amount + " WOW"
|
text: {
|
||||||
|
let rtn = "";
|
||||||
|
if(root.amount === "") rtn += "0.0"
|
||||||
|
else if(root.amount_type === "wow") {
|
||||||
|
rtn += root.amount;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
rtn += WowletVR.fiatToWow(root.amount);
|
||||||
|
} catch(err) {
|
||||||
|
return "ERROR";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn + " WOW";
|
||||||
|
}
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
}
|
}
|
||||||
|
@ -111,7 +174,21 @@ ColumnLayout {
|
||||||
id: fiatText
|
id: fiatText
|
||||||
fontSize: 18
|
fontSize: 18
|
||||||
fontColor: Style.fontColorBright
|
fontColor: Style.fontColorBright
|
||||||
text: "$0.00 USD"
|
text: {
|
||||||
|
let rtn = "";
|
||||||
|
if(root.amount === "") rtn += "0.0"
|
||||||
|
else if(root.amount_type === "fiat") {
|
||||||
|
rtn += root.amount;
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
rtn += WowletVR.wowToFiat(root.amount);
|
||||||
|
} catch(err) {
|
||||||
|
return "ERROR";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn + " " + appWindow.fiatSymbol
|
||||||
|
}
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
anchors.right: parent.right
|
anchors.right: parent.right
|
||||||
}
|
}
|
||||||
|
@ -153,45 +230,44 @@ ColumnLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
MyPushButton {
|
||||||
color: "transparent"
|
id: sendButton
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
Layout.preferredWidth: 420
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
|
||||||
|
text: "Create transaction"
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if(amount === "") return;
|
||||||
|
|
||||||
|
let _amount = parseFloat(amount);
|
||||||
|
if(root.amount_type == "fiat") {
|
||||||
|
try {
|
||||||
|
_amount = WowletVR.fiatToWow(_amount);
|
||||||
|
} catch(err) {
|
||||||
|
messagePopup.showMessage("Error", "Could not convert fiat to wow.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(amount <= 0) {
|
||||||
|
messagePopup.showMessage("Error", "Amount was zero.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
WowletVR.onCreateTransaction(destinationAddress, _amount.toString(), "", false); // no description
|
||||||
|
sendButton.enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout {
|
function onPageCompleted() {
|
||||||
Layout.preferredWidth: parent.width
|
root.amount = "";
|
||||||
Layout.preferredHeight: 128
|
root.amount_type = "wow";
|
||||||
|
root.txDialogText = "";
|
||||||
MyPushButton {
|
|
||||||
id: keyboardButton
|
|
||||||
Layout.preferredWidth: 700
|
|
||||||
|
|
||||||
text: "Enter amount via virtual keyboard"
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
OverlayController.showKeyboard(text, 1337)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MyPushButton {
|
|
||||||
id: sendButton
|
|
||||||
opacity: root.canSend ? 1.0 : 0.5
|
|
||||||
enabled: root.canSend
|
|
||||||
|
|
||||||
Layout.preferredWidth: 420
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
|
|
||||||
text: "Create transaction"
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
WowletVR.onCreateTransaction(destinationAddress, root.amount, "", false); // no description
|
|
||||||
sendButton.enabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
@ -199,89 +275,6 @@ ColumnLayout {
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: OverlayController
|
|
||||||
|
|
||||||
function onKeyBoardInputSignal(input, userValue) {
|
|
||||||
if (userValue == 1337) {
|
|
||||||
let val = parseFloat(input);
|
|
||||||
if(val >= 0)
|
|
||||||
myNumPadSendAmount.onAmountUpdated(val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: ctx
|
|
||||||
|
|
||||||
function onInitiateTransaction() {
|
|
||||||
console.log("transactionStarted");
|
|
||||||
|
|
||||||
mainView.opacity = 0.4;
|
|
||||||
mainView.enabled = false;
|
|
||||||
root.canSend = false;
|
|
||||||
root.txDialogText = "Busy creating transaction. Hold on tight!";
|
|
||||||
|
|
||||||
waitPopup.open();
|
|
||||||
}
|
|
||||||
|
|
||||||
function onCreateTransactionError(message) { // str
|
|
||||||
console.log("onCreateTransactionError", message);
|
|
||||||
waitPopup.close();
|
|
||||||
|
|
||||||
mainView.opacity = 1.0;
|
|
||||||
mainView.enabled = true;
|
|
||||||
root.canSend = true;
|
|
||||||
root.txDialogText = "";
|
|
||||||
|
|
||||||
messagePopup.showMessage("Error creating tx", message);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onCreateTransactionSuccess(tx, address) { // PendingTransaction
|
|
||||||
console.log("onCreateTransactionSuccess", address)
|
|
||||||
root.txDialogText = "Submitting transaction to the Wownero network.";
|
|
||||||
}
|
|
||||||
|
|
||||||
function onTransactionCommitted(status, tx, txid) { // bool,PendingTransaction,stringlist
|
|
||||||
console.log("onTransactionCommitted", status);
|
|
||||||
waitPopup.close();
|
|
||||||
|
|
||||||
mainView.opacity = 1.0;
|
|
||||||
mainView.enabled = true;
|
|
||||||
root.canSend = true;
|
|
||||||
root.txDialogText = "";
|
|
||||||
|
|
||||||
walletView.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onPageCompleted(previousView){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Popup {
|
|
||||||
id: waitPopup
|
|
||||||
|
|
||||||
implicitHeight: 100
|
|
||||||
implicitWidth: 1200
|
|
||||||
x: (parent.width - width) / 2
|
|
||||||
y: (parent.height - height) / 2
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
anchors.fill: parent
|
|
||||||
MyText {
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
fontColor: Style.fontColor
|
|
||||||
text: root.txDialogText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
color: "black"
|
|
||||||
opacity: 0.8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue