Compare commits

..

7 Commits

Author SHA1 Message Date
luigi1111
c94ed65700 Merge pull request #1289
791c267 fix Leftpanel overlay
2018-04-22 19:59:43 -05:00
luigi1111
db5e71c1ff Merge pull request #1248
4aec4e3 Mac build: add libboost_system-mt.dylib needed by libboost_thread-mt.dylib
2018-04-19 11:30:01 -05:00
luigi1111
9eefa33dd6 Merge pull request #1244
9393529 ProgressBar: fix conversion to percentage
2018-04-19 11:28:39 -05:00
luigi1111
7a759f7dbf Merge pull request #1246
84fad36 Add missing newline to transfer confirm dialog
2018-04-08 17:48:36 -05:00
stoffu
4aec4e36f8 Mac build: add libboost_system-mt.dylib needed by libboost_thread-mt.dylib 2018-04-03 18:55:58 +09:00
luigi1111
755977d1ba Merge pull request #1241
bb12774 Submodule: use v0.12 tag instead of branch
2018-04-02 14:50:04 -05:00
dEBRUYNE-1
bb127744af Submodule: use v0.12 tag instead of branch 2018-04-02 21:35:28 +02:00
290 changed files with 37721 additions and 59651 deletions

177
BasicPanel.qml Normal file
View File

@@ -0,0 +1,177 @@
// 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 QtGraphicalEffects 1.0
import "components"
import "pages"
// mbg033 @ 2016-10-08: Not used anymore, to be deleted
Rectangle {
id: root
width: 470
// height: paymentId.y + paymentId.height + 12
height: header.height + header.anchors.topMargin + transferBasic.height
color: "#F0EEEE"
border.width: 1
border.color: "#DBDBDB"
property alias balanceText : balanceText.text;
property alias unlockedBalanceText : availableBalanceText.text;
// repeating signal to the outside world
signal paymentClicked(string address, string paymentId, string amount, int mixinCount,
int priority, string description)
Connections {
target: transferBasic
onPaymentClicked: {
console.log("BasicPanel: paymentClicked")
root.paymentClicked(address, paymentId, amount, mixinCount, priority, description)
}
}
Rectangle {
id: header
anchors.left: parent.left
anchors.right: parent.right
anchors.top: parent.top
anchors.leftMargin: 1
anchors.rightMargin: 1
anchors.topMargin: 30
height: 64
color: "#FFFFFF"
Image {
id: logo
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: -5
anchors.left: parent.left
anchors.leftMargin: 20
source: "images/moneroLogo2.png"
}
Grid {
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right
width: 256
columns: 3
Text {
width: 116
height: 20
font.family: "Arial"
font.pixelSize: 12
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignBottom
color: "#535353"
text: qsTr("Locked Balance:")
}
Text {
id: balanceText
width: 110
height: 20
font.family: "Arial"
font.pixelSize: 18
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignBottom
color: "#000000"
text: qsTr("78.9239845")
}
Item {
height: 20
width: 20
Image {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
source: "images/lockIcon.png"
}
}
Text {
width: 116
height: 20
font.family: "Arial"
font.pixelSize: 12
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignBottom
color: "#535353"
text: qsTr("Available Balance:")
}
Text {
id: availableBalanceText
width: 110
height: 20
font.family: "Arial"
font.pixelSize: 14
elide: Text.ElideRight
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignBottom
color: "#000000"
text: qsTr("2324.9239845")
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: parent.bottom
height: 1
color: "#DBDBDB"
}
}
Item {
anchors.top: header.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
Transfer {
id : transferBasic
anchors.fill: parent
}
}
// indicate disabled state
// Desaturate {
// anchors.fill: parent
// source: parent
// desaturation: root.enabled ? 0.0 : 1.0
// }
}

View File

@@ -72,7 +72,6 @@ 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
menuColumn.previousButton.checked = true menuColumn.previousButton.checked = true
} }
@@ -96,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
@@ -111,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"
} }
@@ -247,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
@@ -477,7 +478,7 @@ Rectangle {
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("S") + translationManager.emptyString
dotColor: "#FFD781" dotColor: "#FFD781"
under: advancedButton under: advancedButton
onClicked: { onClicked: {
@@ -577,7 +578,7 @@ Rectangle {
anchors.rightMargin: 0 anchors.rightMargin: 0
anchors.bottom: networkStatus.top; anchors.bottom: networkStatus.top;
height: 10 * scaleRatio height: 10 * scaleRatio
color: "transparent" color: "black"
} }
NetworkStatusItem { NetworkStatusItem {

View File

@@ -1,49 +0,0 @@
#include <QCoreApplication>
#include <QStandardPaths>
#include <QFileInfo>
#include <QString>
#include "Logger.h"
#include "wallet/api/wallet2_api.h"
// default log path by OS (should be writable)
static const QString default_name = "monero-wallet-gui.log";
#if defined(Q_OS_ANDROID) || defined(Q_OS_IOS)
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).at(0);
#elif defined(Q_OS_WIN)
static const QString osPath = QCoreApplication::applicationDirPath();
#elif defined(Q_OS_MAC)
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0) + "/Library/Logs";
#else // linux + bsd
static const QString osPath = QStandardPaths::standardLocations(QStandardPaths::HomeLocation).at(0);
#endif
// return the absolute path of the logfile
const QString getLogPath(const QString logPath)
{
const QFileInfo fi(logPath);
if(!logPath.isEmpty() && !fi.isDir())
return fi.absoluteFilePath();
else
return osPath + "/" + default_name;
}
// custom messageHandler that foward all messages to easylogging
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message)
{
(void) context; // context isn't used in release builds
const std::string cat = "frontend"; // category displayed in the log
const std::string msg = message.toStdString();
switch(type)
{
case QtDebugMsg: Monero::Wallet::debug(cat, msg); break;
case QtInfoMsg: Monero::Wallet::info(cat, msg); break;
case QtWarningMsg: Monero::Wallet::warning(cat, msg); break;
case QtCriticalMsg: Monero::Wallet::error(cat, msg); break;
case QtFatalMsg: Monero::Wallet::error(cat, msg); break;
}
}

View File

@@ -1,8 +0,0 @@
#ifndef LOGGER_H
#define LOGGER_H
const QString getLogPath(const QString logPath);
void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &message);
#endif // LOGGER_H

View File

