Compare commits

..

6 Commits

Author SHA1 Message Date
luigi1111
d85f3eae7c Merge pull request #1443
377c56d Add libwinscard to link line on Windows
2018-06-05 12:58:42 -05:00
luigi1111
5f46c41598 Merge pull request #1442
5bb24cf Update submodule for v0.12.2.0
2018-06-05 12:57:21 -05:00
iDunk5400
377c56d4a4 Add libwinscard to link line on Windows
This fixes monero-wallet-gui linking error in MSYS2 since PC/SC hw device support was added to Windows builds
2018-06-02 20:21:24 +02:00
dEBRUYNE-1
5bb24cfc92 Update submodule for v0.12.2.0 2018-06-02 19:19:47 +02:00
luigi1111
b40363cd88 Merge pull request #1432
a412ab7 Submodule: use v0.12.1.0 tag instead of branch
2018-05-27 08:38:04 -05:00
dEBRUYNE-1
a412ab7b80 Submodule: use v0.12.1.0 tag instead of branch 2018-05-27 13:05:50 +02:00
396 changed files with 48241 additions and 106852 deletions

View File

@@ -31,8 +31,7 @@ import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import moneroComponents.Wallet 1.0 import moneroComponents.Wallet 1.0
import moneroComponents.NetworkType 1.0 import moneroComponents.NetworkType 1.0
import moneroComponents.Clipboard 1.0 import "components"
import "components" as MoneroComponents
Rectangle { Rectangle {
id: panel id: panel
@@ -47,9 +46,8 @@ Rectangle {
property alias daemonProgressBar : daemonProgressBar property alias daemonProgressBar : daemonProgressBar
property alias minutesToUnlockTxt: unlockedBalanceLabel.text property alias minutesToUnlockTxt: unlockedBalanceLabel.text
property int titleBarHeight: 50 property int titleBarHeight: 50
property string copyValue: ""
Clipboard { id: clipboard }
signal dashboardClicked()
signal historyClicked() signal historyClicked()
signal transferClicked() signal transferClicked()
signal receiveClicked() signal receiveClicked()
@@ -60,15 +58,13 @@ Rectangle {
signal miningClicked() signal miningClicked()
signal signClicked() signal signClicked()
signal keysClicked() signal keysClicked()
signal merchantClicked()
signal accountClicked()
function selectItem(pos) { function selectItem(pos) {
menuColumn.previousButton.checked = false menuColumn.previousButton.checked = false
if(pos === "History") menuColumn.previousButton = historyButton if(pos === "Dashboard") menuColumn.previousButton = dashboardButton
else if(pos === "History") menuColumn.previousButton = historyButton
else if(pos === "Transfer") menuColumn.previousButton = transferButton else if(pos === "Transfer") menuColumn.previousButton = transferButton
else if(pos === "Receive") menuColumn.previousButton = receiveButton else if(pos === "Receive") menuColumn.previousButton = receiveButton
else if(pos === "Merchant") menuColumn.previousButton = merchantButton
else if(pos === "AddressBook") menuColumn.previousButton = addressBookButton else if(pos === "AddressBook") menuColumn.previousButton = addressBookButton
else if(pos === "Mining") menuColumn.previousButton = miningButton else if(pos === "Mining") menuColumn.previousButton = miningButton
else if(pos === "TxKey") menuColumn.previousButton = txkeyButton else if(pos === "TxKey") menuColumn.previousButton = txkeyButton
@@ -76,8 +72,7 @@ Rectangle {
else if(pos === "Sign") menuColumn.previousButton = signButton else if(pos === "Sign") menuColumn.previousButton = signButton
else if(pos === "Settings") menuColumn.previousButton = settingsButton else if(pos === "Settings") menuColumn.previousButton = settingsButton
else if(pos === "Advanced") menuColumn.previousButton = advancedButton else if(pos === "Advanced") menuColumn.previousButton = advancedButton
else if(pos === "Keys") menuColumn.previousButton = keysButton
else if(pos === "Account") menuColumn.previousButton = accountButton
menuColumn.previousButton.checked = true menuColumn.previousButton.checked = true
} }
@@ -100,7 +95,7 @@ Rectangle {
visible: true visible: true
z: 2 z: 2
id: column1 id: column1
height: 210 height: 200
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
@@ -115,10 +110,10 @@ Rectangle {
anchors.leftMargin: 20 anchors.leftMargin: 20
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
height: 490 * scaleRatio height: 490 * scaleRatio
width: 260 * scaleRatio width: 259 * scaleRatio
Image { Image {
width: 260; height: 170 width: 259; height: 170
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
source: "images/card-background.png" source: "images/card-background.png"
} }
@@ -148,37 +143,6 @@ Rectangle {
font.bold: true font.bold: true
color: "#ff9323" color: "#ff9323"
} }
Rectangle {
height: (logoutImage.height + 8) * scaleRatio
width: (logoutImage.width + 8) * scaleRatio
color: "transparent"
anchors.right: parent.right
anchors.rightMargin: 8
anchors.top: parent.top
anchors.topMargin: 25
Image {
id: logoutImage
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
height: 16 * scaleRatio
width: 13 * scaleRatio
source: "../images/logout.png"
}
MouseArea{
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: {
middlePanel.addressBookView.clearFields();
middlePanel.transferView.clearFields();
middlePanel.receiveView.clearFields();
appWindow.showWizard();
}
}
}
} }
Item { Item {
@@ -209,23 +173,6 @@ Rectangle {
} }
return defaultSize; return defaultSize;
} }
MouseArea {
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: {
parent.color = MoneroComponents.Style.orange
}
onExited: {
parent.color = MoneroComponents.Style.white
}
onClicked: {
console.log("Copied to clipboard");
clipboard.setText(parent.text);
appWindow.showStatusMessage(qsTr("Copied to clipboard"),3)
}
}
} }
Text { Text {
@@ -247,37 +194,19 @@ Rectangle {
} }
return defaultSize; return defaultSize;
} }
MouseArea {
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: {
parent.color = MoneroComponents.Style.orange
}
onExited: {
parent.color = MoneroComponents.Style.white
}
onClicked: {
console.log("Copied to clipboard");
clipboard.setText(parent.text);
appWindow.showStatusMessage(qsTr("Copied to clipboard"),3)
}
}
} }
MoneroComponents.Label { Label {
id: unlockedBalanceLabel id: unlockedBalanceLabel
visible: true visible: true
text: qsTr("Unlocked balance") + translationManager.emptyString text: qsTr("Unlocked balance") + translationManager.emptyString
fontSize: 14
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 20 anchors.leftMargin: 20
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 110 anchors.topMargin: 110
} }
MoneroComponents.Label { Label {
visible: !isMobile visible: !isMobile
id: balanceLabel id: balanceLabel
text: qsTr("Balance") + translationManager.emptyString text: qsTr("Balance") + translationManager.emptyString
@@ -286,14 +215,26 @@ Rectangle {
anchors.leftMargin: 20 anchors.leftMargin: 20
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 60 anchors.topMargin: 60
elide: Text.ElideRight
textWidth: 238
} }
Item { //separator Item { //separator
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
height: 1 height: 1
} }
/* Disable twitter/news panel
Image {
anchors.left: parent.left
anchors.verticalCenter: logo.verticalCenter
anchors.leftMargin: 19
source: appWindow.rightPanelExpanded ? "images/expandRightPanel.png" :
"images/collapseRightPanel.png"
}
MouseArea {
anchors.fill: parent
onClicked: appWindow.rightPanelExpanded = !appWindow.rightPanelExpanded
}
*/
} }
} }
} }
@@ -305,17 +246,19 @@ Rectangle {
anchors.right: parent.right anchors.right: parent.right
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.top: (isMobile)? parent.top : column1.bottom anchors.top: (isMobile)? parent.top : column1.bottom
anchors.topMargin: (isMobile)? 0 : 32
color: "transparent" color: "transparent"
Flickable { Flickable {
id:flicker id:flicker
contentHeight: menuColumn.height contentHeight: (progressBar.visible)? menuColumn.height + separator.height +
anchors.top: parent.top networkStatus.height + progressBar.height + daemonProgressBar.height :
anchors.bottom: networkStatus.top menuColumn.height + separator.height + networkStatus.height
width: parent.width anchors.fill: parent
clip: true clip: true
Column { Column {
id: menuColumn id: menuColumn
@@ -325,6 +268,34 @@ Rectangle {
clip: true clip: true
property var previousButton: transferButton property var previousButton: transferButton
// ------------- Dashboard tab ---------------
/*
MenuButton {
id: dashboardButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Dashboard") + translationManager.emptyString
symbol: qsTr("D") + translationManager.emptyString
dotColor: "#FFE00A"
checked: true
onClicked: {
parent.previousButton.checked = false
parent.previousButton = dashboardButton
panel.dashboardClicked()
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: dashboardButton.checked || transferButton.checked ? "#1C1C1C" : "#313131"
height: 1
}
*/
// top border // top border
Rectangle { Rectangle {
anchors.left: parent.left anchors.left: parent.left
@@ -334,32 +305,8 @@ Rectangle {
height: 1 height: 1
} }
// ------------- Account tab ---------------
MoneroComponents.MenuButton {
id: accountButton
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Account") + translationManager.emptyString
symbol: qsTr("T") + translationManager.emptyString
dotColor: "#44AAFF"
onClicked: {
parent.previousButton.checked = false
parent.previousButton = accountButton
panel.accountClicked()
}
}
Rectangle {
visible: accountButton.present
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
// ------------- Transfer tab --------------- // ------------- Transfer tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: transferButton id: transferButton
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -384,7 +331,7 @@ Rectangle {
// ------------- AddressBook tab --------------- // ------------- AddressBook tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: addressBookButton id: addressBookButton
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -409,7 +356,7 @@ Rectangle {
} }
// ------------- Receive tab --------------- // ------------- Receive tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: receiveButton id: receiveButton
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -431,36 +378,9 @@ Rectangle {
height: 1 height: 1
} }
// ------------- Merchant tab ---------------
MoneroComponents.MenuButton {
id: merchantButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Merchant") + translationManager.emptyString
symbol: qsTr("U") + translationManager.emptyString
dotColor: "#FF4F41"
under: receiveButton
onClicked: {
parent.previousButton.checked = false
parent.previousButton = merchantButton
panel.merchantClicked()
}
}
Rectangle {
visible: merchantButton.present && appWindow.walletMode >= 2
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 16
color: "#313131"
height: 1
}
// ------------- History tab --------------- // ------------- History tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: historyButton id: historyButton
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -483,9 +403,8 @@ Rectangle {
} }
// ------------- Advanced tab --------------- // ------------- Advanced tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: advancedButton id: advancedButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Advanced") + translationManager.emptyString text: qsTr("Advanced") + translationManager.emptyString
@@ -496,9 +415,8 @@ Rectangle {
parent.previousButton = advancedButton parent.previousButton = advancedButton
} }
} }
Rectangle { Rectangle {
visible: advancedButton.present && appWindow.walletMode >= 2 visible: advancedButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -507,9 +425,9 @@ Rectangle {
} }
// ------------- Mining tab --------------- // ------------- Mining tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: miningButton id: miningButton
visible: !isAndroid && !isIOS && appWindow.walletMode >= 2 visible: !isAndroid && !isIOS
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Mining") + translationManager.emptyString text: qsTr("Mining") + translationManager.emptyString
@@ -524,7 +442,7 @@ Rectangle {
} }
Rectangle { Rectangle {
visible: miningButton.present && appWindow.walletMode >= 2 visible: miningButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -532,9 +450,8 @@ Rectangle {
height: 1 height: 1
} }
// ------------- TxKey tab --------------- // ------------- TxKey tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: txkeyButton id: txkeyButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Prove/check") + translationManager.emptyString text: qsTr("Prove/check") + translationManager.emptyString
@@ -548,7 +465,7 @@ Rectangle {
} }
} }
Rectangle { Rectangle {
visible: txkeyButton.present && appWindow.walletMode >= 2 visible: txkeyButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -556,13 +473,12 @@ Rectangle {
height: 1 height: 1
} }
// ------------- Shared RingDB tab --------------- // ------------- Shared RingDB tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: sharedringdbButton id: sharedringdbButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Shared RingDB") + translationManager.emptyString text: qsTr("Shared RingDB") + translationManager.emptyString
symbol: qsTr("G") + translationManager.emptyString symbol: qsTr("A") + translationManager.emptyString
dotColor: "#FFD781" dotColor: "#FFD781"
under: advancedButton under: advancedButton
onClicked: { onClicked: {
@@ -572,7 +488,7 @@ Rectangle {
} }
} }
Rectangle { Rectangle {
visible: sharedringdbButton.present && appWindow.walletMode >= 2 visible: sharedringdbButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -582,9 +498,8 @@ Rectangle {
// ------------- Sign/verify tab --------------- // ------------- Sign/verify tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: signButton id: signButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Sign/verify") + translationManager.emptyString text: qsTr("Sign/verify") + translationManager.emptyString
@@ -598,7 +513,7 @@ Rectangle {
} }
} }
Rectangle { Rectangle {
visible: signButton.present && appWindow.walletMode >= 2 visible: signButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -606,7 +521,7 @@ Rectangle {
height: 1 height: 1
} }
// ------------- Settings tab --------------- // ------------- Settings tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: settingsButton id: settingsButton
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -628,9 +543,8 @@ Rectangle {
height: 1 height: 1
} }
// ------------- Sign/verify tab --------------- // ------------- Sign/verify tab ---------------
MoneroComponents.MenuButton { MenuButton {
id: keysButton id: keysButton
visible: appWindow.walletMode >= 2
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
text: qsTr("Seed & Keys") + translationManager.emptyString text: qsTr("Seed & Keys") + translationManager.emptyString
@@ -644,7 +558,7 @@ Rectangle {
} }
} }
Rectangle { Rectangle {
visible: settingsButton.present && appWindow.walletMode >= 2 visible: settingsButton.present
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 16 anchors.leftMargin: 16
@@ -667,18 +581,18 @@ Rectangle {
color: "transparent" color: "transparent"
} }
MoneroComponents.NetworkStatusItem { NetworkStatusItem {
id: networkStatus id: networkStatus
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.leftMargin: 5 * scaleRatio anchors.leftMargin: 0
anchors.rightMargin: 0 anchors.rightMargin: 0
anchors.bottom: (progressBar.visible)? progressBar.top : parent.bottom; anchors.bottom: (progressBar.visible)? progressBar.top : parent.bottom;
connected: Wallet.ConnectionStatus_Disconnected connected: Wallet.ConnectionStatus_Disconnected
height: 48 * scaleRatio height: 48 * scaleRatio
} }
MoneroComponents.ProgressBar { ProgressBar {
id: progressBar id: progressBar
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
@@ -688,7 +602,7 @@ Rectangle {
visible: networkStatus.connected visible: networkStatus.connected
} }
MoneroComponents.ProgressBar { ProgressBar {
id: daemonProgressBar id: daemonProgressBar
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right

View File

@@ -2,51 +2,32 @@
#include <QStandardPaths> #include <QStandardPaths>
#include <QFileInfo> #include <QFileInfo>
#include <QString> #include <QString>
#include <QDir>
#include <QDebug>
#include "Logger.h" #include "Logger.h"
#include "wallet/api/wallet2_api.h" #include "wallet/api/wallet2_api.h"
// default log path by OS (should be writable) // default log path by OS (should be writable)
static const QString defaultLogName = "monero-wallet-gui.log"; static const QString default_name = "monero-wallet-gui.log";
#if defined(Q_OS_IOS) #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
//AppDataLocation = "<APPROOT>/Library/Application Support"
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).at(0); static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).at(0);
static const QString appFolder = "monero-wallet-gui";
#elif defined(Q_OS_WIN) #elif defined(Q_OS_WIN)
//AppDataLocation = "C:/Users/<USER>/AppData/Roaming/<APPNAME>" static const QString osPath = QCoreApplication::applicationDirPath();
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).at(0);
static const QString appFolder = "monero-wallet-gui";
#elif defined(Q_OS_ANDROID)
//AppDataLocation = "<USER>/<APPNAME>/files"
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).at(1);
static const QString appFolder = "";
#elif defined(Q_OS_MAC) #elif defined(Q_OS_MAC)
//HomeLocation = "~" static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0) + "/Library/Logs";
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0);
static const QString appFolder = "Library/Logs";
#else // linux + bsd #else // linux + bsd
//HomeLocation = "~"
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0); static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0);
static const QString appFolder = ".bitmonero";
#endif #endif
// return the absolute path of the logfile and ensure path folder exists // return the absolute path of the logfile
const QString getLogPath(const QString logPath) const QString getLogPath(const QString logPath)
{ {
const QFileInfo fi(logPath); const QFileInfo fi(logPath);
if(!logPath.isEmpty() && !fi.isDir()) if(!logPath.isEmpty() && !fi.isDir())
return fi.absoluteFilePath(); return fi.absoluteFilePath();
else { else
QDir appDir(osPath + "/" + appFolder); return osPath + "/" + default_name;
if(!appDir.exists())
if(!appDir.mkpath("."))
qWarning() << "Logger: Cannot create log directory " + appDir.path();
return appDir.path() + "/" + defaultLogName;
}
} }

View File