@@ -37,7 +37,6 @@ import QtGraphicalEffects 1.0
import moneroComponents.Wallet 1.0 import moneroComponents.Wallet 1.0
import "./pages" import "./pages"
import "./pages/settings"
Rectangle { Rectangle {
id: root id: root
@@ -51,7 +50,6 @@ Rectangle {
property string unlockedBalanceText property string unlockedBalanceText
property int minHeight: (appWindow.height > 800) ? appWindow.height : 800 * scaleRatio property int minHeight: (appWindow.height > 800) ? appWindow.height : 800 * scaleRatio
property alias contentHeight: mainFlickable.contentHeight property alias contentHeight: mainFlickable.contentHeight
property alias flickable: mainFlickable
// property int headerHeight: header.height // property int headerHeight: header.height
property Transfer transferView: Transfer { } property Transfer transferView: Transfer { }
@@ -122,7 +120,7 @@ Rectangle {
}, 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: 1000 * scaleRatio }
}, State { }, State {
name: "TxKey" name: "TxKey"
PropertyChanges { target: root; currentView: txkeyView } PropertyChanges { target: root; currentView: txkeyView }
@@ -130,7 +128,7 @@ Rectangle {
}, State { }, State {
name: "SharedRingDB" name: "SharedRingDB"
PropertyChanges { target: root; currentView: sharedringdbView } PropertyChanges { target: root; currentView: sharedringdbView }
PropertyChanges { target: mainFlickable; contentHeight: sharedringdbView.panelHeight + 100 } PropertyChanges { target: mainFlickable; contentHeight: minHeight }
}, State { }, State {
name: "AddressBook" name: "AddressBook"
PropertyChanges { target: root; currentView: addressBookView } PropertyChanges { target: root; currentView: addressBookView }
@@ -142,7 +140,7 @@ Rectangle {
}, 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: 2000 * scaleRatio }
}, State { }, State {
name: "Mining" name: "Mining"
PropertyChanges { target: root; currentView: miningView } PropertyChanges { target: root; currentView: miningView }

102
README.md
View File

@@ -69,25 +69,39 @@ Packaging for your favorite distribution would be a welcome contribution!
### On Linux: ### On Linux:
(Tested on Ubuntu 17.10 x64, Ubuntu 18.04 x64 and Gentoo x64) (Tested on Ubuntu 16.04 x86, 16.10 x64, Gentoo x64 and Linux Mint 18 "Sarah" - Cinnamon x64)
1. Install Monero dependencies 1. Install Monero dependencies
- For Debian distributions (Debian, Ubuntu, Mint, Tails...) - For Ubuntu and Mint
`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. Grab an up-to-date copy of the monero-gui repository
*Note*: Qt 5.7 is the minimum version required to build the GUI. This makes **some** distributions (mostly based on debian, like Ubuntu 16.x or Linux Mint 18.x) obsolete. You can still build the GUI if you install an [official Qt release](https://wiki.qt.io/Install_Qt_5_on_Ubuntu), but this is not officially supported. `git clone https://github.com/monero-project/monero-gui.git`
- For Ubuntu 17.10+ 3. Go into the repository
`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` `cd monero-gui`
4. Install the GUI dependencies
- For Ubuntu 16.04 x86
`sudo apt install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-xmllistmodel qttools5-dev-tools qml-module-qtquick-dialogs`
- For Ubuntu 16.04+ x64
`sudo apt install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtquick-controls qml-module-qtquick-xmllistmodel qttools5-dev-tools qml-module-qtquick-dialogs qml-module-qt-labs-settings libqt5qml-graphicaleffects`
- For Linux Mint 18 "Sarah" - Cinnamon x64
`sudo apt install qml-module-qt-labs-settings qml-module-qtgraphicaleffects`
- For Gentoo - For Gentoo
@@ -95,7 +109,7 @@ Packaging for your favorite distribution would be a welcome contribution!
- Optional : To build the flag `WITH_SCANNER` - Optional : To build the flag `WITH_SCANNER`
- For Ubuntu - For Ubuntu and Mint
`sudo apt install qtmultimedia5-dev qml-module-qtmultimedia libzbar-dev` `sudo apt install qtmultimedia5-dev qml-module-qtmultimedia libzbar-dev`
@@ -105,17 +119,15 @@ Packaging for your favorite distribution would be a welcome contribution!
`emerge dev-qt/qtmultimedia:5 media-gfx/zbar` `emerge dev-qt/qtmultimedia:5 media-gfx/zbar`
5. Build the GUI
3. Clone repository - For Ubuntu and Mint
`git clone https://github.com/monero-project/monero-gui.git` `./build.sh`
4. Build - For Gentoo
``` `QT_SELECT=5 ./build.sh`
cd monero-gui
QT_SELECT=5 ./build.sh
```
The executable can be found in the build/release/bin folder. The executable can be found in the build/release/bin folder.
@@ -182,47 +194,57 @@ More info: http://stackoverflow.com/a/35098040/1683164
### On Windows: ### On Windows:
The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not officially supported anymore. 1. Install [msys2](http://msys2.github.io/), follow the instructions on that page on how to update packages to the latest versions
1. Install [MSYS2](https://www.msys2.org/), follow the instructions on that page on how to update system and packages to the latest versions 2. Install Monero dependencies as described in [monero documentation](https://github.com/monero-project/monero) into msys2 environment
**As we only build application for x86, install only dependencies for x86 architecture (i686 in package name)**
```
pacman -S mingw-w64-i686-toolchain make mingw-w64-i686-cmake mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-zeromq mingw-w64-i686-libsodium
2. Open an 64-bit MSYS2 shell: Use the *MSYS2 MinGW 64-bit* shortcut, or use the `msys2_shell.cmd` batch file with a `-mingw64` parameter ```
3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names 3. Install git into msys2 environment
```
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
```
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
```
pacman -S mingw-w64-x86_64-qt5
```
There is no more need to download some special installer from the Qt website, the standard MSYS2 package for Qt will do in almost all circumstances.
5. Install git
``` ```
pacman -S git pacman -S git
``` ```
6. Clone repository 4. Install Qt5 from [official site](https://www.qt.io/download-open-source/)
- download unified installer, run and select following options:
- Qt > Qt 5.7 > MinGW 5.3.0 32 bit
- Tools > MinGW 5.3.0
- continue with installation
5. Open ```MinGW-w64 Win32 Shell``` shell
```%MSYS_ROOT%\msys2_shell.cmd -mingw32```
Where ```%MSYS_ROOT%``` will be ```c:\msys32``` if your host OS is x86-based or ```c:\msys64``` if your host OS
is x64-based
6. Install the latest version of boost, specifically the required static libraries
``` ```
cd
wget http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2
tar xjf boost_1_63_0.tar.bz2
cd boost_1_63_0
./bootstrap.sh mingw
./b2 --prefix=/mingw32/boost --layout=tagged --without-mpi --without-python toolset=gcc address-model=32 variant=debug,release link=static threading=multi runtime-link=static -j$(nproc) install
```
7. Clone repository
```
cd
git clone https://github.com/monero-project/monero-gui.git git clone https://github.com/monero-project/monero-gui.git
``` ```
7. Build 8. Build the GUI
``` ```
cd monero-gui cd monero-gui
export PATH=$(ls -rd /c/Qt/5.[6,7,8]/mingw53_32/bin | head -1):$PATH
./build.sh ./build.sh
cd build cd build
make deploy make deploy
``` ```
The executable can be found in the `.\release\bin` directory. The executable can be found in the ```.\release\bin``` directory.

View File

@@ -25,12 +25,19 @@ bool TranslationManager::setLanguage(const QString &language)
return true; return true;
} }
// translations are compiled into app binary
#ifdef Q_OS_MACX
QString dir = qApp->applicationDirPath() + "/../Resources/translations";
#else
QString dir = qApp->applicationDirPath() + "/translations"; QString dir = qApp->applicationDirPath() + "/translations";
#endif
QString filename = "monero-core_" + language; QString filename = "monero-core_" + language;
qDebug("%s: loading translation file '%s' from '%s'", qDebug("%s: loading translation file '%s' from '%s",
__FUNCTION__, qPrintable(filename), qPrintable(dir)); __FUNCTION__, qPrintable(filename), qPrintable(dir));
if (m_translator->load(filename, dir)) { if (m_translator->load(filename, dir)) {
qDebug("%s: translation for language '%s' loaded successfully", qDebug("%s: translation for language '%s' loaded successfully",
__FUNCTION__, qPrintable(language)); __FUNCTION__, qPrintable(language));
@@ -38,24 +45,11 @@ bool TranslationManager::setLanguage(const QString &language)
qApp->installTranslator(m_translator); qApp->installTranslator(m_translator);
emit languageChanged(); emit languageChanged();
return true; return true;
} else {
qCritical("%s: error loading translation for language '%s'",
__FUNCTION__, qPrintable(language));
return false;
} }
qDebug("%s: couldn't load translation file '%s' from '%s'",
__FUNCTION__, qPrintable(filename), qPrintable(dir));
qDebug("%s: loading embedded translation file '%s'",
__FUNCTION__, qPrintable(filename));
if (m_translator->load(filename, ":")) {
qDebug("%s: embedded translation for language '%s' loaded successfully",
__FUNCTION__, qPrintable(language));
qApp->installTranslator(m_translator);
emit languageChanged();
return true;
}
qCritical("%s: error loading translation for language '%s'",
__FUNCTION__, qPrintable(language));
return false;
} }
TranslationManager *TranslationManager::instance() TranslationManager *TranslationManager::instance()

52
build_libwallet_api.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash
# MONERO_URL=https://github.com/monero-project/monero.git
# MONERO_BRANCH=master
CPU_CORE_COUNT=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu)
pushd $(pwd)
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source $ROOT_DIR/utils.sh
INSTALL_DIR=$ROOT_DIR/wallet
MONERO_DIR=$ROOT_DIR/monero
mkdir -p $MONERO_DIR/build/release
pushd $MONERO_DIR/build/release
# reusing function from "utils.sh"
platform=$(get_platform)
pushd $MONERO_DIR/build/release/src/wallet
make -j$CPU_CORE_COUNT
make install -j$CPU_CORE_COUNT
popd
# unbound is one more dependency. can't be merged to the wallet_merged
# since filename conflict (random.c.obj)
# for Linux, we use libunbound shipped with the system, so we don't need to build it
if [ "$platform" != "linux" ]; then
echo "Building libunbound..."
pushd $MONERO_DIR/build/release/external/unbound
# no need to make, it was already built as dependency for libwallet
# make -j$CPU_CORE_COUNT
make install -j$CPU_CORE_COUNT
popd
fi
popd

View File

@@ -57,12 +57,7 @@ RowLayout {
radius: 3 radius: 3
y: 0 y: 0
color: "transparent" color: "transparent"
border.color: border.color: checkBox.checked ? Qt.rgba(1, 1, 1, 0.35) : Qt.rgba(1, 1, 1, 0.25)
if(checkBox.checked){
return MoneroComponents.Style.inputBorderColorActive;
} else {
return MoneroComponents.Style.inputBorderColorInActive;
}
} }
Rectangle { Rectangle {

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
@@ -76,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

@@ -27,23 +27,22 @@
// 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 QtQuick.Controls 2.0 import QtQuick.Controls 1.4
import QtQuick.Dialogs 1.2 import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4 import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.2 import QtQuick.Window 2.0
import "../components" as MoneroComponents import "../components" as MoneroComponents
import "../js/Windows.js" as Windows
import "../js/Utils.js" as Utils
Window { Window {
id: root id: root
modality: Qt.ApplicationModal modality: Qt.ApplicationModal
color: "black" flags: Qt.Window | Qt.FramelessWindowHint
flags: Windows.flags property alias title: dialogTitle.text
property alias text: dialogContent.text property alias text: dialogContent.text
property alias content: root.text property alias content: root.text
property alias okVisible: okButton.visible
property alias textArea: dialogContent property alias textArea: dialogContent
property var icon property var icon
@@ -51,25 +50,15 @@ Window {
signal accepted() signal accepted()
signal rejected() signal rejected()
onClosing: {
inactiveOverlay.visible = false;
}
function open() { function open() {
inactiveOverlay.visible = true; show()
show();
} }
// TODO: implement without hardcoding sizes // TODO: implement without hardcoding sizes
width: 480 width: 480
height: 280 height: 280
// background gradient
Image {
anchors.fill: parent
source: "../images/middlePanelBg.jpg"
}
// Make window draggable // Make window draggable
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
@@ -81,136 +70,79 @@ Window {
ColumnLayout { ColumnLayout {
id: mainLayout id: mainLayout
spacing: 10
anchors.fill: parent anchors { fill: parent; margins: 35 }
anchors.topMargin: 20 * scaleRatio
anchors.margins: 35 * scaleRatio
spacing: 20 * scaleRatio
RowLayout { RowLayout {
id: content id: column
Layout.fillWidth: true //anchors {fill: parent; margins: 16 }
Layout.fillHeight: true Layout.alignment: Qt.AlignHCenter
Flickable { Label {
id: flickable id: dialogTitle
anchors.fill: parent horizontalAlignment: Text.AlignHCenter
font.pixelSize: 32
TextArea.flickable: TextArea { font.family: "Arial"
id : dialogContent color: "#555555"
textFormat: TextEdit.RichText
selectByMouse: true
selectByKeyboard: true
anchors.fill: parent
font.family: "Ariel"
font.pixelSize: 14 * scaleRatio
color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
wrapMode: TextEdit.Wrap
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){
msg = log_color(msg, "lime");
textArea.append(msg);
}
function logMessage(msg){
msg = msg.trim();
var color = "white";
if(msg.toLowerCase().indexOf('error') >= 0){
color = "red";
} else if (msg.toLowerCase().indexOf('warning') >= 0){
color = "yellow";
}
// format multi-lines
if(msg.split("\n").length >= 2){
msg = msg.split("\n").join('<br>');
}
log(msg, color);
}
function log_color(msg, color){
return "<span style='color: " + color + ";' >" + msg + "</span>";
}
function log(msg, color){
var timestamp = Utils.formatDate(new Date(), {
weekday: undefined,
month: "numeric",
timeZoneName: undefined
});
var _timestamp = log_color("[" + timestamp + "]", "#FFFFFF");
var _msg = log_color(msg, color);
textArea.append(_timestamp + " " + _msg);
// scroll to bottom
//if(flickable.contentHeight > content.height){
// flickable.contentY = flickable.contentHeight + 20;
//}
}
}
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
}
} }
} }
RowLayout { RowLayout {
Layout.fillWidth: true TextArea {
id : dialogContent
Layout.fillWidth: true
Layout.fillHeight: true
font.family: "Arial"
textFormat: TextEdit.AutoText
readOnly: true
font.pixelSize: 12
}
}
// Ok/Cancel buttons
RowLayout {
id: buttons
spacing: 60
Layout.alignment: Qt.AlignHCenter
MoneroComponents.StandardButton {
id: okButton
width: 120
fontSize: 14
text: qsTr("Close") + translationManager.emptyString
onClicked: {
root.close()
root.accepted()
}
}
MoneroComponents.LineEdit { MoneroComponents.LineEdit {
id: sendCommandText id: sendCommandText
Layout.fillWidth: true width: 300
placeholderText: qsTr("command + enter (e.g help)") + translationManager.emptyString placeholderText: qsTr("command + enter (e.g help)") + translationManager.emptyString
onAccepted: { onAccepted: {
if(text.length > 0) { if(text.length > 0)
textArea.logCommand(">>> " + text) daemonManager.sendCommand(text,currentWallet.nettype);
daemonManager.sendCommand(text, currentWallet.nettype);
}
text = "" text = ""
} }
} }
// Status button
// MoneroComponents.StandardButton {
// id: sendCommandButton
// enabled: sendCommandText.text.length > 0
// fontSize: 14
// text: qsTr("Send command")
// onClicked: {
// daemonManager.sendCommand(sendCommandText.text,currentWallet.testnet);
// }
// }
} }
} }
// window borders
Rectangle {
anchors.bottom: parent.bottom
anchors.top: parent.top
anchors.left: parent.left
width:1
color: "#2F2F2F"
z: 2
}
Rectangle {
anchors.bottom: parent.bottom
anchors.top: parent.top
anchors.right: parent.right
width:1
color: "#2F2F2F"
z: 2
}
Rectangle {
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
height:1
color: "#2F2F2F"
z: 2
}
} }

View File

@@ -53,7 +53,7 @@ Rectangle{
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14 * scaleRatio font.pixelSize: 14 * scaleRatio
text: labelHeader text: labelHeader
color: MoneroComponents.Style.dimmedFontColor color: MoneroComponents.Style.greyFontColor
} }
Text { Text {
@@ -77,7 +77,7 @@ Rectangle{
label2.color = MoneroComponents.Style.defaultFontColor; label2.color = MoneroComponents.Style.defaultFontColor;
} }
onExited: { onExited: {
label1.color = MoneroComponents.Style.dimmedFontColor label1.color = MoneroComponents.Style.greyFontColor;
label2.color = MoneroComponents.Style.dimmedFontColor; label2.color = MoneroComponents.Style.dimmedFontColor;
} }
onClicked: { onClicked: {

View File

@@ -38,8 +38,6 @@ TextField {
horizontalAlignment: TextInput.AlignLeft horizontalAlignment: TextInput.AlignLeft
selectByMouse: true selectByMouse: true
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
selectionColor: MoneroComponents.Style.dimmedFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
background: Rectangle { background: Rectangle {
color: "transparent" color: "transparent"

View File

@@ -46,7 +46,6 @@ Item {
signal rejected() signal rejected()
function open() { function open() {
inactiveOverlay.visible = true
leftPanel.enabled = false leftPanel.enabled = false
middlePanel.enabled = false middlePanel.enabled = false
titleBar.enabled = false titleBar.enabled = false
@@ -57,7 +56,6 @@ Item {
} }
function close() { function close() {
inactiveOverlay.visible = false
leftPanel.enabled = true leftPanel.enabled = true
middlePanel.enabled = true middlePanel.enabled = true
titleBar.enabled = true titleBar.enabled = true
@@ -65,7 +63,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 }
@@ -103,8 +101,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
@@ -157,4 +153,12 @@ Item {
} }
} }
} }
Rectangle {
id: bg
z: parent.z + 1
anchors.fill: parent
color: "black"
opacity: 0.8
}
} }

View File

@@ -32,29 +32,33 @@ 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
selectionColor: MoneroComponents.Style.dimmedFontColor color: MoneroComponents.Style.defaultFontColor
selectedTextColor: MoneroComponents.Style.defaultFontColor
wrapMode: {
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); 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;

View File

@@ -26,7 +26,7 @@
// 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.5 import QtQuick 2.0
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
import "../components" as MoneroComponents import "../components" as MoneroComponents
@@ -43,7 +43,6 @@ Item {
property string fontFamily: "" property string fontFamily: ""
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
signal linkActivated() signal linkActivated()
height: label.height * scaleRatio height: label.height * scaleRatio
width: label.width * scaleRatio width: label.width * scaleRatio

View File

@@ -43,6 +43,7 @@ Rectangle {
width: labelButtonText.width + 14 width: labelButtonText.width + 14
anchors.right: copyButton.left anchors.right: copyButton.left
anchors.rightMargin: 6 anchors.rightMargin: 6
visible: isValidOpenAliasAddress(addressLine.text)
Text { Text {
id: labelButtonText id: labelButtonText

View File

@@ -32,7 +32,7 @@ import "../components" as MoneroComponents
Label { Label {
id: item id: item
fontSize: 18 * scaleRatio fontSize: 17 * scaleRatio
Rectangle { Rectangle {
anchors.top: item.bottom anchors.top: item.bottom
@@ -43,10 +43,4 @@ Label {
color: MoneroComponents.Style.dividerColor color: MoneroComponents.Style.dividerColor
opacity: MoneroComponents.Style.dividerOpacity opacity: MoneroComponents.Style.dividerOpacity
} }
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton
cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
}
} }

View File

@@ -40,7 +40,7 @@ Item {
property bool placeholderFontBold: false property bool placeholderFontBold: false
property int placeholderFontSize: 18 * scaleRatio property int placeholderFontSize: 18 * scaleRatio
property string placeholderColor: MoneroComponents.Style.defaultFontColor property string placeholderColor: MoneroComponents.Style.defaultFontColor
property real placeholderOpacity: 0.35 property real placeholderOpacity: 0.25
property alias validator: input.validator property alias validator: input.validator
property alias readOnly : input.readOnly property alias readOnly : input.readOnly
@@ -50,17 +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(input.activeFocus){ if(input.activeFocus){
return MoneroComponents.Style.inputBorderColorActive; return Qt.rgba(255, 255, 255, 0.35);
} else { } else {
return MoneroComponents.Style.inputBorderColorInActive; return Qt.rgba(255, 255, 255, 0.25);
} }
} }
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
@@ -141,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
@@ -196,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 {

View File

@@ -32,56 +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
Layout.preferredHeight: childrenRect.height
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 bool placeholderCenter: false property alias error: multiLine.error
property string placeholderFontFamily: MoneroComponents.Style.fontRegular.name property alias readOnly: multiLine.readOnly
property bool placeholderFontBold: false property alias addressValidation: multiLine.addressValidation
property int placeholderFontSize: 18 * scaleRatio property alias labelButtonText: labelButton.text
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 showingHeader: true
property var wrapMode: Text.NoWrap
property alias addressValidation: input.addressValidation
property string backgroundColor: "" // mock
signal labelButtonClicked(); signal labelButtonClicked();
signal inputLabelLinkActivated(); signal inputLabelLinkActivated();
signal editingFinished();
spacing: 0 spacing: 0
Rectangle { Rectangle {
@@ -96,17 +65,11 @@ 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
}
} }
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
@@ -117,14 +80,14 @@ ColumnLayout {
MoneroComponents.LabelButton { MoneroComponents.LabelButton {
id: copyButtonId id: copyButtonId
visible: copyButton && input.text !== "" visible: copyButton && multiLine.text !== ""
text: qsTr("Copy") text: qsTr("Copy")
anchors.right: labelButton.visible ? inputLabel.right : parent.right anchors.right: labelButton.visible ? inputLabel.right : parent.right
anchors.rightMargin: labelButton.visible? 4 : 0 anchors.rightMargin: labelButton.visible? 4 : 0
onClicked: { onClicked: {
if (input.text.length > 0) { if (multiLine.text.length > 0) {
console.log("Copied to clipboard"); console.log("Copied to clipboard");
clipboard.setText(input.text); clipboard.setText(multiLine.text);
appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3); appWindow.showStatusMessage(qsTr("Copied to clipboard"), 3);
} }
} }
@@ -132,32 +95,27 @@ ColumnLayout {
} }
MoneroComponents.InputMulti { MoneroComponents.InputMulti {
id: input id: multiLine
readOnly: false readOnly: false
addressValidation: false addressValidation: true
anchors.top: item.showingHeader ? inputLabelRect.bottom : item.top anchors.top: parent.showingHeader ? inputLabelRect.bottom : parent.top
Layout.fillWidth: true Layout.fillWidth: true
topPadding: item.showingHeader ? 10 * scaleRatio : 0 topPadding: parent.showingHeader ? 10 * scaleRatio : 0
bottomPadding: 10 * scaleRatio bottomPadding: 10 * scaleRatio
wrapMode: item.wrapMode wrapAnywhere: parent.wrapAnywhere
fontSize: item.fontSize fontSize: parent.fontSize
fontBold: item.fontBold fontBold: parent.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.25
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
} }
@@ -165,10 +123,18 @@ ColumnLayout {
Rectangle { Rectangle {
color: "transparent" color: "transparent"
border.width: 1 border.width: 1
border.color: item.borderColor border.color: {
if(multiLine.error && multiLine.text !== ""){
return Qt.rgba(255, 0, 0, 0.45);
} else if(multiLine.activeFocus){
return Qt.rgba(255, 255, 255, 0.35);
} else {
return Qt.rgba(255, 255, 255, 0.25);
}
}
radius: 4 radius: 4
anchors.fill: parent anchors.fill: parent
visible: !item.borderDisabled visible: lineditmulti.showBorder
} }
} }
} }

View File

@@ -123,10 +123,8 @@ Rectangle {
Text { Text {
id: symbolText id: symbolText
anchors.right: parent.right anchors.centerIn: parent
anchors.rightMargin: 44 * scaleRatio font.pixelSize: 11 * scaleRatio
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: 12 * scaleRatio
font.bold: true font.bold: true
color: button.checked || buttonArea.containsMouse ? "#FFFFFF" : dot.color color: button.checked || buttonArea.containsMouse ? "#FFFFFF" : dot.color
visible: appWindow.ctrlPressed visible: appWindow.ctrlPressed

View File

@@ -34,7 +34,7 @@ import "../components" as MoneroComponents
Rectangle { Rectangle {
id: item id: item
color: "transparent" color: "black"
property var connected: Wallet.ConnectionStatus_Disconnected property var connected: Wallet.ConnectionStatus_Disconnected
function getConnectionStatusString(status) { function getConnectionStatusString(status) {

View File

@@ -38,7 +38,13 @@ import "../components" as MoneroComponents
Item { Item {
id: root id: root
visible: false visible: false
z: parent.z + 2 Rectangle {
id: bg
z: parent.z + 1
anchors.fill: parent
color: "black"
opacity: 0.8
}
property alias password: passwordInput1.text property alias password: passwordInput1.text
@@ -48,7 +54,6 @@ Item {
signal closeCallback() signal closeCallback()
function open() { function open() {
inactiveOverlay.visible = true
leftPanel.enabled = false leftPanel.enabled = false
middlePanel.enabled = false middlePanel.enabled = false
titleBar.enabled = false titleBar.enabled = false
@@ -60,7 +65,6 @@ Item {
} }
function close() { function close() {
inactiveOverlay.visible = false
leftPanel.enabled = true leftPanel.enabled = true
middlePanel.enabled = true middlePanel.enabled = true
titleBar.enabled = true titleBar.enabled = true
@@ -82,7 +86,7 @@ Item {
} }
ColumnLayout { ColumnLayout {
z: inactiveOverlay.z + 1 z: bg.z + 1
id: mainLayout id: mainLayout
spacing: 10 spacing: 10
anchors { fill: parent; margins: 35 * scaleRatio } anchors { fill: parent; margins: 35 * scaleRatio }

View File

@@ -38,7 +38,6 @@ import "../components" as MoneroComponents
Item { Item {
id: root id: root
visible: false visible: false
z: parent.z + 2
property alias password: passwordInput.text property alias password: passwordInput.text
property string walletName property string walletName
@@ -49,7 +48,6 @@ Item {
signal closeCallback() signal closeCallback()
function open(walletName) { function open(walletName) {
inactiveOverlay.visible = true // draw appwindow inactive
root.walletName = walletName ? walletName : "" root.walletName = walletName ? walletName : ""
leftPanel.enabled = false leftPanel.enabled = false
middlePanel.enabled = false middlePanel.enabled = false
@@ -61,7 +59,6 @@ Item {
} }
function close() { function close() {
inactiveOverlay.visible = false
leftPanel.enabled = true leftPanel.enabled = true
middlePanel.enabled = true middlePanel.enabled = true
titleBar.enabled = true titleBar.enabled = true
@@ -70,7 +67,7 @@ Item {
} }
ColumnLayout { ColumnLayout {
z: inactiveOverlay.z + 1 z: bg.z + 1
id: mainLayout id: mainLayout
spacing: 10 spacing: 10
anchors { fill: parent; margins: 35 * scaleRatio } anchors { fill: parent; margins: 35 * scaleRatio }
@@ -108,8 +105,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
@@ -127,7 +122,6 @@ Item {
} }
} }
Keys.enabled: root.visible
Keys.onReturnPressed: { Keys.onReturnPressed: {
root.close() root.close()
root.accepted() root.accepted()
@@ -172,4 +166,11 @@ Item {
} }
} }
Rectangle {
id: bg
anchors.fill: parent
color: "black"
opacity: 0.8
}
} }

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 {
@@ -64,7 +62,11 @@ Item {
//radius: 2 //radius: 2
width: row.x width: row.x
color: "#FF6C3C" color: {
if(item.fillLevel < 3) return "#FF6C3C"
if(item.fillLevel < 13) return "#AAFFBB"
return "#36B25C"
}
Timer { Timer {
interval: 500 interval: 500

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 {
@@ -73,7 +71,11 @@ Item {
//radius: 2 //radius: 2
width: row.x width: row.x
color: "#FF6C3C" color: {
if(item.fillLevel < 5) return "#FF6C3C"
if(item.fillLevel < 13) return "#AAFFBB"
return "#36B25C"
}
Timer { Timer {
interval: 500 interval: 500

View File

@@ -37,7 +37,7 @@ Rectangle {
property string syncType // Wallet or Daemon property string syncType // Wallet or Daemon
property string syncText: qsTr("%1 blocks remaining: ").arg(syncType) property string syncText: qsTr("%1 blocks remaining: ").arg(syncType)
visible: false visible: false
color: "transparent" color: "black"
function updateProgress(currentBlock,targetBlock, blocksToSync, statusTxt){ function updateProgress(currentBlock,targetBlock, blocksToSync, statusTxt){
if(targetBlock > 0) { if(targetBlock > 0) {
@@ -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
} }
@@ -100,7 +100,7 @@ Rectangle {
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
anchors.left: parent.left anchors.left: parent.left
height: bar.height height: bar.height
property int maxWidth: bar.width * scaleRatio property int maxWidth: bar.width - 4 * scaleRatio
width: (maxWidth * fillLevel) / 100 width: (maxWidth * fillLevel) / 100
radius: 8 radius: 8
// could change color based on progressbar status; if(item.fillLevel < 99 ) // could change color based on progressbar status; if(item.fillLevel < 99 )

View File

@@ -1,101 +0,0 @@
// 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 QtQuick.Layouts 1.1
import "../components" as MoneroComponents
RowLayout {
id: radioButton
property alias text: label.text
property bool checked: false
property int fontSize: 14 * scaleRatio
property alias fontColor: label.color
signal clicked()
height: 26 * scaleRatio
// legacy properties
property var checkedColor: "white"
property var borderColor: checked ? Qt.rgba(1, 1, 1, 0.35) : Qt.rgba(1, 1, 1, 0.25)
function toggle(){
radioButton.checked = !radioButton.checked
radioButton.clicked()
}
RowLayout {
Layout.fillWidth: true
Rectangle {
id: button
anchors.left: parent.left
y: 0
color: "transparent"
border.color: borderColor
width: radioButton.height
height: radioButton.height
radius: radioButton.height
Rectangle {
visible: radioButton.checked
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
color: checkedColor
width: 10 * scaleRatio
height: 10 * scaleRatio
radius: 10
opacity: 0.8
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
toggle()
}
}
}
Text {
id: label
anchors.left: button.right
anchors.leftMargin: !isMobile ? 10 : 8
color: MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: radioButton.fontSize
wrapMode: Text.Wrap
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onClicked: {
toggle()
}
}
}
}
}

View File

@@ -48,13 +48,11 @@ GridLayout {
property bool placeholderFontBold: false property bool placeholderFontBold: false
property int placeholderFontSize: 18 * scaleRatio property int placeholderFontSize: 18 * scaleRatio
property string placeholderColor: MoneroComponents.Style.defaultFontColor property string placeholderColor: MoneroComponents.Style.defaultFontColor
property real placeholderOpacity: 0.35 property real placeholderOpacity: 0.25
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()
@@ -72,13 +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()
} }
LineEdit { LineEdit {
@@ -90,13 +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
onEditingFinished: root.editingFinished()
} }
} }

View File

@@ -34,10 +34,8 @@ import "../components" as MoneroComponents
Item { Item {
id: button id: button
property string rightIcon: "" property string rightIcon: ""
property string rightIconInactive: ""
property string icon: "" 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: {
@@ -47,22 +45,10 @@ Item {
signal clicked() signal clicked()
// Dynamic height/width // Dynamic height/width
Layout.minimumWidth: { Layout.minimumWidth: (label.contentWidth > 50)? label.contentWidth + 22 : 60
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
function doClick() { function doClick() {
// Android workaround // Android workaround
releaseFocus(); releaseFocus();
@@ -101,8 +87,7 @@ Item {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left anchors.left: parent.left
anchors.right: parent.right anchors.right: parent.right
horizontalAlignment: textAlign === "center" ? Text.AlignHCenter : Text.AlignLeft horizontalAlignment: Text.AlignHCenter
anchors.leftMargin: textAlign === "center" ? 0 : 11
font.family: MoneroComponents.Style.fontBold.name font.family: MoneroComponents.Style.fontBold.name
font.bold: true font.bold: true
font.pixelSize: buttonArea.pressed ? button.fontSize - 1 : button.fontSize font.pixelSize: buttonArea.pressed ? button.fontSize - 1 : button.fontSize
@@ -116,21 +101,6 @@ Item {
source: parent.icon source: parent.icon
} }
Image {
visible: parent.rightIcon !== ""
anchors.right: parent.right
anchors.rightMargin: 11 * scaleRatio
anchors.verticalCenter: parent.verticalCenter
width: parent.small ? 16 * scaleRatio : 20 * scaleRatio
height: parent.small ? 16 * scaleRatio : 20 * scaleRatio
source: {
if(parent.rightIconInactive !== "" && !parent.enabled){
return parent.rightIconInactive;
}
return parent.rightIcon;
}
}
MouseArea { MouseArea {
id: buttonArea id: buttonArea
anchors.fill: parent anchors.fill: parent

View File

@@ -32,7 +32,6 @@ 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
@@ -44,7 +43,6 @@ Item {
property int dropdownHeight: 42 property int dropdownHeight: 42
property int fontHeaderSize: 16 * scaleRatio property int fontHeaderSize: 16 * scaleRatio
property int fontItemSize: 14 * scaleRatio property int fontItemSize: 14 * scaleRatio
property string colorBorder: MoneroComponents.Style.inputBorderColorInActive
property string colorHeaderBackground: "transparent" property string colorHeaderBackground: "transparent"
property bool headerBorder: true property bool headerBorder: true
property bool headerFontBold: false property bool headerFontBold: false
@@ -77,13 +75,12 @@ 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 {
color: dropdown.colorHeaderBackground color: dropdown.colorHeaderBackground
border.width: dropdown.headerBorder ? 1 : 0 border.width: dropdown.headerBorder ? 1 : 0
border.color: dropdown.colorBorder border.color: Qt.rgba(1, 1, 1, 0.25)
radius: 4 radius: 4
anchors.fill: parent anchors.fill: parent
} }

View File

@@ -3,22 +3,20 @@ 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 defaultFontColor: "white" property string defaultFontColor: "white"
property string greyFontColor: "#808080"
property string dimmedFontColor: "#BBBBBB" property string dimmedFontColor: "#BBBBBB"
property string inputBoxBackground: "black" property string inputBoxBackground: "black"
property string inputBoxBackgroundError: "#FFDDDD" property string inputBoxBackgroundError: "#FFDDDD"
property string inputBoxColor: "white" property string inputBoxColor: "white"
property string legacy_placeholderFontColor: "#BABABA" property string legacy_placeholderFontColor: "#BABABA"
property string inputBorderColorActive: Qt.rgba(255, 255, 255, 0.38)
property string inputBorderColorInActive: Qt.rgba(255, 255, 255, 0.32)
property string inputBorderColorInvalid: Qt.rgba(255, 0, 0, 0.40)
property string buttonBackgroundColor: "#FA6800" property string buttonBackgroundColor: "#FA6800"
property string buttonBackgroundColorHover: "#E65E00" property string buttonBackgroundColorHover: "#E65E00"
@@ -27,5 +25,5 @@ QtObject {
property string buttonTextColor: "white" property string buttonTextColor: "white"
property string buttonTextColorDisabled: "black" property string buttonTextColorDisabled: "black"
property string dividerColor: "white" property string dividerColor: "white"
property real dividerOpacity: 0.20 property real dividerOpacity: 0.25
} }

View File

@@ -0,0 +1,160 @@
// 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
import "../components" as MoneroComponents
ListView {
id: listView
clip: true
boundsBehavior: ListView.StopAtBounds
highlightMoveDuration: 0
highlightFollowsCurrentItem: true
anchors.topMargin: 0
spacing: 0
delegate: Rectangle {
id: delegate
height: 80
color: 'transparent';
anchors.topMargin: 0
width: listView.width
clip: true
MoneroComponents.LineEditMulti {
id: addressLine
fontSize: 14
readOnly: true
width: parent.width
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.leftMargin: 10
anchors.topMargin: 12
anchors.rightMargin: 54
anchors.bottomMargin: 0
text: address
showingHeader: false
showBorder: false
addressValidation: false
}
MoneroComponents.IconButton {
id: clipboardButton
imageSource: "../images/copyToClipboard.png"
onClicked: {
console.log(addressLine.text + " copied to clipboard");
clipboard.setText(addressLine.text);
appWindow.showStatusMessage(qsTr("Address copied to clipboard"),3);
}
anchors.right: parent.right
anchors.rightMargin: 0
anchors.verticalCenter: parent.verticalCenter
}
Text {
id: indexText
anchors.top: addressLine.bottom
anchors.left: parent.left
anchors.leftMargin: 20
font.family: "Arial"
font.bold: true
font.pixelSize: 12
color: "#444444"
text: "#" + index
}
Text {
id: labelText
anchors.top: addressLine.bottom
anchors.left: indexText.right
anchors.right: parent.right
anchors.leftMargin: 10
font.family: "Arial"
font.bold: true
font.pixelSize: 12
color: MoneroComponents.Style.greyFontColor
text: label
}
MouseArea {
z: 5
anchors.top: parent.top
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.rightMargin: clipboardButton.width
cursorShape: Qt.PointingHandCursor
onClicked: {
listView.currentIndex = index;
}
}
Rectangle {
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 1
color: MoneroComponents.Style.grey
z: 6
}
Rectangle {
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 1
color: MoneroComponents.Style.grey
z: 6
}
Rectangle {
anchors.right: parent.right
anchors.left: parent.left
anchors.bottom: parent.bottom
color: MoneroComponents.Style.grey
height: 1
z: 6
}
Rectangle {
width: 3
color: 'white'
visible: listView.currentIndex == index
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
}
}
}

View File

@@ -5,7 +5,6 @@ import "../components" as MoneroComponents
TextEdit { TextEdit {
color: MoneroComponents.Style.defaultFontColor color: MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name font.family: MoneroComponents.Style.fontRegular.name
selectionColor: MoneroComponents.Style.dimmedFontColor
wrapMode: Text.Wrap wrapMode: Text.Wrap
readOnly: true readOnly: true
selectByMouse: true selectByMouse: true

View File

@@ -26,62 +26,46 @@
// 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.5 import QtQuick 2.2
import QtQuick.Window 2.0 import QtQuick.Window 2.0
import QtQuick.Layouts 1.1 import QtQuick.Layouts 1.1
Rectangle { Rectangle {
id: titleBar id: titleBar
height: {
if(!customDecorations || isMobile){
return 0;
}
if(small) return 38 * scaleRatio;
else return 50 * scaleRatio;
}
y: -height
z: 1
property string title
property int mouseX: 0 property int mouseX: 0
property bool containsMouse: false property bool containsMouse: false
property alias basicButtonVisible: goToBasicVersionButton.visible property alias basicButtonVisible: goToBasicVersionButton.visible
property bool customDecorations: persistentSettings.customDecorations property bool customDecorations: true
property bool showWhatIsButton: true
property bool showMinimizeButton: false
property bool showMaximizeButton: false
property bool showCloseButton: true
property bool showMoneroLogo: false
property bool small: false
signal closeClicked
signal maximizeClicked
signal minimizeClicked
signal goToBasicVersion(bool yes) signal goToBasicVersion(bool yes)
height: customDecorations && !isMobile ? 50 : 0
y: -height
property string title
property alias maximizeButtonVisible: maximizeButton.visible
z: 1
Item { Item {
// Background gradient id: test
width: parent.width width: parent.width
height: parent.height height: 50
z: parent.z + 1 z: 1
// use jpg for gradiency
Image { Image {
anchors.fill: parent anchors.fill: parent
height: titleBar.height height: parent.height
width: titleBar.width width: parent.width
source: "../images/titlebarGradient.jpg" source: "../images/titlebarGradient.jpg"
} }
} }
Item { Item{
id: titlebarlogo id: titlebarlogo
width: 125 width: 125
height: parent.height height: 50
anchors.centerIn: parent anchors.centerIn: parent
visible: customDecorations && showMoneroLogo visible: customDecorations
z: parent.z + 1 z: 1
Image { Image {
anchors.left: parent.left anchors.left: parent.left
@@ -93,15 +77,6 @@ Rectangle {
} }
} }
Label {
id: titleLabel
visible: !showMoneroLogo && customDecorations && titleBar.title !== ''
anchors.centerIn: parent
fontSize: 18
text: titleBar.title
z: parent.z + 1
}
// collapse left panel // collapse left panel
Rectangle { Rectangle {
id: goToBasicVersionButton id: goToBasicVersionButton
@@ -110,10 +85,10 @@ Rectangle {
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
color: "transparent" color: "transparent"
height: titleBar.height height: 50 * scaleRatio
width: height width: height
visible: isMobile visible: isMobile
z: parent.z + 2 z: 2
Image { Image {
width: 14 width: 14
@@ -143,11 +118,36 @@ Rectangle {
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
visible: parent.customDecorations visible: parent.customDecorations
z: parent.z + 2 z: 2
Rectangle {
id: whatIsAreaButton
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 42
color: containsMouse ? "#6B0072" : "#00000000"
Image {
anchors.centerIn: parent
width: 9
height: 16
source: "../images/question.png"
}
MouseArea {
id: whatIsArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onEntered: whatIsAreaButton.color = "#262626";
onExited: whatIsAreaButton.color = "transparent";
onClicked: {
}
}
}
Rectangle { Rectangle {
id: minimizeButton id: minimizeButton
visible: showMinimizeButton
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
width: 42 width: 42
@@ -165,13 +165,14 @@ Rectangle {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: minimizeButton.color = "#262626"; onEntered: minimizeButton.color = "#262626";
onExited: minimizeButton.color = "transparent"; onExited: minimizeButton.color = "transparent";
onClicked: minimizeClicked(); onClicked: {
appWindow.visibility = Window.Minimized
}
} }
} }
Rectangle { Rectangle {
id: maximizeButton id: maximizeButton
visible: showMaximizeButton
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
width: 42 width: 42
@@ -192,13 +193,15 @@ Rectangle {
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: maximizeButton.color = "#262626"; onEntered: maximizeButton.color = "#262626";
onExited: maximizeButton.color = "transparent"; onExited: maximizeButton.color = "transparent";
onClicked: maximizeClicked(); onClicked: {
appWindow.visibility = appWindow.visibility !== Window.FullScreen ? Window.FullScreen :
Window.Windowed
}
} }
} }
Rectangle { Rectangle {
id: closeButton id: closeButton
visible: showCloseButton
anchors.top: parent.top anchors.top: parent.top
anchors.bottom: parent.bottom anchors.bottom: parent.bottom
width: 42 width: 42
@@ -213,7 +216,7 @@ Rectangle {
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
onClicked: closeClicked(); onClicked: appWindow.close();
hoverEnabled: true hoverEnabled: true
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
onEntered: closeButton.color = "#262626"; onEntered: closeButton.color = "#262626";
@@ -222,23 +225,4 @@ Rectangle {
} }
} }
// window borders
Rectangle {
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.left: parent.left
height: 1
color: "#2F2F2F"
z: parent.z + 1
}
Rectangle {
anchors.top: parent.top
anchors.right: parent.right
anchors.left: parent.left
visible: titleBar.small
height: 1
color: "#2F2F2F"
z: parent.z + 1
}
} }

View File

@@ -1,63 +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 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
Layout.preferredWidth: 33
Layout.rightMargin: 14
Layout.leftMargin: 14
Layout.topMargin: 12
Layout.bottomMargin: 12
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: false
textFormat: Text.RichText
wrapMode: Text.WordWrap
textMargin: 0
leftPadding: 0
topPadding: 6
readOnly: true
onLinkActivated: root.linkActivated();
// @TODO: Legacy. Remove after Qt 5.8.
// https://stackoverflow.com/questions/41990013
MouseArea {
anchors.fill: parent
enabled: false
}
}
}
}

View File

@@ -34,20 +34,13 @@ filter::filter(QObject *parent) :
QObject(parent) QObject(parent)
{ {
m_tabPressed = false; m_tabPressed = false;
m_backtabPressed = false;
} }
bool filter::eventFilter(QObject *obj, QEvent *ev) { bool filter::eventFilter(QObject *obj, QEvent *ev) {
switch(ev->type()) { switch(ev->type()) {
case QEvent::KeyPress: { case QEvent::KeyPress: {
QKeyEvent *ke = static_cast<QKeyEvent*>(ev); QKeyEvent *ke = static_cast<QKeyEvent*>(ev);
if(ke->key() == Qt::Key_Backtab) { if(ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Backtab) {
if(m_backtabPressed)
break;
else m_backtabPressed = true;
}
if(ke->key() == Qt::Key_Tab) {
if(m_tabPressed) if(m_tabPressed)
break; break;
else m_tabPressed = true; else m_tabPressed = true;
@@ -65,7 +58,7 @@ bool filter::eventFilter(QObject *obj, QEvent *ev) {
sks = ks.toString(); sks = ks.toString();
} }
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
if(sks.contains("Alt+Tab") || sks.contains("Alt+Backtab")) if(sks.contains("Alt+Tab") || sks.contains("Alt+Shift+Backtab"))
break; break;
#else #else
sks.replace("Meta", "Ctrl"); sks.replace("Meta", "Ctrl");
@@ -74,11 +67,7 @@ bool filter::eventFilter(QObject *obj, QEvent *ev) {
} break; } break;
case QEvent::KeyRelease: { case QEvent::KeyRelease: {
QKeyEvent *ke = static_cast<QKeyEvent*>(ev); QKeyEvent *ke = static_cast<QKeyEvent*>(ev);
if(ke->key() == Qt::Key_Tab || ke->key() == Qt::Key_Backtab)
if(ke->key() == Qt::Key_Backtab)
m_backtabPressed = false;
if(ke->key() == Qt::Key_Tab)
m_tabPressed = false; m_tabPressed = false;
QString sks; QString sks;
@@ -99,7 +88,7 @@ bool filter::eventFilter(QObject *obj, QEvent *ev) {
sks = ks.toString(); sks = ks.toString();
} }
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
if(sks.contains("Alt+Tab") || sks.contains("Alt+Backtab")) if(sks.contains("Alt+Tab") || sks.contains("Alt+Shift+Backtab"))
break; break;
#else #else
sks.replace("Meta", "Ctrl"); sks.replace("Meta", "Ctrl");

View File

@@ -36,7 +36,7 @@ class filter : public QObject
Q_OBJECT Q_OBJECT
private: private:
bool m_tabPressed; bool m_tabPressed;
bool m_backtabPressed;
public: public:
explicit filter(QObject *parent = 0); explicit filter(QObject *parent = 0);

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,7 +17,7 @@ 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 v0.13.0.4 git -C $MONERO_DIR checkout v0.12.0.0
# get monero core tag # get monero core tag
get_tag get_tag
@@ -75,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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 B

After

Width:  |  Height:  |  Size: 191 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 447 B

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 396 B

After

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 30 KiB

BIN
images/checkedBlackIcon.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

After

Width:  |  Height:  |  Size: 15 KiB

BIN
images/checkedIcon-black.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 B

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 B

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 B

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 B

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 B

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 B

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 B

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 B

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 532 B

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 306 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 488 B

After

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 707 B

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 260 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 B

After

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 B

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 402 B

After

Width:  |  Height:  |  Size: 234 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

After

Width:  |  Height:  |  Size: 319 B

BIN
images/historyBorderRadius.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 367 B

After

Width:  |  Height:  |  Size: 201 B

BIN
images/leftPanelBg.jpg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 501 B

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 B

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 B

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 B

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 B

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
images/menuArrow.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 856 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 476 B

After

Width:  |  Height:  |  Size: 340 B

BIN
images/middlePanelBg.jpg Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

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