@@ -29,17 +29,14 @@
import QtQml 2.0 import QtQml 2.0
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Controls 2.0 // QtQuick.Controls 2.0 isn't stable enough yet. Needs more testing.
//import QtQuick.Controls 2.0
import QtQuick.Controls 1.4 import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import moneroComponents.Wallet 1.0 import moneroComponents.Wallet 1.0
import "components" as MoneroComponents
import "./pages" import "./pages"
import "./pages/settings"
import "./pages/merchant"
import "components" as MoneroComponents
Rectangle { Rectangle {
id: root id: root
@@ -58,7 +55,6 @@ Rectangle {
property Transfer transferView: Transfer { } property Transfer transferView: Transfer { }
property Receive receiveView: Receive { } property Receive receiveView: Receive { }
property Merchant merchantView: Merchant { }
property TxKey txkeyView: TxKey { } property TxKey txkeyView: TxKey { }
property SharedRingDB sharedringdbView: SharedRingDB { } property SharedRingDB sharedringdbView: SharedRingDB { }
property History historyView: History { } property History historyView: History { }
@@ -67,7 +63,7 @@ Rectangle {
property Mining miningView: Mining { } property Mining miningView: Mining { }
property AddressBook addressBookView: AddressBook { } property AddressBook addressBookView: AddressBook { }
property Keys keysView: Keys { } property Keys keysView: Keys { }
property Account accountView: Account { }
signal paymentClicked(string address, string paymentId, string amount, int mixinCount, int priority, string description) signal paymentClicked(string address, string paymentId, string amount, int mixinCount, int priority, string description)
signal sweepUnmixableClicked() signal sweepUnmixableClicked()
@@ -75,16 +71,11 @@ Rectangle {
signal getProofClicked(string txid, string address, string message); signal getProofClicked(string txid, string address, string message);
signal checkProofClicked(string txid, string address, string message, string signature); signal checkProofClicked(string txid, string address, string message, string signature);
Rectangle {
// grey background on merchantView
visible: currentView === merchantView
color: MoneroComponents.Style.moneroGrey
anchors.fill: parent
}
Image { Image {
anchors.fill: parent anchors.left: parent.left
visible: currentView !== merchantView anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
source: "../images/middlePanelBg.jpg" source: "../images/middlePanelBg.jpg"
} }
@@ -116,6 +107,9 @@ Rectangle {
states: [ states: [
State { State {
name: "Dashboard"
PropertyChanges { }
}, State {
name: "History" name: "History"
PropertyChanges { target: root; currentView: historyView } PropertyChanges { target: root; currentView: historyView }
PropertyChanges { target: historyView; model: appWindow.currentWallet ? appWindow.currentWallet.historyModel : null } PropertyChanges { target: historyView; model: appWindow.currentWallet ? appWindow.currentWallet.historyModel : null }
@@ -123,15 +117,11 @@ Rectangle {
}, State { }, State {
name: "Transfer" name: "Transfer"
PropertyChanges { target: root; currentView: transferView } PropertyChanges { target: root; currentView: transferView }
PropertyChanges { target: mainFlickable; contentHeight: 700 * scaleRatio } PropertyChanges { target: mainFlickable; contentHeight: 1000 * scaleRatio }
}, State { }, State {
name: "Receive" name: "Receive"
PropertyChanges { target: root; currentView: receiveView } PropertyChanges { target: root; currentView: receiveView }
PropertyChanges { target: mainFlickable; contentHeight: receiveView.receiveHeight + 100 } PropertyChanges { target: mainFlickable; contentHeight: receiveView.receiveHeight + 100 }
}, State {
name: "Merchant"
PropertyChanges { target: root; currentView: merchantView }
PropertyChanges { target: mainFlickable; contentHeight: merchantView.merchantHeight + 100 }
}, State { }, State {
name: "TxKey" name: "TxKey"
PropertyChanges { target: root; currentView: txkeyView } PropertyChanges { target: root; currentView: txkeyView }
@@ -147,35 +137,30 @@ Rectangle {
}, State { }, State {
name: "Sign" name: "Sign"
PropertyChanges { target: root; currentView: signView } PropertyChanges { target: root; currentView: signView }
PropertyChanges { target: mainFlickable; contentHeight: 1000 * scaleRatio } PropertyChanges { target: mainFlickable; contentHeight: 1200 * scaleRatio }
}, State { }, State {
name: "Settings" name: "Settings"
PropertyChanges { target: root; currentView: settingsView } PropertyChanges { target: root; currentView: settingsView }
PropertyChanges { target: mainFlickable; contentHeight: settingsView.settingsHeight } PropertyChanges { target: mainFlickable; contentHeight: settingsView.settingsHeight + 100 }
}, State { }, State {
name: "Mining" name: "Mining"
PropertyChanges { target: root; currentView: miningView } PropertyChanges { target: root; currentView: miningView }
PropertyChanges { target: mainFlickable; contentHeight: 700 * scaleRatio} PropertyChanges { target: mainFlickable; contentHeight: minHeight }
}, State { }, State {
name: "Keys" name: "Keys"
PropertyChanges { target: root; currentView: keysView } PropertyChanges { target: root; currentView: keysView }
PropertyChanges { target: mainFlickable; contentHeight: keysView.keysHeight } PropertyChanges { target: mainFlickable; contentHeight: minHeight + 200 * scaleRatio }
}, State { }
name: "Account"
PropertyChanges { target: root; currentView: accountView }
PropertyChanges { target: mainFlickable; contentHeight: minHeight }
}
] ]
// color stripe at the top // color stripe at the top
Row { Row {
id: styledRow id: styledRow
visible: currentView !== merchantView
height: 4 height: 4
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
z: parent.z + 1
Rectangle { height: 4; width: parent.width / 5; color: "#FFE00A" } Rectangle { height: 4; width: parent.width / 5; color: "#FFE00A" }
Rectangle { height: 4; width: parent.width / 5; color: "#6B0072" } Rectangle { height: 4; width: parent.width / 5; color: "#6B0072" }
@@ -186,8 +171,8 @@ Rectangle {
ColumnLayout { ColumnLayout {
anchors.fill: parent anchors.fill: parent
anchors.margins: currentView !== merchantView ? 20 * scaleRatio : 0 anchors.margins: 18
anchors.topMargin: appWindow.persistentSettings.customDecorations ? 50 * scaleRatio : 0 anchors.topMargin: appWindow.persistentSettings.customDecorations ? 50 : 0
spacing: 0 spacing: 0
Flickable { Flickable {
@@ -196,20 +181,14 @@ Rectangle {
Layout.fillHeight: true Layout.fillHeight: true
clip: true clip: true
ScrollBar.vertical: ScrollBar {
parent: mainFlickable.parent
anchors.left: parent.right
anchors.leftMargin: 3
anchors.top: parent.top
anchors.topMargin: 4
anchors.bottom: parent.bottom
anchors.bottomMargin: persistentSettings.customDecorations ? 4 : 0
}
onFlickingChanged: { onFlickingChanged: {
releaseFocus(); releaseFocus();
} }
// Disabled scrollbars, gives crash on startup on windows
// ScrollIndicator.vertical: ScrollIndicator { }
// ScrollBar.vertical: ScrollBar { } // uncomment to test
// Views container // Views container
StackView { StackView {
id: stackView id: stackView

View File

@@ -9,7 +9,6 @@ Copyright (c) 2014-2018, The Monero Project
- Mail: [dev@getmonero.org](mailto:dev@getmonero.org) - Mail: [dev@getmonero.org](mailto:dev@getmonero.org)
- Github: [https://github.com/monero-project/monero-gui](https://github.com/monero-project/monero-gui) - Github: [https://github.com/monero-project/monero-gui](https://github.com/monero-project/monero-gui)
- IRC: [#monero-dev on Freenode](irc://chat.freenode.net/#monero-dev) - IRC: [#monero-dev on Freenode](irc://chat.freenode.net/#monero-dev)
- Translation platform (Pootle): [translate.getmonero.org](https://translate.getmonero.org)
## Vulnerability response ## Vulnerability response
@@ -56,13 +55,6 @@ There are also several mining pools that kindly donate a portion of their fees,
See [LICENSE](LICENSE). See [LICENSE](LICENSE).
## Translations
Do you speak a second language and would like to help translate the Monero GUI? Sign up at [translate.getmonero.org](https://translate.getmonero.org), our localization platform. Navigate to the 'monero-gui' project and find the language you can help with. Suggest changes or add new translated text.
&nbsp;
If you need help/support or any info you can contact the localization workgroup on the IRC channel #monero-translations (relayed on matrix/riot and MatterMost) or by email at translate[at]getmonero[dot]org. For more info about the Localization workgroup: [github.com/monero-ecosystem/monero-translations](https://github.com/monero-ecosystem/monero-translations)
## Installing the Monero GUI from a package ## Installing the Monero GUI from a package
Packages are available for Packages are available for
@@ -83,11 +75,11 @@ Packaging for your favorite distribution would be a welcome contribution!
- For Debian distributions (Debian, Ubuntu, Mint, Tails...) - For Debian distributions (Debian, Ubuntu, Mint, Tails...)
`sudo apt install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev` `sudo apt install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev`
- For Gentoo - For Gentoo
`sudo emerge app-arch/xz-utils app-doc/doxygen dev-cpp/gtest dev-libs/boost dev-libs/expat dev-libs/openssl dev-util/cmake media-gfx/graphviz net-dns/unbound net-libs/ldns net-libs/miniupnpc net-libs/zeromq sys-libs/libunwind dev-libs/libsodium dev-libs/hidapi` `sudo emerge app-arch/xz-utils app-doc/doxygen dev-cpp/gtest dev-libs/boost dev-libs/expat dev-libs/openssl dev-util/cmake media-gfx/graphviz net-dns/unbound net-libs/ldns net-libs/miniupnpc net-libs/zeromq sys-libs/libunwind`
2. Install Qt: 2. Install Qt:
@@ -95,7 +87,7 @@ Packaging for your favorite distribution would be a welcome contribution!
- For Ubuntu 17.10+ - For Ubuntu 17.10+
`sudo apt install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2` `sudo apt install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-folderlistmodel qttools5-dev-tools`
- For Gentoo - For Gentoo
@@ -122,7 +114,7 @@ Packaging for your favorite distribution would be a welcome contribution!
``` ```
cd monero-gui cd monero-gui
QT_SELECT=5 ./build.sh ./build.sh
``` ```
The executable can be found in the build/release/bin folder. The executable can be found in the build/release/bin folder.
@@ -199,15 +191,9 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names 3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names
``` ```
pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium
``` ```
Optional : To build the flag `WITH_SCANNER`
```
pacman -S mingw-w64-x86_64-zbar
```
You find more details about those dependencies in the [Monero documentation](https://github.com/monero-project/monero). Note that that there is no more need to compile Boost from source; like everything else, you can install it now with a MSYS2 package. You find more details about those dependencies in the [Monero documentation](https://github.com/monero-project/monero). Note that that there is no more need to compile Boost from source; like everything else, you can install it now with a MSYS2 package.
4. Install Qt5 4. Install Qt5
@@ -234,11 +220,9 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
``` ```
cd monero-gui cd monero-gui
source ./build.sh release-static ./build.sh
cd build cd build
make deploy make deploy
``` ```
**Note:** The use of `source` above is a dirty workaround for a suspected bug in the current QT version 5.11.2-3 available in the MSYS2 packaging system, see https://github.com/monero-project/monero-gui/issues/1559 for more info.
The executable can be found in the `.\release\bin` directory. The executable can be found in the `.\release\bin` directory.

View File

@@ -31,6 +31,7 @@ import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2 import QtQuick.Controls.Styles 1.2
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import "tabs"
import "components" import "components"
Rectangle { Rectangle {

View File

@@ -1,7 +1,6 @@
#!/bin/bash #!/bin/bash
BUILD_TYPE=$1 BUILD_TYPE=$1
BUILD_TREZOR=${BUILD_TREZOR-true}
source ./utils.sh source ./utils.sh
platform=$(get_platform) platform=$(get_platform)
# default build type # default build type
@@ -73,7 +72,6 @@ if [[ $platform == *bsd* ]]; then
fi fi
# build libwallet # build libwallet
export BUILD_TREZOR
./get_libwallet_api.sh $BUILD_TYPE ./get_libwallet_api.sh $BUILD_TYPE
# build zxcvbn # build zxcvbn

View File

@@ -38,7 +38,3 @@ void clipboardAdapter::setText(const QString &text) {
m_pClipboard->setText(text, QClipboard::Clipboard); m_pClipboard->setText(text, QClipboard::Clipboard);
m_pClipboard->setText(text, QClipboard::Selection); m_pClipboard->setText(text, QClipboard::Selection);
} }
QString clipboardAdapter::text() const {
return m_pClipboard->text();
}

View File

@@ -39,7 +39,6 @@ class clipboardAdapter : public QObject
public: public:
explicit clipboardAdapter(QObject *parent = 0); explicit clipboardAdapter(QObject *parent = 0);
Q_INVOKABLE void setText(const QString &text); Q_INVOKABLE void setText(const QString &text);
Q_INVOKABLE QString text() const;
private: private:
QClipboard *m_pClipboard; QClipboard *m_pClipboard;

View File

@@ -28,13 +28,11 @@
import QtQuick 2.0 import QtQuick 2.0
import moneroComponents.Clipboard 1.0 import moneroComponents.Clipboard 1.0
import "../js/TxUtils.js" as TxUtils
ListView { ListView {
id: listView id: listView
clip: true clip: true
boundsBehavior: ListView.StopAtBounds boundsBehavior: ListView.StopAtBounds
property bool selectAndSend: false
footer: Rectangle { footer: Rectangle {
height: 127 height: 127
@@ -58,11 +56,6 @@ ListView {
color: "transparent" color: "transparent"
z: listView.count - index z: listView.count - index
function collapseDropdown() { dropdown.expanded = false } function collapseDropdown() { dropdown.expanded = false }
function doSend() {
console.log("Sending to: ", address +" "+ paymentId);
middlePanel.sendTo(address, paymentId, description);
leftPanel.selectItem(middlePanel.state)
}
Text { Text {
id: descriptionText id: descriptionText
@@ -95,13 +88,7 @@ ListView {
font.family: "Arial" font.family: "Arial"
font.pixelSize: 16 font.pixelSize: 16
color: "#ffffff" color: "#ffffff"
text: { text: address
if(isMobile){
TxUtils.addressTruncate(address, 6);
} else {
return TxUtils.addressTruncate(address, 10);
}
}
readOnly: true readOnly: true
} }
@@ -130,13 +117,7 @@ ListView {
font.family: "Arial" font.family: "Arial"
font.pixelSize: 13 font.pixelSize: 13
color: "#545454" color: "#545454"
text: { text: paymentId
if(isMobile){
TxUtils.addressTruncate(paymentId, 6);
} else {
return TxUtils.addressTruncate(paymentId, 10);
}
}
} }
ListModel { ListModel {
@@ -154,7 +135,6 @@ ListView {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.rightMargin: 5 anchors.rightMargin: 5
dataModel: dropModel dataModel: dropModel
visible: !listView.selectAndSend
z: 1 z: 1
onExpandedChanged: { onExpandedChanged: {
if(expanded) { if(expanded) {
@@ -170,7 +150,9 @@ ListView {
appWindow.showStatusMessage(qsTr("Address copied to clipboard"),3) appWindow.showStatusMessage(qsTr("Address copied to clipboard"),3)
} }
else if(option === 1){ else if(option === 1){
doSend() console.log("Sending to: ", address +" "+ paymentId);
middlePanel.sendTo(address, paymentId, description);
leftPanel.selectItem(middlePanel.state)
} else if(option === 2){ } else if(option === 2){
console.log("Delete: ", rowId); console.log("Delete: ", rowId);
currentWallet.addressBookModel.deleteRow(rowId); currentWallet.addressBookModel.deleteRow(rowId);
@@ -185,14 +167,5 @@ ListView {
height: 1 height: 1
color: "#404040" color: "#404040"
} }
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
visible: listView.selectAndSend
onClicked: {
doSend();
}
}
} }
} }

View File

@@ -31,20 +31,17 @@ import QtQuick.Layouts 1.1
import "../components" as MoneroComponents import "../components" as MoneroComponents
Item { RowLayout {
id: checkBox id: checkBox
property alias text: label.text property alias text: label.text
property string checkedIcon: "../images/checkedIcon-black.png" property string checkedIcon: "../images/checkedIcon-black.png"
property string uncheckedIcon property string uncheckedIcon
property bool checked: false property bool checked: false
property alias background: backgroundRect.color property alias background: backgroundRect.color
property bool border: true
property int fontSize: 14 * scaleRatio property int fontSize: 14 * scaleRatio
property alias fontColor: label.color property alias fontColor: label.color
property bool iconOnTheLeft: true
signal clicked() signal clicked()
height: 25 * scaleRatio height: 25 * scaleRatio
width: checkBoxLayout.width
function toggle(){ function toggle(){
checkBox.checked = !checkBox.checked checkBox.checked = !checkBox.checked
@@ -52,38 +49,42 @@ Item {
} }
RowLayout { RowLayout {
id: checkBoxLayout Layout.fillWidth: true
layoutDirection: iconOnTheLeft ? Qt.LeftToRight : Qt.RightToLeft Rectangle {
spacing: (!isMobile ? 10 : 8) * scaleRatio anchors.left: parent.left
width: 25 * scaleRatio
height: checkBox.height - 1
radius: 3
y: 0
color: "transparent"
border.color:
if(checkBox.checked){
return MoneroComponents.Style.inputBorderColorActive;
} else {
return MoneroComponents.Style.inputBorderColorInActive;
}
}
Item { Rectangle {
id: checkMark id: backgroundRect
height: checkBox.height anchors.left: parent.left
width: checkBox.height width: 25 * scaleRatio
height: checkBox.height - 1
Rectangle { y: 1
id: backgroundRect color: "transparent"
anchors.fill: parent
radius: 3
color: "transparent"
border.color:
if(checkBox.checked){
return MoneroComponents.Style.inputBorderColorActive;
} else {
return MoneroComponents.Style.inputBorderColorInActive;
}
visible: checkBox.border
}
Image { Image {
anchors.centerIn: parent anchors.centerIn: parent
source: { source: checkBox.checkedIcon
if (checkBox.checked || checkBox.uncheckedIcon == "") { visible: checkBox.checked
return checkBox.checkedIcon; }
}
return checkBox.uncheckedIcon; MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
toggle()
} }
visible: checkBox.checked || checkBox.uncheckedIcon != ""
} }
} }
@@ -92,16 +93,17 @@ Item {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: checkBox.fontSize font.pixelSize: checkBox.fontSize
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
textFormat: Text.RichText
wrapMode: Text.Wrap wrapMode: Text.Wrap
} Layout.fillWidth: true
} anchors.left: backgroundRect.right
anchors.leftMargin: !isMobile ? 10 : 8
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onClicked: { onClicked: {
toggle() toggle()
}
}
} }
} }
} }

View File

@@ -28,7 +28,6 @@
import QtQuick 2.0 import QtQuick 2.0
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtGraphicalEffects 1.0
import "." 1.0 import "." 1.0
RowLayout { RowLayout {
@@ -41,7 +40,6 @@ RowLayout {
property int fontSize: 14 * scaleRatio property int fontSize: 14 * scaleRatio
property alias fontColor: label.color property alias fontColor: label.color
property int textMargin: 8 * scaleRatio property int textMargin: 8 * scaleRatio
property bool darkDropIndicator: false
signal clicked() signal clicked()
height: 25 * scaleRatio height: 25 * scaleRatio
@@ -57,6 +55,7 @@ RowLayout {
height: label.height height: label.height
width: (label.width + indicatorRect.width + checkBox.textMargin) width: (label.width + indicatorRect.width + checkBox.textMargin)
color: "transparent" color: "transparent"
anchors.left: parent.left
Text { Text {
id: label id: label
@@ -75,19 +74,12 @@ RowLayout {
anchors.left: label.right anchors.left: label.right
anchors.leftMargin: textMargin anchors.leftMargin: textMargin
color: "transparent" color: "transparent"
rotation: checkBox.checked ? 180 * scaleRatio : 0
Image { Image {
id: indicatorImage id: indicatorImage
anchors.centerIn: parent anchors.centerIn: parent
source: "../images/whiteDropIndicator.png" source: "../images/whiteDropIndicator.png"
visible: !darkDropIndicator rotation: checkBox.checked ? 180 * scaleRatio : 0
}
ColorOverlay {
anchors.fill: indicatorImage
source: indicatorImage
color: "#FF000000"
visible: darkDropIndicator
} }
} }

View File

@@ -87,17 +87,10 @@ Window {
anchors.margins: 35 * scaleRatio anchors.margins: 35 * scaleRatio
spacing: 20 * scaleRatio spacing: 20 * scaleRatio
Item { RowLayout {
Layout.fillHeight: true id: content
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true
Rectangle {
anchors.fill: parent
color: "transparent"
border.color: MoneroComponents.Style.inputBorderColorActive
border.width: 1
radius: 4
}
Flickable { Flickable {
id: flickable id: flickable
@@ -108,12 +101,20 @@ Window {
textFormat: TextEdit.RichText textFormat: TextEdit.RichText
selectByMouse: true selectByMouse: true
selectByKeyboard: true selectByKeyboard: true
font.family: MoneroComponents.Style.defaultFontColor anchors.fill: parent
font.family: "Ariel"
font.pixelSize: 14 * scaleRatio font.pixelSize: 14 * scaleRatio
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor selectionColor: MoneroComponents.Style.dimmedFontColor
wrapMode: TextEdit.Wrap wrapMode: TextEdit.Wrap
readOnly: true readOnly: true
background: Rectangle {
color: "transparent"
anchors.fill: parent
border.color: Qt.rgba(255, 255, 255, 0.25);
border.width: 1
radius: 4
}
function logCommand(msg){ function logCommand(msg){
msg = log_color(msg, "lime"); msg = log_color(msg, "lime");
textArea.append(msg); textArea.append(msg);
@@ -155,7 +156,15 @@ Window {
} }
} }
ScrollBar.vertical: ScrollBar {} ScrollBar.vertical: ScrollBar {
// TODO: scrollbar always visible is buggy.
// QT 5.9 introduces `policy: ScrollBar.AlwaysOn`
contentItem.opacity: 1
anchors.top: flickable.top
anchors.left: flickable.right
anchors.leftMargin: 10 * scaleRatio
anchors.bottom: flickable.bottom
}
} }
} }

View File

@@ -0,0 +1,252 @@
// Copyright (c) 2014-2018, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.0
import moneroComponents.Clipboard 1.0
ListView {
id: listView
clip: true
boundsBehavior: ListView.StopAtBounds
footer: Rectangle {
height: 127
width: listView.width
color: "#FFFFFF"
Text {
anchors.centerIn: parent
font.family: "Arial"
font.pixelSize: 14
color: "#545454"
text: qsTr("No more results") + translationManager.emptyString
}
}
property var previousItem
delegate: Rectangle {
id: delegate
height: 90
width: listView.width
color: index % 2 ? "#F8F8F8" : "#FFFFFF"
z: listView.count - index
function collapseDropdown() { dropdown.expanded = false }
Row {
id: row1
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: 14
Rectangle {
id: dot
width: 14
height: width
radius: width / 2
color: out ? "#FF4F41" : "#36B05B"
}
Item { //separator
width: 12
height: 14
}
Text {
id: descriptionText
width: text.length ? (descriptionArea.containsMouse ? parent.width - x - 12 : 120) : 0
anchors.verticalCenter: dot.verticalCenter
font.family: "Arial"
font.bold: true
font.pixelSize: 19
color: "#444444"
elide: Text.ElideRight
text: description
MouseArea {
id: descriptionArea
anchors.fill: parent
hoverEnabled: true
}
}
Item { //separator
width: descriptionText.width ? 12 : 0
height: 14
visible: !descriptionArea.containsMouse
}
Text {
id: addressText
anchors.verticalCenter: dot.verticalCenter
width: parent.width - x - 12
elide: Text.ElideRight
font.family: "Arial"
font.pixelSize: 14
color: "#545454"
text: address
visible: !descriptionArea.containsMouse
}
}
Row {
anchors.left: parent.left
anchors.top: row1.bottom
anchors.topMargin: 8
spacing: 12
Item { //separator
width: 14
height: 14
}
Column {
anchors.top: parent.top
width: 215
Text {
anchors.left: parent.left
font.family: "Arial"
font.pixelSize: 12
color: "#545454"
text: qsTr("Date") + translationManager.emptyString
}
Row {
anchors.left: parent.left
anchors.right: parent.right
spacing: 33
Text {
font.family: "Arial"
font.pixelSize: 18
color: "#000000"
text: date
}
Text {
font.family: "Arial"
font.pixelSize: 18
color: "#000000"
text: time
}
}
}
Column {
anchors.top: parent.top
width: 148
Text {
anchors.left: parent.left
font.family: "Arial"
font.pixelSize: 12
color: "#545454"
text: qsTr("Balance") + translationManager.emptyString
}
Text {
font.family: "Arial"
font.pixelSize: 18
color: "#000000"
text: balance
}
}
Column {
anchors.top: parent.top
width: 148
Text {
anchors.left: parent.left
font.family: "Arial"
font.pixelSize: 12
color: "#545454"
text: qsTr("Amount") + translationManager.emptyString
}
Row {
spacing: 2
Text {
anchors.bottom: parent.bottom
anchors.bottomMargin: 3
font.family: "Arial"
font.pixelSize: 16
color: out ? "#FF4F41" : "#36B05B"
text: out ? "↓" : "↑"
}
Text {
anchors.bottom: parent.bottom
font.family: "Arial"
font.pixelSize: 18
color: out ? "#FF4F41" : "#36B05B"
text: amount
}
}
}
}
ListModel {
id: dropModel
ListElement { name: "<b>Copy address to clipboard</b>"; icon: "../images/dropdownCopy.png" }
ListElement { name: "<b>Add to address book</b>"; icon: "../images/dropdownAdd.png" }
ListElement { name: "<b>Send to this address</b>"; icon: "../images/dropdownSend.png" }
ListElement { name: "<b>Find similar transactions</b>"; icon: "../images/dropdownSearch.png" }
}
Clipboard { id: clipboard }
TableDropdown {
id: dropdown
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.bottomMargin: 11
anchors.rightMargin: 5
dataModel: dropModel
z: 1
onExpandedChanged: {
if(expanded) {
listView.previousItem = delegate
listView.currentIndex = index
}
}
onOptionClicked: {
if(option === 0)
clipboard.setText(address)
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 1
color: "#DBDBDB"
}
}
}

View File

@@ -384,9 +384,7 @@ Item {
Image { Image {
anchors.centerIn: parent anchors.centerIn: parent
source: "../images/prevMonth.png" source: "../images/nextMonth.png"
transformOrigin: Item.Center
rotation: 180
} }
MouseArea { MouseArea {

View File

@@ -41,18 +41,16 @@ ListView {
property int rowSpacing: 12 property int rowSpacing: 12
property var addressBookModel: null property var addressBookModel: null
function buildTxDetailsString(tx_id, paymentId, tx_key,tx_note, destinations, rings, address, address_label) { function buildTxDetailsString(tx_id, paymentId, tx_key,tx_note, destinations, rings) {
var trStart = '<tr><td width="85" style="padding-top:5px"><b>', var trStart = '<tr><td width="85" style="padding-top:5px"><b>',
trMiddle = '</b></td><td style="padding-left:10px;padding-top:5px;">', trMiddle = '</b></td><td style="padding-left:10px;padding-top:5px;">',
trEnd = "</td></tr>"; trEnd = "</td></tr>";
return '<table border="0">' return '<table border="0">'
+ (tx_id ? trStart + qsTr("Tx ID:") + trMiddle + tx_id + trEnd : "") + (tx_id ? trStart + qsTr("Tx ID:") + trMiddle + tx_id + trEnd : "")
+ (address_label ? trStart + qsTr("Address label:") + trMiddle + address_label + trEnd : "") + (paymentId ? trStart + qsTr("Payment ID:") + trMiddle + paymentId + trEnd : "")
+ (address ? trStart + qsTr("Address:") + trMiddle + address + trEnd : "")
+ (paymentId ? trStart + qsTr("Payment ID:") + trMiddle + paymentId + trEnd : "")
+ (tx_key ? trStart + qsTr("Tx key:") + trMiddle + tx_key + trEnd : "") + (tx_key ? trStart + qsTr("Tx key:") + trMiddle + tx_key + trEnd : "")
+ (tx_note ? trStart + qsTr("Tx note:") + trMiddle + tx_note + trEnd : "") + (tx_note ? trStart + qsTr("Tx note:") + trMiddle + tx_note + trEnd : "")
+ (destinations ? trStart + qsTr("Destinations:") + trMiddle + destinations + trEnd : "") + (destinations ? trStart + qsTr("Destinations:") + trMiddle + destinations + trEnd : "")
+ (rings ? trStart + qsTr("Rings:") + trMiddle + rings + trEnd : "") + (rings ? trStart + qsTr("Rings:") + trMiddle + rings + trEnd : "")
+ "</table>" + "</table>"
@@ -140,9 +138,9 @@ ListView {
Image { Image {
id: arrowImage id: arrowImage
source: isOut ? "../images/downArrow.png" : confirmationsRequired === 60 ? "../images/miningxmr.png" : "../images/upArrow-green.png" source: isOut ? "../images/downArrow.png" : "../images/upArrow-green.png"
height: 18 * scaleRatio height: 18 * scaleRatio
width: (confirmationsRequired === 60 ? 18 : 12) * scaleRatio width: 12 * scaleRatio
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 12 * scaleRatio anchors.topMargin: 12 * scaleRatio
} }
@@ -153,7 +151,7 @@ ListView {
anchors.leftMargin: 18 * scaleRatio anchors.leftMargin: 18 * scaleRatio
font.family: MoneroComponents.Style.fontLight.name font.family: MoneroComponents.Style.fontLight.name
font.pixelSize: 14 * scaleRatio font.pixelSize: 14 * scaleRatio
text: isOut ? qsTr("Sent") + translationManager.emptyString : qsTr("Received") + translationManager.emptyString text: isOut ? "Sent" : "Received"
color: "#808080" color: "#808080"
} }
@@ -177,23 +175,7 @@ ListView {
return _amount + " XMR"; return _amount + " XMR";
} }
color: isOut ? MoneroComponents.Style.white : MoneroComponents.Style.green color: isOut ? "white" : "#2eb358"
MouseArea {
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: {
parent.color = MoneroComponents.Style.orange
}
onExited: {
parent.color = isOut ? MoneroComponents.Style.white : MoneroComponents.Style.green }
onClicked: {
console.log("Copied to clipboard");
clipboard.setText(parent.text.split(" ")[0]);
appWindow.showStatusMessage(qsTr("Copied to clipboard"),3)
}
}
} }
Rectangle { Rectangle {
@@ -216,7 +198,7 @@ ListView {
anchors.left: dateLabel.right anchors.left: dateLabel.right
anchors.leftMargin: 7 * scaleRatio anchors.leftMargin: 7 * scaleRatio
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 1 * scaleRatio anchors.topMargin: 3 * scaleRatio
font.pixelSize: 12 * scaleRatio font.pixelSize: 12 * scaleRatio
text: time text: time
color: "#808080" color: "#808080"
@@ -236,7 +218,7 @@ ListView {
address = TxUtils.destinationsToAddress(destinations); address = TxUtils.destinationsToAddress(destinations);
if(address){ if(address){
var truncated = TxUtils.addressTruncate(address); var truncated = TxUtils.addressTruncate(address);
return qsTr("To ") + translationManager.emptyString + truncated; return "To " + truncated;
} else { } else {
return "Unknown recipient"; return "Unknown recipient";
} }
@@ -311,7 +293,7 @@ ListView {
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 30 * scaleRatio anchors.leftMargin: 30 * scaleRatio
labelHeader: qsTr("Transaction ID") + translationManager.emptyString labelHeader: "Transaction ID"
labelValue: hash.substring(0, 18) + "..." labelValue: hash.substring(0, 18) + "..."
copyValue: hash copyValue: hash
} }
@@ -376,15 +358,14 @@ ListView {
// right column // right column
MoneroComponents.HistoryTableInnerColumn { MoneroComponents.HistoryTableInnerColumn {
visible: currentWallet.getUserNote(hash)
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 80 * scaleRatio anchors.rightMargin: 80 * scaleRatio
width: 220 * scaleRatio width: 220 * scaleRatio
height: parent.height height: parent.height
color: "transparent" color: "transparent"
hashValue: hash
labelHeader: qsTr("Description") + translationManager.emptyString
labelHeaderIconImageSource: "../images/editIcon.png"
labelHeader: qsTr("Description")
labelValue: { labelValue: {
var note = currentWallet.getUserNote(hash); var note = currentWallet.getUserNote(hash);
if(note){ if(note){
@@ -394,10 +375,9 @@ ListView {
return note; return note;
} }
} else { } else {
return qsTr("None") + translationManager.emptyString; return "";
} }
} }
copyValue: { copyValue: {
return currentWallet.getUserNote(hash); return currentWallet.getUserNote(hash);
} }
@@ -472,12 +452,10 @@ ListView {
var tx_key = currentWallet.getTxKey(hash) var tx_key = currentWallet.getTxKey(hash)
var tx_note = currentWallet.getUserNote(hash) var tx_note = currentWallet.getUserNote(hash)
var rings = currentWallet.getRings(hash) var rings = currentWallet.getRings(hash)
var address_label = subaddrIndex == 0 ? qsTr("Primary address") : currentWallet.getSubaddressLabel(subaddrAccount, subaddrIndex)
var address = currentWallet.address(subaddrAccount, subaddrIndex)
if (rings) if (rings)
rings = rings.replace(/\|/g, '\n') rings = rings.replace(/\|/g, '\n')
informationPopup.title = "Transaction details"; informationPopup.title = "Transaction details";
informationPopup.content = buildTxDetailsString(hash,paymentId,tx_key,tx_note,destinations, rings, address, address_label); informationPopup.content = buildTxDetailsString(hash,paymentId,tx_key,tx_note,destinations, rings);
informationPopup.onCloseCallback = null informationPopup.onCloseCallback = null
informationPopup.open(); informationPopup.open();
} }

View File

@@ -33,7 +33,7 @@ import moneroComponents.Clipboard 1.0
import moneroComponents.PendingTransaction 1.0 import moneroComponents.PendingTransaction 1.0
import moneroComponents.Wallet 1.0 import moneroComponents.Wallet 1.0
import "." as MoneroComponents import "../components" as MoneroComponents
Rectangle{ Rectangle{
@@ -44,81 +44,48 @@ Rectangle{
color: "transparent" color: "transparent"
property string copyValue: "" property string copyValue: ""
property string hashValue: ""
property alias labelHeader: label1.text property alias labelHeader: label1.text
property alias labelValue: label2.text property alias labelValue: label2.text
property alias labelHeaderIcon: icon
property alias labelHeaderIconImageSource: icon.imageSource
ColumnLayout { Text {
Layout.fillWidth: true id: label1
spacing: 2 * scaleRatio anchors.left: parent.left
font.family: MoneroComponents.Style.fontRegular.name
RowLayout { font.pixelSize: 14 * scaleRatio
Layout.fillWidth: true text: labelHeader
color: MoneroComponents.Style.greyFontColor
Text {
id: label1
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14 * scaleRatio
text: labelHeader
color: MoneroComponents.Style.dimmedFontColor
}
MoneroComponents.IconButton {
id: icon
visible: imageSource !== ""
Layout.leftMargin: 8 * scaleRatio
width: image.width
height: image.height
onClicked: {
editDescription(hashValue);
}
}
}
Text {
id: label2
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14 * scaleRatio
text: labelValue
color: MoneroComponents.Style.dimmedFontColor
MouseArea {
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: {
label1.color = MoneroComponents.Style.defaultFontColor;
label2.color = MoneroComponents.Style.defaultFontColor;
}
onExited: {
label1.color = MoneroComponents.Style.dimmedFontColor;
label2.color = MoneroComponents.Style.dimmedFontColor;
}
onClicked: {
if(copyValue){
console.log("Copied to clipboard");
clipboard.setText(copyValue);
appWindow.showStatusMessage(qsTr("Copied to clipboard"),3)
}
}
}
}
} }
function editDescription(_hash){ Text {
inputDialog.labelText = qsTr("Set description:") + translationManager.emptyString; id: label2
inputDialog.onAcceptedCallback = function() { anchors.left: parent.left
appWindow.currentWallet.setUserNote(_hash, inputDialog.inputText); anchors.top: label1.bottom
appWindow.showStatusMessage(qsTr("Updated description."),3); font.family: MoneroComponents.Style.fontRegular.name
middlePanel.historyView.update(); font.pixelSize: 14 * scaleRatio
text: labelValue
color: MoneroComponents.Style.dimmedFontColor
}
// hover effect / copy value
MouseArea {
visible: copyValue !== ""
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: {
label1.color = MoneroComponents.Style.defaultFontColor;
label2.color = MoneroComponents.Style.defaultFontColor;
}
onExited: {
label1.color = MoneroComponents.Style.greyFontColor;
label2.color = MoneroComponents.Style.dimmedFontColor;
}
onClicked: {
if(copyValue){
console.log("Copied to clipboard");
clipboard.setText(copyValue);
appWindow.showStatusMessage(qsTr("Copied to clipboard"),3)
}
} }
inputDialog.onRejectedCallback = null;
inputDialog.open()
} }
} }

View File

@@ -35,6 +35,7 @@ Item {
signal clicked(var mouse) signal clicked(var mouse)
id: button id: button
width: parent.height width: parent.height
height: parent.height height: parent.height
@@ -46,13 +47,13 @@ Item {
id: buttonImage id: buttonImage
source: "" source: ""
x : (parent.width - width) / 2 x : (parent.width - width) / 2
y : (parent.height - height) / 2 y : (parent.height - height) /2
z: 100 z: 100
} }
MouseArea { MouseArea {
id: buttonArea id: buttonArea
anchors.fill: buttonImage anchors.fill: parent
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
@@ -60,21 +61,14 @@ Item {
buttonImage.x = buttonImage.x + 2 buttonImage.x = buttonImage.x + 2
buttonImage.y = buttonImage.y + 2 buttonImage.y = buttonImage.y + 2
} }
onReleased: { onReleased: {
buttonImage.x = (parent.width - width) / 2 buttonImage.x = buttonImage.x - 2
buttonImage.y = (parent.height - height) / 2 buttonImage.y = buttonImage.y - 2
}
onExited: {
if (pressed) {
buttonImage.x = (parent.width - width) / 2
buttonImage.y = (parent.height - height) / 2
}
} }
onClicked: { onClicked: {
parent.clicked(mouse) parent.clicked(mouse)
} }
} }
} }

View File

@@ -33,22 +33,15 @@ import "../components" as MoneroComponents
Item { Item {
id: inlineButton id: inlineButton
height: parent.height height: rect.height * scaleRatio
anchors.top: parent.top
anchors.bottom: parent.bottom
property bool small: false
property string shadowPressedColor: "#B32D00" property string shadowPressedColor: "#B32D00"
property string shadowReleasedColor: "#FF4304" property string shadowReleasedColor: "#FF4304"
property string pressedColor: "#FF4304" property string pressedColor: "#FF4304"
property string releasedColor: "#FF6C3C" property string releasedColor: "#FF6C3C"
property string icon: "" property string icon: ""
property string textColor: "#FFFFFF" property string textColor: "#FFFFFF"
property int fontSize: small ? 14 * scaleRatio : 16 * scaleRatio property int fontSize: 12 * scaleRatio
property int rectHeight: small ? 24 * scaleRatio : 28 * scaleRatio
property int rectHMargin: small ? 16 * scaleRatio : 22 * scaleRatio
property alias text: inlineText.text property alias text: inlineText.text
property alias buttonColor: rect.color
signal clicked() signal clicked()
function doClick() { function doClick() {
@@ -62,29 +55,22 @@ Item {
color: MoneroComponents.Style.buttonBackgroundColorDisabled color: MoneroComponents.Style.buttonBackgroundColorDisabled
border.color: "black" border.color: "black"
height: 28 * scaleRatio height: 28 * scaleRatio
width: inlineText.text ? (inlineText.width + 22) * scaleRatio : inlineButton.icon ? (inlineImage.width + 16) * scaleRatio : rect.height width: inlineText.width + 22 * scaleRatio
radius: 4 radius: 4
anchors.verticalCenter: parent.verticalCenter anchors.top: parent.top
anchors.right: parent.right anchors.right: parent.right
Text { Text {
id: inlineText id: inlineText
font.family: MoneroComponents.Style.fontBold.name font.family: MoneroComponents.Style.fontBold.name
font.bold: true font.bold: true
font.pixelSize: inlineButton.fontSize font.pixelSize: 16 * scaleRatio
color: "black" color: "black"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }
Image {
id: inlineImage
visible: inlineButton.icon !== ""
anchors.centerIn: parent
source: inlineButton.icon
}
MouseArea { MouseArea {
id: buttonArea id: buttonArea
cursorShape: rect.enabled ? Qt.PointingHandCursor : Qt.ArrowCursor cursorShape: rect.enabled ? Qt.PointingHandCursor : Qt.ArrowCursor
@@ -92,12 +78,12 @@ Item {
anchors.fill: parent anchors.fill: parent
onClicked: doClick() onClicked: doClick()
onEntered: { onEntered: {
rect.color = buttonColor ? buttonColor : "#707070"; rect.color = "#707070";
rect.opacity = 0.8; rect.opacity = 0.8;
} }
onExited: { onExited: {
rect.opacity = 1.0; rect.opacity = 1.0;
rect.color = buttonColor ? buttonColor : "#808080"; rect.color = "#808080";
} }
} }
} }

View File

@@ -65,7 +65,7 @@ Item {
} }
ColumnLayout { ColumnLayout {
z: parent.z + 1 z: bg.z + 1
id: mainLayout id: mainLayout
spacing: 10 spacing: 10
anchors { fill: parent; margins: 35 } anchors { fill: parent; margins: 35 }
@@ -79,6 +79,7 @@ Item {
Label { Label {
id: label id: label
anchors.left: parent.left
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@@ -92,6 +93,7 @@ Item {
focus: true focus: true
Layout.topMargin: 6 Layout.topMargin: 6
Layout.fillWidth: true Layout.fillWidth: true
anchors.left: parent.left
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
verticalAlignment: TextInput.AlignVCenter verticalAlignment: TextInput.AlignVCenter
font.family: MoneroComponents.Style.fontLight.name font.family: MoneroComponents.Style.fontLight.name
@@ -101,8 +103,6 @@ Item {
leftPadding: 10 leftPadding: 10
topPadding: 10 topPadding: 10
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
background: Rectangle { background: Rectangle {
radius: 2 radius: 2

View File

@@ -32,33 +32,36 @@ import QtQuick 2.7
import "../js/TxUtils.js" as TxUtils import "../js/TxUtils.js" as TxUtils
import "../components" as MoneroComponents import "../components" as MoneroComponents
TextArea {
property int fontSize: 18 * scaleRatio
property bool fontBold: false
property string fontColor: MoneroComponents.Style.defaultFontColor
property bool mouseSelection: true TextArea {
property bool error: false property bool error: false
property bool addressValidation: false property bool addressValidation: false
property bool wrapAnywhere: true
property int fontSize: 18 * scaleRatio
property bool fontBold: false
id: textArea id: textArea
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
color: fontColor
font.pixelSize: fontSize font.pixelSize: fontSize
font.bold: fontBold font.bold: fontBold
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
selectByMouse: mouseSelection selectByMouse: true
color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor selectedTextColor: MoneroComponents.Style.defaultFontColor
property int minimumHeight: 100 * scaleRatio wrapMode: {
height: contentHeight > minimumHeight ? contentHeight : minimumHeight if(wrapAnywhere){
return Text.WrapAnywhere;
} else {
return Text.WordWrap;
}
}
onTextChanged: { onTextChanged: {
if(addressValidation){ if(addressValidation){
// js replacement for `RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g }` // js replacement for `RegExpValidator { regExp: /[0-9A-Fa-f]{95}/g }`
textArea.text = textArea.text.replace(/[^a-z0-9.@\-]/gi,''); textArea.text = textArea.text.replace(/[^a-z0-9.@]/gi,'');
var address_ok = TxUtils.checkAddress(textArea.text, appWindow.persistentSettings.nettype) || TxUtils.isValidOpenAliasAddress(textArea.text); var address_ok = TxUtils.checkAddress(textArea.text, appWindow.persistentSettings.nettype);
if(!address_ok) error = true; if(!address_ok) error = true;
else error = false; else error = false;
TextArea.cursorPosition = textArea.text.length; TextArea.cursorPosition = textArea.text.length;

View File

@@ -35,7 +35,7 @@ Item {
id: item id: item
property alias text: label.text property alias text: label.text
property alias color: label.color property alias color: label.color
property int textFormat: Text.PlainText property alias textFormat: label.textFormat
property string tipText: "" property string tipText: ""
property int fontSize: 16 * scaleRatio property int fontSize: 16 * scaleRatio
property bool fontBold: false property bool fontBold: false
@@ -44,8 +44,6 @@ Item {
property alias wrapMode: label.wrapMode property alias wrapMode: label.wrapMode
property alias horizontalAlignment: label.horizontalAlignment property alias horizontalAlignment: label.horizontalAlignment
property alias hoveredLink: label.hoveredLink property alias hoveredLink: label.hoveredLink
property alias elide: label.elide
property alias textWidth: label.width
signal linkActivated() signal linkActivated()
height: label.height * scaleRatio height: label.height * scaleRatio
width: label.width * scaleRatio width: label.width * scaleRatio
@@ -67,6 +65,5 @@ Item {
font.bold: fontBold font.bold: fontBold
color: fontColor color: fontColor
onLinkActivated: item.linkActivated() onLinkActivated: item.linkActivated()
textFormat: parent.textFormat
} }
} }

View File

@@ -1,170 +0,0 @@
// Copyright (c) 2014-2019, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import "../components" as MoneroComponents
import QtQuick 2.7
import QtQuick.XmlListModel 2.0
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.0
Drawer {
id: sideBar
// @TODO: Qt 5.10 introduces `opened` built-in for Drawer
property bool isOpened: false
onClosed: {
isOpened = false;
}
onOpened: {
isOpened = true;
}
width: 240 * scaleRatio
height: parent.height - (persistentSettings.customDecorations ? 50 : 0)
y: titleBar.height
background: Rectangle {
color: "#0d0d0d"
width: parent.width
}
Rectangle {
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
color: "red"
ListView {
clip: true
Layout.fillHeight: true
Layout.fillWidth: true
boundsBehavior: Flickable.StopAtBounds
width: sideBar.width
height: sideBar.height
model: langModel
delegate: Rectangle {
id: item
color: "transparent"
width: sideBar.width
height: 32 * scaleRatio
Text {
anchors.left: parent.left
anchors.leftMargin: 16 * scaleRatio
font.bold: true
font.pixelSize: 14 * scaleRatio
color: MoneroComponents.Style.defaultFontColor
text: display_name
anchors.verticalCenter: parent.verticalCenter
}
Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
color: MoneroComponents.Style.dividerColor
opacity: MoneroComponents.Style.dividerOpacity
height: 1
}
// button gradient while checked
Image {
anchors.fill: parent
source: "../images/menuButtonGradient.png"
opacity: 0.65
visible: true
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
var locale_spl = locale.split("_");
// reload active translations
console.log(locale_spl[0]);
translationManager.setLanguage(locale_spl[0]);
// set wizard language settings
wizard.language_locale = locale;
wizard.language_wallet = wallet_language;
wizard.language_language = display_name + " (" + locale_spl[1] + ") ";
sideBar.close()
}
hoverEnabled: true
onEntered: {
// item.color = "#26FFFFFF"
parent.opacity = 1
}
onExited: {
// item.color = "transparent"
parent.opacity = 0.65
}
}
}
}
ScrollIndicator.vertical: ScrollIndicator {
// @TODO: QT 5.9 introduces `policy: ScrollBar.AlwaysOn`
active: true
contentItem.opacity: 0.7
onActiveChanged: {
if (!active) {
active = true;
}
}
}
}
}
//Flags model
XmlListModel {
id: langModel
source: "/lang/languages.xml"
query: "/languages/language"
XmlRole { name: "display_name"; query: "@display_name/string()" }
XmlRole { name: "locale"; query: "@locale/string()" }
XmlRole { name: "wallet_language"; query: "@wallet_language/string()" }
XmlRole { name: "flag"; query: "@flag/string()" }
// TODO: XmlListModel is read only, we should store current language somewhere else
// and set current language accordingly
XmlRole { name: "isCurrent"; query: "@enabled/string()" }
onStatusChanged: {
if(status === XmlListModel.Ready){
console.log("languages available: ",count);
}
}
}
}

View File

@@ -42,7 +42,6 @@ Item {
property string placeholderColor: MoneroComponents.Style.defaultFontColor property string placeholderColor: MoneroComponents.Style.defaultFontColor
property real placeholderOpacity: 0.35 property real placeholderOpacity: 0.35
property alias acceptableInput: input.acceptableInput
property alias validator: input.validator property alias validator: input.validator
property alias readOnly : input.readOnly property alias readOnly : input.readOnly
property alias cursorPosition: input.cursorPosition property alias cursorPosition: input.cursorPosition
@@ -51,19 +50,16 @@ Item {
property alias inlineButtonText: inlineButtonId.text property alias inlineButtonText: inlineButtonId.text
property alias inlineIcon: inlineIcon.visible property alias inlineIcon: inlineIcon.visible
property bool copyButton: false property bool copyButton: false
property bool borderDisabled: false
property string borderColor: { property string borderColor: {
if(error && input.text !== ""){ if(input.activeFocus){
return MoneroComponents.Style.inputBorderColorInvalid;
} else if(input.activeFocus){
return MoneroComponents.Style.inputBorderColorActive; return MoneroComponents.Style.inputBorderColorActive;
} else { } else {
return MoneroComponents.Style.inputBorderColorInActive; return MoneroComponents.Style.inputBorderColorInActive;
} }
} }
property bool borderDisabled: false
property int fontSize: 18 * scaleRatio property int fontSize: 18 * scaleRatio
property bool showBorder: true
property bool fontBold: false property bool fontBold: false
property alias fontColor: input.color property alias fontColor: input.color
property bool error: false property bool error: false
@@ -109,7 +105,8 @@ Item {
id: inputLabel id: inputLabel
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
font.family: MoneroComponents.Style.fontRegular.name anchors.topMargin: 2 * scaleRatio
font.family: MoneroComponents.Style.fontLight.name
font.pixelSize: labelFontSize font.pixelSize: labelFontSize
font.bold: labelFontBold font.bold: labelFontBold
textFormat: Text.RichText textFormat: Text.RichText
@@ -143,7 +140,6 @@ Item {
anchors.top: showingHeader ? inputLabel.bottom : parent.top anchors.top: showingHeader ? inputLabel.bottom : parent.top
anchors.topMargin: showingHeader ? 12 * scaleRatio : 2 * scaleRatio anchors.topMargin: showingHeader ? 12 * scaleRatio : 2 * scaleRatio
width: parent.width width: parent.width
clip: true
Text { Text {
id: placeholderLabel id: placeholderLabel
@@ -198,14 +194,12 @@ Item {
MoneroComponents.Input { MoneroComponents.Input {
id: input id: input
anchors.fill: parent anchors.fill: parent
anchors.leftMargin: inlineIcon.visible ? 44 * scaleRatio : 0 anchors.leftMargin: inlineIcon.visible ? 38 : 0
font.pixelSize: item.fontSize font.pixelSize: item.fontSize
font.bold: item.fontBold font.bold: item.fontBold
onEditingFinished: item.editingFinished() onEditingFinished: item.editingFinished()
onAccepted: item.accepted(); onAccepted: item.accepted();
onTextChanged: item.textUpdated() onTextChanged: item.textUpdated()
topPadding: 10 * scaleRatio
bottomPadding: 10 * scaleRatio
} }
MoneroComponents.InlineButton { MoneroComponents.InlineButton {
@@ -213,6 +207,8 @@ Item {
visible: item.inlineButtonText ? true : false visible: item.inlineButtonText ? true : false
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 8 * scaleRatio anchors.rightMargin: 8 * scaleRatio
anchors.top: parent.top
anchors.topMargin: 6 * scaleRatio
} }
} }
} }

View File

@@ -32,68 +32,25 @@ import QtQuick.Layouts 1.1
import "../components" as MoneroComponents import "../components" as MoneroComponents
ColumnLayout { ColumnLayout {
id: item id: lineditmulti
property alias text: multiLine.text
Layout.fillWidth: true
property alias text: input.text
property alias labelText: inputLabel.text
property alias labelButtonText: labelButton.text
property alias placeholderText: placeholderLabel.text property alias placeholderText: placeholderLabel.text
property alias labelText: inputLabel.text
property int inputPaddingLeft: 10 * scaleRatio property alias error: multiLine.error
property int inputPaddingRight: 10 * scaleRatio property alias readOnly: multiLine.readOnly
property int inputPaddingTop: 10 * scaleRatio property alias addressValidation: multiLine.addressValidation
property int inputPaddingBottom: 10 * scaleRatio property alias labelButtonText: labelButton.text
property int inputRadius: 4
property bool placeholderCenter: false
property string placeholderFontFamily: MoneroComponents.Style.fontRegular.name
property bool placeholderFontBold: false
property int placeholderFontSize: 18 * scaleRatio
property string placeholderColor: MoneroComponents.Style.defaultFontColor
property real placeholderOpacity: 0.35
property bool borderDisabled: false
property string borderColor: {
if(input.error && input.text !== ""){
return MoneroComponents.Style.inputBorderColorInvalid;
} else if(input.activeFocus){
return MoneroComponents.Style.inputBorderColorActive;
} else {
return MoneroComponents.Style.inputBorderColorInActive;
}
}
property bool error: false
property string labelFontColor: MoneroComponents.Style.defaultFontColor
property bool labelFontBold: false property bool labelFontBold: false
property int labelFontSize: 16 * scaleRatio
property bool labelButtonVisible: false property bool labelButtonVisible: false
property bool copyButton: false
property string fontColor: "white" property bool wrapAnywhere: true
property bool showingHeader: true
property bool showBorder: true
property bool fontBold: false property bool fontBold: false
property int fontSize: 16 * scaleRatio property int fontSize: 16 * scaleRatio
property bool mouseSelection: true
property alias readOnly: input.readOnly
property bool copyButton: false
property bool pasteButton: false
property var onPaste: function(clipboardText) {
item.text = clipboardText;
}
property bool showingHeader: labelText != "" || copyButton || pasteButton
property var wrapMode: Text.NoWrap
property alias addressValidation: input.addressValidation
property string backgroundColor: "" // mock
property alias inlineButton: inlineButtonId
property bool inlineButtonVisible: false
signal labelButtonClicked(); signal labelButtonClicked();
signal inputLabelLinkActivated(); signal inputLabelLinkActivated();
signal editingFinished();
spacing: 0 spacing: 0
Rectangle { Rectangle {
@@ -108,81 +65,57 @@ ColumnLayout {
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: item.labelFontSize font.pixelSize: 16 * scaleRatio
font.bold: labelFontBold font.bold: labelFontBold
textFormat: Text.RichText textFormat: Text.RichText
color: item.labelFontColor color: MoneroComponents.Style.defaultFontColor
onLinkActivated: inputLabelLinkActivated() onLinkActivated: inputLabelLinkActivated()
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
} }
RowLayout { MoneroComponents.LabelButton {
anchors.right: parent.right id: labelButton
spacing: 16 * scaleRatio onClicked: labelButtonClicked()
visible: labelButtonVisible
}
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
id: labelButton id: copyButtonId
onClicked: labelButtonClicked() visible: copyButton && multiLine.text !== ""
visible: labelButtonVisible text: qsTr("Copy")
} anchors.right: labelButton.visible ? inputLabel.right : parent.right
anchors.rightMargin: labelButton.visible? 4 : 0
MoneroComponents.LabelButton { onClicked: {
id: copyButtonId if (multiLine.text.length > 0) {
visible: copyButton && input.text !== "" console.log("Copied to clipboard");
text: qsTr("Copy") clipboard.setText(multiLine.text);
onClicked: { appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3);
if (input.text.length > 0) {
console.log("Copied to clipboard");
clipboard.setText(input.text);
appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3);
}
} }
} }
MoneroComponents.LabelButton {
id: pasteButtonId
onClicked: item.onPaste(clipboard.text())
text: qsTr("Paste")
visible: pasteButton
}
} }
} }
MoneroComponents.InputMulti { MoneroComponents.InputMulti {
id: input id: multiLine
readOnly: false readOnly: false
addressValidation: false addressValidation: true
anchors.top: parent.showingHeader ? inputLabelRect.bottom : parent.top
Layout.fillWidth: true Layout.fillWidth: true
topPadding: parent.showingHeader ? 10 * scaleRatio : 0
leftPadding: item.inputPaddingLeft bottomPadding: 10 * scaleRatio
rightPadding: item.inputPaddingRight wrapAnywhere: parent.wrapAnywhere
topPadding: item.inputPaddingTop fontSize: parent.fontSize
bottomPadding: item.inputPaddingBottom fontBold: parent.fontBold
wrapMode: item.wrapMode
fontSize: item.fontSize
fontBold: item.fontBold
fontColor: item.fontColor
mouseSelection: item.mouseSelection
onEditingFinished: item.editingFinished()
error: item.error
Text { Text {
id: placeholderLabel id: placeholderLabel
visible: input.text ? false : true visible: multiLine.text ? false : true
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 10 * scaleRatio anchors.leftMargin: 10 * scaleRatio
opacity: item.placeholderOpacity opacity: 0.35
color: item.placeholderColor color: MoneroComponents.Style.defaultFontColor
font.family: item.placeholderFontFamily font.family: MoneroComponents.Style.fontRegular.name
font.bold: item.placeholderFontBold font.pixelSize: 18 * scaleRatio
font.pixelSize: item.placeholderFontSize
text: "" text: ""
z: 3 z: 3
} }
@@ -190,19 +123,18 @@ ColumnLayout {
Rectangle { Rectangle {
color: "transparent" color: "transparent"
border.width: 1 border.width: 1
border.color: item.borderColor border.color: {
radius: item.inputRadius if(multiLine.error && multiLine.text !== ""){
return MoneroComponents.Style.inputBorderColorInvalid;
} else if(multiLine.activeFocus){
return MoneroComponents.Style.inputBorderColorActive;
} else {
return MoneroComponents.Style.inputBorderColorInActive;
}
}
radius: 4
anchors.fill: parent anchors.fill: parent
visible: !item.borderDisabled visible: lineditmulti.showBorder
}
MoneroComponents.InlineButton {
id: inlineButtonId
visible: (inlineButtonId.text || inlineButtonId.icon) && inlineButtonVisible ? true : false
anchors.right: parent.right
anchors.rightMargin: 8 * scaleRatio
anchors.top: parent.top
anchors.topMargin: 4 * scaleRatio
} }
} }
} }

View File

@@ -43,17 +43,12 @@ Rectangle {
return qsTr("Synchronizing") return qsTr("Synchronizing")
if(appWindow.remoteNodeConnected) if(appWindow.remoteNodeConnected)
return qsTr("Remote node") return qsTr("Remote node")
return appWindow.isMining ? qsTr("Connected") + " + " + qsTr("Mining"): qsTr("Connected") return qsTr("Connected")
} }
if (status == Wallet.ConnectionStatus_WrongVersion) if (status == Wallet.ConnectionStatus_WrongVersion)
return qsTr("Wrong version") return qsTr("Wrong version")
if (status == Wallet.ConnectionStatus_Disconnected){ if (status == Wallet.ConnectionStatus_Disconnected)
if(appWindow.walletMode <= 1){
return qsTr("Searching node") + translationManager.emptyString;
}
return qsTr("Disconnected") return qsTr("Disconnected")
}
return qsTr("Invalid connection status") return qsTr("Invalid connection status")
} }
@@ -62,6 +57,7 @@ Rectangle {
Item { Item {
id: iconItem id: iconItem
anchors.top: parent.top
width: 40 * scaleRatio width: 40 * scaleRatio
height: 40 * scaleRatio height: 40 * scaleRatio
opacity: { opacity: {
@@ -74,34 +70,22 @@ Rectangle {
Image { Image {
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: !appWindow.isMining ? 6 * scaleRatio : 4 * scaleRatio anchors.topMargin: 6
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: !appWindow.isMining ? 11 * scaleRatio : 0 anchors.rightMargin: 11
source: { source: {
if(appWindow.isMining) { if(item.connected == Wallet.ConnectionStatus_Connected){
return "../images/miningxmr.png"
} else if(item.connected == Wallet.ConnectionStatus_Connected) {
return "../images/lightning.png" return "../images/lightning.png"
} else { } else {
return "../images/lightning-white.png" return "../images/lightning-white.png"
} }
} }
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if(!appWindow.isMining) {
middlePanel.settingsView.settingsStateViewState = "Node";
appWindow.showPageRequest("Settings");
} else {
appWindow.showPageRequest("Mining")
}
}
}
} }
} }
Item { Item {
anchors.top: parent.top
anchors.left: iconItem.right
height: 40 * scaleRatio height: 40 * scaleRatio
width: 260 * scaleRatio width: 260 * scaleRatio
@@ -127,19 +111,9 @@ Rectangle {
font.pixelSize: 20 * scaleRatio font.pixelSize: 20 * scaleRatio
color: "white" color: "white"
text: getConnectionStatusString(item.connected) + translationManager.emptyString text: getConnectionStatusString(item.connected) + translationManager.emptyString
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
if(!appWindow.isMining) {
middlePanel.settingsView.settingsStateViewState = "Node";
appWindow.showPageRequest("Settings");
} else {
appWindow.showPageRequest("Mining")
}
}
}
} }
} }
} }
} }

View File

@@ -40,7 +40,6 @@ Item {
visible: false visible: false
z: parent.z + 2 z: parent.z + 2
property bool isHidden: true
property alias password: passwordInput1.text property alias password: passwordInput1.text
// same signals as Dialog has // same signals as Dialog has
@@ -68,12 +67,6 @@ Item {
root.visible = false; root.visible = false;
closeCallback(); closeCallback();
} }
function toggleIsHidden() {
passwordInput1.echoMode = isHidden ? TextInput.Normal : TextInput.Password;
passwordInput2.echoMode = isHidden ? TextInput.Normal : TextInput.Password;
isHidden = !isHidden;
}
// TODO: implement without hardcoding sizes // TODO: implement without hardcoding sizes
width: 480 width: 480
@@ -103,6 +96,7 @@ Item {
Label { Label {
text: qsTr("Please enter new password") text: qsTr("Please enter new password")
anchors.left: parent.left
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@@ -115,6 +109,7 @@ Item {
id : passwordInput1 id : passwordInput1
Layout.topMargin: 6 Layout.topMargin: 6
Layout.fillWidth: true Layout.fillWidth: true
anchors.left: parent.left
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
verticalAlignment: TextInput.AlignVCenter verticalAlignment: TextInput.AlignVCenter
font.family: MoneroComponents.Style.fontLight.name font.family: MoneroComponents.Style.fontLight.name
@@ -124,8 +119,6 @@ Item {
leftPadding: 10 leftPadding: 10
topPadding: 10 topPadding: 10
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
KeyNavigation.tab: passwordInput2 KeyNavigation.tab: passwordInput2
background: Rectangle { background: Rectangle {
@@ -135,32 +128,12 @@ Item {
color: "black" color: "black"
Image { Image {
width: 26 * scaleRatio width: 12
height: 26 * scaleRatio height: 16
opacity: 0.7 source: "../images/lockIcon.png"
fillMode: Image.PreserveAspectFit
source: isHidden ? "../images/eyeShow.png" : "../images/eyeHide.png"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 20 anchors.rightMargin: 20
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onClicked: {
toggleIsHidden()
}
onEntered: {
parent.opacity = 0.9
parent.width = 28 * scaleRatio
parent.height = 28 * scaleRatio
}
onExited: {
parent.opacity = 0.7
parent.width = 26 * scaleRatio
parent.height = 26 * scaleRatio
}
}
} }
} }
@@ -181,6 +154,7 @@ Item {
Label { Label {
text: qsTr("Please confirm new password") text: qsTr("Please confirm new password")
anchors.left: parent.left
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@@ -193,6 +167,7 @@ Item {
id : passwordInput2 id : passwordInput2
Layout.topMargin: 6 Layout.topMargin: 6
Layout.fillWidth: true Layout.fillWidth: true
anchors.left: parent.left
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
verticalAlignment: TextInput.AlignVCenter verticalAlignment: TextInput.AlignVCenter
font.family: MoneroComponents.Style.fontLight.name font.family: MoneroComponents.Style.fontLight.name
@@ -203,8 +178,6 @@ Item {
leftPadding: 10 leftPadding: 10
topPadding: 10 topPadding: 10
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
background: Rectangle { background: Rectangle {
radius: 2 radius: 2
@@ -213,32 +186,12 @@ Item {
color: "black" color: "black"
Image { Image {
width: 26 * scaleRatio width: 12
height: 26 * scaleRatio height: 16
opacity: 0.7 source: "../images/lockIcon.png"
fillMode: Image.PreserveAspectFit
source: isHidden ? "../images/eyeShow.png" : "../images/eyeHide.png"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 20 anchors.rightMargin: 20
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onClicked: {
toggleIsHidden()
}
onEntered: {
parent.opacity = 0.9
parent.width = 28 * scaleRatio
parent.height = 28 * scaleRatio
}
onExited: {
parent.opacity = 0.7
parent.width = 26 * scaleRatio
parent.height = 26 * scaleRatio
}
}
} }
} }

View File

@@ -40,20 +40,17 @@ Item {
visible: false visible: false
z: parent.z + 2 z: parent.z + 2
property bool isHidden: true
property alias password: passwordInput.text property alias password: passwordInput.text
property string walletName property string walletName
property string errorText
// same signals as Dialog has // same signals as Dialog has
signal accepted() signal accepted()
signal rejected() signal rejected()
signal closeCallback() signal closeCallback()
function open(walletName, errorText) { function open(walletName) {
inactiveOverlay.visible = true // draw appwindow inactive inactiveOverlay.visible = true // draw appwindow inactive
root.walletName = walletName ? walletName : "" root.walletName = walletName ? walletName : ""
root.errorText = errorText ? errorText : "";
leftPanel.enabled = false leftPanel.enabled = false
middlePanel.enabled = false middlePanel.enabled = false
titleBar.enabled = false titleBar.enabled = false
@@ -61,12 +58,6 @@ Item {
root.visible = true; root.visible = true;
passwordInput.forceActiveFocus(); passwordInput.forceActiveFocus();
passwordInput.text = "" passwordInput.text = ""
appWindow.hideBalanceForced = true;
appWindow.updateBalance();
}
function showError(errorText) {
open(root.walletName, errorText);
} }
function close() { function close() {
@@ -75,8 +66,6 @@ Item {
middlePanel.enabled = true middlePanel.enabled = true
titleBar.enabled = true titleBar.enabled = true
root.visible = false; root.visible = false;
appWindow.hideBalanceForced = false;
appWindow.updateBalance();
closeCallback(); closeCallback();
} }
@@ -95,6 +84,7 @@ Item {
Label { Label {
text: root.walletName.length > 0 ? qsTr("Please enter wallet password for: ") + root.walletName : qsTr("Please enter wallet password") text: root.walletName.length > 0 ? qsTr("Please enter wallet password for: ") + root.walletName : qsTr("Please enter wallet password")
anchors.left: parent.left
Layout.fillWidth: true Layout.fillWidth: true
font.pixelSize: 16 * scaleRatio font.pixelSize: 16 * scaleRatio
@@ -103,21 +93,11 @@ Item {
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
} }
Label {
text: root.errorText
visible: root.errorText
color: MoneroComponents.Style.errorColor
font.pixelSize: 16 * scaleRatio
font.family: MoneroComponents.Style.fontLight.name
Layout.fillWidth: true
wrapMode: Text.Wrap
}
TextField { TextField {
id : passwordInput id : passwordInput
Layout.topMargin: 6 Layout.topMargin: 6
Layout.fillWidth: true Layout.fillWidth: true
anchors.left: parent.left
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
verticalAlignment: TextInput.AlignVCenter verticalAlignment: TextInput.AlignVCenter
font.family: MoneroComponents.Style.fontLight.name font.family: MoneroComponents.Style.fontLight.name
@@ -128,8 +108,6 @@ Item {
leftPadding: 10 leftPadding: 10
topPadding: 10 topPadding: 10
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
background: Rectangle { background: Rectangle {
radius: 2 radius: 2
@@ -138,37 +116,15 @@ Item {
color: "black" color: "black"
Image { Image {
width: 26 * scaleRatio width: 12
height: 26 * scaleRatio height: 16
opacity: 0.7 source: "../images/lockIcon.png"
fillMode: Image.PreserveAspectFit
source: isHidden ? "../images/eyeShow.png" : "../images/eyeHide.png"
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right anchors.right: parent.right
anchors.rightMargin: 20 anchors.rightMargin: 20
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onClicked: {
passwordInput.echoMode = isHidden ? TextInput.Normal : TextInput.Password;
isHidden = !isHidden;
}
onEntered: {
parent.opacity = 0.9
parent.width = 28 * scaleRatio
parent.height = 28 * scaleRatio
}
onExited: {
parent.opacity = 0.7
parent.width = 26 * scaleRatio
parent.height = 26 * scaleRatio
}
}
} }
} }
Keys.enabled: root.visible
Keys.onReturnPressed: { Keys.onReturnPressed: {
root.close() root.close()
root.accepted() root.accepted()
@@ -191,7 +147,7 @@ Item {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: cancelButton id: cancelButton
small: true small: true
text: root.walletName.length > 0 ? qsTr("Change wallet") + translationManager.emptyString : qsTr("Cancel") + translationManager.emptyString text: qsTr("Cancel") + translationManager.emptyString
KeyNavigation.tab: passwordInput KeyNavigation.tab: passwordInput
onClicked: { onClicked: {
root.close() root.close()

151
components/PrivacyLevel.qml Normal file
View File

@@ -0,0 +1,151 @@
// Copyright (c) 2014-2018, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.0
Item {
id: item
property int fillLevel: 0
height: 70
clip: true
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
height: 24
//radius: 4
color: "#DBDBDB"
}
Rectangle {
id: bar
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.topMargin: 1
height: 24
//radius: 4
color: "#FFFFFF"
Rectangle {
id: fillRect
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.margins: 4
//radius: 2
width: row.x
color: "#FF6C3C"
Timer {
interval: 500
running: true
repeat: false
onTriggered: fillRect.loaded = true
}
property bool loaded: false
Behavior on width {
enabled: fillRect.loaded
NumberAnimation { duration: 100; easing.type: Easing.InQuad }
}
}
MouseArea {
anchors.fill: parent
function positionBar() {
var xDiff = 999999
var index = -1
for(var i = 0; i < 14; ++i) {
var tmp = Math.abs(row.positions[i].currentX + row.x - mouseX)
if(tmp < xDiff) {
xDiff = tmp
index = i
}
}
if(index !== -1) {
fillRect.width = Qt.binding(function(){ return row.positions[index].currentX + row.x })
item.fillLevel = index
}
}
onClicked: positionBar()
onMouseXChanged: positionBar()
}
}
Row {
id: row
anchors.right: bar.right
anchors.rightMargin: 8
anchors.top: bar.bottom
anchors.topMargin: -1
property var positions: new Array()
Row {
id: row2
spacing: bar.width / 14
Repeater {
model: 4
delegate: TickDelegate {
id: delegateItem2
currentX: x + row2.x
currentIndex: index
mainTick: currentIndex === 0
Component.onCompleted: {
row.positions[currentIndex] = delegateItem2
}
}
}
}
Row {
id: row1
spacing: bar.width / 14
Repeater {
model: 10
delegate: TickDelegate {
id: delegateItem1
currentX: x + row1.x
currentIndex: index + 4
mainTick: currentIndex === 13
Component.onCompleted: {
row.positions[currentIndex] = delegateItem1
}
}
}
}
}
}

View File

@@ -26,8 +26,6 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// @TODO: Remove component after wizard redesign
import QtQuick 2.0 import QtQuick 2.0
Item { Item {
@@ -41,7 +39,7 @@ Item {
onFillLevelChanged: { onFillLevelChanged: {
if (!interactive) { if (!interactive) {
//print("fillLevel: " + fillLevel) //print("fillLevel: " + fillLevel)
fillRect.width = ruler.positions[fillLevel].currentX + ruler.x fillRect.width = row.positions[fillLevel].currentX + row.x
} }
} }
@@ -71,7 +69,7 @@ Item {
anchors.left: parent.left anchors.left: parent.left
anchors.margins: 4 anchors.margins: 4
//radius: 2 //radius: 2
width: ruler.x width: row.x
color: "#FF6C3C" color: "#FF6C3C"
@@ -94,7 +92,7 @@ Item {
font.family: "Arial" font.family: "Arial"
font.pixelSize: 15 font.pixelSize: 15
color: "#000000" color: "#000000"
x: ruler.x + (ruler.positions[0] !== undefined ? ruler.positions[0].currentX - 3 : 0) - width x: row.x + (row.positions[0] !== undefined ? row.positions[0].currentX - 3 : 0) - width
text: qsTr("Low") + translationManager.emptyString text: qsTr("Low") + translationManager.emptyString
} }
@@ -103,7 +101,7 @@ Item {
font.family: "Arial" font.family: "Arial"
font.pixelSize: 15 font.pixelSize: 15
color: "#000000" color: "#000000"
x: ruler.x + (ruler.positions[4] !== undefined ? ruler.positions[4].currentX - 3 : 0) - width x: row.x + (row.positions[4] !== undefined ? row.positions[4].currentX - 3 : 0) - width
text: qsTr("Medium") + translationManager.emptyString text: qsTr("Medium") + translationManager.emptyString
} }
@@ -112,7 +110,7 @@ Item {
font.family: "Arial" font.family: "Arial"
font.pixelSize: 15 font.pixelSize: 15
color: "#000000" color: "#000000"
x: ruler.x + (ruler.positions[13] !== undefined ? ruler.positions[13].currentX - 3 : 0) - width x: row.x + (row.positions[13] !== undefined ? row.positions[13].currentX - 3 : 0) - width
text: qsTr("High") + translationManager.emptyString text: qsTr("High") + translationManager.emptyString
} }
@@ -123,7 +121,7 @@ Item {
var xDiff = 999999 var xDiff = 999999
var index = -1 var index = -1
for(var i = 0; i < 14; ++i) { for(var i = 0; i < 14; ++i) {
var tmp = Math.abs(ruler.positions[i].currentX + ruler.x - mouseX) var tmp = Math.abs(row.positions[i].currentX + row.x - mouseX)
if(tmp < xDiff) { if(tmp < xDiff) {
xDiff = tmp xDiff = tmp
index = i index = i
@@ -131,7 +129,7 @@ Item {
} }
if(index !== -1) { if(index !== -1) {
fillRect.width = Qt.binding(function(){ return ruler.positions[index].currentX + ruler.x }) fillRect.width = Qt.binding(function(){ return row.positions[index].currentX + row.x })
item.fillLevel = index item.fillLevel = index
print ("fillLevel: " + item.fillLevel) print ("fillLevel: " + item.fillLevel)
} }
@@ -143,7 +141,7 @@ Item {
} }
Row { Row {
id: ruler id: row
anchors.right: bar.right anchors.right: bar.right
anchors.rightMargin: 8 anchors.rightMargin: 8
anchors.top: bar.bottom anchors.top: bar.bottom
@@ -164,7 +162,7 @@ Item {
width: 1 width: 1
color: "#DBDBDB" color: "#DBDBDB"
Component.onCompleted: { Component.onCompleted: {
ruler.positions[index] = delegateItem2 row.positions[index] = delegateItem2
} }
} }
} }
@@ -184,7 +182,7 @@ Item {
width: 1 width: 1
color: "#DBDBDB" color: "#DBDBDB"
Component.onCompleted: { Component.onCompleted: {
ruler.positions[index + 4] = delegateItem1 row.positions[index + 4] = delegateItem1
} }
} }
} }

View File

@@ -67,7 +67,7 @@ Rectangle {
font.pixelSize: 13 * scaleRatio font.pixelSize: 13 * scaleRatio
font.bold: true font.bold: true
color: "white" color: "white"
text: qsTr("Synchronizing %1").arg(syncType) + translationManager.emptyString text: qsTr("Synchronizing %1").arg(syncType)
height: 18 * scaleRatio height: 18 * scaleRatio
} }

View File

@@ -31,7 +31,7 @@ import QtQuick.Layouts 1.1
import "../components" as MoneroComponents import "../components" as MoneroComponents
Item { RowLayout {
id: radioButton id: radioButton
property alias text: label.text property alias text: label.text
property bool checked: false property bool checked: false
@@ -39,7 +39,6 @@ Item {
property alias fontColor: label.color property alias fontColor: label.color
signal clicked() signal clicked()
height: 26 * scaleRatio height: 26 * scaleRatio
width: layout.width
// legacy properties // legacy properties
property var checkedColor: "white" property var checkedColor: "white"
property var borderColor: checked ? Qt.rgba(1, 1, 1, 0.35) : Qt.rgba(1, 1, 1, 0.25) property var borderColor: checked ? Qt.rgba(1, 1, 1, 0.35) : Qt.rgba(1, 1, 1, 0.25)
@@ -50,14 +49,15 @@ Item {
} }
RowLayout { RowLayout {
id: layout Layout.fillWidth: true
Rectangle { Rectangle {
id: button id: button
anchors.left: parent.left
y: 0
color: "transparent" color: "transparent"
border.color: borderColor border.color: borderColor
height: radioButton.height
width: radioButton.height width: radioButton.height
height: radioButton.height
radius: radioButton.height radius: radioButton.height
Rectangle { Rectangle {
@@ -70,23 +70,32 @@ Item {
radius: 10 radius: 10
opacity: 0.8 opacity: 0.8
} }
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
toggle()
}
}
} }
Text { Text {
id: label id: label
Layout.leftMargin: (!isMobile ? 10 : 8) * scaleRatio anchors.left: button.right
anchors.leftMargin: !isMobile ? 10 : 8
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: radioButton.fontSize font.pixelSize: radioButton.fontSize
wrapMode: Text.Wrap wrapMode: Text.Wrap
}
}
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onClicked: { onClicked: {
toggle() toggle()
}
}
} }
} }
} }

View File

@@ -31,7 +31,6 @@ import QtQuick.Controls.Styles 1.2
import QtQuick 2.2 import QtQuick 2.2
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "../js/Utils.js" as Utils
import "../components" as MoneroComponents import "../components" as MoneroComponents
GridLayout { GridLayout {
@@ -54,26 +53,12 @@ GridLayout {
property string lineEditBorderColor: Qt.rgba(0, 0, 0, 0.15) property string lineEditBorderColor: Qt.rgba(0, 0, 0, 0.15)
property string lineEditBackgroundColor: "white" property string lineEditBackgroundColor: "white"
property string lineEditFontColor: "black" property string lineEditFontColor: "black"
property int lineEditFontSize: 18 * scaleRatio
property int labelFontSize: 16 * scaleRatio
property bool lineEditFontBold: true property bool lineEditFontBold: true
signal editingFinished() signal editingFinished()
signal textChanged()
function isValid() {
return daemonAddr.text.trim().length > 0 && daemonPort.acceptableInput
}
function getAddress() { function getAddress() {
var addr = daemonAddr.text.trim(); return daemonAddr.text.trim() + ":" + daemonPort.text.trim()
var port = daemonPort.text.trim();
// validation
if(addr === "" || addr.length < 2) return "";
if(!Utils.isNumeric(port)) return "";
return addr + ":" + port;
} }
LineEdit { LineEdit {
@@ -85,14 +70,11 @@ GridLayout {
placeholderFontSize: root.placeholderFontSize placeholderFontSize: root.placeholderFontSize
placeholderColor: root.placeholderColor placeholderColor: root.placeholderColor
placeholderOpacity: root.placeholderOpacity placeholderOpacity: root.placeholderOpacity
labelFontSize: root.labelFontSize onEditingFinished: root.editingFinished()
borderColor: lineEditBorderColor borderColor: lineEditBorderColor
backgroundColor: lineEditBackgroundColor backgroundColor: lineEditBackgroundColor
fontColor: lineEditFontColor fontColor: lineEditFontColor
fontBold: lineEditFontBold fontBold: lineEditFontBold
fontSize: lineEditFontSize
onEditingFinished: root.editingFinished()
onTextChanged: root.textChanged()
} }
LineEdit { LineEdit {
@@ -104,15 +86,10 @@ GridLayout {
placeholderFontSize: root.placeholderFontSize placeholderFontSize: root.placeholderFontSize
placeholderColor: root.placeholderColor placeholderColor: root.placeholderColor
placeholderOpacity: root.placeholderOpacity placeholderOpacity: root.placeholderOpacity
labelFontSize: root.labelFontSize onEditingFinished: root.editingFinished()
borderColor: lineEditBorderColor borderColor: lineEditBorderColor
backgroundColor: lineEditBackgroundColor backgroundColor: lineEditBackgroundColor
fontColor: lineEditFontColor fontColor: lineEditFontColor
fontBold: lineEditFontBold fontBold: lineEditFontBold
fontSize: lineEditFontSize
validator: IntValidator{bottom: 1; top: 65535;}
onEditingFinished: root.editingFinished()
onTextChanged: root.textChanged()
} }
} }

View File

@@ -27,14 +27,10 @@
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.0 import QtQuick 2.0
import "." as MoneroComponents
Item { Item {
id: scrollItem id: scrollItem
property var flickable property var flickable
property alias scrollColor: scroll.color
property alias scrollWidth: scroll.width
property alias scrollRadius: scroll.radius
width: 15 width: 15
z: 1 z: 1
@@ -56,14 +52,13 @@ Item {
id: scroll id: scroll
width: 4 width: 4
radius: width / 2
height: { height: {
var t = (flickable.height * flickable.height) / flickable.contentHeight var t = (flickable.height * flickable.height) / flickable.contentHeight
return t < 50 ? 50 : t return t < 20 ? 20 : t
} }
y: 0; x: 0 y: 0; x: 0
color: MoneroComponents.Style.orange color: "#DBDBDB"
opacity: flickable.moving || handleArea.pressed || scrollArea.containsMouse ? 0.8 : 0 opacity: flickable.moving || handleArea.pressed || scrollArea.containsMouse ? 0.5 : 0
visible: flickable.contentHeight > flickable.height visible: flickable.contentHeight > flickable.height
Behavior on opacity { Behavior on opacity {

229
components/SearchInput.qml Normal file
View File

@@ -0,0 +1,229 @@
// Copyright (c) 2014-2018, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.0
import "../components" as MoneroComponents
Item {
id: item
signal searchClicked(string text, int option)
height: 50
Rectangle {
anchors.fill: parent
color: "#DBDBDB"
//radius: 4
}
Rectangle {
anchors.fill: parent
anchors.topMargin: 1
color: "#FFFFFF"
//radius: 4
Item {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.left: parent.left
width: 45
Image {
anchors.centerIn: parent
source: "../images/magnifier.png"
}
}
Input {
id: input
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: dropdown.left
anchors.leftMargin: 45
font.pixelSize: 18
verticalAlignment: TextInput.AlignVCenter
placeholderText: qsTr("Search by...") + translationManager.emptyString
}
Item {
id: dropdown
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: button.left
width: 154
function hide() { droplist.height = 0 }
function containsPoint(px, py) {
if(px < 0)
return false
if(px > width)
return false
if(py < 0)
return false
if(py > height + droplist.height)
return false
return true
}
Row {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
Text {
id: dropText
width: 114 - 12
anchors.verticalCenter: parent.verticalCenter
font.family: "Arial"
font.pixelSize: 12
font.bold: true
color: "#4A4747"
text: "NAME"
}
Image {
anchors.verticalCenter: parent.verticalCenter
source: "../images/hseparator.png"
}
Item {
height: dropdown.height
width: 38
Image {
id: dropIndicator
anchors.centerIn: parent
source: "../images/dropIndicator.png"
rotation: droplist.height === 0 ? 0 : 180
}
}
}
MouseArea {
anchors.fill: parent
onClicked: {
if(droplist.height === 0) {
appWindow.currentItem = dropdown
droplist.height = dropcolumn.height + 2
} else {
droplist.height = 0
}
}
}
}
Rectangle {
id: droplist
property int currentOption: 0
width: 154
height: 0
clip: true
x: dropdown.x
y: dropdown.height
border.width: 1
border.color: "#DBDBDB"
color: "#FFFFFF"
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.leftMargin: 1
anchors.rightMargin: 1
height: 1
color: "#FFFFFF"
}
Behavior on height {
NumberAnimation { duration: 100; easing.type: Easing.InQuad }
}
ListModel {
id: dropdownModel
ListElement { name: "NAME" }
ListElement { name: "DESCRIPTION" }
ListElement { name: "ADDRESS" }
}
Column {
id: dropcolumn
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: 1
Repeater {
model: dropdownModel
delegate: Rectangle {
property bool isCurrent: name === dropText.text
anchors.left: parent.left
anchors.right: parent.right
height: 30
color: delegateArea.pressed || isCurrent ? "#4A4646" : "#FFFFFF"
Text {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.right: parent.right
elide: Text.ElideRight
anchors.leftMargin: 12
anchors.rightMargin: 12
font.family: "Arial"
font.bold: true
font.pixelSize: 12
color: delegateArea.pressed || parent.isCurrent ? "#FFFFFF" : "#4A4646"
text: name
}
MouseArea {
id: delegateArea
anchors.fill: parent
onClicked: {
droplist.currentOption = index
droplist.height = 0
dropText.text = name
}
}
}
}
}
}
MoneroComponents.StandardButton {
id: button
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.margins: 6
width: 80
text: qsTr("SEARCH")
onClicked: item.searchClicked(input.text, droplist.currentOption)
}
}
}

View File

@@ -35,7 +35,9 @@ Item {
id: button id: button
property string rightIcon: "" property string rightIcon: ""
property string rightIconInactive: "" property string rightIconInactive: ""
property string icon: ""
property string textColor: button.enabled? MoneroComponents.Style.buttonTextColor: MoneroComponents.Style.buttonTextColorDisabled property string textColor: button.enabled? MoneroComponents.Style.buttonTextColor: MoneroComponents.Style.buttonTextColorDisabled
property string textAlign: rightIcon !== "" ? "left" : "center"
property bool small: false property bool small: false
property alias text: label.text property alias text: label.text
property int fontSize: { property int fontSize: {
@@ -44,10 +46,22 @@ Item {
} }
signal clicked() signal clicked()
// Dynamic height/width
Layout.minimumWidth: {
var _padding = 22;
if(button.rightIcon !== ""){
_padding += 60;
}
var _width = label.contentWidth + _padding;
if(_width <= 50) {
return 60;
}
return _width;
}
height: small ? 30 * scaleRatio : 36 * scaleRatio height: small ? 30 * scaleRatio : 36 * scaleRatio
width: buttonLayout.width + 22 * scaleRatio
implicitHeight: height
implicitWidth: width
function doClick() { function doClick() {
// Android workaround // Android workaround
@@ -56,87 +70,70 @@ Item {
} }
Rectangle { Rectangle {
id: buttonRect anchors.left: parent.left
anchors.fill: parent anchors.right: parent.right
height: parent.height - 1
radius: 3 radius: 3
color: parent.enabled ? MoneroComponents.Style.buttonBackgroundColor : MoneroComponents.Style.buttonBackgroundColorDisabled
border.width: parent.focus ? 1 : 0 border.width: parent.focus ? 1 : 0
state: button.enabled ? "active" : "disabled" MouseArea {
Component.onCompleted: state = state anchors.fill: parent
states: [ cursorShape: Qt.PointingHandCursor
State { hoverEnabled: true
name: "hover"
when: buttonArea.containsMouse || button.focus propagateComposedEvents: true
PropertyChanges {
target: buttonRect // possibly do some hover effects here
color: MoneroComponents.Style.buttonBackgroundColorHover onEntered: {
} // if(button.enabled) parent.color = Style.buttonBackgroundColorHover;
}, // else parent.color = Style.buttonBackgroundColorDisabledHover;
State { }
name: "active" onExited: {
when: button.enabled // if(button.enabled) parent.color = Style.buttonBackgroundColor;
PropertyChanges { // else parent.color = Style.buttonBackgroundColorDisabled;
target: buttonRect
color: MoneroComponents.Style.buttonBackgroundColor
}
},
State {
name: "disabled"
when: !button.enabled
PropertyChanges {
target: buttonRect
color: MoneroComponents.Style.buttonBackgroundColorDisabled
}
} }
]
transitions: Transition {
ColorAnimation { duration: 100 }
} }
} }
RowLayout { Text {
id: buttonLayout id: label
height: button.height anchors.verticalCenter: parent.verticalCenter
spacing: 11 * scaleRatio anchors.left: parent.left
anchors.right: parent.right
horizontalAlignment: textAlign === "center" ? Text.AlignHCenter : Text.AlignLeft
anchors.leftMargin: textAlign === "center" ? 0 : 11
font.family: MoneroComponents.Style.fontBold.name
font.bold: true
font.pixelSize: buttonArea.pressed ? button.fontSize - 1 : button.fontSize
color: parent.textColor
visible: parent.icon === ""
}
Image {
anchors.centerIn: parent anchors.centerIn: parent
visible: parent.icon !== ""
source: parent.icon
}
Text { Image {
id: label visible: parent.rightIcon !== ""
font.family: MoneroComponents.Style.fontBold.name anchors.right: parent.right
font.bold: true anchors.rightMargin: 11 * scaleRatio
font.pixelSize: button.fontSize anchors.verticalCenter: parent.verticalCenter
color: !buttonArea.pressed ? button.textColor : "transparent" width: parent.small ? 16 * scaleRatio : 20 * scaleRatio
visible: text !== "" height: parent.small ? 16 * scaleRatio : 20 * scaleRatio
source: {
Text { if(parent.rightIconInactive !== "" && !parent.enabled){
anchors.centerIn: parent return parent.rightIconInactive;
color: button.textColor
font.bold: label.font.bold
font.family: label.font.family
font.pixelSize: label.font.pixelSize - 1
text: label.text
opacity: buttonArea.pressed ? 1 : 0
}
}
Image {
visible: button.rightIcon !== ""
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
width: button.small ? 16 * scaleRatio : 20 * scaleRatio
height: button.small ? 16 * scaleRatio : 20 * scaleRatio
source: {
if(button.rightIconInactive !== "" && !button.enabled) {
return button.rightIconInactive;
}
return button.rightIcon;
} }
return parent.rightIcon;
} }
} }
MouseArea { MouseArea {
id: buttonArea id: buttonArea
anchors.fill: parent anchors.fill: parent
hoverEnabled: true
onClicked: doClick() onClicked: doClick()
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
} }

View File

@@ -47,7 +47,6 @@ Rectangle {
property alias textArea: dialogContent property alias textArea: dialogContent
property alias okText: okButton.text property alias okText: okButton.text
property alias cancelText: cancelButton.text property alias cancelText: cancelButton.text
property alias closeVisible: closeButton.visible
property var icon property var icon
@@ -90,63 +89,55 @@ Rectangle {
} }
// TODO: implement without hardcoding sizes // TODO: implement without hardcoding sizes
width: isMobile ? screenWidth : 520 * scaleRatio width: isMobile ? screenWidth : 520
height: isMobile ? screenHeight : 380 * scaleRatio height: isMobile ? screenHeight : 380
ColumnLayout { ColumnLayout {
id: mainLayout id: mainLayout
spacing: 10 * scaleRatio spacing: 10
anchors.fill: parent anchors { fill: parent; margins: 15 }
anchors.margins: (isMobile? 17 : 20) * scaleRatio
RowLayout { RowLayout {
id: column id: column
//anchors {fill: parent; margins: 16 }
Layout.topMargin: 14 * scaleRatio Layout.topMargin: 14 * scaleRatio
Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter
MoneroComponents.Label { MoneroComponents.Label {
id: dialogTitle id: dialogTitle
horizontalAlignment: Text.AlignHCenter
fontSize: 18 * scaleRatio fontSize: 18 * scaleRatio
fontFamily: "Arial" fontFamily: "Arial"
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
} }
} }
Item { RowLayout {
Layout.fillHeight: true TextArea {
Layout.fillWidth: true id : dialogContent
Layout.preferredHeight: 240 * scaleRatio Layout.fillWidth: true
Layout.fillHeight: true
renderType: Text.QtRendering
font.family: MoneroComponents.Style.fontLight.name
textFormat: TextEdit.AutoText
readOnly: true
font.pixelSize: 14 * scaleRatio
selectByMouse: false
wrapMode: TextEdit.Wrap
color: MoneroComponents.Style.defaultFontColor
Flickable { MouseArea {
id: flickable anchors.fill: parent
anchors.fill: parent onClicked: {
ScrollBar.vertical: ScrollBar { } appWindow.showStatusMessage(qsTr("Double tap to copy"),3)
}
TextArea.flickable: TextArea { onDoubleClicked: {
id: dialogContent parent.selectAll()
Layout.fillWidth: true parent.copy()
Layout.fillHeight: true parent.deselect()
renderType: Text.QtRendering console.log("copied to clipboard");
font.family: MoneroComponents.Style.fontLight.name appWindow.showStatusMessage(qsTr("Content copied to clipboard"),3)
textFormat: TextEdit.AutoText
readOnly: true
font.pixelSize: 14 * scaleRatio
selectByMouse: false
wrapMode: TextEdit.Wrap
color: MoneroComponents.Style.defaultFontColor
MouseArea {
anchors.fill: parent
onClicked: {
appWindow.showStatusMessage(qsTr("Double tap to copy"),3)
}
onDoubleClicked: {
parent.selectAll()
parent.copy()
parent.deselect()
console.log("copied to clipboard");
appWindow.showStatusMessage(qsTr("Content copied to clipboard"),3)
}
} }
} }
} }
@@ -155,7 +146,7 @@ Rectangle {
// Ok/Cancel buttons // Ok/Cancel buttons
RowLayout { RowLayout {
id: buttons id: buttons
spacing: 60 * scaleRatio spacing: 60
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
@@ -169,47 +160,20 @@ Rectangle {
MoneroComponents.StandardButton { MoneroComponents.StandardButton {
id: okButton id: okButton
text: qsTr("OK") + translationManager.emptyString text: qsTr("OK")
KeyNavigation.tab: cancelButton KeyNavigation.tab: cancelButton
onClicked: { onClicked: {
root.close() root.close()
root.accepted() root.accepted()
} }
} }
} }
} }
// close icon
Rectangle {
id: closeButton
anchors.top: parent.top
anchors.right: parent.right
width: 48 * scaleRatio
height: 48 * scaleRatio
color: "transparent"
Image {
anchors.centerIn: parent
width: 16 * scaleRatio
height: 16 * scaleRatio
source: "../images/close.png"
}
MouseArea {
anchors.fill: parent
onClicked: {
root.close()
root.rejected()
}
cursorShape: Qt.PointingHandCursor
onEntered: closeButton.color = "#262626";
onExited: closeButton.color = "transparent";
}
}
// window borders // window borders
Rectangle{ Rectangle{
width: 1 * scaleRatio width: 1
color: MoneroComponents.Style.grey color: MoneroComponents.Style.grey
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
@@ -217,7 +181,7 @@ Rectangle {
} }
Rectangle{ Rectangle{
width: 1 * scaleRatio width: 1
color: MoneroComponents.Style.grey color: MoneroComponents.Style.grey
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
@@ -225,7 +189,7 @@ Rectangle {
} }
Rectangle{ Rectangle{
height: 1 * scaleRatio height: 1
color: MoneroComponents.Style.grey color: MoneroComponents.Style.grey
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
@@ -233,7 +197,7 @@ Rectangle {
} }
Rectangle{ Rectangle{
height: 1 * scaleRatio height: 1
color: MoneroComponents.Style.grey color: MoneroComponents.Style.grey
anchors.left: parent.left anchors.left: parent.left
anchors.bottom: parent.bottom anchors.bottom: parent.bottom

View File

@@ -32,14 +32,13 @@ import "../components" as MoneroComponents
Item { Item {
id: dropdown id: dropdown
property int itemTopMargin: 0
property alias dataModel: repeater.model property alias dataModel: repeater.model
property string shadowPressedColor property string shadowPressedColor
property string shadowReleasedColor property string shadowReleasedColor
property string pressedColor property string pressedColor
property string releasedColor property string releasedColor
property string textColor: "#FFFFFF" property string textColor: "#FFFFFF"
property alias currentIndex: columnid.currentIndex property alias currentIndex: column.currentIndex
property bool expanded: false property bool expanded: false
property int dropdownHeight: 42 property int dropdownHeight: 42
property int fontHeaderSize: 16 * scaleRatio property int fontHeaderSize: 16 * scaleRatio
@@ -69,7 +68,7 @@ Item {
// Workaroud for suspected memory leak in 5.8 causing malloc crash on app exit // Workaroud for suspected memory leak in 5.8 causing malloc crash on app exit
function update() { function update() {
firstColText.text = columnid.currentIndex < repeater.model.rowCount() ? qsTr(repeater.model.get(columnid.currentIndex).column1) + translationManager.emptyString : "" firstColText.text = column.currentIndex < repeater.model.rowCount() ? qsTr(repeater.model.get(column.currentIndex).column1) + translationManager.emptyString : ""
} }
Item { Item {
@@ -77,7 +76,6 @@ Item {
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: parent.itemTopMargin
height: dropdown.dropdownHeight height: dropdown.dropdownHeight
Rectangle { Rectangle {
@@ -129,7 +127,7 @@ Item {
anchors.right: parent.right anchors.right: parent.right
anchors.top: head.bottom anchors.top: head.bottom
clip: true clip: true
height: dropdown.expanded ? columnid.height : 0 height: dropdown.expanded ? column.height : 0
color: dropdown.pressedColor color: dropdown.pressedColor
//radius: 4 //radius: 4
@@ -152,7 +150,7 @@ Item {
} }
Column { Column {
id: columnid id: column
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
anchors.top: parent.top anchors.top: parent.top
@@ -178,7 +176,7 @@ Item {
anchors.right: parent.right anchors.right: parent.right
height: (dropdown.dropdownHeight * 0.75) * scaleRatio height: (dropdown.dropdownHeight * 0.75) * scaleRatio
//radius: index === repeater.count - 1 ? 4 : 0 //radius: index === repeater.count - 1 ? 4 : 0
color: itemArea.containsMouse || index === columnid.currentIndex || itemArea.containsMouse ? dropdown.releasedColor : dropdown.pressedColor color: itemArea.containsMouse || index === column.currentIndex || itemArea.containsMouse ? dropdown.releasedColor : dropdown.pressedColor
Text { Text {
id: col1Text id: col1Text
@@ -190,7 +188,7 @@ Item {
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.bold: true font.bold: true
font.pixelSize: fontItemSize font.pixelSize: fontItemSize
color: itemArea.containsMouse || index === columnid.currentIndex || itemArea.containsMouse ? "#FA6800" : "#FFFFFF" color: itemArea.containsMouse || index === column.currentIndex || itemArea.containsMouse ? "#FA6800" : "#FFFFFF"
text: qsTr(column1) + translationManager.emptyString text: qsTr(column1) + translationManager.emptyString
} }
@@ -227,7 +225,7 @@ Item {
onClicked: { onClicked: {
dropdown.expanded = false dropdown.expanded = false
columnid.currentIndex = index column.currentIndex = index
changed(); changed();
dropdown.update() dropdown.update()
} }

View File

@@ -3,21 +3,16 @@ pragma Singleton
import QtQuick 2.5 import QtQuick 2.5
QtObject { QtObject {
property QtObject fontMedium: FontLoader { id: _fontMedium; source: "qrc:/fonts/Roboto-Medium.ttf"; } property QtObject fontMedium: FontLoader { id: _fontMedium; source: "qrc:/fonts/SFUIDisplay-Medium.otf"; }
property QtObject fontBold: FontLoader { id: _fontBold; source: "qrc:/fonts/Roboto-Bold.ttf"; } property QtObject fontBold: FontLoader { id: _fontBold; source: "qrc:/fonts/SFUIDisplay-Bold.otf"; }
property QtObject fontLight: FontLoader { id: _fontLight; source: "qrc:/fonts/Roboto-Light.ttf"; } property QtObject fontLight: FontLoader { id: _fontLight; source: "qrc:/fonts/SFUIDisplay-Light.otf"; }
property QtObject fontRegular: FontLoader { id: _fontRegular; source: "qrc:/fonts/Roboto-Regular.ttf"; } property QtObject fontRegular: FontLoader { id: _fontRegular; source: "qrc:/fonts/SFUIDisplay-Regular.otf"; }
property string grey: "#404040" property string grey: "#404040"
property string orange: "#FF6C3C"
property string white: "#FFFFFF"
property string green: "#2EB358"
property string moneroGrey: "#4C4C4C"
property string defaultFontColor: "white" property string defaultFontColor: "white"
property string greyFontColor: "#808080"
property string dimmedFontColor: "#BBBBBB" property string dimmedFontColor: "#BBBBBB"
property string lightGreyFontColor: "#DFDFDF"
property string errorColor: "#FA6800"
property string inputBoxBackground: "black" property string inputBoxBackground: "black"
property string inputBoxBackgroundError: "#FFDDDD" property string inputBoxBackgroundError: "#FFDDDD"
property string inputBoxColor: "white" property string inputBoxColor: "white"

202
components/TableHeader.qml Normal file
View File

@@ -0,0 +1,202 @@
// Copyright (c) 2014-2018, The Monero Project
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.0
Rectangle {
id: header
signal sortRequest(bool desc, int column)
property alias dataModel: columnsRepeater.model
property int activeSortColumn: -1
property int offset: 0
height: 31
color: "transparent"
Rectangle{
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 1
color: "#808080"
}
Rectangle{
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 1
color: "#808080"
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 1
color: "#808080"
}
Row {
id: row
anchors.horizontalCenter: parent.horizontalCenter
Rectangle {
height: 31
width: 1
color: "#808080"
}
Repeater {
id: columnsRepeater
// Workaround for translations in listElements. All translated strings needs to be listed in this file.
property string stringPaymentID: qsTr("Payment ID") + translationManager.emptyString
property string stringDate: qsTr("Date") + translationManager.emptyString
property string stringBlockHeight: qsTr("Block height") + translationManager.emptyString
property string stringAmount: qsTr("Amount") + translationManager.emptyString
delegate: Rectangle {
id: delegate
property bool desc: false
color: "transparent"
height: 31
width: columnWidth
Text {
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: -2
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 13
anchors.rightMargin: 13
elide: Text.ElideRight
font.family: "Arial"
font.pixelSize: 14
color: {
if(delegateArea.pressed)
return "#FF4304"
return index === header.activeSortColumn || delegateArea.containsMouse ? "white" : "#808080"
}
text: qsTr(columnName) + translationManager.emptyString
}
MouseArea {
id: delegateArea
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
delegate.desc = !delegate.desc
header.activeSortColumn = index
header.sortRequest(delegate.desc, index)
}
}
Row {
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.rightMargin: 9
Item {
width: 14
anchors.top: parent.top
anchors.bottom: parent.bottom
Image {
anchors.centerIn: parent
anchors.verticalCenterOffset: -2
source: {
if(descArea.pressed)
return "../images/descSortIndicatorPressed.png"
return index === header.activeSortColumn || descArea.containsMouse ? "../images/descSortIndicatorActived.png" :
"../images/descSortIndicator.png"
}
}
MouseArea {
id: descArea
hoverEnabled: true
anchors.fill: parent
onClicked: {
delegate.desc = true
header.activeSortColumn = index
header.sortRequest(delegate.desc, index)
}
}
}
Item {
width: 14
anchors.top: parent.top
anchors.bottom: parent.bottom
Image {
anchors.centerIn: parent
anchors.verticalCenterOffset: -3
source: {
if(ascArea.pressed)
return "../images/ascSortIndicatorPressed.png"
return index === header.activeSortColumn || ascArea.containsMouse ? "../images/ascSortIndicatorActived.png" :
"../images/ascSortIndicator.png"
}
}
MouseArea {
id: ascArea
hoverEnabled: true
anchors.fill: parent
onClicked: {
delegate.desc = false
header.activeSortColumn = index
header.sortRequest(delegate.desc, index)
}
}
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 1
color: "transparent"
}
Rectangle {
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.right: parent.right
width: 1
color: "#808080"
}
}
}
}
}

View File

@@ -1,4 +1,4 @@
// Copyright (c) 2014-2019, The Monero Project // Copyright (c) 2014-2018, The Monero Project
// //
// All rights reserved. // All rights reserved.
// //
@@ -26,60 +26,47 @@
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF // STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import QtQuick 2.7 import QtQuick 2.0
import QtQuick.Layouts 1.2
import QtQuick.Controls 2.0
import "../js/Wizard.js" as Wizard
import "../js/Utils.js" as Utils
import "../components" as MoneroComponents import "../components" as MoneroComponents
ColumnLayout { Item {
property alias header: key.text id: delegateItem
property alias value: val.text width: 1
Layout.bottomMargin: 10 height: 48
Layout.fillWidth: true property bool mainTick: false
property int currentIndex
property int currentX
GridLayout { Image {
Layout.fillWidth: true anchors.horizontalCenter: parent.horizontalCenter
columns: 2 anchors.top: parent.top
columnSpacing: 0 visible: parent.mainTick
source: "../images/privacyTick.png"
Rectangle { Text {
Layout.fillWidth: true anchors.right: parent.right
Layout.preferredHeight: 20 * scaleRatio anchors.rightMargin: 12
color: "transparent" anchors.bottom: parent.bottom
anchors.bottomMargin: 2
MoneroComponents.TextBlock { font.family: "Arial"
id: key font.bold: true
Layout.fillWidth: true font.pixelSize: 12 * scaleRatio
Layout.alignment: Qt.AlignVCenter color: MoneroComponents.Style.defaultFontColor
font.pixelSize: 16 text: {
text: "test" if(currentIndex === 0) return qsTr("Default") + translationManager.emptyString
} if(currentIndex === 13) return qsTr("High") + translationManager.emptyString
} return ""
Rectangle {
Layout.fillWidth: true
Layout.preferredHeight: 20 * scaleRatio
color: "transparent"
MoneroComponents.TextBlock {
id: val
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
font.pixelSize: 16
text: ""
} }
} }
} }
Rectangle { Rectangle {
Layout.preferredHeight: 1 * scaleRatio anchors.top: parent.top
Layout.topMargin: 2 * scaleRatio anchors.topMargin: 14
Layout.bottomMargin: 2 * scaleRatio width: 1
Layout.fillWidth: true color: "#DBDBDB"
color: MoneroComponents.Style.dividerColor height: 8
opacity: MoneroComponents.Style.dividerOpacity visible: !parent.mainTick
} }
} }

View File

@@ -47,7 +47,7 @@ Rectangle {
property string title property string title
property int mouseX: 0 property int mouseX: 0
property bool containsMouse: false property bool containsMouse: false
property bool basicButtonVisible: false property alias basicButtonVisible: goToBasicVersionButton.visible
property bool customDecorations: persistentSettings.customDecorations property bool customDecorations: persistentSettings.customDecorations
property bool showWhatIsButton: true property bool showWhatIsButton: true
property bool showMinimizeButton: false property bool showMinimizeButton: false
@@ -55,10 +55,6 @@ Rectangle {
property bool showCloseButton: true property bool showCloseButton: true
property bool showMoneroLogo: false property bool showMoneroLogo: false
property bool small: false property bool small: false
property alias titleBarGradientImageOpacity: titleBarGradientImage.opacity
property bool orange: false
property string buttonHoverColor: "#262626"
property string buttonHoverColorOrange: "#44FFFFFF"
signal closeClicked signal closeClicked
signal maximizeClicked signal maximizeClicked
@@ -72,20 +68,11 @@ Rectangle {
z: parent.z + 1 z: parent.z + 1
Image { Image {
id: titleBarGradientImage anchors.fill: titleBar
visible: !titleBar.orange
anchors.fill: parent
height: titleBar.height height: titleBar.height
width: titleBar.width width: titleBar.width
source: "../images/titlebarGradient.jpg" source: "../images/titlebarGradient.jpg"
} }
Rectangle {
visible: titleBar.orange
width: parent.width
height: parent.height
color: "#ff6600"
}
} }
Item { Item {
@@ -93,11 +80,10 @@ Rectangle {
width: 125 width: 125
height: parent.height height: parent.height
anchors.centerIn: parent anchors.centerIn: parent
visible: customDecorations visible: customDecorations && showMoneroLogo
z: parent.z + 1 z: parent.z + 1
Image { Image {
visible: !isMobile && showMoneroLogo && !titleBar.orange
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: 11 anchors.topMargin: 11
@@ -105,16 +91,6 @@ Rectangle {
height: 28 height: 28
source: "../images/titlebarLogo.png" source: "../images/titlebarLogo.png"
} }
Image {
visible: !isMobile && showMoneroLogo && titleBar.orange
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: 11
width: 132
height: 22
source: "../images/moneroLogo_white.png"
}
} }
Label { Label {
@@ -126,79 +102,37 @@ Rectangle {
z: parent.z + 1 z: parent.z + 1
} }
RowLayout { // collapse left panel
anchors.left: parent.left Rectangle {
id: goToBasicVersionButton
property bool containsMouse: titleBar.mouseX >= x && titleBar.mouseX <= x + width
property bool checked: false
anchors.top: parent.top anchors.top: parent.top
width: 40 anchors.left: parent.left
height: parent.height color: "transparent"
spacing: 0 height: titleBar.height
width: height
visible: isMobile
z: parent.z + 2 z: parent.z + 2
Rectangle { Image {
Layout.preferredHeight: parent.height width: 14
Layout.preferredWidth: Layout.preferredHeight height: 14
anchors.centerIn: parent
id: goToBasicVersionButton source: "../images/expand.png"
property bool containsMouse: titleBar.mouseX >= x && titleBar.mouseX <= x + width
property bool checked: false
color: "transparent"
height: titleBar.height
width: height
visible: !titleBar.orange && titleBar.basicButtonVisible
Image {
width: 14
height: 14
anchors.centerIn: parent
source: "../images/expand.png"
}
MouseArea {
id: basicMouseArea
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: { goToBasicVersionButton.color = titleBar.orange ? titleBar.buttonHoverColorOrange : titleBar.buttonHoverColor }
onExited: goToBasicVersionButton.color = "transparent";
onClicked: {
releaseFocus()
parent.checked = !parent.checked
titleBar.goToBasicVersion(leftPanel.visible)
}
}
} }
// language selection MouseArea {
Rectangle { id: basicMouseArea
Layout.preferredHeight: parent.height hoverEnabled: true
Layout.preferredWidth: Layout.preferredHeight anchors.fill: parent
visible: !titleBar.orange && persistentSettings.customDecorations cursorShape: Qt.PointingHandCursor
onEntered: goToBasicVersionButton.color = "#262626";
id: languageSelection onExited: goToBasicVersionButton.color = "transparent";
property bool containsMouse: titleBar.mouseX >= x && titleBar.mouseX <= x + width onClicked: {
property bool checked: false releaseFocus()
color: "transparent" parent.checked = !parent.checked
height: titleBar.height titleBar.goToBasicVersion(leftPanel.visible)
width: height
z: parent.z + 2
Image {
width: 14
height: 14
anchors.centerIn: parent
source: "../images/langFlagGrey.png"
}
MouseArea {
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: parent.color = "#262626";
onExited: parent.color = "transparent";
onClicked: {
releaseFocus();
appWindow.toggleLanguageView();
}
} }
} }
} }
@@ -229,13 +163,7 @@ Rectangle {
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: { onEntered: minimizeButton.color = "#262626";
if(titleBar.orange){
minimizeButton.color = titleBar.buttonHoverColorOrange;
} else {
minimizeButton.color = titleBar.buttonHoverColor;
}
}
onExited: minimizeButton.color = "transparent"; onExited: minimizeButton.color = "transparent";
onClicked: minimizeClicked(); onClicked: minimizeClicked();
} }
@@ -262,13 +190,7 @@ Rectangle {
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: { onEntered: maximizeButton.color = "#262626";
if(titleBar.orange){
maximizeButton.color = titleBar.buttonHoverColorOrange;
} else {
maximizeButton.color = titleBar.buttonHoverColor;
}
}
onExited: maximizeButton.color = "transparent"; onExited: maximizeButton.color = "transparent";
onClicked: maximizeClicked(); onClicked: maximizeClicked();
} }
@@ -294,13 +216,7 @@ Rectangle {
onClicked: closeClicked(); onClicked: closeClicked();
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: { onEntered: closeButton.color = "#262626";
if(titleBar.orange){
closeButton.color = titleBar.buttonHoverColorOrange;
} else {
closeButton.color = titleBar.buttonHoverColor;
}
}
onExited: closeButton.color = "transparent"; onExited: closeButton.color = "transparent";
} }
} }
@@ -308,7 +224,6 @@ Rectangle {
// window borders // window borders
Rectangle { Rectangle {
visible: !titleBar.orange
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
@@ -318,10 +233,10 @@ Rectangle {
} }
Rectangle { Rectangle {
visible: titleBar.small && !titleBar.orange
anchors.top: parent.top anchors.top: parent.top
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
visible: titleBar.small
height: 1 height: 1
color: "#2F2F2F" color: "#2F2F2F"
z: parent.z + 1 z: parent.z + 1

View File

@@ -1,62 +0,0 @@
import QtQuick 2.7
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.0
import "." as MoneroComponents
Rectangle {
id: root
property alias text: content.text
property alias textColor: content.color
property int fontSize: 15 * scaleRatio
Layout.fillWidth: true
Layout.preferredHeight: warningLayout.height
color: "#09FFFFFF"
radius: 4
border.color: MoneroComponents.Style.inputBorderColorInActive
border.width: 1
signal linkActivated;
RowLayout {
id: warningLayout
spacing: 0
anchors.left: parent.left
anchors.right: parent.right
Image {
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: 33 * scaleRatio
Layout.preferredWidth: 33 * scaleRatio
Layout.rightMargin: 12 * scaleRatio
Layout.leftMargin: 18 * scaleRatio
Layout.topMargin: 12 * scaleRatio
Layout.bottomMargin: 12 * scaleRatio
source: "../images/warning.png"
}
TextArea {
id: content
Layout.fillWidth: true
color: MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: root.fontSize
horizontalAlignment: TextInput.AlignLeft
selectByMouse: true
textFormat: Text.RichText
wrapMode: Text.WordWrap
textMargin: 0
leftPadding: 4 * scaleRatio
rightPadding: 18 * scaleRatio
topPadding: 10 * scaleRatio
bottomPadding: 10 * scaleRatio
readOnly: true
onLinkActivated: root.linkActivated();
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
}
}
}

View File

@@ -38,10 +38,6 @@ filter::filter(QObject *parent) :
} }
bool filter::eventFilter(QObject *obj, QEvent *ev) { bool filter::eventFilter(QObject *obj, QEvent *ev) {
if(ev->type() == QEvent::KeyPress || ev->type() == QEvent::MouseButtonRelease){
emit userActivity();
}
switch(ev->type()) { switch(ev->type()) {
case QEvent::KeyPress: { case QEvent::KeyPress: {
QKeyEvent *ke = static_cast<QKeyEvent*>(ev); QKeyEvent *ke = static_cast<QKeyEvent*>(ev);

View File

@@ -48,7 +48,6 @@ signals:
void sequenceReleased(const QVariant &o, const QVariant &seq); void sequenceReleased(const QVariant &o, const QVariant &seq);
void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y); void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y);
void mouseReleased(const QVariant &o, const QVariant &x, const QVariant &y); void mouseReleased(const QVariant &o, const QVariant &x, const QVariant &y);
void userActivity();
}; };
#endif // FILTER_H #endif // FILTER_H

View File

@@ -1,798 +0,0 @@
pragma Singleton
import QtQuick 2.0
Object {
FontLoader {
source: "./fontawesome-webfont.ttf"
}
property string fontFamily: "FontAwesome"
// Icons
property string addressBook : "\uf2b9"
property string addressBookO : "\uf2ba"
property string addressCard : "\uf2bb"
property string addressCardO : "\uf2bc"
property string adjust : "\uf042"
property string adn : "\uf170"
property string alignCenter : "\uf037"
property string alignJustify : "\uf039"
property string alignLeft : "\uf036"
property string alignRight : "\uf038"
property string amazon : "\uf270"
property string ambulance : "\uf0f9"
property string americanSignLanguageInterpreting : "\uf2a3"
property string anchor : "\uf13d"
property string android : "\uf17b"
property string angellist : "\uf209"
property string angleDoubleDown : "\uf103"
property string angleDoubleLeft : "\uf100"
property string angleDoubleRight : "\uf101"
property string angleDoubleUp : "\uf102"
property string angleDown : "\uf107"
property string angleLeft : "\uf104"
property string angleRight : "\uf105"
property string angleUp : "\uf106"
property string apple : "\uf179"
property string archive : "\uf187"
property string areaChart : "\uf1fe"
property string arrowCircleDown : "\uf0ab"
property string arrowCircleLeft : "\uf0a8"
property string arrowCircleODown : "\uf01a"
property string arrowCircleOLeft : "\uf190"
property string arrowCircleORight : "\uf18e"
property string arrowCircleOUp : "\uf01b"
property string arrowCircleRight : "\uf0a9"
property string arrowCircleUp : "\uf0aa"
property string arrowDown : "\uf063"
property string arrowLeft : "\uf060"
property string arrowRight : "\uf061"
property string arrowUp : "\uf062"
property string arrows : "\uf047"
property string arrowsAlt : "\uf0b2"
property string arrowsH : "\uf07e"
property string arrowsV : "\uf07d"
property string aslInterpreting : "\uf2a3"
property string assistiveListeningSystems : "\uf2a2"
property string asterisk : "\uf069"
property string at : "\uf1fa"
property string audioDescription : "\uf29e"
property string automobile : "\uf1b9"
property string backward : "\uf04a"
property string balanceScale : "\uf24e"
property string ban : "\uf05e"
property string bandcamp : "\uf2d5"
property string bank : "\uf19c"
property string barChart : "\uf080"
property string barChartO : "\uf080"
property string barcode : "\uf02a"
property string bars : "\uf0c9"
property string bath : "\uf2cd"
property string bathtub : "\uf2cd"
property string battery : "\uf240"
property string battery0 : "\uf244"
property string battery1 : "\uf243"
property string battery2 : "\uf242"
property string battery3 : "\uf241"
property string battery4 : "\uf240"
property string batteryEmpty : "\uf244"
property string batteryFull : "\uf240"
property string batteryHalf : "\uf242"
property string batteryQuarter : "\uf243"
property string batteryThreeQuarters : "\uf241"
property string bed : "\uf236"
property string beer : "\uf0fc"
property string behance : "\uf1b4"
property string behanceSquare : "\uf1b5"
property string bell : "\uf0f3"
property string bellO : "\uf0a2"
property string bellSlash : "\uf1f6"
property string bellSlashO : "\uf1f7"
property string bicycle : "\uf206"
property string binoculars : "\uf1e5"
property string birthdayCake : "\uf1fd"
property string bitbucket : "\uf171"
property string bitbucketSquare : "\uf172"
property string bitcoin : "\uf15a"
property string blackTie : "\uf27e"
property string blind : "\uf29d"
property string bluetooth : "\uf293"
property string bluetoothB : "\uf294"
property string bold : "\uf032"
property string bolt : "\uf0e7"
property string bomb : "\uf1e2"
property string book : "\uf02d"
property string bookmark : "\uf02e"
property string bookmarkO : "\uf097"
property string braille : "\uf2a1"
property string briefcase : "\uf0b1"
property string btc : "\uf15a"
property string bug : "\uf188"
property string building : "\uf1ad"
property string buildingO : "\uf0f7"
property string bullhorn : "\uf0a1"
property string bullseye : "\uf140"
property string bus : "\uf207"
property string buysellads : "\uf20d"
property string cab : "\uf1ba"
property string calculator : "\uf1ec"
property string calendar : "\uf073"
property string calendarCheckO : "\uf274"
property string calendarMinusO : "\uf272"
property string calendarO : "\uf133"
property string calendarPlusO : "\uf271"
property string calendarTimesO : "\uf273"
property string camera : "\uf030"
property string cameraRetro : "\uf083"
property string car : "\uf1b9"
property string caretDown : "\uf0d7"
property string caretLeft : "\uf0d9"
property string caretRight : "\uf0da"
property string caretSquareODown : "\uf150"
property string caretSquareOLeft : "\uf191"
property string caretSquareORight : "\uf152"
property string caretSquareOUp : "\uf151"
property string caretUp : "\uf0d8"
property string cartArrowDown : "\uf218"
property string cartPlus : "\uf217"
property string cc : "\uf20a"
property string ccAmex : "\uf1f3"
property string ccDinersClub : "\uf24c"
property string ccDiscover : "\uf1f2"
property string ccJcb : "\uf24b"
property string ccMastercard : "\uf1f1"
property string ccPaypal : "\uf1f4"
property string ccStripe : "\uf1f5"
property string ccVisa : "\uf1f0"
property string certificate : "\uf0a3"
property string chain : "\uf0c1"
property string chainBroken : "\uf127"
property string check : "\uf00c"
property string checkCircle : "\uf058"
property string checkCircleO : "\uf05d"
property string checkSquare : "\uf14a"
property string checkSquareO : "\uf046"
property string chevronCircleDown : "\uf13a"
property string chevronCircleLeft : "\uf137"
property string chevronCircleRight : "\uf138"
property string chevronCircleUp : "\uf139"
property string chevronDown : "\uf078"
property string chevronLeft : "\uf053"
property string chevronRight : "\uf054"
property string chevronUp : "\uf077"
property string child : "\uf1ae"
property string chrome : "\uf268"
property string circle : "\uf111"
property string circleO : "\uf10c"
property string circleONotch : "\uf1ce"
property string circleThin : "\uf1db"
property string clipboard : "\uf0ea"
property string clockO : "\uf017"
property string clone : "\uf24d"
property string close : "\uf00d"
property string cloud : "\uf0c2"
property string cloudDownload : "\uf0ed"
property string cloudUpload : "\uf0ee"
property string cny : "\uf157"
property string code : "\uf121"
property string codeFork : "\uf126"
property string codepen : "\uf1cb"
property string codiepie : "\uf284"
property string coffee : "\uf0f4"
property string cog : "\uf013"
property string cogs : "\uf085"
property string columns : "\uf0db"
property string comment : "\uf075"
property string commentO : "\uf0e5"
property string commenting : "\uf27a"
property string commentingO : "\uf27b"
property string comments : "\uf086"
property string commentsO : "\uf0e6"
property string compass : "\uf14e"
property string compress : "\uf066"
property string connectdevelop : "\uf20e"
property string contao : "\uf26d"
property string copy : "\uf0c5"
property string copyright : "\uf1f9"
property string creativeCommons : "\uf25e"
property string creditCard : "\uf09d"
property string creditCardAlt : "\uf283"
property string crop : "\uf125"
property string crosshairs : "\uf05b"
property string css3 : "\uf13c"
property string cube : "\uf1b2"
property string cubes : "\uf1b3"
property string cut : "\uf0c4"
property string cutlery : "\uf0f5"
property string dashboard : "\uf0e4"
property string dashcube : "\uf210"
property string database : "\uf1c0"
property string deaf : "\uf2a4"
property string deafness : "\uf2a4"
property string dedent : "\uf03b"
property string delicious : "\uf1a5"
property string desktop : "\uf108"
property string deviantart : "\uf1bd"
property string diamond : "\uf219"
property string digg : "\uf1a6"
property string dollar : "\uf155"
property string dotCircleO : "\uf192"
property string download : "\uf019"
property string dribbble : "\uf17d"
property string driversLicense : "\uf2c2"
property string driversLicenseO : "\uf2c3"
property string dropbox : "\uf16b"
property string drupal : "\uf1a9"
property string edge : "\uf282"
property string edit : "\uf044"
property string eercast : "\uf2da"
property string eject : "\uf052"
property string ellipsisH : "\uf141"
property string ellipsisV : "\uf142"
property string empire : "\uf1d1"
property string envelope : "\uf0e0"
property string envelopeO : "\uf003"
property string envelopeOpen : "\uf2b6"
property string envelopeOpenO : "\uf2b7"
property string envelopeSquare : "\uf199"
property string envira : "\uf299"
property string eraser : "\uf12d"
property string etsy : "\uf2d7"
property string eur : "\uf153"
property string euro : "\uf153"
property string exchange : "\uf0ec"
property string exclamation : "\uf12a"
property string exclamationCircle : "\uf06a"
property string exclamationTriangle : "\uf071"
property string expand : "\uf065"
property string expeditedssl : "\uf23e"
property string externalLink : "\uf08e"
property string externalLinkSquare : "\uf14c"
property string eye : "\uf06e"
property string eyeSlash : "\uf070"
property string eyedropper : "\uf1fb"
property string fa : "\uf2b4"
property string facebook : "\uf09a"
property string facebookF : "\uf09a"
property string facebookOfficial : "\uf230"
property string facebookSquare : "\uf082"
property string fastBackward : "\uf049"
property string fastForward : "\uf050"
property string fax : "\uf1ac"
property string feed : "\uf09e"
property string female : "\uf182"
property string fighterJet : "\uf0fb"
property string file : "\uf15b"
property string fileArchiveO : "\uf1c6"
property string fileAudioO : "\uf1c7"
property string fileCodeO : "\uf1c9"
property string fileExcelO : "\uf1c3"
property string fileImageO : "\uf1c5"
property string fileMovieO : "\uf1c8"
property string fileO : "\uf016"
property string filePdfO : "\uf1c1"
property string filePhotoO : "\uf1c5"
property string filePictureO : "\uf1c5"
property string filePowerpointO : "\uf1c4"
property string fileSoundO : "\uf1c7"
property string fileText : "\uf15c"
property string fileTextO : "\uf0f6"
property string fileVideoO : "\uf1c8"
property string fileWordO : "\uf1c2"
property string fileZipO : "\uf1c6"
property string filesO : "\uf0c5"
property string film : "\uf008"
property string filter : "\uf0b0"
property string fire : "\uf06d"
property string fireExtinguisher : "\uf134"
property string firefox : "\uf269"
property string firstOrder : "\uf2b0"
property string flag : "\uf024"
property string flagCheckered : "\uf11e"
property string flagO : "\uf11d"
property string flash : "\uf0e7"
property string flask : "\uf0c3"
property string flickr : "\uf16e"
property string floppyO : "\uf0c7"
property string folder : "\uf07b"
property string folderO : "\uf114"
property string folderOpen : "\uf07c"
property string folderOpenO : "\uf115"
property string font : "\uf031"
property string fontAwesome : "\uf2b4"
property string fonticons : "\uf280"
property string fortAwesome : "\uf286"
property string forumbee : "\uf211"
property string forward : "\uf04e"
property string foursquare : "\uf180"
property string freeCodeCamp : "\uf2c5"
property string frownO : "\uf119"
property string futbolO : "\uf1e3"
property string gamepad : "\uf11b"
property string gavel : "\uf0e3"
property string gbp : "\uf154"
property string ge : "\uf1d1"
property string gear : "\uf013"
property string gears : "\uf085"
property string genderless : "\uf22d"
property string getPocket : "\uf265"
property string gg : "\uf260"
property string ggCircle : "\uf261"
property string gift : "\uf06b"
property string git : "\uf1d3"
property string gitSquare : "\uf1d2"
property string github : "\uf09b"
property string githubAlt : "\uf113"
property string githubSquare : "\uf092"
property string gitlab : "\uf296"
property string gittip : "\uf184"
property string glass : "\uf000"
property string glide : "\uf2a5"
property string glideG : "\uf2a6"
property string globe : "\uf0ac"
property string google : "\uf1a0"
property string googlePlus : "\uf0d5"
property string googlePlusCircle : "\uf2b3"
property string googlePlusOfficial : "\uf2b3"
property string googlePlusSquare : "\uf0d4"
property string googleWallet : "\uf1ee"
property string graduationCap : "\uf19d"
property string gratipay : "\uf184"
property string grav : "\uf2d6"
property string group : "\uf0c0"
property string hSquare : "\uf0fd"
property string hackerNews : "\uf1d4"
property string handGrabO : "\uf255"
property string handLizardO : "\uf258"
property string handODown : "\uf0a7"
property string handOLeft : "\uf0a5"
property string handORight : "\uf0a4"
property string handOUp : "\uf0a6"
property string handPaperO : "\uf256"
property string handPeaceO : "\uf25b"
property string handPointerO : "\uf25a"
property string handRockO : "\uf255"
property string handScissorsO : "\uf257"
property string handSpockO : "\uf259"
property string handStopO : "\uf256"
property string handshakeO : "\uf2b5"
property string hardOfHearing : "\uf2a4"
property string hashtag : "\uf292"
property string hddO : "\uf0a0"
property string header : "\uf1dc"
property string headphones : "\uf025"
property string heart : "\uf004"
property string heartO : "\uf08a"
property string heartbeat : "\uf21e"
property string history : "\uf1da"
property string home : "\uf015"
property string hospitalO : "\uf0f8"
property string hotel : "\uf236"
property string hourglass : "\uf254"
property string hourglass1 : "\uf251"
property string hourglass2 : "\uf252"
property string hourglass3 : "\uf253"
property string hourglassEnd : "\uf253"
property string hourglassHalf : "\uf252"
property string hourglassO : "\uf250"
property string hourglassStart : "\uf251"
property string houzz : "\uf27c"
property string html5 : "\uf13b"
property string iCursor : "\uf246"
property string idBadge : "\uf2c1"
property string idCard : "\uf2c2"
property string idCardO : "\uf2c3"
property string ils : "\uf20b"
property string image : "\uf03e"
property string imdb : "\uf2d8"
property string inbox : "\uf01c"
property string indent : "\uf03c"
property string industry : "\uf275"
property string info : "\uf129"
property string infoCircle : "\uf05a"
property string inr : "\uf156"
property string instagram : "\uf16d"
property string institution : "\uf19c"
property string internetExplorer : "\uf26b"
property string intersex : "\uf224"
property string ioxhost : "\uf208"
property string italic : "\uf033"
property string joomla : "\uf1aa"
property string jpy : "\uf157"
property string jsfiddle : "\uf1cc"
property string key : "\uf084"
property string keyboardO : "\uf11c"
property string krw : "\uf159"
property string language : "\uf1ab"
property string laptop : "\uf109"
property string lastfm : "\uf202"
property string lastfmSquare : "\uf203"
property string leaf : "\uf06c"
property string leanpub : "\uf212"
property string legal : "\uf0e3"
property string lemonO : "\uf094"
property string levelDown : "\uf149"
property string levelUp : "\uf148"
property string lifeBouy : "\uf1cd"
property string lifeBuoy : "\uf1cd"
property string lifeRing : "\uf1cd"
property string lifeSaver : "\uf1cd"
property string lightbulbO : "\uf0eb"
property string lineChart : "\uf201"
property string link : "\uf0c1"
property string linkedin : "\uf0e1"
property string linkedinSquare : "\uf08c"
property string linode : "\uf2b8"
property string linux : "\uf17c"
property string list : "\uf03a"
property string listAlt : "\uf022"
property string listOl : "\uf0cb"
property string listUl : "\uf0ca"
property string locationArrow : "\uf124"
property string lock : "\uf023"
property string longArrowDown : "\uf175"
property string longArrowLeft : "\uf177"
property string longArrowRight : "\uf178"
property string longArrowUp : "\uf176"
property string lowVision : "\uf2a8"
property string magic : "\uf0d0"
property string magnet : "\uf076"
property string mailForward : "\uf064"
property string mailReply : "\uf112"
property string mailReplyAll : "\uf122"
property string male : "\uf183"
property string map : "\uf279"
property string mapMarker : "\uf041"
property string mapO : "\uf278"
property string mapPin : "\uf276"
property string mapSigns : "\uf277"
property string mars : "\uf222"
property string marsDouble : "\uf227"
property string marsStroke : "\uf229"
property string marsStrokeH : "\uf22b"
property string marsStrokeV : "\uf22a"
property string maxcdn : "\uf136"
property string meanpath : "\uf20c"
property string medium : "\uf23a"
property string medkit : "\uf0fa"
property string meetup : "\uf2e0"
property string mehO : "\uf11a"
property string mercury : "\uf223"
property string microchip : "\uf2db"
property string microphone : "\uf130"
property string microphoneSlash : "\uf131"
property string minus : "\uf068"
property string minusCircle : "\uf056"
property string minusSquare : "\uf146"
property string minusSquareO : "\uf147"
property string mixcloud : "\uf289"
property string mobile : "\uf10b"
property string mobilePhone : "\uf10b"
property string modx : "\uf285"
property string money : "\uf0d6"
property string moonO : "\uf186"
property string mortarBoard : "\uf19d"
property string motorcycle : "\uf21c"
property string mousePointer : "\uf245"
property string music : "\uf001"
property string navicon : "\uf0c9"
property string neuter : "\uf22c"
property string newspaperO : "\uf1ea"
property string objectGroup : "\uf247"
property string objectUngroup : "\uf248"
property string odnoklassniki : "\uf263"
property string odnoklassnikiSquare : "\uf264"
property string opencart : "\uf23d"
property string openid : "\uf19b"
property string opera : "\uf26a"
property string optinMonster : "\uf23c"
property string outdent : "\uf03b"
property string pagelines : "\uf18c"
property string paintBrush : "\uf1fc"
property string paperPlane : "\uf1d8"
property string paperPlaneO : "\uf1d9"
property string paperclip : "\uf0c6"
property string paragraph : "\uf1dd"
property string paste : "\uf0ea"
property string pause : "\uf04c"
property string pauseCircle : "\uf28b"
property string pauseCircleO : "\uf28c"
property string paw : "\uf1b0"
property string paypal : "\uf1ed"
property string pencil : "\uf040"
property string pencilSquare : "\uf14b"
property string pencilSquareO : "\uf044"
property string percent : "\uf295"
property string phone : "\uf095"
property string phoneSquare : "\uf098"
property string photo : "\uf03e"
property string pictureO : "\uf03e"
property string pieChart : "\uf200"
property string piedPiper : "\uf2ae"
property string piedPiperAlt : "\uf1a8"
property string piedPiperPp : "\uf1a7"
property string pinterest : "\uf0d2"
property string pinterestP : "\uf231"
property string pinterestSquare : "\uf0d3"
property string plane : "\uf072"
property string play : "\uf04b"
property string playCircle : "\uf144"
property string playCircleO : "\uf01d"
property string plug : "\uf1e6"
property string plus : "\uf067"
property string plusCircle : "\uf055"
property string plusSquare : "\uf0fe"
property string plusSquareO : "\uf196"
property string podcast : "\uf2ce"
property string powerOff : "\uf011"
property string printIcon : "\uf02f"
property string productHunt : "\uf288"
property string puzzlePiece : "\uf12e"
property string qq : "\uf1d6"
property string qrcode : "\uf029"
property string question : "\uf128"
property string questionCircle : "\uf059"
property string questionCircleO : "\uf29c"
property string quora : "\uf2c4"
property string quoteLeft : "\uf10d"
property string quoteRight : "\uf10e"
property string ra : "\uf1d0"
property string random : "\uf074"
property string ravelry : "\uf2d9"
property string rebel : "\uf1d0"
property string recycle : "\uf1b8"
property string reddit : "\uf1a1"
property string redditAlien : "\uf281"
property string redditSquare : "\uf1a2"
property string refresh : "\uf021"
property string registered : "\uf25d"
property string remove : "\uf00d"
property string renren : "\uf18b"
property string reorder : "\uf0c9"
property string repeat : "\uf01e"
property string reply : "\uf112"
property string replyAll : "\uf122"
property string resistance : "\uf1d0"
property string retweet : "\uf079"
property string rmb : "\uf157"
property string road : "\uf018"
property string rocket : "\uf135"
property string rotateLeft : "\uf0e2"
property string rotateRight : "\uf01e"
property string rouble : "\uf158"
property string rss : "\uf09e"
property string rssSquare : "\uf143"
property string rub : "\uf158"
property string ruble : "\uf158"
property string rupee : "\uf156"
property string s15 : "\uf2cd"
property string safari : "\uf267"
property string save : "\uf0c7"
property string scissors : "\uf0c4"
property string scribd : "\uf28a"
property string search : "\uf002"
property string searchMinus : "\uf010"
property string searchPlus : "\uf00e"
property string sellsy : "\uf213"
property string send : "\uf1d8"
property string sendO : "\uf1d9"
property string server : "\uf233"
property string share : "\uf064"
property string shareAlt : "\uf1e0"
property string shareAltSquare : "\uf1e1"
property string shareSquare : "\uf14d"
property string shareSquareO : "\uf045"
property string shekel : "\uf20b"
property string sheqel : "\uf20b"
property string shield : "\uf132"
property string ship : "\uf21a"
property string shirtsinbulk : "\uf214"
property string shoppingBag : "\uf290"
property string shoppingBasket : "\uf291"
property string shoppingCart : "\uf07a"
property string shower : "\uf2cc"
property string signIn : "\uf090"
property string signLanguage : "\uf2a7"
property string signOut : "\uf08b"
property string signal : "\uf012"
property string signing : "\uf2a7"
property string simplybuilt : "\uf215"
property string sitemap : "\uf0e8"
property string skyatlas : "\uf216"
property string skype : "\uf17e"
property string slack : "\uf198"
property string sliders : "\uf1de"
property string slideshare : "\uf1e7"
property string smileO : "\uf118"
property string snapchat : "\uf2ab"
property string snapchatGhost : "\uf2ac"
property string snapchatSquare : "\uf2ad"
property string snowflakeO : "\uf2dc"
property string soccerBallO : "\uf1e3"
property string sort : "\uf0dc"
property string sortAlphaAsc : "\uf15d"
property string sortAlphaDesc : "\uf15e"
property string sortAmountAsc : "\uf160"
property string sortAmountDesc : "\uf161"
property string sortAsc : "\uf0de"
property string sortDesc : "\uf0dd"
property string sortDown : "\uf0dd"
property string sortNumericAsc : "\uf162"
property string sortNumericDesc : "\uf163"
property string sortUp : "\uf0de"
property string soundcloud : "\uf1be"
property string spaceShuttle : "\uf197"
property string spinner : "\uf110"
property string spoon : "\uf1b1"
property string spotify : "\uf1bc"
property string square : "\uf0c8"
property string squareO : "\uf096"
property string stackExchange : "\uf18d"
property string stackOverflow : "\uf16c"
property string star : "\uf005"
property string starHalf : "\uf089"
property string starHalfEmpty : "\uf123"
property string starHalfFull : "\uf123"
property string starHalfO : "\uf123"
property string starO : "\uf006"
property string steam : "\uf1b6"
property string steamSquare : "\uf1b7"
property string stepBackward : "\uf048"
property string stepForward : "\uf051"
property string stethoscope : "\uf0f1"
property string stickyNote : "\uf249"
property string stickyNoteO : "\uf24a"
property string stop : "\uf04d"
property string stopCircle : "\uf28d"
property string stopCircleO : "\uf28e"
property string streetView : "\uf21d"
property string strikethrough : "\uf0cc"
property string stumbleupon : "\uf1a4"
property string stumbleuponCircle : "\uf1a3"
property string subscript : "\uf12c"
property string subway : "\uf239"
property string suitcase : "\uf0f2"
property string sunO : "\uf185"
property string superpowers : "\uf2dd"
property string superscript : "\uf12b"
property string support : "\uf1cd"
property string table : "\uf0ce"
property string tablet : "\uf10a"
property string tachometer : "\uf0e4"
property string tag : "\uf02b"
property string tags : "\uf02c"
property string tasks : "\uf0ae"
property string taxi : "\uf1ba"
property string telegram : "\uf2c6"
property string television : "\uf26c"
property string tencentWeibo : "\uf1d5"
property string terminal : "\uf120"
property string textHeight : "\uf034"
property string textWidth : "\uf035"
property string th : "\uf00a"
property string thLarge : "\uf009"
property string thList : "\uf00b"
property string themeisle : "\uf2b2"
property string thermometer : "\uf2c7"
property string thermometer0 : "\uf2cb"
property string thermometer1 : "\uf2ca"
property string thermometer2 : "\uf2c9"
property string thermometer3 : "\uf2c8"
property string thermometer4 : "\uf2c7"
property string thermometerEmpty : "\uf2cb"
property string thermometerFull : "\uf2c7"
property string thermometerHalf : "\uf2c9"
property string thermometerQuarter : "\uf2ca"
property string thermometerThreeQuarters : "\uf2c8"
property string thumbTack : "\uf08d"
property string thumbsDown : "\uf165"
property string thumbsODown : "\uf088"
property string thumbsOUp : "\uf087"
property string thumbsUp : "\uf164"
property string ticket : "\uf145"
property string times : "\uf00d"
property string timesCircle : "\uf057"
property string timesCircleO : "\uf05c"
property string timesRectangle : "\uf2d3"
property string timesRectangleO : "\uf2d4"
property string tint : "\uf043"
property string toggleDown : "\uf150"
property string toggleLeft : "\uf191"
property string toggleOff : "\uf204"
property string toggleOn : "\uf205"
property string toggleRight : "\uf152"
property string toggleUp : "\uf151"
property string trademark : "\uf25c"
property string train : "\uf238"
property string transgender : "\uf224"
property string transgenderAlt : "\uf225"
property string trash : "\uf1f8"
property string trashO : "\uf014"
property string tree : "\uf1bb"
property string trello : "\uf181"
property string tripadvisor : "\uf262"
property string trophy : "\uf091"
property string truck : "\uf0d1"
property string tryIcon : "\uf195"
property string tty : "\uf1e4"
property string tumblr : "\uf173"
property string tumblrSquare : "\uf174"
property string turkishLira : "\uf195"
property string tv : "\uf26c"
property string twitch : "\uf1e8"
property string twitter : "\uf099"
property string twitterSquare : "\uf081"
property string umbrella : "\uf0e9"
property string underline : "\uf0cd"
property string undo : "\uf0e2"
property string universalAccess : "\uf29a"
property string university : "\uf19c"
property string unlink : "\uf127"
property string unlock : "\uf09c"
property string unlockAlt : "\uf13e"
property string unsorted : "\uf0dc"
property string upload : "\uf093"
property string usb : "\uf287"
property string usd : "\uf155"
property string user : "\uf007"
property string userCircle : "\uf2bd"
property string userCircleO : "\uf2be"
property string userMd : "\uf0f0"
property string userO : "\uf2c0"
property string userPlus : "\uf234"
property string userSecret : "\uf21b"
property string userTimes : "\uf235"
property string users : "\uf0c0"
property string vcard : "\uf2bb"
property string vcardO : "\uf2bc"
property string venus : "\uf221"
property string venusDouble : "\uf226"
property string venusMars : "\uf228"
property string viacoin : "\uf237"
property string viadeo : "\uf2a9"
property string viadeoSquare : "\uf2aa"
property string videoCamera : "\uf03d"
property string vimeo : "\uf27d"
property string vimeoSquare : "\uf194"
property string vine : "\uf1ca"
property string vk : "\uf189"
property string volumeControlPhone : "\uf2a0"
property string volumeDown : "\uf027"
property string volumeOff : "\uf026"
property string volumeUp : "\uf028"
property string warning : "\uf071"
property string wechat : "\uf1d7"
property string weibo : "\uf18a"
property string weixin : "\uf1d7"
property string whatsapp : "\uf232"
property string wheelchair : "\uf193"
property string wheelchairAlt : "\uf29b"
property string wifi : "\uf1eb"
property string wikipediaW : "\uf266"
property string windowClose : "\uf2d3"
property string windowCloseO : "\uf2d4"
property string windowMaximize : "\uf2d0"
property string windowMinimize : "\uf2d1"
property string windowRestore : "\uf2d2"
property string windows : "\uf17a"
property string won : "\uf159"
property string wordpress : "\uf19a"
property string wpbeginner : "\uf297"
property string wpexplorer : "\uf2de"
property string wpforms : "\uf298"
property string wrench : "\uf0ad"
property string xing : "\uf168"
property string xingSquare : "\uf169"
property string yCombinator : "\uf23b"
property string yCombinatorSquare : "\uf1d4"
property string yahoo : "\uf19e"
property string yc : "\uf23b"
property string ycSquare : "\uf1d4"
property string yelp : "\uf1e9"
property string yen : "\uf157"
property string yoast : "\uf2b1"
property string youtube : "\uf167"
property string youtubePlay : "\uf16a"
property string youtubeSquare : "\uf166"
}

View File

@@ -1,8 +0,0 @@
import QtQuick 2.0
QtObject {
id: object
default property alias children: object.__children
property list<QtObject> __children: [QtObject {}]
}

View File

@@ -1,2 +0,0 @@
module FontAwesome
singleton FontAwesome 1.0 FontAwesome.qml

View File

@@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fonts/SFUIDisplay-Bold.otf Normal file

Binary file not shown.

BIN
fonts/SFUIDisplay-Light.otf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -17,15 +17,16 @@ if [ ! -d $MONERO_DIR/src ]; then
fi fi
git submodule update --remote git submodule update --remote
git -C $MONERO_DIR fetch git -C $MONERO_DIR fetch
git -C $MONERO_DIR checkout origin/release-v0.13 git -C $MONERO_DIR checkout v0.12.2.0
# get monero core tag # get monero core tag
pushd $MONERO_DIR
get_tag get_tag
popd
# create local monero branch # create local monero branch
git -C $MONERO_DIR checkout -B $VERSIONTAG git -C $MONERO_DIR checkout -B $VERSIONTAG
git -C $MONERO_DIR submodule init
git -C $MONERO_DIR submodule update
# Merge monero PR dependencies # Merge monero PR dependencies
# Workaround for git username requirements # Workaround for git username requirements
@@ -47,9 +48,6 @@ done
$(git -C $MONERO_DIR config user.name "$OLD_GIT_USER") $(git -C $MONERO_DIR config user.name "$OLD_GIT_USER")
$(git -C $MONERO_DIR config user.email "$OLD_GIT_EMAIL") $(git -C $MONERO_DIR config user.email "$OLD_GIT_EMAIL")
git -C $MONERO_DIR submodule init
git -C $MONERO_DIR submodule update
# Build libwallet if it doesnt exist # Build libwallet if it doesnt exist
if [ ! -f $MONERO_DIR/lib/libwallet_merged.a ]; then if [ ! -f $MONERO_DIR/lib/libwallet_merged.a ]; then
echo "libwallet_merged.a not found - Building libwallet" echo "libwallet_merged.a not found - Building libwallet"
@@ -77,7 +75,8 @@ else
fi fi
if [ "$BUILD_LIBWALLET" != true ]; then if [ "$BUILD_LIBWALLET" != true ]; then
exit 0 # exit this script
return
fi fi
echo "GUI_MONERO_VERSION=\"$VERSIONTAG\"" > $MONERO_DIR/version.sh echo "GUI_MONERO_VERSION=\"$VERSIONTAG\"" > $MONERO_DIR/version.sh
@@ -90,11 +89,6 @@ if [ -z $BUILD_TYPE ]; then
BUILD_TYPE=release BUILD_TYPE=release
fi fi
BUILD_TREZOR_FLAGS=" -DUSE_DEVICE_TREZOR=ON"
if [ "$BUILD_TREZOR" == false ]; then
BUILD_TREZOR_FLAGS=" -DUSE_DEVICE_TREZOR=OFF"
fi
STATIC=false STATIC=false
ANDROID=false ANDROID=false
if [ "$BUILD_TYPE" == "release" ]; then if [ "$BUILD_TYPE" == "release" ]; then
@@ -143,9 +137,9 @@ make_exec="make"
if [ "$platform" == "darwin" ]; then if [ "$platform" == "darwin" ]; then
echo "Configuring build for MacOS.." echo "Configuring build for MacOS.."
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## LINUX 64 ## LINUX 64
@@ -153,38 +147,38 @@ elif [ "$platform" == "linux64" ]; then
echo "Configuring build for Linux x64" echo "Configuring build for Linux x64"
if [ "$ANDROID" == true ]; then if [ "$ANDROID" == true ]; then
echo "Configuring build for Android on Linux host" echo "Configuring build for Android on Linux host"
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="armv7-a" -D ANDROID=true -D BUILD_GUI_DEPS=ON -D USE_LTO=OFF -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="armv7-a" -D ANDROID=true -D BUILD_GUI_DEPS=ON -D USE_LTO=OFF -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
elif [ "$STATIC" == true ]; then elif [ "$STATIC" == true ]; then
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="x86-64" -D BUILD_64=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## LINUX 32 ## LINUX 32
elif [ "$platform" == "linux32" ]; then elif [ "$platform" == "linux32" ]; then
echo "Configuring build for Linux i686" echo "Configuring build for Linux i686"
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D ARCH="i686" -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## LINUX ARMv7 ## LINUX ARMv7
elif [ "$platform" == "linuxarmv7" ]; then elif [ "$platform" == "linuxarmv7" ]; then
echo "Configuring build for Linux armv7" echo "Configuring build for Linux armv7"
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D STATIC=ON -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D BUILD_TESTS=OFF -D ARCH="armv7-a" -D -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## LINUX other ## LINUX other
elif [ "$platform" == "linux" ]; then elif [ "$platform" == "linux" ]; then
echo "Configuring build for Linux general" echo "Configuring build for Linux general"
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
## Windows 64 ## Windows 64
@@ -193,21 +187,21 @@ elif [ "$platform" == "mingw64" ]; then
# Do something under Windows NT platform # Do something under Windows NT platform
echo "Configuring build for MINGW64.." echo "Configuring build for MINGW64.."
BOOST_ROOT=/mingw64/boost BOOST_ROOT=/mingw64/boost
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BOOST_ROOT="$BOOST_ROOT" -D ARCH="x86-64" -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" -G "MSYS Makefiles" -D CMAKE_TOOLCHAIN_FILE=../../cmake/64-bit-toolchain.cmake -D MSYS2_FOLDER=c:/msys64 ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BOOST_ROOT="$BOOST_ROOT" -D ARCH="x86-64" -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" -G "MSYS Makefiles" ../..
## Windows 32 ## Windows 32
elif [ "$platform" == "mingw32" ]; then elif [ "$platform" == "mingw32" ]; then
# Do something under Windows NT platform # Do something under Windows NT platform
echo "Configuring build for MINGW32.." echo "Configuring build for MINGW32.."
BOOST_ROOT=/mingw32/boost BOOST_ROOT=/mingw32/boost
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D Boost_DEBUG=ON -D BOOST_ROOT="$BOOST_ROOT" -D ARCH="i686" -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" -G "MSYS Makefiles" -D CMAKE_TOOLCHAIN_FILE=../../cmake/32-bit-toolchain.cmake -D MSYS2_FOLDER=c:/msys32 ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D Boost_DEBUG=ON -D BOOST_ROOT="$BOOST_ROOT" -D ARCH="i686" -D BUILD_64=OFF -D BUILD_GUI_DEPS=ON -D INSTALL_VENDORED_LIBUNBOUND=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" -G "MSYS Makefiles" ../..
make_exec="mingw32-make" make_exec="mingw32-make"
else else
echo "Unknown platform, configuring general build" echo "Unknown platform, configuring general build"
if [ "$STATIC" == true ]; then if [ "$STATIC" == true ]; then
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D STATIC=ON -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
else else
cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON $BUILD_TREZOR_FLAGS -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../.. cmake -D CMAKE_BUILD_TYPE=$CMAKE_BUILD_TYPE -D BUILD_GUI_DEPS=ON -D CMAKE_INSTALL_PREFIX="$MONERO_DIR" ../..
fi fi
fi fi
@@ -243,13 +237,12 @@ eval make -C $MONERO_DIR/build/$BUILD_TYPE/external/easylogging++ all install
eval make -C $MONERO_DIR/build/$BUILD_TYPE/external/db_drivers/liblmdb all install eval make -C $MONERO_DIR/build/$BUILD_TYPE/external/db_drivers/liblmdb all install
# Install libunbound # Install libunbound
if [ -d $MONERO_DIR/build/$BUILD_TYPE/external/unbound ]; then echo "Installing libunbound..."
echo "Installing libunbound..." pushd $MONERO_DIR/build/$BUILD_TYPE/external/unbound
pushd $MONERO_DIR/build/$BUILD_TYPE/external/unbound # no need to make, it was already built as dependency for libwallet
# no need to make, it was already built as dependency for libwallet # make -j$CPU_CORE_COUNT
# make -j$CPU_CORE_COUNT $make_exec install -j$CPU_CORE_COUNT
$make_exec install -j$CPU_CORE_COUNT popd
popd
fi
popd popd

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B

BIN
images/ascSortIndicator.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

BIN
images/checkedBlackIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 B

BIN
images/closeIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

BIN
images/connectedImage.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
images/datePicker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

BIN
images/deleteIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 448 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 922 B

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 444 B

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 B

BIN
images/expandTable.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 575 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

BIN
images/gotoBasicVersion.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 B

BIN
images/greyTriangle.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

BIN
images/helpIcon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 B

Some files were not shown because too many files have changed in this diff Show More