diff --git a/.github/workflows/atomicdex-desktop-ci.yml b/.github/workflows/atomicdex-desktop-ci.yml index fd74175e3..d87c7409b 100644 --- a/.github/workflows/atomicdex-desktop-ci.yml +++ b/.github/workflows/atomicdex-desktop-ci.yml @@ -89,11 +89,8 @@ jobs: - name: Install QT IFW (MacOS) if: runner.os == 'macOS' run: | - python3 -m aqt tool mac tools_ifw 4.3.0 qt.tools.ifw.43 --outputdir ${{ github.workspace }}/Qt - echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.0/bin" >> $GITHUB_PATH - echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.1/bin" >> $GITHUB_PATH - echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.2/bin" >> $GITHUB_PATH - echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.3/bin" >> $GITHUB_PATH + python3 -m aqt tool mac tools_ifw 4.4.1 qt.tools.ifw.44 --outputdir ${{ github.workspace }}/Qt + echo "${{ github.workspace }}/Qt/Tools/QtInstallerFramework/4.4/bin" >> $GITHUB_PATH - name: Install QT (Windows) if: runner.os == 'Windows' @@ -110,11 +107,8 @@ jobs: if: runner.os == 'Windows' run: | python -m pip install --upgrade pip - python -m aqt tool windows tools_ifw 4.3.0 qt.tools.ifw.43 --outputdir C:/Qt - echo "C:/Qt/Tools/QtInstallerFramework/4.0/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:/Qt/Tools/QtInstallerFramework/4.1/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:/Qt/Tools/QtInstallerFramework/4.2/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:/Qt/Tools/QtInstallerFramework/4.3/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + python -m aqt tool windows tools_ifw 4.4.1 qt.tools.ifw.44 --outputdir C:/Qt + echo "C:/Qt/Tools/QtInstallerFramework/4.4/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append echo $env:GITHUB_PATH echo $env:PATH diff --git a/.github/workflows/atomicdex-desktop-release-vt.yml b/.github/workflows/atomicdex-desktop-release-vt.yml index e25949378..8ce53e018 100644 --- a/.github/workflows/atomicdex-desktop-release-vt.yml +++ b/.github/workflows/atomicdex-desktop-release-vt.yml @@ -20,4 +20,4 @@ jobs: .zip$ .tar.zst$ .dmg$ - .7z$ \ No newline at end of file + .7z$ diff --git a/CMakeLists.txt b/CMakeLists.txt index d8477fcd1..710180ca1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,7 +11,7 @@ include(vcpkg_prerequisites) include(qt_prerequisites) include(cfg_hash) -project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.5.1) +project(${DEX_PROJECT_NAME} LANGUAGES CXX VERSION 0.5.6) message(STATUS "${PROJECT_NAME} is version ${PROJECT_VERSION}") include(cmake_default_options) @@ -61,13 +61,13 @@ endif () ##! We fetch our dependencies if (APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.5182/mm2-0fea16d6b-Darwin-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.6805/mm2-ce32ab8da-Darwin-Release.zip) elseif (UNIX AND NOT APPLE) FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.5182/mm2-0fea16d6b-Linux-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.6805/mm2-ce32ab8da-Linux-Release.zip) else () FetchContent_Declare(mm2 - URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.5182/mm2-0fea16d6b-Windows_NT-Release.zip) + URL https://github.com/KomodoPlatform/atomicDEX-API/releases/download/beta-2.1.6805/mm2-ce32ab8da-Windows_NT-Release.zip) endif () #FetchContent_Declare(qmaterial URL https://github.com/KomodoPlatform/Qaterial/archive/last-clang-working-2.zip) diff --git a/README.md b/README.md index 15df79c50..ab1040c4b 100644 --- a/README.md +++ b/README.md @@ -86,20 +86,20 @@ Check out AtomicDEX mobile, available for [Android and iOS](https://atomicdex.io ## Self-Hosted Dependencies -| Dependencies | Version | Description | Categories | -|---------------|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------|---------------------| -| boost | 1.77 | Boost provides free peer-reviewed portable C++ source libraries. | General Programming | -| doctest | 2.3.8 | The fastest feature-rich C++11/14/17/20 single-header testing framework | Testing | -| fmt | 7.1.0 | A modern formatting library | Formatting | -| nlohmann_json | 3.9.1 | JSON for Modern C++ | Parsing | -| range-v3 | 0.11.0 | Range library for C++14/17/20, basis for C++20's std::ranges | Algorithm | -| date | 2019-11-08 | A date and time library based on the C++11/14/17 header | Timezone/Calendar | -| spdlog | 1.8.0 | Fast C++ logging library. | Logging | -| openssl | 1.1.1h | TLS/SSL and crypto library | Network/Crypto | -| entt | 3.5.1 | Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more | Architecture | -| cpprestsdk | 2.10.15-1 | The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. | HTTP | -| taskflow | 2.2.0 | Parallel and Heterogeneous Task Programming in Modern C++ | Threading | -| qt | 5.15.2 | Qt is a cross-platform application development framework for desktop, embedded and mobile. | GUI | +| Dependencies | Version | Description | Categories | +|---------------|------------|-------------------------------------------------------------------------------------------------------------------------------------------------|---------------------| +| boost | 1.78 | Boost provides free peer-reviewed portable C++ source libraries. | General Programming | +| doctest | 2.3.8 | The fastest feature-rich C++11/14/17/20 single-header testing framework | Testing | +| fmt | 7.1.0 | A modern formatting library | Formatting | +| nlohmann_json | 3.9.1 | JSON for Modern C++ | Parsing | +| range-v3 | 0.11.0 | Range library for C++14/17/20, basis for C++20's std::ranges | Algorithm | +| date | 2019-11-08 | A date and time library based on the C++11/14/17 header | Timezone/Calendar | +| spdlog | 1.8.5 | Fast C++ logging library. | Logging | +| openssl | 1.1.1h | TLS/SSL and crypto library | Network/Crypto | +| entt | 3.5.1 | Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more | Architecture | +| cpprestsdk | 2.10.15-1 | The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. | HTTP | +| taskflow | 2.2.0 | Parallel and Heterogeneous Task Programming in Modern C++ | Threading | +| qt | 5.15.2 | Qt is a cross-platform application development framework for desktop, embedded and mobile. | GUI | ## Contributors / Thanks diff --git a/assets/config/0.5.5.1-coins.json b/assets/config/0.5.6-coins.json similarity index 87% rename from assets/config/0.5.5.1-coins.json rename to assets/config/0.5.6-coins.json index fdecb8dca..c6f3bdac8 100644 --- a/assets/config/0.5.5.1-coins.json +++ b/assets/config/0.5.6-coins.json @@ -91,7 +91,9 @@ "coingecko_id": "1inch", "nomics_id": "1INCH", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -224,7 +226,9 @@ "coingecko_id": "aave", "nomics_id": "AAVE", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -233,11 +237,12 @@ "active": false, "currently_enabled": false }, - "ABY": { - "coin": "ABY", - "name": "ArtByte", + "ABY-OLD": { + "coin": "ABY-OLD", + "name": "ArtByte (OLD)", "coinpaprika_id": "aby-artbyte", "coingecko_id": "artbyte", + "nomics_id": "ABY2", "electrum": [ { "url": "electrumx.aby.ewmcx.biz:50002", @@ -257,6 +262,47 @@ "active": false, "currently_enabled": false }, + "ABY": { + "coin": "ABY", + "name": "ArtByte", + "coinpaprika_id": "aby-artbyte", + "coingecko_id": "artbyte", + "nomics_id": "ABY2", + "electrum": [ + { + "url": "elec-seeder-one.artbytecoin.org:50012", + "protocol": "SSL", + "disable_cert_verification": true, + "ws_url": "elec-seeder-one.artbytecoin.org:50013" + }, + { + "url": "elec-seeder-two.artbytecoin.org:50012", + "protocol": "SSL", + "disable_cert_verification": true, + "ws_url": "elec-seeder-two.artbytecoin.org:50013" + }, + { + "url": "electrumx-three.artbyte.live:50012", + "protocol": "SSL", + "disable_cert_verification": false, + "ws_url": "electrumx-three.artbyte.live:50013" + }, + { + "url": "electrumx-four.artbyte.live:50012", + "protocol": "SSL", + "disable_cert_verification": false, + "ws_url": "electrumx-four.artbyte.live:50013" + } + ], + "explorer_url": [ + "https://chainz.cryptoid.info/aby/" + ], + "explorer_tx_url": "tx.dws?", + "explorer_address_url": "address.dws?", + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "ADA-BEP20": { "coin": "ADA-BEP20", "name": "Cardano", @@ -336,7 +382,9 @@ "coingecko_id": "singularitynet", "nomics_id": "AGIX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -350,6 +398,7 @@ "name": "Ankr", "coinpaprika_id": "ankr-ankr-network", "coingecko_id": "ankr", + "nomics_id": "ANKR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -367,6 +416,25 @@ "name": "Ankr", "coinpaprika_id": "ankr-ankr-network", "coingecko_id": "ankr", + "nomics_id": "ANKR", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "APE-ERC20": { + "coin": "APE-ERC20", + "name": "ApeCoin", + "coinpaprika_id": "ape-apecoin", + "coingecko_id": "apecoin", + "nomics_id": "APE7", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -379,6 +447,24 @@ "active": false, "currently_enabled": false }, + "APE-BEP20": { + "coin": "APE-BEP20", + "name": "ApeCoin", + "coinpaprika_id": "ape-apecoin", + "coingecko_id": "apecoin", + "nomics_id": "APE7", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "ARRR-BEP20": { "coin": "ARRR-BEP20", "name": "Pirate", @@ -439,6 +525,7 @@ "name": "Cosmos", "coinpaprika_id": "atom-cosmos", "coingecko_id": "cosmos", + "nomics_id": "ATOM", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -461,12 +548,14 @@ { "url": "electrumx.aur.ewmcx.info:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrumx.aur.ewmcx.info:50003" }, { "url": "failover.aur.ewmcx.biz:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "failover.aur.ewmcx.biz:50003" } ], "explorer_url": [ @@ -501,6 +590,7 @@ "name": "Avalanche", "coinpaprika_id": "avax-avalanche", "coingecko_id": "avalanche-2", + "nomics_id": "AVAX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -518,6 +608,7 @@ "name": "Avalanche", "coinpaprika_id": "avax-avalanche", "coingecko_id": "avalanche-2", + "nomics_id": "AVAX", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -576,6 +667,7 @@ "name": "Axie Infinity", "coinpaprika_id": "axs-axie-infinity", "coingecko_id": "axie-infinity", + "nomics_id": "AXS2", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -593,6 +685,7 @@ "name": "Axie Infinity", "coinpaprika_id": "axs-axie-infinity", "coingecko_id": "axie-infinity", + "nomics_id": "AXS2", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -610,6 +703,7 @@ "name": "Baby Doge Coin", "coinpaprika_id": "babydoge-baby-doge-coin", "coingecko_id": "baby-doge-coin", + "nomics_id": "BABYDOGE2", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -681,7 +775,9 @@ "coingecko_id": "balancer", "nomics_id": "BAL", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -693,9 +789,9 @@ "BANANO-BEP20": { "coin": "BANANO-BEP20", "name": "Banano", - "nomics_id": "BAN", "coinpaprika_id": "ban-banano", "coingecko_id": "banano", + "nomics_id": "BAN", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -713,6 +809,7 @@ "name": "Band Protocol", "coinpaprika_id": "band-band-protocol", "coingecko_id": "band-protocol", + "nomics_id": "BAND", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -747,6 +844,7 @@ "name": "Band Protocol", "coinpaprika_id": "band-band-protocol", "coingecko_id": "band-protocol", + "nomics_id": "BAND", "nodes": [ "https://rpc.ftm.tools/" ], @@ -762,8 +860,11 @@ "name": "Band Protocol", "coinpaprika_id": "band-band-protocol", "coingecko_id": "band-protocol", + "nomics_id": "BAND", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -857,6 +958,7 @@ "forex_id": "IDR", "coinpaprika_id": "bidr-binanceidr", "coingecko_id": "binanceidr", + "nomics_id": "BIDR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -879,17 +981,20 @@ { "url": "electrum1.blackcoin.nl:10002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": false, + "ws_url": "electrum1.blackcoin.nl:10004" }, { "url": "electrum2.blackcoin.nl:20002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": false, + "ws_url": "electrum2.blackcoin.nl:20004" }, { "url": "electrum3.blackcoin.nl:30002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": false, + "ws_url": "electrum3.blackcoin.nl:30004" } ], "explorer_url": [ @@ -901,6 +1006,24 @@ "active": false, "currently_enabled": false }, + "BLK-BEP20": { + "coin": "BLK-BEP20", + "name": "BlackCoin", + "coinpaprika_id": "blk-blackcoin", + "coingecko_id": "blackcoin", + "nomics_id": "BLK", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "tBLK": { "coin": "tBLK", "name": "BlackCoin (testnet)", @@ -911,17 +1034,20 @@ { "url": "electrum1.blackcoin.nl:10012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum1.blackcoin.nl:10014" }, { "url": "electrum2.blackcoin.nl:20012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum2.blackcoin.nl:20014" }, { "url": "electrum3.blackcoin.nl:30012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum3.blackcoin.nl:30014" } ], "explorer_url": [ @@ -938,6 +1064,7 @@ "name": "Binance Coin", "coinpaprika_id": "bnb-binance-coin", "coingecko_id": "binancecoin", + "nomics_id": "BNB", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -971,6 +1098,7 @@ "name": "Bancor", "coinpaprika_id": "bnt-bancor", "coingecko_id": "bancor", + "nomics_id": "BNT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -988,6 +1116,7 @@ "name": "Bancor", "coinpaprika_id": "bnt-bancor", "coingecko_id": "bancor", + "nomics_id": "BNT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1005,8 +1134,11 @@ "name": "Bancor", "coinpaprika_id": "bnt-bancor", "coingecko_id": "bancor", + "nomics_id": "BNT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -1039,6 +1171,7 @@ "forex_id": "BRL", "coinpaprika_id": "brz-brazilian-digital-token", "coingecko_id": "brz", + "nomics_id": "BRZ", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1057,6 +1190,7 @@ "forex_id": "BRL", "coinpaprika_id": "brz-brazilian-digital-token", "coingecko_id": "brz", + "nomics_id": "BRZ", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1083,12 +1217,14 @@ { "url": "bsty-main.coinmunity.gold:50012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "bsty-main.coinmunity.gold:50013" }, { "url": "bsty-bkp.coinmunity.gold:50012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "bsty-bkp.coinmunity.gold:50013" } ], "explorer_url": [ @@ -1167,10 +1303,12 @@ "nomics_id": "BTCZ", "electrum": [ { - "url": "electrum1.btcz.rocks:50001" + "url": "electrum1.btcz.rocks:50001", + "ws_url": "electrum1.btcz.rocks:50004" }, { - "url": "electrum2.btcz.rocks:50001" + "url": "electrum2.btcz.rocks:50001", + "ws_url": "electrum2.btcz.rocks:50004" } ], "explorer_url": [ @@ -1190,7 +1328,8 @@ { "url": "btx-electrumx.coinsmunity.com:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "btx-electrumx.coinsmunity.com:50003" } ], "explorer_url": [ @@ -1335,7 +1474,9 @@ "coingecko_id": "btu-protocol", "nomics_id": "BTU", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -1349,6 +1490,7 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -1364,6 +1506,7 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ "https://rpc.api.moonriver.moonbeam.network" ], @@ -1379,6 +1522,7 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1396,6 +1540,7 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1413,6 +1558,7 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -1429,8 +1575,11 @@ "name": "Binance USD", "coinpaprika_id": "busd-binance-usd", "coingecko_id": "binance-usd", + "nomics_id": "BUSD", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -1490,7 +1639,9 @@ "coingecko_id": "cad-coin", "nomics_id": "CADC", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -1504,6 +1655,7 @@ "name": "PancakeSwap", "coinpaprika_id": "cake-pancakeswap", "coingecko_id": "pancakeswap-token", + "nomics_id": "CAKE", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1570,27 +1722,32 @@ { "url": "mumbai.ecoincore.com:34333", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "mumbai.ecoincore.com:34335" }, { "url": "holland.ecoincore.com:34333", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "holland.ecoincore.com:34335" }, { "url": "miami.ecoincore.com:34333", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "miami.ecoincore.com:34335" }, { "url": "woolloomooloo.ecoincore.com:34333", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "woolloomooloo.ecoincore.com:34335" }, { "url": "lenoir.ecoincore.com:34333", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "lenoir.ecoincore.com:34335" } ], "explorer_url": [ @@ -1751,7 +1908,9 @@ "coingecko_id": "compound-governance-token", "nomics_id": "COMP", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -1810,6 +1969,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -1825,6 +1985,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "https://rpc.ftm.tools/" ], @@ -1840,6 +2001,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -1855,6 +2017,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -1871,6 +2034,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -1888,6 +2052,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -1905,6 +2070,7 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ "https://rpc.api.moonriver.moonbeam.network" ], @@ -1920,8 +2086,11 @@ "name": "Dai", "coinpaprika_id": "dai-dai", "coingecko_id": "dai", + "nomics_id": "DAI", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -2020,12 +2189,14 @@ "electrum": [ { "url": "electrumx.dgc.ewmcx.org:50001", - "protocol": "TCP" + "protocol": "TCP", + "ws_url": "electrumx.dgc.ewmcx.org:50003" }, { "url": "failover.dgc.ewmcx.biz:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "failover.dgc.ewmcx.biz:50003" } ], "explorer_url": [ @@ -2083,12 +2254,14 @@ { "url": "electrumx1.diminutivecoin.com:50012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrumx1.diminutivecoin.com:50013" }, { "url": "electrumx2.diminutivecoin.com:50012", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrumx2.diminutivecoin.com:50013" } ], "explorer_url": [ @@ -2186,6 +2359,7 @@ "name": "Dogecoin", "coinpaprika_id": "doge-dogecoin", "coingecko_id": "dogecoin", + "nomics_id": "DOGE", "electrum": [ { "url": "electrum1.cipig.net:10060", @@ -2207,50 +2381,12 @@ "active": false, "currently_enabled": false }, - "DOI": { - "coin": "DOI", - "name": "Doichain", - "coinpaprika_id": "doi-doicoin", - "coingecko_id": "doichain", - "nomics_id": "DOI", - "electrum": [ - { - "url": "itchy-jellyfish-89.doi.works:50002", - "protocol": "SSL", - "ws-url": "itchy-jellyfish-89.doi.works:50004" - }, - { - "url": "big-parrot-60.doi.works:50002", - "protocol": "SSL", - "ws-url": "big-parrot-60.doi.works:50004" - }, - { - "url": "ugly-bird-70.doi.works:50002", - "protocol": "SSL", - "ws-url": "ugly-bird-70.doi.works:50004" - }, - { - "url":"pink-deer-69.doi.works:50002", - "protocol": "SSL", - "ws-url": "pink-deer-69.doi.works:50004" - }, - { - "url":"pink-deer-69.doi.works:50001", - "protocol": "TCP" - } - ], - "explorer_url": [ - "https://explorer.doichain.org/" - ], - "type": "UTXO", - "active": false, - "currently_enabled": false - }, "DOGE-BEP20": { "coin": "DOGE-BEP20", "name": "Dogecoin", "coinpaprika_id": "doge-dogecoin", "coingecko_id": "dogecoin", + "nomics_id": "DOGE", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2266,9 +2402,9 @@ "DOGEDASH-BEP20": { "coin": "DOGEDASH-BEP20", "name": "Doge Dash", - "nomics_id": "DOGEDASH", "coinpaprika_id": "dogedash-doge-dash", "coingecko_id": "doge-dash", + "nomics_id": "DOGEDASH", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2284,9 +2420,9 @@ "DOGGY-BEP20": { "coin": "DOGGY-BEP20", "name": "Doggy", - "nomics_id": "DOGGY", "coinpaprika_id": "doggy-doggy", "coingecko_id": "doggy", + "nomics_id": "DOGGY", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2299,11 +2435,51 @@ "active": false, "currently_enabled": false }, + "DOI": { + "coin": "DOI", + "name": "Doichain", + "coinpaprika_id": "doi-doicoin", + "coingecko_id": "doichain", + "nomics_id": "DOI", + "electrum": [ + { + "url": "itchy-jellyfish-89.doi.works:50002", + "protocol": "SSL", + "ws-url": "itchy-jellyfish-89.doi.works:50004" + }, + { + "url": "big-parrot-60.doi.works:50002", + "protocol": "SSL", + "ws-url": "big-parrot-60.doi.works:50004" + }, + { + "url": "ugly-bird-70.doi.works:50002", + "protocol": "SSL", + "ws-url": "ugly-bird-70.doi.works:50004" + }, + { + "url":"pink-deer-69.doi.works:50002", + "protocol": "SSL", + "ws-url": "pink-deer-69.doi.works:50004" + }, + { + "url":"pink-deer-69.doi.works:50001", + "protocol": "TCP" + } + ], + "explorer_url": [ + "https://explorer.doichain.org/" + ], + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "DOT-BEP20": { "coin": "DOT-BEP20", "name": "Polkadot", "coinpaprika_id": "dot-polkadot", "coingecko_id": "polkadot", + "nomics_id": "DOT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2321,6 +2497,7 @@ "name": "Polkadot", "coinpaprika_id": "dot-polkadot", "coingecko_id": "polkadot", + "nomics_id": "DOT", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -2386,27 +2563,32 @@ { "url": "holland.ecoincore.com:11017", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "holland.ecoincore.com:11019" }, { "url": "lenoir.ecoincore.com:11017", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "lenoir.ecoincore.com:11019" }, { "url": "electrum1.egulden.org:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum1.egulden.org:50004" }, { "url": "electrum2.egulden.org:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum2.egulden.org:50004" }, { "url": "electrum5.egulden.org:11017", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "electrum5.egulden.org:11019" } ], "explorer_url": [ @@ -2423,6 +2605,7 @@ "name": "Elrond", "coinpaprika_id": "egld-elrond", "coingecko_id": "elrond-erd-2", + "nomics_id": "EGLD", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2435,11 +2618,30 @@ "active": false, "currently_enabled": false }, + "EILN-ERC20": { + "coin": "EILN-ERC20", + "name": "ilien", + "coinpaprika_id": "eiln-e-ilien", + "coingecko_id": "test-coin", + "nomics_id": "EILN", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, "ELF-BEP20": { "coin": "ELF-BEP20", "name": "aelf", "coinpaprika_id": "elf-aelf", "coingecko_id": "aelf", + "nomics_id": "ELF", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2457,6 +2659,7 @@ "name": "aelf", "coinpaprika_id": "elf-aelf", "coingecko_id": "aelf", + "nomics_id": "ELF", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -2503,6 +2706,7 @@ "name": "EOS", "coinpaprika_id": "eos-eos", "coingecko_id": "eos", + "nomics_id": "EOS", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2520,6 +2724,7 @@ "name": "Ethereum Classic", "coinpaprika_id": "etc-ethereum-classic", "coingecko_id": "ethereum-classic", + "nomics_id": "ETC", "nodes": [ "https://www.ethercluster.com/etc" ], @@ -2535,6 +2740,7 @@ "name": "Ethereum Classic", "coinpaprika_id": "etc-ethereum-classic", "coingecko_id": "ethereum-classic", + "nomics_id": "ETC", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2552,6 +2758,7 @@ "name": "Fetch.ai", "coinpaprika_id": "fetch-ai", "coingecko_id": "fetch-ai", + "nomics_id": "FET", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -2569,6 +2776,7 @@ "name": "Fetch.ai", "coinpaprika_id": "fetch-ai", "coingecko_id": "fetch-ai", + "nomics_id": "FET", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2586,8 +2794,11 @@ "name": "Fetch.ai", "coinpaprika_id": "fetch-ai", "coingecko_id": "fetch-ai", + "nomics_id": "FET", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -2601,6 +2812,7 @@ "name": "Filecoin", "coinpaprika_id": "fil-filecoin", "coingecko_id": "filecoin", + "nomics_id": "FIL", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2618,6 +2830,7 @@ "name": "Filecoin", "coinpaprika_id": "fil-filecoin", "coingecko_id": "filecoin", + "nomics_id": "FIL", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -2631,9 +2844,9 @@ "FLOKI-BEP20": { "coin": "FLOKI-BEP20", "name": "Floki Inu", - "nomics_id": "FLOKI15", "coinpaprika_id": "floki-floki-inu", "coingecko_id": "floki-inu", + "nomics_id": "FLOKI15", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2894,6 +3107,7 @@ "name": "Fantom", "coinpaprika_id": "ftm-fantom", "coingecko_id": "fantom", + "nomics_id": "FTM", "nodes": [ "https://rpc.ftm.tools/" ], @@ -2909,6 +3123,7 @@ "name": "Fantom", "coinpaprika_id": "ftm-fantom", "coingecko_id": "fantom", + "nomics_id": "FTM", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -2926,6 +3141,7 @@ "name": "Fantom", "coinpaprika_id": "ftm-fantom", "coingecko_id": "fantom", + "nomics_id": "FTM", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3016,6 +3232,24 @@ "active": false, "currently_enabled": false }, + "GMT-BEP20": { + "coin": "GMT-BEP20", + "name": "STEPN", + "coinpaprika_id": "test-coin", + "coingecko_id": "stepn", + "nomics_id": "GMT7", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "GRMS": { "coin": "GRMS", "type": "Smart Chain", @@ -3045,16 +3279,20 @@ "nomics_id": "GRS", "electrum": [ { - "url": "electrum11.groestlcoin.org:50001" + "url": "electrum11.groestlcoin.org:50001", + "ws_url": "electrum11.groestlcoin.org:50004" }, { - "url": "electrum12.groestlcoin.org:50001" + "url": "electrum12.groestlcoin.org:50001", + "ws_url": "electrum12.groestlcoin.org:50004" }, { - "url": "electrum13.groestlcoin.org:50001" + "url": "electrum13.groestlcoin.org:50001", + "ws_url": "electrum13.groestlcoin.org:50004" }, { - "url": "electrum14.groestlcoin.org:50001" + "url": "electrum14.groestlcoin.org:50001", + "ws_url": "electrum14.groestlcoin.org:50004" } ], "explorer_url": [ @@ -3123,7 +3361,9 @@ "coingecko_id": "the-graph", "nomics_id": "GRT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3132,6 +3372,24 @@ "active": false, "currently_enabled": false }, + "GST-BEP20": { + "coin": "GST-BEP20", + "name": "Green Satoshi Token", + "coinpaprika_id": "gst-gst", + "coingecko_id": "green-satoshi-token", + "nomics_id": "GST7", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "HODL": { "coin": "HODL", "name": "HODL", @@ -3164,6 +3422,7 @@ "name": "Injective Protocol", "coinpaprika_id": "inj-injective-protocol", "coingecko_id": "injective-protocol", + "nomics_id": "INJ", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -3181,6 +3440,7 @@ "name": "Injective Protocol", "coinpaprika_id": "inj-injective-protocol", "coingecko_id": "injective-protocol", + "nomics_id": "INJ", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3198,6 +3458,7 @@ "name": "IOTA", "coinpaprika_id": "miota-iota", "coingecko_id": "iota", + "nomics_id": "IOT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -3215,6 +3476,7 @@ "name": "IoTeX", "coinpaprika_id": "iotx-iotex", "coingecko_id": "iotex", + "nomics_id": "IOTX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -3232,8 +3494,11 @@ "name": "IoTeX", "coinpaprika_id": "iotx-iotex", "coingecko_id": "iotex", + "nomics_id": "IOTX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3248,6 +3513,7 @@ "forex_id": "CHF", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-swiss-franc", + "nomics_id": "JCHF", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3266,8 +3532,11 @@ "forex_id": "CHF", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-swiss-franc", + "nomics_id": "JCHF", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3282,6 +3551,7 @@ "forex_id": "EUR", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-euro", + "nomics_id": "JEUR", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3300,8 +3570,11 @@ "forex_id": "EUR", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-euro", + "nomics_id": "JEUR", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3316,6 +3589,7 @@ "forex_id": "GBP", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-british-pound", + "nomics_id": "JGBP", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3334,8 +3608,11 @@ "forex_id": "GBP", "coinpaprika_id": "test-coin", "coingecko_id": "jarvis-synthetic-british-pound", + "nomics_id": "JGBP", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3344,21 +3621,39 @@ "active": false, "currently_enabled": false }, - "JPYC-ERC20": { - "coin": "JPYC-ERC20", - "name": "JPY Coin", + "JJPY-PLG20": { + "coin": "JJPY-PLG20", + "name": "Jarvis Japanese Yen", "forex_id": "JPY", "coinpaprika_id": "test-coin", - "coingecko_id": "jpyc", + "coingecko_id": "jarvis-synthetic-japanese-yen", + "nomics_id": "JJPY", "nodes": [ - "http://eth1.cipig.net:8555", - "http://eth2.cipig.net:8555", - "http://eth3.cipig.net:8555" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ - "https://etherscan.io/" + "https://polygonscan.com/" ], - "type": "ERC-20", + "type": "Matic", + "active": false, + "currently_enabled": false + }, + "JPYC-AVX20": { + "coin": "JPYC-AVX20", + "name": "JPY Coin", + "forex_id": "JPY", + "coinpaprika_id": "fetch-ai", + "coingecko_id": "jpy-coin", + "nomics_id": "JPYC2", + "nodes": [ + "https://api.avax.network/ext/bc/C/rpc" + ], + "explorer_url": [ + "https://cchain.explorer.avax.network/" + ], + "type": "AVX-20", "active": false, "currently_enabled": false }, @@ -3367,9 +3662,12 @@ "name": "JPY Coin", "forex_id": "JPY", "coinpaprika_id": "test-coin", - "coingecko_id": "jpyc", + "coingecko_id": "jpy-coin", + "nomics_id": "JPYC2", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3403,7 +3701,9 @@ "coingecko_id": "jarvis-reward-token", "nomics_id": "JRT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3460,6 +3760,7 @@ "name": "Kyber Network", "coinpaprika_id": "knc-kyber-network", "coingecko_id": "kyber-network-crystal", + "nomics_id": "KNC3", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -3477,6 +3778,7 @@ "name": "Kyber Network", "coinpaprika_id": "knc-kyber-network", "coingecko_id": "kyber-network-crystal", + "nomics_id": "KNC3", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -3524,19 +3826,16 @@ "nomics_id": "LBC", "electrum": [ { - "url": "spv1.lbry.com:50001" - }, - { - "url": "spv13.lbry.com:50001" - }, - { - "url": "spv15.lbry.com:50001" + "url": "electrum1.cipig.net:10067", + "ws_url": "electrum1.cipig.net:30067" }, { - "url": "spv17.lbry.com:50001" + "url": "electrum2.cipig.net:10067", + "ws_url": "electrum2.cipig.net:30067" }, { - "url": "spv19.lbry.com:50001" + "url": "electrum3.cipig.net:10067", + "ws_url": "electrum3.cipig.net:30067" } ], "explorer_url": [ @@ -3609,7 +3908,8 @@ ], "type": "ERC-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "LUNA-BEP20": { "coin": "LUNA-BEP20", @@ -3626,7 +3926,8 @@ ], "type": "BEP-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "LUNA-HRC20": { "coin": "LUNA-HRC20", @@ -3642,7 +3943,8 @@ ], "type": "HRC-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "LUNA-PLG20": { "coin": "LUNA-PLG20", @@ -3650,14 +3952,17 @@ "coinpaprika_id": "luna-terra", "coingecko_id": "terra-luna", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" ], "type": "Matic", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "LYNX": { "coin": "LYNX", @@ -3667,24 +3972,29 @@ "nomics_id": "LYNX", "electrum": [ { - "url": "electrum.getlynx.io:50002", + "url": "electrum5.getlynx.io:50002", "protocol": "SSL", - "disable_cert_verification": false + "ws_url": "electrum5.getlynx.io:50004" }, { - "url": "electrum.logware.us:50002", + "url": "electrum6.getlynx.io:50002", "protocol": "SSL", - "disable_cert_verification": false + "ws_url": "electrum6.getlynx.io:50004" }, { - "url": "electrum.logware.club:50002", + "url": "electrum7.getlynx.io:50002", "protocol": "SSL", - "disable_cert_verification": false + "ws_url": "electrum7.getlynx.io:50004" }, { - "url": "electrum.logware.io:50002", + "url": "electrum8.getlynx.io:50002", "protocol": "SSL", - "disable_cert_verification": true + "ws_url": "electrum8.getlynx.io:50004" + }, + { + "url": "electrum9.getlynx.io:50002", + "protocol": "SSL", + "ws_url": "electrum9.getlynx.io:50004" } ], "explorer_url": [ @@ -3745,7 +4055,9 @@ "coingecko_id": "matic-network", "nomics_id": "MATIC", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -3875,12 +4187,9 @@ "electrum": [ { "url": "electrum.gmsmining.pw:17485" - }, - { - "url": "electrum1.gmsmining.pw:17485" }, { - "url": "electrum2.gmsmining.pw:17485" + "url": "electrum1.gmsmining.pw:17485" } ], "explorer_url": [ @@ -4000,7 +4309,9 @@ "coingecko_id": "million", "nomics_id": "MM4", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4041,6 +4352,7 @@ "name": "NEAR Protocol", "coinpaprika_id": "near-near-protocol", "coingecko_id": "near", + "nomics_id": "NEAR", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4058,6 +4370,7 @@ "name": "Ocean Protocol", "coinpaprika_id": "ocean-ocean-protocol", "coingecko_id": "ocean-protocol", + "nomics_id": "OCEAN", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4075,6 +4388,7 @@ "name": "Ocean Protocol", "coinpaprika_id": "ocean-ocean-protocol", "coingecko_id": "ocean-protocol", + "nomics_id": "OCEAN", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4092,8 +4406,11 @@ "name": "Ocean Protocol", "coinpaprika_id": "ocean-ocean-protocol", "coingecko_id": "ocean-protocol", + "nomics_id": "OCEAN", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4107,6 +4424,7 @@ "coin": "ONE", "coingecko_id": "harmony", "coinpaprika_id": "one-harmony", + "nomics_id": "HARMONY", "currently_enabled": false, "nodes": [ "https://api.harmony.one", @@ -4123,6 +4441,7 @@ "name": "Ontology", "coinpaprika_id": "ont-ontology", "coingecko_id": "ontology", + "nomics_id": "ONT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4140,6 +4459,7 @@ "name": "Paxos Standard", "coinpaprika_id": "pax-paxos-standard-token", "coingecko_id": "paxos-standard", + "nomics_id": "PAX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4157,6 +4477,7 @@ "name": "Paxos Standard", "coinpaprika_id": "pax-paxos-standard-token", "coingecko_id": "paxos-standard", + "nomics_id": "PAX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4174,6 +4495,7 @@ "name": "Paxos Standard", "coinpaprika_id": "pax-paxos-standard-token", "coingecko_id": "paxos-standard", + "nomics_id": "PAX", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -4189,8 +4511,11 @@ "name": "Paxos Standard", "coinpaprika_id": "pax-paxos-standard-token", "coingecko_id": "paxos-standard", + "nomics_id": "PAX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4204,6 +4529,7 @@ "name": "PAX Gold", "coinpaprika_id": "paxg-pax-gold", "coingecko_id": "pax-gold", + "nomics_id": "PAXG", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4221,6 +4547,7 @@ "name": "PAX Gold", "coinpaprika_id": "paxg-pax-gold", "coingecko_id": "pax-gold", + "nomics_id": "PAXG", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4239,8 +4566,11 @@ "name": "PAX Gold", "coinpaprika_id": "paxg-pax-gold", "coingecko_id": "pax-gold", + "nomics_id": "PAXG", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4421,7 +4751,9 @@ "coingecko_id": "ethereum", "nomics_id": "ETH", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4507,10 +4839,12 @@ { "url": "failover.trc-uis.ewmcx.biz:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "failover.trc-uis.ewmcx.biz:50003" }, { - "url": "electrumx.uis.ewmcx.info:50001" + "url": "electrumx.uis.ewmcx.info:50001", + "ws_url": "electrumx.uis.ewmcx.info:50004" } ], "explorer_url": [ @@ -4530,12 +4864,14 @@ { "url": "uno-main.coinmunity.gold:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "uno-main.coinmunity.gold:50003" }, { "url": "uno-bkp.coinmunity.gold:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "uno-bkp.coinmunity.gold:50003" } ], "explorer_url": [ @@ -4552,6 +4888,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -4567,6 +4904,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://rpc.api.moonriver.moonbeam.network" ], @@ -4582,6 +4920,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://rpc.ftm.tools/" ], @@ -4597,6 +4936,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4614,6 +4954,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4631,6 +4972,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -4646,6 +4988,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -4661,6 +5004,7 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -4677,8 +5021,11 @@ "name": "USD Coin", "coinpaprika_id": "usdc-usd-coin", "coingecko_id": "usd-coin", + "nomics_id": "USDC", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4717,6 +5064,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://rpc.api.moonriver.moonbeam.network" ], @@ -4732,6 +5080,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -4747,6 +5096,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://rpc.ftm.tools/" ], @@ -4762,6 +5112,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -4778,6 +5129,7 @@ "wallet_only": true, "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://arb1.arbitrum.io/rpc" ], @@ -4793,6 +5145,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -4808,8 +5161,11 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -4823,6 +5179,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -4840,6 +5197,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -4858,6 +5216,7 @@ "name": "Tether", "coinpaprika_id": "usdt-tether", "coingecko_id": "tether", + "nomics_id": "USDT", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -4961,7 +5320,9 @@ "coingecko_id": "basic-attention-token", "nomics_id": "BAT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -5185,7 +5546,9 @@ "coingecko_id": "chainlink", "nomics_id": "LINK", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -5201,13 +5564,16 @@ "coingecko_id": "test-coin", "electrum": [ { - "url": "electrum1.cipig.net:10016" + "url": "electrum1.cipig.net:10016", + "ws_url": "electrum1.cipig.net:30016" }, { - "url": "electrum2.cipig.net:10016" + "url": "electrum2.cipig.net:10016", + "ws_url": "electrum2.cipig.net:30016" }, { - "url": "electrum3.cipig.net:10016" + "url": "electrum3.cipig.net:10016", + "ws_url": "electrum3.cipig.net:30016" } ], "explorer_url": [ @@ -5346,7 +5712,7 @@ "NYAN": { "coin": "NYAN", "name": "Nyancoin", - "coinpaprika_id": "test-coin", + "coinpaprika_id": "nyan-nyancoin", "coingecko_id": "test-coin", "nomics_id": "NYAN", "electrum": [ @@ -5410,7 +5776,9 @@ "coingecko_id": "pegaxy-stone", "nomics_id": "PGX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -5424,6 +5792,7 @@ "name": "Picacoin", "coinpaprika_id": "pic-picacoin", "coingecko_id": "test-coin", + "nomics_id": "PIC3", "electrum": [ { "url": "143.198.143.180:50001" @@ -5439,6 +5808,28 @@ "active": false, "currently_enabled": false }, + "PND": { + "coin": "PND", + "name": "Pandacoin", + "coinpaprika_id": "pnd-pandacoin", + "coingecko_id": "pandacoin", + "nomics_id": "PND", + "electrum": [ + { + "url": "electrum.thepandacoin.net:50002", + "protocol": "SSL", + "disable_cert_verification": false + } + ], + "explorer_url": [ + "https://chainz.cryptoid.info/pnd/" + ], + "explorer_tx_url": "tx.dws?", + "explorer_address_url": "address.dws?", + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "PPC": { "coin": "PPC", "name": "Peercoin", @@ -5449,12 +5840,14 @@ { "url": "electrum.peercoinexplorer.net:50002", "protocol": "SSL", - "disable_cert_verification": false + "disable_cert_verification": false, + "ws_url": "electrum.peercoinexplorer.net:50004" }, { "url": "allingas.peercoinexplorer.net:50002", "protocol": "SSL", - "disable_cert_verification": false + "disable_cert_verification": false, + "ws_url": "allingas.peercoinexplorer.net:50004" } ], "explorer_url": [ @@ -5466,6 +5859,42 @@ "active": false, "currently_enabled": false }, + "PPC-ERC20": { + "coin": "PPC-ERC20", + "name": "Peercoin", + "coinpaprika_id": "ppc-peercoin", + "coingecko_id": "peercoin", + "nomics_id": "PPC", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "PPC-PLG20": { + "coin": "PPC-PLG20", + "name": "Peercoin", + "coinpaprika_id": "ppc-peercoin", + "coingecko_id": "peercoin", + "nomics_id": "PPC", + "nodes": [ + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false + }, "PRUX": { "coin": "PRUX", "name": "PRUX", @@ -5621,7 +6050,7 @@ "coin": "SMTF-v2", "name": "SmartFi", "coinpaprika_id": "smtf-smartfi", - "coingecko_id": "test-coin", + "coingecko_id": "smartfi", "nomics_id": "SMTF", "nodes": [ "http://bsc1.cipig.net:8655", @@ -5666,6 +6095,7 @@ "name": "Swipe", "coinpaprika_id": "sxp-swipe", "coingecko_id": "swipe", + "nomics_id": "SXP", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -5683,6 +6113,7 @@ "name": "Swipe", "coinpaprika_id": "sxp-swipe", "coingecko_id": "swipe", + "nomics_id": "SXP", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -5953,7 +6384,9 @@ "coingecko_id": "sushi", "nomics_id": "SUSHI", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -5991,17 +6424,20 @@ { "url": "el0.verus.io:17486", "protocol": "SSL", - "disable_cert_verification": false + "disable_cert_verification": false, + "ws_url": "el0.verus.io:17488" }, { "url": "el1.verus.io:17486", "protocol": "SSL", - "disable_cert_verification": false + "disable_cert_verification": false, + "ws_url": "el1.verus.io:17488" }, { "url": "el2.verus.io:17486", "protocol": "SSL", - "disable_cert_verification": false + "disable_cert_verification": false, + "ws_url": "el2.verus.io:17488" } ], "explorer_url": [ @@ -6020,12 +6456,14 @@ { "url": "il8p.electrumx.transcenders.name:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "il8p.electrumx.transcenders.name:50003" }, { "url": "il9p.electrumx.transcenders.name:50002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "il9p.electrumx.transcenders.name:50003" } ], "explorer_url": [ @@ -6040,15 +6478,18 @@ "ILN": { "coin": "ILN", "type": "Smart Chain", - "name": "iLien", + "name": "ilien", "coingecko_id": "test-coin", "coinpaprika_id": "test-coin", + "nomics_id": "ILNPOS", "electrum": [ { - "url": "electrum1.ilien.io:65011" + "url": "electrum1.ilien.io:65011", + "ws_url": "electrum1.ilien.io:30069" }, { - "url": "electrum2.ilien.io:65011" + "url": "electrum2.ilien.io:65011", + "ws_url": "electrum2.ilien.io:30069" } ], "explorer_url": [ @@ -6057,6 +6498,42 @@ "active": false, "currently_enabled": false }, + "ILN-BEP20": { + "coin": "ILN-BEP20", + "name": "ilien", + "coinpaprika_id": "test-coin", + "coingecko_id": "test-coin", + "nomics_id": "ILNPOS", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "ILN-PLG20": { + "coin": "ILN-PLG20", + "name": "ilien", + "coinpaprika_id": "test-coin", + "coingecko_id": "test-coin", + "nomics_id": "ILNPOS", + "nodes": [ + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false + }, "MKR-AVX20": { "coin": "MKR-AVX20", "name": "Maker", @@ -6243,7 +6720,9 @@ "coingecko_id": "nexo", "nomics_id": "NEXO", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6260,7 +6739,9 @@ "nomics_id": "NMC", "electrum": [ { - "url": "82.119.233.36:50001" + "url": "nmc.bitcoins.sk:50002", + "protocol": "SSL", + "disable_cert_verification": true }, { "url": "nmc2.bitcoins.sk:57002", @@ -6362,7 +6843,9 @@ "coingecko_id": "nzd-stablecoin", "nomics_id": "NZDS", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6396,7 +6879,9 @@ "coingecko_id": "omisego", "nomics_id": "OMG", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6492,6 +6977,7 @@ "name": "Ren", "coinpaprika_id": "ren-republic-protocol", "coingecko_id": "republic-protocol", + "nomics_id": "REN", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6509,6 +6995,7 @@ "name": "Ren", "coinpaprika_id": "ren-republic-protocol", "coingecko_id": "republic-protocol", + "nomics_id": "REN", "nodes": [ "https://api.harmony.one", "https://api.s0.t.hmny.io" @@ -6525,6 +7012,7 @@ "name": "Ren", "coinpaprika_id": "ren-republic-protocol", "coingecko_id": "republic-protocol", + "nomics_id": "REN", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -6603,6 +7091,60 @@ "active": false, "currently_enabled": false }, + "SAND-ERC20": { + "coin": "SAND-ERC20", + "name": "The Sandbox", + "coinpaprika_id": "sand-the-sandbox", + "coingecko_id": "the-sandbox", + "nomics_id": "SAND2", + "nodes": [ + "http://eth1.cipig.net:8555", + "http://eth2.cipig.net:8555", + "http://eth3.cipig.net:8555" + ], + "explorer_url": [ + "https://etherscan.io/" + ], + "type": "ERC-20", + "active": false, + "currently_enabled": false + }, + "SAND-BEP20": { + "coin": "SAND-BEP20", + "name": "The Sandbox", + "coinpaprika_id": "sand-the-sandbox", + "coingecko_id": "the-sandbox", + "nomics_id": "SAND2", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, + "SAND-PLG20": { + "coin": "SAND-PLG20", + "name": "The Sandbox", + "coinpaprika_id": "sand-the-sandbox", + "coingecko_id": "the-sandbox", + "nomics_id": "SAND2", + "nodes": [ + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" + ], + "explorer_url": [ + "https://polygonscan.com/" + ], + "type": "Matic", + "active": false, + "currently_enabled": false + }, "SNX-AVX20": { "coin": "SNX-AVX20", "name": "Synthetix", @@ -6694,7 +7236,9 @@ "coingecko_id": "havven", "nomics_id": "SNX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6773,7 +7317,9 @@ "coingecko_id": "telcoin", "nomics_id": "TEL", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6863,10 +7409,12 @@ "nomics_id": "TKL2", "electrum": [ { - "url": "1.eu.tokel.electrum.dexstats.info:10077" + "url": "1.eu.tokel.electrum.dexstats.info:10077", + "ws_url": "1.eu.tokel.electrum.dexstats.info:9077" }, { - "url": "2.eu.tokel.electrum.dexstats.info:10077" + "url": "2.eu.tokel.electrum.dexstats.info:10077", + "ws_url": "2.eu.tokel.electrum.dexstats.info:9077" } ], "explorer_url": [ @@ -6886,13 +7434,16 @@ { "url": "failover.trc-uis.ewmcx.biz:50006", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "failover.trc-uis.ewmcx.biz:50007" }, { - "url": "electrum.terracoin.io:50001" + "url": "electrum.terracoin.io:50001", + "ws_url": "electrum.terracoin.io:50004" }, { - "url": "electrum.southofheaven.ca:50001" + "url": "electrum.southofheaven.ca:50001", + "ws_url": "electrum.southofheaven.ca:50004" } ], "explorer_url": [ @@ -6909,6 +7460,7 @@ "name": "TRON", "coinpaprika_id": "trx-tron", "coingecko_id": "tron", + "nomics_id": "TRX", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6927,6 +7479,7 @@ "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", + "nomics_id": "TRYB", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -6943,6 +7496,7 @@ "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", + "nomics_id": "TRYB", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -6961,8 +7515,11 @@ "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", + "nomics_id": "TRYB", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -6977,6 +7534,7 @@ "forex_id": "TRY", "coinpaprika_id": "tryb-bilira", "coingecko_id": "bilira", + "nomics_id": "TRYB", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -6994,6 +7552,7 @@ "name": "TrueUSD", "coinpaprika_id": "tusd-trueusd", "coingecko_id": "true-usd", + "nomics_id": "TUSD", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -7011,6 +7570,7 @@ "name": "TrueUSD", "coinpaprika_id": "tusd-trueusd", "coingecko_id": "true-usd", + "nomics_id": "TUSD", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7028,6 +7588,7 @@ "name": "TrueUSD", "coinpaprika_id": "tusd-trueusd", "coingecko_id": "true-usd", + "nomics_id": "TUSD", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -7043,6 +7604,7 @@ "name": "TrueUSD", "coinpaprika_id": "tusd-trueusd", "coingecko_id": "true-usd", + "nomics_id": "TUSD", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -7058,8 +7620,11 @@ "name": "TrueUSD", "coinpaprika_id": "tusd-trueusd", "coingecko_id": "true-usd", + "nomics_id": "TUSD", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -7083,7 +7648,8 @@ ], "type": "ERC-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "UST-BEP20": { "coin": "UST-BEP20", @@ -7100,7 +7666,8 @@ ], "type": "BEP-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "UST-HRC20": { "coin": "UST-HRC20", @@ -7116,7 +7683,8 @@ ], "type": "HRC-20", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "UST-PLG20": { "coin": "UST-PLG20", @@ -7124,14 +7692,17 @@ "coinpaprika_id": "ust-terrausd", "coingecko_id": "terrausd", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" ], "type": "Matic", "active": false, - "currently_enabled": false + "currently_enabled": false, + "wallet_only": true }, "VAL": { "coin": "VAL", @@ -7143,17 +7714,20 @@ { "url": "e1.validitytech.com:11002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "e1.validitytech.com:11004" }, { "url": "e2.validitytech.com:11002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "e2.validitytech.com:11004" }, { "url": "e3.validitytech.com:11002", "protocol": "SSL", - "disable_cert_verification": true + "disable_cert_verification": true, + "ws_url": "e3.validitytech.com:11004" } ], "explorer_url": [ @@ -7165,6 +7739,24 @@ "active": false, "currently_enabled": false }, + "VET-BEP20": { + "coin": "VET-BEP20", + "name": "VeChain", + "coinpaprika_id": "vet-vechain", + "coingecko_id": "vechain", + "nomics_id": "VET", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "VRA": { "coin": "VRA", "name": "Verasity", @@ -7203,6 +7795,24 @@ "active": false, "currently_enabled": false }, + "WAVES-BEP20": { + "coin": "WAVES-BEP20", + "name": "Waves", + "coinpaprika_id": "waves-waves", + "coingecko_id": "waves", + "nomics_id": "WAVES", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "WBTC-ERC20": { "coin": "WBTC-ERC20", "name": "Wrapped Bitcoin", @@ -7346,8 +7956,9 @@ "nomics_id": "XMY", "electrum": [ { - "url": "lenoir.ecoincore.com:10892", - "protocol": "SSL" + "url": "lenoir.ecoincore.com:10891", + "protocol": "TCP", + "ws_url": "lenoir.ecoincore.com:10894" } ], "explorer_url": [ @@ -7392,6 +8003,7 @@ "name": "XRP", "coinpaprika_id": "xrp-xrp", "coingecko_id": "ripple", + "nomics_id": "XRP", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -7434,6 +8046,7 @@ "forex_id": "SGD", "coinpaprika_id": "xsgd-xsgd", "coingecko_id": "xsgd", + "nomics_id": "XSGD", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7452,8 +8065,11 @@ "forex_id": "SGD", "coinpaprika_id": "xsgd-xsgd", "coingecko_id": "xsgd", + "nomics_id": "XSGD", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -7467,6 +8083,7 @@ "name": "Tezos", "coinpaprika_id": "xtz-tezos", "coingecko_id": "tezos", + "nomics_id": "XTZ", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -7479,8 +8096,8 @@ "active": false, "currently_enabled": false }, - "XVC": { - "coin": "XVC", + "XVC-OLD": { + "coin": "XVC-OLD", "name": "Vanillacash", "coinpaprika_id": "xvc-vcash", "coingecko_id": "vcash", @@ -7503,6 +8120,31 @@ "currently_enabled": false, "wallet_only": true }, + "XVC": { + "coin": "XVC", + "name": "Vanillacash", + "coinpaprika_id": "xvc-vcash", + "coingecko_id": "vcash", + "nomics_id": "XVC", + "electrum": [ + { + "url": "electrumx1.vanillacash.info:50011", + "ws_url": "electrumx1.vanillacash.info:50013" + }, + { + "url": "electrumx2.vanillacash.info:50011", + "ws_url": "electrumx2.vanillacash.info:50013" + } + ], + "explorer_url": [ + "https://chainz.cryptoid.info/xvc/" + ], + "explorer_tx_url": "tx.dws?", + "explorer_address_url": "address.dws?", + "type": "UTXO", + "active": false, + "currently_enabled": false + }, "XVC-BEP20": { "coin": "XVC-BEP20", "name": "Vanillacash", @@ -7539,6 +8181,7 @@ "name": "Venus", "coinpaprika_id": "xvs-venus", "coingecko_id": "venus", + "nomics_id": "XVS", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -7640,6 +8283,7 @@ "name": "DFI.Money", "coinpaprika_id": "yfii-dfimoney", "coingecko_id": "yfii-finance", + "nomics_id": "YFII", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -7657,6 +8301,7 @@ "name": "DFI.Money", "coinpaprika_id": "yfii-dfimoney", "coingecko_id": "yfii-finance", + "nomics_id": "YFII", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7705,13 +8350,16 @@ "nomics_id": "ZER", "electrum": [ { - "url": "electrum1.cipig.net:10065" + "url": "electrum1.cipig.net:10065", + "ws_url": "electrum1.cipig.net:30065" }, { - "url": "electrum2.cipig.net:10065" + "url": "electrum2.cipig.net:10065", + "ws_url": "electrum2.cipig.net:30065" }, { - "url": "electrum3.cipig.net:10065" + "url": "electrum3.cipig.net:10065", + "ws_url": "electrum3.cipig.net:30065" } ], "explorer_url": [ @@ -7756,7 +8404,8 @@ "electrum": [ { "url": "207.180.252.200:50011", - "protocol": "TCP" + "protocol": "TCP", + "ws_url": "207.180.252.200:50013" }, { "url": "zeta-seed-c.zetacoin.tech:50012", @@ -7823,6 +8472,7 @@ "name": "0x", "coinpaprika_id": "zrx-0x", "coingecko_id": "0x", + "nomics_id": "ZRX", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -7838,6 +8488,7 @@ "name": "0x", "coinpaprika_id": "zrx-0x", "coingecko_id": "0x", + "nomics_id": "ZRX", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -7855,8 +8506,11 @@ "name": "0x", "coinpaprika_id": "zrx-0x", "coingecko_id": "0x", + "nomics_id": "ZRX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -7877,13 +8531,16 @@ "protocol": "TCP" }, { - "url": "electrum1.cipig.net:10068" + "url": "electrum1.cipig.net:10068", + "ws_url": "electrum1.cipig.net:30068" }, { - "url": "electrum2.cipig.net:10068" + "url": "electrum2.cipig.net:10068", + "ws_url": "electrum2.cipig.net:30068" }, { - "url": "electrum3.cipig.net:10068" + "url": "electrum3.cipig.net:10068", + "ws_url": "electrum3.cipig.net:30068" } ], "explorer_url": [ @@ -7915,13 +8572,16 @@ "coinpaprika_id": "test-coin", "electrum": [ { - "url": "electrum1.cipig.net:10071" + "url": "electrum1.cipig.net:10071", + "ws_url": "electrum1.cipig.net:30071" }, { - "url": "electrum2.cipig.net:10071" + "url": "electrum2.cipig.net:10071", + "ws_url": "electrum2.cipig.net:30071" }, { - "url": "electrum3.cipig.net:10071" + "url": "electrum3.cipig.net:10071", + "ws_url": "electrum3.cipig.net:30071" } ], "explorer_url": [ @@ -8148,7 +8808,9 @@ "coingecko_id": "celsius-degree-token", "nomics_id": "CEL", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8199,7 +8861,9 @@ "coingecko_id": "swissborg", "nomics_id": "CHSB", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8249,7 +8913,9 @@ "coingecko_id": "chiliz", "nomics_id": "CHZ", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8299,7 +8965,9 @@ "coingecko_id": "crypto-com-chain", "nomics_id": "CRO", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8381,7 +9049,9 @@ "coingecko_id": "curve-dao-token", "nomics_id": "CRV", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8482,7 +9152,9 @@ "coingecko_id": "enjincoin", "nomics_id": "ENJ", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8497,6 +9169,7 @@ "forex_id": "EUR", "coinpaprika_id": "eurs-stasis-eurs", "coingecko_id": "stasis-eurs", + "nomics_id": "EURS", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8515,8 +9188,11 @@ "forex_id": "EUR", "coinpaprika_id": "eurs-stasis-eurs", "coingecko_id": "stasis-eurs", + "nomics_id": "EURS", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8550,7 +9226,9 @@ "coingecko_id": "gnosis", "nomics_id": "GNO", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8584,7 +9262,9 @@ "coingecko_id": "hex", "nomics_id": "HEX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8618,7 +9298,9 @@ "coingecko_id": "holotoken", "nomics_id": "HOT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8666,6 +9348,7 @@ "name": "HUSD", "coinpaprika_id": "husd-husd", "coingecko_id": "husd", + "nomics_id": "HUSD", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -8683,6 +9366,7 @@ "name": "HUSD", "coinpaprika_id": "husd-husd", "coingecko_id": "husd", + "nomics_id": "HUSD", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -8698,6 +9382,7 @@ "name": "HUSD", "coinpaprika_id": "husd-husd", "coingecko_id": "husd", + "nomics_id": "HUSD", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -8713,8 +9398,11 @@ "name": "HUSD", "coinpaprika_id": "husd-husd", "coingecko_id": "husd", + "nomics_id": "HUSD", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8766,7 +9454,9 @@ "coingecko_id": "leo-token", "nomics_id": "LEO", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8800,7 +9490,9 @@ "coingecko_id": "loopring", "nomics_id": "LRC", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8827,6 +9519,24 @@ "active": false, "currently_enabled": false }, + "MANA-BEP20": { + "coin": "MANA-BEP20", + "name": "Decentraland", + "coinpaprika_id": "mana-decentraland", + "coingecko_id": "decentraland", + "nomics_id": "MANA", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "type": "BEP-20", + "active": false, + "currently_enabled": false + }, "MANA-KRC20": { "coin": "MANA-KRC20", "name": "Decentraland", @@ -8850,7 +9560,9 @@ "coingecko_id": "decentraland", "nomics_id": "MANA", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8935,7 +9647,9 @@ "coingecko_id": "power-ledger", "nomics_id": "POWR", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -8987,7 +9701,9 @@ "coingecko_id": "privacy-coin", "nomics_id": "PRCY", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9055,7 +9771,9 @@ "coingecko_id": "iexec-rlc", "nomics_id": "RLC", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9193,7 +9911,9 @@ "coingecko_id": "serum", "nomics_id": "SRM", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9311,7 +10031,9 @@ "coingecko_id": "unibright", "nomics_id": "UBT", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9361,7 +10083,9 @@ "coingecko_id": "uma", "nomics_id": "UMA", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9375,6 +10099,7 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ "https://api.avax.network/ext/bc/C/rpc" ], @@ -9390,6 +10115,7 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -9407,6 +10133,7 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ "http://eth1.cipig.net:8555", "http://eth2.cipig.net:8555", @@ -9424,6 +10151,7 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ "https://http-mainnet.hecochain.com" ], @@ -9439,6 +10167,7 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ "https://rpc-mainnet.kcc.network" ], @@ -9454,8 +10183,11 @@ "name": "Uniswap", "coinpaprika_id": "uni-uniswap", "coingecko_id": "uniswap", + "nomics_id": "UNI", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9565,7 +10297,9 @@ "coingecko_id": "ethos", "nomics_id": "VGX", "nodes": [ - "https://polygon-rpc.com" + "https://polygon-rpc.com", + "https://poly-rpc.gateway.pokt.network", + "https://matic-mainnet.chainstacklabs.com" ], "explorer_url": [ "https://polygonscan.com/" @@ -9672,9 +10406,9 @@ "ZINU-BEP20": { "coin": "ZINU-BEP20", "name": "Zombie Inu", - "nomics_id": "ZINUBEP20", "coinpaprika_id": "zombie-inu", "coingecko_id": "zinu-zombie-inu", + "nomics_id": "ZINUBEP20", "nodes": [ "http://bsc1.cipig.net:8655", "http://bsc2.cipig.net:8655", @@ -9711,5 +10445,108 @@ "type": "UTXO", "active": false, "currently_enabled": false + }, + "RUNES": { + "coin": "RUNES", + "name": "Runebase", + "coinpaprika_id": "runes-runebase", + "coingecko_id": "runebase", + "nomics_id": "RUNES", + "electrum": [ + { + "url": "electrum1.runebase.io:50002", + "ws_url": "electrum1.runebase.io:50004", + "protocol": "SSL" + }, + { + "url": "electrum2.runebase.io:50002", + "ws_url": "electrum2.runebase.io:50004", + "protocol": "SSL" + }, + { + "url": "electrum3.runebase.io:50002", + "ws_url": "electrum3.runebase.io:50004", + "protocol": "SSL" + }, + { + "url": "electrum4.runebase.io:50002", + "ws_url": "electrum4.runebase.io:50004", + "protocol": "SSL" + }, + { + "url": "electrum1.runebase.io:50001", + "protocol": "TCP" + }, + { + "url": "electrum2.runebase.io:50001", + "protocol": "TCP" + }, + { + "url": "electrum3.runebase.io:50001", + "protocol": "TCP" + }, + { + "url": "electrum4.runebase.io:50001", + "protocol": "TCP" + } + ], + "explorer_url": [ + "https://explorer.runebase.io/" + ], + "explorer_tx_url": "tx/", + "explorer_address_url": "address/", + "type": "UTXO", + "active": false, + "is_segwit_on": false, + "currently_enabled": false + }, +"ACTN": { + "coin": "ACTN", + "name": "Action Coin", + "type": "Smart Chain", + "coinpaprika_id": "actn-action-coin", + "coingecko_id": "action-coin", + "nomics_id": "ACTN", + "electrum": [ + { + "url": "electrumx1.actioncoin.com:30001", + "ws_url": "electrumx1.actioncoin.com:20001", + "protocol": "SSL" + }, + { + "url": "electrumx2.actioncoin.com:30001", + "ws_url": "electrumx2.actioncoin.com:20001", + "protocol": "SSL" + }, + { + "url": "electrumx1.actioncoin.com:10001" + }, + { + "url": "electrumx2.actioncoin.com:10001" + } + ], + "explorer_url": [ + "https://exp.actioncoin.com/" + ], + "active": false, + "currently_enabled": false + }, + "ACTN-BEP20": { + "coin": "ACTN-BEP20", + "name": "Action Coin", + "type": "BEP-20", + "nomics_id": "ACTNBEP20", + "coinpaprika_id": "actn-action-coin", + "coingecko_id": "action-coin", + "nodes": [ + "http://bsc1.cipig.net:8655", + "http://bsc2.cipig.net:8655", + "http://bsc3.cipig.net:8655" + ], + "explorer_url": [ + "https://bscscan.com/" + ], + "active": false, + "currently_enabled": false } } diff --git a/assets/themes/Binance - Dark/colors.json b/assets/themes/Binance - Dark/colors.json index 2373c56ea..ba1e99ec5 100644 --- a/assets/themes/Binance - Dark/colors.json +++ b/assets/themes/Binance - Dark/colors.json @@ -1,73 +1,80 @@ { - "accentColor": "#0A0A0A", - "foregroundColor": "#ffffff", - "backgroundColor": "#161515", - "backgroundColorDeep": "#0A0A0A", - - "buttonColorDisabled": "#8B6900", - "buttonColorEnabled": "#cb9800", - "buttonColorHovered": "#EBB514", - "buttonColorPressed": "#EBB514", - "buttonTextDisabledColor": "#3B3B3B", - "buttonTextEnabledColor": "#fafffa", - "buttonTextHoveredColor": "#000000", - "buttonTextPressedColor": "#000000", - - "gradientButtonStartColor": "#cb9800", - "gradientButtonEndColor": "#cb9800", - "gradientButtonDisabledStartColor": "#8B6900", - "gradientButtonDisabledEndColor": "#8B6900", - "gradientButtonHoveredStartColor": "#EBB514", - "gradientButtonHoveredEndColor": "#EBB514", - "gradientButtonPressedStartColor": "#EBB514", - "gradientButtonPressedEndColor": "#EBB514", - "gradientButtonTextEnabledColor": "#080707", - "gradientButtonTextDisabledColor": "#3B3B3B", - "gradientButtonTextHoveredColor": "#000000", - "gradientButtonTextPressedColor": "#000000", - - "checkBoxGradientStartColor": "#cb9800", - "checkBoxGradientEndColor": "#EBB514", - - "switchGradientStartColor": "#cb9800", - "switchGradientEndColor": "#EBB514", - "switchGradientStartColor2": "#FFF", - "switchGradientEndColor2": "#FFF", - - "modalPageCounterGradientStartColor": "#cb9800", - "modalPageCounterGradientEndColor": "#EBB514", - - "tabSelectedColor": "#EBB514", - - "textDisabledColor": "#444444", - "textSelectionColor": "#14bca6", - "textPlaceholderColor": "#8B6900", - "textSelectedColor": "#0e1021", - - "textFieldBackgroundColor": "#0e0e0e", - "textFieldActiveBackgroundColor": "#0c0c0c", + "accentColor": "#0A0A0AFF", + "foregroundColor": "#ffffffFF", + "backgroundColor": "#161515FF", + "backgroundColorDeep": "#0A0A0AFF", + + "busyIndicatorColor": "#cb9800FF", + + "buttonColorDisabled": "#8B6900FF", + "buttonColorEnabled": "#cb9800FF", + "buttonColorHovered": "#EBB514FF", + "buttonColorPressed": "#EBB514FF", + "buttonTextDisabledColor": "#3B3B3BFF", + "buttonTextEnabledColor": "#fafffaFF", + "buttonTextHoveredColor": "#000000FF", + "buttonTextPressedColor": "#000000FF", + + "gradientButtonStartColor": "#cb9800FF", + "gradientButtonEndColor": "#cb9800FF", + "gradientButtonDisabledStartColor": "#8B6900FF", + "gradientButtonDisabledEndColor": "#8B6900FF", + "gradientButtonHoveredStartColor": "#EBB514FF", + "gradientButtonHoveredEndColor": "#EBB514FF", + "gradientButtonPressedStartColor": "#EBB514FF", + "gradientButtonPressedEndColor": "#EBB514FF", + "gradientButtonTextEnabledColor": "#080707FF", + "gradientButtonTextDisabledColor": "#3B3B3BFF", + "gradientButtonTextHoveredColor": "#000000FF", + "gradientButtonTextPressedColor": "#000000FF", + + "checkBoxGradientStartColor": "#cb9800FF", + "checkBoxGradientEndColor": "#EBB514FF", + + "switchGradientStartColor": "#cb9800FF", + "switchGradientEndColor": "#EBB514FF", + "switchGradientStartColor2": "#FFFFFFFF", + "switchGradientEndColor2": "#FFFFFFFF", + + "modalPageCounterGradientStartColor": "#cb9800FF", + "modalPageCounterGradientEndColor": "#EBB514FF", + + "tabSelectedColor": "#EBB514FF", + + "textDisabledColor": "#444444FF", + "textSelectionColor": "#4986EAFF", + "textPlaceholderColor": "#8B6900FF", + "textSelectedColor": "#0e1021FF", + + "textFieldBackgroundColor": "#0e0e0eFF", + "textFieldActiveBackgroundColor": "#0c0c0cFF", "textFieldPrefixColor": "#8790B2FF", - "textFieldSuffixColor": "#456078FF#", + "textFieldSuffixColor": "#456078FF", + "comboBoxBackgroundColor": "#0A0A0AFF", + "comboBoxArrowsColor": "#FFFFFFFF", + "comboBoxDropdownItemHighlightedColor": "#111111FF", - "chartTradingLineBackgroundColor": "#24283d", - "chartTradingLineColor": "#74fbee", + "chartTradingLineBackgroundColor": "#24283dFF", + "chartTradingLineColor": "#74fbeeFF", - "innerBackgroundColor": "#111", + "innerBackgroundColor": "#111111FF", - "floatingBackgroundColor": "#222", + "floatingBackgroundColor": "#222222FF", - "sidebarBgColor": "#161515", - "sidebarVersionTextColor": "#BBB", - "sidebarCursorStartColor": "#cb9800", + "sidebarBgColor": "#161515FF", + "sidebarVersionTextColor": "#BBBBBBFF", + "sidebarCursorStartColor": "#cb9800FF", "sidebarCursorEndColor": "#EBB51400", - "sidebarLineTextHovered": "#8B6900", + "sidebarLineTextHovered": "#8B6900FF", - "okColor": "#74fbee", - "noColor": "#d13990", + "okColor": "#74fbeeFF", + "noColor": "#d13990FF", - "arrowUpColor": "#F85757", - "arrowDownColor": "#845FEF", + "senderColorStart": "#F85757FF", + "receiverColorStart": "#845FEFFF", + "arrowUpColor": "#F85757FF", + "arrowDownColor": "#845FEFFF", - "lineSeparatorColor": "#222" + "lineSeparatorColor": "#222222FF" } \ No newline at end of file diff --git a/assets/themes/Default - Dark/colors.json b/assets/themes/Default - Dark/colors.json index c30f8ee4e..544b99ec4 100644 --- a/assets/themes/Default - Dark/colors.json +++ b/assets/themes/Default - Dark/colors.json @@ -1,48 +1,50 @@ { - "accentColor": "#2C3D66", - "foregroundColor": "#ffffff", + "accentColor": "#2C3D66FF", + "foregroundColor": "#ffffffFF", "foregroundColor2": "#7A8EA1FF", "foregroundColor3": "#ABC0D3FF", - "backgroundColor": "#202337", - "secondBackgroundColor": "#24273D", - "backgroundColorDeep": "#171a2c", + "backgroundColor": "#202337FF", + "secondBackgroundColor": "#24273DFF", + "backgroundColorDeep": "#171a2cFF", - "buttonColorDisabled": "#28375A", - "buttonColorEnabled": "#293254", + "busyIndicatorColor": "#4986EAFF", + + "buttonColorDisabled": "#28375AFF", + "buttonColorEnabled": "#293254FF", "buttonColorHovered": "#4068B929", "buttonColorPressed": "#2932546C", - "buttonTextDisabledColor": "#444444", - "buttonTextEnabledColor": "#ffffff", - "buttonTextHoveredColor": "#ffffff", - "buttonTextPressedColor": "#ffffff", + "buttonTextDisabledColor": "#444444FF", + "buttonTextEnabledColor": "#ffffffFF", + "buttonTextHoveredColor": "#ffffffFF", + "buttonTextPressedColor": "#ffffffFF", "gradientButtonStartColor": "#4986EAAD", - "gradientButtonEndColor": "#5A68E6", + "gradientButtonEndColor": "#5A68E6FF", "gradientButtonDisabledStartColor": "#5A68E64D", "gradientButtonDisabledEndColor": "#4986EA34", "gradientButtonHoveredStartColor": "#4986EAAD", "gradientButtonHoveredEndColor": "#4986EAAD", - "gradientButtonPressedStartColor": "#4986EA", - "gradientButtonPressedEndColor": "#4986EA", - "gradientButtonTextEnabledColor": "#FFF", - "gradientButtonTextDisabledColor": "#FFF", - "gradientButtonTextHoveredColor": "#FFF", - "gradientButtonTextPressedColor": "#FFF", + "gradientButtonPressedStartColor": "#4986EAFF", + "gradientButtonPressedEndColor": "#4986EAFF", + "gradientButtonTextEnabledColor": "#FFFFFFFF", + "gradientButtonTextDisabledColor": "#FFFFFFFF", + "gradientButtonTextHoveredColor": "#FFFFFFFF", + "gradientButtonTextPressedColor": "#FFFFFFFF", - "checkBoxGradientStartColor": "#8892EB", - "checkBoxGradientEndColor": "#9DD4F3", + "checkBoxGradientStartColor": "#8892EBFF", + "checkBoxGradientEndColor": "#9DD4F3FF", - "switchGradientStartColor": "#1D80B0", - "switchGradientEndColor": "#5B69E6", - "switchGradientStartColor2": "#FFF", - "switchGradientEndColor2": "#FFF", + "switchGradientStartColor": "#1D80B0FF", + "switchGradientEndColor": "#5B69E6FF", + "switchGradientStartColor2": "#FFFFFFFF", + "switchGradientEndColor2": "#FFFFFFFF", "comboBoxBackgroundColor": "#303757FF", "comboBoxArrowsColor": "#FFFFFFFF", - "comboBoxDropdownItemHighlightedColor": "#4663E8", + "comboBoxDropdownItemHighlightedColor": "#4663E8FF", - "modalPageCounterGradientStartColor": "#1D80B0", - "modalPageCounterGradientEndColor": "#5B69E6", + "modalPageCounterGradientStartColor": "#1D80B0FF", + "modalPageCounterGradientEndColor": "#5B69E6FF", "notifPopupBackgroundColor": "#24273DFF", "notifPopupTextColor": "#FFFFFFFF", @@ -54,38 +56,38 @@ "scrollBarIndicatorColor": "#8790B2FF", "scrollBarBackgroundColor": "#94A3B11F", - "tabSelectedColor": "#2C3D66", + "tabSelectedColor": "#2C3D66FF", - "textDisabledColor": "#444444", - "textSelectionColor": "#14bca6", - "textPlaceholderColor": "#91A8E8", - "textSelectedColor": "#0e1021", + "textDisabledColor": "#444444FF", + "textSelectionColor": "#4986EAFF", + "textPlaceholderColor": "#91A8E8FF", + "textSelectedColor": "#0e1021FF", "textFieldBackgroundColor": "#313555FF", "textFieldActiveBackgroundColor": "#313555CC", "textFieldPrefixColor": "#8790B2FF", "textFieldSuffixColor": "#456078FF#", - "chartTradingLineBackgroundColor": "#24283d", - "chartTradingLineColor": "#74fbee", + "chartTradingLineBackgroundColor": "#24283dFF", + "chartTradingLineColor": "#74fbeeFF", - "innerBackgroundColor": "#1F263F", + "innerBackgroundColor": "#1F263FFF", - "floatingBackgroundColor": "#24273D", + "floatingBackgroundColor": "#24273DFF", "rangeSliderBackgroundColor": "#5A68E6FF", "rangeSliderDistanceColor": "#4986EA3B", "rangeSliderIndicatorBackgroundStartColor": "#5A68E6FF", "rangeSliderIndicatorBackgroundEndColor": "#4986EAFF", - "loginWalletIconColorStart": "#5A68E6FF", - "loginWalletIconColorEnd": "#4986EAAD", + "userIconColorStart": "#5A68E6FF", + "userIconColorEnd": "#4986EAAD", - "sidebarBgColor": "#202337", - "sidebarVersionTextColor": "#2F5688", - "sidebarCursorStartColor": "#31B1F0", + "sidebarBgColor": "#202337FF", + "sidebarVersionTextColor": "#2F5688FF", + "sidebarCursorStartColor": "#31B1F0FF", "sidebarCursorEndColor": "#5B69E600", - "sidebarLineTextHovered": "#2C87B9", + "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", "tradeBuyModeSelectorBackgroundColorStart": "#6A4DE3FF", @@ -94,11 +96,16 @@ "tradeSellModeSelectorBackgroundColorEnd": "#E216A9FF", "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", - "okColor": "#00C058", - "noColor": "#E52167", + "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], + + "okColor": "#00C058FF", + "noColor": "#E52167FF", + + "senderColorStart": "#F85757FF", + "receiverColorStart": "#845FEFFF", - "arrowUpColor": "#F85757", - "arrowDownColor": "#845FEF", + "arrowUpColor": "#F85757FF", + "arrowDownColor": "#845FEFFF", - "lineSeparatorColor": "#262941" + "lineSeparatorColor": "#262941FF" } diff --git a/assets/themes/Default - Light/colors.json b/assets/themes/Default - Light/colors.json index 6fd087005..de78473e0 100644 --- a/assets/themes/Default - Light/colors.json +++ b/assets/themes/Default - Light/colors.json @@ -1,45 +1,47 @@ { - "accentColor": "#F0F2FF", - "foregroundColor": "#456078", - "backgroundColor": "#FCFCFC", - "backgroundColorDeep": "#FCFCFC", - - "buttonColorDisabled": "#D8E3F8", - "buttonColorEnabled": "#F0F6FF", - "buttonColorHovered": "#D7E7FF", - "buttonColorPressed": "#B8D2F9", - "buttonTextDisabledColor": "#D1D4DC", - "buttonTextEnabledColor": "#456078", - "buttonTextHoveredColor": "#2F5678", - "buttonTextPressedColor": "#3A5B78", - - "gradientButtonStartColor": "#5A68E6", + "accentColor": "#F0F2FFFF", + "foregroundColor": "#456078FF", + "backgroundColor": "#FCFCFCFF", + "backgroundColorDeep": "#FCFCFCFF", + + "busyIndicatorColor": "#5A68E6FF", + + "buttonColorDisabled": "#D8E3F8FF", + "buttonColorEnabled": "#F0F6FFFF", + "buttonColorHovered": "#D7E7FFFF", + "buttonColorPressed": "#B8D2F9FF", + "buttonTextDisabledColor": "#D1D4DCFF", + "buttonTextEnabledColor": "#456078FF", + "buttonTextHoveredColor": "#2F5678FF", + "buttonTextPressedColor": "#3A5B78FF", + + "gradientButtonStartColor": "#5A68E6FF", "gradientButtonEndColor": "#4986EAAB", - "gradientButtonDisabledStartColor": "#CDD0F6", - "gradientButtonDisabledEndColor": "#DAE5F9", - "gradientButtonHoveredStartColor": "#5A68E6", - "gradientButtonHoveredEndColor": "#5A68E6", - "gradientButtonPressedStartColor": "#6A4DE3", - "gradientButtonPressedEndColor": "#6A4DE3", - "gradientButtonTextEnabledColor": "#FFF", - "gradientButtonTextDisabledColor": "#FFF", - "gradientButtonTextHoveredColor": "#FFF", - "gradientButtonTextPressedColor": "#FFF", - - "checkBoxGradientStartColor": "#8892EB", - "checkBoxGradientEndColor": "#9DD4F3", - - "switchGradientStartColor": "#8892EB", - "switchGradientEndColor": "#9DD4F3", - "switchGradientStartColor2": "#FFF", - "switchGradientEndColor2": "#FFF", + "gradientButtonDisabledStartColor": "#CDD0F6FF", + "gradientButtonDisabledEndColor": "#DAE5F9FF", + "gradientButtonHoveredStartColor": "#5A68E6FF", + "gradientButtonHoveredEndColor": "#5A68E6FF", + "gradientButtonPressedStartColor": "#6A4DE3FF", + "gradientButtonPressedEndColor": "#6A4DE3FF", + "gradientButtonTextEnabledColor": "#FFFFFFFF", + "gradientButtonTextDisabledColor": "#FFFFFFFF", + "gradientButtonTextHoveredColor": "#FFFFFFFF", + "gradientButtonTextPressedColor": "#FFFFFFFF", + + "checkBoxGradientStartColor": "#8892EBFF", + "checkBoxGradientEndColor": "#9DD4F3FF", + + "switchGradientStartColor": "#8892EBFF", + "switchGradientEndColor": "#9DD4F3FF", + "switchGradientStartColor2": "#FFFFFFFF", + "switchGradientEndColor2": "#FFFFFFFF", "comboBoxBackgroundColor": "#FFFFFFFF", "comboBoxArrowsColor": "#456078FF", - "comboBoxDropdownItemHighlightedColor": "#456078FF", + "comboBoxDropdownItemHighlightedColor": "#CDE1FFFF", - "modalPageCounterGradientStartColor": "#9DD4F3", - "modalPageCounterGradientEndColor": "#9DD4F3", + "modalPageCounterGradientStartColor": "#9DD4F3FF", + "modalPageCounterGradientEndColor": "#9DD4F3FF", "notifPopupBackgroundColor": "#EDF4FFFF", "notifPopupTextColor": "#456078FF", @@ -51,38 +53,38 @@ "scrollBarIndicatorColor": "#DBE0E4FF", "scrollBarBackgroundColor": "#93A3B1FF", - "tabSelectedColor": "#DCE8FD", + "tabSelectedColor": "#DCE8FDFF", - "textDisabledColor": "#C5CFD8", - "textSelectionColor": "#14bca6", - "textPlaceholderColor": "#91A8E8", - "textSelectedColor": "#f9f9fb", + "textDisabledColor": "#C5CFD8FF", + "textSelectionColor": "#5A68E6FF", + "textPlaceholderColor": "#91A8E8FF", + "textSelectedColor": "#F9F9FBFF", "textFieldBackgroundColor": "#F3F5F6FF", "textFieldActiveBackgroundColor": "#EDF4FFFF", "textFieldPrefixColor": "#45607894", "textFieldSuffixColor": "#456078FF", - "chartTradingLineBackgroundColor": "#C5F2EF", - "chartTradingLineColor": "#53EBD7", + "chartTradingLineBackgroundColor": "#C5F2EFFF", + "chartTradingLineColor": "#53EBD7FF", - "innerBackgroundColor": "#edf4ff", + "innerBackgroundColor": "#DDE6F2FF", - "floatingBackgroundColor": "#edf4ff", + "floatingBackgroundColor": "#EDF4FFFF", "rangeSliderBackgroundColor": "#5A68E6FF", "rangeSliderDistanceColor": "#4986EA3B", "rangeSliderIndicatorBackgroundStartColor": "#5A68E6FF", "rangeSliderIndicatorBackgroundEndColor": "#4986EAFF", - "loginWalletIconColorStart": "#5A68E6FF", - "loginWalletIconColorEnd": "#4986EAAD", + "userIconColorStart": "#5A68E6FF", + "userIconColorEnd": "#4986EAAD", - "sidebarBgColor": "#FCFCFC", - "sidebarVersionTextColor": "#456078", - "sidebarCursorStartColor": "#5A68E6", + "sidebarBgColor": "#FCFCFCFF", + "sidebarVersionTextColor": "#456078FF", + "sidebarCursorStartColor": "#5A68E6FF", "sidebarCursorEndColor": "#2CB9F000", - "sidebarLineTextHovered": "#2C87B9", + "sidebarLineTextHovered": "#2C87B9FF", "sidebarLineTextSelected": "#FFFFFFFF", "tradeBuyModeSelectorBackgroundColorStart": "#6A4DE3FF", @@ -91,11 +93,16 @@ "tradeSellModeSelectorBackgroundColorEnd": "#E216A9FF", "tradeMarketModeSelectorNotSelectedBackgroundColor": "#89B6FF21", - "okColor": "#00C058", - "noColor": "#E52167", + "addressBookTagColors": ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], - "arrowUpColor": "#F85757", - "arrowDownColor": "#845FEF", + "okColor": "#00C058FF", + "noColor": "#E52167FF", - "lineSeparatorColor": "#CDD3DC" + "senderColorStart": "#F85757", + "receiverColorStart": "#845FEF", + + "arrowUpColor": "#F85757FF", + "arrowDownColor": "#845FEFFF", + + "lineSeparatorColor": "#CDD3DCFF" } diff --git a/atomic_defi_design/Dex/.gitignore b/atomic_defi_design/Dex/.gitignore new file mode 100644 index 000000000..90d1f28b1 --- /dev/null +++ b/atomic_defi_design/Dex/.gitignore @@ -0,0 +1 @@ +qml.qrc \ No newline at end of file diff --git a/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml new file mode 100644 index 000000000..dc7357ecb --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/AddAddressForm.qml @@ -0,0 +1,305 @@ +import QtQuick 2.12 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex +import "../Components" as Dex +import "../Constants" as Dex + +Dex.Rectangle +{ + id: root + + property var contactModel + + // Edition mode variables + property bool editionMode: false + property string addressType + property string addressKey + property string addressValue + + property var availableNetworkStandards: ["QRC-20", "ERC-20", "BEP-20", "Smart Chain"] + + // Return the asset type that will be used in the backend to validate the address + function getTypeForAddressChecker(addressType) + { + switch (addressType) + { + case "QRC-20": return "QTUM" + case "BEP-20": return "BNB" + case "ERC-20": return "ETH" + case "Smart Chain": return "KMD" + case "SLP": return "BCH" + } + + let coinInfo = Dex.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(addressType); + if (coinInfo.has_parent_fees_ticker) + return coinInfo.fees_ticker; + return addressType + } + + // Tells if the given address type represents a network standard address (e.g. BEP-20) + function isNetworkStandard(addressType) + { + switch (addressType) + { + case "QRC-20": return true + case "BEP-20": return true + case "ERC-20": return true + case "Smart Chain": return true + case "SLP": return true + } + return false + } + + signal cancel() + signal addressCreated() + + width: 500 + height: column.height + 26 + radius: 10 + + onVisibleChanged: + { + if (!visible) + { + // Resets data when address is added/edited. + addressKeyField.text = "" + addressValueField.text = "" + invalidAddressValueLabel.text = "" + editionMode = false + addressType = "" + addressKey = "" + addressValue = "" + } + else if (editionMode) + { + // Feeds form with the data we are currently editing. + + if (!isNetworkStandard(addressType)) + { + useStandardsCheckBox.checked = false + let addressTypeIndex = + Dex.API.app.portfolio_pg.global_cfg_mdl.all_proxy.match( + Dex.API.app.portfolio_pg.global_cfg_mdl.all_proxy.index(0, 0), + Qt.UserRole + 1, addressType, 1, Qt.MatchExactly)[0] + addressTypeComboBox.currentIndex = addressTypeIndex.row + } + else + { + useStandardsCheckBox.checked = true + let addressTypeIndex = availableNetworkStandards.indexOf(addressType) + addressTypeComboBox.currentIndex = addressTypeIndex + } + addressKeyField.text = addressKey + addressValueField.text = addressValue + } + } + + ColumnLayout + { + id: column + anchors.centerIn: parent + spacing: 17 + + RowLayout + { + Layout.preferredWidth: 458 + Layout.preferredHeight: 38 + + AddressTypeSelector + { + id: addressTypeComboBox + Layout.fillWidth: true + Layout.fillHeight: true + showAssetStandards: useStandardsCheckBox.checked + } + + Dex.DefaultCheckBox + { + id: useStandardsCheckBox + Layout.preferredWidth: 150 + Layout.fillHeight: true + Layout.leftMargin: 4 + boxWidth: 22 + boxHeight: 22 + text: qsTr("Use standard network address") + font: Dex.DexTypo.caption + } + } + + Dex.TextField + { + id: addressKeyField + Layout.preferredWidth: 458 + Layout.preferredHeight: 38 + placeholderText: qsTr("Label") + + Dex.ToolTip + { + id: addressKeyAlreadyExistsToolTip + contentItem: Dex.Text { text_value: qsTr("This key already exists.") } + } + } + + Dex.TextField + { + id: addressValueField + Layout.preferredWidth: 458 + Layout.preferredHeight: 38 + placeholderText: qsTr("Address") + } + + Dex.Text + { + id: invalidAddressValueLabel + Layout.fillWidth: true + visible: text !== "" + color: Dex.CurrentTheme.noColor + wrapMode: Dex.Text.Wrap + horizontalAlignment: Text.AlignHCenter + } + + RowLayout + { + Layout.topMargin: 10 + Layout.fillWidth: true + + Dex.Button + { + Layout.preferredWidth: 116 + Layout.preferredHeight: 38 + radius: 18 + text: qsTr("Cancel") + onClicked: cancel() + } + + Item { Layout.fillWidth: true } + + Dex.GradientButton + { + property bool isConvertMode: Dex.API.app.wallet_pg.validate_address_data.convertible ?? false + + enabled: addressKeyField.length > 0 && addressValueField.length > 0 && !Dex.API.app.wallet_pg.validate_address_busy + Layout.preferredWidth: 116 + Layout.preferredHeight: 38 + radius: 18 + text: isConvertMode ? qsTr("Convert") : editionMode ? qsTr("Edit") : qsTr("Add") + onClicked: + { + let addressType = getTypeForAddressChecker(addressTypeComboBox.currentText) + + if (!Dex.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(addressType).is_enabled) + { + enableAssetModal.assetTicker = addressType + enableAssetModal.open() + } + else if (isConvertMode) + Dex.API.app.wallet_pg.convert_address(addressValueField.text, addressType, Dex.API.app.wallet_pg.validate_address_data.to_address_format); + else + Dex.API.app.wallet_pg.validate_address(addressValueField.text, addressType) + } + } + } + } + + Connections + { + target: Dex.API.app.wallet_pg + + function onConvertAddressBusyChanged() + { + if (Dex.API.app.wallet_pg.convert_address_busy) // Currently converting entered address + { + return + } + + addressValueField.text = Dex.API.app.wallet_pg.converted_address + Dex.API.app.wallet_pg.validate_address_data = {} + invalidAddressValueLabel.text = "" + } + + function onValidateAddressBusyChanged() + { + if (Dex.API.app.wallet_pg.validate_address_busy) // Currently checking entered address + { + return + } + + if (!Dex.API.app.wallet_pg.validate_address_data.is_valid) // Entered address is invalid. + { + invalidAddressValueLabel.text = Dex.API.app.wallet_pg.validate_address_data.reason + return + } + + if (editionMode) // Removes old address entry before if we are in edition mode. + { + contactModel.removeAddressEntry(addressType, addressKey); + } + + var createAddressResult = contactModel.addAddressEntry(addressTypeComboBox.currentText, addressKeyField.text, addressValueField.text); + if (createAddressResult === true) + { + addressCreated() + Dex.API.app.addressbookPg.model.proxy.searchExp = "x" + Dex.API.app.addressbookPg.model.proxy.searchExp = "" + } + else + { + addressKeyAlreadyExistsToolTip.visible = true + } + } + } + + Dex.ModalLoader + { + id: enableAssetModal + + property string assetTicker + + onLoaded: item.assetTicker = assetTicker + + sourceComponent: Dex.MultipageModal + { + property string assetTicker + Dex.MultipageModalContent + { + Layout.fillWidth: true + titleText: qsTr("Enable " + assetTicker) + + Dex.Text + { + Layout.fillWidth: true + text: qsTr("You need to enable %1 before adding this kind of address.").arg(assetTicker) + } + + footer: + [ + // Enable button + Dex.Button + { + text: qsTr("Enable") + + onClicked: + { + Dex.API.app.enable_coin(assetTicker) + close() + } + }, + + // Cancel button + Dex.Button + { + Layout.rightMargin: 5 + text: qsTr("Cancel") + + onClicked: close() + } + ] + } + } + } +} diff --git a/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml b/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml new file mode 100644 index 000000000..0e53be333 --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/AddTagPopup.qml @@ -0,0 +1,60 @@ +// Qt Imports +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +// Project Imports +import "../Constants" +import Dex.Components 1.0 as Dex + +Dex.Popup +{ + id: root + + width: 250 + height: 55 + + onClosed: tagNameField.text = "" + + contentItem: Row + { + spacing: 4 + + Dex.TextField + { + id: tagNameField + width: parent.width * 0.6 + height: parent.height + placeholderText: qsTr("Tag name") + + Dex.ToolTip + { + id: tagAlreadyTakenToolTip + visible: false + timeout: 3000 + contentItem: Dex.Text + { + text_value: qsTr("Contact already has this tag.") + } + } + } + + Dex.Button + { + width: parent.width * 0.36 + height: parent.height + text: qsTr("+ ADD") + onClicked: + { + if (tagNameField.text.length === 0) + { + return + } + + var addTagResult = contactModel.addCategory(tagNameField.text) + + if (addTagResult === false) tagAlreadyTakenToolTip.visible = true + else root.close() + } + } + } +} diff --git a/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml new file mode 100644 index 000000000..b8ad13881 --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/AddressTypeSelector.qml @@ -0,0 +1,102 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex +import "../Components" as Dex +import "../Constants" as Dex + +Dex.ComboBoxWithSearchBar +{ + id: control + + property bool showAssetStandards: false + property var assetStandards: availableNetworkStandards + + function resetList() + { + if (showAssetStandards) currentIndex = 0; else { resetSearch(); currentIndex = 1 } + setContentItem(currentIndex) + } + + function resetSearch() + { + Dex.API.app.portfolio_pg.global_cfg_mdl.all_proxy.setFilterFixedString(""); + searchBar.textField.text = ""; + } + + function setContentItem(index) + { + if (showAssetStandards) + { + _contentRow.ticker = assetStandards[index] + _contentRow.name = assetStandards[index] + _contentRow.type = assetStandards[index] + } + else + { + _contentRow.ticker = model.data(model.index(index, 0), Qt.UserRole + 1) + _contentRow.name = model.data(model.index(index, 0), Qt.UserRole + 3) + _contentRow.type = model.data(model.index(index, 0), Qt.UserRole + 9) + } + } + + popupForceMaxHeight: true + popupMaxHeight: 220 + + model: showAssetStandards ? assetStandards : Dex.API.app.portfolio_pg.global_cfg_mdl.all_proxy + textRole: showAssetStandards ? "" : "ticker" + + searchBar.visible: !showAssetStandards + searchBar.searchModel: model + + delegate: ItemDelegate + { + id: _delegate + + visible: model.ticker !== "All" + + width: control.width + height: visible ? 40 : 0 + highlighted: control.highlightedIndex === index + + contentItem: AssetRow + { + ticker: showAssetStandards ? modelData : model.ticker + name: showAssetStandards ? modelData : model.name + type: showAssetStandards ? modelData : model.type + } + + background: Dex.Rectangle + { + anchors.fill: _delegate + color: _delegate.highlighted ? Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor : Dex.CurrentTheme.comboBoxBackgroundColor + } + } + + contentItem: Item + { + AssetRow + { + id: _contentRow + + anchors.left: parent.left + anchors.leftMargin: 13 + anchors.verticalCenter: parent.verticalCenter + } + } + + onCurrentIndexChanged: + { + if (!showAssetStandards && currentIndex === 0 && searchBar.textField.text == "") currentIndex = 1 + setContentItem(currentIndex) + } + onActivated: setContentItem(index) + onShowAssetStandardsChanged: resetList() + onVisibleChanged: if (!visible) resetList() + Component.onDestruction: resetList() + Component.onCompleted: resetList() +} diff --git a/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml b/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml new file mode 100644 index 000000000..c7416f172 --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/AssetFromStandardSelector.qml @@ -0,0 +1,108 @@ +import QtQuick 2.12 +import QtQuick.Layouts 1.3 + +import Dex.Components 1.0 as Dex +import Dex.Themes 1.0 as Dex +import "../Constants" as Dex + +Dex.MultipageModal +{ + id: root + + property string standard + + signal selected(var assetTicker) + + width: 560 + + Component.onDestruction: + { + Dex.API.app.portfolio_pg.global_cfg_mdl.all_qrc20_proxy.setFilterFixedString("") + Dex.API.app.portfolio_pg.global_cfg_mdl.all_erc20_proxy.setFilterFixedString("") + Dex.API.app.portfolio_pg.global_cfg_mdl.all_bep20_proxy.setFilterFixedString("") + Dex.API.app.portfolio_pg.global_cfg_mdl.all_smartchains_proxy.setFilterFixedString("") + } + + Dex.MultipageModalContent + { + titleText: qsTr("Choose a valid ") + standard + qsTr(" asset") + contentSpacing: 8 + + Dex.SearchField + { + Layout.fillWidth: true + Layout.preferredHeight: 30 + textField.placeholderText: qsTr("Search an asset") + textField.onTextChanged: + { + switch (standard) + { + case "QRC-20": Dex.API.app.portfolio_pg.global_cfg_mdl.all_qrc20_proxy.setFilterFixedString(textField.text) + break; + case "ERC-20": Dex.API.app.portfolio_pg.global_cfg_mdl.all_erc20_proxy.setFilterFixedString(textField.text) + break; + case "BEP-20": Dex.API.app.portfolio_pg.global_cfg_mdl.all_bep20_proxy.setFilterFixedString(textField.text) + break; + default: Dex.API.app.portfolio_pg.global_cfg_mdl.all_smartchains_proxy.setFilterFixedString(textField.text) + break; + } + } + } + + Dex.ListView + { + id: list + + Layout.fillWidth: true + Layout.maximumHeight: 500 + + model: standard == "QRC-20" ? Dex.API.app.portfolio_pg.global_cfg_mdl.all_qrc20_proxy : + standard == "ERC-20" ? Dex.API.app.portfolio_pg.global_cfg_mdl.all_erc20_proxy : + standard == "BEP-20" ? Dex.API.app.portfolio_pg.global_cfg_mdl.all_bep20_proxy : + Dex.API.app.portfolio_pg.global_cfg_mdl.all_smartchains_proxy + + spacing: 8 + + delegate: Item + { + width: list.width + height: 40 + + Dex.Rectangle + { + anchors.fill: parent + color: mouseArea.containsMouse ? Dex.CurrentTheme.buttonColorHovered : "transparent" + } + + AssetRow + { + id: assetRow + height: parent.height + ticker: model.ticker + type: model.type + name: model.name + } + + Dex.Text + { + visible: !model.enabled + anchors.left: assetRow.right + anchors.leftMargin: 6 + anchors.verticalCenter: parent.verticalCenter + text: qsTr("Disabled") + color: Dex.CurrentTheme.noColor + font: Dex.DexTypo.caption + } + + Dex.MouseArea + { + id: mouseArea + + anchors.fill: parent + hoverEnabled: true + onClicked: root.selected(model.ticker) + } + } + } + } +} diff --git a/atomic_defi_design/Dex/Addressbook/AssetRow.qml b/atomic_defi_design/Dex/Addressbook/AssetRow.qml new file mode 100644 index 000000000..12a4ee31d --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/AssetRow.qml @@ -0,0 +1,35 @@ +import QtQuick 2.12 + +import Dex.Components 1.0 as Dex +import "../Constants" as Dex + +Row +{ + property string ticker + property string name + property string type + + spacing: 10 + + Dex.Image + { + width: 25 + height: 25 + anchors.verticalCenter: parent.verticalCenter + source: Dex.General.coinIcon(ticker) + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: name + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: type + color: Dex.Style.getCoinTypeColor(type) + font: Dex.DexTypo.overLine + } +} diff --git a/atomic_defi_design/Dex/Addressbook/EditContactModal.qml b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml new file mode 100644 index 000000000..1800e7d7f --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/EditContactModal.qml @@ -0,0 +1,312 @@ +import QtQuick 2.12 +import QtQuick.Layouts 1.15 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex +import "../Constants" as Dex + +Dex.MultipageModal +{ + id: root + + property var contactModel: { "name": "", "categories": [] } + + Dex.MultipageModalContent + { + titleText: qsTr("Edit contact") + titleTopMargin: 0 + titleAlignment: Qt.AlignHCenter + contentSpacing: 24 + + Dex.TextFieldWithTitle + { + id: contactNameInput + title: qsTr("Contact name") + field.placeholderText: qsTr("Enter a contact name") + field.text: contactModel.name + field.onTextChanged: if (field.text.length > 30) field.text = field.text.substring(0, 30) + } + + Column + { + id: addressList + property bool contactAddAddressMode: false + + Layout.fillWidth: true + spacing: 18 + + Dex.Text + { + text: qsTr("Address list") + } + + Dex.ListView + { + visible: !addressList.contactAddAddressMode + model: contactModel.proxyFilter + spacing: 10 + height: contentHeight > 190 ? 190 : contentHeight + width: parent.width + + delegate: Dex.MouseArea + { + id: addressRowMouseArea + height: 82 + width: addressList.width - 10 + hoverEnabled: true + + Dex.Rectangle + { + visible: parent.containsMouse + anchors.fill: parent + radius: 17 + color: Dex.CurrentTheme.accentColor + } + + Item + { + anchors.fill: parent + anchors.verticalCenter: parent.verticalCenter + anchors.margins: 10 + + ColumnLayout + { + property var coinInfo: Dex.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(address_type) + + Row + { + spacing: 10 + Dex.Image + { + anchors.verticalCenter: parent.verticalCenter + width: 25 + height: 25 + source: Dex.General.coinIcon(address_type.toLowerCase()) + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: address_type + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: parent.parent.coinInfo.type + color: Dex.Style.getCoinTypeColor(parent.parent.coinInfo.type) + font: Dex.DexTypo.overLine + } + + Dex.Button + { + visible: addressRowMouseArea.containsMouse + anchors.verticalCenter: parent.verticalCenter + width: 9 + height: 9 + color: "transparent" + iconSource: Qaterial.Icons.close + onClicked: contactModel.removeAddressEntry(address_type, address_key) + } + } + + Dex.Text + { + Layout.leftMargin: 36 + Layout.maximumWidth: 330 + text: address_key + font: Dex.DexTypo.caption + elide: Text.ElideRight + } + + Dex.Text + { + Layout.leftMargin: 36 + Layout.maximumWidth: 330 + text: address_value + font: Dex.DexTypo.caption + elide: Text.ElideRight + + Dex.Button + { + width: 18 + height: 20 + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.right + anchors.leftMargin: 3 + color: "transparent" + iconSource: Qaterial.Icons.contentCopy + + onClicked: + { + Dex.API.qt_utilities.copy_text_to_clipboard(address_value) + app.notifyCopy(qsTr("Address Book"), qsTr("address copied to clipboard")) + } + } + } + } + + Row + { + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + spacing: 20 + + Dex.ClickableText + { + anchors.verticalCenter: parent.verticalCenter + visible: addressRowMouseArea.containsMouse + text: qsTr("Edit") + font.underline: true + onClicked: + { + addAddressForm.editionMode = true + addAddressForm.addressType = address_type + addAddressForm.addressKey = address_key + addAddressForm.addressValue = address_value + addressList.contactAddAddressMode = true + } + } + + Dex.Button + { + anchors.verticalCenter: parent.verticalCenter + width: 37 + height: 37 + radius: 18.5 + visible: addressRowMouseArea.containsMouse + iconSource: Qaterial.Icons.sendOutline + onClicked: + { + trySend(address_value, address_type) + } + } + } + } + } + } + + Dex.Button + { + visible: !addressList.contactAddAddressMode + anchors.horizontalCenter: parent.horizontalCenter + text: qsTr("+ Add") + width: 211 + height: 38 + radius: 18 + onClicked: addressList.contactAddAddressMode = true + } + + AddAddressForm + { + id: addAddressForm + visible: addressList.contactAddAddressMode + contactModel: root.contactModel + onCancel: addressList.contactAddAddressMode = false + onAddressCreated: addressList.contactAddAddressMode = false + } + } + + Column + { + Layout.fillWidth: true + spacing: 12 + + Dex.Text + { + text: qsTr("Tags") + } + + Dex.ListView + { + width: parent.width + model: contactModel.categories + orientation: Qt.Horizontal + spacing: 6 + delegate: Dex.MouseArea + { + width: tagBg.width + tagRemoveBut.width + 2 + height: tagBg.height + hoverEnabled: true + + Dex.Rectangle + { + id: tagBg + anchors.verticalCenter: parent.verticalCenter + width: tagLabel.width + 12 + height: 21 + radius: 20 + color: Dex.CurrentTheme.accentColor + + Dex.Text + { + id: tagLabel + anchors.centerIn: parent + text: modelData + } + } + + Dex.Button + { + id: tagRemoveBut + visible: parent.containsMouse + anchors.left: tagBg.right + anchors.leftMargin: 2 + anchors.verticalCenter: parent.verticalCenter + width: 18 + height: 18 + color: "transparent" + iconSource: Qaterial.Icons.close + onClicked: contactModel.removeCategory(modelData) + } + } + } + + Dex.Button + { + iconSource: Qaterial.Icons.plus + text: qsTr("Add tag") + font: Dex.DexTypo.body2 + color: "transparent" + onClicked: addTagPopup.open() + + AddTagPopup + { + y: -10 + x: parent.width + 10 + id: addTagPopup + } + } + } + + footer: + [ + Dex.Button + { + Layout.preferredWidth: 199 + Layout.preferredHeight: 48 + radius: 18 + text: qsTr("Close") + onClicked: root.close() + }, + + Item { Layout.fillWidth: true }, + + Dex.GradientButton + { + Layout.preferredWidth: 199 + Layout.preferredHeight: 48 + radius: 18 + text: qsTr("Confirm") + onClicked: + { + contactModel.name = contactNameInput.field.text + contactModel.save() + root.close() + } + } + ] + } +} diff --git a/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml b/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml new file mode 100644 index 000000000..63317676f --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/EnableAssetModal.qml @@ -0,0 +1,46 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +import "../Constants" as Dex +import Dex.Components 1.0 as Dex + +Dex.MultipageModal +{ + property string assetTicker + + Dex.MultipageModalContent + { + Layout.fillWidth: true + titleText: qsTr("Enable " + assetTicker) + + Dex.Text + { + Layout.fillWidth: true + text: qsTr("The selected address belongs to a disabled asset, you need to enabled it before sending.") + } + + footer: + [ + // Enable button + Dex.Button + { + text: qsTr("Enable") + + onClicked: + { + Dex.API.app.enable_coin(assetTicker) + close() + } + }, + + // Cancel button + Dex.Button + { + Layout.rightMargin: 5 + text: qsTr("Cancel") + + onClicked: close() + } + ] + } +} diff --git a/atomic_defi_design/Dex/Addressbook/Main.qml b/atomic_defi_design/Dex/Addressbook/Main.qml new file mode 100644 index 000000000..2b40183e7 --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/Main.qml @@ -0,0 +1,417 @@ +// Qt Imports +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +import Qaterial 1.0 as Qaterial + +// Project Imports +import Dex.Components 1.0 as Dex +import "../Components" as Dex +import Dex.Themes 1.0 as Dex +import "../Constants" as Dex +import "../Wallet" as Wallet + +Item +{ + function trySend(address, type) + { + // Checks if the selected address type represents an asset standard instead of an asset. + if (Dex.API.app.portfolio_pg.global_cfg_mdl.is_coin_type(type)) + { + assetFromStandardSelectorLoader.address = address + assetFromStandardSelectorLoader.standard = type + assetFromStandardSelectorLoader.open() + } + + // Checks if the asset is currently enabled. + else if (!Dex.API.app.portfolio_pg.is_coin_enabled(type)) + { + enabledAssetModalLoader.assetTicker = type; + enabledAssetModalLoader.open() + } + + // If the coin is enabled, opens the send modal. + else + { + if (assetFromStandardSelectorLoader.visible) + assetFromStandardSelectorLoader.close() + Dex.API.app.wallet_pg.ticker = type + sendModalLoader.address = address + sendModalLoader.open() + } + } + + ColumnLayout + { + anchors.fill: parent + anchors.margins: 30 + + spacing: 32 + + Row + { + Layout.fillWidth: true + + Column + { + width: parent.width * 0.5 + spacing: 34 + + Dex.Text + { + text: qsTr("Address Book") + font: Dex.DexTypo.head5 + } + + Dex.SearchField + { + id: searchbar + + width: 206 + height: 42 + textField.forceFocus: true + textField.placeholderText: qsTr("Search contact") + + textField.onTextChanged: Dex.API.app.addressbookPg.model.proxy.searchExp = textField.text + Component.onDestruction: Dex.API.app.addressbookPg.model.proxy.searchExp = "" + } + } + + Row + { + width: parent.width * 0.5 + layoutDirection: Qt.RightToLeft + + Dex.GradientButton + { + width: 213 + height: 48.51 + radius: 18 + text: qsTr("+ NEW CONTACT") + + onClicked: newContactPopup.open() + + NewContactPopup + { + id: newContactPopup + } + } + } + } + + // Contact table header + Row + { + Layout.fillWidth: true + Layout.topMargin: 30 + + Dex.Text + { + width: parent.width * 0.3 + text: qsTr("Name") + font: Dex.DexTypo.head8 + leftPadding: 18 + } + + Dex.Text + { + text: qsTr("Tags") + font: Dex.DexTypo.head8 + leftPadding: 18 + } + } + + // Contact table content + Dex.DefaultListView + { + id: contactTable + + function _getCurrentTagColorId() + { + if (typeof _getCurrentTagColorId.counter == 'undefined') + _getCurrentTagColorId.counter = 0 + if (_getCurrentTagColorId.counter >= Dex.CurrentTheme.addressBookTagColors.length) + _getCurrentTagColorId.counter = 0 + + return _getCurrentTagColorId.counter++ + } + + Layout.fillWidth: true + Layout.fillHeight: true + + model: Dex.API.app.addressbookPg.model.proxy + + delegate: Dex.Expandable + { + id: expandable + + padding: 10 + color: index % 2 === 0 ? Dex.CurrentTheme.innerBackgroundColor : Dex.CurrentTheme.backgroundColor + width: contactTable.width + + header: Item + { + height: 56 + width: expandable.width + + Dex.DefaultMouseArea + { + anchors.fill: parent + onClicked: expandable.isExpanded = !expandable.isExpanded + } + + Row + { + width: parent.width * 0.3 + anchors.verticalCenter: parent.verticalCenter + spacing: 12 + + Dex.UserIcon + { + anchors.verticalCenter: parent.verticalCenter + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: modelData.name + } + + Dex.Arrow + { + anchors.verticalCenter: parent.verticalCenter + up: expandable.isExpanded + } + } + + Flow + { + anchors.verticalCenter: parent.verticalCenter + x: parent.width * 0.3 + width: parent.width * 0.57 + spacing: 17 + + Repeater + { + model: modelData.categories.slice(0, 6) + + delegate: Dex.Rectangle + { + property int _currentColorIndex: contactTable._getCurrentTagColorId() + + width: tagLabel.width > 73 ? 83 : tagLabel.width + 10 + height: 21 + radius: 20 + color: Dex.CurrentTheme.addressBookTagColors[_currentColorIndex] + + Dex.MouseArea + { + anchors.fill: parent + onClicked: searchbar.textField.text = modelData + } + + Dex.Text + { + id: tagLabel + width: 70 + anchors.centerIn: parent + text: modelData + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + } + } + } + + Row + { + spacing: 45 + width: 160 + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 2 + Dex.ClickableText + { + anchors.verticalCenter: parent.verticalCenter + font.underline: true + font.pixelSize: 15 + text: qsTr("Edit") + onClicked: + { + editContactLoader.contactModel = modelData + editContactLoader.open() + } + } + Dex.ClickableText + { + anchors.verticalCenter: parent.verticalCenter + font.underline: true + font.pixelSize: 15 + text: qsTr("Delete") + onClicked: removeContactPopup.open() + + RemoveContactPopup + { + id: removeContactPopup + + contactName: modelData.name + } + } + } + } + + content: Item + { + height: noAddressLabel.visible ? 50 : addressList.height + width: contactTable.width + + Dex.ListView + { + id: addressList + + visible: addressList.model.rowCount() > 0 + x: 30 + model: modelData.proxyFilter + width: parent.width - 40 + implicitHeight: contentHeight > 240 ? 240 : contentHeight + spacing: 18 + + delegate: Item + { + property var coinInfo: Dex.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(address_type) + + width: addressList.width + height: 30 + + Row + { + anchors.verticalCenter: parent.verticalCenter + spacing: 10 + Dex.Image + { + anchors.verticalCenter: parent.verticalCenter + width: 25 + height: 25 + source: Dex.General.coinIcon(address_type.toLowerCase()) + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: address_type + } + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: parent.parent.coinInfo.type + color: Dex.Style.getCoinTypeColor(parent.parent.coinInfo.type) + font: Dex.DexTypo.overLine + } + } + + Row + { + x: parent.width * 0.25 + spacing: 3 + + Dex.Text + { + anchors.verticalCenter: parent.verticalCenter + text: "%1 : %2".arg(address_key).arg(address_value) + } + + + Dex.Button + { + width: 25 + height: 25 + iconSource: Qaterial.Icons.contentCopy + color: "transparent" + onClicked: + { + Dex.API.qt_utilities.copy_text_to_clipboard(address_value) + app.notifyCopy(qsTr("Address Book"), qsTr("address copied to clipboard")) + } + } + + Dex.Button + { + width: 25 + height: 25 + iconSource: Qaterial.Icons.sendOutline + color: "transparent" + onClicked: trySend(address_value, address_type) + } + } + } + } + + Dex.Text + { + id: noAddressLabel + height: 20 + x: 30 + y: 15 + visible: addressList.model.rowCount() === 0 + text: qsTr("This contact does not have any registered address.") + } + } + } + } + } + + Dex.ModalLoader + { + id: editContactLoader + + property var contactModel + + onLoaded: item.contactModel = contactModel + + sourceComponent: EditContactModal { } + } + + Dex.ModalLoader + { + id: sendModalLoader + + property string address + + onLoaded: item.address_field.text = address + + sourceComponent: Wallet.SendModal + { + address_field.enabled: false + } + } + + Dex.ModalLoader + { + id: assetFromStandardSelectorLoader + + property string standard + property string address + + onLoaded: item.standard = standard + + sourceComponent: AssetFromStandardSelector + { + onSelected: + { + trySend(assetFromStandardSelectorLoader.address, assetTicker) + } + } + } + + Dex.ModalLoader + { + id: enabledAssetModalLoader + + property string assetTicker + + onLoaded: item.assetTicker = assetTicker + + sourceComponent: EnableAssetModal { } + } +} diff --git a/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml new file mode 100644 index 000000000..c0fc890e0 --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/NewContactPopup.qml @@ -0,0 +1,68 @@ +// Qt Imports +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +// Project Imports +import "../Constants" +import Dex.Components 1.0 as Dex + +Dex.Popup +{ + id: root + + width: 250 + height: 55 + + onOpened: nameField.forceActiveFocus() + onClosed: nameField.text = "" + + contentItem: Row + { + spacing: 4 + + Dex.TextField + { + id: nameField + width: parent.width * 0.6 + height: parent.height + placeholderText: qsTr("Contact name") + + Dex.ToolTip + { + id: nameAlreadyTakenToolTip + visible: false + timeout: 3000 + contentItem: Dex.Text + { + text_value: qsTr("This contact name already exists.") + } + } + } + + Dex.Button + { + width: parent.width * 0.36 + height: parent.height + text: qsTr("+ ADD") + onClicked: + { + if (nameField.text.length === 0) + { + return + } + + var createContactResult = API.app.addressbookPg.model.addContact(nameField.text) + + if (createContactResult === false) nameAlreadyTakenToolTip.visible = true + else + { + root.close() + + let contactModelIndex = API.app.addressbookPg.model.index(API.app.addressbookPg.model.rowCount() - 1, 0) + editContactLoader.contactModel = API.app.addressbookPg.model.data(contactModelIndex, Qt.UserRole + 1) + editContactLoader.open() + } + } + } + } +} diff --git a/atomic_defi_design/Dex/Addressbook/RemoveContactPopup.qml b/atomic_defi_design/Dex/Addressbook/RemoveContactPopup.qml new file mode 100644 index 000000000..419c5c64b --- /dev/null +++ b/atomic_defi_design/Dex/Addressbook/RemoveContactPopup.qml @@ -0,0 +1,51 @@ +// Qt Imports +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +// Project Imports +import "../Constants" as Dex +import Dex.Components 1.0 as Dex + +Dex.Popup +{ + id: root + + property string contactName + + width: 140 + height: 120 + + contentItem: ColumnLayout + { + spacing: 8 + width: root.width + + Dex.Text + { + Layout.fillWidth: true + text: qsTr("Do you want to remove this contact ?") + } + + Row + { + Layout.fillWidth: true + spacing: 6 + Dex.ClickableText + { + text: qsTr("Yes") + font.underline: true + onClicked: + { + Dex.API.app.addressbookPg.model.removeContact(contactName) + close() + } + } + Dex.ClickableText + { + text: qsTr("No") + font.underline: true + onClicked: close() + } + } + } +} diff --git a/atomic_defi_design/Dex/App.qml b/atomic_defi_design/Dex/App.qml index 44999a5cd..0aac79294 100644 --- a/atomic_defi_design/Dex/App.qml +++ b/atomic_defi_design/Dex/App.qml @@ -23,29 +23,25 @@ DexRectangle // This enumeration represents every possible visual state (commonly named "screen") of the application enum ScreenType { - Startup, // Wallets selection, login, create wallet, import wallet, etc. - Dashboard // After logged to a wallet. + Startup, // Wallets selection, login, create wallet, import wallet, etc. + Dashboard // After logged to a wallet. } property string currentWalletName: API.app.wallet_mgr.wallet_default_name property bool debug: debug_bar - property - var notification_modal: notifications_modal - property - var notifications_list: _currentPage === App.ScreenType.Dashboard ? loader.item.notifications_list : [] + property var notification_modal: notifications_modal + property var notifications_list: _currentPage === App.ScreenType.Dashboard ? loader.item.notifications_list : [] property bool segwit_on: false - property - var _currentPage: API.app.wallet_mgr.log_status() ? App.ScreenType.Dashboard : App.ScreenType.Startup - property - var _availablePages: [_startup, dashboard] + property var _currentPage: API.app.wallet_mgr.log_status() ? App.ScreenType.Dashboard : App.ScreenType.Startup + property var _availablePages: [_startup, dashboard] + property alias pageLoader: loader property alias globalGradient: globalGradient // Preload Chart signal pairChanged(string base, string rel) - function onDisconnect() { app.notifications_list = []; @@ -146,7 +142,7 @@ DexRectangle // Update Modal NewUpdateModal { - id: new_update_modal + id: newUpdateModal visible: false } @@ -422,15 +418,10 @@ DexRectangle return dialog } - function showText(data) - { - return showDialog(data); - } - function getText(data) { data['getText'] = true; - return showText(data); + return showDialog(data); } Component.onCompleted: diff --git a/atomic_defi_design/Dex/Components/Arrow.qml b/atomic_defi_design/Dex/Components/Arrow.qml index 7e2df67f7..827d13e55 100644 --- a/atomic_defi_design/Dex/Components/Arrow.qml +++ b/atomic_defi_design/Dex/Components/Arrow.qml @@ -1,8 +1,9 @@ +// Qt Imports import QtQuick 2.15 -import "../Constants" -import "../Components" -import Dex.Themes 1.0 as Dex +// Project Imports +import "../Constants" //> General.image_path +import Dex.Themes 1.0 as Dex //> CurrentTheme Item { property bool up: true @@ -27,7 +28,7 @@ Item { anchors.fill: img source: img - color: up ? Dex.CurrentTheme.arrowUpColor : Dex.CurrentTheme.arrowDownColor + color: Dex.CurrentTheme.foregroundColor } } diff --git a/atomic_defi_design/Dex/Components/CheckEye.qml b/atomic_defi_design/Dex/Components/CheckEye.qml new file mode 100644 index 000000000..e3bb0bca6 --- /dev/null +++ b/atomic_defi_design/Dex/Components/CheckEye.qml @@ -0,0 +1,55 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.12 + +import Qaterial 1.0 as Qaterial + +import App 1.0 +import Dex.Themes 1.0 as Dex + +Item +{ + id: control + + property alias text: _label.text + property alias iconSource: _icon.source + property var target + + width: parent.width + height: row.height + + RowLayout + { + id: row + width: parent.width - 20 + spacing: 10 + + Qaterial.ColorIcon + { + id: _icon + Layout.alignment: Qt.AlignVCenter + source: target.visible ? Qaterial.Icons.eyeOutline : Qaterial.Icons.eyeOffOutline + color: target.visible ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.buttonTextDisabledColor + iconSize: 17 + } + + DefaultText + { + id: _label + font.pixelSize: 15 + text: "" + color: target.visible ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.buttonTextDisabledColor + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + } + } + + DefaultMouseArea + { + anchors.fill: parent + onClicked: + { + if (target.visible) target.visible = false + else target.visible = true + } + } +} diff --git a/atomic_defi_design/Dex/Components/ClickableText.qml b/atomic_defi_design/Dex/Components/ClickableText.qml index 8f1af0699..7c4c6e86b 100644 --- a/atomic_defi_design/Dex/Components/ClickableText.qml +++ b/atomic_defi_design/Dex/Components/ClickableText.qml @@ -4,7 +4,7 @@ import Dex.Themes 1.0 as Dex Text { - id: root + id: control property alias hoverEnabled: _mouseArea.hoverEnabled property alias containsMouse: _mouseArea.containsMouse @@ -26,6 +26,6 @@ Text anchors.fill: parent hoverEnabled: true cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor - onClicked: root.clicked(); + onClicked: control.clicked() } } diff --git a/atomic_defi_design/Dex/Components/ColumnHeader.qml b/atomic_defi_design/Dex/Components/ColumnHeader.qml index 75330b9c3..0fdcc5abd 100644 --- a/atomic_defi_design/Dex/Components/ColumnHeader.qml +++ b/atomic_defi_design/Dex/Components/ColumnHeader.qml @@ -1,66 +1,82 @@ import QtQuick 2.15 +import QtQuick.Layouts 1.12 import "../Constants" import App 1.0 -Item { +Item +{ property int sort_type + property alias header_font: title.font property alias text: title.text_value - - property bool icon_at_left - - width: text.length * title.font.pixelSize - height: title.height + property alias h_align: title.horizontalAlignment // Click area - - DefaultText { - id: title - anchors.left: icon_at_left ? parent.left : undefined - anchors.right: icon_at_left ? undefined : parent.right - - //color: Qt.lighter(DexTheme.accentColor, click_area.containsMouse ? Style.hoverLightMultiplier : 1.0) - } - - - // Arrow icon - DefaultImage { - id: arrow_icon - - source: General.image_path + "arrow-" + (ascending ? "down" : "up") + ".svg" - - width: title.font.pixelSize * 0.5 - - anchors.left: icon_at_left ? title.right : undefined - anchors.leftMargin: icon_at_left ? 10 : undefined - anchors.right: icon_at_left ? undefined : title.left - anchors.rightMargin: icon_at_left ? undefined : 10 - anchors.verticalCenter: title.verticalCenter - - visible: false - } - - DefaultColorOverlay { - visible: current_sort === sort_type - anchors.fill: arrow_icon - source: arrow_icon - color: title.color - } - DefaultMouseArea { + DexMouseArea + { id: click_area anchors.fill: parent hoverEnabled: true cursorShape: Qt.PointingHandCursor - onClicked: { - if(current_sort === sort_type) { + + onClicked: + { + if(current_sort === sort_type) + { ascending = !ascending } - else { + else + { current_sort = sort_type ascending = false } - applyCurrentSort() } + + RowLayout + { + width: parent.width + height: parent.height + + Item { + visible: title.horizontalAlignment != Text.AlignLeft + Layout.fillWidth: true + Layout.fillHeight: true + } + + DexLabel + { + id: title + verticalAlignment: Text.AlignVCenter + //color: Qt.lighter(DexTheme.accentColor, click_area.containsMouse ? Style.hoverLightMultiplier : 1.0) + + // Arrow icon + DefaultImage + { + id: arrow_icon + anchors.left: parent.right + anchors.leftMargin: 3 + anchors.verticalCenter: parent.verticalCenter + source: General.image_path + "arrow-" + (ascending ? "down" : "up") + ".svg" + width: title.font.pixelSize * 0.5 + visible: current_sort === sort_type + + DefaultColorOverlay + { + visible: current_sort === sort_type + anchors.fill: parent + source: arrow_icon + color: title.color + } + } + } + + + Item { + visible: title.horizontalAlignment != Text.AlignRight + Layout.fillWidth: true + Layout.fillHeight: true + } + } } } diff --git a/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml new file mode 100644 index 000000000..b2594dff5 --- /dev/null +++ b/atomic_defi_design/Dex/Components/ComboBoxWithSearchBar.qml @@ -0,0 +1,139 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import "../Constants" + +ComboBox +{ + id: control + + property int radius: 20 + property int popupWidth: width + property int popupMaxHeight: 450 + property bool popupForceMaxHeight: false + property color backgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color popupBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + property alias searchBar: _searchBar + property string searchBarPlaceholderText: qsTr("Search") + + + background: Rectangle + { + id: bg + implicitWidth: control.width + implicitHeight: control.height + color: control.backgroundColor + radius: control.radius + } + + popup: Popup + { + id: popup + width: control.popupWidth + height: popupForceMaxHeight ? control.popupMaxHeight : Math.min(contentItem.implicitHeight, control.popupMaxHeight) + leftPadding: 0 + rightPadding: 0 + topPadding: 16 + bottomPadding: 16 + + contentItem: ColumnLayout + { + width: popup.width + height: popup.height + + SearchField + { + id: _searchBar + textField.placeholderText: searchBarPlaceholderText + Layout.fillWidth: true + Layout.leftMargin: 5 + Layout.rightMargin: 5 + Layout.preferredHeight: 40 + searchModel: control.delegateModel + textField.forceFocus: true + } + + DefaultListView + { + id: _list + Layout.fillHeight: true + model: control.popup.visible ? control.delegateModel : null + currentIndex: control.highlightedIndex + ScrollBar.vertical: ScrollBar + { + visible: _list.contentHeight > control.dropDownMaxHeight + anchors.right: _list.right + anchors.rightMargin: 2 + width: 7 + background: DefaultRectangle + { + radius: 12 + color: Dex.CurrentTheme.scrollBarBackgroundColor + } + contentItem: DefaultRectangle + { + radius: 12 + color: Dex.CurrentTheme.scrollBarIndicatorColor + } + } + } + } + + background: Rectangle + { + radius: control.radius + color: control.popupBackgroundColor + } + } + + delegate: ItemDelegate + { + id: delegate + + width: control.width + highlighted: control.highlightedIndex === index + + contentItem: DefaultText + { + width: control.width + font: DexTypo.subtitle2 + text_value: control.textRole === "" ? model.modelData : !model.modelData ? model[textRole] : model.modelData[textRole] + elide: Text.ElideRight + } + + background: Rectangle + { + anchors.fill: delegate + color: delegate.highlighted ? Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor : Dex.CurrentTheme.comboBoxBackgroundColor + } + } + + indicator: Column + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 8 + spacing: -12 + + Qaterial.Icon + { + width: 20 + height: 20 + color: Dex.CurrentTheme.comboBoxArrowsColor + icon: Qaterial.Icons.chevronUp + } + + Qaterial.Icon + { + width: 20 + height: 20 + color: Dex.CurrentTheme.comboBoxArrowsColor + icon: Qaterial.Icons.chevronDown + } + } +} diff --git a/atomic_defi_design/Dex/Components/ComboBoxWithTitle.qml b/atomic_defi_design/Dex/Components/ComboBoxWithTitle.qml index f40920dbb..5623f39e5 100644 --- a/atomic_defi_design/Dex/Components/ComboBoxWithTitle.qml +++ b/atomic_defi_design/Dex/Components/ComboBoxWithTitle.qml @@ -14,7 +14,7 @@ ColumnLayout TitleText { id: title_text } - DefaultComboBox + DexComboBox { id: input_field Layout.preferredWidth: 300 diff --git a/atomic_defi_design/Dex/Components/ComponentWithTitle.qml b/atomic_defi_design/Dex/Components/ComponentWithTitle.qml index 8465e8967..c36298acd 100644 --- a/atomic_defi_design/Dex/Components/ComponentWithTitle.qml +++ b/atomic_defi_design/Dex/Components/ComponentWithTitle.qml @@ -8,6 +8,7 @@ import Dex.Themes 1.0 as Dex ColumnLayout { property alias title: title.text + property alias title_font: title.font property bool expandable: false property bool expanded: false readonly property bool show_content: !expandable || expanded diff --git a/atomic_defi_design/Dex/Components/DatePicker.qml b/atomic_defi_design/Dex/Components/DatePicker.qml new file mode 100644 index 000000000..c0ce19742 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DatePicker.qml @@ -0,0 +1,80 @@ +import QtQuick 2.12 +import QtQuick.Layouts 1.12 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import "../Constants" + +DefaultMouseArea +{ + id: control + + property alias titleText: title.text + property alias minimumDate: calendar.minimumDate + property alias maximumDate: calendar.maximumDate + property alias selectedDate: calendar.selectedDate + + signal accepted() + + width: 100 + height: column.height + + onClicked: modal.open() + + Column + { + id: column + width: parent.width + + DefaultText + { + id: title + text: qsTr("Date") + font: DexTypo.overLine + color: Dex.CurrentTheme.foregroundColor2 + } + + RowLayout + { + width: parent.width + + DefaultText + { + id: label + text: selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd") + font: DexTypo.caption + } + Item { Layout.fillWidth: true } + DefaultImage + { + Layout.preferredWidth: 25 + Layout.preferredHeight: 25 + source: Qaterial.Icons.calendarBlank + + DefaultColorOverlay + { + source: parent + anchors.fill: parent + color: Dex.CurrentTheme.foregroundColor2 + } + } + } + } + + DefaultModal + { + id: modal + width: 300 + height: 450 + verticalPadding: 0 + horizontalPadding: 0 + + DefaultCalendar + { + id: calendar + anchors.fill: parent + onSelectedDateChanged: {modal.close(); control.accepted()} + } + } +} diff --git a/atomic_defi_design/Dex/Components/DefaultBusyIndicator.qml b/atomic_defi_design/Dex/Components/DefaultBusyIndicator.qml index 4aa72cb41..73992fc6d 100644 --- a/atomic_defi_design/Dex/Components/DefaultBusyIndicator.qml +++ b/atomic_defi_design/Dex/Components/DefaultBusyIndicator.qml @@ -4,14 +4,4 @@ import QtQuick.Controls.Universal 2.15 import "../Constants" import App 1.0 -BusyIndicator { - id: control - - Universal.theme: Style.dark_theme ? Universal.Dark : Universal.Light - Universal.accent: DexTheme.colorBusyIndicator - Universal.foreground: Style.colorQtThemeForeground - Universal.background: Style.colorQtThemeBackground - - implicitWidth: 48 - implicitHeight: 48 -} +DexBusyIndicator {} diff --git a/atomic_defi_design/Dex/Components/DefaultCalendar.qml b/atomic_defi_design/Dex/Components/DefaultCalendar.qml new file mode 100644 index 000000000..c366cf1c8 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DefaultCalendar.qml @@ -0,0 +1,136 @@ +import QtQuick 2.0 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex + +Calendar +{ + width: 300 + height: 450 + style: CalendarStyle + { + gridColor: "transparent" + gridVisible: false + + background: DefaultRectangle + { + color: Dex.CurrentTheme.floatingBackgroundColor + radius: 18 + } + + navigationBar: DefaultRectangle + { + height: 50 + color: Dex.CurrentTheme.floatingBackgroundColor + radius: 18 + + DefaultButton + { + id: previousYear + width: previousMonth.width + height: width + anchors.left: parent.left + anchors.leftMargin: 5 + anchors.verticalCenter: parent.verticalCenter + iconSource: Qaterial.Icons.arrowLeft + onClicked: control.showPreviousYear() + } + + DefaultButton + { + id: previousMonth + width: parent.height - 14 + height: width + anchors.left: previousYear.right + anchors.leftMargin: 2 + anchors.verticalCenter: parent.verticalCenter + iconSource: Qaterial.Icons.arrowLeft + onClicked: control.showPreviousMonth() + } + + DefaultText + { + id: dateText + text: styleData.title + elide: Text.ElideRight + horizontalAlignment: Text.AlignHCenter + anchors.verticalCenter: parent.verticalCenter + anchors.left: previousMonth.right + anchors.leftMargin: 2 + anchors.right: nextMonth.left + anchors.rightMargin: 2 + } + + DefaultButton + { + id: nextYear + width: nextMonth.width + height: width + anchors.right: parent.right + anchors.rightMargin: 5 + anchors.verticalCenter: parent.verticalCenter + iconSource: Qaterial.Icons.arrowRight + onClicked: control.showNextYear() + } + + DefaultButton + { + id: nextMonth + width: parent.height - 14 + height: width + anchors.verticalCenter: parent.verticalCenter + anchors.right: nextYear.left + anchors.rightMargin: 2 + iconSource: Qaterial.Icons.arrowRight + onClicked: control.showNextMonth() + } + } + + dayOfWeekDelegate: DefaultRectangle + { + color: "transparent" + implicitHeight: 20 + Label + { + text: control.locale.dayName(styleData.dayOfWeek, control.dayOfWeekFormat) + anchors.centerIn: parent + color: Dex.CurrentTheme.foregroundColor + } + } + + dayDelegate: DefaultRectangle + { + anchors.fill: parent + color: styleData.date !== undefined && styleData.selected ? selectedDateColor : styleData.hovered ? hoveredDateColor : "transparent" + + readonly property bool addExtraMargin: control.frameVisible && styleData.selected + readonly property color sameMonthDateTextColor: Dex.CurrentTheme.foregroundColor + readonly property color hoveredDateColor: Dex.CurrentTheme.buttonColorHovered + readonly property color selectedDateColor: Dex.CurrentTheme.buttonColorPressed + readonly property color selectedDateTextColor: Dex.CurrentTheme.foregroundColor + readonly property color differentMonthDateTextColor: Dex.CurrentTheme.foregroundColor3 + readonly property color invalidDateColor: Dex.CurrentTheme.textDisabledColor + DefaultText + { + id: dayDelegateText + text: styleData.date.getDate() + anchors.centerIn: parent + horizontalAlignment: Text.AlignRight + font.pixelSize: Math.min(parent.height/3, parent.width/3) + color: { + var theColor = invalidDateColor; + if (styleData.valid) { + // Date is within the valid range. + theColor = styleData.visibleMonth ? sameMonthDateTextColor : differentMonthDateTextColor; + if (styleData.selected) + theColor = selectedDateTextColor; + } + theColor; + } + } + } + } +} diff --git a/atomic_defi_design/Dex/Components/DefaultCopyIcon.qml b/atomic_defi_design/Dex/Components/DefaultCopyIcon.qml new file mode 100644 index 000000000..293ff4b09 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DefaultCopyIcon.qml @@ -0,0 +1,30 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import Qaterial 1.0 as Qaterial +import App 1.0 + +Qaterial.Icon +{ + property int iconSize: 14 + property string copyText: "" + property string notifyTitle: "" + property string notifyMsg: qsTr("copied to clipboard") + + Layout.alignment: Qt.AlignVCenter + + size: iconSize + icon: Qaterial.Icons.contentCopy + color: copyArea.containsMouse ? Style.colorText2 : DexTheme.foregroundColor + + DexMouseArea + { + id: copyArea + anchors.fill: parent + hoverEnabled: true + onClicked: + { + Qaterial.Clipboard.text = control.text + app.notifyCopy(notifyTitle, notifyMsg) + } + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DefaultFlickable.qml b/atomic_defi_design/Dex/Components/DefaultFlickable.qml index 4fb99fe9f..c4b68109a 100644 --- a/atomic_defi_design/Dex/Components/DefaultFlickable.qml +++ b/atomic_defi_design/Dex/Components/DefaultFlickable.qml @@ -1,7 +1,8 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 -Flickable { +Flickable +{ id: root property bool scrollbar_visible: contentHeight > height diff --git a/atomic_defi_design/Dex/Components/DefaultImage.qml b/atomic_defi_design/Dex/Components/DefaultImage.qml index cd38dadb5..09d4a0cb3 100644 --- a/atomic_defi_design/Dex/Components/DefaultImage.qml +++ b/atomic_defi_design/Dex/Components/DefaultImage.qml @@ -1,6 +1,3 @@ import QtQuick 2.15 -Image { - mipmap: true - fillMode: Image.PreserveAspectFit -} +DexImage {} diff --git a/atomic_defi_design/Dex/Components/DefaultLinkIcon.qml b/atomic_defi_design/Dex/Components/DefaultLinkIcon.qml new file mode 100644 index 000000000..845777d96 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DefaultLinkIcon.qml @@ -0,0 +1,25 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import Qaterial 1.0 as Qaterial +import App 1.0 + + +Qaterial.Icon +{ + property int iconSize: 14 + property string linkURL: "" + + Layout.alignment: Qt.AlignVCenter + + size: iconSize + icon: Qaterial.Icons.linkVariant + color: linkArea.containsMouse ? Style.colorText2 : DexTheme.foregroundColor + + DexMouseArea + { + id: linkArea + anchors.fill: parent + hoverEnabled: true + onClicked: Qt.openUrlExternally(linkURL) + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DefaultListView.qml b/atomic_defi_design/Dex/Components/DefaultListView.qml index d723a2b19..107ae3076 100644 --- a/atomic_defi_design/Dex/Components/DefaultListView.qml +++ b/atomic_defi_design/Dex/Components/DefaultListView.qml @@ -4,32 +4,5 @@ import QtQuick.Controls 2.15 import "../Constants" import App 1.0 -ListView -{ - id: root - - property bool scrollbar_visible: contentItem.childrenRect.height > height - readonly property double scrollbar_margin: scrollbar_visible ? 8 : 0 - property bool visibleBackground: true - - boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: DefaultScrollBar - { - visibleBackground: root.visibleBackground - } - - implicitWidth: contentItem.childrenRect.width - implicitHeight: contentItem.childrenRect.height - - clip: true - - // Opacity animation - opacity: root.count === 0 ? 0 : enabled ? 1 : 0.2 - Behavior on opacity - { - SmoothedAnimation - { - duration: Style.animationDuration * 0.5;velocity: -1 - } - } -} +DexListView +{} diff --git a/atomic_defi_design/Dex/Components/DefaultModal.qml b/atomic_defi_design/Dex/Components/DefaultModal.qml index 1302c9e15..8aa3f955b 100644 --- a/atomic_defi_design/Dex/Components/DefaultModal.qml +++ b/atomic_defi_design/Dex/Components/DefaultModal.qml @@ -22,7 +22,7 @@ Popup background: DefaultRectangle { radius: root.radius; color: Dex.CurrentTheme.floatingBackgroundColor } - Overlay.modal: Rectangle { color: "#AA000000" } + Overlay.modal: DefaultRectangle { color: "#AA000000" } // Fade in animation onVisibleChanged: diff --git a/atomic_defi_design/Dex/Components/DefaultMouseArea.qml b/atomic_defi_design/Dex/Components/DefaultMouseArea.qml index 62648b6f0..cac534d7c 100644 --- a/atomic_defi_design/Dex/Components/DefaultMouseArea.qml +++ b/atomic_defi_design/Dex/Components/DefaultMouseArea.qml @@ -1,6 +1,3 @@ import QtQuick 2.15 -MouseArea -{ - cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor -} +DexMouseArea {} diff --git a/atomic_defi_design/Dex/Components/DefaultPopup.qml b/atomic_defi_design/Dex/Components/DefaultPopup.qml new file mode 100644 index 000000000..e893062d0 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DefaultPopup.qml @@ -0,0 +1,15 @@ +// Qt Imports +import QtQuick 2.12 +import QtQuick.Controls 2.15 //> Popup + +Popup +{ + id: popup + + y: parent.height + x: (parent.width / 2) - (width / 2) + + closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnEscape + + background: FloatingBackground { } +} diff --git a/atomic_defi_design/Dex/Components/DefaultRangeSlider.qml b/atomic_defi_design/Dex/Components/DefaultRangeSlider.qml index 8cda0a336..390e62c0f 100644 --- a/atomic_defi_design/Dex/Components/DefaultRangeSlider.qml +++ b/atomic_defi_design/Dex/Components/DefaultRangeSlider.qml @@ -34,14 +34,14 @@ RangeSlider width: control.availableWidth height: implicitHeight radius: 2 - color: Dex.CurrentTheme.rangeSliderDistanceColor + color: control.rangeDistanceColor Rectangle { x: control.first.visualPosition * parent.width width: control.second.visualPosition * parent.width - x height: parent.height - color: Dex.CurrentTheme.rangeSliderBackgroundColor + color: control.rangeBackgroundColor radius: 2 } } diff --git a/atomic_defi_design/Dex/Components/DefaultRectangle.qml b/atomic_defi_design/Dex/Components/DefaultRectangle.qml index 07fee4bb2..7b2a0740b 100644 --- a/atomic_defi_design/Dex/Components/DefaultRectangle.qml +++ b/atomic_defi_design/Dex/Components/DefaultRectangle.qml @@ -1,10 +1,3 @@ import QtQuick 2.15 -import Dex.Themes 1.0 as Dex - -AnimatedRectangle -{ - id: rect - color: Dex.CurrentTheme.backgroundColor -} - +DexRectangle {} diff --git a/atomic_defi_design/Dex/Components/DefaultSlider.qml b/atomic_defi_design/Dex/Components/DefaultSlider.qml index e043ba8dd..e5a21c715 100644 --- a/atomic_defi_design/Dex/Components/DefaultSlider.qml +++ b/atomic_defi_design/Dex/Components/DefaultSlider.qml @@ -1,8 +1,48 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 + import "../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex + +Slider +{ + id: control + value: 0.5 + opacity: enabled ? 1 : .5 + + background: Rectangle + { + x: control.leftPadding + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 200 + implicitHeight: 4 + width: control.availableWidth + height: implicitHeight + radius: 2 + color: Dex.CurrentTheme.rangeSliderDistanceColor -DexSlider { + Rectangle + { + width: control.visualPosition * parent.width + height: parent.height + color: Dex.CurrentTheme.rangeSliderBackgroundColor + radius: 2 + } + } + handle: Rectangle + { + x: control.leftPadding + control.visualPosition * (control.availableWidth - width) + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 26 + implicitHeight: 26 + radius: 13 + gradient: Gradient + { + orientation: Gradient.Horizontal + GradientStop { position: 0.125; color: Dex.CurrentTheme.rangeSliderIndicatorBackgroundStartColor } + GradientStop { position: 0.925; color: Dex.CurrentTheme.rangeSliderIndicatorBackgroundEndColor } + } + } } diff --git a/atomic_defi_design/Dex/Components/DefaultSweetComboBox.qml b/atomic_defi_design/Dex/Components/DefaultSweetComboBox.qml index b09ae0409..b12596976 100644 --- a/atomic_defi_design/Dex/Components/DefaultSweetComboBox.qml +++ b/atomic_defi_design/Dex/Components/DefaultSweetComboBox.qml @@ -1,3 +1,4 @@ import QtQuick 2.15 -DexSweetComboBox { } \ No newline at end of file +DexSweetComboBox +{} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DefaultTextEdit.qml b/atomic_defi_design/Dex/Components/DefaultTextEdit.qml index 18b948d57..adfa32850 100644 --- a/atomic_defi_design/Dex/Components/DefaultTextEdit.qml +++ b/atomic_defi_design/Dex/Components/DefaultTextEdit.qml @@ -2,9 +2,14 @@ import QtQuick 2.15 import "../Constants" import App 1.0 -TextEdit { +TextEdit +{ + id: control property string text_value property bool privacy: false + property string linkURL: "" + property string onCopyNotificationTitle: "" + property string onCopyNotificationMsg: qsTr("copied to clipboard") font.family: Style.font_family font.pixelSize: Style.textSize @@ -21,9 +26,29 @@ TextEdit { onLinkActivated: Qt.openUrlExternally(link) - DefaultMouseArea { + DefaultMouseArea + { anchors.fill: parent cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor acceptedButtons: Qt.NoButton } -} + + DefaultCopyIcon + { + id: copy_icon + anchors.verticalCenter: parent.verticalCenter + copyText: control.text_value + notifyTitle: control.onCopyNotificationTitle + notifyMsg: control.onCopyNotificationMsg + x: control.implicitWidth + 6 + iconSize: 14 + } + + DefaultLinkIcon + { + anchors.verticalCenter: parent.verticalCenter + linkURL: control.linkURL + x: control.onCopyNotificationTitle == '' ? control.implicitWidth + 6 : control.implicitWidth + copy_icon.implicitWidth + 8 + iconSize: 14 + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexAppTextField.qml b/atomic_defi_design/Dex/Components/DexAppTextField.qml index 156e1136f..9fd086e98 100644 --- a/atomic_defi_design/Dex/Components/DexAppTextField.qml +++ b/atomic_defi_design/Dex/Components/DexAppTextField.qml @@ -15,9 +15,8 @@ Item property int leftWidth: -1 property int max_length: 180 - property alias value: input_field.text - property alias field: input_field + property alias value: input_field.text property alias background: _background property string leftText: "" @@ -25,6 +24,7 @@ Item property string placeholderText: "" property bool error: false + onErrorChanged: { if (error) @@ -33,6 +33,7 @@ Item _animate.start() } } + Timer { id: _animationTimer @@ -43,11 +44,13 @@ Item _background.x = 0 } } + Timer { id: _animate interval: 30 repeat: true + onTriggered: { if (_background.x == -3) @@ -65,6 +68,7 @@ Item { input_field.text = "" } + Rectangle { id: _background @@ -74,6 +78,7 @@ Item color: Dex.CurrentTheme.backgroundColor border.color: control.error ? Dex.CurrentTheme.noColor : input_field.focus ? Dex.CurrentTheme.accentColor : color border.width: input_field.focus ? 1 : 0 + Behavior on x { NumberAnimation @@ -89,11 +94,13 @@ Item anchors.leftMargin: 5 anchors.rightMargin: 5 spacing: 2 + Item { visible: leftText !== "" Layout.preferredWidth: leftWidth !== -1 ? leftWidth : _title_label.implicitWidth + 2 Layout.fillHeight: true + DexLabel { id: _title_label @@ -107,10 +114,12 @@ Item font.weight: Font.Medium } } + Item { Layout.fillWidth: true Layout.fillHeight: true + Rectangle { anchors.fill: parent @@ -118,9 +127,20 @@ Item anchors.bottomMargin: 1 radius: _background.radius color: background.color + DexTextField { id: input_field + anchors.fill: parent + horizontalAlignment: Qt.AlignLeft + + font.weight: Font.Medium + font.family: 'Lato' + font.pixelSize: 13 + echoMode: TextInput.Normal + background: Item + {} + onTextChanged: { if (text.length > control.max_length) @@ -129,15 +149,9 @@ Item } control.error = false } - horizontalAlignment: Qt.AlignLeft - echoMode: TextInput.Normal - background: Item - {} - font.weight: Font.Medium - font.family: 'Lato' - font.pixelSize: 13 - anchors.fill: parent + } + DexLabel { text: control.placeholderText @@ -153,11 +167,13 @@ Item } } } + Item { visible: rightText !== "" Layout.preferredWidth: _suffix_label.implicitWidth + 2 Layout.fillHeight: true + DexLabel { id: _suffix_label diff --git a/atomic_defi_design/Dex/Components/DexBusyIndicator.qml b/atomic_defi_design/Dex/Components/DexBusyIndicator.qml new file mode 100644 index 000000000..0390ddea6 --- /dev/null +++ b/atomic_defi_design/Dex/Components/DexBusyIndicator.qml @@ -0,0 +1,75 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.Universal 2.15 +import "../Constants" +import Dex.Themes 1.0 as Dex +import App 1.0 + +BusyIndicator +{ + id: control + property int indicatorSize: 64 + property int indicatorDotSize: 10 + + contentItem: Item + { + implicitWidth: indicatorSize + implicitHeight: indicatorSize + + Item + { + id: item + x: (parent.width - indicatorSize) / 2 + y: (parent.height - indicatorSize) / 2 + width: indicatorSize + height: indicatorSize + opacity: control.running ? 1 : 0 + + Behavior on opacity + { + OpacityAnimator + { + duration: 250 + } + } + + RotationAnimator + { + target: item + running: control.visible && control.running + from: 0 + to: 360 + loops: Animation.Infinite + duration: 1250 + } + + Repeater + { + id: repeater + model: 6 + + Rectangle + { + x: (item.width - width) / 2 + y: (item.height - height) / 2 + implicitWidth: indicatorDotSize + implicitHeight: indicatorDotSize + radius: indicatorDotSize / 2 + color: Dex.CurrentTheme.busyIndicatorColor + transform: [ + Translate + { + y: -Math.min(item.width, item.height) * 0.5 + indicatorDotSize / 2 + }, + Rotation + { + angle: index / repeater.count * 360 + origin.x: indicatorDotSize / 2 + origin.y: indicatorDotSize / 2 + } + ] + } + } + } + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexCheckBox.qml b/atomic_defi_design/Dex/Components/DexCheckBox.qml index e8332163b..c0bccae2b 100644 --- a/atomic_defi_design/Dex/Components/DexCheckBox.qml +++ b/atomic_defi_design/Dex/Components/DexCheckBox.qml @@ -1,5 +1,6 @@ //! Qt Imports. import QtQuick 2.15 +import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Universal 2.15 @@ -12,37 +13,21 @@ CheckBox id: control property alias label: _label - property color textColor: Dex.CurrentTheme.foregroundColor - property alias boxWidth: _indicator.implicitWidth property alias boxHeight: _indicator.implicitHeight - - Universal.accent: Dex.CurrentTheme.accentColor - Universal.foreground: Dex.CurrentTheme.foregroundColor - Universal.background: Dex.CurrentTheme.backgroundColor + property alias mouseArea: mouseArea + property color textColor: Dex.CurrentTheme.foregroundColor + property int labelWidth: 0 font.family: Style.font_family - contentItem: DefaultText - { - id: _label - text: control.text - font: control.font - color: control.textColor - horizontalAlignment: DexLabel.AlignLeft - verticalAlignment: DexLabel.AlignVCenter - leftPadding: control.indicator.width + control.spacing - wrapMode: Label.Wrap - } - - indicator: DexRectangle + indicator: DefaultRectangle { id: _indicator + anchors.verticalCenter: control.verticalCenter implicitWidth: 26 implicitHeight: 26 - x: control.leftPadding - control.spacing - anchors.verticalCenter: control.verticalCenter radius: 20 gradient: Gradient @@ -52,20 +37,43 @@ CheckBox GradientStop { position: 0.6; color: Dex.CurrentTheme.checkBoxGradientEndColor } } - DexRectangle + DefaultRectangle { visible: !control.checked anchors.centerIn: parent - implicitWidth: parent.width - 6 - implicitHeight: parent.height - 6 + width: parent.width - 6 + height: parent.height - 6 radius: parent.radius } opacity: enabled ? 1 : 0.5 } + contentItem: RowLayout + { + id: _content + Layout.alignment: Qt.AlignVCenter + Layout.preferredWidth: labelWidth + height: _label.height + spacing: 0 + + DefaultText + { + id: _label + text: control.text + font: control.font + color: control.textColor + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + verticalAlignment: Text.AlignVCenter + leftPadding: control.indicator.width + control.spacing + wrapMode: Label.Wrap + } + } + DefaultMouseArea { + id: mouseArea anchors.fill: parent acceptedButtons: Qt.NoButton } diff --git a/atomic_defi_design/Dex/Components/DexCheckEye.qml b/atomic_defi_design/Dex/Components/DexCheckEye.qml deleted file mode 100644 index bf9439911..000000000 --- a/atomic_defi_design/Dex/Components/DexCheckEye.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.15 -import Qaterial 1.0 as Qaterial -import QtQuick.Layouts 1.12 - -import App 1.0 -import Dex.Themes 1.0 as Dex - -Item -{ - id: control - - property bool checked: eval("target." + control.targetProperty) - property alias text: _label.text - property alias iconSource: _icon.source - property string targetProperty: "" - property var target - - width: parent.width - height: row.height - - RowLayout - { - id: row - width: parent.width - 20 - spacing: 10 - Qaterial.ColorIcon - { - id: _icon - Layout.alignment: Qt.AlignVCenter - source: control.checked ? Qaterial.Icons.eyeOutline : Qaterial.Icons.eyeOffOutline - color: control.checked ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.buttonTextDisabledColor - iconSize: 17 - DexMouseArea - { - anchors.fill: parent - onClicked: - { - if (control.checked) eval("target." + control.targetProperty + " = false") - else eval("target." + control.targetProperty + " = true") - } - } - } - DefaultText - { - id: _label - font.pixelSize: 15 - text: "" - color: control.checked ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.buttonTextDisabledColor - opacity: .5 - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter - } - } -} diff --git a/atomic_defi_design/Dex/Components/DexComboBox.qml b/atomic_defi_design/Dex/Components/DexComboBox.qml index fcc887926..b3d2171fe 100644 --- a/atomic_defi_design/Dex/Components/DexComboBox.qml +++ b/atomic_defi_design/Dex/Components/DexComboBox.qml @@ -2,7 +2,6 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQuick.Controls.impl 2.15 -import QtQuick.Controls.Universal 2.15 import Qaterial 1.0 as Qaterial @@ -14,51 +13,40 @@ ComboBox { id: control - property alias radius: bg_rect.radius - property color lineHoverColor: DexTheme.hoverColor - property color mainBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor - property int dropDownMaxHeight: 300 - property color dropdownBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor - property - var dropdownLineText: m => textRole === "" ? - m.modelData : - !m.modelData ? m[textRole] : m.modelData[textRole] + property alias radius: bg_rect.radius + property int dropDownMaxHeight: 450 + property color comboBoxBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color mainBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color popupBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor property string mainLineText: control.displayText - - readonly property bool disabled: !enabled + property var dropdownLineText: m => textRole === "" ? + m.modelData : + !m.modelData ? m[textRole] : m.modelData[textRole] font.family: Style.font_family - - Behavior on lineHoverColor - { - ColorAnimation - { - duration: Style.animationDuration - } - } - hoverEnabled: true // Main, selected text contentItem: Item { - anchors.fill: parent DefaultText { anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.leftMargin: 13 + width: parent.width - anchors.leftMargin font: DexTypo.subtitle2 text_value: control.mainLineText + elide: Text.ElideRight } } - // Main background background: FloatingBackground { id: bg_rect - implicitWidth: 120 + implicitWidth: 150 implicitHeight: 45 color: control.mainBackgroundColor radius: 20 @@ -68,7 +56,6 @@ ComboBox popup: Popup { width: control.width - height: _list.contentHeight > control.dropDownMaxHeight ? control.dropDownMaxHeight : _list.contentHeight leftPadding: 0 rightPadding: 0 topPadding: 16 @@ -78,14 +65,15 @@ ComboBox { id: _list model: control.popup.visible ? control.delegateModel : null + implicitHeight: contentHeight > control.dropDownMaxHeight ? control.dropDownMaxHeight : contentHeight currentIndex: control.highlightedIndex ScrollBar.vertical: ScrollBar { + visible: _list.contentHeight > control.dropDownMaxHeight anchors.right: _list.right anchors.rightMargin: 2 width: 7 - visible: true background: DefaultRectangle { radius: 12 @@ -108,21 +96,30 @@ ComboBox background: Rectangle { radius: control.radius - color: control.dropdownBackgroundColor + color: control.popupBackgroundColor } } // Each dropdown item delegate: ItemDelegate { - Universal.accent: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + id: delegate + width: control.width highlighted: control.highlightedIndex === index - contentItem: DexLabel + contentItem: DefaultText { + width: control.width font: DexTypo.subtitle2 text_value: control.dropdownLineText(model) + elide: Text.ElideRight + } + + background: Rectangle + { + anchors.fill: delegate + color: delegate.highlighted ? Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor : Dex.CurrentTheme.comboBoxBackgroundColor } } @@ -156,4 +153,4 @@ ComboBox anchors.fill: parent acceptedButtons: Qt.NoButton } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Components/DexImage.qml b/atomic_defi_design/Dex/Components/DexImage.qml index c0cbe489f..603f73445 100644 --- a/atomic_defi_design/Dex/Components/DexImage.qml +++ b/atomic_defi_design/Dex/Components/DexImage.qml @@ -1,6 +1,7 @@ import QtQuick 2.15 -Image { +Image +{ mipmap: true fillMode: Image.PreserveAspectFit } \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexLabel.qml b/atomic_defi_design/Dex/Components/DexLabel.qml index 1047c3fba..ef6694978 100644 --- a/atomic_defi_design/Dex/Components/DexLabel.qml +++ b/atomic_defi_design/Dex/Components/DexLabel.qml @@ -10,6 +10,7 @@ Text { property string text_value property bool privacy: false + property bool monospace: false Behavior on color { @@ -19,12 +20,7 @@ Text } } - font: Qt.font - ({ - pixelSize: 14, - letterSpacing: 0.25, - weight: Font.Normal - }) + font: monospace ? Dex.DexTypo.monoSmall : Dex.DexTypo.body2 color: enabled ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.textDisabledColor diff --git a/atomic_defi_design/Dex/Components/DexLanguage.qml b/atomic_defi_design/Dex/Components/DexLanguage.qml index 1d587cc67..7c85c5291 100644 --- a/atomic_defi_design/Dex/Components/DexLanguage.qml +++ b/atomic_defi_design/Dex/Components/DexLanguage.qml @@ -8,34 +8,52 @@ import QtGraphicalEffects 1.0 import "../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -RoundComboBox +DexComboBox { id: control model: API.app.settings_pg.get_available_langs() + + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + property color mainBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + + displayText: API.app.settings_pg.lang leftPadding: 5 + delegate: ItemDelegate { + id: combo_item width: control.width height: 30 highlighted: control.highlightedIndex === index - RowLayout + + contentItem: RowLayout { anchors.fill: parent spacing: -13 - DefaultImage + + DexImage { id: image Layout.preferredHeight: 14 source: General.image_path + "lang/" + modelData + ".png" } + DexLabel { text: modelData } } + + // Dropdown Item background + background: DexRectangle { + anchors.fill: combo_item + color: combo_item.highlighted ? highlightedBackgroundColor : mainBackgroundColor + } + onClicked: { if (modelData !== API.app.settings_pg.lang) @@ -44,8 +62,10 @@ RoundComboBox } } } + contentItem: Text { + anchors.fill: parent leftPadding: 0 rightPadding: control.indicator.width + control.spacing @@ -54,7 +74,8 @@ RoundComboBox color: control.pressed ? "#17a81a" : "#21be2b" verticalAlignment: Text.AlignVCenter elide: Text.ElideRight - DefaultImage + + DexImage { id: image height: 12 diff --git a/atomic_defi_design/Dex/Components/DexListView.qml b/atomic_defi_design/Dex/Components/DexListView.qml index 388156262..a65904698 100644 --- a/atomic_defi_design/Dex/Components/DexListView.qml +++ b/atomic_defi_design/Dex/Components/DexListView.qml @@ -2,34 +2,37 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import "../Constants" -as Constants import App 1.0 -ListView { +ListView +{ id: root - property bool scrollbar_visible: contentItem.childrenRect.height > height property alias position: scrollVert.position property alias scrollVert: scrollVert - readonly property double scrollbar_margin: scrollbar_visible ? 8 : 0 + property bool scrollbar_visible: contentItem.childrenRect.height > height property bool visibleBackground: false + readonly property double scrollbar_margin: scrollbar_visible ? 8 : 0 boundsBehavior: Flickable.StopAtBounds - ScrollBar.vertical: DexScrollBar { - id: scrollVert - visibleBackground: root.visibleBackground - } - - implicitWidth: contentItem.childrenRect.width implicitHeight: contentItem.childrenRect.height - + implicitWidth: contentItem.childrenRect.width clip: true - // Opacity animation opacity: root.count === 0 ? 0 : enabled ? 1 : 0.2 - Behavior on opacity { - SmoothedAnimation { - duration: Constants.Style.animationDuration * 0.5;velocity: -1 + + Behavior on opacity + { + SmoothedAnimation + { + duration: Style.animationDuration * 0.5 + velocity: -1 } } -} \ No newline at end of file + + ScrollBar.vertical: DefaultScrollBar + { + id: scrollVert + visibleBackground: root.visibleBackground + } +} diff --git a/atomic_defi_design/Dex/Components/DexModal.qml b/atomic_defi_design/Dex/Components/DexModal.qml index d5d178171..7b476bca3 100644 --- a/atomic_defi_design/Dex/Components/DexModal.qml +++ b/atomic_defi_design/Dex/Components/DexModal.qml @@ -2,6 +2,8 @@ import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 +import Dex.Themes 1.0 as Dex + Popup { id: control parent: Overlay.overlay @@ -13,18 +15,19 @@ Popup { property alias footer: _footer.contentItem modal: true padding: 0 - Overlay.modeless: DexRectangle { - color: DexTheme.dexBoxBackgroundColor + Overlay.modeless: DefaultRectangle { + color: Dex.CurrentTheme.dexBoxBackgroundColor opacity: .3 } + background: ClipRRect { radius: 8 - DexRectangle { + DefaultRectangle { id: _backgroundColor anchors.fill: parent border.width: 2 radius: parent.radius - color: DexTheme.dexBoxBackgroundColor + color: Dex.CurrentTheme.dexBoxBackgroundColor Container { id: _header width: parent.width diff --git a/atomic_defi_design/Dex/Components/DexMouseArea.qml b/atomic_defi_design/Dex/Components/DexMouseArea.qml index fa58b5512..3f237b7d4 100644 --- a/atomic_defi_design/Dex/Components/DexMouseArea.qml +++ b/atomic_defi_design/Dex/Components/DexMouseArea.qml @@ -1,5 +1,6 @@ import QtQuick 2.15 -MouseArea { +MouseArea +{ cursorShape: enabled ? Qt.PointingHandCursor : Qt.ArrowCursor } \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexPaginator.qml b/atomic_defi_design/Dex/Components/DexPaginator.qml index 35fc8bc65..cbe088fb8 100644 --- a/atomic_defi_design/Dex/Components/DexPaginator.qml +++ b/atomic_defi_design/Dex/Components/DexPaginator.qml @@ -17,6 +17,8 @@ RowLayout property var pageSize: Constants.API.app.orders_mdl.nb_pages property var currentValue: Constants.API.app.orders_mdl.current_page + property alias itemsPerPageComboBox: itemsPerPageComboBox + function refreshBtn() { currentValue = Constants.API.app.orders_mdl.current_page @@ -68,13 +70,17 @@ RowLayout refreshBtn() } - DefaultComboBox + DexComboBox { + id: itemsPerPageComboBox + readonly property int item_count: Constants.API.app.orders_mdl.limit_nb_elements readonly property var options: [5, 10, 25, 50, 100, 200] Layout.preferredWidth: (root.width / 100) * 14 + Layout.maximumWidth: 62 + Layout.preferredHeight: 35 Layout.alignment: Qt.AlignLeft model: options @@ -82,12 +88,14 @@ RowLayout onCurrentValueChanged: Constants.API.app.orders_mdl.limit_nb_elements = currentValue } - DefaultText + DexText { - Layout.preferredWidth: (root.width / 100) * 10 + Layout.preferredWidth: (root.width / 100) * 16 + Layout.leftMargin: 20 Layout.alignment: Qt.AlignLeft - font.pixelSize: 11 - text_value: qsTr("items per page") + font.pixelSize: 12 + text: qsTr("items per page") + color: Dex.CurrentTheme.foregroundColor2 } Item diff --git a/atomic_defi_design/Dex/Components/DexRectangle.qml b/atomic_defi_design/Dex/Components/DexRectangle.qml index e204762ab..38fe98b08 100644 --- a/atomic_defi_design/Dex/Components/DexRectangle.qml +++ b/atomic_defi_design/Dex/Components/DexRectangle.qml @@ -1,13 +1,15 @@ import QtQuick 2.15 import App 1.0 +import Dex.Themes 1.0 as Dex + AnimatedRectangle { id: rect property bool sizeAnimation: false property int sizeAnimationDuration: 150 radius: DexTheme.rectangleRadius - color: DexTheme.contentColorTopBold - border.color: DexTheme.contentColorTopBold + color: Dex.CurrentTheme.backgroundColor + border.color: color border.width: 1 Behavior on width { diff --git a/atomic_defi_design/Dex/Components/DexScrollBar.qml b/atomic_defi_design/Dex/Components/DexScrollBar.qml index 14f5c6576..c17969e28 100644 --- a/atomic_defi_design/Dex/Components/DexScrollBar.qml +++ b/atomic_defi_design/Dex/Components/DexScrollBar.qml @@ -14,6 +14,7 @@ ScrollBar policy: scrollbar_visible ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff property bool visibleBackground: true width: 6 + contentItem: Item { DexRectangle @@ -29,7 +30,6 @@ ScrollBar background: Item { width: 6 - x: 0 DexRectangle { visible: control.visibleBackground diff --git a/atomic_defi_design/Dex/Components/DexSlider.qml b/atomic_defi_design/Dex/Components/DexSlider.qml deleted file mode 100644 index be3dfc714..000000000 --- a/atomic_defi_design/Dex/Components/DexSlider.qml +++ /dev/null @@ -1,41 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Controls 2.15 -import "../Constants" -import App 1.0 -Slider { - id: control - value: 0.5 - opacity: enabled ? 1 : .5 - - background: Rectangle { - x: control.leftPadding - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 200 - implicitHeight: 4 - width: control.availableWidth - height: implicitHeight - radius: 2 - color: "#bdbebf" - - Rectangle { - width: control.visualPosition * parent.width - height: parent.height - color: DexTheme.accentColor - radius: 2 - } - } - handle: FloatingBackground { - x: control.leftPadding + control.visualPosition * (control.availableWidth - width) - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 26 - implicitHeight: 26 - radius: 13 - Rectangle { - anchors.centerIn: parent - width: 10 - height: 10 - radius: 10 - color: DexTheme.accentColor - } - } -} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml index a54f7f813..e8a7086ab 100644 --- a/atomic_defi_design/Dex/Components/DexSweetComboBox.qml +++ b/atomic_defi_design/Dex/Components/DexSweetComboBox.qml @@ -13,22 +13,53 @@ ComboBox { id: control + property alias radius: bg_rect.radius + property color comboBoxBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color popupBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + property color mainBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + property string currentTicker: "All" property var dropdownLineText: m => textRole === "" ? m.modelData : !m.modelData ? m[textRole] : m.modelData[textRole] - property string currentTicker: "All" - property color backgroundColor: Dex.CurrentTheme.floatingBackgroundColor - property color popupBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + // Combobox Dropdown Button Background + background: DexRectangle + { + id: bg_rect + implicitHeight: 40 + color: comboBoxBackgroundColor + radius: 20 + } + + contentItem: DexLabel + { + leftPadding: 10 + verticalAlignment: Text.AlignVCenter + width: bg_rect.width - leftPadding + height: bg_rect.height + text: control.currentTicker + elide: Text.ElideRight + wrapMode: Text.NoWrap + } + + // Each dropdown item delegate: ItemDelegate { + id: combo_item width: control.width + 50 highlighted: control.highlightedIndex === index - contentItem: DefaultText + + contentItem: DexLabel { text_value: control.currentTicker color: Dex.CurrentTheme.foregroundColor } + + background: DexRectangle { + anchors.fill: combo_item + color: combo_item.highlighted ? highlightedBackgroundColor : mainBackgroundColor + } } indicator: Qaterial.Icon @@ -39,35 +70,15 @@ ComboBox icon: Qaterial.Icons.chevronDown } - contentItem: DefaultText - { - leftPadding: 10 - verticalAlignment: Text.AlignVCenter - width: _background.width - leftPadding - height: _background.height - text: control.currentTicker - elide: Text.ElideRight - wrapMode: Text.NoWrap - } - - background: DefaultRectangle - { - id: _background - - implicitHeight: 40 - colorAnimation: false - color: control.backgroundColor - radius: 20 - } - + // Dropdown itself popup: Popup { - id: comboPopup - - readonly property double max_height: 350 + id: combo_popup + readonly property double max_height: 450 width: control.width - height: Math.min(contentItem.implicitHeight, popup.max_height) + 20 + height: Math.min(contentItem.implicitHeight, max_height) + 20 + padding: 1 contentItem: ColumnLayout @@ -79,13 +90,20 @@ ComboBox id: input_coin_filter placeholderText: qsTr("Search") - background: DefaultRectangle + font.pixelSize: 16 + Layout.fillWidth: true + Layout.leftMargin: 0 + Layout.preferredHeight: 40 + Layout.rightMargin: 2 + Layout.topMargin: Layout.leftMargin + + background: DexRectangle { anchors.fill: parent anchors.topMargin: -5 anchors.rightMargin: -1 - radius: 20 - color: control.popupBackgroundColor + radius: control.radius + color: control.mainBackgroundColor } onTextChanged: control.model.setFilterFixedString(text) @@ -110,17 +128,8 @@ ComboBox } } - - - font.pixelSize: 16 - Layout.fillWidth: true - Layout.leftMargin: 0 - Layout.preferredHeight: 40 - Layout.rightMargin: 2 - Layout.topMargin: Layout.leftMargin Keys.onDownPressed: control.incrementCurrentIndex() Keys.onUpPressed: control.decrementCurrentIndex() - Keys.onPressed: { if (event.key === Qt.Key_Return) @@ -135,11 +144,13 @@ ComboBox } } } + Item { Layout.maximumHeight: popup.max_height - 100 Layout.fillWidth: true implicitHeight: popup_list_view.contentHeight + 5 + DexListView { id: popup_list_view @@ -148,11 +159,15 @@ ComboBox anchors.fill: parent anchors.bottomMargin: 10 anchors.rightMargin: 2 + clip: true + + visibleBackground: true + highlight: DefaultRectangle { radius: 0 } - clip: true + delegate: ItemDelegate { width: control.width + 50 @@ -165,7 +180,7 @@ ComboBox background: DefaultRectangle { colorAnimation: false - color: popup_list_view.currentIndex === index ? Dex.CurrentTheme.buttonColorHovered : control.popupBackgroundColor + color: popup_list_view.currentIndex === index ? Dex.CurrentTheme.buttonColorHovered : control.mainBackgroundColor } onClicked: @@ -175,23 +190,6 @@ ComboBox } } - ScrollBar.vertical: ScrollBar - { - anchors.right: popup_list_view.right - anchors.rightMargin: 2 - width: 7 - background: DefaultRectangle - { - radius: 12 - color: Dex.CurrentTheme.scrollBarBackgroundColor - } - contentItem: DefaultRectangle - { - radius: 12 - color: Dex.CurrentTheme.scrollBarIndicatorColor - } - } - DexMouseArea { anchors.fill: parent @@ -204,12 +202,12 @@ ComboBox background: DefaultRectangle { - y: -5 - radius: 20 - colorAnimation: false width: parent.width height: parent.height + radius: control.radius color: control.popupBackgroundColor + colorAnimation: false + border.width: 1 } } diff --git a/atomic_defi_design/Dex/Components/DexSwitch.qml b/atomic_defi_design/Dex/Components/DexSwitch.qml index d3c0779f8..10fd5a609 100644 --- a/atomic_defi_design/Dex/Components/DexSwitch.qml +++ b/atomic_defi_design/Dex/Components/DexSwitch.qml @@ -1,5 +1,6 @@ //! Qt Imports. import QtQuick 2.15 +import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Universal 2.15 @@ -12,54 +13,63 @@ Switch { id: control - property alias switchButtonWidth: indicator.width - property alias switchButtonHeight: indicator.height - property alias switchButtonRadius: indicator.radius + property alias label: _label + property alias label2: _label2 + property alias switchButtonWidth: _indicator.width + property alias switchButtonHeight: _indicator.height + property alias switchButtonRadius: _indicator.radius property alias mouseArea: _mouseArea + property color textColor: Dex.CurrentTheme.foregroundColor + property int labelWidth: label.text == '' ? 0 : 120 - Universal.foreground: Dex.CurrentTheme.foregroundColor - Universal.background: Dex.CurrentTheme.backgroundColor + width: labelWidth + 60 + height: 50 font.family: DexTypo.fontFamily - indicator: DexRectangle + indicator: DefaultRectangle { - id: indicator - anchors.verticalCenter: parent.verticalCenter + id: _indicator width: 52 height: 28 radius: 13 + anchors.verticalCenter: control.verticalCenter gradient: Gradient { orientation: Gradient.Horizontal GradientStop { - position: 0;color: Dex.CurrentTheme.switchGradientStartColor + position: 0 + color: Dex.CurrentTheme.switchGradientStartColor } GradientStop { - position: 0.9311;color: Dex.CurrentTheme.switchGradientEndColor + position: 0.9311 + color: Dex.CurrentTheme.switchGradientEndColor } } Rectangle { visible: !control.checked - anchors.centerIn: parent width: parent.width - 4 height: parent.height - 4 radius: parent.radius + x: 2 + y: 2 gradient: Gradient { orientation: Gradient.Horizontal GradientStop { - position: 0;color: control.checked ? Dex.CurrentTheme.switchGradientStartColor : Dex.CurrentTheme.switchGradientStartColor2 + position: 0; + color: control.checked ? Dex.CurrentTheme.switchGradientStartColor : Dex.CurrentTheme.switchGradientStartColor2 } GradientStop { - position: 0.9311;color: control.checked ? Dex.CurrentTheme.switchGradientEndColor : Dex.CurrentTheme.switchGradientEndColor2 + position: 0.9311; + color: control.checked ? Dex.CurrentTheme.switchGradientEndColor : Dex.CurrentTheme.switchGradientEndColor2 } } } @@ -67,7 +77,7 @@ Switch Rectangle { x: control.checked ? parent.width - width - 4 : 4 - anchors.verticalCenter: parent.verticalCenter + y: 3 width: parent.width / 2 - 2 height: parent.height - 6 radius: parent.radius + 2 @@ -77,21 +87,59 @@ Switch orientation: Gradient.Horizontal GradientStop { - position: 0;color: control.checked ? Dex.CurrentTheme.switchGradientStartColor2 : Dex.CurrentTheme.switchGradientStartColor + position: 0; + color: control.checked ? Dex.CurrentTheme.switchGradientStartColor2 : Dex.CurrentTheme.switchGradientStartColor } GradientStop { - position: 0.9311;color: control.checked ? Dex.CurrentTheme.switchGradientEndColor2 : Dex.CurrentTheme.switchGradientEndColor + position: 0.9311; + color: control.checked ? Dex.CurrentTheme.switchGradientEndColor2 : Dex.CurrentTheme.switchGradientEndColor } } } } + ColumnLayout + { + Layout.preferredWidth: labelWidth + Layout.preferredHeight: control.height + Layout.alignment: Qt.AlignVCenter + anchors.verticalCenter: control.verticalCenter + + visible: _label.text != '' + + DefaultText + { + id: _label + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter + visible: _label.text != '' + font: control.font + color: control.textColor + leftPadding: _indicator.width + control.spacing + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + wrapMode: Label.Wrap + } + + DefaultText + { + id: _label2 + Layout.fillHeight: true + visible: _label2.text != '' + font: DexTypo.caption + color: control.textColor + leftPadding: _indicator.width + control.spacing + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + wrapMode: Label.Wrap + } + } + DefaultMouseArea { id: _mouseArea - anchors.fill: parent + anchors.fill: control acceptedButtons: Qt.NoButton } - -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Components/DexTextField.qml b/atomic_defi_design/Dex/Components/DexTextField.qml index 7025abc0e..485f4b449 100644 --- a/atomic_defi_design/Dex/Components/DexTextField.qml +++ b/atomic_defi_design/Dex/Components/DexTextField.qml @@ -26,7 +26,6 @@ TextField leftPadding: Math.max(0, left_text.width + 20) rightPadding: Math.max(0, right_text.width + 20) - topPadding: 7 background: DefaultRectangle { @@ -54,7 +53,7 @@ TextField RightClickMenu {} - DefaultText + DexLabel { id: left_text visible: text_value !== "" @@ -65,7 +64,7 @@ TextField font.pixelSize: text_field.font.pixelSize } - DefaultText + DexLabel { id: right_text visible: text_value !== "" @@ -80,4 +79,8 @@ TextField { if (forceFocus) text_field.forceActiveFocus() } + + onVisibleChanged: { + if (forceFocus && visible) text_field.forceActiveFocus() + } } diff --git a/atomic_defi_design/Dex/Components/DexTooltip.qml b/atomic_defi_design/Dex/Components/DexTooltip.qml index 78a3782e8..070374053 100644 --- a/atomic_defi_design/Dex/Components/DexTooltip.qml +++ b/atomic_defi_design/Dex/Components/DexTooltip.qml @@ -7,6 +7,7 @@ import Dex.Themes 1.0 as Dex ToolTip { id: control + property bool background_visible: true contentItem: DexLabel { @@ -17,6 +18,7 @@ ToolTip background: FloatingBackground { + visible: background_visible color: Dex.CurrentTheme.accentColor } } \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/ElidableText.qml b/atomic_defi_design/Dex/Components/ElidableText.qml new file mode 100644 index 000000000..a3e3682c2 --- /dev/null +++ b/atomic_defi_design/Dex/Components/ElidableText.qml @@ -0,0 +1,6 @@ +import QtQuick 2.12 + +DefaultText +{ + elide: Text.ElideRight +} diff --git a/atomic_defi_design/Dex/Components/EulaModal.qml b/atomic_defi_design/Dex/Components/EulaModal.qml index a5b5e5fec..419180101 100644 --- a/atomic_defi_design/Dex/Components/EulaModal.qml +++ b/atomic_defi_design/Dex/Components/EulaModal.qml @@ -41,7 +41,7 @@ MultipageModal contentWidth: eula_text.width - 10 contentHeight: eula_text.height - DexLabel + DefaultText { id: eula_text font: DexTypo.body1 @@ -53,17 +53,21 @@ MultipageModal } // Checkboxes - DexCheckBox + DefaultCheckBox { id: accept_eula + Layout.preferredWidth: parent.width visible: !close_only + labelWidth: eula_rect.width - 80 text: qsTr("Accept EULA") } - DexCheckBox + DefaultCheckBox { id: accept_tac + Layout.preferredWidth: parent.width visible: !close_only + labelWidth: eula_rect.width - 80 text: qsTr("Accept Terms and Conditions") } diff --git a/atomic_defi_design/Dex/Components/Expandable.qml b/atomic_defi_design/Dex/Components/Expandable.qml new file mode 100644 index 000000000..d4858cf8b --- /dev/null +++ b/atomic_defi_design/Dex/Components/Expandable.qml @@ -0,0 +1,35 @@ +import QtQuick 2.12 + +Rectangle +{ + id: root + + property bool isExpanded: false + property real padding: 10 + + property alias header: headerLoader.sourceComponent + property alias content: contentLoader.sourceComponent + + implicitHeight: (padding * 2 + headerLoader.implicitHeight) + (isExpanded ? contentLoader.implicitHeight + padding * 2 : 0) + clip: true + + Loader + { + id: headerLoader + + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: root.padding + } + + Loader + { + id: contentLoader + + visible: root.isExpanded + + anchors.top: headerLoader.bottom + anchors.left: parent.left + anchors.margins: root.padding + } +} diff --git a/atomic_defi_design/Dex/Components/HideFieldButton.qml b/atomic_defi_design/Dex/Components/HideFieldButton.qml index 7ebf622af..d2657d787 100644 --- a/atomic_defi_design/Dex/Components/HideFieldButton.qml +++ b/atomic_defi_design/Dex/Components/HideFieldButton.qml @@ -3,7 +3,7 @@ import "../Constants" import App 1.0 DefaultImage { - property alias mouse_area: mouse_area + property alias mouseArea: mouseArea property bool use_default_behaviour: true source: General.image_path + "dashboard-eye" + (hiding ? "" : "-hide") + ".svg" visible: hidable @@ -13,10 +13,10 @@ DefaultImage { anchors.verticalCenter: parent.verticalCenter antialiasing: true - opacity: mouse_area.containsMouse ? Style.hoverOpacity : 1 + opacity: mouseArea.containsMouse ? Style.hoverOpacity : 1 DefaultMouseArea { - id: mouse_area + id: mouseArea anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter } height: input_field.height; width: input_field.height diff --git a/atomic_defi_design/Dex/Components/LinkIcon.qml b/atomic_defi_design/Dex/Components/LinkIcon.qml index 2aaca2c1c..6b3829f16 100644 --- a/atomic_defi_design/Dex/Components/LinkIcon.qml +++ b/atomic_defi_design/Dex/Components/LinkIcon.qml @@ -11,32 +11,37 @@ Circle Layout.preferredWidth: 50 Layout.preferredHeight: Layout.preferredWidth + Layout.topMargin: 10 + Layout.bottomMargin: 10 + Layout.leftMargin: 5 + Layout.rightMargin: 5 color: Style.colorOnlyIf(mouse_area.containsMouse, Style.colorTheme4) radius: 100 - DefaultImage + DexImage { id: icon + anchors.centerIn: parent width: parent.width * 0.9 height: parent.height * 0.9 + } - anchors.centerIn: parent + DexMouseArea + { + id: mouse_area + anchors.fill: parent + hoverEnabled: true + onClicked: Qt.openUrlExternally(link) + } - DefaultMouseArea - { - id: mouse_area - anchors.fill: parent - hoverEnabled: true - onClicked: Qt.openUrlExternally(link) - } - - DefaultTooltip - { - visible: mouse_area.containsMouse - id: tooltip_text - } + DexTooltip + { + id: tooltip_text + visible: mouse_area.containsMouse + background_visible: false + font.pixelSize: 12 } } diff --git a/atomic_defi_design/Dex/Components/LinksRow.qml b/atomic_defi_design/Dex/Components/LinksRow.qml index 159a8a866..3dc6e45dc 100644 --- a/atomic_defi_design/Dex/Components/LinksRow.qml +++ b/atomic_defi_design/Dex/Components/LinksRow.qml @@ -7,11 +7,12 @@ import "../Constants" import App 1.0 //> API RowLayout { - spacing: 10 + spacing: 0 LinkIcon { enabled: API.app_discord_url !== "" visible: enabled + Layout.leftMargin: 0 id: discord_icon link: API.app_discord_url @@ -31,6 +32,7 @@ RowLayout { LinkIcon { enabled: API.app_support_url !== "" visible: enabled + Layout.rightMargin: 0 link: API.app_support_url source: General.image_path + "icon-support.png" diff --git a/atomic_defi_design/Dex/Components/LoaderBusyIndicator.qml b/atomic_defi_design/Dex/Components/LoaderBusyIndicator.qml index 629cbfbb9..2b08124f4 100644 --- a/atomic_defi_design/Dex/Components/LoaderBusyIndicator.qml +++ b/atomic_defi_design/Dex/Components/LoaderBusyIndicator.qml @@ -9,7 +9,7 @@ Item { anchors.fill: parent - DefaultBusyIndicator { + DexBusyIndicator { anchors.centerIn: parent } } diff --git a/atomic_defi_design/Dex/Components/MultipageModal.qml b/atomic_defi_design/Dex/Components/MultipageModal.qml index 8fcfff3e3..39a0f51d2 100644 --- a/atomic_defi_design/Dex/Components/MultipageModal.qml +++ b/atomic_defi_design/Dex/Components/MultipageModal.qml @@ -1,5 +1,6 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 + import "../Constants" import App 1.0 import Dex.Themes 1.0 as Dex @@ -8,13 +9,13 @@ DefaultModal { id: root - property alias currentIndex: stack_layout.currentIndex + property alias currentIndex: stackLayout.currentIndex property int targetPageIndex: currentIndex - property alias count: stack_layout.count - default property alias pages: stack_layout.data + property alias count: stackLayout.count + default property alias pages: stackLayout.data - readonly property int _modalWidth: width - readonly property int _modalPadding: padding + readonly property int _modalWidth: width + readonly property int _modalPadding: padding function nextPage() { @@ -38,11 +39,10 @@ DefaultModal } } - //! Appearance width: 676 height: columnLayout.height + verticalPadding * 2 - onOpened: stack_layout.opacity = 1 + onOpened: stackLayout.opacity = 1 SequentialAnimation { @@ -52,7 +52,7 @@ DefaultModal NumberAnimation { target: root; property: "opacity"; to: 1; duration: fadeOut.duration } } - Column + ColumnLayout { id: columnLayout spacing: Style.rowSpacing @@ -62,8 +62,7 @@ DefaultModal Row { visible: root.count > 1 - anchors.horizontalCenter: parent.horizontalCenter - + Layout.alignment: Qt.AlignHCenter layoutDirection: Qt.RightToLeft Repeater @@ -113,9 +112,9 @@ DefaultModal // Inside modal StackLayout { - id: stack_layout - width: parent.width - height: stack_layout.children[stack_layout.currentIndex].height + id: stackLayout + Layout.fillWidth: true + Layout.preferredHeight: children[currentIndex].height } } } diff --git a/atomic_defi_design/Dex/Components/MultipageModalContent.qml b/atomic_defi_design/Dex/Components/MultipageModalContent.qml index 83de4fbc1..31f4d6233 100644 --- a/atomic_defi_design/Dex/Components/MultipageModalContent.qml +++ b/atomic_defi_design/Dex/Components/MultipageModalContent.qml @@ -1,8 +1,6 @@ -//! Qt Imports import QtQuick 2.15 import QtQuick.Layouts 1.15 -//! Project Imports import "../Constants" import App 1.0 @@ -15,11 +13,18 @@ ColumnLayout property var titleAlignment: Qt.AlignLeft property int titleTopMargin: 20 property int topMarginAfterTitle: 30 - - default property alias content: _innerLayout.data - property alias footer: _footer.data + + property alias flickable: modal_flickable + property int flickMax: 500 + property alias header: _header.data + default property alias content: _innerLayout.data + property alias contentSpacing: _innerLayout.spacing + property alias footer: _footer.data Layout.fillWidth: true + visible: true + Layout.fillHeight: false + Layout.maximumHeight: window.height - 50 DefaultText { @@ -27,23 +32,35 @@ ColumnLayout Layout.topMargin: root.titleTopMargin Layout.alignment: root.titleAlignment font: DexTypo.head6 + visible: text != '' + } + + // Header + + ColumnLayout + { + id: _header + spacing: 10 + Layout.topMargin: root.topMarginAfterTitle + Layout.preferredHeight: childrenRect.height + visible: childrenRect.height > 0 } DefaultFlickable { + id: modal_flickable flickableDirection: Flickable.VerticalFlick Layout.topMargin: root.topMarginAfterTitle Layout.fillWidth: true Layout.preferredHeight: contentHeight - Layout.maximumHeight: window.height - 200 - + Layout.maximumHeight: flickMax contentHeight: _innerLayout.height ColumnLayout { id: _innerLayout - anchors.centerIn: parent + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter width: parent.width } } @@ -54,5 +71,7 @@ ColumnLayout id: _footer Layout.topMargin: Style.rowSpacing spacing: Style.buttonSpacing + height: childrenRect.height + visible: childrenRect.height > 0 } } diff --git a/atomic_defi_design/Dex/Components/Pagination.qml b/atomic_defi_design/Dex/Components/Pagination.qml index cacaf7d4c..7017d7ce8 100644 --- a/atomic_defi_design/Dex/Components/Pagination.qml +++ b/atomic_defi_design/Dex/Components/Pagination.qml @@ -8,6 +8,8 @@ import "../Constants" import App 1.0 import Dex.Themes 1.0 as Dex +// TODO: confirm this component no longer in use; delete. + RowLayout { id: control @@ -67,7 +69,7 @@ RowLayout currentIndex: options.indexOf(item_count) onCurrentValueChanged: API.app.orders_mdl.limit_nb_elements = currentValue mainBackgroundColor: Dex.CurrentTheme.backgroundColor - dropdownBackgroundColor: Dex.CurrentTheme.backgroundColor + popupBackgroundColor: Dex.CurrentTheme.backgroundColor } DefaultText { diff --git a/atomic_defi_design/Dex/Components/PairItemBadge.qml b/atomic_defi_design/Dex/Components/PairItemBadge.qml new file mode 100644 index 000000000..d109a7dd2 --- /dev/null +++ b/atomic_defi_design/Dex/Components/PairItemBadge.qml @@ -0,0 +1,94 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 + +DefaultRectangle +{ + id: root + property alias source: icon.source + property alias ticker: ticker.text + property alias fullname: fullname.text + property alias amount: amount.text + + width: 260 + height: 66 + radius: 10 + + RowLayout + { + Layout.fillWidth: true + Layout.fillHeight: true + anchors.fill: parent + anchors.margins: 15 + spacing: 8 + + Item { Layout.fillWidth: true } + + DefaultImage + { + id: icon + Layout.preferredWidth: 35 + Layout.preferredHeight: 35 + Layout.alignment: Qt.AlignVCenter + } + + Item { Layout.fillWidth: true } + + ColumnLayout + { + Layout.fillWidth: true + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter + spacing: 5 + + DefaultText + { + id: ticker + Layout.fillWidth: true + font.pixelSize: 11 + horizontalAlignment: Text.AlignLeft + wrapMode: Text.NoWrap + } + + DefaultText + { + id: amount + Layout.fillWidth: true + font.pixelSize: 11 + horizontalAlignment: Text.AlignLeft + wrapMode: Text.NoWrap + } + } + + Item { Layout.fillWidth: true } + + ColumnLayout + { + Layout.fillWidth: true + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter + spacing: 5 + + DefaultText + { + id: fullname + Layout.fillWidth: true + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + font.pixelSize: 11 + } + + DefaultText + { + id: amount_fiat + visible: text != '' + Layout.fillWidth: true + font.pixelSize: 11 + wrapMode: Text.NoWrap + horizontalAlignment: Text.AlignLeft + elide: Text.ElideRight + } + } + + Item { Layout.fillWidth: true } + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Components/PopupManager.qml b/atomic_defi_design/Dex/Components/PopupManager.qml index 07325403e..314dbf140 100644 --- a/atomic_defi_design/Dex/Components/PopupManager.qml +++ b/atomic_defi_design/Dex/Components/PopupManager.qml @@ -59,6 +59,7 @@ Popup property bool centerAlign: false property color backgroundColor: Dex.CurrentTheme.backgroundColor property bool titleBold: false + property bool forceFocus: false property bool enableAcceptButton: validator === undefined ? true : validator(_insideField.field.text) background: Qaterial.ClipRRect @@ -158,18 +159,22 @@ Popup field.font: DexTypo.body2 placeholderText: dialog.placeholderText field.placeholderText: "" + field.forceFocus: forceFocus field.rightPadding: dialog.isPassword ? 55 : 20 field.leftPadding: dialog.isPassword ? 70 : 20 field.echoMode: dialog.isPassword ? TextField.Password : TextField.Normal field.onTextChanged: { - if (validator(field.text)) + if (validator) { - dialog.enableAcceptButton = true - } - else { - dialog.enableAcceptButton = false + if (validator(field.text)) + { + dialog.enableAcceptButton = true + } + else { + dialog.enableAcceptButton = false + } } } field.onAccepted: diff --git a/atomic_defi_design/Dex/Components/RoundComboBox.qml b/atomic_defi_design/Dex/Components/RoundComboBox.qml index a02dff456..247073ec5 100644 --- a/atomic_defi_design/Dex/Components/RoundComboBox.qml +++ b/atomic_defi_design/Dex/Components/RoundComboBox.qml @@ -10,33 +10,25 @@ import "../Constants" import App 1.0 import Dex.Themes 1.0 as Dex +// TODO: Confirm not in use; delete + ComboBox { id: control property alias radius: bg_rect.radius - property color lineHoverColor: DexTheme.hoverColor + readonly property bool disabled: !enabled + property int dropDownMaxHeight: 450 property color mainBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor - property int dropDownMaxHeight: 300 - property color dropdownBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + property color popupBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + property string mainLineText: control.displayText property var dropdownLineText: m => textRole === "" ? m.modelData : !m.modelData ? m[textRole] : m.modelData[textRole] - property string mainLineText: control.displayText - - readonly property bool disabled: !enabled font.family: Style.font_family - - Behavior on lineHoverColor - { - ColorAnimation - { - duration: Style.animationDuration - } - } - hoverEnabled: true // Main, selected text @@ -53,7 +45,6 @@ ComboBox } } - // Main background background: FloatingBackground { @@ -108,7 +99,7 @@ ComboBox background: Rectangle { radius: control.radius - color: control.dropdownBackgroundColor + color: control.popupBackgroundColor } } diff --git a/atomic_defi_design/Dex/Components/ScrollBarHorizontal.qml b/atomic_defi_design/Dex/Components/ScrollBarHorizontal.qml new file mode 100644 index 000000000..6b4644cd6 --- /dev/null +++ b/atomic_defi_design/Dex/Components/ScrollBarHorizontal.qml @@ -0,0 +1,42 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 + +import App 1.0 +import Dex.Themes 1.0 as Dex + +ScrollBar +{ + id: control + + anchors.bottom: root.bottom + anchors.bottomMargin: 0 + policy: scrollbar_visible ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff + property bool visibleBackground: true + width: 6 + + contentItem: Item + { + DefaultRectangle + { + width: parent.width + height: parent.height + anchors.horizontalCenter: parent.horizontalCenter + + color: Dex.CurrentTheme.scrollBarIndicatorColor + } + } + + background: Item + { + width: 6 + x: 0 + DefaultRectangle + { + visible: control.visibleBackground + width: parent.width + height: parent.height + anchors.horizontalCenter: parent.horizontalCenter + color: Dex.CurrentTheme.scrollBarBackgroundColor + } + } +} diff --git a/atomic_defi_design/Dex/Components/SearchField.qml b/atomic_defi_design/Dex/Components/SearchField.qml index f4ede557a..1c18a3908 100644 --- a/atomic_defi_design/Dex/Components/SearchField.qml +++ b/atomic_defi_design/Dex/Components/SearchField.qml @@ -1,16 +1,18 @@ import QtQuick 2.12 import QtQuick.Controls 2.2 +import Qaterial 1.0 as Qaterial + import "../Constants" import Dex.Themes 1.0 as Dex Rectangle { property int searchIconLeftMargin: 13 - property bool forceFocus: false - + property var searchModel: API.app.portfolio_pg.global_cfg_mdl.all_proxy property alias searchIcon: _searchIcon property alias textField: _textField + property alias forceFocus: _textField.forceFocus color: Dex.CurrentTheme.accentColor radius: 18 @@ -27,7 +29,7 @@ Rectangle source: General.image_path + "exchange-search.svg" - DefaultColorOverlay + DexColorOverlay { anchors.fill: parent source: parent @@ -35,24 +37,50 @@ Rectangle } } - TextField + DefaultTextField { id: _textField anchors.left: _searchIcon.right - anchors.verticalCenter: _searchIcon.verticalCenter - anchors.verticalCenterOffset: 1 + anchors.verticalCenter: parent.verticalCenter width: parent.width - x - 5 height: parent.height - background: null + font.pixelSize: 14 placeholderText: qsTr("Search") placeholderTextColor: Dex.CurrentTheme.textPlaceholderColor - font.pixelSize: 14 - Component.onCompleted: + + onTextChanged: searchModel.setFilterFixedString(_textField.text) + Component.onDestruction: searchModel.setFilterFixedString("") + } + + DefaultRectangle + { + id: _clearIcon + visible: _textField.text != "" + anchors.right: parent.right + anchors.rightMargin: searchIconLeftMargin + anchors.verticalCenter: parent.verticalCenter + color: mouseArea.containsMouse ? Dex.CurrentTheme.buttonColorHovered : "transparent" + + width: 20 + height: 20 + + Qaterial.ColorIcon { - if (forceFocus) _textField.forceActiveFocus() + anchors.centerIn: parent + iconSize: 12 + color: Dex.CurrentTheme.textPlaceholderColor + source: Qaterial.Icons.close + } + + DefaultMouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: _textField.text = "" } } } diff --git a/atomic_defi_design/Dex/Components/SwapIcon.qml b/atomic_defi_design/Dex/Components/SwapIcon.qml index d193b13f6..9fcfdfba1 100644 --- a/atomic_defi_design/Dex/Components/SwapIcon.qml +++ b/atomic_defi_design/Dex/Components/SwapIcon.qml @@ -11,6 +11,7 @@ Item property string top_arrow_ticker property string bottom_arrow_ticker property bool hovered: false + property color color: Dex.CurrentTheme.foregroundColor implicitWidth: 20 implicitHeight: 50 @@ -19,6 +20,6 @@ Item { anchors.centerIn: parent source: Qaterial.Icons.swapHorizontal - color: Dex.CurrentTheme.foregroundColor + color: root.color } } diff --git a/atomic_defi_design/Dex/Components/TextAreaWithTitle.qml b/atomic_defi_design/Dex/Components/TextAreaWithTitle.qml index 9757c9ce6..38d85520e 100644 --- a/atomic_defi_design/Dex/Components/TextAreaWithTitle.qml +++ b/atomic_defi_design/Dex/Components/TextAreaWithTitle.qml @@ -15,7 +15,7 @@ ColumnLayout property alias field: input_field property alias save_button: save_button property alias hide_button: hide_button - property alias hide_button_area: hide_button.mouse_area + property alias hide_button_area: hide_button.mouseArea property bool copyable: false property bool hidable: false property var onReturn // function @@ -49,7 +49,7 @@ ColumnLayout icon: Qaterial.Icons.contentCopy color: copyArea.containsMouse ? Dex.CurrentTheme.accentColor : Dex.CurrentTheme.foregroundColor - DefaultMouseArea + DexMouseArea { id: copyArea anchors.fill: parent @@ -76,13 +76,14 @@ ColumnLayout color: Dex.CurrentTheme.accentColor opacity: .7 radius: 8 - border.color: input_field.focus ? Dex.CurrentTheme.accentColor : DexTheme.rectangleBorderColor + border.color: input_field.focus ? Dex.CurrentTheme.accentColor : Dex.CurrentTheme.backgroundColor border.width: input_field.focus ? 2 : 0 } HideFieldButton { id: hide_button } } + DexAppButton { anchors.verticalCenter: parent.verticalCenter id: save_button diff --git a/atomic_defi_design/Dex/Components/TextEditWithTitle.qml b/atomic_defi_design/Dex/Components/TextEditWithTitle.qml index 521bba752..463992a3b 100644 --- a/atomic_defi_design/Dex/Components/TextEditWithTitle.qml +++ b/atomic_defi_design/Dex/Components/TextEditWithTitle.qml @@ -11,12 +11,14 @@ ComponentWithTitle { id: control - property alias label: text - property alias text: text.text_value - property alias value_color: text.color - property alias privacy: text.privacy + property alias label: _text + property alias text: _text.text_value + property alias value_color: _text.color + property alias privacy: _text.privacy property bool copy: false - property string onCopyNotificationTitle: qsTr("Swap ID") + property bool monospace: false + property string linkURL: "" + property string onCopyNotificationTitle: "" property string onCopyNotificationMsg: qsTr("copied to clipboard") Row @@ -25,39 +27,39 @@ ComponentWithTitle DefaultText { - id: text + id: _text width: implicitWidth > parent.width * 0.9 ? parent.width * 0.9 : implicitWidth clip: true textFormat: TextEdit.AutoText opacity: show_content ? 1 : 0 - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap + monospace: control.monospace Behavior on opacity { SmoothedAnimation { duration: expand_animation.duration; velocity: -1 } } Behavior on Layout.preferredHeight { SmoothedAnimation { id: expand_animation; duration: Constants.Style.animationDuration * 2; velocity: -1 } } } - Qaterial.Icon + DefaultCopyIcon { - visible: control.copy - - width: parent.width * 0.1 - size: 16 - icon: Qaterial.Icons.contentCopy - color: copyArea.containsMouse ? Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor - - DefaultMouseArea - { - id: copyArea - anchors.fill: parent - hoverEnabled: true - onClicked: - { - Qaterial.Clipboard.text = control.text - app.notifyCopy(onCopyNotificationTitle, onCopyNotificationMsg) - } - } + id: copyIcon + visible: control.onCopyNotificationTitle !== "" + copyText: control.text + notifyTitle: control.onCopyNotificationTitle + notifyMsg: control.onCopyNotificationMsg + x: _text.width + 10 + iconSize: 14 } + + DefaultLinkIcon + { + visible: control.linkURL !== "" + linkURL: control.linkURL + x: copyIcon.visible ? _text.width + 10 : _text.width + 16 + iconSize: 14 + } + + Item { Layout.fillWidth: true } } } diff --git a/atomic_defi_design/Dex/Components/TextFieldWithTitle.qml b/atomic_defi_design/Dex/Components/TextFieldWithTitle.qml index ebaf73ff5..0ee1d0438 100644 --- a/atomic_defi_design/Dex/Components/TextFieldWithTitle.qml +++ b/atomic_defi_design/Dex/Components/TextFieldWithTitle.qml @@ -9,6 +9,8 @@ import Dex.Themes 1.0 as Dex ColumnLayout { id: control + Layout.fillWidth: true + Layout.fillHeight: true property bool copyable: false property bool hidable: false @@ -18,7 +20,7 @@ ColumnLayout property alias title: title_text.text property alias field: input_field property alias hide_button: hide_button - property alias hide_button_area: hide_button.mouse_area + property alias hide_button_area: hide_button.mouseArea // Local function reset() @@ -38,7 +40,7 @@ ColumnLayout visible: text !== '' } - DexLabel + DefaultText { visible: required && input_field.text === '' font.pixelSize: Style.textSizeSmall2 diff --git a/atomic_defi_design/Dex/Components/TextWithTitle.qml b/atomic_defi_design/Dex/Components/TextWithTitle.qml index 36ceaa778..48b5ddc8c 100644 --- a/atomic_defi_design/Dex/Components/TextWithTitle.qml +++ b/atomic_defi_design/Dex/Components/TextWithTitle.qml @@ -5,6 +5,7 @@ import App 1.0 ComponentWithTitle { property alias text: text.text_value + property alias text_font: text.font property alias value_color: text.color property alias privacy: text.privacy diff --git a/atomic_defi_design/Dex/Components/TransactionArrow.qml b/atomic_defi_design/Dex/Components/TransactionArrow.qml new file mode 100644 index 000000000..edf58a44e --- /dev/null +++ b/atomic_defi_design/Dex/Components/TransactionArrow.qml @@ -0,0 +1,11 @@ +// Project Imports +import Dex.Themes 1.0 as Dex //> CurrentTheme + +Arrow +{ + id: root + + property alias amISender: root.up + + color: !amISender ? Dex.CurrentTheme.senderColorStart : Dex.CurrentTheme.receiverColorStart +} diff --git a/atomic_defi_design/Dex/Components/UserIcon.qml b/atomic_defi_design/Dex/Components/UserIcon.qml new file mode 100644 index 000000000..d557228cc --- /dev/null +++ b/atomic_defi_design/Dex/Components/UserIcon.qml @@ -0,0 +1,12 @@ +// 3rdParty Imports +import Qaterial 1.0 as Qaterial //> ColorIcon + +// Project Imports +import Dex.Themes 1.0 as Dex //> CurrentTheme + +Qaterial.ColorIcon +{ + color: Dex.CurrentTheme.userIconColorStart + source: Qaterial.Icons.account + iconSize: 28 +} diff --git a/atomic_defi_design/Dex/Components/WalletNameField.qml b/atomic_defi_design/Dex/Components/WalletNameField.qml deleted file mode 100644 index 58c609559..000000000 --- a/atomic_defi_design/Dex/Components/WalletNameField.qml +++ /dev/null @@ -1,12 +0,0 @@ -import QtQuick 2.15 - -TextFieldWithTitle { - id: input_wallet_name - title: qsTr("Wallet Name") - field.placeholderText: qsTr("Enter the name of your wallet here") - field.validator: RegExpValidator { regExp: /[a-zA-Z0-9]+/ } - - required: true - - function reset() { field.text = '' } -} diff --git a/atomic_defi_design/Dex/Components/Widget.qml b/atomic_defi_design/Dex/Components/Widget.qml new file mode 100644 index 000000000..034855730 --- /dev/null +++ b/atomic_defi_design/Dex/Components/Widget.qml @@ -0,0 +1,108 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.12 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import "../Constants" + +Item +{ + id: root + + property string title: "Widget" + + property bool collapsable: true + property bool collapsedAtConstruction: false + + property alias header: headerLoader.sourceComponent + property alias background: backgroundLoader.sourceComponent + + property int margins: 10 + property int spacing: 10 + property int contentSpacing: 10 + + default property alias contentData: content.data + + property bool _collapsed: collapsable && collapsedAtConstruction + + function isCollapsed() { return _collapsed } + + // Background + Loader + { + id: backgroundLoader + anchors.fill: parent + sourceComponent: defaultBackground + } + + Column + { + anchors.fill: parent + anchors.margins: root.margins + + spacing: root.spacing + + // Header + Loader + { + id: headerLoader + sourceComponent: defaultHeader + width: parent.width + } + + // Content + ColumnLayout + { + id: content + + visible: !root._collapsed + + width: parent.width + height: parent.height - y + + spacing: root.contentSpacing + } + } + + // Header Component + Component + { + id: defaultHeader + + RowLayout + { + DefaultText { text: root.title; font: DexTypo.subtitle1 } + Item { Layout.fillWidth: true } + Qaterial.Icon + { + visible: root.collapsable + width: 20 + height: 20 + color: collapseButMouseArea.containsMouse ? Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor + icon: root._collapsed ? Qaterial.Icons.chevronUp : Qaterial.Icons.chevronDown + + DefaultMouseArea + { + id: collapseButMouseArea + anchors.fill: parent + hoverEnabled: true + onClicked: root._collapsed = !root._collapsed + } + } + } + } + + // Background Component + Component + { + id: defaultBackground + + Rectangle + { + radius: 10 + color: Dex.CurrentTheme.floatingBackgroundColor + } + } +} diff --git a/atomic_defi_design/Dex/Components/qmldir b/atomic_defi_design/Dex/Components/qmldir new file mode 100644 index 000000000..bc894bd81 --- /dev/null +++ b/atomic_defi_design/Dex/Components/qmldir @@ -0,0 +1,22 @@ +module Dex.Components + +Button 1.0 DefaultButton.qml +ComboBox 1.0 DefaultComboBox.qml +ComboBoxWithSearchBar 1.0 ComboBoxWithSearchBar.qml +ClickableText 1.0 ClickableText.qml +ElidableText 1.0 ElidableText.qml +GradientButton 1.0 GradientButton.qml +Image 1.0 DefaultImage.qml +ListView 1.0 DefaultListView.qml +MouseArea 1.0 DefaultMouseArea.qml +MultipageModal 1.0 MultipageModal.qml +MultipageModalContent 1.0 MultipageModalContent.qml +Popup 1.0 DefaultPopup.qml +Rectangle 1.0 DefaultRectangle.qml +ScrollView 1.0 DefaultScrollView.qml +SearchField 1.0 SearchField.qml +Text 1.0 DefaultText.qml +TextField 1.0 DefaultTextField.qml +TextFieldWithTitle 1.0 TextFieldWithTitle.qml +ToolTip 1.0 DefaultTooltip.qml +UserIcon 1.0 UserIcon.qml diff --git a/atomic_defi_design/Dex/Constants/DexTheme.qml b/atomic_defi_design/Dex/Constants/DexTheme.qml index 60676c431..4104684b0 100644 --- a/atomic_defi_design/Dex/Constants/DexTheme.qml +++ b/atomic_defi_design/Dex/Constants/DexTheme.qml @@ -118,8 +118,8 @@ QtObject { property bool portfolioPieGradient: false - property color arrowUpColor: redColor - property color arrowDownColor: greenColor + property color senderColorStart: redColor + property color receiverColorStart: greenColor @@ -143,6 +143,8 @@ QtObject { property color lineChartColor: accentColor property color chartGridLineColor: Qt.rgba(255,255,255,0.4) + property color busyIndicatorColor: Dex.CurrentTheme.busyIndicatorColor + // Button property color buttonColorDisabled: Dex.CurrentTheme.buttonColorDisabled property color buttonColorHovered: Dex.CurrentTheme.buttonColorHovered @@ -216,15 +218,6 @@ QtObject { readonly property int animationDuration: 125 - readonly property int textSizeVerySmall1: 1 - readonly property int textSizeVerySmall2: 2 - readonly property int textSizeVerySmall3: 3 - readonly property int textSizeVerySmall4: 4 - readonly property int textSizeVerySmall5: 5 - readonly property int textSizeVerySmall6: 6 - readonly property int textSizeVerySmall7: 7 - readonly property int textSizeVerySmall8: 8 - readonly property int textSizeVerySmall9: 9 readonly property int textSizeSmall: 10 readonly property int textSizeSmall1: 11 readonly property int textSizeSmall2: 12 @@ -322,10 +315,6 @@ QtObject { readonly property string colorRectangle: dark_theme ? colorTheme7 : colorTheme7 readonly property string colorInnerBackground: dark_theme ? colorTheme7 : colorTheme7 - readonly property string colorGradient1: dark_theme ? colorTheme9 : colorTheme9 - readonly property string colorGradient2: dark_theme ? colorTheme5 : colorTheme5 - readonly property string colorGradient3: dark_theme ? "#24283D" : "#24283D" - readonly property string colorGradient4: dark_theme ? "#0D0F21" : "#0D0F21" readonly property string colorDropShadowLight: dark_theme ? "#216975a4" : "#21FFFFFF" readonly property string colorDropShadowLight2: dark_theme ? "#606975a4" : "#60FFFFFF" readonly property string colorDropShadowDark: dark_theme ? "#FF050615" : "#BECDE2" @@ -354,59 +343,18 @@ QtObject { readonly property string colorRectangleBorderGradient1: dark_theme ? "#2A2F48" : "#DDDDDD" readonly property string colorRectangleBorderGradient2: dark_theme ? "#0D1021" : "#EFEFEF" - readonly property string colorChartText: dark_theme ? "#405366" : "#B5B9C1" - readonly property string colorChartLegendLine: dark_theme ? "#3F5265" : "#BDC0C8" - readonly property string colorChartGrid: dark_theme ? "#202333" : "#E6E8ED" - readonly property string colorChartLineText: dark_theme ? "#405366" : "#FFFFFF" - - readonly property string colorChartMA1: dark_theme ? "#5BC6FA" : "#5BC6FA" - readonly property string colorChartMA2: dark_theme ? "#F1D17F" : "#F1D17F" - readonly property string colorLineBasic: dark_theme ? "#303344" : "#303344" - readonly property string colorBusyIndicator: dark_theme ? "#405ff9" : "#405ff9" readonly property string colorText: dark_theme ? Style.colorWhite1 : "#405366" readonly property string colorText2: dark_theme ? "#79808C" : "#3C5368" readonly property string colorTextDisabled: dark_theme ? Style.colorWhite8 : "#B5B9C1" - readonly property var colorButtonDisabled: ({ - "default": Style.colorTheme9, - "primary": Style.colorGreen3, - "danger": Style.colorRed3 - }) - readonly property var colorButtonHovered: ({ - "default": Style.colorTheme6, - "primary": Style.colorGreen, - "danger": Style.colorRed - }) - readonly property var colorButtonEnabled: ({ - "default": Style.colorRectangle, - "primary": Style.colorGreen2, - "danger": Style.colorRed2 - }) - readonly property var colorButtonTextDisabled: ({ - "default": Style.colorWhite8, - "primary": Style.colorWhite13, - "danger": Style.colorWhite13 - }) - readonly property var colorButtonTextHovered: ({ - "default": Style.colorText, - "primary": Style.colorWhite11, - "danger": Style.colorWhite11 - }) - readonly property var colorButtonTextEnabled: ({ - "default": Style.colorText, - "primary": Style.colorWhite11, - "danger": Style.colorWhite11 - }) + readonly property string colorPlaceholderText: Style.colorWhite9 readonly property string colorSelectedText: Style.colorTheme9 readonly property string colorSelection: Style.colorGreen2 readonly property string colorTrendingLine: dark_theme ? Style.colorGreen : "#37a6ef" - readonly property string colorTrendingUnderLine: dark_theme ? Style.colorGradient3 : "#e3f2fd" - - readonly property string modalValueColor: colorWhite4 function getValueColor(v) { v = parseFloat(v) @@ -530,6 +478,7 @@ QtObject { "WBTC": "#CCCCCC", "YFI": "#006BE6", "ZRX": "#302C2C", - "UNI": "#FF007A" + "UNI": "#FF007A", + "RUNES": "#336699" }) } diff --git a/atomic_defi_design/Dex/Constants/DexTypo.qml b/atomic_defi_design/Dex/Constants/DexTypo.qml index 8a05b475d..b96093de3 100644 --- a/atomic_defi_design/Dex/Constants/DexTypo.qml +++ b/atomic_defi_design/Dex/Constants/DexTypo.qml @@ -8,7 +8,9 @@ import App 1.0 as App QtObject { id: _font + property real fontDensity: 1.0 + property real languageDensity: { switch (App.API.app.settings_pg.lang) { case "en": @@ -24,6 +26,7 @@ QtObject { } } property string fontFamily: "Ubuntu" + property font head1: Qt.font({ pixelSize: 96 * fontDensity, letterSpacing: -1.5, @@ -66,6 +69,12 @@ QtObject { family: fontFamily, weight: Font.Medium }) + property font head8: Qt.font({ + pixelSize: 16 * fontDensity, + letterSpacing: 0.15, + family: fontFamily, + weight: Font.Medium + }) property font subtitle1: Qt.font({ pixelSize: 16 * fontDensity, letterSpacing: 0.15, @@ -109,10 +118,22 @@ QtObject { family: fontFamily, weight: Font.Normal }) + property font subtitle3: Qt.font({ + pixelSize: 16 * fontDensity, + letterSpacing: 0.1, + family: fontFamily, + weight: 500 + }) property font monoSpace: Qt.font({ pixelSize: 14 * fontDensity, letterSpacing: 0, family: "Courier", weight: Font.Normal }) + property font monoSmall: Qt.font({ + pixelSize: 14 * fontDensity, + letterSpacing: 0.4, + family: "Courier", + weight: Font.Normal + }) } diff --git a/atomic_defi_design/Dex/Constants/General.qml b/atomic_defi_design/Dex/Constants/General.qml index c70ed6900..c75cc53ba 100644 --- a/atomic_defi_design/Dex/Constants/General.qml +++ b/atomic_defi_design/Dex/Constants/General.qml @@ -17,11 +17,16 @@ QtObject { readonly property string custom_coin_icons_path: os_file_prefix + API.app.settings_pg.get_custom_coins_icons_path() + "/" readonly property string providerIconsPath: image_path + "providers/" - function coinIcon(ticker) { - if(ticker === "" || ticker === "All" || ticker===undefined) { + function coinIcon(ticker) + { + if (ticker === "" || ticker === "All" || ticker===undefined ) + { return "" - } else { - if (['THC-BEP20'].indexOf(ticker) >= 0) { + } + else + { + if (['THC-BEP20'].indexOf(ticker) >= 0) + { return coin_icons_path + ticker.toString().toLowerCase().replace('-', '_') + ".png" } const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) @@ -38,6 +43,16 @@ QtObject { } } + function getNomicsId(ticker) { + if(ticker === "" || ticker === "All" || ticker===undefined) { + return "" + } else { + const nomics_id = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker).nomics_id + if (nomics_id == 'test-coin') return "" + return nomics_id + } + } + function coinContractAddress(ticker) { var cfg = API.app.trading_pg.get_raw_mm2_coin_cfg(ticker) if (cfg.hasOwnProperty('protocol')) { @@ -102,6 +117,39 @@ QtObject { } } + + function getProtocolText(ticker) { + if(ticker === "" || ticker === "All" || ticker===undefined) { + return "" + } else { + let token_platform = coinPlatform(ticker) + switch(token_platform) { + case "BNB": + return "Binance Smart Chain (BEP20 token)" + case "FTM": + return "Fantom (FTM20 token)" + case "ONE": + return "Harmony (HRC20 token)" + case "ETH": + return "Ethereum (ERC20 token)" + case "KCS": + return "KuCoin (KRC20 token)" + case "MATIC": + return "Polygon (PLG20 token)" + case "AVAX": + return "Avalanche (AVX20 token)" + case "HT": + return "Heco Chain (HCO20 token)" + case "MOVR": + return "Moonriver (MVR20 token)" + case "QTUM": + return "QTUM (QRC20 token)" + default: + return ticker + " (" + token_platform + ")" + } + } + } + function isIDO(ticker) { let IDO_chains = [] return IDO_chains.includes(ticker) @@ -277,18 +325,31 @@ QtObject { return JSON.stringify(j_obj, null, 4) } - function viewTxAtExplorer(ticker, id, add_0x=true) { - if(id !== '') { + function getTxExplorerURL(ticker, txid, add_0x=true) { + if(txid !== '') { const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - const id_prefix = (add_0x && coin_info.is_erc_family) ? '0x' : '' - Qt.openUrlExternally(coin_info.explorer_url + coin_info.tx_uri + id_prefix + id) + const txid_prefix = (add_0x && coin_info.is_erc_family) ? '0x' : '' + return coin_info.explorer_url + coin_info.tx_uri + txid_prefix + txid } } - function viewAddressAtExplorer(ticker, address) { + function getAddressExplorerURL(ticker, address) { if(address !== '') { const coin_info = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(ticker) - Qt.openUrlExternally(coin_info.explorer_url + coin_info.address_uri + address) + return coin_info.explorer_url + coin_info.address_uri + address + } + return "" + } + + function viewTxAtExplorer(ticker, txid, add_0x=true) { + if(txid !== '') { + Qt.openUrlExternally(getTxExplorerURL(ticker, txid, add_0x)) + } + } + + function viewAddressAtExplorer(ticker, address) { + if(address !== '') { + Qt.openUrlExternally(getAddressExplorerURL(ticker, address)) } } @@ -330,10 +391,10 @@ QtObject { return (num / si[i].value).toFixed(digits).replace(rx, "$1") + si[i].symbol } - function formatFiat(received, amount, fiat) { + function formatFiat(received, amount, fiat, precision=2) { return diffPrefix(received) + (fiat === API.app.settings_pg.current_fiat ? API.app.settings_pg.current_fiat_sign : API.app.settings_pg.current_currency_sign) - + " " + nFormatter(parseFloat(amount), 2) + + " " + (amount < 1E5 ? formatDouble(parseFloat(amount), precision, true) : nFormatter(parseFloat(amount), 2)) } function formatPercent(value, show_prefix=true) { @@ -344,7 +405,7 @@ QtObject { value *= -1 } - return (show_prefix ? prefix : '') + value + ' %' + return (show_prefix ? prefix : '') + parseFloat(value).toFixed(3) + ' %' } readonly property int amountPrecision: 8 @@ -372,8 +433,16 @@ QtObject { return trail_zeros ? full_double : full_double.replace(/\.?0+$/,"") } - function formatCrypto(received, amount, ticker, fiat_amount, fiat) { - return diffPrefix(received) + ticker + " " + formatDouble(amount) + (fiat_amount ? " (" + formatFiat("", fiat_amount, fiat) + ")" : "") + function getComparisonScale(value) { + return Math.min(Math.pow(10, getDigitCount(parseFloat(value))), 1000000000) + } + + function limitDigits(value) { + return parseFloat(formatDouble(value, 2)) + } + + function formatCrypto(received, amount, ticker, fiat_amount, fiat, precision, trail_zeros) { + return diffPrefix(received) + ticker + " " + formatDouble(amount, precision, trail_zeros) + (fiat_amount ? " (" + formatFiat("", fiat_amount, fiat) + ")" : "") } function formatFullCrypto(received, amount, ticker, fiat_amount, fiat, use_full_ticker) { @@ -457,15 +526,20 @@ QtObject { } function tokenUnitName(type) { - return type === "ERC-20" ? "Gwei" : "Satoshi" + return type === "QRC-20" ? "Satoshi" : "Gwei" } function isParentCoin(ticker) { - return ticker === "KMD" || ticker === "ETH" || ticker === "QTUM" + return ["KMD", "ETH", "MATIC", "AVAX", "FTM", "QTUM"].includes(ticker) } function isTokenType(type) { - return type === "ERC-20" || type === "QRC-20" + return ["ERC-20", "QRC-20", "PLG-20", "AVX-20", "FTM-20"].includes(type) + } + + function getFeesTicker(coin_info) { + if (coin_info.has_parent_fees_ticker) + return coin_info.fees_ticker } function getParentCoin(type) { @@ -633,7 +707,8 @@ QtObject { "ADA/BRZ": "BINANCE:ADABRL", "ADA/CADC": "EIGHTCAP:ADACAD", "ADA/BNB": "BINANCE:ADABNB", - "ADA/BCH": "HITBTC:ADABCH", + "ADA/BCH": "COINEX:ADABCH", + "ADA/KCS": "KUCOIN:ADAKCS", "ADX/BTC": "BINANCE:ADXBTC", "ADX/ETH": "BINANCE:ADXETH", "ADX/USDT": "BINANCE:ADXUSD", @@ -657,6 +732,7 @@ QtObject { "AAVE/PAX": "BINANCE:AAVEUSD", "AAVE/EURS": "KRAKEN:AAVEEUR", "AAVE/JEUR": "KRAKEN:AAVEEUR", + "AAVE/KCS": "KUCOIN:AAVEKCS", "AGIX/BTC": "BINANCE:AGIXBTC", "AGIX/ETH": "KUCOIN:AGIXETH", "AGIX/USDT": "BINANCE:AGIXUSD", @@ -694,6 +770,22 @@ QtObject { "ANT/BNB": "BINANCE:ANTBNB", "ANT/EURS": "KRAKEN:ANTEUR", "ANT/JEUR": "KRAKEN:ANTEUR", + "APE/BTC": "BINANCE:APEBTC", + "APE/ETH": "BINANCE:APEETH", + "APE/USDT": "FTX:APEUSD", + "APE/BUSD": "FTX:APEUSD", + "APE/USDC": "FTX:APEUSD", + "APE/TUSD": "FTX:APEUSD", + "APE/HUSD": "FTX:APEUSD", + "APE/UST": "FTX:APEUSD", + "APE/DAI": "FTX:APEUSD", + "APE/PAX": "FTX:APEUSD", + "APE/EURS": "COINBASE:APEEUR", + "APE/JEUR": "COINBASE:APEEUR", + "APE/JGBP": "BINANCE:APEGBP", + "APE/TRYB": "BINANCE:APETRY", + "APE/BRZ": "MERCADO:APEBRL", + "APE/BNB": "BINANCE:APEBNB", "ARPA/BTC": "BINANCE:ARPABTC", "ARPA/BNB": "BINANCE:ARPABNB", "ARPA/HT": "HUOBI:ARPAHT", @@ -729,7 +821,10 @@ QtObject { "ATOM/EURS": "KRAKEN:ATOMEUR", "ATOM/JEUR": "KRAKEN:ATOMEUR", "ATOM/JGBP": "KRAKEN:ATOMGBP", + "ATOM/TRYB": "BINANCE:ATOMTRY", + "ATOM/BRZ": "BINANCE:ATOMBRL", "ATOM/BCH": "HITBTC:ATOMBCH", + "ATOM/KCS": "KUCOIN:ATOMKCS", "AVA/BTC": "BINANCE:AVABTC", "AVA/ETH": "KUCOIN:AVAETH", "AVA/USDT": "BINANCE:AVAUSD", @@ -757,6 +852,7 @@ QtObject { "AVAX/BIDR": "BINANCE:AVAXBIDR", "AVAX/BRZ": "BINANCE:AVAXBRL", "AVAX/TRYB": "BINANCE:AVAXTRY", + "AVAX/BCH": "COINEX:AVAXBCH", "AXS/BTC": "BINANCE:AXSBTC", "AXS/ETH": "HUOBI:AXSETH", "AXS/USDT": "BINANCE:AXSUSD", @@ -772,6 +868,7 @@ QtObject { "AXS/JEUR": "KRAKEN:AXSEUR", "AXS/BRZ": "BINANCE:AXSBRL", "AXS/BIDR": "BINANCE:AXSBIDR", + "AXS/TRYB": "BINANCE:AXSTRY", "BAL/BTC": "BINANCE:BALBTC", "BAL/ETH": "HUOBI:BALETH", "BAL/USDT": "BINANCE:BALUSD", @@ -799,7 +896,6 @@ QtObject { "BAND/JEUR": "COINBASE:BANDEUR", "BAT/BTC": "BINANCE:BATBTC", "BAT/ETH": "BINANCE:BATETH", - "BAT/BNB": "BINANCE:BATBNB", "BAT/USDT": "BINANCE:BATUSD", "BAT/BUSD": "BINANCE:BATUSD", "BAT/USDC": "BINANCE:BATUSD", @@ -810,6 +906,8 @@ QtObject { "BAT/PAX": "BINANCE:BATUSD", "BAT/EURS": "KRAKEN:BATEUR", "BAT/JEUR": "KRAKEN:BATEUR", + "BAT/JPYC": "KRAKEN:BATJPY", + "BAT/BRZ": "MERCADO:BATBRL", "BEST/BTC": "BITPANDAPRO:BESTBTC", "BEST/USDT": "HITBTC:BESTUSD", "BEST/BUSD": "HITBTC:BESTUSD", @@ -839,6 +937,7 @@ QtObject { "BCH/JPYC": "KRAKEN:BCHJPY", "BCH/CADC": "EIGHTCAP:BCHCAD", "BCH/HT": "HUOBI:BCHHT", + "BCH/KCS": "KUCOIN:BCHKCS", "BIDR/USDT": "BINANCE:USDTBIDR", "BIDR/BUSD": "BINANCE:USDTBIDR", "BIDR/USDC": "BINANCE:USDTBIDR", @@ -873,6 +972,7 @@ QtObject { "BNB/BIDR": "BINANCE:BNBBIDR", "BNB/BRZ": "BINANCE:BNBBRL", "BNB/CADC": "EIGHTCAP:BNBCAD", + "BNB/KCS": "KUCOIN:BNBKCS", "BNT/BTC": "BINANCE:BNTBTC", "BNT/ETH": "BINANCE:BNTETH", "BNT/USDT": "BINANCE:BNTUSD", @@ -1032,6 +1132,7 @@ QtObject { "CHZ/EURS": "BINANCE:CHZEUR", "CHZ/JEUR": "BINANCE:CHZEUR", "CHZ/JGBP": "COINBASE:CHZGBP", + "CHZ/TRYB": "BINANCE:CHZTRY", "CHZ/BRZ": "BINANCE:CHZBRL", "COMP/BTC": "BINANCE:COMPBTC", "COMP/ETH": "KRAKEN:COMPETH", @@ -1108,11 +1209,8 @@ QtObject { "DASH/JEUR": "KRAKEN:DASHEUR", "DASH/JGBP": "EIGHTCAP:DSHGBP", "DASH/CADC": "EIGHTCAP:DSHCAD", - "DASH/TRYB": "BITFINEX:DSHTRY", - "DASH/BIDR": "BITFINEX:DSHIDR", - "DASH/BRZ": "EIGHTCAP:DSHBRL", - "DASH/BCH": "HITBTC:DASHBCH", "DASH/HT": "HUOBI:DASHHT", + "DASH/KCS": "KUCOIN:DASHKCS", "DOGE/BTC": "BINANCE:DOGEBTC", "DOGE/ETH": "HITBTC:DOGEETH", "DOGE/USDT": "BINANCE:DOGEUSD", @@ -1129,6 +1227,8 @@ QtObject { "DOGE/TRYB": "BINANCE:DOGETRY", "DOGE/BIDR": "BINANCE:DOGEBIDR", "DOGE/BRZ": "BINANCE:DOGEBRL", + "DOGE/BCH": "COINEX:DOGEBCH", + "DOGE/KCS": "KUCOIN:DOGEKCS", "DGB/BTC": "BINANCE:DGBBTC", "DGB/ETH": "BITTREX:DGBETH", "DGB/USDT": "BITTREX:DGBUSD", @@ -1139,7 +1239,6 @@ QtObject { "DGB/UST": "BITTREX:DGBUSD", "DGB/DAI": "BITTREX:DGBUSD", "DGB/PAX": "BITTREX:DGBUSD", - "DGB/BNB": "BINANCE:DGBBNB", "DGB/EURS": "BITTREX:DGBEUR", "DGB/JEUR": "BITTREX:DGBEUR", "DIA/BTC": "BINANCE:DIABTC", @@ -1182,8 +1281,17 @@ QtObject { "DOT/BRZ": "BINANCE:DOTBRL", "DOT/CADC": "EIGHTCAP:DOTCAD", "DOT/BNB": "BINANCE:DOTBNB", - "DX/BTC": "KUCOIN:DXBTC", - "DX/ETH": "KUCOIN:DXETH", + "DOT/BCH": "COINEX:DOTBCH", + "DOT/KCS": "KUCOIN:DOTKCS", + "DX/ETH": "SUSHISWAP:DXWETH", + "DX/USDT": "GATEIO:DXUSDT", + "DX/BUSD": "GATEIO:DXUSDT", + "DX/USDC": "GATEIO:DXUSDT", + "DX/TUSD": "GATEIO:DXUSDT", + "DX/HUSD": "GATEIO:DXUSDT", + "DX/UST": "GATEIO:DXUSDT", + "DX/DAI": "GATEIO:DXUSDT", + "DX/PAX": "GATEIO:DXUSDT", "EGLD/BTC": "BINANCE:EGLDBTC", "EGLD/USDT": "BINANCE:EGLDUSD", "EGLD/BUSD": "BINANCE:EGLDUSD", @@ -1207,6 +1315,7 @@ QtObject { "ELF/DAI": "BINANCE:ELFUSD", "ELF/PAX": "BINANCE:ELFUSD", "EMC2/BTC": "BITTREX:EMC2BTC", + "EMC2/ETH": "BITTREX:EMC2ETH", "EMC2/USDT": "BITTREX:EMC2USD", "EMC2/BUSD": "BITTREX:EMC2USD", "EMC2/USDC": "BITTREX:EMC2USD", @@ -1229,6 +1338,7 @@ QtObject { "ENJ/EURS": "BINANCE:ENJEUR", "ENJ/JEUR": "BINANCE:ENJEUR", "ENJ/JGBP": "BINANCE:ENJGBP", + "ENJ/TRYB": "BINANCE:ENJTRY", "ENJ/BRZ": "BINANCE:ENJBRL", "EOS/BTC": "BINANCE:EOSBTC", "EOS/ETH": "BINANCE:EOSETH", @@ -1249,6 +1359,7 @@ QtObject { "EOS/BIDR": "BITFINEX:EOSIDR", "EOS/JPYC": "BITFINEX:EOSJPY", "EOS/CADC": "EIGHTCAP:EOSCAD", + "EOS/KCS": "KUCOIN:EOSKCS", "ETC/BTC": "BINANCE:ETCBTC", "ETC/ETH": "BINANCE:ETCETH", "ETC/USDT": "BINANCE:ETCUSD", @@ -1278,7 +1389,7 @@ QtObject { "ETH/JGBP": "COINBASE:ETHGBP", "ETH/JCHF": "KRAKEN:ETHCHF", "ETH/TRYB": "BINANCE:ETHTRY", - "ETH/BIDR": "BITFINEX:ETHIDR", + "ETH/BIDR": "BINANCE:ETHBIDR", "ETH/BRZ": "BINANCE:ETHBRL", "ETH/JPYC": "BITFLYER:ETHJPY", "ETH/CADC": "KRAKEN:ETHCAD", @@ -1345,16 +1456,17 @@ QtObject { "FIL/BNB": "BINANCE:FILBNB", "FIL/EURS": "COINBASE:FILEUR", "FIL/JEUR": "COINBASE:FILEUR", + "FIL/TRYB": "BINANCE:FILTRY", "FIRO/BTC": "BINANCE:FIROBTC", - "FIRO/ETH": "BINANCE:FIROETH", - "FIRO/USDT": "BITTREX:FIROUSD", - "FIRO/BUSD": "BITTREX:FIROUSD", - "FIRO/USDC": "BITTREX:FIROUSD", - "FIRO/TUSD": "BITTREX:FIROUSD", - "FIRO/HUSD": "BITTREX:FIROUSD", - "FIRO/UST": "BITTREX:FIROUSD", - "FIRO/DAI": "BITTREX:FIROUSD", - "FIRO/PAX": "BITTREX:FIROUSD", + "FIRO/ETH": "HUOBI:FIROETH", + "FIRO/USDT": "BINANCE:FIROUSD", + "FIRO/BUSD": "BINANCE:FIROUSD", + "FIRO/USDC": "BINANCE:FIROUSD", + "FIRO/TUSD": "BINANCE:FIROUSD", + "FIRO/HUSD": "BINANCE:FIROUSD", + "FIRO/UST": "BINANCE:FIROUSD", + "FIRO/DAI": "BINANCE:FIROUSD", + "FIRO/PAX": "BINANCE:FIROUSD", "FLOW/BTC": "BINANCE:FLOWBTC", "FLOW/ETH": "KRAKEN:FLOWETH", "FLOW/USDT": "BINANCE:FLOWUSD", @@ -1392,13 +1504,17 @@ QtObject { "FTM/USDT": "BINANCE:FTMUSD", "FTM/BUSD": "BINANCE:FTMUSD", "FTM/USDC": "BINANCE:FTMUSD", - "FTM/FTM": "BINANCE:FTMUSD", + "FTM/TUSD": "BINANCE:FTMUSD", "FTM/HUSD": "BINANCE:FTMUSD", "FTM/UST": "BINANCE:FTMUSD", "FTM/DAI": "BINANCE:FTMUSD", "FTM/PAX": "BINANCE:FTMUSD", + "FTM/EURS": "BITSTAMP:FTMEUR", + "FTM/JEUR": "BITSTAMP:FTMEUR", "FTM/BNB": "BINANCE:FTMBNB", "FTM/BIDR": "BINANCE:FTMBIDR", + "FTM/BRZ": "BINANCE:FTMBRL", + "FTM/TRYB": "BINANCE:FTMTRY", "FUN/BTC": "BINANCE:FUNBTC", "FUN/ETH": "BINANCE:FUNETH", "FUN/USDT": "BINANCE:FUNUSD", @@ -1409,6 +1525,7 @@ QtObject { "FUN/UST": "BINANCE:FUNUSD", "FUN/DAI": "BINANCE:FUNUSD", "FUN/PAX": "BINANCE:FUNUSD", + "FUN/BNB": "BINANCE:FUNBNB", "GALA/BTC": "BINANCE:GALABTC", "GALA/ETH": "BINANCE:GALAETH", "GALA/USDT": "BINANCE:GALAUSD", @@ -1433,6 +1550,34 @@ QtObject { "GLEEC/UST": "BITTREX:GLEECUSD", "GLEEC/DAI": "BITTREX:GLEECUSD", "GLEEC/PAX": "BITTREX:GLEECUSD", + "GLMR/BTC": "BINANCE:GLMRBTC", + "GLMR/USDT": "BINANCE:GLMRUSD", + "GLMR/BUSD": "BINANCE:GLMRUSD", + "GLMR/USDC": "BINANCE:GLMRUSD", + "GLMR/TUSD": "BINANCE:GLMRUSD", + "GLMR/HUSD": "BINANCE:GLMRUSD", + "GLMR/UST": "BINANCE:GLMRUSD", + "GLMR/DAI": "BINANCE:GLMRUSD", + "GLMR/PAX": "BINANCE:GLMRUSD", + "GLMR/EURS": "KRAKEN:GLMREUR", + "GLMR/JEUR": "KRAKEN:GLMREUR", + "GLMR/BNB": "BINANCE:GLMRBNB", + "GMT/BTC": "BINANCE:GMTBTC", + "GMT/ETH": "BINANCE:GMTETH", + "GMT/USDT": "BINANCE:GMTUSD", + "GMT/BUSD": "BINANCE:GMTUSD", + "GMT/USDC": "BINANCE:GMTUSD", + "GMT/TUSD": "BINANCE:GMTUSD", + "GMT/HUSD": "BINANCE:GMTUSD", + "GMT/UST": "BINANCE:GMTUSD", + "GMT/DAI": "BINANCE:GMTUSD", + "GMT/PAX": "BINANCE:GMTUSD", + "GMT/EURS": "BINANCE:GMTEUR", + "GMT/JEUR": "BINANCE:GMTEUR", + "GMT/JGBP": "BINANCE:GMTGBP", + "GMT/TRYB": "BINANCE:GMTTRY", + "GMT/BRZ": "BINANCE:GMTBRL", + "GMT/BNB": "BINANCE:GMTBNB", "GNO/BTC": "BITTREX:GNOBTC", "GNO/ETH": "KRAKEN:GNOETH", "GNO/USDT": "KRAKEN:GNOUSD", @@ -1469,8 +1614,28 @@ QtObject { "GRT/JEUR": "COINBASE:GRTEUR", "GRT/TRYB": "BINANCE:GRTTRY", "GRT/BRZ": "MERCADO:GRTBRL", + "GRT/KCS": "KUCOIN:GRTKCS", + "GST/USDT": "COINBASE:GSTUSD", + "GST/BUSD": "COINBASE:GSTUSD", + "GST/USDC": "COINBASE:GSTUSD", + "GST/TUSD": "COINBASE:GSTUSD", + "GST/HUSD": "COINBASE:GSTUSD", + "GST/UST": "COINBASE:GSTUSD", + "GST/DAI": "COINBASE:GSTUSD", + "GST/PAX": "COINBASE:GSTUSD", + "GST/EURS": "KRAKEN:GSTEUR", + "GST/JEUR": "KRAKEN:GSTEUR", + "GST/TRYB": "FTX:GSTTRY", "HEX/BTC": "HITBTC:HEXBTC", - "HEX/USDC": "UNISWAP:HEXUSDC", + "HEX/ETH": "UNISWAP:HEXWETH", + "HEX/USDT": "POLONIEX:HEXUSDT", + "HEX/BUSD": "POLONIEX:HEXUSDT", + "HEX/USDC": "POLONIEX:HEXUSDT", + "HEX/TUSD": "POLONIEX:HEXUSDT", + "HEX/HUSD": "POLONIEX:HEXUSDT", + "HEX/UST": "POLONIEX:HEXUSDT", + "HEX/DAI": "POLONIEX:HEXUSDT", + "HEX/PAX": "POLONIEX:HEXUSDT", "HOT/BTC": "HITBTC:HOTBTC", "HOT/ETH": "BINANCE:HOTETH", "HOT/USDT": "HITBTC:HOTUSD", @@ -1484,6 +1649,7 @@ QtObject { "HOT/BNB": "BINANCE:HOTBNB", "HOT/EURS": "BINANCE:HOTEUR", "HOT/JEUR": "BINANCE:HOTEUR", + "HOT/TRYB": "BINANCE:HOTTRY", "HT/BTC": "HUOBI:HTBTC", "HT/ETH": "HUOBI:HTETH", "HT/USDT": "FTX:HTUSD", @@ -1504,6 +1670,9 @@ QtObject { "INJ/UST": "BINANCE:INJUSD", "INJ/DAI": "BINANCE:INJUSD", "INJ/PAX": "BINANCE:INJUSD", + "INJ/EURS": "KRAKEN:INJEUR", + "INJ/JEUR": "KRAKEN:INJEUR", + "INJ/TRYB": "BINANCE:INJTRY", "INJ/BNB": "BINANCE:INJBNB", "INK/BTC": "HITBTC:INKBTC", "INK/ETH": "HITBTC:INKETH", @@ -1567,8 +1736,17 @@ QtObject { "JPYC/BRZ": "FX_IDC:JPYBRL", "JPYC/TRYB": "FX_IDC:JPYTRY", "JRT/ETH": "UNISWAP:JRTWETH", + "KCS/BTC": "KUCOIN:KCSBTC", + "KCS/ETH": "KUCOIN:KCSETH", + "KCS/USDT": "KUCOIN:KCSUSDT", + "KCS/BUSD": "KUCOIN:KCSUSDT", + "KCS/USDC": "KUCOIN:KCSUSDT", + "KCS/TUSD": "KUCOIN:KCSUSDT", + "KCS/HUSD": "KUCOIN:KCSUSDT", + "KCS/UST": "KUCOIN:KCSUSDT", + "KCS/DAI": "KUCOIN:KCSUSDT", + "KCS/PAX": "KUCOIN:KCSUSDT", "KMD/BTC": "BINANCE:KMDBTC", - "KMD/ETH": "BINANCE:KMDETH", "KMD/USDT": "BINANCE:KMDUSD", "KMD/BUSD": "BINANCE:KMDUSD", "KMD/USDC": "BINANCE:KMDUSD", @@ -1577,8 +1755,6 @@ QtObject { "KMD/UST": "BINANCE:KMDUSD", "KMD/DAI": "BINANCE:KMDUSD", "KMD/PAX": "BINANCE:KMDUSD", - "KMD/TRYB": "BITTREX:KMDTRY", - "KMD/BIDR": "BITTREX:KMDIDR", "KNC/BTC": "BINANCE:KNCBTC", "KNC/ETH": "BINANCE:KNCETH", "KNC/USDT": "COINBASE:KNCUSD", @@ -1652,6 +1828,7 @@ QtObject { "LINK/JGBP": "COINBASE:LINKGBP", "LINK/TRYB": "BINANCE:LINKTRY", "LINK/BRZ": "BINANCE:LINKBRL", + "LINK/KCS": "KUCOIN:LINKKCS", "LRC/BTC": "BINANCE:LRCBTC", "LRC/ETH": "BINANCE:LRCETH", "LRC/USDT": "BINANCE:LRCUSD", @@ -1662,6 +1839,7 @@ QtObject { "LRC/UST": "BINANCE:LRCUSD", "LRC/DAI": "BINANCE:LRCUSD", "LRC/PAX": "BINANCE:LRCUSD", + "LRC/TRYB": "BINANCE:LRCTRY", "LTC/BTC": "BINANCE:LTCBTC", "LTC/ETH": "BINANCE:LTCETH", "LTC/USDT": "COINBASE:LTCUSD", @@ -1676,13 +1854,12 @@ QtObject { "LTC/EURS": "COINBASE:LTCEUR", "LTC/JEUR": "COINBASE:LTCEUR", "LTC/JGBP": "COINBASE:LTCGBP", - "LTC/TRYB": "BITFINEX:LTCTRY", - "LTC/BIDR": "BITFINEX:LTCIDR", "LTC/BRZ": "MERCADO:LTCBRL", "LTC/JPYC": "KRAKEN:LTCJPY", "LTC/CADC": "EIGHTCAP:LTCCAD", - "LTC/BCH": "HITBTC:LTCBCH", + "LTC/BCH": "COINEX:LTCBCH", "LTC/HT": "HUOBI:LTCHT", + "LTC/KCS": "KUCOIN:LTCKCS", "LUNA/BTC": "BINANCE:LUNABTC", "LUNA/ETH": "KUCOIN:LUNAETH", "LUNA/USDT": "BINANCE:LUNAUSD", @@ -1695,8 +1872,11 @@ QtObject { "LUNA/PAX": "BINANCE:LUNAUSD", "LUNA/EURS": "BINANCE:LUNAEUR", "LUNA/JEUR": "BINANCE:LUNAEUR", + "LUNA/TRYB": "BINANCE:LUNATRY", "LUNA/BNB": "BINANCE:LUNABNB", "LUNA/HT": "HUOBI:LUNAHT", + "LUNA/BCH": "COINEX:LUNABCH", + "LUNA/KCS": "KUCOIN:LUNAKCS", "MANA/BTC": "BINANCE:MANABTC", "MANA/ETH": "BINANCE:MANAETH", "MANA/USDT": "BINANCE:MANAUSD", @@ -1709,6 +1889,9 @@ QtObject { "MANA/PAX": "BINANCE:MANAUSD", "MANA/EURS": "KRAKEN:MANAEUR", "MANA/JEUR": "KRAKEN:MANAEUR", + "MANA/TRYB": "BINANCE:MANATRY", + "MANA/BRZ": "BINANCE:MANABRL", + "MANA/BNB": "BINANCE:MANABNB", "MATIC/BTC": "BINANCE:MATICBTC", "MATIC/ETH": "HUOBI:MATICETH", "MATIC/USDT": "BINANCE:MATICUSD", @@ -1740,6 +1923,7 @@ QtObject { "MIR/EURS": "COINBASE:MIREUR", "MIR/JEUR": "COINBASE:MIREUR", "MIR/JGBP": "COINBASE:MIRGBP", + "MIR/KCS": "KUCOIN:MIRKCS", "MKR/BTC": "BINANCE:MKRBTC", "MKR/ETH": "BITFINEX:MKRETH", "MKR/BNB": "BINANCE:MKRBNB", @@ -1765,6 +1949,18 @@ QtObject { "MONA/DAI": "BITTREX:MONAUSD", "MONA/PAX": "BITTREX:MONAUSD", "MONA/JPYC": "BITFLYER:MONAJPY", + "MOVR/BTC": "BINANCE:MOVRBTC", + "MOVR/ETH": "KUCOIN:MOVRETH", + "MOVR/USDT": "KRAKEN:MOVRUSD", + "MOVR/BUSD": "KRAKEN:MOVRUSD", + "MOVR/USDC": "KRAKEN:MOVRUSD", + "MOVR/TUSD": "KRAKEN:MOVRUSD", + "MOVR/HUSD": "KRAKEN:MOVRUSD", + "MOVR/UST": "KRAKEN:MOVRUSD", + "MOVR/DAI": "KRAKEN:MOVRUSD", + "MOVR/PAX": "KRAKEN:MOVRUSD", + "MOVR/EURS": "KRAKEN:MOVREUR", + "MOVR/JEUR": "KRAKEN:MOVREUR", "NAV/BTC": "BINANCE:NAVBTC", "NAV/USDT": "BINANCE:NAVUSD", "NAV/BUSD": "BINANCE:NAVUSD", @@ -1784,6 +1980,7 @@ QtObject { "NEAR/UST": "BINANCE:NEARUSD", "NEAR/DAI": "BINANCE:NEARUSD", "NEAR/PAX": "BINANCE:NEARUSD", + "NEAR/TRYB": "BINANCE:NEARTRY", "NEAR/BNB": "BINANCE:NEARBNB", "NEXO/BTC": "HUOBI:NEXOBTC", "NEXO/ETH": "HUOBI:NEXOETH", @@ -1795,6 +1992,15 @@ QtObject { "NEXO/UST": "BITFINEX:NEXOUSD", "NEXO/DAI": "BITFINEX:NEXOUSD", "NEXO/PAX": "BITFINEX:NEXOUSD", + "NMC/BTC": "COINEX:NMCBTC", + "NMC/USDT": "COINEX:NMCUSDT", + "NMC/BUSD": "COINEX:NMCUSDT", + "NMC/USDC": "COINEX:NMCUSDT", + "NMC/TUSD": "COINEX:NMCUSDT", + "NMC/HUSD": "COINEX:NMCUSDT", + "NMC/UST": "COINEX:NMCUSDT", + "NMC/DAI": "COINEX:NMCUSDT", + "NMC/PAX": "COINEX:NMCUSDT", "NZDS/USDT": "FX:NZDUSD", "NZDS/BUSD": "FX:NZDUSD", "NZDS/USDC": "FX:NZDUSD", @@ -1858,6 +2064,7 @@ QtObject { "ONE/UST": "BINANCE:ONEUSD", "ONE/DAI": "BINANCE:ONEUSD", "ONE/PAX": "BINANCE:ONEUSD", + "ONE/TRYB": "BINANCE:ONETRY", "ONE/BNB": "BINANCE:ONEBNB", "ONE/HT": "HUOBI:ONEHT", "ONT/BTC": "BINANCE:ONTBTC", @@ -2020,7 +2227,17 @@ QtObject { "RSR/PAX": "BINANCE:RSRUSD", "RSR/BNB": "BINANCE:RSRBNB", "RSR/HT": "HUOBI:RSRHT", + "RTM/BTC": "COINEX:RTMBTC", + "RTM/USDT": "COINEX:RTMUSDT", + "RTM/BUSD": "COINEX:RTMUSDT", + "RTM/USDC": "COINEX:RTMUSDT", + "RTM/TUSD": "COINEX:RTMUSDT", + "RTM/HUSD": "COINEX:RTMUSDT", + "RTM/UST": "COINEX:RTMUSDT", + "RTM/DAI": "COINEX:RTMUSDT", + "RTM/PAX": "COINEX:RTMUSDT", "RVN/BTC": "BINANCE:RVNBTC", + "RVN/ETH": "BITTREX:RVNETH", "RVN/USDT": "BINANCE:RVNUSD", "RVN/BUSD": "BINANCE:RVNUSD", "RVN/USDC": "BINANCE:RVNUSD", @@ -2030,8 +2247,39 @@ QtObject { "RVN/DAI": "BINANCE:RVNUSD", "RVN/PAX": "BINANCE:RVNUSD", "RVN/TRYB": "BINANCE:RVNTRY", - "RVN/BNB": "BINANCE:RVNBNB", "RVN/HT": "HUOBI:RVNHT", + "SAND/BTC": "BINANCE:SANDBTC", + "SAND/ETH": "BINANCE:SANDETH", + "SAND/USDT": "BINANCE:SANDUSD", + "SAND/BUSD": "BINANCE:SANDUSD", + "SAND/USDC": "BINANCE:SANDUSD", + "SAND/TUSD": "BINANCE:SANDUSD", + "SAND/HUSD": "BINANCE:SANDUSD", + "SAND/UST": "BINANCE:SANDUSD", + "SAND/DAI": "BINANCE:SANDUSD", + "SAND/PAX": "BINANCE:SANDUSD", + "SAND/EURS": "KRAKEN:SANDEUR", + "SAND/JEUR": "KRAKEN:SANDEUR", + "SAND/JGBP": "KRAKEN:SANDGBP", + "SAND/TRYB": "BINANCE:SANDTRY", + "SAND/BIDR": "BINANCE:SANDBIDR", + "SAND/BRZ": "BINANCE:SANDBRL", + "SAND/BNB": "BINANCE:SANDBNB", + "SAND/HT": "HUOBI:SANDHT", + "SHIB/USDT": "FTX:SHIBUSD", + "SHIB/BUSD": "FTX:SHIBUSD", + "SHIB/USDC": "FTX:SHIBUSD", + "SHIB/TUSD": "FTX:SHIBUSD", + "SHIB/HUSD": "FTX:SHIBUSD", + "SHIB/UST": "FTX:SHIBUSD", + "SHIB/DAI": "FTX:SHIBUSD", + "SHIB/PAX": "FTX:SHIBUSD", + "SHIB/EURS": "BINANCE:SHIBEUR", + "SHIB/JEUR": "BINANCE:SHIBEUR", + "SHIB/JGBP": "COINBASE:SHIBGBP", + "SHIB/TRYB": "BINANCE:SHIBTRY", + "SHIB/BRZ": "BINANCE:SHIBBRL", + "SHIB/DOGE": "BINANCE:SHIBDOGE", "SHR/BTC": "KUCOIN:SHRBTC", "SHR/USDT": "BITTREX:SHRUSD", "SHR/BUSD": "BITTREX:SHRUSD", @@ -2094,6 +2342,7 @@ QtObject { "SOL/BRZ": "BINANCE:SOLBRL", "SOL/CADC": "EIGHTCAP:SOLCAD", "SOL/BNB": "BINANCE:SOLBNB", + "SOL/BCH": "COINEX:SOLBCH", "SPC/BTC": "BITTREX:SPCBTC", "SPC/ETH": "HITBTC:SPCETH", "SPC/USDT": "HITBTC:SPCUSDT", @@ -2170,8 +2419,14 @@ QtObject { "TEL/UST": "KUCOIN:TELUSDT", "TEL/DAI": "KUCOIN:TELUSDT", "TEL/PAX": "KUCOIN:TELUSDT", - "TMTG/BTC": "OKEX:TMTGBTC", "TMTG/USDT": "OKEX:TMTGUSDT", + "TMTG/BUSD": "OKEX:TMTGUSDT", + "TMTG/USDC": "OKEX:TMTGUSDT", + "TMTG/TUSD": "OKEX:TMTGUSDT", + "TMTG/HUSD": "OKEX:TMTGUSDT", + "TMTG/UST": "OKEX:TMTGUSDT", + "TMTG/DAI": "OKEX:TMTGUSDT", + "TMTG/PAX": "OKEX:TMTGUSDT", "TRAC/BTC": "KUCOIN:TRACBTC", "TRAC/ETH": "KUCOIN:TRACETH", "TRAC/USDT": "BITTREX:TRACUSD", @@ -2199,6 +2454,7 @@ QtObject { "TRX/TRYB": "BINANCE:TRXTRY", "TRX/CADC": "EIGHTCAP:TRXCAD", "TRX/BCH": "HITBTC:TRXBCH", + "TRX/KCS": "KUCOIN:TRXKCS", "TRYB/USDT": "FX_IDC:TRYUSD", "TRYB/BUSD": "FX_IDC:TRYUSD", "TRYB/USDC": "FX_IDC:TRYUSD", @@ -2242,6 +2498,7 @@ QtObject { "UMA/PAX": "COINBASE:UMAUSD", "UMA/EURS": "COINBASE:UMAEUR", "UMA/JEUR": "COINBASE:UMAEUR", + "UMA/TRYB": "BINANCE:UMATRY", "UNI/BTC": "BINANCE:UNIBTC", "UNI/ETH": "KRAKEN:UNIETH", "UNI/USDT": "COINBASE:UNIUSD", @@ -2257,6 +2514,7 @@ QtObject { "UNI/JEUR": "KRAKEN:UNIEUR", "UNI/JGBP": "EIGHTCAP:UNIGBP", "UNI/CADC": "EIGHTCAP:UNICAD", + "UNI/KCS": "KUCOIN:UNIKCS", "UOS/BTC": "BITFINEX:UOSBTC", "UOS/USDT": "BITFINEX:UOSUSD", "UOS/BUSD": "BITFINEX:UOSUSD", @@ -2295,6 +2553,23 @@ QtObject { "VAL/UST": "BITTREX:VALUSD", "VAL/DAI": "BITTREX:VALUSD", "VAL/PAX": "BITTREX:VALUSD", + "VET/BTC": "BINANCE:VETBTC", + "VET/ETH": "BINANCE:VETETH", + "VET/USDT": "BINANCE:VETUSD", + "VET/BUSD": "BINANCE:VETUSD", + "VET/USDC": "BINANCE:VETUSD", + "VET/TUSD": "BINANCE:VETUSD", + "VET/HUSD": "BINANCE:VETUSD", + "VET/UST": "BINANCE:VETUSD", + "VET/DAI": "BINANCE:VETUSD", + "VET/PAX": "BINANCE:VETUSD", + "VET/EURS": "BINANCE:VETEUR", + "VET/JEUR": "BINANCE:VETEUR", + "VET/JGBP": "BINANCE:VETGBP", + "VET/TRYB": "BINANCE:VETTRY", + "VET/CADC": "EIGHTCAP:VETCAD", + "VET/BNB": "BINANCE:VETBNB", + "VET/KCS": "KUCOIN:VETKCS", "VITE/BTC": "BINANCE:VITEBTC", "VITE/USDT": "BINANCE:VITEUSD", "VITE/BUSD": "BINANCE:VITEUSD", @@ -2313,6 +2588,20 @@ QtObject { "VRA/UST": "BITTREX:VRAUSD", "VRA/DAI": "BITTREX:VRAUSD", "VRA/PAX": "BITTREX:VRAUSD", + "WAVES/BTC": "BINANCE:WAVESBTC", + "WAVES/ETH": "BINANCE:WAVESETH", + "WAVES/USDT": "BINANCE:WAVESUSD", + "WAVES/BUSD": "BINANCE:WAVESUSD", + "WAVES/USDC": "BINANCE:WAVESUSD", + "WAVES/TUSD": "BINANCE:WAVESUSD", + "WAVES/HUSD": "BINANCE:WAVESUSD", + "WAVES/UST": "BINANCE:WAVESUSD", + "WAVES/DAI": "BINANCE:WAVESUSD", + "WAVES/PAX": "BINANCE:WAVESUSD", + "WAVES/EURS": "KRAKEN:WAVESEUR", + "WAVES/JEUR": "KRAKEN:WAVESEUR", + "WAVES/TRYB": "BINANCE:WAVESTRY", + "WAVES/BNB": "BINANCE:WAVESBNB", "WBTC/BTC": "BINANCE:WBTCBTC", "WBTC/ETH": "BINANCE:WBTCETH", "WBTC/USDT": "COINBASE:WBTCUSD", @@ -2331,6 +2620,7 @@ QtObject { "XEC/UST": "BITFINEX:XECUSD", "XEC/DAI": "BITFINEX:XECUSD", "XEC/PAX": "BITFINEX:XECUSD", + "XEC/BCH": "COINEX:XECBCH", "XEP/USDT": "BITTREX:XEPUSDT", "XEP/BUSD": "BITTREX:XEPUSDT", "XEP/USDC": "BITTREX:XEPUSDT", @@ -2356,15 +2646,15 @@ QtObject { "XLM/JPYC": "BITFLYER:XLMJPY", "XLM/CADC": "EIGHTCAP:XLMCAD", "XLM/BCH": "HITBTC:XLMBCH", - "XMY/BTC": "BITTREX:XMYBTC", - "XMY/USDT": "BITTREX:XMYUSD", - "XMY/BUSD": "BITTREX:XMYUSD", - "XMY/USDC": "BITTREX:XMYUSD", - "XMY/TUSD": "BITTREX:XMYUSD", - "XMY/HUSD": "BITTREX:XMYUSD", - "XMY/UST": "BITTREX:XMYUSD", - "XMY/DAI": "BITTREX:XMYUSD", - "XMY/PAX": "BITTREX:XMYUSD", + "XLM/KCS": "KUCOIN:XLMKCS", + "XMY/USDT": "BITTREX:XMYUSDT", + "XMY/BUSD": "BITTREX:XMYUSDT", + "XMY/USDC": "BITTREX:XMYUSDT", + "XMY/TUSD": "BITTREX:XMYUSDT", + "XMY/HUSD": "BITTREX:XMYUSDT", + "XMY/UST": "BITTREX:XMYUSDT", + "XMY/DAI": "BITTREX:XMYUSDT", + "XMY/PAX": "BITTREX:XMYUSDT", "XRP/BTC": "BINANCE:XRPBTC", "XRP/ETH": "BINANCE:XRPETH", "XRP/USDT": "BITSTAMP:XRPUSD", @@ -2385,9 +2675,10 @@ QtObject { "XRP/BRZ": "MERCADO:XRPBRL", "XRP/JPYC": "KRAKEN:XRPJPY", "XRP/CADC": "KRAKEN:XRPCAD", - "XRP/BCH": "HITBTC:XRPBCH", + "XRP/BCH": "COINEX:XRPBCH", "XRP/HT": "HUOBI:XRPHT", "XRP/TRX": "POLONIEX:XRPTRX", + "XRP/KCS": "KUCOIN:XRPKCS", "XSGD/USDT": "FX_IDC:SGDUSD", "XSGD/BUSD": "FX_IDC:SGDUSD", "XSGD/USDC": "FX_IDC:SGDUSD", @@ -2416,7 +2707,9 @@ QtObject { "XTZ/BNB": "BINANCE:XTZBNB", "XTZ/EURS": "KRAKEN:XTZEUR", "XTZ/JEUR": "KRAKEN:XTZEUR", + "XTZ/TRYB": "BINANCE:XTZTRY", "XTZ/TRX": "POLONIEX:XTZTRX", + "XTZ/KCS": "KUCOIN:XTZKCS", "XVS/BTC": "BINANCE:XVSBTC", "XVS/USDT": "BINANCE:XVSUSD", "XVS/BUSD": "BINANCE:XVSUSD", @@ -2464,8 +2757,9 @@ QtObject { "ZEC/BNB": "BINANCE:ZECBNB", "ZEC/EURS": "KRAKEN:ZECEUR", "ZEC/JEUR": "KRAKEN:ZECEUR", - "ZEC/BCH": "HITBTC:ZECBCH", + "ZEC/BCH": "GEMINI:ZECBCH", "ZEC/LTC": "GEMINI:ZECLTC", + "ZEC/KCS": "KUCOIN:ZECKCS", "ZIL/BTC": "BINANCE:ZILBTC", "ZIL/ETH": "BINANCE:ZILETH", "ZIL/USDT": "BINANCE:ZILUSD", @@ -2477,6 +2771,7 @@ QtObject { "ZIL/DAI": "BINANCE:ZILUSD", "ZIL/PAX": "BINANCE:ZILUSD", "ZIL/BIDR": "BINANCE:ZILBIDR", + "ZIL/TRYB": "BINANCE:ZILTRY", "ZIL/BNB": "BINANCE:ZILBNB", "ZRX/BTC": "BINANCE:ZRXBTC", "ZRX/ETH": "BINANCE:ZRXETH", diff --git a/atomic_defi_design/Dex/Constants/Style.qml b/atomic_defi_design/Dex/Constants/Style.qml index 39fe3772b..a99678c49 100644 --- a/atomic_defi_design/Dex/Constants/Style.qml +++ b/atomic_defi_design/Dex/Constants/Style.qml @@ -32,15 +32,6 @@ QtObject { readonly property int animationDuration: 125 - readonly property int textSizeVerySmall1: 1 - readonly property int textSizeVerySmall2: 2 - readonly property int textSizeVerySmall3: 3 - readonly property int textSizeVerySmall4: 4 - readonly property int textSizeVerySmall5: 5 - readonly property int textSizeVerySmall6: 6 - readonly property int textSizeVerySmall7: 7 - readonly property int textSizeVerySmall8: 8 - readonly property int textSizeVerySmall9: 9 readonly property int textSizeSmall: 10 readonly property int textSizeSmall1: 11 readonly property int textSizeSmall2: 12 @@ -138,10 +129,6 @@ QtObject { property string colorRectangle: dark_theme ? colorTheme7 : colorTheme7 readonly property string colorInnerBackground: dark_theme ? colorTheme7 : colorTheme7 - readonly property string colorGradient1: dark_theme ? colorTheme9 : colorTheme9 - readonly property string colorGradient2: dark_theme ? colorTheme5 : colorTheme5 - readonly property string colorGradient3: dark_theme ? "#24283D" : "#24283D" - readonly property string colorGradient4: dark_theme ? "#0D0F21" : "#0D0F21" readonly property string colorDropShadowLight: dark_theme ? "#216975a4" : "#21FFFFFF" readonly property string colorDropShadowLight2: dark_theme ? "#606975a4" : "#60FFFFFF" readonly property string colorDropShadowDark: dark_theme ? "#FF050615" : "#BECDE2" @@ -172,58 +159,18 @@ QtObject { readonly property string colorRectangleBorderGradient1: dark_theme ? "#2A2F48" : "#DDDDDD" readonly property string colorRectangleBorderGradient2: dark_theme ? "#0D1021" : "#EFEFEF" - readonly property string colorChartText: dark_theme ? "#405366" : "#B5B9C1" - readonly property string colorChartLegendLine: dark_theme ? "#3F5265" : "#BDC0C8" - readonly property string colorChartGrid: dark_theme ? "#202333" : "#E6E8ED" - readonly property string colorChartLineText: dark_theme ? "#405366" : "#FFFFFF" - - readonly property string colorChartMA1: dark_theme ? "#5BC6FA" : "#5BC6FA" - readonly property string colorChartMA2: dark_theme ? "#F1D17F" : "#F1D17F" - readonly property string colorLineBasic: dark_theme ? "#303344" : "#303344" readonly property string colorText: dark_theme ? Style.colorWhite1 : "#405366" readonly property string colorText2: dark_theme ? "#79808C" : "#3C5368" readonly property string colorTextDisabled: dark_theme ? Style.colorWhite8 : "#B5B9C1" - readonly property var colorButtonDisabled: ({ - "default": Style.colorTheme9, - "primary": Style.colorGreen3, - "danger": Style.colorRed3 - }) - readonly property var colorButtonHovered: ({ - "default": Style.colorTheme6, - "primary": Style.colorGreen, - "danger": Style.colorRed - }) - readonly property var colorButtonEnabled: ({ - "default": Style.colorRectangle, - "primary": Style.colorGreen2, - "danger": Style.colorRed2 - }) - readonly property var colorButtonTextDisabled: ({ - "default": Style.colorWhite8, - "primary": Style.colorWhite13, - "danger": Style.colorWhite13 - }) - readonly property var colorButtonTextHovered: ({ - "default": Style.colorText, - "primary": Style.colorWhite11, - "danger": Style.colorWhite11 - }) - readonly property var colorButtonTextEnabled: ({ - "default": Style.colorText, - "primary": Style.colorWhite11, - "danger": Style.colorWhite11 - }) + readonly property string colorPlaceholderText: Style.colorWhite9 readonly property string colorSelectedText: Style.colorTheme9 readonly property string colorSelection: Style.colorGreen2 readonly property string colorTrendingLine: dark_theme ? Style.colorGreen : "#37a6ef" - readonly property string colorTrendingUnderLine: dark_theme ? Style.colorGradient3 : "#e3f2fd" - - readonly property string modalValueColor: colorWhite4 function getValueColor(v) { v = parseFloat(v) @@ -279,9 +226,11 @@ QtObject { readonly property var colorCoin: ({ "ABY": "#8B0D10", + "ACTN": "#E84142", "ADA": "#214D78", "ADX": "#1B75BC", "ANKR": "#2075E8", + "APE": "#0052F2", "ARPA": "#CCD9E2", "ARRR": "#C7A34C", "ATOM": "#474B6C", @@ -319,8 +268,10 @@ QtObject { "GLEEC": "#8C41FF", "GRMS": "#12B690", "GMS": "#0BFBE2", + "GMT": "#E9CB7B", "GRS": "#377E96", "GRT": "#6E54DB", + "GST": "#D7D7D7", "IOTA": "#404040", "IC": "#72009D", "JSTR": "#627EEA", @@ -338,6 +289,7 @@ QtObject { "JPYC": "#16449A", "DASH": "#008CE7", "RVN": "#384182", + "SAND": "#05C1F4", "CADC": "#FF6666", "DGB": "#006AD2", "DIA": "#B94897", @@ -384,10 +336,12 @@ QtObject { "JCHF": "#D80027", "JEUR": "#003399", "JGBP": "#C8102E", + "JJPY": "#BC002D", "JRT": "#5EFC84", "SUPERNET": "#F69B57", "REVS": "#F69B57", - "ILN": "#523170", + "EILN": "#1ADEC9", + "ILN": "#814EB1", "VRSC": "#3164D3", "WCN": "#E49F00", "WWCN": "#E49F00", @@ -461,6 +415,7 @@ QtObject { "OMG": "#595959", "ONE": "#00BEEE", "ONT": "#2692AF", + "PND": "#EBD430", "POWR": "#05BCAA", "PPC": "#46BC60", "PRUX": "#FF8000", @@ -493,9 +448,11 @@ QtObject { "UNO": "#2F87BB", "UST": "#5493F7", "VAL": "#1EEC84", + "VET": "#18C6FF", "VITE": "#007AFF", "VRM": "#586A7A", "WSB": "#FEBB84", + "WAVES": "#016BFF", "WBTC": "#CCCCCC", "WHIVE": "#FFCC00", "XEC": "#273498", @@ -514,6 +471,7 @@ QtObject { "ZRX": "#302C2C", "UNI": "#FF007A", "VOTE2022": "#7490AA", - "USBL": "#279553" + "USBL": "#279553", + "RUNES": "#336699" }) } diff --git a/atomic_defi_design/Dex/Dashboard/NewUpdateModal.qml b/atomic_defi_design/Dex/Dashboard/NewUpdateModal.qml deleted file mode 100644 index a79589df4..000000000 --- a/atomic_defi_design/Dex/Dashboard/NewUpdateModal.qml +++ /dev/null @@ -1,189 +0,0 @@ -// Qt imports -import QtQml 2.15 //> Component -import QtQuick.Layouts 1.15 //> Layout.fillWidth -import QtQuick.Controls 2.15 //> ProgressBar - -// Project imports -import "../Components" //> MultipageModal -import "../Constants" -import App 1.0 //> API.app.self_update_service - -MultipageModal -{ - id: root - - readonly property var self_update_service: API.app.self_update_service - readonly property string last_release_tag_name: self_update_service.last_release_tag_name - readonly property bool update_needed: self_update_service.update_needed - readonly property bool update_downloading: self_update_service.update_downloading - readonly property real update_download_progress: self_update_service.update_download_progress - readonly property bool update_ready: self_update_service.update_ready - property bool invalid_update_files: self_update_service.invalid_update_files - // Display the good modal section according to current self update service state - function select_index() - { - if (invalid_update_files) - { - invalid_update_files = false - currentIndex = 0 - close() - update_invalid_checksum.open() - } - else if (update_ready) - { - currentIndex = 4 - visible = true - } - else if (update_downloading) - { - currentIndex = 3 - visible = true - } - else if (update_needed) - { - currentIndex = 2 - visible = true - } - else if (currentIndex === 1) - { - currentIndex = 0 - } - else - { - currentIndex = 1 - } - } - - // Fetches latest update info when opening this modal. - onOpened: - { - select_index() - self_update_service.fetch_last_release_info() - } - - onUpdate_neededChanged: select_index() - onUpdate_downloadingChanged: select_index() - onUpdate_readyChanged: select_index() - onInvalid_update_filesChanged: select_index() - - // Section when fetching update - MultipageModalContent - { - titleText: qsTr("Searching new updates...") - titleAlignment: Label.AlignHCenter - - DefaultText - { - horizontalAlignment: Label.AlignHCenter - text: qsTr("Please wait while the application is finding a new update... You can close this modal if you want.") - } - } - - // Section when no new update is found. - MultipageModalContent - { - titleText: qsTr("Already updated") - titleAlignment: Label.AlignHCenter - - - DefaultText - { - horizontalAlignment: Label.AlignHCenter - Layout.fillWidth: true - text: qsTr("%1 is already up-to-date !").arg(API.app_name) - } - footer: - [ - DexAppButton - { - text: qsTr("Close") - Layout.alignment: Qt.AlignHCenter - onClicked: root.visible = false - } - ] - } - - // Second section. Asks user to update its client. - MultipageModalContent - { - titleText: qsTr("New update detected !") - - DefaultText - { - Layout.fillWidth: true - - text: qsTr("Do you want to update %1 from %2 to %3 ?") - .arg(API.app_name).arg(API.current_version).arg(last_release_tag_name) - } - - footer: - [ - PrimaryButton - { - text: qsTr("Download") - - onClicked: self_update_service.download_update() - }, - DefaultButton - { - text: qsTr("Remind me later") - - onClicked: root.visible = false - } - ] - } - - // Download progress bar - MultipageModalContent - { - titleText: qsTr("Download in progress...") - - RowLayout - { - Layout.fillWidth: true - - ProgressBar - { - Layout.fillWidth: true - value: update_download_progress - } - - DefaultText - { - Layout.preferredWidth: 40 - text: "%1 %".arg(Math.round(update_download_progress * 100)) - } - } - } - - // Update download finished... Asks for restart - MultipageModalContent - { - titleText: qsTr("Update downloaded") - - DefaultText - { - text: qsTr("Update has been successfully downloaded. Do you want to restart the application now ?") - } - - footer: - [ - PrimaryButton - { - text: qsTr("Restart now") - - onClicked: - { - self_update_service.perform_update() - root.visible = false - } - }, - DefaultButton - { - text: qsTr("Restart later") - - onClicked: close() - } - ] - } -} diff --git a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml index b2fc7f3a9..0473fda9e 100644 --- a/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml +++ b/atomic_defi_design/Dex/Dashboard/NotificationsModal.qml @@ -61,7 +61,7 @@ DexPopup }, { icon: Qaterial.Icons.messageOutline, - color: DexTheme.foregroundColor, + color: Dex.CurrentTheme.foregroundColor, gradient: default_gradient }] backgroundColor: Dex.CurrentTheme.floatingBackgroundColor @@ -106,22 +106,17 @@ DexPopup root.open() break case "open_wallet_page": - api_wallet_page.ticker = notification.params.ticker - dashboard.switchPage(Dashboard.PageType.Wallet) + API.app.wallet_pg.ticker = notification.params.ticker + app.pageLoader.item.switchPage(Dashboard.PageType.Wallet) break case "open_swaps_page": - dashboard.switchPage(Dashboard.PageType.DEX) - - dashboard.loader.onLoadComplete = () => - { - dashboard.current_component.current_page = dashboard.isSwapDone(notification.params.new_swap_status) ? idx_exchange_history : idx_exchange_orders - } + app.pageLoader.item.switchPage(Dashboard.PageType.DEX) break case "open_log_modal": showError(notification.title, notification.long_message) break default: - console.log("Unknown notification click action", notification.click_action) + console.warn("Unknown notification click action", notification.click_action) break } } @@ -389,6 +384,7 @@ DexPopup if (API.app.settings_pg.notification_enabled) tray.showMessage(title, message) } + SystemTrayIcon { id: tray @@ -396,12 +392,14 @@ DexPopup iconSource: General.image_path + "dex-tray-icon.png" tooltip: API.app_name + onMessageClicked: { if (notifications_list.length > 0) performNotificationAction(notifications_list[0]) showApp() } + menu: Menu { MenuItem @@ -430,7 +428,8 @@ DexPopup anchors.margins: 30 anchors.topMargin: 20 spacing: 24 - DexLabel + + DefaultText { Layout.fillWidth: true font @@ -460,7 +459,7 @@ DexPopup { anchors.centerIn: parent visible: !list.visible - text_value: qsTr("There isn't any notification") + text_value: qsTr("There aren't any notifications") font.pixelSize: 14 } @@ -472,13 +471,17 @@ DexPopup height: parent.height anchors.horizontalCenter: parent.horizontalCenter model: notifications_list + delegate: Item { + height: _column.height + 10 + width: list.width Rectangle { anchors.fill: parent opacity: 0.7 + gradient: Gradient { orientation: Qt.Horizontal @@ -500,8 +503,6 @@ DexPopup notifications_list.splice(index, 1) notifications_list = notifications_list } - height: _column.height + 10 - width: list.width RowLayout { @@ -510,29 +511,31 @@ DexPopup { Layout.fillHeight: true Layout.preferredWidth: 60 + Rectangle { width: 23 height: 23 radius: 12 gradient: notification_map[modelData.kind].gradient - anchors.right: parent.right anchors.rightMargin: -5 y: 13 + Qaterial.Icon { anchors.centerIn: parent size: 16 icon: notification_map[modelData.kind].icon - } } } + Item { Layout.fillHeight: true Layout.fillWidth: true + Column { id: _column @@ -541,28 +544,31 @@ DexPopup topPadding: 10 bottomPadding: 5 spacing: 5 - DexLabel + + DefaultText { text: modelData.title font: DexTypo.subtitle1 width: parent.width wrapMode: Label.Wrap } - DexLabel + + DefaultText { text: modelData.message font: DexTypo.subtitle2 width: parent.width - 20 wrapMode: Label.Wrap } - DexLabel + + DefaultText { text: modelData.human_date font: DexTypo.caption opacity: 0.7 } - } + Qaterial.AppBarButton { id: action_button @@ -571,8 +577,9 @@ DexPopup anchors.right: parent.right anchors.rightMargin: 5 anchors.bottomMargin: -4 - foregroundColor: DexTheme.foregroundColor + foregroundColor: Dex.CurrentTheme.foregroundColor visible: modelData.event_name !== "check" + icon.source: { let name @@ -611,11 +618,13 @@ DexPopup console.log("Retrying to enable", event_before_removal.params.coin, "asset...") API.app.enable_coins([event_before_removal.params.coin]) break + case "onMismatchCustomCoinConfiguration": console.log("Restarting for", event_before_removal.params.asset, "custom asset configuration mismatch...") root.close() restart_modal.open() break + default: removeNotification() break @@ -625,12 +634,13 @@ DexPopup } } - DexMouseArea + DefaultMouseArea { id: mouseArea hoverEnabled: true cursorShape: "PointingHandCursor" anchors.fill: parent + onClicked: { performNotificationAction(notifications_list[index]) @@ -639,7 +649,6 @@ DexPopup } } } - } OutlineButton @@ -650,4 +659,4 @@ DexPopup onClicked: root.reset() } } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Exchange/Exchange.qml b/atomic_defi_design/Dex/Exchange/Exchange.qml index 34d40accf..fb405c887 100644 --- a/atomic_defi_design/Dex/Exchange/Exchange.qml +++ b/atomic_defi_design/Dex/Exchange/Exchange.qml @@ -28,24 +28,9 @@ Item Component.onDestruction: API.app.trading_pg.on_gui_leave_dex() - ColumnLayout + Trade { - anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter - + id: trade anchors.fill: parent - anchors.topMargin: 20 - - spacing: layout_margin - - Trade - { - id: trade - Layout.fillWidth: true - Layout.fillHeight: true - Layout.bottomMargin: layout_margin - Layout.rightMargin: Layout.bottomMargin - } - } } diff --git a/atomic_defi_design/Dex/Exchange/History/History.qml b/atomic_defi_design/Dex/Exchange/History/History.qml deleted file mode 100644 index 8b8cca162..000000000 --- a/atomic_defi_design/Dex/Exchange/History/History.qml +++ /dev/null @@ -1,15 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../../Components" -import "../../Constants" -import ".." - -OrdersPage { - page_index: idx_exchange_history - - title: qsTr("Recent Swaps") - //empty_text: qsTr("You don't have recent orders.") - is_history: true -} diff --git a/atomic_defi_design/Dex/Exchange/Orders/Orders.qml b/atomic_defi_design/Dex/Exchange/Orders/Orders.qml deleted file mode 100644 index abee954e1..000000000 --- a/atomic_defi_design/Dex/Exchange/Orders/Orders.qml +++ /dev/null @@ -1,15 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../../Components" -import "../../Constants" -import ".." - -OrdersPage { - page_index: idx_exchange_orders - - title: qsTr("Orders") - //empty_text: qsTr("You don't have any orders.") - is_history: false -} diff --git a/atomic_defi_design/Dex/Exchange/ProView/Chart.qml b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml new file mode 100644 index 000000000..890898328 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/Chart.qml @@ -0,0 +1,201 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import QtWebEngine 1.8 + +import "../../Components" +import "../../Constants" +import Dex.Themes 1.0 as Dex + +Item +{ + id: root + + readonly property string theme: Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark ? "dark" : "light" + property string loaded_symbol + property bool pair_supported: false + onPair_supportedChanged: if (!pair_supported) webEngineViewPlaceHolder.visible = false + + function loadChart(right_ticker, left_ticker, force = false, source="nomics") + { + let chart_html = "" + let symbol = "" + + if (source == "nomics") + { + let right_ticker_full = General.coinName(right_ticker) + let right_ticker_id = General.getNomicsId(right_ticker) + let left_ticker_id = General.getNomicsId(left_ticker) + + if (right_ticker_id != "" && left_ticker_id != "") + { + symbol = right_ticker_id+"-"+left_ticker_id + + pair_supported = true + if (symbol === loaded_symbol && !force) + { + webEngineViewPlaceHolder.visible = true + return + } + + loaded_symbol = symbol + + chart_html = ` + + + +
+ + ` + } + } + + if (chart_html == "") + { + const pair = atomic_qt_utilities.retrieve_main_ticker(left_ticker) + "/" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + const pair_reversed = atomic_qt_utilities.retrieve_main_ticker(right_ticker) + "/" + atomic_qt_utilities.retrieve_main_ticker(left_ticker) + + // Try checking if pair/reversed-pair exists + symbol = General.supported_pairs[pair] + if (!symbol) symbol = General.supported_pairs[pair_reversed] + + if (!symbol) + { + pair_supported = false + return + } + + pair_supported = true + + if (symbol === loaded_symbol && !force) + { + webEngineViewPlaceHolder.visible = true + return + } + + loaded_symbol = symbol + + let chart_html = ` + + + +
+
+ + +
+ ` + } + dashboard.webEngineView.loadHtml(chart_html) + } + + Component.onCompleted: + { + try + { + loadChart(left_ticker?? atomic_app_primary_coin, + right_ticker?? atomic_app_secondary_coin) + } + catch (e) { console.error(e) } + } + + RowLayout + { + anchors.fill: parent + visible: !webEngineViewPlaceHolder.visible + + DefaultBusyIndicator + { + visible: pair_supported + Layout.alignment: Qt.AlignHCenter + Layout.leftMargin: -15 + Layout.rightMargin: Layout.leftMargin*0.75 + scale: 0.5 + } + + DefaultText + { + visible: pair_supported + text_value: qsTr("Loading market data") + "..." + } + + DefaultText + { + visible: !pair_supported + text_value: qsTr("There is no chart data for this pair yet") + Layout.topMargin: 30 + Layout.alignment: Qt.AlignCenter + } + } + + Item + { + id: webEngineViewPlaceHolder + anchors.fill: parent + visible: false + + Component.onCompleted: + { + dashboard.webEngineView.parent = webEngineViewPlaceHolder + dashboard.webEngineView.anchors.fill = webEngineViewPlaceHolder + } + Component.onDestruction: + { + dashboard.webEngineView.visible = false + dashboard.webEngineView.stop() + } + onVisibleChanged: dashboard.webEngineView.visible = visible + + Connections + { + target: dashboard.webEngineView + + function onLoadingChanged(webEngineLoadReq) + { + if (webEngineLoadReq.status === WebEngineView.LoadSucceededStatus) + { + webEngineViewPlaceHolder.visible = true + } + else webEngineViewPlaceHolder.visible = false + } + } + } + + Connections + { + target: app + function onPairChanged() + { + root.loadChart(left_ticker, right_ticker) + } + } + + Connections + { + target: Dex.CurrentTheme + function onThemeChanged() + { + loadChart(left_ticker?? atomic_app_primary_coin, + right_ticker?? atomic_app_secondary_coin, + true) + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/Trade/DexComboBoxLine.qml b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml similarity index 93% rename from atomic_defi_design/Dex/Exchange/Trade/DexComboBoxLine.qml rename to atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml index 707ac50c6..0839d50ab 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/DexComboBoxLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/DexComboBoxLine.qml @@ -19,10 +19,10 @@ RowLayout Behavior on color { ColorAnimation { duration: Style.animationDuration } } - DefaultImage + DexImage { id: icon - source: General.coinIcon(ticker) + source: General.coinIcon(details.ticker) Layout.preferredWidth: 32 Layout.preferredHeight: 45 Layout.alignment: Qt.AlignVCenter | Qt.AlignLeft @@ -37,19 +37,18 @@ RowLayout anchors.verticalCenter: parent.verticalCenter width: root.width - 40 - DefaultText + DexText { Layout.preferredWidth: parent.width - 15 text_value: !details ? "" : `${details.ticker}   ${details.name}` - color: Style.colorText font.pixelSize: Style.textSizeSmall3 elide: Text.ElideRight wrapMode: Text.NoWrap } - DefaultText + DexText { id: bottom_line diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml new file mode 100644 index 000000000..37cd5249d --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/Main.qml @@ -0,0 +1,209 @@ +import QtQuick 2.15 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.15 + +import Qaterial 1.0 as Qaterial + +import "../../../Components" +import "../../../Constants" +import Dex.Themes 1.0 as Dex +import AtomicDEX.MarketMode 1.0 + +Widget +{ + title: qsTr("Place Order") + property string protocolIcon: General.platformIcon(General.coinPlatform(left_ticker)) + + margins: 15 + collapsable: false + + + // Order selected indicator + Item + { + Layout.topMargin: 5 + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + Layout.preferredHeight: 40 + visible: API.app.trading_pg.preffered_order.price !== undefined + + RowLayout + { + id: orderSelection + anchors.fill: parent + anchors.verticalCenter: parent.verticalCenter + + DefaultText + { + Layout.leftMargin: 15 + color: Dex.CurrentTheme.noColor + text: qsTr("Order Selected") + } + + Item { Layout.fillWidth: true } + + Qaterial.FlatButton + { + Layout.preferredHeight: parent.height + Layout.preferredWidth: 30 + Layout.rightMargin: 5 + foregroundColor: Dex.CurrentTheme.noColor + onClicked: API.app.trading_pg.reset_order() + + Qaterial.ColorIcon + { + anchors.centerIn: parent + iconSize: 16 + color: Dex.CurrentTheme.noColor + source: Qaterial.Icons.close + } + } + } + + Rectangle + { + anchors.fill: parent + radius: 8 + color: 'transparent' + border.color: Dex.CurrentTheme.noColor + } + } + + // Market mode selector + RowLayout + { + Layout.topMargin: 5 + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + Layout.fillHeight: true + + MarketModeSelector + { + Layout.alignment: Qt.AlignLeft + Layout.preferredWidth: (parent.width / 100) * 46 + Layout.preferredHeight: 50 + marketMode: MarketMode.Buy + ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) + } + + Item { Layout.fillWidth: true } + + MarketModeSelector + { + Layout.alignment: Qt.AlignRight + Layout.preferredWidth: (parent.width / 100) * 46 + Layout.preferredHeight: 50 + ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) + } + } + + HorizontalLine + { + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + visible: protocolIcon != "" + color: Dex.CurrentTheme.backgroundColorDeep + } + + ColumnLayout + { + spacing: 3 + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + visible: protocolIcon != "" + + DexLabel + { + id: protocolTitle + Layout.preferredWidth: parent.width + text_value: "Protocol:" + font.pixelSize: Style.textSizeSmall1 + horizontalAlignment: Text.AlignHCenter + color: Style.colorText2 + } + + RowLayout + { + id: protocol + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + + Item { Layout.fillWidth: true } + + DefaultImage + { + id: protocolImg + source: protocolIcon + Layout.preferredHeight: 16 + Layout.preferredWidth: Layout.preferredHeight + } + + DexLabel + { + id: protocolText + text_value: General.getProtocolText(left_ticker) + wrapMode: DexLabel.NoWrap + font.pixelSize: Style.textSizeSmall1 + color: Style.colorText2 + } + + Item { Layout.fillWidth: true } + } + } + + OrderForm + { + id: formBase + Layout.preferredWidth: parent.width + Layout.alignment: Qt.AlignHCenter + } + + TotalView + { + Layout.preferredWidth: parent.width + Layout.alignment: Qt.AlignHCenter + } + + DexGradientAppButton + { + Layout.preferredHeight: 40 + Layout.preferredWidth: parent.width - 20 + Layout.alignment: Qt.AlignHCenter + + radius: 18 + text: qsTr("START SWAP") + font.weight: Font.Medium + enabled: formBase.can_submit_trade + onClicked: confirm_trade_modal.open() + } + + ColumnLayout + { + spacing: parent.spacing + visible: errors.text_value !== "" + Layout.preferredWidth: parent.width + + HorizontalLine + { + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + } + + // Show errors + DefaultText + { + id: errors + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + horizontalAlignment: Text.AlignHCenter + font.pixelSize: Style.textSizeSmall4 + color: Dex.CurrentTheme.noColor + text_value: General.getTradingError( + last_trading_error, + curr_fee_info, + base_ticker, + rel_ticker, left_ticker, right_ticker) + elide: Text.ElideRight + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/MarketModeSelector.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml similarity index 97% rename from atomic_defi_design/Dex/Exchange/ProView/MarketModeSelector.qml rename to atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml index 48f7c7713..bae4940e6 100644 --- a/atomic_defi_design/Dex/Exchange/ProView/MarketModeSelector.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/MarketModeSelector.qml @@ -3,15 +3,13 @@ import QtQuick 2.12 import App 1.0 import Dex.Themes 1.0 as Dex import AtomicDEX.MarketMode 1.0 as Dex -import "../../Components" +import "../../../Components" Rectangle { property int marketMode: Dex.MarketMode.Sell property string ticker: "" - width: 124 - height: 48 radius: 18 gradient: Gradient diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml new file mode 100644 index 000000000..6f6f6fcd4 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/OrderForm.qml @@ -0,0 +1,219 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import QtGraphicalEffects 1.0 + +import AtomicDEX.MarketMode 1.0 +import AtomicDEX.TradingError 1.0 +import "../../../Components" +import App 1.0 +import Dex.Themes 1.0 as Dex + +ColumnLayout +{ + id: root + + function focusVolumeField() + { + input_volume.forceActiveFocus() + } + + readonly property string total_amount: API.app.trading_pg.total_amount + + readonly property bool can_submit_trade: last_trading_error === TradingError.None + + // Will move to backend: Minimum Fee + function getMaxBalance() + { + if (General.isFilled(base_ticker)) + return API.app.get_balance(base_ticker) + + return "0" + } + + // Will move to backend: Minimum Fee + function getMaxVolume() + { + // base in this orderbook is always the left side, so when it's buy, we want the right side balance (rel in the backend) + const value = sell_mode ? API.app.trading_pg.orderbook.base_max_taker_vol.decimal : + API.app.trading_pg.orderbook.rel_max_taker_vol.decimal + + if (General.isFilled(value)) + return value + + return getMaxBalance() + } + + function setMinimumAmount(value) { API.app.trading_pg.min_trade_vol = value } + + Connections + { + target: exchange_trade + function onBackend_priceChanged() { input_price.text = exchange_trade.backend_price; } + function onBackend_volumeChanged() { input_volume.text = exchange_trade.backend_volume; } + } + + Item + { + Layout.preferredWidth: parent.width + Layout.preferredHeight: input_price.height + price_usd_value.height + price_usd_value.anchors.topMargin + + AmountField + { + id: input_price + + left_text: qsTr("Price") + right_text: right_ticker + enabled: !(API.app.trading_pg.preffered_order.price !== undefined) + text: backend_price + width: parent.width + height: 41 + radius: 18 + + onTextChanged: setPrice(text) + } + + DefaultText + { + id: price_usd_value + anchors.right: input_price.right + anchors.top: input_price.bottom + anchors.topMargin: 7 + + text_value: General.getFiatText(non_null_price, right_ticker) + font.pixelSize: input_price.font.pixelSize + color: Dex.CurrentTheme.foregroundColor2 + + CexInfoTrigger {} + } + } + + + Item + { + Layout.preferredWidth: parent.width + Layout.topMargin: 10 + Layout.preferredHeight: input_volume.height + inputVolumePrice.height + inputVolumePrice.anchors.topMargin + + AmountField + { + id: input_volume + width: parent.width + height: 41 + radius: 18 + left_text: qsTr("Volume") + right_text: left_ticker + placeholderText: sell_mode ? qsTr("Amount to sell") : qsTr("Amount to receive") + text: API.app.trading_pg.volume + onTextChanged: setVolume(text) + } + + DefaultText + { + id: inputVolumePrice + anchors.right: input_volume.right + anchors.top: input_volume.bottom + anchors.topMargin: price_usd_value.anchors.topMargin + + text_value: General.getFiatText(non_null_volume, left_ticker) + font.pixelSize: input_volume.font.pixelSize + color: Dex.CurrentTheme.foregroundColor2 + + CexInfoTrigger {} + } + } + + Item + { + Layout.preferredWidth: parent.width + Layout.preferredHeight: minVolLabel.height + Layout.topMargin: 6 + + DefaultText + { + id: minVolLabel + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 13 + text: qsTr("Min volume: ") + API.app.trading_pg.min_trade_vol + } + + DefaultText + { + anchors.left: minVolLabel.right + anchors.leftMargin: 8 + anchors.verticalCenter: minVolLabel.verticalCenter + + text: General.cex_icon + color: Dex.CurrentTheme.foregroundColor3 + + DefaultMouseArea + { + anchors.fill: parent + onClicked: _sliderHelpModal.open() + } + + ModalLoader + { + id: _sliderHelpModal + sourceComponent: HelpModal + { + title: qsTr("How to use the pro-view slider ?") + helpSentence: qsTr("This slider is used to setup the order requirements you need.\nLeft slider: Sets the minimum amount required to process a trade.\nRight slider: Sets the volume you want to trade.") + } + } + } + } + + DefaultRangeSlider + { + id: _volumeRange + + function getRealValue() { return first.position * (first.to - first.from); } + function getRealValue2() { return second.position * (second.to - second.from); } + + enabled: input_volume.enabled && !(!sell_mode && General.isZero(non_null_price)) && to > 0 + + Layout.alignment: Qt.AlignHCenter + Layout.preferredWidth: parent.width + + from: API.app.trading_pg.orderbook.current_min_taker_vol + to: Math.max(0, parseFloat(max_volume)) + + first.value: parseFloat(API.app.trading_pg.min_trade_vol) + + firstDisabled: !_useCustomMinTradeAmountCheckbox.checked + + second.value: parseFloat(non_null_volume) + + first.onValueChanged: if (first.pressed) setMinimumAmount(General.formatDouble(first.value)) + second.onValueChanged: if (second.pressed) setVolume(General.formatDouble(second.value)) + } + + RowLayout + { + Layout.topMargin: 15 + Layout.rightMargin: 2 + Layout.leftMargin: 2 + Layout.fillWidth: true + spacing: 5 + + DefaultCheckBox + { + id: _useCustomMinTradeAmountCheckbox + boxWidth: 20 + boxHeight: 20 + labelWidth: 0 + } + + DefaultText { + Layout.fillWidth: true + height: _useCustomMinTradeAmountCheckbox.height + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + wrapMode: Label.WordWrap + text: qsTr("Use custom minimum trade amount") + color: Dex.CurrentTheme.foregroundColor3 + font.pixelSize: 13 + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml new file mode 100644 index 000000000..5c03c8df7 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/PlaceOrderForm/TotalView.qml @@ -0,0 +1,79 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import QtQuick.Controls.Material 2.15 + +import Qaterial 1.0 as Qaterial +import Qt.labs.settings 1.0 + +import "../../../Components" +import "../../../Constants" +import Dex.Themes 1.0 as Dex + +ColumnLayout +{ + spacing: 5 + + RowLayout + { + Layout.preferredWidth: parent.width + Layout.preferredHeight: 30 + + DefaultText + { + Layout.fillWidth: true + Layout.alignment: Qt.AlignLeft + color: Dex.CurrentTheme.foregroundColor3 + text: "Total " + API.app.settings_pg.current_fiat + " " + General.cex_icon + font.pixelSize: 14 + font.weight: Font.Normal + opacity: .6 + CexInfoTrigger {} + } + + DefaultText + { + Layout.fillWidth: true + horizontalAlignment: Text.AlignRight + font.weight: Font.DemiBold + font.pixelSize: 16 + font.family: 'lato' + text_value: General.getFiatText(total_amount, right_ticker).replace(General.cex_icon, "") + } + } + + HorizontalLine + { + color: Dex.CurrentTheme.lineSeparatorColor + Layout.preferredWidth: parent.width + Layout.preferredHeight: 1 + Layout.alignment: Qt.AlignHCenter + } + + RowLayout + { + Layout.preferredWidth: parent.width + Layout.preferredHeight: 30 + + DefaultText + { + Layout.fillWidth: true + color: Dex.CurrentTheme.foregroundColor3 + Layout.preferredWidth: parent.width * 0.3 + text: "Total " + right_ticker + font.pixelSize: 14 + opacity: .6 + font.weight: Font.Normal + } + + DefaultText + { + Layout.fillWidth: true + horizontalAlignment: Text.AlignRight + font.weight: Font.DemiBold + font.pixelSize: 16 + font.family: 'lato' + text_value: General.formatCrypto("", total_amount, right_ticker).replace(right_ticker, "") + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml b/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml new file mode 100644 index 000000000..0ce9b4ec8 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/SearchableTickerSelector.qml @@ -0,0 +1,108 @@ +import QtQuick 2.12 +import QtQuick.Controls 2.15 +import QtQuick.Layouts 1.3 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex +import "../../Components" as Dex +import "../../Constants" as Dex + +Dex.ComboBoxWithSearchBar +{ + id: control + property var currentItem: model.index(currentIndex, 0) + property bool left_side: false + property var ticker_list + property string ticker + property bool index_changed: false + + height: 60 + enabled: !block_everything + + model: control.ticker_list + textRole: "ticker" + valueRole: "ticker" + + popupMaxHeight: Math.min(model.rowCount() * 70 + 70, 600) + popupForceMaxHeight: true + + searchBar.visible: true + searchBar.searchModel: control.ticker_list + + delegate: ItemDelegate + { + id: _delegate + z: 5 + visible: model.ticker !== "All" + width: control.width + height: visible ? 60 : 0 + highlighted: control.highlightedIndex === index + + contentItem: DexComboBoxLine { details: model } + background: Dex.DexRectangle + { + anchors.fill: _delegate + color: _delegate.highlighted ? Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor : Dex.CurrentTheme.comboBoxBackgroundColor + } + } + + contentItem: DexComboBoxLine + { + id: _contentRow + + property int update_count: 0 + property var prev_details + + padding: 10 + + function forceUpdateDetails() + { + console.log("Portfolio item data changed, force-updating the selected ticker details!") + ++update_count + } + + details: + { + const idx = currentIndex + if(idx === -1) return prev_details + + const new_details = { + update_count: _contentRow.update_count, + ticker: model.data(model.index(idx, 0), 257), + name: model.data(model.index(idx, 0), 259), + balance: model.data(model.index(idx, 0), 260), + main_currency_balance: model.data(model.index(idx, 0), 261) + } + + prev_details = new_details + return new_details + } + Component.onCompleted: portfolio_mdl.portfolioItemDataChanged.connect(forceUpdateDetails) + Component.onDestruction: portfolio_mdl.portfolioItemDataChanged.disconnect(forceUpdateDetails) + } + + onCurrentIndexChanged: { + control.index_changed = true + } + onCurrentValueChanged: + { + if(control.index_changed) { + control.index_changed = false + if(currentValue !== undefined) + setPair(left_side, currentValue) + } + else { + if(currentText.indexOf(ticker) === -1) { + const target_index = indexOfValue(ticker) + if(currentIndex !== target_index) + currentIndex = target_index + } + } + } + searchBar.onVisibleChanged: if (!visible) { searchBar.textField.text = ""; } + searchBar.textField.onTextChanged: { + control.ticker_list.setFilterFixedString(searchBar.textField.text) + } +} diff --git a/atomic_defi_design/Dex/Exchange/Trade/SweetDexComboBox.qml b/atomic_defi_design/Dex/Exchange/ProView/SweetDexComboBox.qml similarity index 73% rename from atomic_defi_design/Dex/Exchange/Trade/SweetDexComboBox.qml rename to atomic_defi_design/Dex/Exchange/ProView/SweetDexComboBox.qml index 28b9319ec..4ee25501e 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SweetDexComboBox.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/SweetDexComboBox.qml @@ -1,10 +1,7 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 -import QtGraphicalEffects 1.0 -import QtQuick.Window 2.15 import QtQuick.Controls 2.15 import QtQuick.Controls.impl 2.15 -import QtQuick.Controls.Universal 2.15 import Qaterial 1.0 as Qaterial @@ -16,6 +13,23 @@ ComboBox { id: control + property alias radius: bg_rect.radius + property color comboBoxBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + property color popupBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + property color highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor + property color mainBackgroundColor: Dex.CurrentTheme.floatingBackgroundColor + + height: 80 + + + // Combobox Dropdown Button Background + background: DexRectangle + { + id: bg_rect + color: comboBoxBackgroundColor + radius: 20 + } + contentItem: DexComboBoxLine { id: line @@ -23,13 +37,14 @@ ComboBox property int update_count: 0 property var prev_details + padding: 10 + function forceUpdateDetails() { console.log("Portfolio item data changed, force-updating the selected ticker details!") ++update_count } - padding: 10 details: { const idx = combo.currentIndex @@ -55,78 +70,92 @@ ComboBox Component.onDestruction: portfolio_mdl.portfolioItemDataChanged.disconnect(forceUpdateDetails) } - height: 80 - - background: DefaultRectangle - { - color: Dex.CurrentTheme.floatingBackgroundColor - radius: 10 - } - // Each dropdown item delegate: ItemDelegate { - Universal.accent: control.lineHoverColor + id: combo_item width: control.width highlighted: control.highlightedIndex === index + contentItem: DexComboBoxLine { details: model } z: 5 + + // Dropdown Item background + background: DexRectangle { + anchors.fill: combo_item + color: combo_item.highlighted ? highlightedBackgroundColor : mainBackgroundColor + } + } + + indicator: Column + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 8 + spacing: -12 + + Qaterial.Icon + { + width: 30 + height: 30 + color: Dex.CurrentTheme.comboBoxArrowsColor + icon: Qaterial.Icons.chevronDown + } } // Dropdown itself popup: Popup { - id: popup - - readonly property double max_height: 450//control.Window.height - bottomMargin - mapToItem(control.Window.contentItem, x, y).y + id: combo_popup + readonly property double max_height: 450 width: control.width - height: Math.min(contentItem.implicitHeight, popup.max_height) + height: Math.min(contentItem.implicitHeight, max_height) + 20 + z: 4 y: control.height - 1 - bottomMargin: 20 - padding: 1 + topMargin: 40 + bottomMargin: 10 rightMargin: 5 + padding: 1 contentItem: ColumnLayout { anchors.rightMargin: 5 // Search input - DefaultTextField + DexTextField { id: input_coin_filter - background: Item - { - DefaultRectangle - { - anchors.fill: parent - anchors.rightMargin: 2 - } - } - - function reset() - { - text = "" - renewIndex() - } - placeholderText: qsTr("Search") font.pixelSize: 16 - Layout.fillWidth: true - Layout.leftMargin: 0 - Layout.preferredHeight: 60 - Layout.rightMargin: 2 + Layout.leftMargin: 5 + Layout.rightMargin: 5 + Layout.preferredHeight: 40 Layout.topMargin: Layout.leftMargin + // Search Field Background + background: DexRectangle + { + color: control.comboBoxBackgroundColor + anchors.fill: parent + radius: control.radius + } + onTextChanged: { ticker_list.setFilterFixedString(text) renewIndex() } + function reset() + { + text = "" + renewIndex() + } + Keys.onDownPressed: control.incrementCurrentIndex() Keys.onUpPressed: control.decrementCurrentIndex() Keys.onPressed: @@ -150,21 +179,22 @@ ComboBox function onClosed() { input_coin_filter.reset() } } } + Item { Layout.maximumHeight: popup.max_height - 100 Layout.fillWidth: true implicitHeight: popup_list_view.contentHeight + 5 - DefaultListView + + DexListView { id: popup_list_view // Scrollbar appears if this extra space is not added model: control.popup.visible ? control.delegateModel : null currentIndex: control.highlightedIndex anchors.fill: parent - anchors.rightMargin: 2 - DefaultMouseArea + DexMouseArea { anchors.fill: parent acceptedButtons: Qt.NoButton @@ -173,28 +203,15 @@ ComboBox } } - background: DefaultRectangle + // Popup Background + background: DexRectangle { width: parent.width - y: -5 - height: parent.height + 10 + height: parent.height + radius: control.radius + color: control.popupBackgroundColor + colorAnimation: false border.width: 1 } } - - indicator: Column - { - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: 8 - spacing: -12 - - Qaterial.Icon - { - width: 30 - height: 30 - color: Dex.CurrentTheme.comboBoxArrowsColor - icon: Qaterial.Icons.chevronDown - } - } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/TickerSelector.qml b/atomic_defi_design/Dex/Exchange/ProView/TickerSelector.qml similarity index 86% rename from atomic_defi_design/Dex/Exchange/Trade/TickerSelector.qml rename to atomic_defi_design/Dex/Exchange/ProView/TickerSelector.qml index 797137caf..4978fa75e 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/TickerSelector.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TickerSelector.qml @@ -34,19 +34,16 @@ SweetDexComboBox onCurrentValueChanged: { // User input - if(combo.index_changed) - { + if(combo.index_changed) { combo.index_changed = false // Set the ticker - if (currentValue !== undefined) + if(currentValue !== undefined) setPair(left_side, currentValue) } // List change - else - { + else { // Correct the index - if (currentText.indexOf(ticker) === -1) - { + if(currentText.indexOf(ticker) === -1) { const target_index = indexOfValue(ticker) if(currentIndex !== target_index) currentIndex = target_index diff --git a/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml new file mode 100644 index 000000000..765730f83 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TickerSelectors.qml @@ -0,0 +1,71 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import "../../Components" +import "../../Constants" + +// Ticker selectors. +Row +{ + id: selectors + + function renewIndex() + { + selectorLeft.currentIndex = selectorLeft.indexOfValue(selectorLeft.ticker) + selectorRight.currentIndex = selectorRight.indexOfValue(selectorRight.ticker) + selectorLeft.searchBar.textField.text = ""; + selectorRight.searchBar.textField.text = ""; + } + + SearchableTickerSelector + { + id: selectorLeft + + width: parent.width * 0.45 + height: parent.height + + left_side: true + ticker_list: API.app.trading_pg.market_pairs_mdl.left_selection_box + ticker: left_ticker + onTickerChanged: renewIndex() + Component.onCompleted: renewIndex() + Component.onDestruction: searchBar.textField.text = ""; + } + + SwapIcon + { + width: parent.width * 0.1 + anchors.verticalCenter: parent.verticalCenter + top_arrow_ticker: selectorLeft.ticker + bottom_arrow_ticker: selectorRight.ticker + hovered: swap_button.containsMouse + + DefaultMouseArea + { + id: swap_button + anchors.fill: parent + hoverEnabled: true + onClicked: + { + if (!block_everything) + setPair(true, right_ticker) + } + } + } + + SearchableTickerSelector + { + id: selectorRight + + width: parent.width * 0.45 + height: parent.height + + left_side: false + ticker_list: API.app.trading_pg.market_pairs_mdl.right_selection_box + ticker: right_ticker + onTickerChanged: renewIndex() + Component.onCompleted: renewIndex() + Component.onDestruction: searchBar.textField.text = ""; + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml new file mode 100644 index 000000000..b08a691dc --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/Main.qml @@ -0,0 +1,120 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import "../../../Constants" +import "../../../Components" +import "../../Trade" +import "../../ProView" + +Widget +{ + property alias currentIndex: tabView.currentIndex + + title: qsTr("Trading Information") + + background: null + margins: 0 + + Connections + { + target: exchange_trade + function onOrderSelected() { tabView.currentIndex = 0; } + } + + Qaterial.LatoTabBar + { + id: tabView + property int pair_chart_idx: 0 + property int order_idx: 1 + property int history_idx: 2 + + background: null + Layout.leftMargin: 6 + + Qaterial.LatoTabButton + { + text: qsTr("Chart") + font.pixelSize: 14 + textColor: checked ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + textSecondaryColor: Dex.CurrentTheme.foregroundColor2 + indicatorColor: Dex.CurrentTheme.foregroundColor + } + Qaterial.LatoTabButton + { + text: qsTr("Orders") + font.pixelSize: 14 + textColor: checked ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + textSecondaryColor: Dex.CurrentTheme.foregroundColor2 + indicatorColor: Dex.CurrentTheme.foregroundColor + } + Qaterial.LatoTabButton + { + text: qsTr("History") + font.pixelSize: 14 + textColor: checked ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + textSecondaryColor: Dex.CurrentTheme.foregroundColor2 + indicatorColor: Dex.CurrentTheme.foregroundColor + } + } + + Rectangle + { + Layout.fillWidth: true + Layout.fillHeight: true + color: Dex.CurrentTheme.floatingBackgroundColor + radius: 10 + + Qaterial.SwipeView + { + id: swipeView + clip: true + interactive: false + currentIndex: tabView.currentIndex + anchors.fill: parent + + ColumnLayout + { + Layout.fillHeight: true + spacing: 10 + // Chart + Chart + { + id: chart + Layout.topMargin: 20 + Layout.leftMargin: 28 + Layout.rightMargin: 28 + Layout.fillWidth: true + Layout.preferredHeight: 310 + + } + + PriceLineSimplified + { + id: price_line + Layout.bottomMargin: 20 + Layout.leftMargin: 28 + Layout.rightMargin: 28 + Layout.fillWidth: true + Layout.fillHeight: true + } + } + + onCurrentIndexChanged: + { + swipeView.currentItem.update(); + } + + OrdersPage { clip: true } + + OrdersPage + { + is_history: true + clip: true + } + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml new file mode 100644 index 000000000..4dadd1fe8 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderLine.qml @@ -0,0 +1,291 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import Qaterial 1.0 as Qaterial + +import QtGraphicalEffects 1.0 + +import App 1.0 + +import "../../../Components" +import Dex.Themes 1.0 as Dex + +FloatingBackground +{ + Layout.fillWidth: true + + property var details + property alias clickable: mouseArea.enabled + readonly property bool is_placed_order: !details ? false : details.order_id !== '' + + height: 50 + + color: mouseArea.containsMouse ? Dex.CurrentTheme.accentColor : Dex.CurrentTheme.floatingBackgroundColor + radius: 0 + + DefaultMouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: enabled + onClicked: + { + order_modal.open() + order_modal.item.details = details + } + } + + RowLayout + { + anchors.fill: parent + anchors.verticalCenter: parent.verticalCenter + spacing: 4 + + Item + { + Layout.fillHeight: true + Layout.preferredWidth: 24 + Layout.alignment: Qt.AlignCenter + + DefaultText + { + id: statusText + anchors.centerIn: parent + + visible: clickable ? ! details ? false : (details.is_swap || !details.is_maker) : false + font.pixelSize: getStatusFontSize(details.order_status) + color: !details ? Dex.CurrentTheme.foregroundColor : getStatusColor(details.order_status) + text_value: !details ? "" : visible ? getStatusStep(details.order_status) : '' + } + + Qaterial.ColorIcon + { + anchors.centerIn: parent + + visible: !statusText.visible ? clickable ? true : false : false + iconSize: 16 + color: Dex.CurrentTheme.foregroundColor + source: Qaterial.Icons.clipboardTextSearchOutline + } + } + + + ColumnLayout + { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.alignment: Qt.AlignCenter + spacing: 0 + + Item + { + Layout.fillWidth: true + Layout.preferredHeight: childrenRect.height + + clip: true + + DefaultText + { + id: baseAmountLabel + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + + font.pixelSize: 12 + text: !details ? "" : details.base_amount + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + + DefaultText + { + anchors.left: baseAmountLabel.right + anchors.leftMargin: 3 + anchors.verticalCenter: parent.verticalCenter + + font.pixelSize: 12 + text: !details ? "" : "(%1 %2)".arg(details.base_amount_current_currency).arg(API.app.settings_pg.current_fiat_sign) + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + + Qaterial.ColorIcon + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + + source: Qaterial.Icons.swapHorizontal + color: Dex.CurrentTheme.foregroundColor + iconSize: 18 + } + + DefaultText + { + anchors.right: relAmountInCurrCurrency.left + anchors.rightMargin: 3 + anchors.verticalCenter: parent.verticalCenter + + font.pixelSize: 12 + text: !details ? "" : details.rel_amount + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + + DefaultText + { + id: relAmountInCurrCurrency + + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + + font.pixelSize: 12 + text: !details ? "" : "(%1 %2)".arg(details.rel_amount_current_currency).arg(API.app.settings_pg.current_fiat_sign) + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + } + + Item + { + Layout.fillWidth: true + Layout.preferredHeight: childrenRect.height + + DefaultImage + { + id: baseIcon + + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + + width: 15 + height: 15 + + source: General.coinIcon(!details ? atomic_app_primary_coin : details.base_coin ?? atomic_app_primary_coin) + } + + DefaultText + { + anchors.left: baseIcon.right + anchors.leftMargin: 2 + anchors.verticalCenter: parent.verticalCenter + + font.weight: Font.Bold + font.pixelSize: 12 + text: !details ? "" : details.base_coin + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + + DefaultText + { + visible: clickable + + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + + font.pixelSize: 11 + text_value: !details ? "" : details.date ?? "" + elide: Text.ElideRight + maximumLineCount: 1 + color: Dex.CurrentTheme.foregroundColor2 + } + + DefaultText + { + anchors.right: relCoin.left + anchors.rightMargin: 2 + anchors.verticalCenter: parent.verticalCenter + + font.weight: Font.Bold + font.pixelSize: 12 + text: !details ? "" : details.rel_coin + privacy: is_placed_order + elide: Text.ElideRight + maximumLineCount: 1 + } + + DefaultImage + { + id: relCoin + + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + + width: 15 + height: 15 + + source: General.coinIcon(!details ? atomic_app_primary_coin : details.rel_coin ?? atomic_app_secondary_coin) + } + } + } + + Item + { + Layout.fillHeight: true + Layout.preferredWidth: 24 + Layout.alignment: Qt.AlignCenter + + DefaultText + { + anchors.centerIn: parent + + visible: !details || details.recoverable === undefined ? false : details.recoverable && details.order_status !== "refunding" + font.pixelSize: baseAmountLabel.font.pixelSize + text_value: Style.warningCharacter + color: Style.colorYellow + + DefaultTooltip + { + contentItem: DefaultText + { + text_value: qsTr("Funds are recoverable") + font.pixelSize: Style.textSizeSmall4 + } + + visible: (parent.visible && mouseArea.containsMouse) ?? false + } + } + + Qaterial.FlatButton + { + id: cancel_button_text + anchors.centerIn: parent + anchors.fill: parent + + visible: (!is_history ? details.cancellable ?? false : false) === true ? (mouseArea.containsMouse || hovered) ? true : false : false + + outlinedColor: Dex.CurrentTheme.noColor + hoverEnabled: true + + onClicked: if (details) cancelOrder(details.order_id) + + Behavior on scale + { + NumberAnimation + { + duration: 200 + } + } + Qaterial.ColorIcon + { + anchors.centerIn: parent + iconSize: 16 + color: Dex.CurrentTheme.noColor + source: Qaterial.Icons.close + scale: parent.visible ? 1 : 0 + } + } + } + } + // Separator + HorizontalLine + { + width: parent.width + height: 2 + anchors.bottom: parent.bottom + } +} diff --git a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderList.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml similarity index 88% rename from atomic_defi_design/Dex/Exchange/Trade/Orders/OrderList.qml rename to atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml index 3c26cc341..7a5a4aa00 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderList.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderList.qml @@ -3,25 +3,28 @@ import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import App 1.0 - import "../../../Components" import "../../../" +import Dex.Themes 1.0 as Dex Item { + id: root + property string title property var items property bool is_history: false ColumnLayout { - width: parent.width - 10 + width: parent.width height: parent.height anchors.horizontalCenter: parent.horizontalCenter HorizontalLine { Layout.fillWidth: true + Layout.maximumWidth: 511 } DefaultListView @@ -47,6 +50,7 @@ Item details: model opacity: anim_time + width: root.width * 0.985 } populate: Transition @@ -93,6 +97,8 @@ Item Layout.maximumHeight: 70 Layout.preferredWidth: parent.width Layout.bottomMargin: 10 + itemsPerPageComboBox.mainBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + itemsPerPageComboBox.popupBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor } } diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml new file mode 100644 index 000000000..df7b2bc9b --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrderModal.qml @@ -0,0 +1,313 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Qaterial 1.0 as Qaterial + +import Dex.Themes 1.0 as Dex +import "../../../Components" +import "../../../Constants" +import App 1.0 + +MultipageModal +{ + id: root + + property var details + horizontalPadding: 60 + verticalPadding: 40 + + onDetailsChanged: { if (!details) root.close() } + onOpened: + { + swapProgress.updateSimulatedTime() + swapProgress.updateCountdownTime() + } + onClosed: details = undefined + + MultipageModalContent + { + titleText: !details ? "" : details.is_swap ? qsTr("Swap Details") : qsTr("Order Details") + title.font.pixelSize: Style.textSize2 + titleAlignment: Qt.AlignHCenter + titleTopMargin: 10 + topMarginAfterTitle: 10 + flickMax: window.height - 450 + + header: [ + // Complete image + DefaultImage + { + visible: !details ? false : details.is_swap && details.order_status === "successful" + Layout.alignment: Qt.AlignHCenter + source: General.image_path + "exchange-trade-complete.png" + height: 100 + }, + + // Loading symbol + DefaultBusyIndicator + { + visible: !details ? false : + details.is_swap && !["successful", "failed"].includes(details.order_status) + running: visible && Qt.platform.os != "osx" + Layout.alignment: Qt.AlignHCenter + height: 100 + }, + + RowLayout + { + Layout.topMargin: 10 + height: 70 + + PairItemBadge + { + source: General.coinIcon(!details ? atomic_app_primary_coin : details.base_coin) + ticker: details ? details.base_coin : "" + fullname: details ? General.coinName(details.base_coin) : "" + amount: details ? details.base_amount : "" + } + + Qaterial.Icon + { + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter + + color: Dex.CurrentTheme.foregroundColor + icon: Qaterial.Icons.swapHorizontal + } + + PairItemBadge + { + source: General.coinIcon(!details ? atomic_app_primary_coin : details.rel_coin) + ticker: details ? details.rel_coin : "" + fullname: details ? General.coinName(details.rel_coin) : "" + amount: details ? details.rel_amount : "" + } + }, + + // Status Text + DefaultText + { + id: statusText + Layout.alignment: Qt.AlignHCenter + Layout.topMargin: 5 + font.pixelSize: Style.textSizeMid1 + font.bold: true + visible: !details ? false : details.is_swap || !details.is_maker + text_value: !details ? "" : visible ? getStatusText(details.order_status) : '' + height: 25 + }, + + DefaultText + { + Layout.alignment: Qt.AlignHCenter + visible: text_value != "" + font.pixelSize: Style.textSizeSmall2 + text_value: !details ? "" : details.order_status === "refunding" ? swapProgress.getRefundText() : "" + height: 25 + } + ] + + ColumnLayout + { + id: details_column + Layout.fillWidth: true + spacing: 12 + + // Maker/Taker + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Order Type") + text: !details ? "" : details.is_maker ? qsTr("Maker Order") : qsTr("Taker Order") + label.font.pixelSize: 13 + } + + // Refund state + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Refund State") + text: !details ? "" : details.order_status === "refunding" ? qsTr("Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back") : "" + label.font.pixelSize: 13 + visible: text !== '' + } + + // Date + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Date") + text: !details ? "" : details.date.replace(" ", " ") + label.font.pixelSize: 13 + visible: text !== '' + } + + // ID + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Swap ID") + text: !details ? "" : details.order_id + label.font.pixelSize: 13 + visible: text !== '' + copy: true + privacy: true + onCopyNotificationTitle: qsTr("Swap ID") + } + + // Payment ID + TextEditWithTitle + { + Layout.fillWidth: true + title: !details ? "" : details.is_maker ? qsTr("Maker Payment Sent Transaction ID") : qsTr("Maker Payment Spent Transaction ID") + text: !details ? "" : details.maker_payment_id + label.font.pixelSize: 12 + visible: text !== '' + copy: true + linkURL: text !== '' ? General.getTxExplorerURL(details.is_maker ? details.base_coin : details.rel_coin, details.maker_payment_id) : '' + privacy: true + onCopyNotificationTitle: qsTr("Maker Payment TXID") + } + + // Payment ID + TextEditWithTitle + { + Layout.fillWidth: true + title: !details ? "" : details.is_maker ? qsTr("Taker Payment Spent Transaction ID") : qsTr("Taker Payment Sent Transaction ID") + text: !details ? "" : details.taker_payment_id + label.font.pixelSize: 12 + visible: text !== '' + copy: true + privacy: true + onCopyNotificationTitle: qsTr("Taker Payment TXID") + linkURL: text !== '' ? General.getTxExplorerURL(details.is_maker ? details.rel_coin : details.base_coin, details.taker_payment_id) : '' + } + + // Error ID + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Error ID") + text: !details ? "" : details.order_error_state + label.font.pixelSize: 13 + visible: text !== '' + } + + // Error Details + TextEditWithTitle + { + Layout.fillWidth: true + title: qsTr("Error Log") + text: !details ? "" : details.order_error_message + label.font.pixelSize: 13 + visible: text !== '' + copy: true + onCopyNotificationTitle: qsTr("Error Log") + } + + HorizontalLine + { + visible: swapProgress.visible + Layout.fillWidth: true + Layout.topMargin: 10 + } + + SwapProgress + { + id: swapProgress + Layout.fillWidth: true + visible: General.exists(details) && details.order_status !== "matching" + details: root.details + } + } + + // Buttons + footer: + [ + Item + { + visible: refund_button.visible || cancel_order_button.visible + Layout.fillWidth: true + }, + + // Recover Funds button + DefaultButton + { + id: refund_button + leftPadding: 15 + rightPadding: 15 + radius: 18 + enabled: !API.app.orders_mdl.recover_fund_busy + visible: !details ? false : + details.recoverable && details.order_status !== "refunding" + text: enabled ? qsTr("Recover Funds") : qsTr("Refunding...") + font: DexTypo.body2 + onClicked: API.app.orders_mdl.recover_fund(details.order_id) + Layout.preferredHeight: 50 + }, + + // Cancel button + DexAppOutlineButton + { + id: cancel_order_button + visible: !details ? false : details.cancellable + leftPadding: 15 + rightPadding: 15 + radius: 18 + text: qsTr("Cancel Order") + font: DexTypo.body2 + onClicked: cancelOrder(details.order_id) + Layout.preferredHeight: 50 + }, + + Item { Layout.fillWidth: true }, + + DexAppOutlineButton + { + id: explorer_button + text: qsTr("View on Explorer") + font: DexTypo.body2 + Layout.preferredHeight: 50 + leftPadding: 15 + rightPadding: 15 + radius: 18 + visible: !details ? false : details.maker_payment_id !== '' || details.taker_payment_id !== '' + onClicked: + { + if (!details) return + + const maker_id = details.maker_payment_id + const taker_id = details.taker_payment_id + + if (maker_id !== '') General.viewTxAtExplorer(details.is_maker ? details.base_coin : details.rel_coin, maker_id) + if (taker_id !== '') General.viewTxAtExplorer(details.is_maker ? details.rel_coin : details.base_coin, taker_id) + } + }, + + Item + { + visible: close_order_button.visible && explorer_button.visible + Layout.fillWidth: true + }, + + DefaultButton + { + id: close_order_button + text: qsTr("Close") + font: DexTypo.body2 + leftPadding: 15 + rightPadding: 15 + radius: 18 + onClicked: root.close() + Layout.preferredHeight: 50 + }, + + Item + { + visible: close_order_button.visible || explorer_button.visible + Layout.fillWidth: true + } + ] + } +} diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml new file mode 100644 index 000000000..da30d2693 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/OrdersPage.qml @@ -0,0 +1,281 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import Qt.labs.platform 1.1 + +import Qaterial 1.0 as Qaterial + +import App 1.0 +import "../../../Components" +import "../../.." +import Dex.Themes 1.0 as Dex + +Item { + id: root + + readonly property date default_min_date: new Date("2019-01-01") + readonly property date default_max_date: new Date(new Date().setDate(new Date().getDate() + 30)) + + property var list_model: API.app.orders_mdl + property var list_model_proxy: API.app.orders_mdl.orders_proxy_mdl + property int page_index + + property alias title: order_list.title + property alias items: order_list.items + + property bool is_history: false + + function update() + { + reset() + if (combo_base.currentTicker !== "All" | combo_rel.currentTicker !== "All") { + buttonDelay.start() + } + } + + function reset() { + list_model_proxy.is_history = !is_history + applyFilter() + list_model_proxy.apply_all_filtering() + list_model_proxy.is_history = is_history + } + + Component.onDestruction: reset() + + Timer { + id: buttonDelay + interval: 200 + onTriggered: { + applyFilter() + list_model_proxy.apply_all_filtering() + } + } + + function applyDateFilter() { + list_model_proxy.filter_minimum_date = min_date.selectedDate + + if (max_date.selectedDate < min_date.selectedDate) + max_date.selectedDate = min_date.selectedDate + + list_model_proxy.filter_maximum_date = max_date.selectedDate + } + + function applyTickerFilter() { + list_model_proxy.set_coin_filter(combo_base.currentValue + "/" + combo_rel.currentValue) + } + + function applyTickerFilter2(ticker1, ticker2) { + list_model_proxy.set_coin_filter(ticker1 + "/" + ticker2) + } + + function applyFilter() { + applyDateFilter() + applyTickerFilter2(combo_base.currentTicker, combo_rel.currentTicker) + } + + Component.onCompleted: { + list_model_proxy.is_history = root.is_history + applyFilter() + list_model_proxy.apply_all_filtering() + } + + ColumnLayout + { + anchors.horizontalCenter: parent.horizontalCenter + anchors.fill: parent + anchors.margins: 28 + anchors.bottomMargin: is_history ? 0 : 10 + spacing: 15 + + RowLayout + { + spacing: 10 + DefaultButton + { + Layout.preferredWidth: 86 + Layout.preferredHeight: 29 + radius: 7 + label.font.pixelSize: 14 + text: qsTr("Filter") + iconSource: Qaterial.Icons.filter + onClicked: settings.visible = !settings.visible + } + + DefaultButton + { + visible: root.is_history + Layout.preferredWidth: 86 + Layout.preferredHeight: 29 + radius: 7 + label.font.pixelSize: 14 + text: qsTr("Export CSV") + onClicked: + { + export_csv_dialog.folder = General.os_file_prefix + API.app.settings_pg.get_export_folder() + export_csv_dialog.open() + } + } + + DefaultText + { + color: Dex.CurrentTheme.foregroundColor2 + visible: !settings.visible + text: qsTr("Filter") + ": %1 / %2
%3: %4 - %5".arg(combo_base.currentTicker).arg(combo_rel.currentTicker).arg(qsTr("Date")).arg(min_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")).arg(max_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")) + } + } + + ColumnLayout + { + id: settings + visible: false + spacing: 8 + + RowLayout + { + spacing: 10 + DefaultButton + { + visible: root.is_history + enabled: list_model_proxy.can_i_apply_filtering + Layout.preferredWidth: 86 + Layout.preferredHeight: 29 + radius: 7 + label.font.pixelSize: 14 + text: qsTr("Apply Filter") + onClicked: list_model_proxy.apply_all_filtering() + } + + DefaultButton + { + visible: !root.is_history + enabled: API.app.orders_mdl.length > 0 + Layout.preferredWidth: 86 + Layout.preferredHeight: 29 + radius: 7 + label.font.pixelSize: 14 + text: qsTr("Cancel All") + iconSource: Qaterial.Icons.close + onClicked: API.app.trading_pg.orders.cancel_order(list_model_proxy.get_filtered_ids()) + } + } + + RowLayout + { + Layout.alignment: Qt.AlignHCenter + + DefaultSweetComboBox + { + id: combo_base + Layout.preferredWidth: parent.width / 2 - swapCoinFilterIcon.width + model: API.app.portfolio_pg.global_cfg_mdl.all_proxy + valueRole: "ticker" + textRole: 'ticker' + mainBackgroundColor: Dex.CurrentTheme.backgroundColor + popupBackgroundColor: Dex.CurrentTheme.backgroundColor + onCurrentTickerChanged: applyFilter() + } + + Qaterial.ColorIcon + { + id: swapCoinFilterIcon + source: Qaterial.Icons.swapHorizontal + color: Dex.CurrentTheme.foregroundColor + + DefaultMouseArea + { + id: swap_button + anchors.fill: parent + hoverEnabled: true + onClicked: + { + const base_idx = combo_base.currentTicker + combo_base.currentTicker = combo_rel.currentTicker + combo_rel.currentTicker = base_idx + } + } + } + + DefaultSweetComboBox + { + id: combo_rel + Layout.fillWidth: true + model: API.app.portfolio_pg.global_cfg_mdl.all_proxy + valueRole: "ticker" + textRole: 'ticker' + mainBackgroundColor: Dex.CurrentTheme.backgroundColor + popupBackgroundColor: Dex.CurrentTheme.backgroundColor + onCurrentTickerChanged: applyFilter() + } + } + + Row + { + Layout.fillWidth: true + DatePicker + { + id: min_date + width: parent.width * 0.45 + titleText: qsTr("From") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_min_date + onAccepted: applyDateFilter() + } + + Item { width: parent.width * 0.1; height: 1 } + + DatePicker + { + id: max_date + width: parent.width * 0.45 + titleText: qsTr("To") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_max_date + onAccepted: applyDateFilter() + } + } + } + + OrderList + { + id: order_list + items: list_model + is_history: root.is_history + Layout.fillHeight: true + Layout.fillWidth: true + } + } + + ModalLoader + { + id: order_modal + sourceComponent: OrderModal {} + } + + FileDialog + { + id: export_csv_dialog + + title: qsTr("Please choose the CSV export name and location") + fileMode: FileDialog.SaveFile + + defaultSuffix: "csv" + nameFilters: ["CSV files (*.csv)", "All files (*)"] + + onAccepted: { + const path = currentFile.toString() + + // Export + console.log("Exporting to CSV: " + path) + API.app.exporter_service.export_swaps_history_to_csv(path.replace(General.os_file_prefix, "")) + + // Open the save folder + const folder_path = path.substring(0, path.lastIndexOf("/")) + Qt.openUrlExternally(folder_path) + } + onRejected: { + console.log("CSV export cancelled") + } + } +} diff --git a/atomic_defi_design/Dex/Exchange/Trade/PriceLine.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml similarity index 80% rename from atomic_defi_design/Dex/Exchange/Trade/PriceLine.qml rename to atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml index ee566c238..9ebe7892b 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/PriceLine.qml +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/PriceLine.qml @@ -2,8 +2,8 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 -import "../../Components" -import "../../Constants" +import "../../../Components" +import "../../../Constants" import Dex.Themes 1.0 as Dex ColumnLayout @@ -12,21 +12,13 @@ ColumnLayout readonly property string price_reversed: API.app.trading_pg.price_reversed readonly property string cex_price: API.app.trading_pg.cex_price readonly property string cex_price_reversed: API.app.trading_pg.cex_price_reversed - readonly property string cex_price_diff: API.app.trading_pg.cex_price_diff + readonly property string cexPriceDiff: API.app.trading_pg.cex_price_diff readonly property bool invalid_cex_price: API.app.trading_pg.invalid_cex_price readonly property bool price_entered: !General.isZero(non_null_price) readonly property int fontSize: Style.textSizeSmall1 readonly property int fontSizeBigger: Style.textSizeSmall2 - readonly property int line_scale: getComparisonScale(cex_price_diff) - - function getComparisonScale(value) { - return Math.min(Math.pow(10, General.getDigitCount(parseFloat(value))), 1000000000) - } - - function limitDigits(value) { - return parseFloat(General.formatDouble(value, 2)) - } + readonly property int lineScale: General.getComparisonScale(cexPriceDiff) spacing: 20 @@ -80,8 +72,8 @@ ColumnLayout Layout.topMargin: 10 Layout.bottomMargin: Layout.topMargin Layout.alignment: Qt.AlignHCenter - color: parseFloat(cex_price_diff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor - text_value: (parseFloat(cex_price_diff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(limitDigits(cex_price_diff)) + "") + color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + text_value: (parseFloat(cexPriceDiff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(General.limitDigits(cexPriceDiff)) + "") font.pixelSize: fontSize } @@ -90,7 +82,7 @@ ColumnLayout Layout.alignment: Qt.AlignHCenter DefaultText { - text_value: General.formatPercent(line_scale) + text_value: General.formatPercent(lineScale) font.pixelSize: fontSize } @@ -107,13 +99,13 @@ ColumnLayout height: parent.height * 2 anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - anchors.horizontalCenterOffset: 0.5 * parent.width * Math.min(Math.max(parseFloat(cex_price_diff) / line_scale, -1), 1) + anchors.horizontalCenterOffset: 0.5 * parent.width * Math.min(Math.max(parseFloat(cexPriceDiff) / lineScale, -1), 1) } } DefaultText { - text_value: General.formatPercent(-line_scale) + text_value: General.formatPercent(-lineScale) font.pixelSize: fontSize } } diff --git a/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml new file mode 100644 index 000000000..68b534cf9 --- /dev/null +++ b/atomic_defi_design/Dex/Exchange/ProView/TradingInfo/SwapProgress.qml @@ -0,0 +1,310 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 + +import Dex.Themes 1.0 as Dex +import App 1.0 + +import "../../../Components" + +// Content +ColumnLayout +{ + id: root + + property var details + property var lastEvent + + readonly property + var all_events: !details ? [] : has_error_event ? details.events.map(e => e.state) : details.success_events + + // Is there error in swap json? + readonly property bool has_error_event: + { + if (!details) return false + + const events = details.events + + for (let i = events.length - 1; i >= 0; --i) + if (details.error_events.indexOf(events[i].state) !== -1) + return true + + return false + } + + // Total swaptime from sum of events duration + readonly property double totalTimePassed: + { + if (!details) return 0 + + const events = details.events + + let sum = 0 + for (let i = 0; i < events.length; ++i) + sum += events[i].time_diff + + return sum + } + + + // Total swap duration estimate + readonly property double totalTimePassedEstimated: + { + const events = all_events + + let sum = 0 + for (let i = 0; i < events.length; ++i) + sum += API.app.orders_mdl.average_events_time_registry[events[i]] + + return sum + } + + // Current Event index + readonly property int current_event_idx: + { + if (!details) return -1 + const events = details.events + if (events.length === 0) return -1 + if (all_events.length === 0) return -1 + + const last_state = events[events.length - 1].state + if (last_state === "Finished") return -1 + + const idx = all_events.indexOf(last_state) + if (idx === -1) return -1 + + return idx + 1 + } + + // Simulated time of the running event + property double simulatedTime: 0 + function updateSimulatedTime() + { + if (!details) + { + simulatedTime = 0 + return + } + + const events = details.events + if (!events || events.length === 0) + { + simulatedTime = 0 + return + } + + lastEvent = events[events.length - 1] + if (!lastEvent.timestamp) + { + simulatedTime = 0 + return + } + + if (current_event_idx !== -1) + { + const diff = Date.now() - lastEvent.timestamp + simulatedTime = diff - (diff % 1000) + + } else simulatedTime = 0 + } + + Timer + { + running: current_event_idx !== -1 + interval: 1000 + repeat: true + onTriggered: updateSimulatedTime() + } + + // Simulated countdown time until refund unlocked + property double paymentLockCountdownTime: -1 // First we wait for locktime expiry + property double waitUntilCountdownTime: -1 // Then we count down to 'wait_until' time + function updateCountdownTime() + { + if (current_event_idx == -1 || !details) + { + paymentLockCountdownTime = -1 + return + } + + const events = details.events + + if (events[current_event_idx - 1].hasOwnProperty('data')) + { + if (events[current_event_idx - 1]['data'].hasOwnProperty('wait_until')) + { + const diff = events[current_event_idx - 1]['data']['wait_until'] * 1000 - Date.now() + waitUntilCountdownTime = diff - (diff % 1000) + + if (waitUntilCountdownTime <= 0) + { + waitUntilCountdownTime = 0 + } + } + } + + else + { + waitUntilCountdownTime = -1 + } + + if (details.hasOwnProperty('paymentLock')) + { + const lock_diff = details.paymentLock - Date.now() + paymentLockCountdownTime = lock_diff - (lock_diff % 1000) + + if (paymentLockCountdownTime <= 0) + { + paymentLockCountdownTime = 0 + } + } + + else + { + paymentLockCountdownTime = -1 + } + } + + Timer + { + running: !has_error_event ? false : details.events[details.events.length - 1].state == "Finished" ? false : true + interval: 1000 + repeat: true + onTriggered: updateCountdownTime() + } + + function getTimeText(duration, estimated) + { + return `` + qsTr("act", "SHORT FOR ACTUAL TIME") + ": " + `` + + `` + General.durationTextShort(duration) + `` + + ` | ` + qsTr("est", "SHORT FOR ESTIMATED") + ": " + + General.durationTextShort(estimated) + `` + } + + function getRefundText() + { + if ((paymentLockCountdownTime > 0) && (waitUntilCountdownTime == -1)) + { + return `` + qsTr(General.durationTextShort(paymentLockCountdownTime) + " until refund lock is released.") + `` + } + else if (waitUntilCountdownTime > 0) { + if (lastEvent.state !== "Finished") { + return `` + qsTr(General.durationTextShort(waitUntilCountdownTime) + " until refund completed.") + `` + } + } + return "" + } + + // Title + DefaultText + { + Layout.fillWidth: true + text_value: `` + qsTr("Progress details") + `` + + ` | ` + + getTimeText(totalTimePassed + simulatedTime, totalTimePassedEstimated) + font.pixelSize: Style.textSize1 + Layout.bottomMargin: 10 + } + + Repeater + { + Layout.fillHeight: true + model: all_events + + delegate: Item + { + readonly property + var event: + { + if (!details) return undefined + const idx = details.events.map(e => e.state).indexOf(modelData) + if (idx === -1) return undefined + + return details.events[idx] + } + + readonly property bool is_current_event: index === current_event_idx + + readonly property bool is_active: General.exists(event) || is_current_event + + readonly property double time_passed: event ? event.time_diff : is_current_event ? simulatedTime : 0 + + width: root.width + height: 50 + + DefaultText { + id: icon + + text_value: is_active ? "●" : "○" + anchors.left: parent.left + anchors.leftMargin: 10 + anchors.verticalCenter: col_layout.verticalCenter + + color: + { + // Already exists, completed event + if (event) + { + // Red for the Finished if swap failed + if (event.state === "Finished" && details.order_status === "failed") return Dex.CurrentTheme.noColor + + // Red for error event, green for the others + return details.error_events.indexOf(event.state) === -1 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + } + + // In progress one is orange + if (is_current_event) + return Style.colorOrange + + // Passive color for the rest + return Dex.CurrentTheme.foregroundColor3 + } + } + + ColumnLayout + { + id: col_layout + + anchors.left: icon.right + anchors.leftMargin: icon.anchors.leftMargin + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + + DefaultText + { + id: name + + font.pixelSize: Style.textSizeSmall4 + + text_value: getEventText(modelData) + color: event ? Dex.CurrentTheme.foregroundColor : is_current_event ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor3 + } + + AnimatedRectangle + { + id: bar + visible: is_active + width: parent.width + height: 2 + + color: Dex.CurrentTheme.foregroundColor2 + + AnimatedRectangle + { + width: parent.width * (totalTimePassed > 0 ? (time_passed / (totalTimePassed + simulatedTime)) : 0) + height: parent.height + color: Dex.CurrentTheme.okColor + } + } + + DefaultText + { + visible: bar.visible + font.pixelSize: Style.textSizeSmall2 + + text_value: !is_active ? '' : getTimeText(time_passed, API.app.orders_mdl.average_events_time_registry[modelData]) + } + } + } + } +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/Header.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/Header.qml index e3d4890f4..6582c909a 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/Header.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/Header.qml @@ -3,55 +3,53 @@ import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial - import App 1.0 - import "../../../Components" +import Dex.Components 1.0 as Dex -Item { - property bool is_horizontal: false - height: 40 +RowLayout +{ + height: 24 width: parent.width - z: 2 + spacing: 0 - RowLayout + Dex.Text { - width: parent.width - 30 - height: parent.height - anchors.horizontalCenter: parent.horizontalCenter - DefaultText - { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 130 - text: sell_mode? qsTr("You get") : qsTr("You send") - font.family: Style.font_family - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - } - DefaultText - { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 70 + Layout.preferredWidth: 140 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + text_value: sell_mode ? qsTr("You get") : qsTr("You send") + font.family: Style.font_family + font.bold: true + font.pixelSize: 12 + font.weight: Font.Black + } - text: qsTr("Fiat Price") - font.family: Style.font_family - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - horizontalAlignment: Label.AlignRight + Item { Layout.preferredWidth: (parent.width - 300) / 2 } - } - DefaultText - { - Layout.alignment: Qt.AlignVCenter - text: qsTr("CEX rate") - horizontalAlignment: Label.AlignRight - font.family: Style.font_family - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - } + Dex.Text + { + Layout.preferredWidth: 80 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + text_value: qsTr("Fiat Price") + font.family: Style.font_family + font.bold: true + font.pixelSize: 12 + font.weight: Font.Black } + Item { Layout.preferredWidth: (parent.width - 300) / 2 } + + Dex.Text + { + Layout.preferredWidth: 80 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + text_value: qsTr("CEX rate") + font.family: Style.font_family + font.bold: true + font.pixelSize: 12 + font.weight: Font.Black + } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml index db6693427..f6870c633 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/List.qml @@ -4,20 +4,39 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial -import App 1.0 +import "../../../Constants" +import "../../../Components" +import App 1.0 as App +import AtomicDEX.MarketMode 1.0 +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex - -Item { +Widget +{ id: _control + title: qsTr("Best Orders") + margins: 20 + spacing: 20 + Header {} - ListView { - id: list - anchors.topMargin: 40 - anchors.fill: parent + Dex.ListView + { + id: _listView + Layout.fillWidth: true + Layout.fillHeight: true + spacing: 6 + model: API.app.trading_pg.orderbook.best_orders.proxy_mdl + clip: true reuseItems: true - delegate: ListDelegate {} + scrollbar_visible: false + + delegate: ListDelegate + { + width: _listView.width + height: 30 + } } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml index 073030ba6..5834c977a 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/BestOrder/ListDelegate.qml @@ -2,161 +2,183 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 - import Qaterial 1.0 as Qaterial import "../../../Components" -import "../../../Constants" as Constants - +import "../../../Constants" +import Dex.Themes 1.0 as Dex +import AtomicDEX.MarketMode 1.0 import App 1.0 as App +import Dex.Components 1.0 as Dex -Item { +Item +{ id: _control - property bool coinEnable: Constants.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled - property var isAsk: { - if(parseInt(cex_rates)>0){ - false - }else if(parseInt(cex_rates)<0) { - true - }else { - undefined - } - } - width: visible? list.width : 0 - height: 36 + property bool coinEnable: API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled + property bool isAsk - AnimatedRectangle { + AnimatedRectangle + { visible: mouse_are.containsMouse width: parent.width height: parent.height - color: App.DexTheme.foregroundColor + color: Dex.CurrentTheme.foregroundColor opacity: 0.1 } - RowLayout { + RowLayout + { id: row - width: parent.width - 30 + width: parent.width height: parent.height - anchors.horizontalCenter: parent.horizontalCenter - spacing: 10 - Row { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 130 - leftPadding: -10 - spacing: 5 - DefaultImage { - source: Constants.General.coinIcon(coin) - width: 20 - height: 20 - smooth: true - antialiasing: true - opacity: !_control.coinEnable? .1 : 1 + spacing: 0 + + Item + { + Layout.fillHeight: true + Layout.preferredWidth: 140 + + DexImage + { + id: asset_image + width: 24 + height: 24 anchors.verticalCenter: parent.verticalCenter + source: General.coinIcon(coin) + opacity: !_control.coinEnable? .1 : 1 } - DefaultText { - anchors.verticalCenter: parent.verticalCenter - leftPadding: 2 - text: send + " " + atomic_qt_utilities.retrieve_main_ticker(coin) + + Dex.Text + { + anchors.top: parent.top + anchors.left: asset_image.right + horizontalAlignment: Text.AlignLeft + anchors.leftMargin: 5 + text: send font.family: App.DexTypo.fontFamily font.pixelSize: 12 - } - } - DefaultTooltip { - id: _tooltip - dim: true - modal: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside - - width: 250 - contentItem: DexLabelUnlinked { - text_value: qsTr(" %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?
Yes - No").arg(coin).arg(coin) - wrapMode: DefaultText.Wrap - width: 250 - onLinkActivated: { - if(link==="#no") { - _tooltip.close() - }else { - if (Constants.API.app.enable_coins([coin]) === true) { - _control.coinEnable = true - _tooltip.close() - } - else { - cannot_enable_coin_modal.open() - } - } - } - ModalLoader { - property string coin_to_enable_ticker: coin - id: cannot_enable_coin_modal - sourceComponent: CannotEnableCoinModal { coin_to_enable_ticker: cannot_enable_coin_modal.coin_to_enable_ticker } - } + Dex.Text + { + anchors.bottom: parent.bottom + anchors.left: asset_image.right + horizontalAlignment: Text.AlignLeft + anchors.leftMargin: 5 + text: coin + font.family: App.DexTypo.fontFamily + font.pixelSize: 12 } - delay: 200 } - DexLabel { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: 70 - text: price_fiat + Constants.API.app.settings_pg.current_fiat_sign + Item { Layout.preferredWidth: (parent.width - 300) / 2 } + + Dex.Text + { + Layout.preferredWidth: 80 + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + text: price_fiat + API.app.settings_pg.current_fiat_sign font.family: App.DexTypo.fontFamily font.pixelSize: 12 - horizontalAlignment: Label.AlignRight - opacity: 1 - } - DexLabel { - Layout.alignment: Qt.AlignVCenter - - text: cex_rates==="0"? "N/A" : parseFloat(cex_rates)>0? "+"+parseFloat(cex_rates).toFixed(2)+"%" : parseFloat(cex_rates).toFixed(2)+"%" + + Item { Layout.preferredWidth: (parent.width - 300) / 2 } + + Dex.Text + { + Layout.preferredWidth: 80 + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + wrapMode: Text.NoWrap font.family: App.DexTypo.fontFamily font.pixelSize: 12 - Behavior on rightPadding { - NumberAnimation { + text: cex_rates === "0" ? "N/A" : + parseFloat(cex_rates) > 0 ? "+" + parseFloat(cex_rates).toFixed(2) + "%" : + parseFloat(cex_rates).toFixed(2) + "%" + color: cex_rates === "0" ? Qt.darker(Dex.CurrentTheme.foregroundColor) : + parseFloat(cex_rates) < 0 ? Dex.CurrentTheme.okColor : + Dex.CurrentTheme.noColor + + Behavior on rightPadding + { + NumberAnimation + { duration: 150 } } + } + } - color:cex_rates==="0"? Qt.darker(App.DexTheme.foregroundColor) : parseFloat(cex_rates)<0? App.DexTheme.greenColor : App.DexTheme.redColor - horizontalAlignment: Label.AlignRight - opacity: 1 + DefaultTooltip + { + id: _tooltip + dim: true + modal: true + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside + width: 250 + + contentItem: DexLabelUnlinked + { + text_value: qsTr(" %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?
Yes - No").arg(coin).arg(coin) + wrapMode: DefaultText.Wrap + width: 250 + onLinkActivated: + { + if (link === "#no") + { + _tooltip.close(); + } + else + { + if (API.app.enable_coins([coin]) === true) + { + _control.coinEnable = true; + _tooltip.close(); + } + else { + cannot_enable_coin_modal.open(); + } + } + } + ModalLoader { + property string coin_to_enable_ticker: coin + id: cannot_enable_coin_modal + sourceComponent: CannotEnableCoinModal { coin_to_enable_ticker: cannot_enable_coin_modal.coin_to_enable_ticker } + } } + delay: 200 } - - DefaultMouseArea { + DefaultMouseArea + { id: mouse_are anchors.fill: parent hoverEnabled: true - onClicked: { - console.log(order_form.visible) - if(!Constants.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled){ + + onClicked: + { + if (!API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled) + { _tooltip.open() - }else { - app.pairChanged(base_ticker, coin) - Constants.API.app.trading_pg.orderbook.select_best_order(uuid) - if(order_form.visible === false) { - order_form.visible = true + } + else + { + placeOrderForm.visible = General.flipFalse(placeOrderForm.visible) + if (API.app.trading_pg.market_mode == MarketMode.Buy) + { + app.pairChanged(rel_ticker, coin) } - if(order_form.hidden === true) { - order_form.hidden = false - if(order_form.contentVisible === false) { - order_form.contentVisible = true - } + else + { + app.pairChanged(base_ticker, coin) } + API.app.trading_pg.orderbook.select_best_order(uuid) + orderSelected() } - - //if(is_mine) return - //isAsk? selectOrder(true, coin, price, quantity, price_denom, price_numer, quantity_denom, quantity_numer, min_volume) : selectOrder(false, coin, price, quantity, price_denom, price_numer, quantity_denom, quantity_numer, min_volume) } } - HorizontalLine { - width: parent.width - opacity: .4 - } - } diff --git a/atomic_defi_design/Dex/Exchange/Trade/CandleStickChart.qml b/atomic_defi_design/Dex/Exchange/Trade/CandleStickChart.qml deleted file mode 100644 index 185906b2f..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/CandleStickChart.qml +++ /dev/null @@ -1,143 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import QtCharts 2.3 -import QtWebEngine 1.8 - -import "../../Components" - -import App 1.0 -import Dex.Themes 1.0 as Dex - -// List - -DexBox { - id: graph_bg - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top - - - content: Item { - id: root - - width: graph_bg.width - height: graph_bg.height - - property bool pair_supported: false - readonly property bool is_fetching: dashboard.webEngineView.loadProgress < 100 - - onIs_fetchingChanged: dashboard.webEngineView.visible = !is_fetching && pair_supported - - RowLayout { - visible: pair_supported && !dashboard.webEngineView.visible - anchors.centerIn: parent - - DefaultBusyIndicator { - Layout.alignment: Qt.AlignHCenter - Layout.leftMargin: -15 - Layout.rightMargin: Layout.leftMargin*0.75 - scale: 0.5 - } - - DefaultText { - text_value: qsTr("Loading market data") + "..." - } - } - - DefaultText { - visible: !pair_supported - onVisibleChanged: if(visible) { - dex_chart.visible = false - } - text_value: qsTr("There is no chart data for this pair yet") - anchors.centerIn: parent - } - - Component.onCompleted: try{loadChart(left_ticker?? atomic_app_primary_coin, right_ticker?? atomic_app_secondary_coin)}catch(e){} - - Connections { - target: app - function onPairChanged(base, rel) { - root.loadChart(base, rel) - } - } - - readonly property string theme: Dex.CurrentTheme.getColorMode() === Dex.CurrentTheme.ColorMode.Dark ? "dark" : "light" - - Connections - { - target: Dex.CurrentTheme - function onThemeChanged() - { - loadChart(left_ticker?? atomic_app_primary_coin, right_ticker?? atomic_app_secondary_coin, true) - } - } - - property string chart_base - property string chart_rel - property string loaded_symbol - function loadChart(base, rel, force=false) { - const pair = atomic_qt_utilities.retrieve_main_ticker(base) + "/" + atomic_qt_utilities.retrieve_main_ticker(rel) - const pair_reversed = atomic_qt_utilities.retrieve_main_ticker(rel) + "/" + atomic_qt_utilities.retrieve_main_ticker(base) - - console.log("Will try to load TradingView chart", pair) - - // Normal pair - let symbol = General.supported_pairs[pair] - if(!symbol) { - console.log("Symbol not found for", pair) - symbol = General.supported_pairs[pair_reversed] - } - - // Reversed pair - if(!symbol) { - console.log("Symbol not found for", pair_reversed) - pair_supported = false - return - } - - pair_supported = true - - // Load HTML - if(!force && symbol === loaded_symbol) { - console.log("Chart is already loaded,", symbol) - return - } - - loaded_symbol = symbol - console.log("Loading TradingView chart", symbol, " theme: ", theme) - - chart_base = atomic_qt_utilities.retrieve_main_ticker(base) - chart_rel = atomic_qt_utilities.retrieve_main_ticker(rel) - - dashboard.webEngineView.loadHtml(` - - - -
-
- - -
- `); - } - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml index f315edd17..937940c3e 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ConfirmTradeModal.qml @@ -1,6 +1,7 @@ import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 +import Qaterial 1.0 as Qaterial import AtomicDEX.TradingError 1.0 import "../../Components" @@ -13,264 +14,342 @@ import Dex.Themes 1.0 as Dex MultipageModal { id: root - - width: 650 - readonly property var fees: API.app.trading_pg.fees + horizontalPadding: 30 + verticalPadding: 40 + MultipageModalContent { titleText: qsTr("Confirm Exchange Details") - - OrderContent - { - Layout.fillWidth: true - details: - ({ - base_coin: base_ticker, - rel_coin: rel_ticker, - base_amount: base_amount, - rel_amount: rel_amount, - order_id: '', - date: '', - }) - } - - PriceLineSimplified { Layout.fillWidth: true } - - HorizontalLine - { - Layout.fillWidth: true - } - - ColumnLayout - { - Layout.fillWidth: true - - DefaultText + title.font.pixelSize: Style.textSize2 + titleAlignment: Qt.AlignHCenter + titleTopMargin: 10 + topMarginAfterTitle: 0 + flickMax: window.height - 450 + + header: [ + RowLayout { - Layout.alignment: Qt.AlignLeft - text_value: qsTr("This swap request can not be undone and is a final event!") - } + id: dex_pair_badges - DefaultText - { - Layout.alignment: Qt.AlignLeft - text_value: qsTr("This transaction can take up to 60 mins - DO NOT close this application!") - font.pixelSize: Style.textSizeSmall4 - } - } - - Item - { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter - Layout.preferredHeight: fees_detail.height + 10 - opacity: .7 - Column - { - id: fees_detail - anchors.verticalCenter: parent.verticalCenter - visible: fees.base_transaction_fees_ticker && !API.app.trading_pg.preimage_rpc_busy - - Repeater + PairItemBadge { - model: fees.base_transaction_fees_ticker && !API.app.trading_pg.preimage_rpc_busy ? General.getFeesDetail(fees) : [] - delegate: DefaultText - { - font.pixelSize: Style.textSizeSmall1 - text: General.getFeesDetailText(modelData.label, modelData.fee, modelData.ticker) - } - anchors.horizontalCenter: parent.horizontalCenter + source: General.coinIcon(!base_ticker ? atomic_app_primary_coin : base_ticker) + ticker: base_ticker + fullname: General.coinName(base_ticker) + amount: base_amount } - Item {width: 1; height: 10} - Repeater - { - model: fees.base_transaction_fees_ticker ? fees.total_fees : [] - delegate: DefaultText - { - text: General.getFeesDetailText( - qsTr("Total %1 fees:").arg(modelData.coin), - modelData.required_balance, - modelData.coin) - } - anchors.horizontalCenter: parent.horizontalCenter - } - Item {width: 1; height: 10} - } - DefaultText - { - id: errors - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - horizontalAlignment: DefaultText.AlignHCenter - font: DexTypo.caption - color: Dex.CurrentTheme.noColor - text_value: General.getTradingError( - last_trading_error, - curr_fee_info, - base_ticker, - rel_ticker, left_ticker, right_ticker) - } - } - ColumnLayout - { - id: config_section + Qaterial.Icon + { + Layout.fillWidth: true + Layout.alignment: Qt.AlignVCenter - readonly property var default_config: API.app.trading_pg.get_raw_mm2_coin_cfg(rel_ticker) + color: Dex.CurrentTheme.foregroundColor + icon: Qaterial.Icons.swapHorizontal + } - readonly property bool is_dpow_configurable: config_section.default_config.requires_notarization || false + PairItemBadge + { + source: General.coinIcon(!rel_ticker ? atomic_app_primary_coin : rel_ticker) + ticker: rel_ticker + fullname: General.coinName(rel_ticker) + amount: rel_amount + } + }, - Layout.bottomMargin: 10 - Layout.alignment: Qt.AlignHCenter + PriceLineSimplified + { + id: price_line + Layout.fillWidth: true + }, ColumnLayout { + id: warnings_text + Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter - visible: !enable_custom_config.checked - - DefaultText - { - Layout.alignment: Qt.AlignHCenter - text_value: qsTr("Security configuration") - font.weight: Font.Medium - } DefaultText { Layout.alignment: Qt.AlignHCenter - text_value: "✅ " + (config_section.is_dpow_configurable ? qsTr("dPoW protected") : - qsTr("%1 confirmations for incoming %2 transactions").arg(config_section.default_config.required_confirmations || 1).arg(rel_ticker)) + text_value: qsTr("This swap request can not be undone and is a final event!") } DefaultText { - visible: config_section.is_dpow_configurable + id: warnings_tx_time_text Layout.alignment: Qt.AlignHCenter - text_value: General.cex_icon + ' ' + qsTr('Read more about dPoW') + '' - font.pixelSize: Style.textSizeSmall2 + text_value: qsTr("This transaction can take up to 60 mins - DO NOT close this application!") + font.pixelSize: Style.textSizeSmall4 } } + ] - // Enable custom config - DexCheckBox - { - Layout.alignment: Qt.AlignHCenter - Layout.fillWidth: true - Layout.maximumWidth: config_section.width + ColumnLayout + { + id: config_section - id: enable_custom_config + readonly property var default_config: API.app.trading_pg.get_raw_mm2_coin_cfg(rel_ticker) + readonly property bool is_dpow_configurable: config_section.default_config.requires_notarization || false - spacing: 2 - text: qsTr("Use custom protection settings for incoming %1 transactions", "TICKER").arg(rel_ticker) - boxWidth: 24 - boxHeight: 24 - label.horizontalAlignment: Text.AlignHCenter - } + width: dex_pair_badges.width - 20 + Layout.alignment: Qt.AlignCenter + Layout.topMargin: 8 - // Configuration settings - ColumnLayout - { - id: custom_config - visible: enable_custom_config.checked + spacing: 5 - Layout.alignment: Qt.AlignHCenter + // Fees Area + DefaultRectangle { + Layout.alignment: Qt.AlignCenter + Layout.preferredHeight: 150 + Layout.preferredWidth: parent.width - 40 + color: DexTheme.contentColorTop + visible: !buy_sell_rpc_busy - // dPoW configuration switch - DefaultSwitch + ColumnLayout { - id: enable_dpow_confs - Layout.alignment: Qt.AlignHCenter + anchors.centerIn: parent + visible: !fees_detail.visible - visible: config_section.is_dpow_configurable - checked: true - text: qsTr("Enable Komodo dPoW security") - } + DefaultBusyIndicator + { + Layout.preferredHeight: 100 + Layout.preferredWidth: 100 + Layout.alignment: Qt.AlignHCenter + Layout.leftMargin: -15 + Layout.rightMargin: Layout.leftMargin * 0.75 + scale: 0.8 + } - DefaultText - { - visible: enable_dpow_confs.visible && enable_dpow_confs.enabled - Layout.alignment: Qt.AlignHCenter - text_value: General.cex_icon + ' ' + qsTr('Read more about dPoW') + '' - font.pixelSize: Style.textSizeSmall2 + DefaultText + { + text_value: qsTr("Loading fees...") + Layout.bottomMargin: 8 + } } - // Normal configuration settings ColumnLayout { - Layout.alignment: Qt.AlignHCenter - visible: !config_section.is_dpow_configurable || !enable_dpow_confs.checked - enabled: !config_section.is_dpow_configurable || !enable_dpow_confs.checked + id: fees_detail + width: parent.width - 20 + anchors.centerIn: parent + spacing: 6 + visible: root.fees.hasOwnProperty('base_transaction_fees_ticker') && !API.app.trading_pg.preimage_rpc_busy - HorizontalLine + Repeater { - Layout.topMargin: 10 - Layout.bottomMargin: 10 - Layout.fillWidth: true + model: root.fees.hasOwnProperty('base_transaction_fees_ticker') && !API.app.trading_pg.preimage_rpc_busy ? General.getFeesDetail(root.fees) : [] + delegate: DefaultText + { + font.pixelSize: Style.textSizeSmall1 + text: General.getFeesDetailText(modelData.label, modelData.fee, modelData.ticker) + } } - DefaultText + Repeater { - Layout.preferredHeight: 10 + model: root.fees.hasOwnProperty('base_transaction_fees_ticker') ? root.fees.total_fees : [] + delegate: DefaultText + { + text: General.getFeesDetailText( + qsTr("Total %1 fees:").arg(modelData.coin), + modelData.required_balance, + modelData.coin) + } Layout.alignment: Qt.AlignHCenter - text_value: qsTr("Required Confirmations") + ": " + required_confirmation_count.value - color: DexTheme.foregroundColor - opacity: parent.enabled ? 1 : .6 } - DexSlider + DefaultText { - id: required_confirmation_count - readonly property int default_confirmation_count: 3 + id: errors + visible: text_value != '' Layout.alignment: Qt.AlignHCenter - stepSize: 1 - from: 1 - to: 5 - live: true - snapMode: Slider.SnapAlways - value: default_confirmation_count + width: parent.width + horizontalAlignment: DefaultText.AlignHCenter + font: DexTypo.caption + color: Dex.CurrentTheme.noColor + text_value: General.getTradingError( + last_trading_error, + curr_fee_info, + base_ticker, + rel_ticker, left_ticker, right_ticker) } + } } - FloatingBackground + // Custom config checkbox + Item { - visible: enable_custom_config.visible && enable_custom_config.enabled && enable_custom_config.checked && - (config_section.is_dpow_configurable && !enable_dpow_confs.checked) - Layout.alignment: Qt.AlignHCenter - Layout.bottomMargin: 10 + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: parent.width - 10 + height: childrenRect.height + visible: !buy_sell_rpc_busy - color: Style.colorRed2 + ColumnLayout + { + id: use_custom + anchors.horizontalCenter: parent.horizontalCenter + + spacing: 5 - width: dpow_off_warning.width + 20 - height: dpow_off_warning.height + 20 + DefaultCheckBox + { + id: enable_custom_config + Layout.alignment: Qt.AlignCenter + spacing: 2 + boxWidth: 20 + boxHeight: 20 + height: 50 + label.wrapMode: Label.NoWrap + + text: qsTr("Use custom protection settings for incoming %1 transactions", "TICKER").arg(rel_ticker) + } + + DefaultSwitch + { + id: enable_dpow_confs + visible: enable_custom_config.checked && config_section.is_dpow_configurable + checked: true + Layout.preferredWidth: 260 + Layout.alignment: Qt.AlignCenter + mouseArea.hoverEnabled: true + labelWidth: 200 + label.wrapMode: Label.NoWrap + label.text: qsTr("Enable Komodo dPoW security") + label2.text: General.cex_icon + ' ' + qsTr('Read more about dPoW') + '' + } + + ColumnLayout + { + height: 50 + Layout.alignment: Qt.AlignCenter + spacing: 5 + + DefaultText + { + height: 16 + Layout.alignment: Qt.AlignCenter + visible: !enable_custom_config.checked + text_value: qsTr("Security configuration") + font.weight: Font.Medium + } + + DefaultText + { + height: 12 + font: DexTypo.caption + Layout.alignment: Qt.AlignCenter + horizontalAlignment: Text.AlignHCenter + visible: !enable_custom_config.checked + text_value: "✅ " + ( + config_section.is_dpow_configurable + ? '' + + qsTr("dPoW protected") + General.cex_icon + '' + : qsTr("%1 confirmations for incoming %2 transactions") + .arg(config_section.default_config.required_confirmations || 1).arg(rel_ticker) + ) + } + } + } + } + + // Configuration settings + Item + { + Layout.alignment: Qt.AlignCenter + Layout.preferredWidth: parent.width - 10 + Layout.preferredHeight: 90 + height: childrenRect.height + visible: !buy_sell_rpc_busy ColumnLayout { - id: dpow_off_warning - anchors.centerIn: parent + id: security_config + anchors.horizontalCenter: parent.horizontalCenter + height: 60 + spacing: 3 - DefaultText + ColumnLayout { - Layout.alignment: Qt.AlignHCenter - text_value: Style.warningCharacter + " " + qsTr("Warning, this atomic swap is not dPoW protected!") + Layout.alignment: Qt.AlignCenter + spacing: 3 + + DefaultText + { + height: 30 + Layout.alignment: Qt.AlignCenter + horizontalAlignment: Text.AlignHCenter + visible: required_confirmation_count.visible + text_value: qsTr("Required Confirmations") + ": " + required_confirmation_count.value + color: Dex.CurrentTheme.foregroundColor + opacity: parent.enabled ? 1 : .6 + } + + DefaultSlider + { + id: required_confirmation_count + height: 30 + + Layout.alignment: Qt.AlignCenter + + visible: enable_custom_config.checked && (!config_section.is_dpow_configurable || !enable_dpow_confs.checked) + readonly property int default_confirmation_count: 3 + stepSize: 1 + from: 1 + to: 5 + live: true + snapMode: Slider.SnapAlways + value: default_confirmation_count + } + } + + // No dPoW Warning + FloatingBackground + { + Layout.alignment: Qt.AlignCenter + width: 360 + height: 30 + color: Style.colorRed2 + visible: { + enable_custom_config.checked && (config_section.is_dpow_configurable && !enable_dpow_confs.checked) + } + + DefaultText + { + id: dpow_off_warning + anchors.fill: parent + color: Style.colorWhite0 + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + text_value: Style.warningCharacter + " " + qsTr("Warning, this atomic swap is not dPoW protected!") + } } } } - DefaultBusyIndicator + + Item { visible: buy_sell_rpc_busy - Layout.alignment: Qt.AlignCenter + height: config_section.height + width: config_section.width + + DefaultBusyIndicator + { + id: rpcBusyIndicator + anchors.fill: parent + anchors.centerIn: parent + } } } - HorizontalLine { Layout.fillWidth: true } - footer: [ Item { Layout.fillWidth: true }, - DexAppButton + + DefaultButton { text: qsTr("Cancel") padding: 10 @@ -279,7 +358,9 @@ MultipageModal radius: 10 onClicked: root.close() }, + Item { Layout.fillWidth: true }, + DexGradientAppButton { text: qsTr("Confirm") @@ -297,6 +378,7 @@ MultipageModal config_section.default_config) } }, + Item { Layout.fillWidth: true } ] } diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Header.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Header.qml index 9839e5f7c..05fb44c83 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Header.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Header.qml @@ -4,46 +4,52 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial -import App 1.0 +import "../../../Constants" +import Dex.Components 1.0 as Dex -import "../../../Components" - -Item +Row { - property bool is_ask: false - RowLayout + width: parent.width + height: 24 + spacing: 0 + + Dex.Text + { + width: parent.width * 0.31 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + text: qsTr("Price") + " (" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + ")" + font.family: DexTypo.fontFamily + font.pixelSize: 12 + font.bold: true + font.weight: Font.Black + } + + Item { width: parent.width * 0.01 } + + Dex.Text + { + width: parent.width * 0.37 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + text: qsTr("Quantity") + " (" + atomic_qt_utilities.retrieve_main_ticker(left_ticker) + ")" + font.family: DexTypo.fontFamily + font.pixelSize: 12 + font.bold: true + font.weight: Font.Black + } + + Item { width: parent.width * 0.01 } + + Dex.Text { - anchors.fill: parent - DefaultText - { - Layout.preferredWidth: (parent.width / 100) * 33 - text: is_ask ? qsTr("Price") + " (" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + ")" : - qsTr("Price") + " (" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + ")" - font.family: DexTypo.fontFamily - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - horizontalAlignment: Text.AlignRight - } - DefaultText - { - Layout.preferredWidth: (parent.width / 100) * 30 - text: qsTr("Quantity") + " (" + atomic_qt_utilities.retrieve_main_ticker(left_ticker) + ")" - font.family: DexTypo.fontFamily - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - horizontalAlignment: Text.AlignRight - } - DefaultText - { - Layout.preferredWidth: (parent.width / 100) * 30 - text: qsTr("Total") + " (" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + ")" - font.family: DexTypo.fontFamily - font.pixelSize: 12 - font.bold: true - font.weight: Font.Black - horizontalAlignment: Text.AlignRight - } + width: parent.width * 0.30 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignRight + text: qsTr("Total") + " (" + atomic_qt_utilities.retrieve_main_ticker(right_ticker) + ")" + font.family: DexTypo.fontFamily + font.pixelSize: 12 + font.bold: true + font.weight: Font.Black } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Horizontal.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Horizontal.qml index 4d0417fe4..e45193507 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Horizontal.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Horizontal.qml @@ -20,14 +20,17 @@ Item { anchors.verticalCenter: parent.verticalCenter radius: 6 color: "transparent" + RowLayout { anchors.fill: parent spacing: 0 + List { isAsk: false Layout.fillHeight: true Layout.fillWidth: true } + List { isAsk: true Layout.fillHeight: true diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/List.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/List.qml index e5a4d45b2..23e54d660 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/List.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/List.qml @@ -13,28 +13,31 @@ Item property bool isAsk property bool isVertical: false + width: parent.width + height: parent.height ListView { - id: orderList - anchors.fill: parent + id: orderbook_list + width: parent.width + height: parent.height model: isAsk ? API.app.trading_pg.orderbook.asks.proxy_mdl : API.app.trading_pg.orderbook.bids.proxy_mdl clip: true reuseItems: true spacing: 8 - onContentHeightChanged : + onContentHeightChanged: { if (isVertical) _tm.start(); } delegate: Item { - width: orderList.width + width: orderbook_list.width height: 24 + ListDelegate { - anchors.centerIn: parent width: parent.width height: parent.height isAsk: _control.isAsk ? true : false @@ -47,8 +50,8 @@ Item interval: 2000 onTriggered: { - orderList.positionViewAtEnd() + orderbook_list.positionViewAtEnd() } } } -} +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml index bdf48a04a..a665959c0 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/ListDelegate.qml @@ -5,28 +5,109 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial import "../../../Components" -import "../../../Constants" import App 1.0 -import Dex.Themes 1.0 as Dex import bignumberjs 1.0 +import "../../../Constants" +import Dex.Themes 1.0 as Dex +import Dex.Components 1.0 as Dex +import AtomicDEX.MarketMode 1.0 +import AtomicDEX.TradingError 1.0 + Item { property bool isAsk + DefaultTooltip + { + visible: mouse_area.containsMouse && (tooltip_text.text_value != "") + width: 300 + + contentItem: RowLayout + { + width: 290 + + Qaterial.ColorIcon + { + Layout.fillHeight: true + Layout.alignment: Qt.AlignVCenter + source: Qaterial.Icons.alert + color: Qaterial.Colors.amber + } + + DexLabel + { + id: tooltip_text + Layout.fillWidth: true + + text_value: + { + if (mouse_area.containsMouse) + { + let relMaxTakerVol = parseFloat(API.app.trading_pg.orderbook.rel_max_taker_vol.decimal); + let baseMaxTakerVol = parseFloat(API.app.trading_pg.orderbook.base_max_taker_vol.decimal); + + if (!enough_funds_to_pay_min_volume) + { + return qsTr("This order requires a minimum amount of %1 %2
You don't have enough funds.
%3") + .arg(parseFloat(min_volume).toFixed(8)) + .arg(isAsk ? right_ticker : left_ticker) + .arg(relMaxTakerVol > 0 || baseMaxTakerVol > 0 ? + "Your max balance after fees is: %1".arg(isAsk ? + relMaxTakerVol.toFixed(8) : baseMaxTakerVol.toFixed(8)) : "") + } + + if ([TradingError.LeftParentChainNotEnoughBalance, TradingError.RightParentChainNotEnoughBalance, + TradingError.LeftParentChainNotEnabled, TradingError.RightParentChainNotEnabled].includes(last_trading_error)) + { + return General.getTradingError( + last_trading_error, curr_fee_info, + base_ticker, rel_ticker, left_ticker, + right_ticker) + } + + if (!([TradingError.None, TradingError.PriceFieldNotFilled, TradingError.VolumeFieldNotFilled].includes(last_trading_error))) + { + if (isAsk && API.app.trading_pg.market_mode == MarketMode.Buy) + { + return General.getTradingError( + last_trading_error, curr_fee_info, + base_ticker, rel_ticker, left_ticker, + right_ticker) + } + + if (!isAsk && API.app.trading_pg.market_mode == MarketMode.Sell) + { + return General.getTradingError( + last_trading_error, curr_fee_info, + base_ticker, rel_ticker, left_ticker, + right_ticker) + } + return "" + } + return "" + } + return "" + } + wrapMode: Text.WordWrap + } + } + delay: 200 + } + DefaultMouseArea { id: mouse_area anchors.fill: parent hoverEnabled: true + onClicked: { - if(is_mine) return + if (is_mine) return - if(enough_funds_to_pay_min_volume) + if (enough_funds_to_pay_min_volume ) { - exchange_trade.orderSelected = true - orderList.currentIndex = index + orderbook_list.currentIndex = index selectOrder(isAsk, coin, price, quantity, price_denom, price_numer, quantity_denom, quantity_numer, @@ -34,9 +115,8 @@ Item rel_min_volume, rel_max_volume, base_max_volume_denom, base_max_volume_numer, uuid) - order_form.visible = General.flipFalse(order_form.visible) - order_form.hidden = General.flipTrue(order_form.hidden) - if (!order_form.hidden) order_form.contentVisible = General.flipFalse(order_form.contentVisible) + placeOrderForm.visible = General.flipFalse(placeOrderForm.visible) + orderSelected() } } @@ -82,65 +162,54 @@ Item } } - RowLayout + Row { id: row anchors.fill: parent anchors.horizontalCenter: parent.horizontalCenter onWidthChanged: progress.width = ((depth * 100) * (width + 40)) / 100 + spacing: 0 - // error icon - DefaultAlertIcon - { - visible: !enough_funds_to_pay_min_volume - iconSize: 12 - - tooltipText: - { - let relMaxTakerVol = parseFloat(API.app.trading_pg.orderbook.rel_max_taker_vol.decimal); - let baseMaxTakerVol = parseFloat(API.app.trading_pg.orderbook.base_max_taker_vol.decimal); - - qsTr("This order requires a minimum amount of %1 %2. %3") - .arg(parseFloat(min_volume).toFixed(8)) - .arg(isAsk ? API.app.trading_pg.market_pairs_mdl.right_selected_coin : API.app.trading_pg.market_pairs_mdl.left_selected_coin) - .arg(relMaxTakerVol > 0 || baseMaxTakerVol > 0 ? "Your max balance after fees is: %1".arg(isAsk ? relMaxTakerVol.toFixed(8) : baseMaxTakerVol.toFixed(8)) : "") - } - } - - // Price - DefaultText + Dex.ElidableText { - Layout.preferredWidth: (parent.width / 100) * 33 + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.31 text: { new BigNumber(price).toFixed(8) } font.family: DexTypo.fontFamily font.pixelSize: 12 color: isAsk ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor - elide: Text.ElideRight horizontalAlignment: Text.AlignRight + wrapMode: Text.NoWrap } + Item { width: parent.width * 0.01 } + // Quantity - DefaultText + Dex.ElidableText { - Layout.preferredWidth: (parent.width / 100) * 30 + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.37 text: { new BigNumber(quantity).toFixed(6) } font.family: DexTypo.fontFamily font.pixelSize: 12 - elide: Text.ElideRight horizontalAlignment: Text.AlignRight onTextChanged: depth_bar.width = ((depth * 100) * (mouse_area.width + 40)) / 100 + wrapMode: Text.NoWrap } + Item { width: parent.width * 0.01 } + // Total - DefaultText + Dex.ElidableText { - Layout.preferredWidth: (parent.width / 100) * 30 + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.30 rightPadding: (is_mine) && (mouse_area.containsMouse || cancel_button.containsMouse) ? 30 : 0 font.family: DexTypo.fontFamily font.pixelSize: 12 text: { new BigNumber(total).toFixed(6) } - elide: Text.ElideRight horizontalAlignment: Text.AlignRight + wrapMode: Text.NoWrap Behavior on rightPadding { NumberAnimation { duration: 150 } } } @@ -151,13 +220,14 @@ Item { id: cancel_button_text property bool requested_cancel: false + visible: is_mine && !requested_cancel - source: Qaterial.Icons.close anchors.verticalCenter: parent.verticalCenter anchors.verticalCenterOffset: 1 anchors.right: parent.right anchors.rightMargin: mouse_area.containsMouse || cancel_button.containsMouse ? 12 : 6 + Behavior on iconSize { NumberAnimation @@ -178,10 +248,9 @@ Item anchors.fill: parent hoverEnabled: true - onClicked: { - if(!is_mine) return + if (!is_mine) return cancel_button_text.requested_cancel = true cancelOrder(uuid) diff --git a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml index 8c9790f61..2ccc364e2 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/OrderBook/Vertical.qml @@ -5,46 +5,48 @@ import QtQuick.Controls 2.15 import Qaterial 1.0 as Qaterial import "../../../Components" +import "../../../Constants" import App 1.0 import Dex.Themes 1.0 as Dex -FloatingBackground +Widget { - visible: isUltraLarge - Layout.fillWidth: true - Layout.fillHeight: true - radius: 10 + title: qsTr("Order Book") - ColumnLayout + margins: 20 + spacing: 20 + + Header { - anchors.fill: parent - anchors.margins: 20 - spacing: 12 + Layout.preferredHeight: 30 + Layout.fillWidth: true + } - Header - { - Layout.fillWidth: true - Layout.preferredHeight: 30 - } + List + { + isAsk: true + isVertical: true + Layout.fillHeight: true + Layout.fillWidth: true + } - List - { - isAsk: true - isVertical: true - Layout.fillHeight: true - Layout.fillWidth: true - } - Item + Item + { + Layout.preferredHeight: 4 + Layout.fillWidth: true + Rectangle { - Layout.preferredHeight: 8 - Layout.fillWidth: true + width: parent.width + height: parent.height + anchors.horizontalCenter: parent.horizontalCenter + color: Dex.CurrentTheme.floatingBackgroundColor } + } - List - { - isAsk: false - Layout.fillHeight: true - Layout.fillWidth: true - } + List + { + isAsk: false + Layout.fillHeight: true + Layout.fillWidth: true } -} +} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderLine.qml b/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderLine.qml deleted file mode 100644 index 80b7af29b..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderLine.qml +++ /dev/null @@ -1,207 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import Qaterial 1.0 as Qaterial - -import QtGraphicalEffects 1.0 - -import App 1.0 - -import "../../../Components" -import Dex.Themes 1.0 as Dex - -Rectangle -{ - property var details - property alias clickable: mouse_area.enabled - readonly property bool is_placed_order: !details ? false : details.order_id !== '' - - width: list.model.count > 6 ? list.width - 15 : list.width - 8 - height: 40 - color: mouse_area.containsMouse? DexTheme.hightlightColor : "transparent" - - DefaultMouseArea - { - id: mouse_area - anchors.fill: parent - hoverEnabled: enabled - onClicked: - { - order_modal.open() - order_modal.item.details = details - } - } - - RowLayout - { - anchors.fill: parent - anchors.leftMargin: 10 - anchors.rightMargin: 10 - - DefaultText - { - id: status_text - Layout.preferredWidth: (parent.width / 100) * 4 - Layout.alignment: Qt.AlignVCenter - visible: clickable ? !details ? false : - (details.is_swap || !details.is_maker) : false - - font.pixelSize: getStatusFontSize(details.order_status) - color: !details ? Dex.CurrentTheme.foregroundColor : getStatusColor(details.order_status) - text_value: !details ? "" : visible ? getStatusStep(details.order_status) : '' - } - - Item - { - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 4 - Layout.alignment: Qt.AlignVCenter - visible: !status_text.visible ? clickable ? true : false : false - - Qaterial.ColorIcon - { - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - iconSize: 17 - color: Dex.CurrentTheme.foregroundColor - source: Qaterial.Icons.clipboardTextSearchOutline - } - } - - DefaultText - { - visible: clickable - font.pixelSize: base_amount.font.pixelSize - text_value: !details ? "" : details.date ?? "" - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 10 - verticalAlignment: Label.AlignVCenter - horizontalAlignment: Text.AlignHCenter - } - - DefaultImage - { - id: base_icon - source: General.coinIcon(!details ? atomic_app_primary_coin : - details.base_coin ?? atomic_app_primary_coin) - Layout.preferredWidth: Style.textSize1 - Layout.preferredHeight: Style.textSize1 - Layout.alignment: Qt.AlignVCenter - Layout.leftMargin: 2 - } - - DefaultText - { - id: base_amount - text_value: !details ? "" : General.formatCrypto("", details.base_amount, details.base_coin, details.base_amount_current_currency, API.app.settings_pg.current_currency) - font.pixelSize: 10 - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 33 - verticalAlignment: Label.AlignVCenter - privacy: is_placed_order - } - - Item - { - Layout.fillHeight: true - Layout.fillWidth: true - SwapIcon - { - visible: !status_text.visible - anchors.fill: parent - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - top_arrow_ticker: !details ? atomic_app_primary_coin : details.base_coin ?? "" - bottom_arrow_ticker: !details ? atomic_app_primary_coin : details.rel_coin ?? "" - } - } - - DefaultText - { - id: rel_amount - text_value: !details ? "" : General.formatCrypto("", details.rel_amount, details.rel_coin, details.rel_amount_current_currency, API.app.settings_pg.current_currency) - font.pixelSize: base_amount.font.pixelSize - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 33 - verticalAlignment: Label.AlignVCenter - horizontalAlignment: Label.AlignRight - privacy: is_placed_order - } - - DefaultImage - { - id: rel_icon - source: General.coinIcon(!details ? atomic_app_primary_coin : - details.rel_coin ?? atomic_app_secondary_coin) - - width: base_icon.width - Layout.preferredWidth: Style.textSize1 - Layout.preferredHeight: Style.textSize1 - Layout.alignment: Qt.AlignVCenter - } - - DefaultText - { - font.pixelSize: base_amount.font.pixelSize - visible: !details || details.recoverable === undefined ? false : - details.recoverable && details.order_status !== "refunding" - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 5 - verticalAlignment: Label.AlignVCenter - horizontalAlignment: Label.AlignHCenter - text_value: Style.warningCharacter - color: Style.colorYellow - - DefaultTooltip - { - contentItem: DefaultText - { - text_value: qsTr("Funds are recoverable") - font.pixelSize: Style.textSizeSmall4 - } - - visible: (parent.visible && mouse_area.containsMouse) ?? false - } - } - - Qaterial.FlatButton - { - id: cancel_button_text - - visible: (!is_history ? details.cancellable ?? false : false) === true ? (mouse_area.containsMouse || hovered) ? true : false : false - - Layout.fillHeight: true - Layout.preferredWidth: (parent.width / 100) * 3 - Layout.alignment: Qt.AlignVCenter - - outlinedColor: Dex.CurrentTheme.noColor - hoverEnabled: true - - onClicked: if (details) cancelOrder(details.order_id) - - Behavior on scale - { - NumberAnimation - { - duration: 200 - } - } - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 13 - color: Dex.CurrentTheme.noColor - source: Qaterial.Icons.close - scale: parent.visible ? 1 : 0 - } - - } - } - - // Separator - HorizontalLine - { - width: parent.width - anchors.bottom: parent.bottom - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderModal.qml b/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderModal.qml deleted file mode 100644 index 256d6f89f..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrderModal.qml +++ /dev/null @@ -1,370 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import Qaterial 1.0 as Qaterial - -import "../../../Components" -import "../../../Constants" -import Dex.Themes 1.0 as Dex -import App 1.0 - -MultipageModal -{ - id: root - - property var details - - onDetailsChanged: { if (!details) root.close() } - onOpened: swap_progress.updateSimulatedTime() - onClosed: details = undefined - - MultipageModalContent - { - titleText: !details ? "" : details.is_swap ? qsTr("Swap Details") : qsTr("Order Details") - titleAlignment: Qt.AlignHCenter - - // Complete image - DefaultImage - { - visible: !details ? false : details.is_swap && details.order_status === "successful" - Layout.alignment: Qt.AlignHCenter - source: General.image_path + "exchange-trade-complete.png" - } - - // Loading symbol - DefaultBusyIndicator - { - visible: !details ? false : details.is_swap && details.order_status !== "successful" - running: (!details ? false : - details.is_swap && - details.order_status !== "successful" && - details.order_status !== "failed") && Qt.platform.os != "osx" - Layout.alignment: Qt.AlignHCenter - } - - // Status Text - DefaultText - { - Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 5 - font.pixelSize: Style.textSize1 - font.bold: true - visible: !details ? false : details.is_swap || !details.is_maker - text_value: !details ? "" : visible ? getStatusText(details.order_status) : '' - } - - RowLayout - { - Layout.topMargin: 22 - - DefaultRectangle - { - Layout.preferredWidth: 226 - Layout.preferredHeight: 66 - radius: 10 - - RowLayout - { - anchors.fill: parent - anchors.margins: 14 - spacing: 23 - - DefaultImage - { - Layout.preferredWidth: 35 - Layout.preferredHeight: 35 - Layout.alignment: Qt.AlignVCenter - - source: General.coinIcon(!details ? atomic_app_primary_coin : details.base_coin) - } - - ColumnLayout - { - Layout.fillWidth: true - RowLayout - { - Layout.fillWidth: true - spacing: 5 - DefaultText - { - Layout.fillWidth: true - text: details ? details.base_coin : "" - } - - DefaultText - { - Layout.fillWidth: true - text: details ? General.coinName(details.base_coin) : "" - wrapMode: Text.NoWrap - elide: Text.ElideRight - font.pixelSize: 11 - } - } - - DefaultText - { - Layout.fillWidth: true - text: details ? details.base_amount : "" - font.pixelSize: 11 - wrapMode: Text.NoWrap - elide: Text.ElideRight - } - } - } - } - - Qaterial.Icon - { - Layout.fillWidth: true - Layout.alignment: Qt.AlignVCenter - - color: Dex.CurrentTheme.foregroundColor - icon: Qaterial.Icons.swapHorizontal - } - - DefaultRectangle - { - Layout.preferredWidth: 226 - Layout.preferredHeight: 66 - radius: 10 - - RowLayout - { - anchors.fill: parent - anchors.margins: 14 - spacing: 23 - - DefaultImage - { - Layout.preferredWidth: 35 - Layout.preferredHeight: 35 - Layout.alignment: Qt.AlignVCenter - - source: General.coinIcon(!details ? atomic_app_primary_coin : details.rel_coin) - } - - ColumnLayout - { - Layout.fillWidth: true - RowLayout - { - Layout.fillWidth: true - spacing: 5 - DefaultText - { - Layout.fillWidth: true - text: details ? details.rel_coin : "" - } - - DefaultText - { - Layout.fillWidth: true - text: details ? General.coinName(details.rel_coin) : "" - wrapMode: Text.NoWrap - elide: Text.ElideRight - font.pixelSize: 11 - } - } - - DefaultText - { - Layout.fillWidth: true - text: details ? details.rel_amount : "" - font.pixelSize: 11 - wrapMode: Text.NoWrap - elide: Text.ElideRight - } - } - } - } - } - - DefaultScrollView - { - Layout.topMargin: 20 - Layout.fillWidth: true - Layout.preferredHeight: 300 - - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - - ColumnLayout - { - width: 400 - height: parent.height - 30 - spacing: 12 - - // Maker/Taker - TextEditWithTitle - { - Layout.fillWidth: true - title: qsTr("Order Type") - text: !details ? "" : details.is_maker ? qsTr("Maker Order") : qsTr("Taker Order") - label.font.pixelSize: 13 - } - - // Refund state - TextFieldWithTitle - { - Layout.fillWidth: true - title: qsTr("Refund State") - field.text: !details ? "" : details.order_status === "refunding" ? qsTr("Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back") : "" - field.readOnly: true - field.font.pixelSize: 13 - visible: field.text !== '' - } - - // Date - TextEditWithTitle - { - Layout.fillWidth: true - title: qsTr("Date") - text: !details ? "" : details.date - label.font.pixelSize: 13 - visible: text !== '' - } - - // ID - TextEditWithTitle - { - Layout.fillWidth: true - title: qsTr("ID") - text: !details ? "" : details.order_id - label.font.pixelSize: 13 - visible: text !== '' - copy: true - privacy: true - } - - // Payment ID - TextEditWithTitle - { - Layout.fillWidth: true - title: !details ? "" : details.is_maker ? qsTr("Maker Payment Sent ID") : qsTr("Maker Payment Spent ID") - text: !details ? "" : details.maker_payment_id - label.font.pixelSize: 13 - visible: text !== '' - privacy: true - } - - // Payment ID - TextEditWithTitle - { - Layout.fillWidth: true - title: !details ? "" : details.is_maker ? qsTr("Taker Payment Spent ID") : qsTr("Taker Payment Sent ID") - text: !details ? "" : details.taker_payment_id - label.font.pixelSize: 13 - visible: text !== '' - privacy: true - } - - // Error ID - TextEditWithTitle - { - Layout.fillWidth: true - title: qsTr("Error ID") - text: !details ? "" : details.order_error_state - label.font.pixelSize: 13 - visible: text !== '' - } - - // Error Details - TextEditWithTitle - { - Layout.fillWidth: true - title: qsTr("Error Log") - text: !details ? "" : details.order_error_message - label.font.pixelSize: 13 - visible: text !== '' - copy: true - onCopyNotificationTitle: qsTr("Error Log") - } - - HorizontalLine - { - visible: swap_progress.visible - Layout.fillWidth: true - Layout.topMargin: 10 - } - - SwapProgress - { - id: swap_progress - visible: General.exists(details) && details.order_status !== "matching" - Layout.fillWidth: true - details: root.details - } - } - } - - // Buttons - footer: - [ - DexAppButton - { - text: qsTr("Close") - leftPadding: 20 - rightPadding: 20 - radius: 18 - onClicked: root.close() - }, - - // Cancel button - DexAppOutlineButton - { - id: cancelOrderButton - visible: !details ? false : details.cancellable - leftPadding: 20 - rightPadding: 20 - radius: 18 - text: qsTr("Cancel Order") - onClicked: cancelOrder(details.order_id) - }, - - Item - { - visible: !cancelOrderButton.visible - Layout.fillWidth: true - }, - - // Recover Funds button - DexAppButton - { - id: refundButton - leftPadding: 20 - rightPadding: 20 - radius: 18 - enabled: !API.app.orders_mdl.recover_fund_busy - visible: !details ? false : - details.recoverable && details.order_status !== "refunding" - text: enabled ? qsTr("Recover Funds") : qsTr("Refunding...") - onClicked: API.app.orders_mdl.recover_fund(details.order_id) - }, - - Item - { - visible: !refundButton.visible & !cancelOrderButton.visible - Layout.fillWidth: true - }, - - DexAppOutlineButton - { - text: qsTr("View on Explorer") - leftPadding: 20 - rightPadding: 20 - radius: 18 - visible: !details ? false : details.maker_payment_id !== '' || details.taker_payment_id !== '' - onClicked: - { - if (!details) return - - const maker_id = details.maker_payment_id - const taker_id = details.taker_payment_id - - if (maker_id !== '') General.viewTxAtExplorer(details.is_maker ? details.base_coin : details.rel_coin, maker_id) - if (taker_id !== '') General.viewTxAtExplorer(details.is_maker ? details.rel_coin : details.base_coin, taker_id) - } - } - ] - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrdersPage.qml b/atomic_defi_design/Dex/Exchange/Trade/Orders/OrdersPage.qml deleted file mode 100644 index 198dfa9c5..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/Orders/OrdersPage.qml +++ /dev/null @@ -1,361 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import Qt.labs.platform 1.1 - -import Qaterial 1.0 as Qaterial - -import App 1.0 -import "../../../Components" -import "../../.." -import Dex.Themes 1.0 as Dex - -Item { - id: root - - readonly property date default_min_date: new Date("2019-01-01") - readonly property date default_max_date: new Date(new Date().setDate(new Date().getDate() + 30)) - - property var list_model: API.app.orders_mdl - property var list_model_proxy: API.app.orders_mdl.orders_proxy_mdl - property int page_index - - property alias title: order_list.title - property alias items: order_list.items - - property bool is_history: false - - function update() - { - reset() - if (combo_base.currentTicker !== "All" | combo_rel.currentTicker !== "All") { - buttonDelay.start() - } - } - - function reset() { - list_model_proxy.is_history = !is_history - applyFilter() - list_model_proxy.apply_all_filtering() - list_model_proxy.is_history = is_history - } - - Component.onDestruction: reset() - - Timer { - id: buttonDelay - interval: 200 - onTriggered: { - applyFilter() - list_model_proxy.apply_all_filtering() - } - } - - function applyDateFilter() { - list_model_proxy.filter_minimum_date = min_date.date - - if (max_date.date < min_date.date) - max_date.date = min_date.date - - list_model_proxy.filter_maximum_date = max_date.date - } - - function applyTickerFilter() { - list_model_proxy.set_coin_filter(combo_base.currentValue + "/" + combo_rel.currentValue) - } - - function applyTickerFilter2(ticker1, ticker2) { - list_model_proxy.set_coin_filter(ticker1 + "/" + ticker2) - } - - function applyFilter() { - applyDateFilter() - applyTickerFilter2(combo_base.currentTicker, combo_rel.currentTicker) - } - - Component.onCompleted: { - list_model_proxy.is_history = root.is_history - applyFilter() - list_model_proxy.apply_all_filtering() - } - - ColumnLayout - { - anchors.horizontalCenter: parent.horizontalCenter - - anchors.fill: parent - anchors.bottomMargin: is_history ? 0 : 10 - spacing: 15 - - // Bottom part - Item - { - id: orders_settings - - property bool displaySetting: false - - Layout.fillWidth: true - Layout.preferredHeight: displaySetting ? 150 : 30 - - Behavior on Layout.preferredHeight - { - NumberAnimation - { - duration: 150 - } - } - - Rectangle - { - width: parent.width - height: orders_settings.displaySetting ? 50 : 10 - anchors.bottom: parent.bottom - anchors.bottomMargin: -15 - visible: false - color: Dex.CurrentTheme.foregroundColor - - Behavior on height - { - NumberAnimation - { - duration: 150 - } - } - } - - Row - { - x: 5 - y: 0 - spacing: 5 - Qaterial.OutlineButton - { - icon.source: Qaterial.Icons.filter - text: qsTr("Filter") - anchors.verticalCenter: parent.verticalCenter - outlinedColor: Dex.CurrentTheme.foregroundColor - foregroundColor: Dex.CurrentTheme.foregroundColor - onClicked: orders_settings.displaySetting = !orders_settings.displaySetting - } - - DefaultText - { - color: Dex.CurrentTheme.foregroundColor2 - visible: !orders_settings.displaySetting - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Filter") + ": %1 / %2
%3: %4 - %5" - .arg(combo_base.currentTicker) - .arg(combo_rel.currentTicker) - .arg(qsTr("Date")) - .arg(min_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")) - .arg(max_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy-MM-dd")) - } - - Qaterial.OutlineButton - { - visible: root.is_history && orders_settings.displaySetting - foregroundColor: Dex.CurrentTheme.foregroundColor - outlinedColor: Dex.CurrentTheme.foregroundColor - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Export CSV") - enabled: list_model.length > 0 - onClicked: - { - export_csv_dialog.folder = General.os_file_prefix + API.app.settings_pg.get_export_folder() - export_csv_dialog.open() - } - } - } - - Row - { - anchors.right: parent.right - y: 0 - rightPadding: 5 - Qaterial.OutlineButton - { - visible: root.is_history & orders_settings.displaySetting - Layout.leftMargin: 30 - text: qsTr("Apply Filter") - foregroundColor: enabled ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.buttonColorDisabled - outlinedColor: enabled ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.buttonColorDisabled - enabled: list_model_proxy.can_i_apply_filtering - onClicked: list_model_proxy.apply_all_filtering() - anchors.verticalCenter: parent.verticalCenter - } - Qaterial.OutlineButton - { - icon.source: Qaterial.Icons.close - text: "Cancel All" - visible: !is_history && API.app.orders_mdl.length > 0 - anchors.verticalCenter: parent.verticalCenter - outlinedColor: Dex.CurrentTheme.noColor - foregroundColor: Dex.CurrentTheme.noColor - onClicked: API.app.trading_pg.orders.cancel_order(list_model_proxy.get_filtered_ids()) - } - } - - ColumnLayout - { - visible: orders_settings.height > 75 - width: parent.width - 20 - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: parent.bottom - anchors.bottomMargin: -15 - spacing: 10 - - RowLayout - { - Layout.fillWidth: true - Layout.preferredHeight: 50 - Item - { - Layout.fillWidth: true - Layout.fillHeight: true - DefaultSweetComboBox - { - id: combo_base - - anchors.fill: parent - - model: API.app.portfolio_pg.global_cfg_mdl.all_proxy - onCurrentTickerChanged: applyFilter() - - valueRole: "ticker" - textRole: 'ticker' - - backgroundColor: Dex.CurrentTheme.backgroundColor - popupBackgroundColor: Dex.CurrentTheme.backgroundColor - } - } - - - Qaterial.ColorIcon - { - source: Qaterial.Icons.swapHorizontal - color: Dex.CurrentTheme.foregroundColor - DefaultMouseArea - { - id: swap_button - anchors.fill: parent - hoverEnabled: true - onClicked: - { - const base_idx = combo_base.currentTicker - combo_base.currentTicker = combo_rel.currentTicker - combo_rel.currentTicker = base_idx - } - } - } - - Item - { - Layout.fillWidth: true - Layout.fillHeight: true - - DefaultSweetComboBox - { - id: combo_rel - - anchors.fill: parent - - model: API.app.portfolio_pg.global_cfg_mdl.all_proxy - onCurrentTickerChanged: applyFilter() - Layout.fillWidth: true - valueRole: "ticker" - textRole: 'ticker' - - backgroundColor: Dex.CurrentTheme.backgroundColor - popupBackgroundColor: Dex.CurrentTheme.backgroundColor - } - } - - - } - - RowLayout - { - Qaterial.TextFieldDatePicker - { - id: min_date - title: qsTr("From") - from: default_min_date - to: default_max_date - date: default_min_date - font.pixelSize: 13 - opacity: .8 - color: Dex.CurrentTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' - onAccepted: applyDateFilter() - Layout.fillWidth: true - } - - Qaterial.TextFieldDatePicker - { - id: max_date - enabled: min_date.enabled - title: qsTr("To") - from: min_date.date - to: default_max_date - date: default_max_date - font.pixelSize: 13 - opacity: .8 - color: Dex.CurrentTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' - onAccepted: applyDateFilter() - Layout.fillWidth: true - } - } - } - } - - RowLayout - { - Layout.fillWidth: true - Layout.fillHeight: true - - spacing: parent.spacing - - OrderList - { - id: order_list - items: list_model - is_history: root.is_history - Layout.fillHeight: true - Layout.fillWidth: true - } - - } - } - ModalLoader - { - id: order_modal - sourceComponent: OrderModal {} - } - - FileDialog - { - id: export_csv_dialog - - title: qsTr("Please choose the CSV export name and location") - fileMode: FileDialog.SaveFile - - defaultSuffix: "csv" - nameFilters: ["CSV files (*.csv)", "All files (*)"] - - onAccepted: { - const path = currentFile.toString() - - // Export - console.log("Exporting to CSV: " + path) - API.app.exporter_service.export_swaps_history_to_csv(path.replace(General.os_file_prefix, "")) - - // Open the save folder - const folder_path = path.substring(0, path.lastIndexOf("/")) - Qt.openUrlExternally(folder_path) - } - onRejected: { - console.log("CSV export cancelled") - } - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/Orders/SwapProgress.qml b/atomic_defi_design/Dex/Exchange/Trade/Orders/SwapProgress.qml deleted file mode 100644 index 5861f0963..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/Orders/SwapProgress.qml +++ /dev/null @@ -1,210 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import App 1.0 - -import "../../../Components" - -// Content -ColumnLayout { - id: root - - property - var details - - readonly property - var all_events: !details ? [] : has_error_event ? details.events.map(e => e.state) : details.success_events - - readonly property bool has_error_event: { - if (!details) return false - - const events = details.events - - for (let i = events.length - 1; i >= 0; --i) - if (details.error_events.indexOf(events[i].state) !== -1) - return true - - return false - } - - readonly property double total_time_passed: { - if (!details) return 0 - - const events = details.events - - let sum = 0 - for (let i = 0; i < events.length; ++i) - sum += events[i].time_diff - - return sum - } - - readonly property double total_time_passed_estimated: { - const events = all_events - - let sum = 0 - for (let i = 0; i < events.length; ++i) - sum += API.app.orders_mdl.average_events_time_registry[events[i]] - - return sum - } - - readonly property int current_event_idx: { - if (!details) return -1 - const events = details.events - if (events.length === 0) return -1 - if (all_events.length === 0) return -1 - - const last_state = events[events.length - 1].state - if (last_state === "Finished") return -1 - - const idx = all_events.indexOf(last_state) - if (idx === -1) return -1 - - return idx + 1 - } - - // Simulated time of the running event - property double simulated_time: 0 - function updateSimulatedTime() { - if (!details) { - simulated_time = 0 - return - } - - const events = details.events - if (!events || events.length === 0) { - simulated_time = 0 - return - } - - const last_event = events[events.length - 1] - if (!last_event.timestamp) { - simulated_time = 0 - return - } - - if (current_event_idx !== -1) { - const diff = Date.now() - last_event.timestamp - simulated_time = diff - (diff % 1000) - } else simulated_time = 0 - } - - Timer { - running: current_event_idx !== -1 - interval: 1000 - repeat: true - onTriggered: updateSimulatedTime() - } - - function getTimeText(duration, estimated) { - return `` + qsTr("act", "SHORT FOR ACTUAL TIME") + ": " + `` + - `` + General.durationTextShort(duration) + `` + - ` | ` + qsTr("est", "SHORT FOR ESTIMATED") + ": " + - General.durationTextShort(estimated) + `` - } - - onTotal_time_passedChanged: updateSimulatedTime() - - // Title - DefaultText { - text_value: `` + qsTr("Progress details") + `` + - ` | ` + - getTimeText(total_time_passed + simulated_time, total_time_passed_estimated) - font.pixelSize: Style.textSize1 - Layout.bottomMargin: 10 - } - - Repeater { - Layout.fillWidth: true - Layout.fillHeight: true - model: all_events - - delegate: Item { - readonly property - var event: { - if (!details) return undefined - const idx = details.events.map(e => e.state).indexOf(modelData) - if (idx === -1) return undefined - - return details.events[idx] - } - - readonly property bool is_current_event: index === current_event_idx - - readonly property bool is_active: General.exists(event) || is_current_event - - readonly property double time_passed: event ? event.time_diff : is_current_event ? simulated_time : 0 - - width: root.width - height: 50 - - DefaultText { - id: icon - - text_value: is_active ? "●" : "○" - anchors.left: parent.left - anchors.leftMargin: 10 - anchors.verticalCenter: col_layout.verticalCenter - color: { - // Already exists, completed event - if (event) { - // Red for the Finished if swap failed - if (event.state === "Finished" && details.order_status === "failed") return DexTheme.redColor - - // Red for error event, green for the others - return details.error_events.indexOf(event.state) === -1 ? DexTheme.greenColor : DexTheme.redColor - } - - // In progress one is orange - if (is_current_event) - return Style.colorOrange - - // Passive color for the rest - return DexTheme.foregroundColorLightColor2 - } - } - - ColumnLayout { - id: col_layout - - anchors.left: icon.right - anchors.leftMargin: icon.anchors.leftMargin - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - - DefaultText { - id: name - - font.pixelSize: Style.textSizeSmall4 - - text_value: getEventText(modelData) - color: event ? DexTheme.foregroundColor : is_current_event ? DexTheme.foregroundColorLightColor0 : DexTheme.foregroundColorLightColor2 - } - - AnimatedRectangle { - id: bar - visible: is_active - width: 300 - height: 2 - - color: DexTheme.foregroundColorDarkColor3 - - AnimatedRectangle { - width: parent.width * (total_time_passed > 0 ? (time_passed / (total_time_passed + simulated_time)) : 0) - height: parent.height - color: DexTheme.greenColor - } - } - - DefaultText { - visible: bar.visible - font.pixelSize: Style.textSizeSmall2 - - text_value: !is_active ? '' : getTimeText(time_passed, API.app.orders_mdl.average_events_time_registry[modelData]) - } - } - } - } -} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml b/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml index 3dbe24e2d..978ffe753 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/PriceLineSimplified.qml @@ -9,47 +9,34 @@ import Dex.Themes 1.0 as Dex ColumnLayout { + Layout.fillWidth: true readonly property string price: non_null_price readonly property string price_reversed: API.app.trading_pg.price_reversed readonly property string cex_price: API.app.trading_pg.cex_price readonly property string cex_price_reversed: API.app.trading_pg.cex_price_reversed - readonly property string cex_price_diff: API.app.trading_pg.cex_price_diff + readonly property string cexPriceDiff: API.app.trading_pg.cex_price_diff readonly property bool invalid_cex_price: API.app.trading_pg.invalid_cex_price readonly property bool price_entered: !General.isZero(non_null_price) readonly property int fontSize: Style.textSizeSmall1 readonly property int fontSizeBigger: Style.textSizeSmall2 - readonly property int line_scale: getComparisonScale(cex_price_diff) - - function getComparisonScale(value) - { - return Math.min(Math.pow(10, General.getDigitCount(parseFloat(value))), 1000000000) - } - - function limitDigits(value) - { - return parseFloat(General.formatDouble(value, 2)) - } + readonly property int lineScale: General.getComparisonScale(cexPriceDiff) spacing: 35 - DefaultText - { - visible: !price_entered && invalid_cex_price - Layout.alignment: Qt.AlignHCenter - text_value: qsTr("Set swap price for evaluation") - font.pixelSize: fontSizeBigger - } - RowLayout { - Layout.fillWidth: true - Layout.alignment: Qt.AlignHCenter + Layout.fillWidth: true + ColumnLayout { visible: price_entered + Layout.fillWidth: true + DefaultText { + Layout.fillWidth: true + horizontalAlignment: invalid_cex_price ? Text.AlignHCenter : Text.AlignLeft text_value: qsTr("Exchange rate") + (preffered_order.price !== undefined ? (" (" + qsTr("Selected") + ")") : "") font.pixelSize: fontSize } @@ -57,28 +44,32 @@ ColumnLayout // Price reversed DefaultText { + Layout.fillWidth: true + horizontalAlignment: invalid_cex_price ? Text.AlignHCenter : Text.AlignLeft text_value: General.formatCrypto("", "1", right_ticker) + " = " + General.formatCrypto("", price_reversed, left_ticker) - font.pixelSize: fontSizeBigger - font.weight: Font.Medium + font.pixelSize: fontSize } // Price DefaultText { + visible: price != 1 + Layout.fillWidth: true + horizontalAlignment: invalid_cex_price ? Text.AlignHCenter : Text.AlignLeft text_value: General.formatCrypto("", price, right_ticker) + " = " + General.formatCrypto("", "1", left_ticker) font.pixelSize: fontSize } } - Item { Layout.fillWidth: true } - ColumnLayout { visible: !invalid_cex_price + Layout.fillWidth: true DefaultText { - Layout.alignment: Qt.AlignRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignRight text_value: General.cex_icon + " " + qsTr("CEXchange rate") font.pixelSize: fontSize @@ -88,22 +79,22 @@ ColumnLayout // Price reversed DefaultText { - Layout.alignment: Qt.AlignRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignRight text_value: General.formatCrypto("", "1", right_ticker) + " = " + General.formatCrypto("", cex_price_reversed, left_ticker) - font.pixelSize: fontSizeBigger - font.weight: Font.Medium + font.pixelSize: fontSize } // Price DefaultText { - Layout.alignment: Qt.AlignRight + Layout.fillWidth: true + horizontalAlignment: Text.AlignRight text_value: General.formatCrypto("", cex_price, right_ticker) + " = " + General.formatCrypto("", "1", left_ticker) font.pixelSize: fontSize } } } - // Price Comparison ColumnLayout @@ -129,12 +120,12 @@ ColumnLayout height: parent.height * 2 anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - anchors.horizontalCenterOffset: 0.5 * parent.width * Math.min(Math.max(parseFloat(cex_price_diff) / line_scale, -1), 1) + anchors.horizontalCenterOffset: 0.5 * parent.width * Math.min(Math.max(parseFloat(cexPriceDiff) / lineScale, -1), 1) } DefaultText { - text_value: General.formatPercent(line_scale) + text_value: General.formatPercent(lineScale) font.pixelSize: fontSize anchors.top: parent.top anchors.topMargin: -15 @@ -142,7 +133,7 @@ ColumnLayout DefaultText { - text_value: General.formatPercent(-line_scale) + text_value: General.formatPercent(-lineScale) font.pixelSize: fontSize anchors.top: parent.top anchors.topMargin: -15 @@ -156,8 +147,8 @@ ColumnLayout id: price_diff_text Layout.topMargin: 10 Layout.alignment: Qt.AlignHCenter - color: parseFloat(cex_price_diff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor - text_value: (parseFloat(cex_price_diff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(limitDigits(cex_price_diff)) + "") + color: parseFloat(cexPriceDiff) <= 0 ? Dex.CurrentTheme.okColor : Dex.CurrentTheme.noColor + text_value: (parseFloat(cexPriceDiff) > 0 ? qsTr("Expensive") : qsTr("Expedient")) + ":    " + qsTr("%1 compared to CEX", "PRICE_DIFF%").arg("" + General.formatPercent(General.limitDigits(cexPriceDiff)) + "") font.pixelSize: fontSize } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml index f5a9b3f37..0d61f90c0 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/ProView.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/ProView.qml @@ -11,12 +11,12 @@ import AtomicDEX.MarketMode 1.0 import AtomicDEX.TradingError 1.0 import "../../Components" +import "../../Constants" import "../../Wallet" import App 1.0 // Trade Form / Component import -import "TradeBox/" import "Trading/" import "Trading/Items/" @@ -33,16 +33,20 @@ import "../../Screens" import Dex.Themes 1.0 as Dex import "../ProView" +import "../ProView/PlaceOrderForm" as PlaceOrderForm +import "../ProView/TradingInfo" as TradingInfo -ColumnLayout +RowLayout { id: form - property alias dexConfig: dex_config_popup - function selectOrder(is_asks, coin, price, quantity, price_denom, - price_numer, quantity_denom, quantity_numer, - min_volume, base_min_volume, base_max_volume, - rel_min_volume, rel_max_volume, base_max_volume_denom, - base_max_volume_numer, uuid) + + property alias tickerSelectors: selectors + property alias trInfo: tradingInfo + property alias orderBook: orderBook + property alias bestOrders: bestOrders + property alias placeOrderForm: placeOrderForm + + function selectOrder(is_asks, coin, price, quantity, price_denom, price_numer, quantity_denom, quantity_numer, min_volume, base_min_volume, base_max_volume, rel_min_volume, rel_max_volume, base_max_volume_denom, base_max_volume_numer, uuid) { setMarketMode(!is_asks ? MarketMode.Sell : MarketMode.Buy) @@ -64,7 +68,8 @@ ColumnLayout "uuid": uuid } - form_base.focusVolumeField() + // Shows place order form in case it has been hidden in the settings. + placeOrderForm.visible = true } Connections @@ -76,7 +81,6 @@ ColumnLayout return const response = General.clone(buy_sell_last_rpc_data) - if (response.error_code) { confirm_trade_modal.close() @@ -96,671 +100,89 @@ ColumnLayout General.prettifyJSON(response.result), false) General.prevent_coin_disabling.restart() - tabView.currentIndex = 1 + tradingInfo.currentIndex = 1 } } } - Connections + ColumnLayout { - target: app - function onPairChanged(base, rel) - { - dex_chart.visible = true - } - } + Layout.alignment: Qt.AlignTop - spacing: 10 - anchors.topMargin: 20 - anchors.leftMargin: 10 - anchors.fill: parent - - DexBoxManager - { - id: splitView + Layout.minimumWidth: selectors.visible || tradingInfo.visible ? 480 : -1 + Layout.maximumWidth: (!orderBook.visible && !bestOrders.visible) || (!placeOrderForm.visible) ? -1 : 735 Layout.fillWidth: true - Layout.fillHeight: true - itemLists: [left_section, order_form] - spacing: 15 - handle: Item { - implicitWidth: 2 - implicitHeight: 4 + Layout.fillHeight: true - Rectangle - { - implicitWidth: 2 - implicitHeight: 4 - anchors.centerIn: parent - opacity: 0 - color: 'transparent' - } - } + spacing: 10 - DexTradeBox + // Ticker selectors. + TickerSelectors { - id: left_section - minimumWidth: 500 - defaultWidth: 520 - expandedHort: true - hideHeader: true - SplitView.fillHeight: true - color: 'transparent' - - DexBoxManager - { - anchors.fill: parent - anchors.margins: 0 - anchors.rightMargin: 0 - orientation: Qt.Vertical - handle: Item { - implicitWidth: 40 - implicitHeight: 6 - InnerBackground { - implicitWidth: 40 - implicitHeight: 6 - anchors.centerIn: parent - opacity: 0.4 - } - } - - itemLists: [dex_chart, optionBox] - - DexTradeBox - { - id: dex_chart - title: qsTr("Chart") - expandedVert: dex_chart.visible? true : false - onVisibleChanged: - { - if(visible) - { - expandedVert = true - } - } - canBeFull: true - onFullScreenChanged: - { - if(fullScreen) - { - _best_order_box.visible = false - _orderbook_box.visible = false - optionBox.visible = false - order_form.visible = false - } - else - { - _best_order_box.visible = true - _orderbook_box.visible = true - optionBox.visible = true - order_form.visible = true - } - } - - Item - { - id: chart_view - anchors.fill: parent - anchors.topMargin: 40 - - CandleStickChart - { - id: candleChart - color: 'transparent' - anchors.fill: parent - } - - Component.onCompleted: - { - dashboard.webEngineView.parent = chart_view; - dashboard.webEngineView.anchors.fill = chart_view; - } - - Component.onDestruction: - { - dashboard.webEngineView.visible = false; - dashboard.webEngineView.stop(); - } - } - } - - DexTradeBox - { - canBeFull: true - hideHeader: true - maximumHeight: 80 - minimumHeight: 75 - color: 'transparent' - - RowLayout - { - id: selectors - spacing: 20 - anchors.fill: parent - anchors.rightMargin: 10 - anchors.leftMargin: 10 - - TickerSelector - { - id: selector_left - left_side: true - ticker_list: API.app.trading_pg.market_pairs_mdl.left_selection_box - ticker: left_ticker - Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter - Layout.fillWidth: true - } - - SwapIcon - { - Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter - Layout.preferredHeight: selector_left.height * 0.65 - - top_arrow_ticker: selector_left.ticker - bottom_arrow_ticker: selector_right.ticker - hovered: swap_button.containsMouse - - DefaultMouseArea - { - id: swap_button - anchors.fill: parent - hoverEnabled: true - onClicked: - { - if (!block_everything) - setPair(true, right_ticker) - } - } - } - - TickerSelector - { - id: selector_right - left_side: false - ticker_list: API.app.trading_pg.market_pairs_mdl.right_selection_box - ticker: right_ticker - Layout.alignment: Qt.AlignRight | Qt.AlignVCenter - Layout.fillWidth: true - } - } - - } - - - DexTradeBox - { - id: optionBox - expandedVert: dex_chart.visible? false : true - expandable: true - defaultHeight: tabView.currentIndex === 0 ? 200 : isUltraLarge? 400 : 270 - closable: true - title: qsTr("Trading Information") - - Connections - { - target: tabView - function onCurrentIndexChanged() { - if (tabView.currentIndex !== 0) { - optionBox.setHeight(isUltraLarge? 400 : 270) - } else { - optionBox.setHeight(200) - } - } - } - - Column - { - topPadding: 40 - width: parent.width - height: parent.height - clip: !parent.contentVisible - anchors.horizontalCenter: parent.horizontalCenter - - Qaterial.LatoTabBar - { - property int taux_exchange: 0 - property int order_idx: 1 - property int history_idx: 2 - - z: 4 - id: tabView - width: parent.width - currentIndex: tabView.currentIndex - anchors.horizontalCenter: parent.horizontalCenter - Material.foreground: DexTheme.foregroundColor - background: null - y: 5 - leftPadding: 15 - - Qaterial.LatoTabButton - { - width: 150 - text: qsTr("Exchange Rates") - font.pixelSize: 14 - textColor: checked ? Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor - textSecondaryColor: Dex.CurrentTheme.foregroundColor2 - indicatorColor: Dex.CurrentTheme.tabSelectedColor - opacity: checked ? 1 : .6 - } - - Qaterial.LatoTabButton - { - width: 120 - text: qsTr("Orders") - font.pixelSize: 14 - textColor: checked ? Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor - textSecondaryColor: Dex.CurrentTheme.foregroundColor2 - indicatorColor: Dex.CurrentTheme.tabSelectedColor - opacity: checked ? 1 : .6 - } - - Qaterial.LatoTabButton - { - width: 120 - text: qsTr("History") - font.pixelSize: 14 - textColor: checked ? Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor - textSecondaryColor: Dex.CurrentTheme.foregroundColor2 - indicatorColor: Dex.CurrentTheme.tabSelectedColor - opacity: checked ? 1 : .6 - } - } - - Item - { - id: swipeContainer - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - height: optionBox.height - (tabView.height + 40) - - SwipeView - { - id: swipeView - clip: true - interactive: false - currentIndex: tabView.currentIndex - anchors.fill: parent - - onCurrentIndexChanged: - { - swipeView.currentItem.update(); - if (currentIndex === 2) history_component.list_model_proxy.is_history = true; - else history_component.list_model_proxy.is_history = false; - } - - Qaterial.ScrollView - { - clip: true - - PriceLine { width: swipeContainer.width; height: swipeContainer.height; id: price_line_obj; } - } - - OrdersView.OrdersPage { id: order_component; clip: true } - - OrdersView.OrdersPage - { - id: history_component - is_history: true - clip: true - } - } - } - } - } - Item { SplitView.maximumHeight: 1 } - } - } + id: selectors - Item - { - id: _book_and_best - property bool showing: (_best_order_box.visible || _orderbook_box.visible) - SplitView.minimumWidth: showing ? 390 : 0 - SplitView.maximumWidth: showing ? 430 : 0 - SplitView.preferredWidth: showing ? 390 : 0 - clip: true - DexBoxManager - { - anchors.fill: parent - orientation: Qt.Vertical - handle: Item - { - implicitWidth: 40 - implicitHeight: 6 - InnerBackground { - implicitWidth: 40 - implicitHeight: 6 - anchors.centerIn: parent - opacity: 0.4 - } - } - - itemLists: [_orderbook_box, _best_order_box] - - DexTradeBox - { - id: _orderbook_box - SplitView.fillWidth: true - closable: true - title: qsTr("Order Book") - expandedVert: true - - Behavior on SplitView.preferredWidth - { - NumberAnimation - { - duration: 100 - } - } - - OrderBook.Vertical - { - clip: !parent.contentVisible - visible: parent.contentVisible - anchors.topMargin: 40 - anchors.fill: parent - } - } - - DexTradeBox - { - id: _best_order_box - - defaultHeight: 250 - minimumHeight: 130 - closable: true - title: qsTr("Best Orders") - reloadable: true - onReload: API.app.trading_pg.orderbook.refresh_best_orders() - - Behavior on SplitView.preferredWidth - { - NumberAnimation - { - duration: 100 - } - } - - BestOrder.List - { - clip: !parent.contentVisible - id: best_order_list - visible: parent.contentVisible - y: 40 - width: parent.width - height: parent.height-40 - } - } - } + Layout.fillWidth: true + Layout.preferredHeight: 70 } - DexTradeBox + // Trading Informations + TradingInfo.Main { - id: order_form - closable: true - title: qsTr("Place Order") - defaultWidth: isBigScreen ? 300 : 280 - maximumWidth: isBigScreen ? 310 : 280 - minimumWidth: isBigScreen ? 290 : 280 - expandable: false - SplitView.fillHeight: true - - ColumnLayout - { - visible: parent.contentVisible - anchors.topMargin: 60 - anchors.fill: parent - - Row - { - width: parent.width - spacing: 10 - Layout.alignment: Qt.AlignHCenter - - MarketModeSelector - { - marketMode: MarketMode.Buy - ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) - } - - MarketModeSelector - { - ticker: atomic_qt_utilities.retrieve_main_ticker(left_ticker) - } - } - - Item - { - Layout.fillWidth: true - Layout.fillHeight: true - - ColumnLayout - { - property int space: 10 - anchors.fill: parent - anchors.topMargin: 5 - spacing: 10 - - Item - { - Layout.fillWidth: true - Layout.preferredHeight: 40 - visible: API.app.trading_pg.preffered_order.price !== undefined - - Rectangle - { - width: parent.width - 20 - height: 40 - radius: 8 - color: 'transparent' - border.color: Dex.CurrentTheme.noColor - anchors.horizontalCenter: parent.horizontalCenter - y: 5 - - DefaultText - { - anchors.verticalCenter: parent.verticalCenter - leftPadding: 15 - color: Dex.CurrentTheme.noColor - text: qsTr("Order Selected") - } - - Qaterial.FlatButton - { - foregroundColor: Dex.CurrentTheme.noColor - icon.source: Qaterial.Icons.close - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - height: 40 - width: 40 - anchors.rightMargin: 15 - onClicked: API.app.trading_pg.reset_order() - } - } - } - - OrderForm - { - id: form_base - Layout.fillWidth: true - Layout.leftMargin: 10 - Layout.rightMargin: 10 - Layout.preferredHeight: 270 - Layout.alignment: Qt.AlignHCenter - } - - Item - { - Layout.preferredHeight: 90 - Layout.fillWidth: true - TotalView {} - } - - Item - { - Layout.fillHeight: true - Layout.fillWidth: true - Layout.leftMargin: 10 - Layout.rightMargin: 10 - Column - { - anchors.fill: parent - anchors.leftMargin: 5 - anchors.rightMargin: 5 - FeeInfo - { - id: bg - visible: false - } - spacing: 15 - - // Trade button - DexGradientAppButton - { - anchors.horizontalCenter: parent.horizontalCenter - width: 262 - height: 44 - radius: 18 - - text: qsTr("START SWAP") - font.weight: Font.Medium - enabled: form_base.can_submit_trade - onClicked: confirm_trade_modal.open() - } - - Column - { - spacing: parent.spacing - visible: errors.text_value !== "" - width: parent.width - bottomPadding: 10 - HorizontalLine - { - Layout.fillWidth: true - Layout.bottomMargin: layout_margin - } - - // Show errors - DefaultText - { - id: errors - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - horizontalAlignment: DefaultText.AlignHCenter - font.pixelSize: Style.textSizeSmall4 - color: DexTheme.redColor - - text_value: General.getTradingError( - last_trading_error, - curr_fee_info, - base_ticker, - rel_ticker, left_ticker, right_ticker) - } - } - } - } - Item {} - } - } - } - } - } + id: tradingInfo - ModalLoader - { - id: confirm_trade_modal - sourceComponent: ConfirmTradeModal {} + Layout.fillWidth: true + Layout.minimumHeight: isCollapsed() ? 60 : 610 + Layout.fillHeight: !isCollapsed() + } } - DexPopup + ColumnLayout { - id: dex_config_popup - spacing: 8 - padding: 4 - arrowXDecalage: 75 - backgroundColor: Dex.CurrentTheme.floatingBackgroundColor + Layout.minimumWidth: orderBook.visible || bestOrders.visible ? 353 : -1 + Layout.fillWidth: true + Layout.fillHeight: true + Layout.alignment: Qt.AlignTop - Settings + OrderBook.Vertical { - id: proview_settings - property bool chart_visibility: true - property bool option_visibility: true - property bool orderbook_visibility: true - property bool best_order_visibility: false - property bool form_visibility: true + id: orderBook + + Layout.fillWidth: true + + Layout.minimumHeight: isCollapsed() ? 70 : 365 + Layout.maximumHeight: bestOrders.visible && !bestOrders.isCollapsed() ? 536 : -1 + Layout.fillHeight: !isCollapsed() } - contentItem: Item + // Best Orders + BestOrder.List { - implicitWidth: 320 - implicitHeight: 190 + id: bestOrders - Column - { - anchors.fill: parent - rightPadding: 20 - padding: 10 - spacing: 8 - DefaultText - { - text: "Display Settings" - font: DexTypo.body2 - } - - HorizontalLine { width: parent.width-20;anchors.horizontalCenter: parent.horizontalCenter;opacity: .4 } - - DexCheckEye - { - text: "Trading Information" - targetProperty: "visible" - target: optionBox - } - - HorizontalLine { width: parent.width-20;anchors.horizontalCenter: parent.horizontalCenter;opacity: .4 } - - DexCheckEye - { - text: "Order Book" - targetProperty: "visible" - target: _orderbook_box - } - - HorizontalLine { width: parent.width-20;anchors.horizontalCenter: parent.horizontalCenter;opacity: .4 } - - DexCheckEye - { - text: "Best Order" - targetProperty: "visible" - target: _best_order_box - } - - HorizontalLine { width: parent.width-20;anchors.horizontalCenter: parent.horizontalCenter;opacity: .4 } - - DexCheckEye - { - id: place_visibility - text: "Place Order" - targetProperty: "visible" - target: order_form - } - } - - Component.onCompleted: - { - dex_chart.visible = proview_settings.chart_visibility - optionBox.visible = proview_settings.option_visibility - _orderbook_box.visible = proview_settings.orderbook_visibility - _best_order_box.visible = proview_settings.best_order_visibility - order_form.visible = proview_settings.form_visibility - } + Layout.fillWidth: true - Component.onDestruction: - { - proview_settings.form_visibility = order_form.visible - proview_settings.chart_visibility = dex_chart.visible - proview_settings.option_visibility = optionBox.visible - proview_settings.orderbook_visibility = _orderbook_box.visible - proview_settings.best_order_visibility = _best_order_box.visible - } + Layout.minimumHeight: isCollapsed() ? 70 : 196 + Layout.fillHeight: !isCollapsed() } } + + // Place order form. + PlaceOrderForm.Main + { + id: placeOrderForm + + Layout.minimumWidth: visible ? 302 : -1 + Layout.maximumWidth: 350 + Layout.fillWidth: true + + Layout.minimumHeight: 571 + Layout.fillHeight: true + } + + ModalLoader + { + id: confirm_trade_modal + sourceComponent: ConfirmTradeModal {} + } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml index 4880ce3c6..ee73c2f26 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Main.qml @@ -9,7 +9,7 @@ import Qaterial 1.0 as Qaterial //! Project Imports import "../../../Components" import "../../../Constants" as Constants -import "../Orders" as Orders +import "../../ProView/TradingInfo" as Orders import "Main.js" as Main import App 1.0 import Dex.Themes 1.0 as Dex diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml index d78592359..5283df166 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubBestOrder.qml @@ -3,6 +3,9 @@ import QtQuick 2.15 //> Item import QtQuick.Layouts 1.15 //> RowLayout import QtQuick.Controls 2.15 //> ItemDelegate +// 3rdParty +import Qaterial 1.0 as Qaterial + import App 1.0 //! Project Imports @@ -10,165 +13,204 @@ import "../../../Components" //> MultipageModal import "../../../Constants" as Constants //> API import Dex.Themes 1.0 as Dex -DefaultListView +DexListView { id: _listBestOrdersView + model: Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl + enabled: !Constants.API.app.trading_pg.orderbook.best_orders_busy + onVisibleChanged: currentLeftToken = _tradeCard.selectedTicker property var tradeCard property var selectedOrder property bool best: true property string currentLeftToken // The token we wanna sell - property int _rowWidth: width - 20 - property int _rowHeight: 50 - property int _tokenColumnSize: 60 - property int _quantityColumnSize: 100 - property int _quantityInBaseColumnSize: 100 - property int _fiatVolumeColumnSize: 50 - property int _cexRateColumnSize: 50 + property int _rowWidth: width + property int _rowHeight: 40 + property int _tokenColumnSize: 90 + property int _quantityColumnSize: 90 + property int _quantityInBaseColumnSize: 120 + property int _fiatVolumeColumnSize: 80 + property int _cexRateColumnSize: 60 - enabled: !Constants.API.app.trading_pg.orderbook.best_orders_busy - model: Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl headerPositioning: ListView.OverlayHeader reuseItems: true cacheBuffer: 40 clip: true - Connections - { - target: _tradeCard - function onBestChanged() - { - Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl.setFilterFixedString("") - positionViewAtBeginning() - } - } - - onVisibleChanged: currentLeftToken = _tradeCard.selectedTicker - - header: DefaultRectangle // Best orders list header + header: DexRectangle // Best orders list header { + id: header_row width: _rowWidth height: _rowHeight z: 2 + radius: 0 + border.width: 0 color: Dex.CurrentTheme.floatingBackgroundColor - MouseArea { anchors.fill: parent } RowLayout // Order Columns Name { - anchors.verticalCenter: parent.verticalCenter anchors.fill: parent - spacing: 2 - DefaultText // "Token" Header + anchors.margins: 5 + anchors.verticalCenter: parent.verticalCenter + + DexLabel // "Token" Header { Layout.preferredWidth: _tokenColumnSize - text: qsTr("Token") + horizontalAlignment: Text.AlignLeft + + text_value: qsTr("Token") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold } - DefaultText // "Available Quantity" Header + + DexLabel // "Available Quantity" Header { + id: qty_header + Layout.preferredWidth: _quantityColumnSize - text: qsTr("Available Quantity") + horizontalAlignment: Text.AlignRight + + text_value: qsTr("Available Quantity") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold } - DefaultText // "Available Quantity (in BASE)" header + + DexLabel // "Available Quantity (in BASE)" header { + id: base_qty_header + Layout.preferredWidth: _quantityInBaseColumnSize - text: qsTr("Available Quantity (in %1)").arg(currentLeftToken) + horizontalAlignment: Text.AlignRight + + text_value: qsTr("Available Quantity (in %1)").arg(currentLeftToken) font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold } - DefaultText // "Fiat Volume" column header + + DexLabel // "Fiat Volume" column header { Layout.preferredWidth: _fiatVolumeColumnSize - text: qsTr("Fiat Volume") + horizontalAlignment: Text.AlignRight + + text_value: qsTr("Fiat Volume") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold } - DefaultText // "CEX Rate" column header + + DexLabel // "CEX Rate" column header { Layout.preferredWidth: _cexRateColumnSize - text: qsTr("CEX Rate") + horizontalAlignment: Text.AlignRight + + text_value: qsTr("CEX Rate") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold } } + + MouseArea { anchors.fill: parent } } - delegate: ItemDelegate // Order Line + delegate: DexRectangle // Order Line { property bool _isCoinEnabled: Constants.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled width: _rowWidth height: _rowHeight + radius: 0 + border.width: 0 + colorAnimation: false + color: mouse_area.containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' + + DexMouseArea + { + id: mouse_area + anchors.fill: parent + hoverEnabled: true + onClicked: + { + if (!Constants.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled) + { + _tooltip.open() + } + else + { + _listBestOrdersView.tradeCard.best = false + _listBestOrdersView.selectedOrder = { "coin": coin, "uuid": uuid, "price": price, "base_min_volume": base_min_volume, "base_max_volume": base_max_volume, "from_best_order": true } + } + } + } HorizontalLine { width: parent.width; opacity: .5 } RowLayout // Order Info { - anchors.verticalCenter: parent.verticalCenter anchors.fill: parent + RowLayout // Order Token { property int _iconWidth: 24 - Layout.preferredWidth: _tokenColumnSize - DefaultImage // Order Token Icon + + DexImage // Order Token Icon { Layout.preferredWidth: parent._iconWidth Layout.preferredHeight: 24 - source: General.coinIcon(coin) - opacity: !_isCoinEnabled? .1 : 1 + opacity: !_isCoinEnabled? .3 : 1 } - DefaultText // Order Token Name + + DexLabel // Order Token Name { - id: _tokenName Layout.preferredWidth: _tokenColumnSize - parent._iconWidth - text: coin + text_value: coin font.pixelSize: 14 } } - DefaultText // Order Available Quantity + DexLabel // Order Available Quantity { Layout.preferredWidth: _quantityColumnSize - text: parseFloat(General.formatDouble(quantity, General.amountPrecision, true)).toFixed(8) + horizontalAlignment: Text.AlignRight + text_value: parseFloat(General.formatDouble(quantity, General.amountPrecision, true)).toFixed(8) font.pixelSize: 14 } - DefaultText // Order Available Quantity In BASE + DexLabel // Order Available Quantity In BASE { Layout.preferredWidth: _quantityInBaseColumnSize - text: parseFloat(General.formatDouble(base_max_volume, General.amountPrecision, true)).toFixed(8) + horizontalAlignment: Text.AlignRight + text_value: parseFloat(General.formatDouble(base_max_volume, General.amountPrecision, true)).toFixed(8) font.pixelSize: 14 } - DefaultText // Order Fiat Volume + DexLabel // Order Fiat Volume { Layout.preferredWidth: _fiatVolumeColumnSize - text: price_fiat+Constants.API.app.settings_pg.current_fiat_sign + horizontalAlignment: Text.AlignRight + text_value: parseFloat(price_fiat).toFixed(2)+Constants.API.app.settings_pg.current_fiat_sign } - DefaultText + DexLabel { Layout.preferredWidth: _cexRateColumnSize + horizontalAlignment: Text.AlignRight color: cex_rates=== "0" ? Qt.darker(DexTheme.foregroundColor) : parseFloat(cex_rates)>0? DexTheme.redColor : DexTheme.greenColor - text: cex_rates=== "0" ? "N/A" : parseFloat(cex_rates)>0? "+"+parseFloat(cex_rates).toFixed(2)+"%" : parseFloat(cex_rates).toFixed(2)+"%" + text_value: cex_rates=== "0" ? "N/A" : parseFloat(cex_rates)>0? "+"+parseFloat(cex_rates).toFixed(2)+"%" : parseFloat(cex_rates).toFixed(2)+"%" } - DefaultTooltip + + DexTooltip { id: _tooltip @@ -181,7 +223,7 @@ DefaultListView contentItem: DexLabelUnlinked { text_value: qsTr(" %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?
Yes - No").arg(coin).arg(coin) - wrapMode: DefaultText.Wrap + wrapMode: DexLabel.Wrap width: 250 onLinkActivated: { @@ -230,17 +272,15 @@ DefaultListView delay: 200 } } - onClicked: + } + + Connections + { + target: _tradeCard + function onBestChanged() { - if (!Constants.API.app.portfolio_pg.global_cfg_mdl.get_coin_info(coin).is_enabled) - { - _tooltip.open() - } - else - { - _listBestOrdersView.tradeCard.best = false - _listBestOrdersView.selectedOrder = { "coin": coin, "uuid": uuid, "price": price, "base_min_volume": base_min_volume, "base_max_volume": base_max_volume, "from_best_order": true } - } + Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl.setFilterFixedString("") + positionViewAtBeginning() } } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml index da8972184..5a89dd366 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml @@ -13,61 +13,72 @@ import "../../../Components" //> MultipageModal import "../../../Constants" as Constants //> API import Dex.Themes 1.0 as Dex -DefaultListView +DexListView { id: _listCoinView + model: Constants.API.app.trading_pg.market_pairs_mdl.left_selection_box + signal tickerSelected(var ticker) - property int _rowWidth: width - 20 - property int _rowHeight: 50 - property int _tokenColumnSize: 160 - - signal tickerSelected(var ticker) + property real _rowWidth: width + property real _rowHeight: 40 + property real _tokenColumnWidth: 150 + property real _balanceColumnWidth: 120 + property real _fiatColumnWidth: 120 - model: Constants.API.app.trading_pg.market_pairs_mdl.left_selection_box headerPositioning: ListView.OverlayHeader reuseItems: true cacheBuffer: 40 clip: true - header: DefaultRectangle + header: DexRectangle { + id: header_row width: _rowWidth height: _rowHeight z: 2 + radius: 0 + border.width: 0 color: Dex.CurrentTheme.floatingBackgroundColor - RowLayout // Coins Columns Name + RowLayout { - anchors.verticalCenter: parent.verticalCenter + anchors.margins: 5 anchors.fill: parent - spacing: 2 - DefaultText // "Token" Header + anchors.verticalCenter: parent.verticalCenter + + DexLabel // "Token" Header { - property bool asc: true + property bool asc: true + + Layout.preferredWidth: _tokenColumnWidth + horizontalAlignment: Text.AlignLeft - Layout.preferredWidth: _tokenColumnSize - text: qsTr("Token") + text_value: qsTr("Token") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 font.weight: Font.Bold + DexMouseArea { - anchors.fill: parent - hoverEnabled: true + anchors.fill: parent + hoverEnabled: true onClicked: { - parent.asc = !parent.asc - _listCoinView.model.sort_by_name(parent.asc) - } + parent.asc = !parent.asc + _listCoinView.model.sort_by_name(parent.asc) + } } } - DefaultText // "Balance" Header + + DexLabel // "Balance" Header { - property bool asc: true + property bool asc: true + + Layout.preferredWidth: _balanceColumnWidth + horizontalAlignment: Text.AlignRight - Layout.fillWidth: true - text: qsTr("Balance") + text_value: qsTr("Balance") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 @@ -75,20 +86,24 @@ DefaultListView DexMouseArea { - anchors.fill: parent - hoverEnabled: true + anchors.fill: parent + hoverEnabled: true onClicked: { - parent.asc = !parent.asc - _listCoinView.model.sort_by_currency_balance(parent.asc) - } + parent.asc = !parent.asc + _listCoinView.model.sort_by_currency_balance(parent.asc) + } } } - DefaultText // Fiat Balance Header + + DexLabel // Fiat Balance Header { - property bool asc: true + property bool asc: true + + Layout.preferredWidth: _fiatColumnWidth + horizontalAlignment: Text.AlignRight - text: qsTr("Balance Fiat") + text_value: qsTr("Balance Fiat") font.family: Constants.Style.font_family font.bold: true font.pixelSize: 12 @@ -96,88 +111,80 @@ DefaultListView DexMouseArea { - anchors.fill: parent - hoverEnabled: true + anchors.fill: parent + hoverEnabled: true onClicked: { - parent.asc = !parent.asc - _listCoinView.model.sort_by_currency_balance(parent.asc) - } + parent.asc = !parent.asc + _listCoinView.model.sort_by_currency_balance(parent.asc) + } } } } } - delegate: ItemDelegate + delegate: DexRectangle { - width: _listCoinView._rowWidth - height: 40 + width: _rowWidth + height: _rowHeight + radius: 0 + border.width: 0 + colorAnimation: false + color: mouse_area.containsMouse ? Dex.CurrentTheme.buttonColorHovered : 'transparent' + + DexMouseArea + { + id: mouse_area + anchors.fill: parent + hoverEnabled: true + onClicked: tickerSelected(model.ticker) + } + + HorizontalLine { width: parent.width; opacity: .5 } + RowLayout { - anchors.fill: parent - spacing: 2 - Item - { - Layout.preferredWidth: _tokenColumnSize - height: 40 - Row - { - anchors.verticalCenter: parent.verticalCenter - spacing: 10 - DefaultImage - { - id: _coinIcon - width: 20 - height: 20 - source: General.coinIcon(model.ticker) - anchors.verticalCenter: parent.verticalCenterv - } - DefaultText - { - anchors.verticalCenter: parent.verticalCenter - text: model.ticker - - } - } - Qaterial.DebugRectangle + anchors.fill: parent + + RowLayout { + property int _iconWidth: 24 + Layout.preferredWidth: _tokenColumnWidth + + DexImage { - anchors.fill: parent - visible: false + id: _coinIcon + Layout.preferredWidth: parent._iconWidth + Layout.preferredHeight: 24 + source: General.coinIcon(model.ticker) } - } - Item - { - Layout.fillWidth: true - height: 40 - DexLabel - { - anchors.verticalCenter: parent.verticalCenter - text: model.balance.replace(" ","") - horizontalAlignment: Label.AlignLeft - - } - Qaterial.DebugRectangle + + DexLabel { - anchors.fill: parent - visible: false + Layout.preferredWidth: _tokenColumnWidth - parent._iconWidth + text_value: model.ticker + font.pixelSize: 14 + wrapMode: Text.NoWrap } - } + } + DexLabel { - Layout.alignment: Qt.AlignVCenter - text: "%1".arg(General.getFiatText(model.balance, model.ticker, false)) - Qaterial.DebugRectangle - { - anchors.fill: parent - visible: false - } + Layout.preferredWidth: _balanceColumnWidth + horizontalAlignment: Text.AlignRight + text_value: model.balance.replace(" ","") + font.pixelSize: 14 + wrapMode: Text.NoWrap + } + + DexLabel + { + Layout.preferredWidth: _fiatColumnWidth + Layout.rightMargin: 8 + horizontalAlignment: Text.AlignRight + text_value: "%1".arg(General.getFiatText(model.balance, model.ticker, false)) + font.pixelSize: 14 + wrapMode: Text.NoWrap } - } - - MouseArea - { - anchors.fill: parent - onClicked: tickerSelected(model.ticker) } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml index 93481e378..b6171ada9 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubHistory.qml @@ -48,12 +48,12 @@ Item } function applyDateFilter() { - list_model_proxy.filter_minimum_date = min_date.date + list_model_proxy.filter_minimum_date = min_date.selectedDate - if(max_date.date < min_date.date) - max_date.date = min_date.date + if(max_date.selectedDate < min_date.selectedDate) + max_date.selectedDate = min_date.selectedDate - list_model_proxy.filter_maximum_date = max_date.date + list_model_proxy.filter_maximum_date = max_date.selectedDate } function applyFilter() { @@ -105,8 +105,8 @@ Item .arg(combo_base.currentTicker) .arg(combo_rel.currentTicker) .arg(qsTr("Date")) - .arg(min_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) - .arg(max_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) + .arg(min_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) + .arg(max_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) } DexAppButton @@ -209,42 +209,33 @@ Item spacing: 10 - RowLayout + Row { width: main_order.width - 40 height: 50 anchors.horizontalCenter: parent.horizontalCenter - spacing: 5 - Qaterial.TextFieldDatePicker + DatePicker { id: min_date - title: qsTr("From") - from: default_min_date - to: default_max_date - date: default_min_date + width: parent.width * 0.45 + titleText: qsTr("From") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_min_date onAccepted: applyDateFilter() - Layout.fillWidth: true - Layout.fillHeight: true - opacity: .8 - color: DexTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' } - Qaterial.TextFieldDatePicker + Item { width: parent.width * 0.1; height: 1 } + + DatePicker { id: max_date - enabled: min_date.enabled - title: qsTr("To") - from: min_date.date - to: default_max_date - date: default_max_date + width: parent.width * 0.45 + titleText: qsTr("To") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_max_date onAccepted: applyDateFilter() - Layout.fillWidth: true - Layout.fillHeight: true - rightInset: 0 - opacity: .8 - color: DexTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' } } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml index 4f9520eed..680331ad6 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/SubOrders.qml @@ -49,12 +49,12 @@ Item } function applyDateFilter() { - list_model_proxy.filter_minimum_date = min_date.date + list_model_proxy.filter_minimum_date = min_date.selectedDate - if(max_date.date < min_date.date) - max_date.date = min_date.date + if(max_date.selectedDate < min_date.selectedDate) + max_date.selectedDate = min_date.selectedDate - list_model_proxy.filter_maximum_date = max_date.date + list_model_proxy.filter_maximum_date = max_date.selectedDate } function applyFilter() { @@ -91,15 +91,14 @@ Item width: _subOrdersRoot.width - 40 anchors.topMargin: 12 font.pixelSize: Constants.Style.textSizeSmall4 - //text: _filterApplied? "" : qsTr("Finished orders") DexLabel { opacity: .4 text: qsTr("Filter") + " %1 / %2
%3 %4 - %5" .arg(combo_base.currentTicker) .arg(combo_rel.currentTicker) .arg(qsTr("Date")) - .arg(min_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) - .arg(max_date.date.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) + .arg(min_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) + .arg(max_date.selectedDate.toLocaleDateString(Locale.ShortFormat, "yyyy.MM.dd")) } DexAppButton { @@ -204,44 +203,34 @@ Item } } - RowLayout + Row { width: main_order.width - 40 height: 50 anchors.horizontalCenter: parent.horizontalCenter - spacing: 5 - Qaterial.TextFieldDatePicker + DatePicker { id: min_date - title: qsTr("From") - from: default_min_date - to: default_max_date - date: default_min_date + width: parent.width * 0.45 + titleText: qsTr("From") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_min_date onAccepted: applyDateFilter() - Layout.fillWidth: true - Layout.fillHeight: true - opacity: .8 - color: DexTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' } - Qaterial.TextFieldDatePicker + Item { width: parent.width * 0.1; height: 1 } + + DatePicker { id: max_date - enabled: min_date.enabled - title: qsTr("To") - from: min_date.date - to: default_max_date - date: default_max_date + width: parent.width * 0.45 + titleText: qsTr("To") + minimumDate: default_min_date + maximumDate: default_max_date + selectedDate: default_max_date onAccepted: applyDateFilter() - Layout.fillWidth: true - Layout.fillHeight: true - rightInset: 0 - opacity: .8 - color: Dex.CurrentTheme.foregroundColor - backgroundColor: DexTheme.portfolioPieGradient ? '#FFFFFF' : 'transparent' } - } spacing: 10 } diff --git a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml index a4a8d89ce..31bd8e791 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/SimpleView/Trade.qml @@ -42,7 +42,7 @@ ClipRRect // Trade Card onBestChanged: if (best) Constants.API.app.trading_pg.orderbook.refresh_best_orders() width: bestOrderSimplified.visible ? 600 : coinSelection ? 450 : 380 - height: col.height + 15 + height: swap_card_content.height + 15 radius: 20 Connections // Catches C++ `trading_page` class signals. @@ -79,6 +79,7 @@ ClipRRect // Trade Card function onBetterOrderDetected(newOrder) { + if (!selectedOrder) return // We shoould rename SelectedOrderStatus enum to OrderbookNotification. if (Constants.API.app.trading_pg.selected_order_status == SelectedOrderStatus.BetterPriceAvailable) { @@ -131,10 +132,9 @@ ClipRRect // Trade Card Column // Swap Card Content { - id: col + id: swap_card_content width: parent.width - spacing: 20 Column // Header { id: _swapCardHeader @@ -142,6 +142,7 @@ ClipRRect // Trade Card width: parent.width - 20 leftPadding: 20 topPadding: 20 + bottomPadding: 20 spacing: 15 DexLabel // Title @@ -153,7 +154,7 @@ ClipRRect // Trade Card DefaultText // Description { - anchors.topMargin: 12 + anchors.topMargin: 10 font.pixelSize: Constants.Style.textSizeSmall4 text: qsTr("Instant trading with best orders") @@ -163,7 +164,7 @@ ClipRRect // Trade Card visible: enabled anchors.left: parent.right - anchors.leftMargin: 100 + anchors.leftMargin: 80 anchors.bottom: parent.bottom anchors.bottomMargin: -8 @@ -187,14 +188,14 @@ ClipRRect // Trade Card delay: 500 timeout: 5000 visible: parent.hovered - text: qsTr("Reset form.") + text: qsTr("Reset form") } } } DexLabel // Title { - text: qsTr("You have no tradable assets.") + text: qsTr("You have no tradable assets") font: DexTypo.head6 opacity: .85 visible: !has_coins_with_balance @@ -413,7 +414,6 @@ ClipRRect // Trade Card anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 5 - color: DexTheme.foregroundColor up: false } @@ -447,7 +447,7 @@ ClipRRect // Trade Card Layout.preferredWidth: _tradeCard.width - 20 Layout.preferredHeight: 90 Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 15 + Layout.topMargin: 10 radius: 20 color: DexTheme.tradeFieldBoxBackgroundColor visible: !bestOrderSimplified.visible @@ -593,8 +593,6 @@ ClipRRect // Trade Card anchors.right: parent.right anchors.rightMargin: 5 - color: DexTheme.foregroundColor - up: false } } @@ -634,9 +632,10 @@ ClipRRect // Trade Card } } - Item + Item // Swap Button { Layout.topMargin: 10 + Layout.bottomMargin: 10 Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: _tradeCard.width - 30 Layout.preferredHeight: 50 @@ -741,134 +740,92 @@ ClipRRect // Trade Card } } + Item + { + height: 35 + width: 150 + visible: coinSelectorSimplified.visible + + SearchField + { + id: _coinSearchField + height: 35 + anchors.fill: parent + anchors.leftMargin: 20 + forceFocus: true + textField.onTextChanged: _coinList.model.setFilterFixedString(textField.text) + Component.onDestruction: _coinList.model.setFilterFixedString("") + } + } + Item { id: coinSelectorSimplified - width: parent.width + width: parent.width - 40 + anchors.horizontalCenter: parent.horizontalCenter height: 300 visible: _tradeCard.coinSelection && has_coins_with_balance - Item + SubCoinSelector { - width: parent.width - height: 50 - - Qaterial.ColorIcon - { - anchors.verticalCenter: parent.verticalCenter - source: Qaterial.Icons.magnify - color: DexTheme.foregroundColor - x: 25 - opacity: .7 - } - - DexTextField + id: _coinList + anchors.fill: parent + anchors.topMargin: 10 + onTickerSelected: { - id: _coinSearchField - width: parent.width-70 - height: parent.height - font.pixelSize: 16 - x: 45 - placeholderText: qsTr("Search") - - background: DexRectangle - { - border.width: 0 - color: 'transparent' - } - - onTextChanged: - { - _coinList.model.setFilterFixedString(text) - } + _tradeCard.selectedTicker = ticker + _tradeCard.coinSelection = false + _fromValue.forceActiveFocus() } } Connections { target: _tradeCard function onCoinSelectionChanged() { - _coinSearchField.text = "" + _coinSearchField.textField.text = "" } } + } - SubCoinSelector - { - id: _coinList - - onTickerSelected: - { - _tradeCard.selectedTicker = ticker - _tradeCard.coinSelection = false - _fromValue.forceActiveFocus() - } + Item + { + height: 45 + width: 150 + visible: bestOrderSimplified.visible && (_bestOrderList.count > 0 || _bestOrderSearchField.textField.text != "") + SearchField + { + id: _bestOrderSearchField + anchors.topMargin: 10 + height: 35 anchors.fill: parent - anchors.rightMargin: 10 anchors.leftMargin: 20 - anchors.bottomMargin: 10 - anchors.topMargin: 50 + forceFocus: true + textField.onTextChanged: Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl.setFilterFixedString(textField.text) + Component.onDestruction: Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl.setFilterFixedString("") } } Item { id: bestOrderSimplified - width: parent.width + width: parent.width - 40 + anchors.horizontalCenter: parent.horizontalCenter height: 300 visible: _tradeCard.best && has_coins_with_balance - Item - { - width: parent.width - height: 50 - - Qaterial.ColorIcon - { - anchors.verticalCenter: parent.verticalCenter - source: Qaterial.Icons.magnify - x: 25 - opacity: .7 - color: Dex.CurrentTheme.textPlaceholderColor - } - - DexTextField - { - id: _bestOrderSearchField - width: parent.width-70 - height: parent.height - font.pixelSize: 16 - x: 45 - placeholderText: qsTr("Search") - - background: DexRectangle - { - border.width: 0 - color: 'transparent' - } - - onTextChanged: - { - Constants.API.app.trading_pg.orderbook.best_orders.proxy_mdl.setFilterFixedString(text) - } - } - } - - Connections { - target: _tradeCard - function onBestChanged() { - _bestOrderSearchField.text = "" - } - } - SubBestOrder { id: _bestOrderList tradeCard: _tradeCard + anchors.fill: parent + anchors.topMargin: 10 + visible: _tradeCard.width == 600 onSelectedOrderChanged: { _tradeCard.selectedOrder = selectedOrder - _bestOrderSearchField.text = "" + _bestOrderSearchField.textField.text = "" _fromValue.forceActiveFocus() } @@ -879,13 +836,13 @@ ClipRRect // Trade Card _tradeCard.best = false } } + } - anchors.fill: parent - anchors.rightMargin: 10 - anchors.leftMargin: 20 - anchors.bottomMargin: 10 - anchors.topMargin: 50 - visible: _tradeCard.width == 600 + Connections { + target: _tradeCard + function onBestChanged() { + _bestOrderSearchField.textField.text = "" + } } DefaultBusyIndicator @@ -915,9 +872,10 @@ ClipRRect // Trade Card } } - Item // Swap Info - Details + Item // Fees Info - Details { id: _feesCard + anchors.topMargin: 10 anchors.horizontalCenter: parent.horizontalCenter width: 350 height: 50 diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trade.qml b/atomic_defi_design/Dex/Exchange/Trade/Trade.qml index 9c8c345c8..46c40aa96 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Trade.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/Trade.qml @@ -21,9 +21,6 @@ Item id: exchange_trade readonly property string total_amount: API.app.trading_pg.total_amount - property bool orderSelected: false - property bool isUltraLarge: true // width > 1400 - property bool isBigScreen: width > 1400 Component.onCompleted: { @@ -41,17 +38,6 @@ Item Component.onDestruction: API.app.trading_pg.on_gui_leave_dex() - onIsUltraLargeChanged: - { - if (isUltraLarge) { - API.app.trading_pg.orderbook.asks.proxy_mdl.qml_sort( - 0, Qt.DescendingOrder) - } else { - API.app.trading_pg.orderbook.asks.proxy_mdl.qml_sort( - 0, Qt.AscendingOrder) - } - } - readonly property bool block_everything: swap_cooldown.running || fetching_multi_ticker_fees_busy @@ -122,7 +108,7 @@ Item swap_cooldown.restart() if (API.app.trading_pg.set_pair(is_left_side, changed_ticker)) - pairChanged(base_ticker, rel_ticker) + app.pairChanged(base_ticker, rel_ticker) } function trade(options, default_config) { @@ -157,17 +143,46 @@ Item orderPlaced() } + signal orderSelected() signal orderPlaced() readonly property bool buy_sell_rpc_busy: API.app.trading_pg.buy_sell_rpc_busy readonly property var buy_sell_last_rpc_data: API.app.trading_pg.buy_sell_last_rpc_data - Loader + Column { - id: _viewLoader anchors.fill: parent - source: API.app.trading_pg.current_trading_mode == TradingMode.Pro ? "ProView.qml" : "SimpleView/Main.qml" - } + spacing: 15 + anchors.leftMargin: 20 + anchors.rightMargin: 20 - TradeViewHeader { } + TradeViewHeader + { + id: header + width: parent.width + height: parent.height * 0.06 + + proViewTickerSelectors: proView.tickerSelectors + proViewTrInfo: proView.trInfo + proViewOrderBook: proView.orderBook + proViewBestOrders: proView.bestOrders + proViewPlaceOrderForm: proView.placeOrderForm + } + + ProView + { + id: proView + width: parent.width + height: parent.height * 0.90 + visible: API.app.trading_pg.current_trading_mode == TradingMode.Pro + enabled: visible + } + + SimpleView.Main + { + anchors.horizontalCenter: parent.horizontalCenter + visible: API.app.trading_pg.current_trading_mode == TradingMode.Simple + enabled: visible + } + } } diff --git a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/BuyBox.qml b/atomic_defi_design/Dex/Exchange/Trade/TradeBox/BuyBox.qml deleted file mode 100644 index d0049c04d..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/BuyBox.qml +++ /dev/null @@ -1,60 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import Qt.labs.settings 1.0 -import AtomicDEX.MarketMode 1.0 - -import "../../../Components" -import "../../../Wallet" - -import App 1.0 - -FloatingBackground { - property alias can_submit_trade: form_base.can_submit_trade - property alias formBase: form_base - Layout.preferredHeight: !sell_mode ? 350 : 45 - Behavior on Layout.preferredHeight { - NumberAnimation { - duration: 200 - } - } - Layout.fillWidth: true - radius: sell_mode ? 3 : 4 - border.color: Style.colorGreen - color: Style.colorTheme9 - opacity: mouse_area2.containsMouse ? 1 : !sell_mode ? 1 : .2 - Rectangle { - width: parent.width - height: 45 - color: Style.colorGreen - radius: 2 - DefaultText { - anchors.centerIn: parent - text: qsTr("Buy") + " " + atomic_qt_utilities.retrieve_main_ticker(left_ticker) - color: Style.colorTheme9 - font.pixelSize: Style.textSize2 - } - } - - OrderForm { - id: form_base - y: 45 - width: parent.width - 25 - height: parent.height - 45 - clip: true - visible: !sell_mode - border.color: 'transparent' - color: 'transparent' - anchors.horizontalCenter: parent.horizontalCenter - - } - - DefaultMouseArea { - anchors.fill: parent - id: mouse_area2 - visible: sell_mode - hoverEnabled: true - onClicked: setMarketMode(MarketMode.Buy) - } -} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/OrderForm.qml b/atomic_defi_design/Dex/Exchange/Trade/TradeBox/OrderForm.qml deleted file mode 100644 index e293049b1..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/OrderForm.qml +++ /dev/null @@ -1,213 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtGraphicalEffects 1.0 - -import AtomicDEX.MarketMode 1.0 -import AtomicDEX.TradingError 1.0 -import "../../../Components" -import App 1.0 -import Dex.Themes 1.0 as Dex - -FloatingBackground -{ - id: root - radius: 10 - - function focusVolumeField() - { - input_volume.forceActiveFocus() - } - - readonly property string total_amount: API.app.trading_pg.total_amount - - readonly property bool can_submit_trade: last_trading_error === TradingError.None - - // Will move to backend: Minimum Fee - function getMaxBalance() - { - if (General.isFilled(base_ticker)) - return API.app.get_balance(base_ticker) - - return "0" - } - - // Will move to backend: Minimum Fee - function getMaxVolume() - { - // base in this orderbook is always the left side, so when it's buy, we want the right side balance (rel in the backend) - const value = sell_mode ? API.app.trading_pg.orderbook.base_max_taker_vol.decimal : - API.app.trading_pg.orderbook.rel_max_taker_vol.decimal - - if (General.isFilled(value)) - return value - - return getMaxBalance() - } - - function setMinimumAmount(value) { API.app.trading_pg.min_trade_vol = value } - - Connections - { - target: exchange_trade - function onBackend_priceChanged() { input_price.text = exchange_trade.backend_price; } - function onBackend_volumeChanged() { input_volume.text = exchange_trade.backend_volume; } - } - - ColumnLayout - { - id: form_layout - width: parent.width - - ColumnLayout - { - Layout.alignment: Qt.AlignTop - Layout.fillWidth: true - Layout.topMargin: 12 - - Item - { - Layout.fillWidth: true - height: input_price.height + price_usd_value.height + price_usd_value.anchors.topMargin - - AmountField - { - id: input_price - - left_text: qsTr("Price") - right_text: atomic_qt_utilities.retrieve_main_ticker(right_ticker) - enabled: !(API.app.trading_pg.preffered_order.price !== undefined) - text: backend_price - width: 261 - height: 41 - radius: 18 - - onTextChanged: setPrice(text) - } - - DefaultText - { - id: price_usd_value - anchors.right: input_price.right - anchors.top: input_price.bottom - anchors.topMargin: 7 - - text_value: General.getFiatText(non_null_price, right_ticker) - font.pixelSize: input_price.font.pixelSize - color: Dex.CurrentTheme.foregroundColor2 - - CexInfoTrigger {} - } - } - - - Item - { - Layout.fillWidth: true - Layout.topMargin: 10 - height: input_volume.height + inputVolumePrice.height + inputVolumePrice.anchors.topMargin - - AmountField - { - id: input_volume - width: 261 - height: 41 - radius: 18 - left_text: qsTr("Volume") - right_text: atomic_qt_utilities.retrieve_main_ticker(left_ticker) - placeholderText: sell_mode ? qsTr("Amount to sell") : qsTr("Amount to receive") - text: API.app.trading_pg.volume - onTextChanged: setVolume(text) - } - - DefaultText - { - id: inputVolumePrice - anchors.right: input_volume.right - anchors.top: input_volume.bottom - anchors.topMargin: price_usd_value.anchors.topMargin - - text_value: General.getFiatText(non_null_volume, left_ticker) - font.pixelSize: input_volume.font.pixelSize - color: Dex.CurrentTheme.foregroundColor2 - - CexInfoTrigger {} - } - } - - DefaultText - { - Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 6 - font.pixelSize: 13 - text: qsTr("Min volume: ") + API.app.trading_pg.min_trade_vol - - DefaultText - { - anchors.left: parent.right - anchors.leftMargin: 8 - anchors.verticalCenter: parent.verticalCenter - - text: General.cex_icon - color: Dex.CurrentTheme.foregroundColor3 - - DefaultMouseArea - { - anchors.fill: parent - onClicked: _sliderHelpModal.open() - } - - ModalLoader - { - id: _sliderHelpModal - sourceComponent: HelpModal - { - title: qsTr("How to use the pro-view slider ?") - helpSentence: qsTr("This slider is used to setup the order requirements you need.\nLeft slider: Sets the minimum amount required to process a trade.\nRight slider: Sets the volume you want to trade.") - } - } - } - } - - DefaultRangeSlider - { - id: _volumeRange - - function getRealValue() { return first.position * (first.to - first.from); } - function getRealValue2() { return second.position * (second.to - second.from); } - - enabled: input_volume.enabled && !(!sell_mode && General.isZero(non_null_price)) && to > 0 - - Layout.alignment: Qt.AlignHCenter - Layout.preferredWidth: parent.width - 20 - - from: API.app.trading_pg.orderbook.current_min_taker_vol - to: Math.max(0, parseFloat(max_volume)) - - first.value: parseFloat(API.app.trading_pg.min_trade_vol) - - firstDisabled: !_useCustomMinTradeAmountCheckbox.checked - - second.value: parseFloat(non_null_volume) - - first.onValueChanged: if (first.pressed) setMinimumAmount(General.formatDouble(first.value)) - second.onValueChanged: if (second.pressed) setVolume(General.formatDouble(second.value)) - } - - DexCheckBox - { - id: _useCustomMinTradeAmountCheckbox - - Layout.topMargin: 15 - Layout.alignment: Qt.AlignHCenter - - boxWidth: 20.76 - boxHeight: 20.76 - text: qsTr("Use custom minimum trade amount") - textColor: Dex.CurrentTheme.foregroundColor3 - font.pixelSize: 13 - spacing: 3 - } - } - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/SellBox.qml b/atomic_defi_design/Dex/Exchange/Trade/TradeBox/SellBox.qml deleted file mode 100644 index 665bc6c07..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/TradeBox/SellBox.qml +++ /dev/null @@ -1,76 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import Qaterial 1.0 as Qaterial -import Qt.labs.settings 1.0 -import AtomicDEX.MarketMode 1.0 - -import "../../../Components" -import "../../../Wallet" - -import App 1.0 - -Item { - property alias can_submit_trade: form_base.can_submit_trade - property alias formBase: form_base - Layout.preferredHeight: sell_mode ? 350 : 45 - Behavior on Layout.preferredHeight { - NumberAnimation { - duration: 200 - } - } - //color: Style.colorTheme - Layout.fillWidth: true - //radius: sell_mode? 4 : 3 - //border.color: Style.colorRed - //color: Style.colorTheme6 - opacity: mouse_area.containsMouse ? 1 : sell_mode ? 1 : .35 - - Rectangle { - visible: false - width: parent.width - height: 45 - color: Style.colorRed - radius: 6 - Rectangle { - anchors.bottom: parent.bottom - width: parent.width - height: parent.radius - color: Style.colorTheme6 - } - - DefaultText { - anchors.centerIn: parent - anchors.verticalCenterOffset: -2 - text: qsTr("Sell") + " " + atomic_qt_utilities.retrieve_main_ticker(left_ticker) - color: Qaterial.Colors.gray200 - font.pixelSize: Style.textSize1 - } - } - OrderForm { - id: form_base - y: 45 - width: parent.width - 25 - height: parent.height - 45 - //clip: true - visible: sell_mode - border.color: 'transparent' - color: 'transparent' - anchors.horizontalCenter: parent.horizontalCenter - - } - - - - - - - DefaultMouseArea { - anchors.fill: parent - id: mouse_area - visible: !sell_mode - hoverEnabled: true - onClicked: setMarketMode(MarketMode.Sell) - } -} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/FeeInfo.qml b/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/FeeInfo.qml index 4b80814b1..0f34b35cf 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/FeeInfo.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/FeeInfo.qml @@ -15,16 +15,17 @@ import "../../../../Constants" import "../../../../Wallet" -Column { +Column +{ id: bg - width: parent.width - - Row { + Row + { width: bg.width height: tx_fee_text.implicitHeight+25 visible: false - ColumnLayout { + ColumnLayout + { id: fees visible: valid_fee_info && !General.isZero(non_null_volume) @@ -32,7 +33,8 @@ Column { Layout.rightMargin: Layout.leftMargin Layout.alignment: Qt.AlignLeft - DefaultText { + DefaultText + { id: tx_fee_text text_value: General.feeText(curr_fee_info, base_ticker, true, true) font.pixelSize: Style.textSizeSmall1 @@ -43,7 +45,8 @@ Column { } - DefaultText { + DefaultText + { //visible: !fees.visible visible: false text_value: !visible ? "" : diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/TotalView.qml b/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/TotalView.qml deleted file mode 100644 index df3539bd8..000000000 --- a/atomic_defi_design/Dex/Exchange/Trade/Trading/Items/TotalView.qml +++ /dev/null @@ -1,95 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtQuick.Controls.Material 2.15 - -import Qaterial 1.0 as Qaterial -import Qt.labs.settings 1.0 - -import "../../../../Components" -import "../../../../Constants" -import Dex.Themes 1.0 as Dex - -Item -{ - anchors.fill: parent - anchors.topMargin: 0 - Item - { - width: parent.width - height: 140 - Column - { - width: parent.width-15 - anchors.horizontalCenter: parent.horizontalCenter - spacing: 5 - leftPadding: 10 - rightPadding: 10 - RowLayout - { - width: parent.width - height: 30 - DefaultText - { - color: Dex.CurrentTheme.foregroundColor3 - text: "Total " + API.app.settings_pg.current_fiat + " " + General.cex_icon - font.pixelSize: 14 - font.weight: Font.Normal - opacity: .6 - CexInfoTrigger {} - } - Item - { - height: 30 - Layout.fillWidth: true - DefaultText - { - anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 20 - anchors.right: parent.right - font.weight: Font.DemiBold - font.pixelSize: 16 - font.family: 'lato' - text_value: General.getFiatText(total_amount, right_ticker).replace(General.cex_icon, "") - } - } - } - - HorizontalLine - { - color: Dex.CurrentTheme.lineSeparatorColor - width: parent.width - 20 - anchors.horizontalCenter: parent.horizontalCenter - } - - RowLayout - { - width: parent.width - height: 30 - DexLabel - { - color: Dex.CurrentTheme.foregroundColor3 - text: "Total " + atomic_qt_utilities.retrieve_main_ticker(right_ticker) - font.pixelSize: 14 - opacity: .6 - font.weight: Font.Normal - } - Item - { - height: 30 - Layout.fillWidth: true - DefaultText - { - anchors.verticalCenter: parent.verticalCenter - anchors.rightMargin: 20 - anchors.right: parent.right - font.weight: Font.DemiBold - font.pixelSize: 16 - font.family: 'lato' - text_value: General.formatCrypto("", total_amount, right_ticker).replace(right_ticker, "") - } - } - } - } - } -} diff --git a/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml b/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml index 80ebe2e2c..15755c192 100644 --- a/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml +++ b/atomic_defi_design/Dex/Exchange/Trade/Trading/TradeViewHeader.qml @@ -3,124 +3,142 @@ import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Material 2.15 -import Qaterial 1.0 as Qaterial import Qt.labs.settings 1.0 +import Qaterial 1.0 as Qaterial + import AtomicDEX.MarketMode 1.0 import AtomicDEX.TradingError 1.0 import AtomicDEX.TradingMode 1.0 -import "../../../Components" import App 1.0 import Dex.Themes 1.0 as Dex +import "../../../Components" +import "../../../Constants" +// Simple/Pro toggle group Item { - width: parent.width - 5 - anchors.horizontalCenter: parent.horizontalCenter + // property var proViewChart + property var proViewTickerSelectors + property var proViewTrInfo + property var proViewOrderBook + property var proViewBestOrders + property var proViewPlaceOrderForm - ColumnLayout + Item { - anchors.fill: parent - spacing: 50 + width: 350 + height: parent.height - // Simple/Pro toggle group - Item + // Simple/Pro select cursor + Rectangle { - Layout.leftMargin: 30 - Layout.preferredWidth: 120 + id: cursorRect + width: _simpleLabel.width + 28 + height: _simpleLabel.height + 14 + radius: 16 + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: API.app.trading_pg.current_trading_mode == TradingMode.Simple ? _simpleLabel.horizontalCenter : _proLabel.horizontalCenter + color: Dex.CurrentTheme.tabSelectedColor + } - // Simple/Pro select cursor - Rectangle - { - width: 84 - height: 32 - radius: 18 - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: API.app.trading_pg.current_trading_mode == TradingMode.Simple ? _simpleLabel.horizontalCenter : _proLabel.horizontalCenter - color: Dex.CurrentTheme.tabSelectedColor - } + DexLabel + { + id: _simpleLabel + text: "Simple" + color: API.app.trading_pg.current_trading_mode == TradingMode.Simple ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: 14 + font.weight: Font.Bold - DexLabel + DexMouseArea { - id: _simpleLabel - text: "Simple" - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - font.bold: true - DexMouseArea - { - id: simple_area - hoverEnabled: true - anchors.fill: parent - onClicked: API.app.trading_pg.current_trading_mode = TradingMode.Simple - } + id: simple_area + hoverEnabled: true + anchors.fill: parent + onClicked: API.app.trading_pg.current_trading_mode = TradingMode.Simple } + } - DexLabel + DexLabel + { + id: _proLabel + text: "Pro" + color: API.app.trading_pg.current_trading_mode == TradingMode.Pro ? Dex.CurrentTheme.foregroundColor : Dex.CurrentTheme.foregroundColor2 + anchors.left: _simpleLabel.right + anchors.leftMargin: 10 + cursorRect.width / 2 + anchors.verticalCenter: parent.verticalCenter + font.pixelSize: 14 + font.weight: Font.Bold + + DexMouseArea { - id: _proLabel - text: "Pro" - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - font.bold: true - DexMouseArea - { - id: pro_area - hoverEnabled: true - anchors.fill: parent - onClicked: API.app.trading_pg.current_trading_mode = TradingMode.Pro - } + id: pro_area + hoverEnabled: true + anchors.fill: parent + onClicked: API.app.trading_pg.current_trading_mode = TradingMode.Pro } } - - Item - { - Layout.fillHeight: true - Layout.fillWidth: true - } } - // Options menu present in pro mode. - Rectangle + Qaterial.OutlineButton { + visible: API.app.trading_pg.current_trading_mode == TradingMode.Pro + anchors.right: parent.right - y: -10 - width: 40 - height: 25 - enabled: API.app.trading_pg.current_trading_mode == TradingMode.Pro - visible: enabled - radius: height / 2 - color: !enabled ? 'transparent' : cog_area.containsMouse || _viewLoader.item.dexConfig.visible ? - Dex.CurrentTheme.floatingBackgroundColor : Dex.CurrentTheme.accentColor - - Behavior on color { ColorAnimation { duration: 150 } } - - Qaterial.ColorIcon + + outlined: false + highlighted: false + + foregroundColor: Dex.CurrentTheme.foregroundColor + icon.source: Qaterial.Icons.cog + text: qsTr("Pro View Settings") + font: DexTypo.subtitle1 + + onClicked: { - source: Qaterial.Icons.cog - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - iconSize: 15 - color: !parent.enabled ? 'transparent' : cog_area.containsMouse || _viewLoader.item.dexConfig.visible ? - Dex.CurrentTheme.foregroundColor2 : Dex.CurrentTheme.foregroundColor + proViewCfgMenu.openAt(mapToItem(Overlay.overlay, width / 2, height), Item.Top) } - DexMouseArea + DexPopup { - id: cog_area - hoverEnabled: true - anchors.fill: parent - onClicked: { - if (API.app.trading_pg.current_trading_mode == TradingMode.Pro) + id: proViewCfgMenu + + backgroundColor: Dex.CurrentTheme.floatingBackgroundColor + + contentItem: Item + { + implicitWidth: 200 + implicitHeight: 240 + + Column { - if (_viewLoader.item.dexConfig.visible) - { - _viewLoader.item.dexConfig.close() - } - else - { - _viewLoader.item.dexConfig.openAt(mapToItem(Overlay.overlay, width / 2, height), Item.Top) - } + anchors.fill: parent + padding: 10 + spacing: 8 + + DefaultText { text: qsTr("Display Settings"); font: DexTypo.body2 } + + HorizontalLine { width: parent.width - 20; anchors.horizontalCenter: parent.horizontalCenter; opacity: .4 } + + CheckEye { text: qsTr("Ticker Selectors"); target: proViewTickerSelectors } + + HorizontalLine { width: parent.width - 20; anchors.horizontalCenter: parent.horizontalCenter; opacity: .4 } + + CheckEye { text: qsTr("Trading Information"); target: proViewTrInfo } + + HorizontalLine { width: parent.width - 20; anchors.horizontalCenter: parent.horizontalCenter; opacity: .4 } + + CheckEye { text: qsTr("Order Book"); target: proViewOrderBook } + + HorizontalLine { width: parent.width - 20; anchors.horizontalCenter: parent.horizontalCenter; opacity: .4 } + + CheckEye { text: qsTr("Best Orders"); target: proViewBestOrders } + + HorizontalLine { width: parent.width - 20; anchors.horizontalCenter: parent.horizontalCenter; opacity: .4 } + + CheckEye { text: qsTr("Place Order"); target: proViewPlaceOrderForm } } } } diff --git a/atomic_defi_design/Dex/Graphics/Color.js b/atomic_defi_design/Dex/Graphics/Color.js index 2926e4933..ea42e4522 100644 --- a/atomic_defi_design/Dex/Graphics/Color.js +++ b/atomic_defi_design/Dex/Graphics/Color.js @@ -13,13 +13,14 @@ // Returned ARGB string: "#AARRGGBB" function argbStrFromRgbaStr(rgbaString) { - if (rgbaString.length === 7) + let tempRgbaString = rgbaString + if (tempRgbaString.length === 7) { console.warn("Dex.Graphics.Color.argbStrFromRgbaStr: %1 is not an RGBA color" - .arg(rgbaString)); - return rgbaString; + .arg(tempRgbaString)); + return tempRgbaString; } // # A RGB - return "#" + rgbaString.substr(7, 2) + rgbaString.substr(1, 6); + return "#" + tempRgbaString.substr(7, 2) + tempRgbaString.substr(1, 6); } diff --git a/atomic_defi_design/Dex/NewUpdateModal.qml b/atomic_defi_design/Dex/NewUpdateModal.qml new file mode 100644 index 000000000..c479b78ed --- /dev/null +++ b/atomic_defi_design/Dex/NewUpdateModal.qml @@ -0,0 +1,165 @@ +import QtQuick 2.12 +import QtQuick.Layouts 1.12 +import QtQml 2.15 //> Qt.exit +import QtQuick.Controls 2.15 //> Popup.NoAutoClose + +import "Components" as Dex +import "Constants" as Dex + +Dex.MultipageModal +{ + id: root + + currentIndex: + { + if (Dex.API.app.updateCheckerService.isFetching) + return 0 + else if (Dex.API.app.updateCheckerService.updateInfo.rpcCode !== 200) + return 1 + else if (Dex.API.app.updateCheckerService.updateInfo.updateNeeded) + return 2 + return 3 + } + + Component.onCompleted: + { + if (Dex.API.app.updateCheckerService.updateInfo.status === "recommended" || + Dex.API.app.updateCheckerService.updateInfo.status === "required" ) + { + root.open() + } + } + + closePolicy: Popup.NoAutoClose + + Dex.MultipageModalContent + { + titleText: qsTr("Searching new updates") + titleAlignment: Qt.AlignHCenter + spacing: 16 + + Dex.DefaultText + { + Layout.alignment: Qt.AlignHCenter + text: qsTr("Fetching...") + } + + Dex.DefaultBusyIndicator + { + Layout.topMargin: 12 + Layout.alignment: Qt.AlignHCenter + } + + footer: + [ + Item { Layout.fillWidth: true }, + Dex.DefaultButton + { + text: qsTr("Close") + onClicked: close() + } + ] + } + + Dex.MultipageModalContent + { + titleText: qsTr("Searching new updates") + titleAlignment: Qt.AlignHCenter + spacing: 16 + + Dex.DefaultText + { + text: qsTr("Could not check new updates because of the following reason: \n%1").arg(Dex.API.app.updateCheckerService.updateInfo.status) + } + + footer: + [ + Item { Layout.fillWidth: true }, + Dex.DefaultButton + { + text: qsTr("Close") + onClicked: close() + } + ] + } + + Dex.MultipageModalContent + { + titleText: Dex.API.app.updateCheckerService.updateInfo.status === "required" ? qsTr("Mandatory version found") : qsTr("New version found") + titleAlignment: Qt.AlignHCenter + spacing: 16 + + Dex.DefaultText + { + Layout.alignment: Qt.AlignHCenter + text: qsTr("%1 %2 is available !").arg(Dex.API.app_name).arg(Dex.API.app.updateCheckerService.updateInfo.newVersion) + } + + Dex.DefaultText + { + visible: Dex.API.app.updateCheckerService.updateInfo.status === "required" + Layout.alignment: Qt.AlignHCenter + text: qsTr("This update is mandatory to continue using the application") + } + + footer: + [ + Item { Layout.fillWidth: true }, + Dex.DefaultButton + { + Layout.preferredWidth: 120 + text: qsTr("Download") + onClicked: { Qt.openUrlExternally(Dex.API.app.updateCheckerService.updateInfo.downloadUrl); if (Dex.API.app.updateCheckerService.updateInfo.status !== "required") close() } + }, + Dex.DefaultButton + { + Layout.preferredWidth: 120 + text: Dex.API.app.updateCheckerService.updateInfo.status === "required" ? qsTr("Close Dex") : qsTr("Close") + onClicked: Dex.API.app.updateCheckerService.updateInfo.status === "required" ? Qt.exit(0) : close() + } + ] + } + + Dex.MultipageModalContent + { + titleText: qsTr("Searching new updates") + titleAlignment: Qt.AlignHCenter + spacing: 16 + + Dex.DefaultText + { + text: qsTr("Your application is updated.") + } + + footer: + [ + Item { Layout.fillWidth: true }, + Dex.DefaultButton + { + text: qsTr("Close") + onClicked: close() + } + ] + } + + Connections + { + target: Dex.API.app.updateCheckerService + + function onUpdateInfoChanged() + { + if (Dex.API.app.updateCheckerService.updateInfo) + { + if (Dex.API.app.updateCheckerService.updateInfo.status === "recommended" || + Dex.API.app.updateCheckerService.updateInfo.status === "required" ) + { + root.open() + } + else + { + console.error(Dex.API.app.updateCheckerService.udpateInfo.status) + } + } + } + } +} diff --git a/atomic_defi_design/Dex/Portfolio/AssetsList.qml b/atomic_defi_design/Dex/Portfolio/AssetsList.qml index 3cd23b0f1..7617e18ca 100644 --- a/atomic_defi_design/Dex/Portfolio/AssetsList.qml +++ b/atomic_defi_design/Dex/Portfolio/AssetsList.qml @@ -1,4 +1,4 @@ -import QtQuick 2.12 +import QtQuick 2.15 import QtQuick.Layouts 1.12 import "../Constants" as Dex @@ -8,7 +8,7 @@ import "../Screens" import App 1.0 as Dex import Dex.Themes 1.0 as Dex -Dex.DefaultListView +Dex.DexListView { id: list interactive: false @@ -16,60 +16,81 @@ Dex.DefaultListView model: Dex.API.app.portfolio_pg.portfolio_mdl.portfolio_proxy_mdl property real _assetRowHeight: 46 - property real _assetNameColumnWidth: 160 - property real _assetNameColumnLeftMargin: 15 - property real _assetBalanceColumnWidth: 380 - property real _assetChange24hColumnWidth: 120 - property real _assetPriceColumWidth: 140 - property real _assetProviderColumnWidth: 42 - - width: _assetNameColumnWidth + _assetNameColumnLeftMargin + _assetBalanceColumnWidth + _assetChange24hColumnWidth + _assetPriceColumWidth + _assetProviderColumnWidth + property real _assetNameColumnWidth: 180 + property real _assetBalanceColumnWidth: 190 + property real _fiatBalanceColumnWidth: 180 + property real _assetChange24hColumnWidth: 160 + property real _assetPriceColumWidth: 180 + property real _assetProviderColumnWidth: 90 + + width: _assetNameColumnWidth + _assetBalanceColumnWidth + _fiatBalanceColumnWidth + _assetChange24hColumnWidth + _assetPriceColumWidth + _assetProviderColumnWidth height: (count * _assetRowHeight) + 46 + // Header - header: RowLayout + header: Item { - id: columnsHeader width: list.width height: 40 - Dex.ColumnHeader + RowLayout { - Layout.preferredWidth: _assetNameColumnWidth - _assetNameColumnLeftMargin - Layout.leftMargin: _assetNameColumnLeftMargin - icon_at_left: true - sort_type: sort_by_name - text: qsTr("Asset") - } + id: columnsHeader + anchors.fill: parent - Dex.ColumnHeader - { - Layout.preferredWidth: _assetBalanceColumnWidth - icon_at_left: true - sort_type: sort_by_value - text: qsTr("Balance") - } + Dex.ColumnHeader + { + Layout.preferredWidth: _assetNameColumnWidth + Layout.fillHeight: true + Layout.leftMargin: 15 + h_align: Text.AlignLeft + sort_type: sort_by_name + text: qsTr("Asset") + } - Dex.ColumnHeader - { - Layout.preferredWidth: _assetChange24hColumnWidth - icon_at_left: true - sort_type: sort_by_change - text: qsTr("Change 24h") - } + Dex.ColumnHeader + { + Layout.preferredWidth: _assetBalanceColumnWidth + Layout.fillHeight: true + h_align: Text.AlignRight + sort_type: sort_by_value + text: qsTr("Balance") + } - Dex.ColumnHeader - { - Layout.preferredWidth: _assetPriceColumWidth - icon_at_left: true - sort_type: sort_by_price - text: qsTr("Price") - } + Dex.ColumnHeader + { + Layout.preferredWidth: _fiatBalanceColumnWidth + Layout.fillHeight: true + h_align: Text.AlignRight + sort_type: sort_by_value + text: qsTr("Fiat Balance") + } - Dex.DexLabel - { - Layout.preferredWidth: _assetProviderColumnWidth - text: qsTr("Source") + Dex.ColumnHeader + { + Layout.preferredWidth: _assetChange24hColumnWidth + Layout.fillHeight: true + h_align: Text.AlignRight + sort_type: sort_by_change + text: qsTr("Change 24h") + } + + Dex.ColumnHeader + { + Layout.preferredWidth: _assetPriceColumWidth + Layout.fillHeight: true + h_align: Text.AlignRight + sort_type: sort_by_price + text: qsTr("Price") + } + + Dex.ColumnHeader + { + Layout.preferredWidth: _assetProviderColumnWidth + Layout.fillHeight: true + h_align: Text.AlignHCenter + text: qsTr("Source") + } } } @@ -79,37 +100,8 @@ Dex.DefaultListView width: list.width height: _assetRowHeight - color: mouseArea.containsMouse ? Dex.CurrentTheme.buttonColorHovered : _idleColor - - Dex.DefaultMouseArea - { - id: mouseArea - anchors.fill: parent - hoverEnabled: true - acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: - { - if (!can_change_ticker) - return - if (mouse.button === Qt.RightButton) - contextMenu.popup() - else - { - api_wallet_page.ticker = ticker - dashboard.switchPage(Dashboard.PageType.Wallet) - } - } - - onPressAndHold: - { - if (!can_change_ticker) - return - - if (mouse.source === Qt.MouseEventNotSynthesized) - contextMenu.popup() - } - } + color: mouseArea.containsMouse ? Dex.CurrentTheme.buttonColorHovered : _idleColor RowLayout { @@ -117,13 +109,13 @@ Dex.DefaultListView Item // Asset Column. { + Layout.fillHeight: true Layout.preferredWidth: _assetNameColumnWidth + Layout.leftMargin: 15 - Dex.DefaultImage { + Dex.DexImage { id: assetImage anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 15 source: Dex.General.coinIcon(ticker) width: 30 height: 30 @@ -134,7 +126,7 @@ Dex.DefaultListView id: assetNameLabel anchors.top: assetImage.top anchors.left: assetImage.right - anchors.leftMargin: _assetNameColumnLeftMargin + anchors.leftMargin: 15 text: model.ticker } @@ -169,18 +161,43 @@ Dex.DefaultListView Dex.DexLabel // Balance Column. { id: assetBalanceLabel + Layout.fillHeight: true Layout.preferredWidth: _assetBalanceColumnWidth + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + font: Dex.DexTypo.body2 - text_value: Dex.General.formatCrypto("", balance, ticker, main_currency_balance, - Dex.API.app.settings_pg.current_currency) + text_value: parseFloat(balance).toFixed(8) + + color: Qt.darker(Dex.DexTheme.foregroundColor, 0.8) + privacy: true + } + + Dex.DexLabel // Fiat Balance + { + id: fiatBalanceLabel + Layout.fillHeight: true + Layout.preferredWidth: _fiatBalanceColumnWidth + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + + font: Dex.DexTypo.body2 + text_value: Dex.General.formatFiat("", main_currency_balance, Dex.API.app.settings_pg.current_currency) + color: Qt.darker(Dex.DexTheme.foregroundColor, 0.8) privacy: true } Dex.DexLabel // Change 24h. { + id: assetChange24hLabel + Layout.fillHeight: true Layout.preferredWidth: _assetChange24hColumnWidth + font: Dex.DexTypo.body2 + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + text_value: { const v = parseFloat(change_24h) @@ -191,18 +208,25 @@ Dex.DefaultListView Dex.DexLabel // Price Column. { + id: price24hLabe + Layout.fillHeight: true Layout.preferredWidth: _assetPriceColumWidth + font: Dex.DexTypo.body2 + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + text_value: Dex.General.formatFiat('', main_currency_price_for_one_unit, - Dex.API.app.settings_pg.current_currency) + Dex.API.app.settings_pg.current_currency, 6) color: Dex.DexTheme.colorThemeDarkLight } Item // Price Provider { + Layout.fillHeight: true Layout.preferredWidth: _assetProviderColumnWidth - Dex.DefaultImage { + Dex.DexImage { id: priceProviderIcon enabled: priceProvider !== "unknown" visible: enabled @@ -233,5 +257,35 @@ Dex.DefaultListView Dex.CoinMenu { id: contextMenu } } + + Dex.DefaultMouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + + onClicked: + { + if (!can_change_ticker) + return + if (mouse.button === Qt.RightButton) + contextMenu.popup() + else + { + api_wallet_page.ticker = ticker + dashboard.switchPage(Dashboard.PageType.Wallet) + } + } + + onPressAndHold: + { + if (!can_change_ticker) + return + + if (mouse.source === Qt.MouseEventNotSynthesized) + contextMenu.popup() + } + } } } diff --git a/atomic_defi_design/Dex/Portfolio/Portfolio.qml b/atomic_defi_design/Dex/Portfolio/Portfolio.qml index 38b6f6a9b..f947d8457 100644 --- a/atomic_defi_design/Dex/Portfolio/Portfolio.qml +++ b/atomic_defi_design/Dex/Portfolio/Portfolio.qml @@ -122,7 +122,7 @@ Item { Layout.fillWidth: true Layout.fillHeight: true - DexLabel + DefaultText { font: DexTypo.head6 anchors.verticalCenter: parent.verticalCenter @@ -211,14 +211,13 @@ Item { // Filters (search and balance) Item { - width: parent.width + width: parent.parent.width - 80 + anchors.horizontalCenter: parent.horizontalCenter height: 30 visible: true Item { anchors.fill: parent - anchors.leftMargin: 40 - anchors.rightMargin: 40 anchors.topMargin: 5 RowLayout { @@ -226,6 +225,7 @@ Item { SearchField { + id: coinSearchField Layout.alignment: Qt.AlignVCenter Layout.preferredWidth: 206 Layout.preferredHeight: 42 @@ -240,12 +240,19 @@ Item { Layout.fillWidth: true } - DexCheckBox + DefaultCheckBox { - Layout.alignment: Qt.AlignVCenter + id: hide_zero_balance_checkbox + + spacing: 2 + boxWidth: 24 + boxHeight: 24 + + label.wrapMode: Label.NoWrap + label.font.pixelSize: 14 text: qsTr("Show only coins with balance") + " %1".arg(qsTr("(%1/%2)").arg(coinsList.count).arg(portfolio_mdl.length)) textColor: Dex.CurrentTheme.foregroundColor2 - label.font.pixelSize: 14 + checked: portfolio_coins.with_balance onCheckedChanged: portfolio_coins.with_balance = checked Component.onDestruction: portfolio_coins.with_balance = false diff --git a/atomic_defi_design/Dex/Screens/Dashboard.qml b/atomic_defi_design/Dex/Screens/Dashboard.qml index a42197895..f19241b43 100644 --- a/atomic_defi_design/Dex/Screens/Dashboard.qml +++ b/atomic_defi_design/Dex/Screens/Dashboard.qml @@ -16,12 +16,13 @@ import "../Support" import "../Sidebar" as Sidebar import "../Fiat" import "../Settings" as SettingsPage +import "../Support" as SupportPage import "../Screens" +import "../Addressbook" as Addressbook import Dex.Themes 1.0 as Dex -//import Dex.Sidebar 1.0 as Dex - -Item { +Item +{ id: dashboard enum PageType @@ -29,12 +30,11 @@ Item { Portfolio, Wallet, DEX, // DEX == Trading page - Addressbook, - Support + Addressbook } property var currentPage: Dashboard.PageType.Portfolio - property var availablePages: [portfolio, wallet, exchange, addressbook, support] + property var availablePages: [portfolio, wallet, exchange, addressbook] property alias webEngineView: webEngineView @@ -73,8 +73,6 @@ Item { console.warn("Tried to switch to page %1 when loader is not ready yet.".arg(page)) } - function resetCoinFilter() { portfolio_coins.setFilterFixedString("") } - function openTradeViewWithTicker() { dashboard.loader.onLoadComplete = () => { @@ -86,6 +84,8 @@ Item { onCurrentPageChanged: sidebar.currentLineType = currentPage + SupportPage.SupportModal { id: support_modal } + // Al settings depends this modal SettingsPage.SettingModal { id: setting_modal } @@ -145,7 +145,7 @@ Item { { id: addressbook - AddressBook {} + Addressbook.Main { } } Component @@ -158,16 +158,6 @@ Item { } } - Component - { - id: support - - Support - { - Layout.alignment: Qt.AlignCenter - } - } - WebEngineView { id: webEngineView @@ -208,6 +198,7 @@ Item { onLineSelected: currentPage = lineType; onSettingsClicked: setting_modal.open() + onSupportClicked: support_modal.open() } ModalLoader diff --git a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml index 1177f81d5..c30161277 100644 --- a/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/ImportWallet.qml @@ -19,6 +19,8 @@ SetupPage signal backClicked() signal postConfirmSuccess(string walletName) + image_scale: 0.7 + function reset() { text_error = ""; @@ -38,14 +40,13 @@ SetupPage } } - image_scale: 0.7 - - content: DexRectangle + content: DefaultRectangle { color: Dex.CurrentTheme.floatingBackgroundColor width: column_layout.width + 50 height: column_layout.height + 60 radius: 18 + function reset() { recover_seed.reset(); @@ -85,14 +86,14 @@ SetupPage ColumnLayout { id: column_layout - anchors.centerIn: parent - spacing: Style.rowSpacing + RowLayout { Layout.fillWidth: true spacing: 10 + SquareButton { icon.source: Qaterial.Icons.chevronLeft @@ -125,8 +126,6 @@ SetupPage } - - ModalLoader { id: eula_modal @@ -139,6 +138,7 @@ SetupPage } } } + ColumnLayout { visible: currentStep === 0 @@ -158,6 +158,8 @@ SetupPage field.placeholderText: qsTr("Wallet Name") field.onAccepted: tryPassLevel1() field.onTextChanged: text_error = General.validateWallet(input_wallet_name.field.text) + field.forceFocus: true + DefaultRectangle { x: 5 @@ -197,7 +199,7 @@ SetupPage } } - DexLabel + DefaultText { id: _seedError visible: _seedField.error @@ -210,8 +212,16 @@ SetupPage DefaultCheckBox { id: allow_custom_seed + Layout.fillWidth: true + + boxWidth: 20 + boxHeight: 20 + leftPadding: 6 + labelWidth: 120 + label.wrapMode: Label.NoWrap + text: qsTr("Allow custom seed") - leftPadding: 15 + onToggled: { if (allow_custom_seed.checked) @@ -222,6 +232,7 @@ SetupPage closePolicy: Popup.NoAutoClose, text: qsTr("Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).

To confirm you understand the risk and know what you are doing, type 'I understand' in the box below."), placeholderText: qsTr("I understand"), + forceFocus: true, standardButtons: Dialog.Yes | Dialog.Cancel, validator: (text) => { @@ -290,6 +301,7 @@ SetupPage Layout.preferredWidth: 460 Layout.rightMargin: 5 spacing: Style.rowSpacing + DexAppPasswordField { id: _inputPassword @@ -332,7 +344,6 @@ SetupPage Layout.preferredHeight: 10 } - DexGradientAppButton { id: submit_button diff --git a/atomic_defi_design/Dex/Screens/Startup/Login.qml b/atomic_defi_design/Dex/Screens/Startup/Login.qml index 98870b947..1f716a1c7 100644 --- a/atomic_defi_design/Dex/Screens/Startup/Login.qml +++ b/atomic_defi_design/Dex/Screens/Startup/Login.qml @@ -15,17 +15,15 @@ SetupPage property string text_error property string walletName - property bool _isPasswordWrong: false + image_scale: 1 + image_path: Dex.CurrentTheme.bigLogoPath + backgroundColor: 'transparent' + signal backClicked() signal loginSucceeded() - function reset() - { - text_error = "" - } - function onClickedLogin(password) { if (API.app.wallet_mgr.login(password, walletName)) @@ -38,20 +36,13 @@ SetupPage else { console.info("Failed: Login"); - _isPasswordWrong = true; return false; } } - - image_scale: 1 - backgroundColor: 'transparent' - image_path: Dex.CurrentTheme.bigLogoPath - content: ColumnLayout { id: content - spacing: 10 DexLabel @@ -77,16 +68,23 @@ SetupPage width: 300 background.color: Dex.CurrentTheme.floatingBackgroundColor forceFocus: true + field.onTextChanged: { _isPasswordWrong = false } field.onAccepted: { if (_keyChecker.isValid()) { - onClickedLogin(field.text) + if (!onClickedLogin(field.text)) + { + _inputPassword.error = true; + _isPasswordWrong = true; + } + return true } else { - _inputPassword.error = true - _keyChecker.visible = true + _inputPassword.error = true; + _isPasswordWrong = true; + return false; } } @@ -94,34 +92,20 @@ SetupPage hideFieldButton.icon.color: Dex.CurrentTheme.foregroundColor } - DexKeyChecker - { - id: _passwordChecker - visible: false - field: _inputPassword.field - } - - DefaultText + DexLabel { Layout.alignment: Qt.AlignHCenter - visible: _isPasswordWrong - text: qsTr("Incorrect Password") + height: 14 + text: _isPasswordWrong ? qsTr("Incorrect Password") : "" color: Dex.CurrentTheme.noColor } - Item - { - height: 1 - width: 1 - } - GradientButton { Layout.alignment: Qt.AlignHCenter radius: width width: 200 text: qsTr("Log In") - enabled: _passwordChecker.isValid() onClicked: _inputPassword.field.accepted() } diff --git a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml index 53ec7078c..dbc85f892 100644 --- a/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml +++ b/atomic_defi_design/Dex/Screens/Startup/NewWallet.qml @@ -309,6 +309,7 @@ SetupPage field.leftPadding: 75 field.placeholderText: "Wallet Name" field.onTextChanged: text_error = General.validateWallet(input_wallet_name.field.text) + field.forceFocus: true DexRectangle { diff --git a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml index 36de794ad..2663b405c 100644 --- a/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml +++ b/atomic_defi_design/Dex/Screens/Startup/WalletsView.qml @@ -87,6 +87,7 @@ SetupPage Layout.fillWidth: true Layout.preferredHeight: 40 placeholderText: qsTr("Search your wallets...") + forceFocus: true onTextChanged: { wallets = API.app.wallet_mgr.get_wallets(text) @@ -186,12 +187,12 @@ SetupPage width: 30 height: width radius: 18 - color: mouse_area.containsMouse ? Dex.CurrentTheme.floatingBackgroundColor : 'transparent' + color: Dex.CurrentTheme.floatingBackgroundColor Qaterial.ColorIcon { anchors.fill: parent - color: Dex.CurrentTheme.loginWalletIconColorStart + color: Dex.CurrentTheme.userIconColorStart source: Qaterial.Icons.account iconSize: 28 } @@ -251,7 +252,7 @@ SetupPage if (API.app.wallet_mgr.confirm_password(wallet_name, text)) { API.app.wallet_mgr.delete_wallet(wallet_name); - app.showText( + app.showDialog( { title: qsTr("Wallet status"), text: "%1 ".arg(wallet_name) + qsTr("wallet deleted successfully"), @@ -262,7 +263,7 @@ SetupPage } else { - app.showText( + app.showDialog( { title: qsTr("Wallet status"), text: "%1 ".arg(wallet_name) + qsTr("wallet password is incorrect"), diff --git a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml index 53016cd6d..da91a1695 100644 --- a/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml +++ b/atomic_defi_design/Dex/Settings/AddCustomCoinModal.qml @@ -4,25 +4,28 @@ import QtQuick.Controls 2.15 import QtQuick.Dialogs 1.3 import AtomicDEX.CoinType 1.0 - import "../Components" import "../Constants" import App 1.0 +import Dex.Themes 1.0 as Dex -MultipageModal { +MultipageModal +{ id: root width: 700 - onClosed: { - // reset all + onClosed: + { currentIndex = 0 reset() } property var config_fields: ({}) - readonly property bool fetching_custom_token_data_busy: API.app.settings_pg.fetching_custom_token_data_busy + property var typeList: ["ERC-20", "QRC-20","BEP-20"] readonly property var custom_token_data: API.app.settings_pg.custom_token_data + readonly property string general_message: qsTr('Get the contract address from') + readonly property bool fetching_custom_token_data_busy: API.app.settings_pg.fetching_custom_token_data_busy function fetchAssetData() { const fields = General.clone(config_fields) @@ -62,7 +65,7 @@ MultipageModal { addToConfig(input_ticker, "ticker", input_ticker.field.text.toUpperCase()) addToConfig(input_logo, "image_path", input_logo.path.replace(General.os_file_prefix, "")) addToConfig(input_name, "name", input_name.field.text) - addToConfig(input_contract_address, "contract_address", input_contract_address.field.text) + addToConfig(input_contract_address, "contract_address", input_contract_address.text) addToConfig(input_active, "active", input_active.checked) addToConfig(input_coingecko_id, "coingecko_id", input_coingecko_id.field.text) fields['coinType'] = currentType.coinType @@ -74,17 +77,17 @@ MultipageModal { input_ticker.field.text = "" input_logo.path = "" input_name.field.text = "" - input_contract_address.field.text = "" + input_contract_address.text = "" input_active.checked = false input_coingecko_id.field.text = "test-coin" } - property var typeList: ["ERC-20", "QRC-20","BEP-20"] - readonly property string general_message: qsTr('Get the contract address from') - ListModel { + ListModel + { id: type_model - dynamicRoles: true - ListElement { + + ListElement + { text: "ERC-20" prefix: "" image: "erc" @@ -92,7 +95,9 @@ MultipageModal { name: 'Etherscan' coinType: CoinType.ERC20 } - ListElement { + + ListElement + { text: "QRC-20" prefix: "0x" image: "qrc" @@ -100,7 +105,9 @@ MultipageModal { name: 'QTUM Insight' coinType: CoinType.QRC20 } - ListElement { + + ListElement + { text: "BEP-20" prefix: "" url: "https://bscscan.com/tokens" @@ -114,30 +121,50 @@ MultipageModal { property var currentType: type_model.get(input_type.currentIndex) // Type page - MultipageModalContent { + MultipageModalContent + { titleText: qsTr("Choose the asset type") + height: 450 - ComboBoxWithTitle { + DefaultComboBox + { id: input_type Layout.fillWidth: true - title: qsTr("Type") + Layout.preferredHeight: 50 textRole: "text" - model: type_model//, "UTXO", "Smart Chain"] + valueRole: "text" + model: type_model currentIndex: 0 + comboBoxBackgroundColor: Dex.CurrentTheme.comboBoxBackgroundColor + mainBackgroundColor: Dex.CurrentTheme.innerBackgroundColor + popupBackgroundColor: Dex.CurrentTheme.innerBackgroundColor + highlightedBackgroundColor: Dex.CurrentTheme.comboBoxDropdownItemHighlightedColor } + Item { Layout.preferredHeight: 50 } + // Buttons - footer: [ - DefaultButton { + footer: + [ + DefaultButton + { text: qsTr("Cancel") - Layout.fillWidth: true + Layout.preferredWidth: 220 + Layout.preferredHeight: 50 + radius: 18 onClicked: root.previousPage() }, - PrimaryButton { + Item { Layout.fillWidth: true }, + + DefaultButton + { text: qsTr("Next") - Layout.fillWidth: true - onClicked: { + Layout.preferredWidth: 220 + Layout.preferredHeight: 50 + radius: 18 + onClicked: + { root.reset() root.nextPage() } @@ -146,10 +173,12 @@ MultipageModal { } // Ticker page - MultipageModalContent { - titleText: has_contract_address ? qsTr("Enter the contract address") : qsTr("Choose the asset ticker") + MultipageModalContent + { + titleText: has_contract_address ? qsTr("Contract address") : qsTr("Choose the asset ticker") - TextFieldWithTitle { + TextFieldWithTitle + { id: input_ticker enabled: !has_contract_address visible: enabled @@ -158,26 +187,31 @@ MultipageModal { field.placeholderText: qsTr("Enter the ticker") } - AddressFieldWithTitle { + AddressField + { id: input_contract_address enabled: has_contract_address visible: enabled Layout.fillWidth: true - title: qsTr("Contract Address") - field.placeholderText: qsTr("Enter the contract address") - field.left_text: currentType.prefix + placeholderText: qsTr("Enter the contract address") + left_text: currentType.prefix } - DefaultText { + DefaultText + { visible: input_contract_address.visible Layout.fillWidth: true text_value: General.cex_icon + (' ' + qsTr('Get the contract address from ') +currentType.name+ '') } - - InnerBackground { + InnerBackground + { Layout.alignment: Qt.AlignHCenter - content: DefaultAnimatedImage { + Layout.fillWidth: true + color: 'transparent' + + content: DefaultAnimatedImage + { visible: input_contract_address.visible playing: root.visible && visible source: General.image_path + "guide_contract_address_" + currentType.image + ".gif" @@ -185,58 +219,65 @@ MultipageModal { } // Buttons - footer: [ - DefaultButton { + footer: + [ + DefaultButton + { text: qsTr("Previous") - Layout.fillWidth: true + Layout.preferredWidth: 220 + radius: 18 onClicked: root.previousPage() }, - PrimaryButton { + Item { Layout.fillWidth: true }, + + DefaultButton + { text: qsTr("Next") - Layout.fillWidth: true + Layout.preferredWidth: 220 + radius: 18 enabled: (!input_ticker.enabled || input_ticker.field.text !== "") && - (!input_contract_address.enabled || input_contract_address.field.text !== "") + (!input_contract_address.enabled || input_contract_address.text !== "") onClicked: root.nextPage() } ] } // Logo page - MultipageModalContent { + MultipageModalContent + { titleText: qsTr("Choose the asset logo") - DefaultButton { + DefaultButton + { Layout.fillWidth: true text: qsTr("Browse") + "..." onClicked: input_logo.open() } - FileDialog { + FileDialog + { id: input_logo property string path - onFileUrlChanged: path = input_logo.fileUrl.toString() - readonly property bool enabled: true // Config preparation function searches for this title: qsTr("Please choose the asset logo") folder: shortcuts.pictures selectMultiple: false - onAccepted: { - console.log("Image chosen: " + input_logo.path) - } - onRejected: { - console.log("Image choice canceled") - } - - nameFilters: ["Image files (*.png)"]//["Image files (*.jpg *.png)"] + nameFilters: ["Image files (*.png)"] + onFileUrlChanged: path = input_logo.fileUrl.toString() } - InnerBackground { + InnerBackground + { + Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter - content: DefaultImage { + color: 'transparent' + + content: DefaultImage + { width: 300 height: width source: input_logo.path @@ -244,16 +285,21 @@ MultipageModal { } // Buttons - footer: [ - DefaultButton { + footer: + [ + DefaultButton + { text: qsTr("Previous") - Layout.fillWidth: true + Layout.preferredWidth: 220 onClicked: root.previousPage() }, - PrimaryButton { + Item { Layout.fillWidth: true }, + + PrimaryButton + { text: qsTr("Next") - Layout.fillWidth: true + Layout.preferredWidth: 220 enabled: input_logo.path !== "" onClicked: root.nextPage() } @@ -261,16 +307,19 @@ MultipageModal { } // Configuration - MultipageModalContent { + MultipageModalContent + { titleText: qsTr("Configuration") - DefaultText { + DefaultText + { visible: has_contract_address Layout.fillWidth: true text_value: qsTr("All configuration fields will be fetched using the contract address you provided.") } - TextFieldWithTitle { + TextFieldWithTitle + { id: input_name enabled: !has_contract_address visible: enabled @@ -279,22 +328,29 @@ MultipageModal { field.placeholderText: qsTr("Enter the name") } - TextFieldWithTitle { + TextFieldWithTitle + { id: input_coingecko_id Layout.fillWidth: true title: qsTr("Coingecko ID") field.placeholderText: qsTr("Enter the Coingecko ID") } - DefaultText { + DefaultText + { visible: input_coingecko_id.visible Layout.fillWidth: true text_value: General.cex_icon + ' ' + qsTr('Get the Coingecko ID') + '' } - InnerBackground { + InnerBackground + { + Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter - content: DefaultAnimatedImage { + color: 'transparent' + + content: DefaultAnimatedImage + { id: guide_coingecko_id visible: input_coingecko_id.visible playing: root.visible && visible @@ -302,27 +358,33 @@ MultipageModal { } } - DefaultCheckBox { + DefaultCheckBox + { id: input_active enabled: !has_contract_address visible: enabled text: qsTr("Active") } - DefaultBusyIndicator { + DefaultBusyIndicator + { visible: root.fetching_custom_token_data_busy Layout.alignment: Qt.AlignCenter } - // Buttons - footer: [ - DefaultButton { + footer: + [ + DefaultButton + { text: qsTr("Previous") - Layout.fillWidth: true + Layout.preferredWidth: 220 onClicked: root.previousPage() }, - PrimaryButton { + Item { Layout.fillWidth: true }, + + DefaultButton + { text: qsTr("Preview") Layout.fillWidth: true enabled: !root.fetching_custom_token_data_busy && @@ -413,13 +475,15 @@ MultipageModal { footer: [ DefaultButton { text: qsTr("Previous") - Layout.fillWidth: true + Layout.preferredWidth: 220 onClicked: root.previousPage() }, + Item { Layout.fillWidth: true }, + PrimaryButton { text: qsTr("Submit & Restart") - Layout.fillWidth: true + Layout.preferredWidth: 220 enabled: !error_text.visible onClicked: { API.app.settings_pg.submit() diff --git a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml index 52900bb6f..e0f83cd7a 100644 --- a/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml +++ b/atomic_defi_design/Dex/Settings/CamouflagePasswordModal.qml @@ -6,19 +6,20 @@ import "../Components" import "../Constants" import App 1.0 -MultipageModal { +MultipageModal +{ id: root width: 800 - onClosed: { - input_password_suffix.reset() - } + onClosed: input_password_suffix.reset() - MultipageModalContent { + MultipageModalContent + { titleText: qsTr("Setup Camouflage Password") - FloatingBackground { + FloatingBackground + { id: warning_bg Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 10 @@ -26,22 +27,25 @@ MultipageModal { width: parent.width - 5 height: warning_texts.height + 20 - Column { + Column + { id: warning_texts anchors.centerIn: parent width: parent.width spacing: 10 - DefaultText { + DefaultText + { width: parent.width - 40 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter text_value: qsTr("Camouflage Password is a secret password for emergency situations.") - font: DexTypo.head6 + font: DexTypo.subtitle2 } - DefaultText { + DefaultText + { width: parent.width - 40 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter @@ -49,7 +53,8 @@ MultipageModal { text_value: qsTr("Using it to login will display your balance lower than it actually is.") } - DefaultText { + DefaultText + { width: parent.width - 40 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter @@ -59,7 +64,8 @@ MultipageModal { } } - PasswordForm { + PasswordForm + { id: input_password_suffix Layout.fillWidth: true field_title: qsTr("Password suffix") @@ -70,24 +76,26 @@ MultipageModal { } // Buttons - footer: [ - DexAppButton { + footer: + [ + DexAppButton + { text: qsTr("Cancel") leftPadding: 40 rightPadding: 40 radius: 20 onClicked: root.close() }, - Item { - Layout.fillWidth: true - }, - DexAppOutlineButton { + Item { Layout.fillWidth: true }, + DexAppOutlineButton + { text: qsTr("Save") leftPadding: 40 rightPadding: 40 radius: 20 enabled: input_password_suffix.isValid() - onClicked: { + onClicked: + { API.app.wallet_mgr.set_emergency_password(input_password_suffix.field.text) root.close() } diff --git a/atomic_defi_design/Dex/Settings/Combo_fiat.qml b/atomic_defi_design/Dex/Settings/Combo_fiat.qml index 8154bfc7c..0842bb41e 100644 --- a/atomic_defi_design/Dex/Settings/Combo_fiat.qml +++ b/atomic_defi_design/Dex/Settings/Combo_fiat.qml @@ -13,67 +13,130 @@ import Qaterial 1.0 as Qaterial import "../Components" import "../Constants" import App 1.0 +Item +{ + anchors.margins: 10 + + Column + { + anchors.fill: parent + topPadding: 10 + spacing: 15 + + RowLayout + { + width: parent.width - 30 + anchors.horizontalCenter: parent.horizontalCenter + height: 50 + spacing: 10 + + DexLabel + { + Layout.alignment: Qt.AlignVCenter + font: DexTypo.subtitle1 + text: qsTr("Language") + ":" + } + + Item { Layout.fillWidth: true } + Languages + { + Layout.alignment: Qt.AlignVCenter + } + } -ComboBoxWithTitle { - id: combo_fiat - title: qsTr("Fiat") - width: parent.width-30 - anchors.horizontalCenter: parent.horizontalCenter + RowLayout + { + Layout.topMargin: 10 + width: parent.width - 30 + anchors.horizontalCenter: parent.horizontalCenter + height: 50 + + DexLabel + { + Layout.alignment: Qt.AlignVCenter + Layout.fillWidth: true + font: DexTypo.subtitle1 + text: qsTr("Fiat") + } - model: fiats + Item { Layout.fillWidth: true } + + DexComboBox + { + id: combo_fiat + width: 100 + height: 30 + model: fiats + property bool initialized: false + + onCurrentIndexChanged: + { + if(initialized) + { + const new_fiat = fiats[currentIndex] + API.app.settings_pg.current_fiat = new_fiat + API.app.settings_pg.current_currency = new_fiat + } + } - property bool initialized: false - onCurrentIndexChanged: { - if(initialized) { - const new_fiat = fiats[currentIndex] - API.app.settings_pg.current_fiat = new_fiat - API.app.settings_pg.current_currency = new_fiat + Component.onCompleted: + { + currentIndex = model.indexOf(API.app.settings_pg.current_fiat) + initialized = true + } + } } - } - Component.onCompleted: { - currentIndex = model.indexOf(API.app.settings_pg.current_fiat) - initialized = true - } - RowLayout { - Layout.topMargin: 5 - Layout.fillWidth: true - Layout.leftMargin: 2 - Layout.rightMargin: Layout.leftMargin + RowLayout + { + Layout.topMargin: 10 + width: parent.width - 30 + anchors.horizontalCenter: parent.horizontalCenter + height: 50 + + DexText + { + text: qsTr("Recommended: ") + font.pixelSize: Style.textSizeSmall4 + } - DefaultText { - text: qsTr("Recommended: ") - font.pixelSize: Style.textSizeSmall4 - } + Item { Layout.fillWidth: true } + + Grid + { + Layout.leftMargin: 30 + Layout.alignment: Qt.AlignVCenter - Grid { - Layout.leftMargin: 30 - Layout.alignment: Qt.AlignVCenter + clip: true - clip: true + columns: 6 + spacing: 25 - columns: 6 - spacing: 25 + layoutDirection: Qt.LeftToRight - layoutDirection: Qt.LeftToRight + Repeater + { + model: recommended_fiats - Repeater { - model: recommended_fiats + delegate: DexText + { + text: modelData + color: DexTheme.foregroundColor + opacity: fiats_mouse_area.containsMouse ? .7 : 1 - delegate: DefaultText { - text: modelData - color: DexTheme.foregroundColor - opacity: fiats_mouse_area.containsMouse ? .7 : 1 + DexMouseArea + { + id: fiats_mouse_area + anchors.fill: parent + hoverEnabled: true - DefaultMouseArea { - id: fiats_mouse_area - anchors.fill: parent - hoverEnabled: true - onClicked: { - API.app.settings_pg.current_fiat = modelData - API.app.settings_pg.current_currency = modelData - combo_fiat.currentIndex = combo_fiat.model.indexOf(API.app.settings_pg.current_fiat) + onClicked: + { + API.app.settings_pg.current_fiat = modelData + API.app.settings_pg.current_currency = modelData + combo_fiat.currentIndex = combo_fiat.model.indexOf(API.app.settings_pg.current_fiat) + } } } } @@ -81,3 +144,4 @@ ComboBoxWithTitle { } } } + diff --git a/atomic_defi_design/Dex/Settings/Languages.qml b/atomic_defi_design/Dex/Settings/Languages.qml index eba03ea09..99ccfac6e 100644 --- a/atomic_defi_design/Dex/Settings/Languages.qml +++ b/atomic_defi_design/Dex/Settings/Languages.qml @@ -7,55 +7,48 @@ import "../Components" import "../Constants" import App 1.0 -ColumnLayout { - property alias show_label: label.visible - RowLayout { - Layout.alignment: Qt.AlignVCenter - spacing: 5 - DexLabel { - id: label - visible: false - Layout.alignment: Qt.AlignVCenter - font: DexTypo.subtitle1 - text_value: qsTr("Language") + ":" - } - - Grid { - Layout.alignment: Qt.AlignVCenter - Layout.fillWidth: true - - clip: true - - columns: 8 - spacing: 10 - - Repeater { - model: API.app.settings_pg.get_available_langs() - delegate: ClipRRect { - width: 30 // Current icons have too much space around them - height: 30 - radius: 15 - //color: API.app.settings_pg.lang === model.modelData ? Style.colorTheme11 : mouse_area.containsMouse ? Style.colorTheme4 : Style.applyOpacity(Style.colorTheme4) - - DefaultImage { - id: image - anchors.centerIn: parent - source: General.image_path + "lang/" + model.modelData + ".png" - width: 40 - height: 40 - opacity: model.modelData === API.app.settings_pg.lang ? 1 : mouse_area.containsMouse ? 0.85 : 0.7 - // Click area - DefaultMouseArea { - id: mouse_area - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - hoverEnabled: true - onClicked: { - API.app.settings_pg.lang = model.modelData; - console.info("Switched language to %1".arg(API.app.settings_pg.lang)); - } - } +Grid +{ + Layout.alignment: Qt.AlignVCenter + + clip: true + + columns: 8 + spacing: 10 + + Repeater + { + model: API.app.settings_pg.get_available_langs() + + delegate: ClipRRect + { + width: 30 // Current icons have too much space around them + height: 30 + radius: 15 + //color: API.app.settings_pg.lang === model.modelData ? Style.colorTheme11 : mouse_area.containsMouse ? Style.colorTheme4 : Style.applyOpacity(Style.colorTheme4) + + DexImage + { + id: image + anchors.centerIn: parent + source: General.image_path + "lang/" + model.modelData + ".png" + width: 40 + height: 40 + opacity: model.modelData === API.app.settings_pg.lang ? 1 : mouse_area.containsMouse ? 0.85 : 0.7 + + // Click area + DexMouseArea + { + id: mouse_area + anchors.fill: parent + acceptedButtons: Qt.LeftButton | Qt.RightButton + hoverEnabled: true + + onClicked: + { + API.app.settings_pg.lang = model.modelData; + console.info("Switched language to %1".arg(API.app.settings_pg.lang)); } } } diff --git a/atomic_defi_design/Dex/Settings/SettingModal.qml b/atomic_defi_design/Dex/Settings/SettingModal.qml index 13e95cd3f..dad8a8ce2 100644 --- a/atomic_defi_design/Dex/Settings/SettingModal.qml +++ b/atomic_defi_design/Dex/Settings/SettingModal.qml @@ -1,4 +1,3 @@ -//! Qt Imports import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 @@ -8,25 +7,37 @@ import QtQml 2.12 import QtQuick.Window 2.12 import QtQuick.Controls.Universal 2.12 -//! 3rdParty Imports import Qaterial 1.0 as Qaterial -//! Project Imports import "../Components" import "../Constants" -as Constants import App 1.0 - import Dex.Themes 1.0 as Dex - +import Dex.Components 1.0 as Dex Qaterial.Dialog { + id: setting_modal property alias selectedMenuIndex: menu_list.currentIndex + readonly property string mm2_version: API.app.settings_pg.get_mm2_version() + property var recommended_fiats: API.app.settings_pg.get_recommended_fiats() + property var fiats: API.app.settings_pg.get_available_fiats() + property var enableable_coins_count: enableable_coins_count_combo_box.currentValue + + width: 950 + height: 650 + padding: 20 + topPadding: 30 + bottomPadding: 30 + anchors.centerIn: parent + + dim: true + modal: true + title: "Settings" function disconnect() { - let dialog = app.showText( + let dialog = app.showDialog( { "title": qsTr("Confirm Logout"), text: qsTr("Are you sure you want to log out?"), @@ -48,24 +59,10 @@ Qaterial.Dialog } - readonly property string mm2_version: API.app.settings_pg.get_mm2_version() - property - var recommended_fiats: API.app.settings_pg.get_recommended_fiats() - property - var fiats: API.app.settings_pg.get_available_fiats() - property - var enableable_coins_count: enableable_coins_count_combo_box.currentValue - - id: setting_modal - width: 950 - height: 650 - anchors.centerIn: parent - dim: true - modal: true - title: "Settings" header: Item {} + Overlay.modal: Item { Rectangle @@ -75,19 +72,19 @@ Qaterial.Dialog opacity: .7 } } + background: DexRectangle { color: DexTheme.backgroundColor border.width: 0 radius: 16 } - padding: 20 - topPadding: 30 - bottomPadding: 30 + Item { width: parent.width height: 60 + DexIconButton { anchors.right: parent.right @@ -97,15 +94,18 @@ Qaterial.Dialog anchors.verticalCenter: parent.verticalCenter onClicked: setting_modal.close() } + Row { anchors.verticalCenter: parent.verticalCenter leftPadding: 60 + DexLabel { id: settingLabel anchors.verticalCenter: parent.verticalCenter text: qsTr("Settings") + font: Qt.font( { pixelSize: 20, @@ -122,18 +122,22 @@ Qaterial.Dialog visible: false } } + Item { width: parent.width height: parent.height - 110 y: 60 + RowLayout { anchors.fill: parent + Item { Layout.fillHeight: true Layout.preferredWidth: 280 + ListView { id: menu_list @@ -144,20 +148,24 @@ Qaterial.Dialog spacing: 5 currentIndex: 0 model: [qsTr("General"), qsTr("Language"), qsTr("User Interface"), qsTr("Security"), qsTr("About & Version")] + delegate: DexRectangle { width: parent.width height: 60 radius: 22 border.width: 0 + gradient: Gradient { orientation: Qt.Horizontal + GradientStop { position: 0.0 color: delegateMouseArea.containsMouse ? DexTheme.buttonColorEnabled : menu_list.currentIndex === index ? DexTheme.buttonColorHovered : 'transparent' } + GradientStop { position: 1 @@ -190,34 +198,41 @@ Qaterial.Dialog } } } - Rectangle + + DexRectangle { Layout.fillHeight: true width: 1 color: DexTheme.foregroundColor opacity: .10 } + Item { Layout.fillHeight: true Layout.fillWidth: true + StackLayout { anchors.fill: parent currentIndex: menu_list.currentIndex + Item { anchors.margins: 10 + Column { anchors.fill: parent topPadding: 10 spacing: 15 + RowLayout { width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter - height: 30 + height: 50 + DexLabel { Layout.alignment: Qt.AlignVCenter @@ -225,34 +240,46 @@ Qaterial.Dialog font: DexTypo.subtitle1 text: qsTr("Enable Desktop Notifications") } - DefaultSwitch + + Item { Layout.fillWidth: true } + + DexSwitch { Layout.alignment: Qt.AlignVCenter Component.onCompleted: checked = API.app.settings_pg.notification_enabled onCheckedChanged: API.app.settings_pg.notification_enabled = checked } } + RowLayout { width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter height: 50 + DexLabel { Layout.alignment: Qt.AlignVCenter - Layout.fillWidth: true font: DexTypo.subtitle1 text: qsTr("Maximum number of enabled coins") } - DefaultComboBox + + Item { Layout.fillWidth: true } + + DexComboBox { id: enableable_coins_count_combo_box - Layout.preferredWidth: 62 - Layout.preferredHeight: 35 - radius: 18 + Layout.alignment: Qt.AlignVCenter + width: 140 + height: 45 + dropDownMaxHeight: 600 model: [10, 20, 50, 75, 100, 150, 200] currentIndex: model.indexOf(parseInt(atomic_settings2.value("MaximumNbCoinsEnabled"))) onCurrentIndexChanged: atomic_settings2.setValue("MaximumNbCoinsEnabled", model[currentIndex]) + Component.onCompleted: + { + currentIndex: model.indexOf(parseInt(atomic_settings2.value("MaximumNbCoinsEnabled"))) + } } } @@ -272,9 +299,10 @@ Qaterial.Dialog height: 50 title: qsTr("Reset wallet configuration") buttonText: qsTr("Reset") + onClicked: { - dialog = app.showText( + dialog = app.showDialog( { title: qsTr("Reset wallet configuration"), text: qsTr("This will restart your wallet with default settings"), @@ -295,115 +323,97 @@ Qaterial.Dialog } } } - Item - { - Column - { - anchors.fill: parent - topPadding: 10 - spacing: 15 - RowLayout - { - width: parent.width - 30 - anchors.horizontalCenter: parent.horizontalCenter - height: 30 - spacing: 10 - DexLabel - { - Layout.alignment: Qt.AlignVCenter - font: DexTypo.subtitle1 - text: qsTr("Language") + ":" - } - Languages - { - Layout.alignment: Qt.AlignVCenter - } - } - Combo_fiat - { - id: combo_fiat - } - } + Combo_fiat + { + anchors.margins: 10 } Item { + anchors.margins: 10 + Column { anchors.fill: parent topPadding: 10 spacing: 15 + RowLayout { width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter - height: 30 - DexLabel + height: 50 + + Dex.Text { Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true font: DexTypo.subtitle1 text: qsTr("Current Font") } - } - DexComboBox - { - editable: true - width: parent.width - 200 - model: ["Ubuntu", "Montserrat", "Roboto"] - onCurrentTextChanged: - { - DexTypo.fontFamily = currentText - console.info(qsTr("Current font changed to %1.").arg(currentText)) - } + Item { Layout.fillWidth: true } - Component.onCompleted: + Dex.ComboBox { - let current = DexTypo.fontFamily - currentIndex = model.indexOf(current) + Layout.alignment: Qt.AlignVCenter + editable: true + model: ["Ubuntu", "Montserrat", "Roboto"] + + onCurrentTextChanged: + { + DexTypo.fontFamily = currentText + console.info(qsTr("Current font changed to %1.").arg(currentText)) + } + + Component.onCompleted: + { + let current = DexTypo.fontFamily + currentIndex = model.indexOf(current) + } } } RowLayout { + Layout.topMargin: 20 width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter - height: 30 + height: 50 - DexLabel + Dex.Text { Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true font: DexTypo.subtitle1 text: qsTr("Theme") } - } - - DexComboBox - { - width: parent.width - 200 - - model: API.qt_utilities.get_themes_list() - currentIndex: model.indexOf(atomic_settings2.value("CurrentTheme")) + Item { Layout.fillWidth: true } - onActivated: + Dex.ComboBox { - let chosenTheme = model[index]; + Layout.alignment: Qt.AlignVCenter + model: API.qt_utilities.get_themes_list() + currentIndex: model.indexOf(atomic_settings2.value("CurrentTheme")) - console.info(qsTr("Changing theme to %1").arg(chosenTheme)); - atomic_settings2.setValue("CurrentTheme", chosenTheme); - atomic_settings2.sync(); - Dex.CurrentTheme.loadFromFilesystem(chosenTheme); - } + onActivated: + { + let chosenTheme = model[index]; - Component.onCompleted: - { - let current = atomic_settings2.value("CurrentTheme") - currentIndex = model.indexOf(current) + console.info(qsTr("Changing theme to %1").arg(chosenTheme)); + atomic_settings2.setValue("CurrentTheme", chosenTheme); + atomic_settings2.sync(); + Dex.CurrentTheme.loadFromFilesystem(chosenTheme); + } + + Component.onCompleted: + { + let current = atomic_settings2.value("CurrentTheme") + currentIndex = model.indexOf(current) + } } } } @@ -447,6 +457,7 @@ Qaterial.Dialog width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter height: 60 + DexLabel { Layout.fillWidth: true @@ -454,16 +465,67 @@ Qaterial.Dialog font: DexTypo.subtitle1 text: qsTr("Ask system's password before sending coins ? (2FA)") } - DexSwitch + + DefaultSwitch { checked: parseInt(atomic_settings2.value("2FA")) === 1 onCheckedChanged: { - if (checked) + if (checked) { atomic_settings2.setValue("2FA", 1) - else - atomic_settings2.setValue("2FA", 0) - atomic_settings2.sync() + atomic_settings2.sync() + } + else { + var wallet_name = API.app.wallet_mgr.wallet_default_name + let dialog = app.getText( + { + "title": qsTr("Disable 2FA?"), + text: qsTr("Enter your wallet password to confirm"), + standardButtons: Dialog.Yes | Dialog.Cancel, + closePolicy: Popup.NoAutoClose, + warning: true, + iconColor: Dex.CurrentTheme.noColor, + isPassword: true, + placeholderText: qsTr("Type password"), + yesButtonText: qsTr("Confirm"), + cancelButtonText: qsTr("Cancel"), + onRejected: function() + { + checked = true + }, + onAccepted: function(text) + { + if (API.app.wallet_mgr.confirm_password(wallet_name, text)) + { + app.showDialog( + { + title: qsTr("2FA status"), + text: qsTr("2FA disabled successfully"), + yesButtonText: qsTr("Ok"), + titleBold: true, + standardButtons: Dialog.Ok + }) + atomic_settings2.setValue("2FA", 0) + atomic_settings2.sync() + } + else + { + app.showDialog( + { + title: qsTr("Wrong password!"), + text: "%1 ".arg(wallet_name) + qsTr("Wallet password is incorrect"), + warning: true, + standardButtons: Dialog.Ok, + titleBold: true, + yesButtonText: qsTr("Ok"), + }) + checked = true + } + dialog.close() + dialog.destroy() + } + }); + } } } } @@ -496,6 +558,7 @@ Qaterial.Dialog anchors.fill: parent topPadding: 10 spacing: 15 + ModalLoader { id: delete_wallet_modal @@ -517,6 +580,7 @@ Qaterial.Dialog width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter height: 60 + DexLabel { Layout.alignment: Qt.AlignVCenter @@ -531,17 +595,20 @@ Qaterial.Dialog onCopyNotificationMsg: qsTr("copied to clipboard") } } + RowLayout { width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter height: 60 + DexLabel { Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true text: qsTr("MM2 version") } + DexCopyableLabel { Layout.alignment: Qt.AlignVCenter @@ -550,17 +617,20 @@ Qaterial.Dialog onCopyNotificationMsg: qsTr("MM2 Version copied to clipboard.") } } + RowLayout { width: parent.width - 30 anchors.horizontalCenter: parent.horizontalCenter height: 60 + DexLabel { Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true text: qsTr("Qt version") } + DexCopyableLabel { Layout.alignment: Qt.AlignVCenter @@ -575,6 +645,7 @@ Qaterial.Dialog } } } + Item { width: parent.width @@ -602,7 +673,7 @@ Qaterial.Dialog family: DexTypo.fontFamily, weight: Font.Normal }) - onClicked: new_update_modal.open() + onClicked: newUpdateModal.open() } DexAppButton @@ -626,6 +697,5 @@ Qaterial.Dialog } } } - } -} \ No newline at end of file +} diff --git a/atomic_defi_design/Dex/Settings/Settings.qml b/atomic_defi_design/Dex/Settings/Settings.qml index bfc2f2d83..297ff957e 100644 --- a/atomic_defi_design/Dex/Settings/Settings.qml +++ b/atomic_defi_design/Dex/Settings/Settings.qml @@ -11,6 +11,8 @@ import "../Components" import "../Constants" import App 1.0 +// TODO: confirm deprecated; delete. + Item { id: root function disconnect() { diff --git a/atomic_defi_design/Dex/Settings/SettingsButton.qml b/atomic_defi_design/Dex/Settings/SettingsButton.qml index 6224c6eef..fda2caea4 100644 --- a/atomic_defi_design/Dex/Settings/SettingsButton.qml +++ b/atomic_defi_design/Dex/Settings/SettingsButton.qml @@ -1,9 +1,11 @@ import QtQuick 2.15 import "../Components/" import App 1.0 +import QtQuick.Layouts 1.15 import Qaterial 1.0 as Qaterial -Item { +RowLayout +{ id: control property bool noBackground: false @@ -14,16 +16,19 @@ Item { anchors.horizontalCenter: parent.horizontalCenter - DexLabel { - anchors.verticalCenter: parent.verticalCenter + DexLabel + { + Layout.alignment: Qt.AlignVCenter font: DexTypo.subtitle1 text: control.title // qsTr("Logs") } - DexAppButton { + Item { Layout.fillWidth: true } + + DexAppButton + { visible: control.noBackground - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right + Layout.alignment: Qt.AlignVCenter text: control.buttonText color: containsMouse ? DexTheme.buttonColorHovered : 'transparent' height: 48 @@ -39,9 +44,9 @@ Item { onClicked: control.clicked() } - DexAppOutlineButton { - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right + DexAppOutlineButton + { + Layout.alignment: Qt.AlignVCenter leftPadding: 20 rightPadding: 20 radius: 20 diff --git a/atomic_defi_design/Dex/Sidebar/Bottom.qml b/atomic_defi_design/Dex/Sidebar/Bottom.qml index 44411e5da..a20c1d6bb 100644 --- a/atomic_defi_design/Dex/Sidebar/Bottom.qml +++ b/atomic_defi_design/Dex/Sidebar/Bottom.qml @@ -1,5 +1,8 @@ import QtQuick 2.12 import QtQuick.Layouts 1.2 +import QtQuick.Controls 2.15 +import App 1.0 +import Dex.Themes 1.0 as Dex import "../Components" import "../Constants" @@ -8,7 +11,7 @@ MouseArea { id: root - signal supportLineSelected(var lineType) + signal supportClicked() signal settingsClicked() height: lineHeight * 3 @@ -72,8 +75,7 @@ MouseArea Layout.fillWidth: true label.text: isExpanded ? qsTr("Support") : "" icon.source: General.image_path + "menu-support-white.png" - type: Main.LineType.Support - onClicked: supportLineSelected(type) + onClicked: supportClicked(type) } Line @@ -86,8 +88,57 @@ MouseArea onClicked: { - General.privacy_mode = !General.privacy_mode; - privacySwitch.checked = General.privacy_mode; + if (General.privacy_mode) { + privacySwitch.checked = true + var wallet_name = API.app.wallet_mgr.wallet_default_name + + let dialog = app.getText( + { + title: qsTr("Disable Privacy?"), + text: qsTr("Enter wallet password to confirm"), + standardButtons: Dialog.Yes | Dialog.Cancel, + closePolicy: Popup.NoAutoClose, + warning: true, + iconColor: Dex.CurrentTheme.noColor, + isPassword: true, + placeholderText: qsTr("Type password"), + yesButtonText: qsTr("Confirm"), + cancelButtonText: qsTr("Cancel"), + + onAccepted: function(text) + { + if (API.app.wallet_mgr.confirm_password(wallet_name, text)) + { + General.privacy_mode = false; + privacySwitch.checked = false + app.showDialog( + { + title: qsTr("Privacy status"), + text: qsTr("Privacy mode disabled successfully"), + yesButtonText: qsTr("Ok"), titleBold: true, + standardButtons: Dialog.Ok + }) + } + else + { + app.showDialog( + { + title: qsTr("Wrong password!"), + text: "%1 ".arg(wallet_name) + qsTr("wallet password is incorrect"), + warning: true, + standardButtons: Dialog.Ok, titleBold: true, + yesButtonText: qsTr("Ok"), + }) + } + dialog.close() + dialog.destroy() + } + }) + } + else { + General.privacy_mode = true; + privacySwitch.checked = true + } } DefaultSwitch @@ -99,7 +150,6 @@ MouseArea anchors.verticalCenter: parent.verticalCenter scale: 0.75 mouseArea.hoverEnabled: true - onClicked: parent.clicked() } } diff --git a/atomic_defi_design/Dex/Sidebar/Main.qml b/atomic_defi_design/Dex/Sidebar/Main.qml index 0db596072..d4a47b7d3 100644 --- a/atomic_defi_design/Dex/Sidebar/Main.qml +++ b/atomic_defi_design/Dex/Sidebar/Main.qml @@ -25,6 +25,7 @@ Item signal lineSelected(var lineType) signal settingsClicked() + signal supportClicked() signal privacySwitched(var checked) signal expanded(var isExpanded) signal expandStarted(var isExpanding) @@ -114,14 +115,8 @@ Item anchors.bottom: parent.bottom anchors.bottomMargin: 62 - onSupportLineSelected: - { - if (currentLineType === lineType) - return; - currentLineType = lineType; - root.lineSelected(lineType); - } onSettingsClicked: root.settingsClicked() + onSupportClicked: root.supportClicked() } VerticalLine diff --git a/atomic_defi_design/Dex/Support/FAQLine.qml b/atomic_defi_design/Dex/Support/FAQLine.qml index 6ca1d2597..3c9e7a2c7 100644 --- a/atomic_defi_design/Dex/Support/FAQLine.qml +++ b/atomic_defi_design/Dex/Support/FAQLine.qml @@ -11,4 +11,6 @@ TextWithTitle { expandable: true Layout.fillWidth: true Layout.rightMargin: 10 + text_font.pixelSize: 14 + title_font.pixelSize: 18 } diff --git a/atomic_defi_design/Dex/Support/Support.qml b/atomic_defi_design/Dex/Support/Support.qml deleted file mode 100644 index 256d48dc8..000000000 --- a/atomic_defi_design/Dex/Support/Support.qml +++ /dev/null @@ -1,179 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import QtGraphicalEffects 1.0 -import "../Components" -import "../Constants" - -import App 1.0 - -Item { - id: root - - readonly property bool update_needed: API.app.self_update_service.update_needed - - DexFlickable { - id: layout_background - - width: parent.width - 20 - height: parent.height - 20 - y: 10 - x: 20 - contentWidth: width - 20 - contentHeight: content_layout.height - - ColumnLayout { - id: content_layout - width: parent.width - spacing: 40 - - Item { - Layout.topMargin: parent.spacing - Layout.fillWidth: true - Layout.preferredHeight: 80 - - LinksRow { - anchors.left: parent.left - anchors.verticalCenter: parent.verticalCenter - } - - DefaultMouseArea { - id: changelog_button - - anchors.centerIn: parent - width: column_layout.width - height: column_layout.height - hoverEnabled: true - - onClicked: update_modal.open() - - ColumnLayout { - id: column_layout - RowLayout { - Layout.alignment: Qt.AlignHCenter - - Circle { - Layout.alignment: Qt.AlignVCenter - - color: Qt.lighter(update_needed ? Style.colorOrange : Style.colorGreen, changelog_button.containsMouse ? Style.hoverLightMultiplier : 1.0) - } - - DefaultText { - Layout.alignment: Qt.AlignVCenter - text_value: update_needed ? qsTr("Update available") : qsTr("Up to date") - color: changelog_text.color - } - } - - DefaultText { - Layout.alignment: Qt.AlignHCenter - text_value: General.version_string - font.pixelSize: Style.textSizeSmall3 - color: changelog_text.color - } - - DefaultText { - id: changelog_text - Layout.alignment: Qt.AlignHCenter - text_value: General.cex_icon + ' ' + qsTr('Changelog') - font.pixelSize: Style.textSizeSmall2 - - color: Qt.lighter(Style.colorWhite4, changelog_button.containsMouse ? Style.hoverLightMultiplier : 1.0) - } - } - } - - DefaultButton { - anchors.right: parent.right - anchors.rightMargin: 20 - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Open Logs Folder") - onClicked: openLogsFolder() - } - } - - HorizontalLine { - Layout.fillWidth: true - } - - DefaultText { - Layout.alignment: Qt.AlignHCenter - text_value: qsTr("Frequently Asked Questions") - font.pixelSize: Style.textSize2 - } - - - - - - - - - - - - // FAQ Lines - FAQLine { - title: qsTr("Do you store my private keys?") - text: qsTr("No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets.").arg(API.app_name) - } - - FAQLine { - title: qsTr("How is trading on %1 different from trading on other DEXs?").arg(API.app_name) - text: qsTr("Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. - -%1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders.").arg(API.app_name) - } - - FAQLine { - title: qsTr("How long does each atomic swap take?") - text: qsTr('Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a notarization.').arg(API.app_name) - } - - FAQLine { - title: qsTr("Do I need to be online for the duration of the swap?") - text: qsTr("Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. -The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. -If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. -When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! -For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1.").arg(API.app_name) - } - - FAQLine { - title: qsTr("How are the fees on %1 calculated?").arg(API.app_name) - text: qsTr("There are two fee categories to consider when trading on %1. - -1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. -2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. - -Network fees can vary greatly depending on your selected trading pair.").arg(API.app_name) - } - - FAQLine { - title: qsTr("Do you provide user support?") - text: qsTr('Yes! %1 offers support through the %1 Discord server. The team and the community are always happy to help!').arg(API.app_name).arg(API.app_discord_url) - } - - FAQLine { - title: qsTr("Who is behind %1?").arg(API.app_name) - text: qsTr("%1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture.").arg(API.app_name) - } - - FAQLine { - title: qsTr("Is it possible to develop my own white-label exchange on %1?").arg(API.app_name) - text: qsTr("Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help!").arg(API.app_name) - } - - FAQLine { - title: qsTr("Which devices can I use %1 on?").arg(API.app_name) - text: qsTr('%1 is available for mobile on both Android and iPhone, and for desktop on Windows, Mac, and Linux operating systems.').arg(API.app_name).arg(API.app_website_url) - } - - FAQLine { - title: qsTr("Compliance Info") - text: qsTr("Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application.") - } - } - } -} diff --git a/atomic_defi_design/Dex/Support/SupportModal.qml b/atomic_defi_design/Dex/Support/SupportModal.qml new file mode 100644 index 000000000..de230590a --- /dev/null +++ b/atomic_defi_design/Dex/Support/SupportModal.qml @@ -0,0 +1,249 @@ +//! Qt Imports +import QtQuick 2.15 +import QtQuick.Layouts 1.15 +import QtQuick.Controls 2.15 +import QtGraphicalEffects 1.0 +import Qt.labs.settings 1.0 +import QtQml 2.12 +import QtQuick.Window 2.12 +import QtQuick.Controls.Universal 2.12 + +//! 3rdParty Imports +import Qaterial 1.0 as Qaterial + +//! Project Imports +import "../Components" +import "../Constants" +import App 1.0 +import Dex.Themes 1.0 as Dex + + +Qaterial.Dialog +{ + id: support_modal + //readonly property bool update_needed: API.app.self_update_service.update_needed + + width: 950 + height: 650 + padding: 20 + topPadding: 30 + bottomPadding: 30 + anchors.centerIn: parent + + dim: true + modal: true + title: "Support" + + header: Item + {} + + Overlay.modal: Item + { + DexRectangle + { + anchors.fill: parent + color: 'black' + opacity: .7 + } + } + + background: DexRectangle + { + color: DexTheme.backgroundColor + border.width: 0 + radius: 16 + } + + ColumnLayout + { + id: support_layout + width: support_modal.width - 100 + Layout.alignment: Qt.AlignHCenter + + RowLayout + { + id: faq_title + height: 30 + Layout.preferredWidth: faq_column.width + Layout.topMargin: 20 + Layout.bottomMargin: 20 + Layout.leftMargin: 42 + DexLabel + { + id: faq_label + Layout.preferredWidth: faq_title.width + text_value: qsTr("Frequently Asked Questions") + font.pixelSize: Style.textSize2 + horizontalAlignment: Text.AlignHCenter + } + } + + DexFlickable + { + id: faq_flickable + + width: support_modal.width - 100 + height: support_modal.height - 220 + contentWidth: width - 20 + contentHeight: faq_column.height + Layout.leftMargin: 32 + + ColumnLayout + { + id: faq_column + width: parent.width - 5 + spacing: 12 + + + // FAQ Lines + FAQLine + { + title: qsTr("Do you store my private keys?") + text: qsTr("No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets.").arg(API.app_name) + } + + FAQLine + { + title: qsTr("How is trading on %1 different from trading on other DEXs?").arg(API.app_name) + text: qsTr("Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. + +%1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders.").arg(API.app_name) + } + + FAQLine + { + title: qsTr("How long does each atomic swap take?") + text: qsTr('Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a notarization.').arg(API.app_name) + } + + FAQLine + { + title: qsTr("Do I need to be online for the duration of the swap?") + text: qsTr("Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. + +The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. + +If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. + +When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! + +For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1.").arg(API.app_name) + } + + FAQLine + { + title: qsTr("How are the fees on %1 calculated?").arg(API.app_name) + text: qsTr("There are two fee categories to consider when trading on %1. + +1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. + +2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. + +Network fees can vary greatly depending on your selected trading pair.").arg(API.app_name) + } + + FAQLine + { + title: qsTr("Do you provide user support?") + text: qsTr('Yes! %1 offers support through the %1 Discord server. The team and the community are always happy to help!').arg(API.app_name).arg(API.app_discord_url) + } + + FAQLine + { + title: qsTr("Who is behind %1?").arg(API.app_name) + text: qsTr("%1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture.").arg(API.app_name) + } + + FAQLine + { + title: qsTr("Is it possible to develop my own white-label exchange on %1?").arg(API.app_name) + text: qsTr("Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help!").arg(API.app_name) + } + + FAQLine + { + title: qsTr("Which devices can I use %1 on?").arg(API.app_name) + text: qsTr('%1 is available for mobile on both Android and iPhone, and for desktop on Windows, Mac, and Linux operating systems.').arg(API.app_name).arg(API.app_website_url) + } + + FAQLine + { + title: qsTr("Compliance Info") + text: qsTr("Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application.") + } + } + } + + RowLayout + { + id: bottom_row + Layout.topMargin: 20 + Layout.preferredHeight: 70 + Layout.preferredWidth: faq_title.width + Layout.leftMargin: 32 + property var filler_width: (parent.width - links_row.width - changelog_button.width - logs_btn.width) / 2 - 14 + + LinksRow { id: links_row } + + Item { Layout.preferredWidth: bottom_row.filler_width } + + DexMouseArea + { + id: changelog_button + + Layout.preferredWidth: column_layout.width + Layout.preferredHeight: column_layout.height + hoverEnabled: true + + onClicked: update_modal.open() + + ColumnLayout + { + id: column_layout + RowLayout + { + Layout.alignment: Qt.AlignHCenter + + Circle + { + Layout.alignment: Qt.AlignVCenter + //color: Qt.lighter(update_needed ? Style.colorOrange : Style.colorGreen, changelog_button.containsMouse ? Style.hoverLightMultiplier : 1.0) + } + + DexLabel + { + Layout.alignment: Qt.AlignVCenter + //text_value: //update_needed ? qsTr("Update available") : qsTr("Up to date") + color: changelog_text.color + } + } + + DexLabel + { + Layout.alignment: Qt.AlignHCenter + text_value: General.version_string + font.pixelSize: Style.textSizeSmall3 + color: changelog_text.color + } + + DexLabel + { + id: changelog_text + Layout.alignment: Qt.AlignHCenter + text_value: General.cex_icon + ' ' + qsTr('Changelog') + font.pixelSize: Style.textSizeSmall2 + } + } + } + + Item { Layout.preferredWidth: bottom_row.filler_width } + + DexAppButton + { + id: logs_btn + text: qsTr("Open Logs Folder") + onClicked: openLogsFolder() + } + } + } +} diff --git a/atomic_defi_design/Dex/Tests/ThemeTest.qml b/atomic_defi_design/Dex/Tests/ThemeTest.qml deleted file mode 100644 index 49ce86ac4..000000000 --- a/atomic_defi_design/Dex/Tests/ThemeTest.qml +++ /dev/null @@ -1,44 +0,0 @@ -import QtQuick 2.15 -import Qaterial 1.0 as Qaterial - -import Dex.Themes 1.0 as Dex - - -Item -{ - id: root - Column - { - padding: 10 - spacing: 10 - Repeater - { - model: 20 - Rectangle - { - width: 200 - height: 10 - color: Dex.CurrentTheme.backgroundColor - } - } - - } - - function listProperty(item) - { - for (var p in item) - { - if (typeof item[p] != "function") - if (p != "objectName") - console.log(p + ":" + item[p]); - } - - } - Component.onCompleted: - { - - listProperty(root) - - } - -} \ No newline at end of file diff --git a/atomic_defi_design/Dex/Themes/CurrentTheme.qml b/atomic_defi_design/Dex/Themes/CurrentTheme.qml index 06fafacb7..c0e64238f 100644 --- a/atomic_defi_design/Dex/Themes/CurrentTheme.qml +++ b/atomic_defi_design/Dex/Themes/CurrentTheme.qml @@ -94,6 +94,8 @@ ThemeData backgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.backgroundColor || defaultTheme.backgroundColor); backgroundColorDeep = Dex.Color.argbStrFromRgbaStr(themeData.backgroundColorDeep || defaultTheme.backgroundColorDeep); + busyIndicatorColor = Dex.Color.argbStrFromRgbaStr(themeData.busyIndicatorColor || defaultTheme.busyIndicatorColor); + buttonColorDisabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonColorDisabled || defaultTheme.buttonColorDisabled); buttonColorEnabled = Dex.Color.argbStrFromRgbaStr(themeData.buttonColorEnabled || defaultTheme.buttonColorEnabled); buttonColorHovered = Dex.Color.argbStrFromRgbaStr(themeData.buttonColorHovered || defaultTheme.buttonColorHovered); @@ -165,8 +167,8 @@ ThemeData rangeSliderIndicatorBackgroundStartColor = Dex.Color.argbStrFromRgbaStr(themeData.rangeSliderIndicatorBackgroundStartColor || defaultTheme.rangeSliderIndicatorBackgroundStartColor); rangeSliderIndicatorBackgroundEndColor = Dex.Color.argbStrFromRgbaStr(themeData.rangeSliderIndicatorBackgroundEndColor || defaultTheme.rangeSliderIndicatorBackgroundEndColor); - loginWalletIconColorStart = Dex.Color.argbStrFromRgbaStr(themeData.loginWalletIconColorStart || defaultTheme.loginWalletIconColorStart) - loginWalletIconColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.loginWalletIconColorEnd || defaultTheme.loginWalletIconColorEnd) + userIconColorStart = Dex.Color.argbStrFromRgbaStr(themeData.userIconColorStart || defaultTheme.userIconColorStart) + userIconColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.userIconColorEnd || defaultTheme.userIconColorEnd) sidebarBgColor = Dex.Color.argbStrFromRgbaStr(themeData.sidebarBgColor || defaultTheme.sidebarBgColor); sidebarVersionTextColor = Dex.Color.argbStrFromRgbaStr(themeData.sidebarVersionTextColor || defaultTheme.sidebarVersionTextColor); @@ -181,11 +183,17 @@ ThemeData tradeSellModeSelectorBackgroundColorEnd = Dex.Color.argbStrFromRgbaStr(themeData.tradeSellModeSelectorBackgroundColorEnd || defaultTheme.tradeSellModeSelectorBackgroundColorEnd); tradeMarketModeSelectorNotSelectedBackgroundColor = Dex.Color.argbStrFromRgbaStr(themeData.tradeMarketModeSelectorNotSelectedBackgroundColor || defaultTheme.tradeMarketModeSelectorNotSelectedBackgroundColor); + addressBookTagColors = themeData.addressBookTagColors || defaultTheme.addressBookTagColors + for (var i = 0; i < addressBookTagColors.length; i++) + { + addressBookTagColors[i] = Dex.Color.argbStrFromRgbaStr(addressBookTagColors[i]) + } + okColor = Dex.Color.argbStrFromRgbaStr(themeData.okColor || defaultTheme.okColor); noColor = Dex.Color.argbStrFromRgbaStr(themeData.noColor || defaultTheme.noColor); - arrowUpColor = Dex.Color.argbStrFromRgbaStr(themeData.arrowUpColor || defaultTheme.arrowUpColor); - arrowDownColor = Dex.Color.argbStrFromRgbaStr(themeData.arrowDownColor || defaultTheme.arrowDownColor); + senderColorStart = Dex.Color.argbStrFromRgbaStr(themeData.senderColorStart || defaultTheme.senderColorStart); + receiverColorStart = Dex.Color.argbStrFromRgbaStr(themeData.receiverColorStart || defaultTheme.receiverColorStart); lineSeparatorColor = Dex.Color.argbStrFromRgbaStr(themeData.lineSeparatorColor || defaultTheme.lineSeparatorColor); } @@ -208,6 +216,8 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.backgroundColor : %1".arg(backgroundColor)); console.info("Dex.Themes.CurrentTheme.printValues.backgroundColorDeep : %1".arg(backgroundColorDeep)); + console.info("Dex.Themes.CurrentTheme.printValues.busyIndicatorColor : %1".arg(busyIndicatorColor)); + console.info("Dex.Themes.CurrentTheme.printValues.buttonColorDisabled : %1".arg(buttonColorDisabled)); console.info("Dex.Themes.CurrentTheme.printValues.buttonColorEnabled : %1".arg(buttonColorEnabled)); console.info("Dex.Themes.CurrentTheme.printValues.buttonColorHovered : %1".arg(buttonColorHovered)); @@ -278,8 +288,8 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.rangeSliderIndicatorBackgroundStartColor : %1".arg(rangeSliderIndicatorBackgroundStartColor)); console.info("Dex.Themes.CurrentTheme.printValues.rangeSliderIndicatorBackgroundEndColor : %1".arg(rangeSliderIndicatorBackgroundEndColor)); - console.info("Dex.Themes.CurrentTheme.printValues.loginWalletIconColorStart : %1".arg(loginWalletIconColorStart)); - console.info("Dex.Themes.CurrentTheme.printValues.loginWalletIconColorEnd : %1".arg(loginWalletIconColorEnd)); + console.info("Dex.Themes.CurrentTheme.printValues.userIconColorStart : %1".arg(userIconColorStart)); + console.info("Dex.Themes.CurrentTheme.printValues.userIconColorEnd : %1".arg(userIconColorEnd)); console.info("Dex.Themes.CurrentTheme.printValues.sidebarBgColor : %1".arg(sidebarBgColor)); console.info("Dex.Themes.CurrentTheme.printValues.sidebarVersionTextColor : %1".arg(sidebarVersionTextColor)); @@ -294,11 +304,13 @@ ThemeData console.info("Dex.Themes.CurrentTheme.printValues.tradeSellModeSelectorBackgroundColorEnd : %1".arg(tradeSellModeSelectorBackgroundColorEnd)); console.info("Dex.Themes.CurrentTheme.printValues.tradeMarketModeSelectorNotSelectedBackgroundColor : %1".arg(tradeMarketModeSelectorNotSelectedBackgroundColor)); + console.info("Dex.Themes.CurrentTheme.printValues.addressBookTagColors : %1".arg(addressBookTagColors)); + console.info("Dex.Themes.CurrentTheme.printValues.okColor : %1".arg(okColor)); console.info("Dex.Themes.CurrentTheme.printValues.noColor : %1".arg(noColor)); - console.info("Dex.Themes.CurrentTheme.printValues.arrowUpColor : %1".arg(arrowUpColor)); - console.info("Dex.Themes.CurrentTheme.printValues.arrowDownColor : %1".arg(arrowDownColor)); + console.info("Dex.Themes.CurrentTheme.printValues.senderColorStart : %1".arg(senderColorStart)); + console.info("Dex.Themes.CurrentTheme.printValues.receiverColorStart : %1".arg(receiverColorStart)); console.info("Dex.Themes.CurrentTheme.printValues.lineSeparatorColor : %1".arg(lineSeparatorColor)); diff --git a/atomic_defi_design/Dex/Themes/DefaultTheme.js b/atomic_defi_design/Dex/Themes/DefaultTheme.js index 80fccc522..b04267315 100644 --- a/atomic_defi_design/Dex/Themes/DefaultTheme.js +++ b/atomic_defi_design/Dex/Themes/DefaultTheme.js @@ -3,49 +3,51 @@ function getHardcoded() { return { - accentColor: "#F0F2FF", - foregroundColor: "#456078", - foregroundColor2: "#7A8EA1", + accentColor: "#F0F2FFFF", + foregroundColor: "#456078FF", + foregroundColor2: "#7A8EA1FF", foregroundColor3: "#8FA0B1B2", - backgroundColor: "#FCFCFC", - backgroundColorDeep: "#FCFCFC", - - buttonColorDisabled: "#D8E3F8", - buttonColorEnabled: "#F0F6FF", - buttonColorHovered: "#D7E7FF", - buttonColorPressed: "#B8D2F9", - buttonTextDisabledColor: "#000000", - buttonTextEnabledColor: "#000000", - buttonTextHoveredColor: "#000000", - buttonTextPressedColor: "#000000", - - gradientButtonStartColor: "#5A68E6", + backgroundColor: "#FCFCFCFF", + backgroundColorDeep: "#FCFCFCFF", + + busyIndicatorColor: "#4986EAFF", + + buttonColorDisabled: "#D8E3F8FF", + buttonColorEnabled: "#F0F6FFFF", + buttonColorHovered: "#D7E7FFFF", + buttonColorPressed: "#B8D2F9FF", + buttonTextDisabledColor: "#000000FF", + buttonTextEnabledColor: "#000000FF", + buttonTextHoveredColor: "#000000FF", + buttonTextPressedColor: "#000000FF", + + gradientButtonStartColor: "#5A68E6FF", gradientButtonEndColor: "#4986EAAB", - gradientButtonDisabledStartColor: "#CDD0F6", - gradientButtonDisabledEndColor: "#DAE5F9", - gradientButtonHoveredStartColor: "#5A68E6", - gradientButtonHoveredEndColor: "#5A68E6", - gradientButtonPressedStartColor: "#6A4DE3", - gradientButtonPressedEndColor: "#6A4DE3", - gradientButtonTextEnabledColor: "#FFF", - gradientButtonTextDisabledColor: "#FFF", - gradientButtonTextHoveredColor: "#FFF", - gradientButtonTextPressedColor: "#FFF", - - checkBoxGradientStartColor: "#8892EB", - checkBoxGradientEndColor: "#9DD4F3", - - switchGradientStartColor: "#8892EB", - switchGradientEndColor: "#9DD4F3", - switchGradientStartColor2: "#FFF", - switchGradientEndColor2: "#FFF", + gradientButtonDisabledStartColor: "#CDD0F6FF", + gradientButtonDisabledEndColor: "#DAE5F9FF", + gradientButtonHoveredStartColor: "#5A68E6FF", + gradientButtonHoveredEndColor: "#5A68E6FF", + gradientButtonPressedStartColor: "#6A4DE3FF", + gradientButtonPressedEndColor: "#6A4DE3FF", + gradientButtonTextEnabledColor: "#FFFFFFFF", + gradientButtonTextDisabledColor: "#FFFFFFFF", + gradientButtonTextHoveredColor: "#FFFFFFFF", + gradientButtonTextPressedColor: "#FFFFFFFF", + + checkBoxGradientStartColor: "#8892EBFF", + checkBoxGradientEndColor: "#9DD4F3FF", + + switchGradientStartColor: "#8892EBFF", + switchGradientEndColor: "#9DD4F3FF", + switchGradientStartColor2: "#FFFFFFFF", + switchGradientEndColor2: "#FFFFFFFF", comboBoxBackgroundColor: "#FFFFFFFF", comboBoxArrowsColor: "#456078FF", comboBoxDropdownItemHighlightedColor: "#456078FF", - modalPageCounterGradientStartColor: "#9DD4F3", - modalPageCounterGradientEndColor: "#9DD4F3", + modalPageCounterGradientStartColor: "#9DD4F3FF", + modalPageCounterGradientEndColor: "#9DD4F3FF", notifPopupBackgroundColor: "#EDF4FFFF", notifPopupTextColor: "#456078FF", @@ -57,38 +59,38 @@ function getHardcoded() scrollBarIndicatorColor: "#DBE0E4FF", scrollBarBackgroundColor: "#93A3B1FF", - tabSelectedColor: "#DCE8FD", + tabSelectedColor: "#DCE8FDFF", - textDisabledColor: "#C5CFD8", - textSelectionColor: "#14BCA6FF", - textPlaceholderColor: "#91A8E8", - textSelectedColor: "#f9f9fb", + textDisabledColor: "#C5CFD8FF", + textSelectionColor: "#4986EAFF", + textPlaceholderColor: "#91A8E8FF", + textSelectedColor: "#f9f9fbFF", textFieldBackgroundColor: "#F3F5F6FF", textFieldActiveBackgroundColor: "#F3F5F6CC", textFieldPrefixColor: "#45607894", textFieldSuffixColor: "#456078FF", - chartTradingLineBackgroundColor: "#C5F2EF", - chartTradingLineColor: "#53EBD7", + chartTradingLineBackgroundColor: "#C5F2EFFF", + chartTradingLineColor: "#53EBD7FF", - innerBackgroundColor: "#edf4ff", + innerBackgroundColor: "#EDF4FFFF", - floatingBackgroundColor: "#edf4ff", + floatingBackgroundColor: "#EDF4FFFF", rangeSliderBackgroundColor: "#5A68E6FF", rangeSliderDistanceColor: "#4986EA3B", rangeSliderIndicatorBackgroundStartColor: "#5A68E6FF", rangeSliderIndicatorBackgroundEndColor: "#4986EAAD", - loginWalletIconColorStart: "#5A68E6FF", - loginWalletIconColorEnd: "#4986EAAD", + userIconColorStart: "#5A68E6FF", + userIconColorEnd: "#4986EAAD", - sidebarBgColor: "#FCFCFC", - sidebarVersionTextColor: "#456078", - sidebarCursorStartColor: "#5A68E6", - sidebarCursorEndColor: "#2CB9F000", - sidebarLineTextHovered: "#2C87B9", + sidebarBgColor: "#FCFCFCFF", + sidebarVersionTextColor: "#456078FF", + sidebarCursorStartColor: "#5A68E6FF", + sidebarCursorEndColor: "#2CB9F000FF", + sidebarLineTextHovered: "#2C87B9FF", sidebarLineTextSelected: "#FFFFFFFF", tradeBuyModeSelectorBackgroundColorStart: "#6A4DE3FF", @@ -97,12 +99,17 @@ function getHardcoded() tradeSellModeSelectorBackgroundColorEnd: "#E216A9FF", tradeMarketModeSelectorNotSelectedBackgroundColor: "#89B6FF21", - okColor: "#00C058", - noColor: "#E52167", + addressBookTagColors: ["#627EEAFF", "#FFD87AFF", "#F7931AFF"], + + okColor: "#00C058FF", + noColor: "#E52167FF", + + senderColorStart: "#F85757FF", + receiverColorStart: "#845FEFFF", - arrowUpColor: "#F85757", - arrowDownColor: "#845FEF", + arrowUpColor: "#F85757FF", + arrowDownColor: "#845FEFFF", - lineSeparatorColor: "#CDD3DC" + lineSeparatorColor: "#CDD3DCFF" } } diff --git a/atomic_defi_design/Dex/Themes/ThemeData.qml b/atomic_defi_design/Dex/Themes/ThemeData.qml index 9bef9da0f..e6684febb 100644 --- a/atomic_defi_design/Dex/Themes/ThemeData.qml +++ b/atomic_defi_design/Dex/Themes/ThemeData.qml @@ -9,6 +9,8 @@ QtObject property color backgroundColor property color backgroundColorDeep + property color busyIndicatorColor + property color buttonColorDisabled property color buttonColorEnabled property color buttonColorHovered @@ -81,8 +83,8 @@ QtObject property color rangeSliderIndicatorBackgroundEndColor // Login page related - property color loginWalletIconColorStart - property color loginWalletIconColorEnd // Property not yet used. + property color userIconColorStart + property color userIconColorEnd // Property not yet used. // Sidebar related property color sidebarBgColor @@ -99,12 +101,15 @@ QtObject property color tradeSellModeSelectorBackgroundColorEnd property color tradeMarketModeSelectorNotSelectedBackgroundColor + // Address book page related + property var addressBookTagColors + // Colors used to tell when something is good or wrong. property color okColor property color noColor - property color arrowUpColor - property color arrowDownColor + property color senderColorStart + property color receiverColorStart property color lineSeparatorColor diff --git a/atomic_defi_design/Dex/Wallet/AddressBook.qml b/atomic_defi_design/Dex/Wallet/AddressBook.qml deleted file mode 100644 index a901b762b..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBook.qml +++ /dev/null @@ -1,292 +0,0 @@ -// Qt Imports -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtGraphicalEffects 1.0 - -// Deps Imports -import Qaterial 1.0 as Qaterial - -// Project Imports -import "../Components" -import "../Constants" -import App 1.0 - -ColumnLayout { - id: root - Layout.fillWidth: true - Layout.fillHeight: true - //spacing: 20 - - Layout.rightMargin: 10 - Layout.leftMargin: 10 - readonly property var addressbook_pg: API.app.addressbook_pg - - // Page header - Item { - Layout.fillWidth: true - Layout.preferredHeight: 80 - - - DexLabel { // Title - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 10 - text_value: qsTr("Address Book") - font: DexTypo.head6 - } - - DexGradientAppButton { - - anchors.right: parent.right - anchors.rightMargin: 10 - anchors.verticalCenter: parent.verticalCenter - iconSource: Qaterial.Icons.textBoxPlus - radius: 40 - leftPadding: 5 - rightPadding: 5 - padding: 16 - text: qsTr("New Contact") - onClicked: new_contact_modal.open() - } - } - - Item { - Layout.fillWidth: true - Layout.preferredHeight: 60 - DexRectangle { - anchors.verticalCenter: parent.verticalCenter - width: 300 - opacity: enabled ? 1 : .5 - height: 50 - radius: 20 - x: 10 - color: DexTheme.contentColorTop - DefaultTextField { - id: searchbar - anchors.fill: parent - anchors.margins: 2 - function reset() { - searchbar.text = "" - } - Qaterial.Icon { - icon: Qaterial.Icons.magnify - color: searchbar.color - anchors.verticalCenter: parent.verticalCenter - x: 5 - } - leftPadding: 40 - placeholderText: qsTr("Search a contact by name or tags") - - font: DexTypo.body2 - onTextChanged: addressbook_pg.model.proxy.search_exp = text - Component.onDestruction: addressbook_pg.model.proxy.search_exp = "" - background: null - } - } - } - - // Contact List Header - Item { - Layout.fillWidth: true - Layout.preferredHeight: 40 - Layout.rightMargin: 10 - Layout.leftMargin: 10 - - - DexLabel { - id: header_name_column - anchors.left: parent.left - anchors.leftMargin: 20 - anchors.verticalCenter: parent.verticalCenter - font.bold: true - text: qsTr("Name") - } - - DexLabel { - id: header_tags_column - anchors.left: header_name_column.right - anchors.leftMargin: 180 - anchors.verticalCenter: parent.verticalCenter - font.bold: true - text: qsTr("Tags (first 6)") - } - - DexLabel { - anchors.right: parent.right - anchors.rightMargin: parent.width * 0.138 - anchors.verticalCenter: parent.verticalCenter - font.bold: true - text: qsTr("Actions") - } - - HorizontalLine { - width: parent.width - color: Style.colorWhite5 - anchors.bottom: parent.bottom - } - } - - // Contact List - DefaultListView { - id: contact_list - Layout.fillWidth: true - Layout.fillHeight: true - - Layout.rightMargin: 10 - Layout.leftMargin: 10 - - model: addressbook_pg.model.proxy - - // Contact Card - delegate: AnimatedRectangle { - id: contact_card - - property var contact: modelData - - color: Qt.lighter(index % 2 == 0 ? DexTheme.backgroundColor : DexTheme.surfaceColor, 1.0) - width: root.width - height: 55 - - DefaultText { // Contact Name - id: contact_name - anchors.left: parent.left - anchors.leftMargin: 20 - anchors.verticalCenter: parent.verticalCenter - - width: 160 - - text: modelData.name - elide: Text.ElideRight - } - - VerticalLine { - anchors.left: contact_name.right - anchors.leftMargin: 25 - height: parent.height - width: 1 - } - - Flow { // Contact First 6 Tags - id: contact_tags_list - flow: GridLayout.LeftToRight - - readonly property int length: 6 // Number of displayed tags - readonly property int tagButtonWidth: 150 // Width of a tag button - - width: length * tagButtonWidth - - anchors.left: contact_name.right - anchors.leftMargin: 50 - anchors.verticalCenter: parent.verticalCenter - - Repeater { - model: contact_card.contact.categories - - delegate: Qaterial.OutlineButton { - width: contact_tags_list.tagButtonWidth - visible: index < contact_tags_list.length && index < contact_card.contact.categories.length - outlined: false - text: modelData - icon.source: Qaterial.Icons.tag - //elide: Text.ElideRight - - onClicked: searchbar.text = modelData - } - } - } - - VerticalLine { - anchors.right: edit_contact_button.left - anchors.rightMargin: 30 - height: parent.height - width: 1 - } - - DefaultButton { // Edit Button - id: edit_contact_button - - anchors.right: remove_contact_button.left - anchors.rightMargin: 5 - anchors.verticalCenter: parent.verticalCenter - - text: qsTr("Edit") - font.pixelSize: Style.textSizeSmall3 - width: 120 - - onClicked: { - edit_contact_modal.contactModel = modelData - edit_contact_modal.open() - } - } - - DangerButton { // Remove Button - id: remove_contact_button - - anchors.right: parent.right - anchors.rightMargin: 30 - anchors.verticalCenter: parent.verticalCenter - - text: qsTr("Remove") - font.pixelSize: Style.textSizeSmall3 - width: 120 - - onClicked: { - remove_contact_modal.contactName = modelData.name - remove_contact_modal.open() - } - } - } - - - // Create Contact Modal - ModalLoader { - id: new_contact_modal - sourceComponent: AddressBookNewContactModal {} - } - - // Edit Contact Modal - ModalLoader { - id: edit_contact_modal - - property var contactModel - - onLoaded: item.contactModel = contactModel - - sourceComponent: AddressBookEditContactModal {} - } - - // Delete Contact Modal - ModalLoader { - property string contactName - - id: remove_contact_modal - - sourceComponent: MultipageModal { - width: 500 - - MultipageModalContent { - Layout.fillWidth: true - titleText: qsTr("Do you want to remove this contact ?") - - RowLayout { - DangerButton { - text: qsTr("Yes") - - onClicked: { - remove_contact_modal.close() - addressbook_pg.model.remove_contact(contactName) - } - } - - DefaultButton { - text: qsTr("No") - - onClicked: remove_contact_modal.close() - } - } - } - } - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookAddContactAddressModal.qml b/atomic_defi_design/Dex/Wallet/AddressBookAddContactAddressModal.qml deleted file mode 100644 index adb9f3629..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookAddContactAddressModal.qml +++ /dev/null @@ -1,211 +0,0 @@ -// Qt Imports -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 //> ToolTip - -// Project Imports -import "../Constants" -import App 1.0 -import "../Components" -import Dex.Themes 1.0 as Dex - -// Contact address entry creation/edition modal -MultipageModal -{ - id: root - - property var contactModel - - // Address Creation (false) or Edition (true) mode. - property bool isEdition: false - - property alias walletType: wallet_type_list_modal.selected_wallet_type // The selected wallet type that will be associated this new address entry. - property alias key: contact_new_address_key.text // The entered key that will be associated to this new address entry. - property alias value: contact_new_address_value.text // The entered address value that will be associated to this new address entry. - - // These properties are required in edition mode since we need to wipe out old address entry. - property string oldWalletType - property string oldKey - property string oldValue - - function retrieveWalletTypeTicker() - { - switch (walletType) - { - case "QRC-20": return "QTUM"; - case "BEP-20": return "BNB"; - case "ERC-20": return "ETH"; - case "Smart Chain": return "KMD"; - case "SLP": return "BCH"; - } - - let coinInfo = API.app.portfolio_pg.global_cfg_mdl.get_coin_info(walletType); - if (coinInfo.has_parent_fees_ticker) - return coinInfo.fees_ticker; - return walletType - } - - width: 600 - - Component.onCompleted: API.app.wallet_pg.validate_address_data = {} - Component.onDestruction: API.app.wallet_pg.validate_address_data = {} - - MultipageModalContent - { - Layout.topMargin: 5 - Layout.fillWidth: true - - titleText: isEdition ? qsTr("Edit address entry") : qsTr("Create a new address") - - // Wallet Type Selector - DefaultButton - { - Layout.fillWidth: true - text: qsTr("Selected wallet: %1").arg(walletType !== "" ? walletType : qsTr("NONE")) - onClicked: wallet_type_list_modal.open() - } - - // Address Key Field - DefaultTextField - { - id: contact_new_address_key - - Layout.topMargin: 5 - Layout.fillWidth: true - - placeholderText: qsTr("Enter a name") - - onTextChanged: - { - const max_length = 30 - if (text.length > max_length) - text = text.substring(0, max_length) - } - - // Error tooltip when key already exists. - DefaultTooltip - { - id: key_already_exists_tooltip - visible: false - contentItem: DefaultText { text_value: qsTr("This key already exists.") } - } - } - - // Address Value Field - DefaultTextField - { - id: contact_new_address_value - - Layout.topMargin: 5 - implicitWidth: parent.width - - placeholderText: qsTr("Enter the address") - - onTextChanged: - { - const max_length = 50 - if (text.length > max_length) - text = text.substring(0, max_length) - } - } - - DefaultText - { - id: invalidAddressMsgLabel - Layout.fillWidth: true - color: Dex.CurrentTheme.noColor - wrapMode: DexLabel.Wrap - } - - HorizontalLine { Layout.fillWidth: true; Layout.topMargin: 32 } - - footer: - [ - DefaultButton - { - Layout.preferredWidth: 120 - visible: !API.app.wallet_pg.convert_address_busy && API.app.wallet_pg.validate_address_data.convertible ? API.app.wallet_pg.validate_address_data.convertible : false - text: qsTr("Convert") - onClicked: API.app.wallet_pg.convert_address(contact_new_address_value.text, retrieveWalletTypeTicker(), API.app.wallet_pg.validate_address_data.to_address_format); - }, - - DefaultButton - { - id: validateButton - enabled: key.length > 0 && value.length > 0 && walletType !== "" && !API.app.wallet_pg.validate_address_busy - text: qsTr("Validate") - onClicked: API.app.wallet_pg.validate_address(contact_new_address_value.text, retrieveWalletTypeTicker()) - }, - - DefaultButton - { - text: qsTr("Cancel") - onClicked: root.close() - } - ] - - Connections - { - target: API.app.wallet_pg - - function onConvertAddressBusyChanged() - { - if (API.app.wallet_pg.convert_address_busy) // Currently converting entered address - { - return; - } - - contact_new_address_value.text = API.app.wallet_pg.converted_address - API.app.wallet_pg.validate_address_data = {} - invalidAddressMsgLabel.text = "" - } - - function onValidateAddressBusyChanged() - { - if (API.app.wallet_pg.validate_address_busy) // Currently checking entered address - { - return; - } - - if (!API.app.wallet_pg.validate_address_data.is_valid) // Entered address is invalid. - { - invalidAddressMsgLabel.text = API.app.wallet_pg.validate_address_data.reason - return; - } - - if (isEdition) // Removes old address entry before if we are in edition mode. - { - console.debug("AddressBook: Replacing address %1:%2:%3 of contact %4" - .arg(oldWalletType).arg(oldKey).arg(oldValue).arg(contactModel.name)) - contactModel.remove_address_entry(oldWalletType, oldKey); - } - - var create_address_result = contactModel.add_address_entry(walletType, key, value); - if (create_address_result === true) - { - console.debug("AddressBook: Address %1:%2:%3 created for contact %4" - .arg(walletType).arg(key).arg(value).arg(contactModel.name)) - root.close() - } - else - { - console.debug("AddressBook: Failed to create address for contact %1: %2 key already exists" - .arg(contactModel.name).arg(key)) - key_already_exists_tooltip.visible = true - } - } - } - - ModalLoader - { - id: wallet_type_list_modal - - property string selected_wallet_type: "" - - sourceComponent: AddressBookWalletTypeListModal - { - onSelected_wallet_typeChanged: wallet_type_list_modal.selected_wallet_type = selected_wallet_type - } - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookEditContactModal.qml b/atomic_defi_design/Dex/Wallet/AddressBookEditContactModal.qml deleted file mode 100644 index 20c6cbb61..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookEditContactModal.qml +++ /dev/null @@ -1,601 +0,0 @@ -// Qt Imports -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtQuick.Controls.Universal 2.15 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -// Deps Imports -import Qaterial 1.0 as Qaterial - -// Project Imports -import "../Components" -import "../Constants" -import App 1.0 -import Dex.Themes 1.0 as Dex - -MultipageModal -{ - id: root - - property var contactModel - - function trySend(wallet_type, address) - { - // Checks if the selected wallet type is a coin type instead of a coin. - if (API.app.portfolio_pg.global_cfg_mdl.is_coin_type(wallet_type)) - { - send_selector.coin_type = wallet_type - send_selector.address = address - send_selector.open() - } - - // Checks if the coin is currently enabled. - else if (!API.app.portfolio_pg.is_coin_enabled(wallet_type)) - { - enable_coin_modal.coin_name = wallet_type - enable_coin_modal.open() - } - - // Checks if the coin has balance. - else if (parseFloat(API.app.get_balance(wallet_type)) === 0) cannot_send_modal.open() - - // If the coin has balance and is enabled, opens the send modal. - else - { - API.app.wallet_pg.ticker = wallet_type - send_modal.address = address - send_modal.open() - } - } - - width: 760 - - onClosed: contactModel.reload() - - MultipageModalContent - { - titleText: qsTr("Edit contact") - - // Contact name section - TextFieldWithTitle - { - id: name_input - Layout.fillWidth: true - title: qsTr("Contact Name") - field.placeholderText: qsTr("Enter a contact name") - field.text: contactModel.name - field.onTextChanged: - { - const max_length = 50 - if (field.text.length > max_length) - field.text = field.text.substring(0, max_length) - } - } - - HorizontalLine { Layout.fillWidth: true } - - // Wallets Information - ColumnLayout - { - Layout.topMargin: 10 - Layout.fillWidth: true - - // Title - TitleText { text: qsTr("Address List") } - - DefaultTextField - { - Layout.topMargin: 10 - Layout.fillWidth: true - - placeholderText: qsTr("Search for an address entry.") - - onTextChanged: contactModel.proxy_filter.search_expression = text - Component.onDestruction: contactModel.proxy_filter.search_expression = "" - } - - // Addresses Table - TableView - { - id: walletInfoTable - - property int _typeColWidth: 90 - property int _keyColWidth: 70 - property int _addressColWidth: 320 - property int _actionsColWidth: 100 - - model: contactModel.proxy_filter - - Layout.topMargin: 15 - Layout.fillWidth: true - - backgroundVisible: false - frameVisible: false - - headerDelegate: RowLayout - { - Layout.preferredWidth: styleData.column === 0 ? walletInfoTable._typeColWidth : - styleData.column === 1 ? walletInfoTable._keyColWidth : - styleData.column === 2 ? walletInfoTable._addressColWidth : - walletInfoTable._actionsColWidth - - Item - { - Layout.fillWidth: true - height: 20 - - DefaultText - { - anchors.verticalCenter: parent.verticalCenter - text: styleData.value - } - - VerticalLine - { - visible: styleData.column !== 3 - Layout.alignment: Qt.AlignRight - Layout.fillHeight: true - } - } - } - - rowDelegate: DefaultRectangle - { - height: 37; radius: 0 - color: styleData.selected ? Dex.CurrentTheme.accentColor: styleData.alternate ? Dex.CurrentTheme.backgroundColor : Dex.CurrentTheme.backgroundColorDeep - } - - TableViewColumn // Type Column - { - width: walletInfoTable._typeColWidth - - role: "address_type" - title: qsTr("Type") - - resizable: false - movable: false - - delegate: RowLayout - { - width: walletInfoTable._typeColWidth - DexLabel - { - Layout.preferredWidth: parent.width - 10 - Layout.leftMargin: 3 - text: styleData.row >= 0 ? styleData.value : "" - font.pixelSize: Style.textSizeSmall3 - elide: Text.ElideRight - } - - VerticalLine - { - Layout.alignment: Qt.AlignRight - Layout.fillHeight: true - } - } - } - - TableViewColumn // Key Column - { - width: walletInfoTable._keyColWidth - - role: "address_key" - title: qsTr("Key") - - resizable: false - movable: false - - delegate: RowLayout - { - width: walletInfoTable._keyColWidth - DefaultText - { - Layout.preferredWidth: parent.width - 10 - Layout.leftMargin: 3 - text: styleData.row >= 0 ? styleData.value : "" - font.pixelSize: Style.textSizeSmall3 - elide: Text.ElideRight - } - - VerticalLine - { - Layout.alignment: Qt.AlignRight - Layout.fillHeight: true - } - } - } - - TableViewColumn - { - width: walletInfoTable._addressColWidth - - role: "address_value" - title: qsTr("Address") - - resizable: false - movable: false - - delegate: RowLayout - { - width: walletInfoTable._addressColWidth - DexLabel - { - Layout.preferredWidth: parent.width - 10 - Layout.leftMargin: 3 - text: styleData.row >= 0 ? styleData.value : "" - font.pixelSize: Style.textSizeSmall3 - elide: Text.ElideRight - } - - VerticalLine - { - Layout.alignment: Qt.AlignRight - Layout.fillHeight: true - } - } - } - - TableViewColumn // Actions Column - { - width: walletInfoTable._actionsColWidth - title: qsTr("Actions") - - resizable: false - movable: false - - delegate: RowLayout - { - spacing: 4 - width: walletInfoTable._actionsColWidth - - Qaterial.OutlineButton // Edit Address Button - { - Layout.leftMargin: 2 - implicitHeight: 20 - implicitWidth: 20 - outlined: false - - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 20 - source: Qaterial.Icons.leadPencil - color: Dex.CurrentTheme.foregroundColor - } - - onClicked: - { - address_edition_modal.walletType = model.address_type; - address_edition_modal.key = model.address_key; - address_edition_modal.value = model.address_value; - address_edition_modal.open(); - } - } - - Qaterial.OutlineButton // Delete Button - { - implicitHeight: 20 - implicitWidth: 20 - outlined: false - - onClicked: - { - removeAddressEntryModal.addressKey = model.address_key; - removeAddressEntryModal.addressType = model.address_type; - removeAddressEntryModal.contactModel = contactModel; - removeAddressEntryModal.open(); - } - - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 20 - source: Qaterial.Icons.trashCan - color: Dex.CurrentTheme.noColor - } - } - - Qaterial.OutlineButton // Copy Clipboard Button - { - implicitHeight: 20 - implicitWidth: 20 - outlined: false - - onClicked: API.qt_utilities.copy_text_to_clipboard(model.address_value) - - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 20 - source: Qaterial.Icons.contentCopy - color: Dex.CurrentTheme.foregroundColor - } - } - - Qaterial.OutlineButton // Send Button - { - implicitHeight: 20 - implicitWidth: 20 - outlined: false - - onClicked: trySend(model.address_type, model.address_value) - - Qaterial.ColorIcon - { - anchors.centerIn: parent - iconSize: 20 - source: Qaterial.Icons.send - color: Dex.CurrentTheme.foregroundColor - } - } - } - } - } - - // New Address Button - DefaultButton - { - Layout.preferredWidth: 140 - text: qsTr("Add Address") - onClicked: address_creation_modal.open(); - } - - ModalLoader { - id: address_creation_modal - sourceComponent: AddressBookAddContactAddressModal { - contactModel: root.contactModel - } - } - - ModalLoader { - id: address_edition_modal - - property string walletType - property string key - property string value - - onLoaded: { - item.oldWalletType = walletType - item.walletType = walletType - - item.oldKey = key - item.key = key - - item.oldValue = value - item.value = value - } - - sourceComponent: AddressBookAddContactAddressModal { - contactModel: root.contactModel - isEdition: true - } - } - } - - HorizontalLine - { - Layout.fillWidth: true - } - - // Categories Section Title - TitleText - { - Layout.topMargin: 10 - text: qsTr("Tags") - } - - // Categories (Tags) List - Flow - { - Layout.fillWidth: true - spacing: 10 - Repeater - { - id: category_repeater - model: contactModel.categories - - DexAppButton - { - Layout.alignment: Qt.AlignLeft - Layout.leftMargin: 4 - border.width: 0 - iconSource: Qaterial.Icons.closeOctagon - text: modelData - onClicked: contactModel.remove_category(modelData); - } - } - - // Category adding form opening button - DexAppButton - { - Layout.leftMargin: 10 - width: height - text: qsTr("+") - - onClicked: add_category_modal.open() - } - } - - HorizontalLine { Layout.fillWidth: true } - - // Actions on current contact - RowLayout - { - Layout.alignment: Qt.AlignBottom | Qt.AlignRight - Layout.rightMargin: 15 - - // Validate (Save) Changes - DefaultButton - { - text: qsTr("Confirm") - onClicked: - { - contactModel.name = name_input.field.text - contactModel.save() - root.close(); - } - } - - // Cancel Changes - DefaultButton - { - text: qsTr("Cancel") - onClicked: root.close() - } - } - - // Wallet Type List Modal - ModalLoader - { - id: wallet_type_list_modal - - property string selected_wallet_type: "" - - sourceComponent: AddressBookWalletTypeListModal - { - onSelected_wallet_typeChanged: wallet_type_list_modal.selected_wallet_type = selected_wallet_type - } - } - - // Enable Coin Modal - ModalLoader - { - property string coin_name - - id: enable_coin_modal - - sourceComponent: MultipageModal - { - MultipageModalContent - { - Layout.fillWidth: true - titleText: qsTr("Enable " + coin_name) - - DefaultText - { - text: qsTr("The selected address belongs to a disabled coin, you need to enabled it before sending.") - } - - Row - { - // Enable button - PrimaryButton - { - text: qsTr("Enable") - - onClicked: - { - API.app.enable_coin(coin_name) - enable_coin_modal.close() - } - } - - // Cancel button - DefaultButton - { - Layout.rightMargin: 5 - text: qsTr("Cancel") - - onClicked: enable_coin_modal.close() - } - } - } - } - } - - // Send Selector modal - ModalLoader - { - id: send_selector - - property string coin_type - property string address - - onLoaded: - { - item.coin_type = coin_type - item.address = address - } - - sourceComponent: AddressBookSendWalletSelector {} - } - - // Send Modal - ModalLoader - { - property string address - - id: send_modal - - onLoaded: item.address_field.text = address - - sourceComponent: SendModal - { - address_field.enabled: false - } - } - - // Cannot Send Modal - ModalLoader - { - id: cannot_send_modal - - sourceComponent: MultipageModal - { - MultipageModalContent - { - titleText: qsTr("Cannot send to this address") - - DefaultText - { - text: qsTr("Your balance is empty") - } - - DefaultButton - { - text: qsTr("Ok") - - onClicked: cannot_send_modal.close() - } - } - } - } - - // Remove address entry modal - ModalLoader - { - id: removeAddressEntryModal - - property var contactModel - property string addressKey - property string addressType - - sourceComponent: MultipageModal - { - width: 250 - MultipageModalContent - { - titleText: qsTr("Remove address ?") - - RowLayout - { - DexButton { text: qsTr("Yes"); onClicked: { contactModel.remove_address_entry(addressType, addressKey); close(); } } - DexButton { text: qsTr("No"); onClicked: close() } - } - } - } - } - - // Category (Tag) Adding Modal - ModalLoader - { - id: add_category_modal - - onLoaded: item.contactModel = root.contactModel - - sourceComponent: AddressBookNewContactCategoryModal {} - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookNewContactCategoryModal.qml b/atomic_defi_design/Dex/Wallet/AddressBookNewContactCategoryModal.qml deleted file mode 100644 index ba09b631d..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookNewContactCategoryModal.qml +++ /dev/null @@ -1,77 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../Components" -import "../Constants" -import App 1.0 - -//! New category form -MultipageModal -{ - id: root - width: 500 - - property var contactModel - - MultipageModalContent - { - titleText: qsTr("Add a new tag") - - DefaultTextField - { - id: name_input - - Layout.fillWidth: true - - placeholderText: qsTr("Enter the tag name") - onTextChanged: - { - const max_length = 14 - if(text.length > max_length) - text = text.substring(0, max_length) - } - - // Error tooltip when category name already exists. - DefaultTooltip - { - id: alrady_exists_tooltip - visible: false - contentItem: DefaultText - { - text_value: qsTr("This contact already has this tag") - } - } - } - - footer: - [ - DefaultButton - { - Layout.preferredWidth: 90 - Layout.preferredHeight: 40 - text: qsTr("Add") - onClicked: - { - if (!contactModel.add_category(name_input.text)) alrady_exists_tooltip.visible = true - else - { - name_input.text = "" - add_category_modal.close() - } - } - }, - - DefaultButton - { - Layout.preferredWidth: 90 - Layout.preferredHeight: 40 - text: qsTr("Cancel") - onClicked: { - name_input.text = "" - add_category_modal.close() - } - } - ] - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookNewContactModal.qml b/atomic_defi_design/Dex/Wallet/AddressBookNewContactModal.qml deleted file mode 100644 index 4ecd0096c..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookNewContactModal.qml +++ /dev/null @@ -1,81 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../Components" -import "../Constants" -import App 1.0 - -MultipageModal { - id: root - width: 500 - - MultipageModalContent { - Layout.topMargin: 5 - - titleText: qsTr("Create a new contact") - - // Contact name input. - DefaultTextField { - id: name_input - placeholderText: qsTr("Enter the contact name") - width: 150 - onTextChanged: { - const max_length = 50 - if(text.length > max_length) - text = text.substring(0, max_length) - } - - // Error tooltip when contact name already exists. - DefaultTooltip { - id: contact_alrady_exists_tooltip - visible: false - contentItem: DefaultText { - text_value: qsTr("This contact name already exists.") - } - } - } - - HorizontalLine { - Layout.fillWidth: true - color: Style.colorWhite8 - } - - // Footer - RowLayout { - Layout.alignment: Qt.AlignBottom | Qt.AlignRight - - // Validate button. - PrimaryButton { - text: qsTr("Confirm") - enabled: name_input.text.length > 0 - onClicked: { - if (name_input.text.length == 0) - { - return; - } - - var create_contact_result = API.app.addressbook_pg.model.add_contact(name_input.text.toString()); - - if (create_contact_result === false) - { - contact_alrady_exists_tooltip.visible = true; - } - else - { - root.close(); - } - } - } - - // Cancel button. - DefaultButton { - text: qsTr("Cancel") - - onClicked: root.close() - } - } - } - - onClosed: name_input.text = "" -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookSendWalletSelector.qml b/atomic_defi_design/Dex/Wallet/AddressBookSendWalletSelector.qml deleted file mode 100644 index b6135e289..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookSendWalletSelector.qml +++ /dev/null @@ -1,42 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../Components" -import "../Constants" -import App 1.0 - -MultipageModal { - id: root - - property string coin_type - property string address - - width: 400 - - MultipageModalContent { - Layout.fillWidth: true - titleText: qsTr("Choose a valid ") + coin_type + qsTr(" coin") - - Repeater { - model: coin_type == "QRC-20" ? API.app.portfolio_pg.global_cfg_mdl.all_qrc20_proxy : - coin_type == "ERC-20" ? API.app.portfolio_pg.global_cfg_mdl.all_erc20_proxy : - coin_type == "BEP-20" ? API.app.portfolio_pg.global_cfg_mdl.all_bep20_proxy : - API.app.portfolio_pg.global_cfg_mdl.all_smartchains_proxy - - delegate: AddressBookWalletTypeListRow { - Layout.preferredHeight: height - Layout.rightMargin: 30 - Layout.fillWidth: true - - ticker: model.ticker - name: model.name - - onClicked: { - trySend(model.ticker, address) - close() - } - } - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeList.qml b/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeList.qml deleted file mode 100644 index 8f6b749f1..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeList.qml +++ /dev/null @@ -1,143 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 -import QtQuick.Controls.impl 2.15 -import QtQuick.Controls.Universal 2.15 - -import Qaterial 1.0 as Qaterial - -import "../Components" -import "../Constants" -import App 1.0 -import Dex.Themes 1.0 as Dex - -Qaterial.Expandable -{ - id: _root - - property string title - - property string type_title - property string type: "" - property string typeIcon: type - - property var model - - header: Qaterial.ItemDelegate - { - id: _header - - icon.source: General.image_path + "arrow_down.svg" - - onClicked: () => _root.expanded = !_root.expanded - - TitleText - { - anchors.verticalCenter: parent.verticalCenter - leftPadding: 75 - text: title - font.bold: true - } - } - - delegate: Column - { - AddressBookWalletTypeListRow - { - enabled: type !== "" - visible: type !== "" - - icon_source: General.coinTypeIcon(typeIcon) - - width: _root.width - - name: type_title - ticker: type_title - - onClicked: onTypeSelect(type) - } - - Repeater - { - model: _root.model - - delegate: AddressBookWalletTypeListRow - { - width: _root.width - - name: model.name - ticker: model.ticker - - onClicked: - { - if (!API.app.portfolio_pg.global_cfg_mdl.get_coin_info(model.ticker).is_enabled) - _tooltip.open() - else - onTypeSelect(ticker) - } - - DefaultTooltip - { - id: _tooltip - - width: 250 - anchors.centerIn: parent - - dim: true - modal: true - closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside - - contentItem: DexLabelUnlinked - { - text_value: qsTr("%1 is not enabled - You need to enable it before adding an address. Enable it ?
Yes - No").arg(model.ticker) - wrapMode: DefaultText.Wrap - width: 350 - onLinkActivated: - { - if (link === "#no") _tooltip.close() - else - { - if (API.app.enable_coins([model.ticker]) === false) - cannot_enable_coin_modal.open() - else - { - color = Dex.CurrentTheme.buttonTextDisabledColor - opacity = 0.8 - _coinIsEnabling.visible = true - } - } - } - } - - BusyIndicator - { - id: _coinIsEnabling - - visible: false - enabled: visible - anchors.fill: parent - - Connections - { - target: API.app.portfolio_pg.global_cfg_mdl.all_disabled_proxy - - function onLengthChanged() - { - _tooltip.close() - } - } - } - - ModalLoader - { - property string coin_to_enable_ticker: model.ticker - id: cannot_enable_coin_modal - sourceComponent: CannotEnableCoinModal { coin_to_enable_ticker: cannot_enable_coin_modal.coin_to_enable_ticker } - } - - delay: 200 - } - } - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListModal.qml b/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListModal.qml deleted file mode 100644 index 5590cd368..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListModal.qml +++ /dev/null @@ -1,137 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 - -import Qaterial 1.0 as Qaterial - -import "../Components" -import "../Constants" -import App 1.0 - -MultipageModal -{ - readonly property var glbCoinsCfgModel: API.app.portfolio_pg.global_cfg_mdl - property alias selected_wallet_type: wallet_list.selected_wallet_type - - function resetModal() - { - _searchbar.text = "" - filterWallets(_searchbar.text) - } - - function filterWallets(text) - { - _qrc20Expandable.model.setFilterFixedString(text) - _erc20Expandable.model.setFilterFixedString(text) - _bep20Expandable.model.setFilterFixedString(text) - _scExpandable.model.setFilterFixedString(text) - _utxoExpandable.model.setFilterFixedString(text) - - // Expands type lists if searchbar is not empty - _qrc20Expandable.expanded = text !== "" - _erc20Expandable.expanded = text !== "" - _bep20Expandable.expanded = text !== "" - _scExpandable.expanded = text !== "" - _utxoExpandable.expanded = text !== "" - } - - function onTypeSelect(type_or_ticker) - { - selected_wallet_type = type_or_ticker - close() - } - - width: 600 - - onOpened: _searchbar.forceActiveFocus() - onClosed: resetModal() - - MultipageModalContent - { - id: wallet_list - - property string selected_wallet_type: "" - - titleText: qsTr("Select wallet type") - - // Search input - DefaultTextField - { - Layout.rightMargin: 10 - id: _searchbar - - Layout.fillWidth: true - placeholderText: qsTr("Search") - - onTextChanged: filterWallets(text) - } - - AddressBookWalletTypeList - { - id: _qrc20Expandable - - Layout.topMargin: 20 - Layout.rightMargin: 10 - Layout.fillWidth: true - Layout.fillHeight: true - - title: "QRC-20 coins" - type_title: "QRC-20" - type: "QRC-20" - - model: glbCoinsCfgModel.all_qrc20_proxy - } - - AddressBookWalletTypeList - { - id: _erc20Expandable - Layout.rightMargin: 10 - Layout.fillWidth: true - - title: "ERC-20 coins" - type_title: "ERC-20" - type: "ERC-20" - - model: glbCoinsCfgModel.all_erc20_proxy - } - - AddressBookWalletTypeList - { - id: _bep20Expandable - Layout.rightMargin: 10 - Layout.fillWidth: true - - title: "BEP-20 coins" - type_title: "BEP-20" - type: "BEP-20" - typeIcon: "BNB" - - model: glbCoinsCfgModel.all_bep20_proxy - } - - AddressBookWalletTypeList - { - id: _scExpandable - Layout.rightMargin: 10 - Layout.fillWidth: true - - title: "Smart Chain coins" - type_title: "Smart Chain" - type: "Smart Chain" - - model: glbCoinsCfgModel.all_smartchains_proxy - } - - AddressBookWalletTypeList - { - id: _utxoExpandable - - Layout.rightMargin: 10 - Layout.fillWidth: true - - title: "UTXO coins" - type_title: "UTXO" - - model: glbCoinsCfgModel.all_utxo_proxy - } - } -} diff --git a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListRow.qml b/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListRow.qml deleted file mode 100644 index 5b9c597a6..000000000 --- a/atomic_defi_design/Dex/Wallet/AddressBookWalletTypeListRow.qml +++ /dev/null @@ -1,34 +0,0 @@ -import QtQuick 2.15 -import QtQuick.Layouts 1.15 -import QtQuick.Controls 2.15 - -import "../Components" -import "../Constants" -import App 1.0 - -ItemDelegate { - property string ticker - property string name - - property alias icon_source: icon.source - - height: 50 - - RowLayout { - DefaultImage { - id: icon - Layout.topMargin: 10 - Layout.leftMargin: 30 - Layout.alignment: Qt.AlignVCenter - source: General.coinIcon(ticker) - Layout.preferredWidth: 32 - Layout.preferredHeight: 32 - } - - DexLabel { - Layout.topMargin: 10 - text: " " + name + " (" + ticker + ")" - } - } - -} diff --git a/atomic_defi_design/Dex/Wallet/AddressList.qml b/atomic_defi_design/Dex/Wallet/AddressList.qml index dd0067b36..c8aa9f669 100644 --- a/atomic_defi_design/Dex/Wallet/AddressList.qml +++ b/atomic_defi_design/Dex/Wallet/AddressList.qml @@ -10,9 +10,11 @@ import Dex.Themes 1.0 as Dex ColumnLayout { id: root + property string linkURL: "" + property string onCopyNotificationTitle: "" property alias title: title.text property alias model: list.model - property real addressFontSize: DefaultText.font.pixelSize + property real addressFontSize: 12 TitleText { @@ -29,11 +31,14 @@ ColumnLayout clip: true - delegate: DefaultText + delegate: DefaultTextEdit { + id: address_text text_value: model.modelData privacy: true font.pixelSize: root.addressFontSize + linkURL: root.linkURL + onCopyNotificationTitle: root.onCopyNotificationTitle } } } diff --git a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml index 9647f72f7..6a6103348 100644 --- a/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml +++ b/atomic_defi_design/Dex/Wallet/ClaimRewardsModal.qml @@ -5,6 +5,7 @@ import QtQuick.Controls 2.15 import "../Components" import "../Constants" import App 1.0 +import Dex.Components 1.0 as Dex MultipageModal { @@ -107,19 +108,24 @@ MultipageModal // Inside modal width: 1200 - MultipageModalContent { + + MultipageModalContent + { titleText: qsTr("Claim your %1 reward?", "TICKER").arg(api_wallet_page.ticker) - DefaultBusyIndicator { + DefaultBusyIndicator + { visible: !can_claim || is_broadcast_busy Layout.alignment: Qt.AlignCenter } - RowLayout { + RowLayout + { visible: can_claim - Layout.fillWidth: true - DexLabel { + + Dex.Text + { Layout.fillWidth: true text_value: { @@ -137,62 +143,56 @@ MultipageModal } } - PrimaryButton { + Dex.Button + { text: qsTr("Refresh") - onClicked: prepareClaimRewards() - enabled: can_claim + onClicked: prepareClaimRewards() } } - DefaultText { + Dex.Text + { text_value: General.cex_icon + ' ' + qsTr('Read more about KMD active users rewards') + '' font.pixelSize: Style.textSizeSmall2 } // List header - Item { + Row + { visible: can_claim Layout.topMargin: 25 Layout.fillWidth: true - - height: 40 + Layout.preferredHeight: 40 // Price - DefaultText { + Dex.Text + { id: utxo_header font.pixelSize: Style.textSizeSmall4 - text_value: qsTr("UTXO") - font.weight: Font.Medium horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.000 - + width: parent.width * 0.060 anchors.verticalCenter: parent.verticalCenter } // Amount - DefaultText { + Dex.Text + { id: amount_header - text_value: qsTr("Amount") - font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: utxo_header.horizontalAlignment - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.060 - + width: parent.width * 0.165 anchors.verticalCenter: parent.verticalCenter } // Reward - DefaultText { + Dex.Text + { id: reward_header text_value: qsTr("Reward") @@ -200,15 +200,13 @@ MultipageModal font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.225 - + width: parent.width * 0.235 anchors.verticalCenter: parent.verticalCenter } // Accruing start - DefaultText { + Dex.Text + { id: accruing_start_header text_value: qsTr("Accruing Start") @@ -216,15 +214,13 @@ MultipageModal font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.400 - + width: parent.width * 0.150 anchors.verticalCenter: parent.verticalCenter } // Accruing Stop - DefaultText { + Dex.Text + { id: accruing_stop_header text_value: qsTr("Accruing Stop") @@ -232,15 +228,13 @@ MultipageModal font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.550 - + width: parent.width * 0.150 anchors.verticalCenter: parent.verticalCenter } // Time Left - DefaultText { + Dex.Text + { id: time_left_header text_value: qsTr("Time Left") @@ -248,15 +242,13 @@ MultipageModal font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.700 - + width: parent.width * 0.120 anchors.verticalCenter: parent.verticalCenter } // Error - DefaultText { + Dex.Text + { id: error_header text_value: qsTr("Error") @@ -264,166 +256,154 @@ MultipageModal font.pixelSize: utxo_header.font.pixelSize font.weight: utxo_header.font.weight horizontalAlignment: Text.AlignLeft - - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.820 - anchors.verticalCenter: parent.verticalCenter } - - // Line - HorizontalLine { - width: parent.width - color: Style.colorWhite5 - anchors.bottom: parent.bottom - } } - DefaultListView { - visible: can_claim + // Separator + HorizontalLine + { + Layout.fillWidth: true + } + Dex.ListView + { id: list + visible: can_claim Layout.fillWidth: true Layout.fillHeight: true Layout.maximumHeight: 500 clip: true - model: empty_data ? [] : - prepare_claim_rewards_result.kmd_rewards_info.result - - delegate: Item { - width: root.width - height: utxo_value.font.pixelSize * 1.5 - - // UTXO - DefaultText { - id: utxo_value - - anchors.left: parent.left - anchors.leftMargin: utxo_header.anchors.leftMargin + model: empty_data ? [] : prepare_claim_rewards_result.kmd_rewards_info.result - font.pixelSize: utxo_header.font.pixelSize - - text_value: "#" + (index + 1) - anchors.verticalCenter: parent.verticalCenter - } - - // Amount - DefaultText { - id: amount_value + delegate: Column + { + width: list.width - anchors.left: parent.left - anchors.leftMargin: amount_header.anchors.leftMargin + Row + { + width: list.width - font.pixelSize: utxo_value.font.pixelSize + // UTXO + Dex.Text + { + id: utxo_value - text_value: modelData.amount - anchors.verticalCenter: parent.verticalCenter - } + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.06 - // Reward - DefaultText { - id: reward_value + text: "#" + (index + 1) + font.pixelSize: utxo_header.font.pixelSize + } - anchors.left: parent.left - anchors.leftMargin: reward_header.anchors.leftMargin + // Amount + Dex.Text + { + id: amount_value - font.pixelSize: utxo_value.font.pixelSize + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.165 - text_value: modelData.accrued_rewards.Accrued || "-" - anchors.verticalCenter: parent.verticalCenter - } + font.pixelSize: utxo_value.font.pixelSize + text: modelData.amount + } - // Accruing Start - DefaultText { - id: accruing_start_value + // Reward + Dex.Text + { + id: reward_value - anchors.left: parent.left - anchors.leftMargin: accruing_start_header.anchors.leftMargin + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.235 - font.pixelSize: utxo_value.font.pixelSize + font.pixelSize: utxo_value.font.pixelSize + text: modelData.accrued_rewards.Accrued || "-" + } - text_value: modelData.accrue_start_at_human_date || "-" - anchors.verticalCenter: parent.verticalCenter - } + // Accruing Start + Dex.Text + { + id: accruing_start_value - // Accruing Stop - DefaultText { - id: accruing_stop_value + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.150 - anchors.left: parent.left - anchors.leftMargin: accruing_stop_header.anchors.leftMargin + font.pixelSize: utxo_value.font.pixelSize + text: modelData.accrue_start_at_human_date || "-" + } - font.pixelSize: utxo_value.font.pixelSize + // Accruing Stop + Dex.Text + { + id: accruing_stop_value - text_value: modelData.accrue_stop_at_human_date || "-" - anchors.verticalCenter: parent.verticalCenter - } + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.150 - // Time Left - DefaultText { - id: time_left_value + font.pixelSize: utxo_value.font.pixelSize + text: modelData.accrue_stop_at_human_date || "-" + } - anchors.left: parent.left - anchors.leftMargin: time_left_header.anchors.leftMargin + // Time Left + Dex.Text + { + id: time_left_value - font.pixelSize: utxo_value.font.pixelSize + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.120 - text_value: modelData.accrue_stop_at ? General.secondsToTimeLeft(Date.now()/1000, modelData.accrue_stop_at) : '-' - anchors.verticalCenter: parent.verticalCenter - } + font.pixelSize: utxo_value.font.pixelSize + text: modelData.accrue_stop_at ? General.secondsToTimeLeft(Date.now()/1000, modelData.accrue_stop_at) : '-' + } - // Error - DefaultText { - id: error_value - - anchors.left: parent.left - anchors.leftMargin: error_header.anchors.leftMargin - - font.pixelSize: utxo_value.font.pixelSize - - text_value: { - let val = modelData.accrued_rewards.NotAccruedReason - if(val === null || val === undefined) return "-" - - switch(val) { - case "LocktimeNotSet": - val = qsTr("Locktime is not set") - break - case "LocktimeLessThanThreshold": - val = qsTr("Locktime is less than the threshold") - break - case "UtxoHeightGreaterThanEndOfEra": - val = qsTr("UTXO height is greater than end of the era") - break - case "UtxoAmountLessThanTen": - val = qsTr("UTXO amount is less than 10") - break - case "OneHourNotPassedYet": - val = qsTr("One hour did not pass yet") - break - case "TransactionInMempool": - val = qsTr("Transaction is in mempool") - break - default: - val = qsTr("Unknown problem") - break + // Error + Dex.Text + { + id: error_value + + anchors.verticalCenter: parent.verticalCenter + width: parent.width * 0.12 + + font.pixelSize: utxo_value.font.pixelSize + text: + { + let val = modelData.accrued_rewards.NotAccruedReason + if (val === null || val === undefined) return "-" + + switch (val) + { + case "LocktimeNotSet": + val = qsTr("Locktime is not set") + break + case "LocktimeLessThanThreshold": + val = qsTr("Locktime is less than the threshold") + break + case "UtxoHeightGreaterThanEndOfEra": + val = qsTr("UTXO height is greater than end of the era") + break + case "UtxoAmountLessThanTen": + val = qsTr("UTXO amount is less than 10") + break + case "OneHourNotPassedYet": + val = qsTr("One hour did not pass yet") + break + case "TransactionInMempool": + val = qsTr("Transaction is in mempool") + break + default: + val = qsTr("Unknown problem") + break + } + + return "❌ " + val } - - return "❌ " + val } - - anchors.verticalCenter: parent.verticalCenter } - // Line - HorizontalLine { - visible: empty_data ? false : - prepare_claim_rewards_result.kmd_rewards_info.result && - index !== prepare_claim_rewards_result.kmd_rewards_info.result.length - 1 + HorizontalLine + { width: parent.width - color: Style.colorWhite9 - anchors.bottom: parent.bottom } } } diff --git a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml index 7f4abe232..55753e5d8 100644 --- a/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml +++ b/atomic_defi_design/Dex/Wallet/EnableCoinModal.qml @@ -36,7 +36,6 @@ MultipageModal filterCoins(""); setCheckState(false); coin_cfg_model.checked_nb = 0; - input_coin_filter.forceActiveFocus(); } onClosed: @@ -50,6 +49,8 @@ MultipageModal { titleText: qsTr("Enable assets") titleAlignment: Qt.AlignHCenter + titleTopMargin: 15 + topMarginAfterTitle: 15 // Search input SearchField @@ -62,41 +63,33 @@ MultipageModal Layout.fillWidth: true Layout.preferredHeight: 44 textField.placeholderText: qsTr("Search asset") - + textField.forceFocus: true textField.onTextChanged: filterCoins() } - Item + RowLayout { - Layout.alignment: Qt.AlignHCenter - Layout.topMargin: 5 + spacing: 0 + Layout.topMargin: 10 Layout.fillWidth: true - Layout.preferredHeight: 25 + Layout.preferredHeight: 24 - DexCheckBox + DefaultCheckBox { id: _selectAllCheckBox + Layout.fillWidth: true - visible: list.visible - checked: coin_cfg_model.checked_nb === setting_modal.enableable_coins_count - API.app.portfolio_pg.portfolio_mdl.length - anchors.left: parent.left + spacing: 0 boxWidth: 20 boxHeight: 20 - width: 20 + labelWidth: parent.width - 40 + label.wrapMode: Label.NoWrap + label.leftPadding: 24 - DefaultMouseArea - { - anchors.fill: parent - onClicked: setCheckState(!parent.checked) - } + text: qsTr("Select all assets") + visible: list.visible - DefaultText - { - anchors.left: parent.right - anchors.leftMargin: 5 - anchors.verticalCenter: parent.verticalCenter - text: qsTr("Select all assets") - } + onToggled: root.setCheckState(checked) } } @@ -113,75 +106,100 @@ MultipageModal Layout.preferredHeight: 300 Layout.fillWidth: true - delegate: DexCheckBox + delegate: Item { - readonly property bool backend_checked: model.checked + height: 30 + width: list.width - enabled: _selectAllCheckBox.checked ? checked : true - boxWidth: 20 - boxHeight: 20 - spacing: 0 - - onBackend_checkedChanged: if (checked !== backend_checked) checked = backend_checked - onCheckStateChanged: + RowLayout { - if (checked !== backend_checked) + spacing: 0 + Layout.topMargin: 10 + Layout.fillWidth: true + Layout.preferredHeight: 24 + + DefaultCheckBox { - var data_index = coin_cfg_model.all_disabled_proxy.index(index, 0) - if ((coin_cfg_model.all_disabled_proxy.setData(data_index, checked, Qt.UserRole + 11)) === false) - { - checked = false - } - } - } + id: listInnerRowCheckbox + readonly property bool backend_checked: model.checked - RowLayout { - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.right - spacing:6 + Layout.fillWidth: true - // Icon - DefaultImage - { - id: icon - Layout.leftMargin: 8 - Layout.alignment: Qt.AlignVCenter - source: General.coinIcon(model.ticker) - Layout.preferredWidth: 18 - Layout.preferredHeight: 18 - } - DefaultText - { - Layout.leftMargin: 4 - Layout.alignment: Qt.AlignVCenter - text: model.name + " (" + model.ticker + ")" - } - CoinTypeTag - { - id: typeTag - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - type: model.type - } + spacing: 0 + boxWidth: 20 + boxHeight: 20 + labelWidth: parent.width - 40 - CoinTypeTag - { - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - enabled: General.isIDO(model.ticker) - visible: enabled - type: "IDO" - } + onBackend_checkedChanged: if (checked !== backend_checked) checked = backend_checked + onCheckStateChanged: + { + if (checked !== backend_checked) + { + var data_index = coin_cfg_model.all_disabled_proxy.index(index, 0) + if ((coin_cfg_model.all_disabled_proxy.setData(data_index, checked, Qt.UserRole + 11)) === false) + { + checked = false + } + } + } - CoinTypeTag - { - Layout.leftMargin: 6 - Layout.alignment: Qt.AlignVCenter - enabled: API.app.portfolio_pg.global_cfg_mdl.get_coin_info(model.ticker).is_wallet_only - visible: enabled - type: "WALLET ONLY" + contentItem: RowLayout + { + Layout.alignment: Qt.AlignVCenter + spacing: 0 + + // Icon + DefaultImage + { + id: icon + Layout.leftMargin: 24 + Layout.alignment: Qt.AlignVCenter + source: General.coinIcon(model.ticker) + Layout.preferredWidth: 18 + Layout.preferredHeight: 18 + } + + DefaultText + { + Layout.leftMargin: 4 + Layout.alignment: Qt.AlignVCenter + text: model.name + " (" + model.ticker + ")" + } + + CoinTypeTag + { + id: typeTag + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + type: model.type + } + + CoinTypeTag + { + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + enabled: General.isIDO(model.ticker) + visible: enabled + type: "IDO" + } + + CoinTypeTag + { + Layout.leftMargin: 6 + Layout.alignment: Qt.AlignVCenter + enabled: API.app.portfolio_pg.global_cfg_mdl.get_coin_info(model.ticker).is_wallet_only + visible: enabled + type: "WALLET ONLY" + } + } } } + + DefaultMouseArea + { + anchors.fill: parent + onClicked: listInnerRowCheckbox.checked = !listInnerRowCheckbox.checked + } } } @@ -191,7 +209,7 @@ MultipageModal Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter - DexLabel + DefaultText { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter @@ -211,7 +229,8 @@ MultipageModal { Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true - Layout.preferredHeight: 40 + Layout.topMargin: 10 + Layout.preferredHeight: 60 DexTransparentButton { @@ -226,10 +245,11 @@ MultipageModal setting_modal.open() } } + DexTransparentButton { anchors.right: parent.right - text: qsTr("Add a custom asset to the list") + text: qsTr("Add a custom asset") topPadding: 5 bottomPadding: 5 Layout.preferredHeight: 35 @@ -241,17 +261,17 @@ MultipageModal } } - RowLayout - { - Layout.fillWidth: true + footer: + [ DefaultButton { Layout.preferredWidth: 199 text: qsTr("Close") radius: 20 onClicked: root.close() - } - Item { Layout.fillWidth: true } + }, + Item { Layout.fillWidth: true }, + DexGradientAppButton { Layout.preferredWidth: 199 @@ -259,14 +279,15 @@ MultipageModal enabled: coin_cfg_model.checked_nb > 0 text: qsTr("Enable") radius: 20 + onClicked: { - API.app.enable_coins(coin_cfg_model.get_checked_coins()) - setCheckState(false) + API.app.enable_coins(coin_cfg_model.get_checked_coins()); + root.setCheckState(false); coin_cfg_model.checked_nb = 0 root.close() } } - } + ] } } diff --git a/atomic_defi_design/Dex/Wallet/Main.qml b/atomic_defi_design/Dex/Wallet/Main.qml index 2609058a2..21d8c7bce 100644 --- a/atomic_defi_design/Dex/Wallet/Main.qml +++ b/atomic_defi_design/Dex/Wallet/Main.qml @@ -27,6 +27,7 @@ Item readonly property string headerTextFont: Style.textSize readonly property string headerSmallTitleFont: Style.textSizeSmall4 readonly property string headerSmallFont: Style.textSizeSmall2 + readonly property string addressURL: General.getAddressExplorerURL(api_wallet_page.ticker, current_ticker_infos.address) function loadingPercentage(remaining) { return General.formatPercent((100 * (1 - parseFloat(remaining)/parseFloat(current_ticker_infos.current_block))).toFixed(3), false) @@ -87,7 +88,7 @@ Item Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter } - DexLabel + DefaultText { id: ticker_name Layout.topMargin: 0 @@ -106,7 +107,7 @@ Item Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter spacing: 2 - DexLabel + DefaultText { id: balance_title Layout.alignment: Qt.AlignHCenter @@ -115,7 +116,7 @@ Item color: headerTitleColor } - DexLabel + DefaultText { id: name_value Layout.alignment: Qt.AlignHCenter @@ -142,17 +143,20 @@ Item visible: false //current_ticker_infos.segwit_supported Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter spacing: 2 - DexLabel + + DefaultText { text_value: qsTr("Segwit") Layout.alignment: Qt.AlignLeft font.pixelSize: headerTitleFont color: headerTitleColor } + DefaultSwitch { id: segwitSwitch Layout.alignment: Qt.AlignVCenter + onToggled: { if(parseFloat(current_ticker_infos.balance) > 0) { @@ -180,6 +184,7 @@ Item } } }, + onRejected: function () { app.segwit_on = true API.app.wallet_pg.post_switch_address_mode(!current_ticker_infos.is_segwit_on) @@ -212,7 +217,7 @@ Item Layout.rightMargin: 10 spacing: 5 - DexLabel + DefaultText { id: price text_value: qsTr("Price") @@ -221,7 +226,7 @@ Item font.pixelSize: headerTitleFont } - DexLabel + DefaultText { text_value: { @@ -242,7 +247,7 @@ Item Layout.rightMargin: 10 spacing: 5 - DexLabel + DefaultText { id: change_24hr text_value: qsTr("Change 24hr") @@ -251,7 +256,7 @@ Item font.pixelSize: headerTitleFont } - DexLabel + DefaultText { id: change_24hr_value Layout.alignment: Qt.AlignHCenter @@ -273,7 +278,7 @@ Item Layout.rightMargin: 10 spacing: 5 - DexLabel + DefaultText { id: portfolio_title text_value: qsTr("Porfolio") @@ -282,7 +287,7 @@ Item font.pixelSize: headerTitleFont } - DexLabel + DefaultText { Layout.alignment: Qt.AlignHCenter text_value: @@ -316,10 +321,12 @@ Item ColumnLayout { visible: General.coinContractAddress(api_wallet_page.ticker) !== "" + RowLayout { Layout.alignment: Qt.AlignLeft id: contract_title_row_layout + DefaultImage { id: protocol_img @@ -327,7 +334,8 @@ Item Layout.preferredHeight: 18 Layout.preferredWidth: Layout.preferredHeight } - DexLabel + + DefaultText { id: contract_address_title text_value: General.coinPlatform(api_wallet_page.ticker) + qsTr(" Contract Address") @@ -343,7 +351,8 @@ Item Layout.alignment: Qt.AlignLeft Layout.preferredHeight: General.coinContractAddress(api_wallet_page.ticker) ? headerSmallFont : 0 visible: General.coinContractAddress(api_wallet_page.ticker) !== "" - DexLabel + + DefaultText { id: contract_address text_value: General.coinContractAddress(api_wallet_page.ticker) @@ -353,12 +362,14 @@ Item elide: Text.ElideMiddle wrapMode: Text.NoWrap } + Qaterial.Icon { size: headerTextFont icon: Qaterial.Icons.linkVariant color: contract_linkArea.containsMouse ? headerTextColor : headerTitleColor visible: General.contractURL(api_wallet_page.ticker) != "" - DexMouseArea { + + DefaultMouseArea { id: contract_linkArea anchors.fill: parent hoverEnabled: true @@ -388,7 +399,7 @@ Item Layout.preferredHeight: 48 // Send Button - DexAppButton + DefaultButton { enabled: API.app.wallet_pg.send_available @@ -406,10 +417,10 @@ Item else enable_fees_coin_modal.open() } - Arrow + TransactionArrow { id: arrow_send - up: true + amISender: true anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: 19 @@ -433,10 +444,12 @@ Item Component { id: enable_fees_coin_comp + MultipageModal { id: root width: 300 + MultipageModalContent { titleText: qsTr("Enable %1 ?").arg(coin_to_enable_ticker) @@ -447,6 +460,7 @@ Item { Layout.fillWidth: true text: qsTr("Yes") + onClicked: { if (API.app.enable_coin(coin_to_enable_ticker) === false) @@ -456,6 +470,7 @@ Item close() } } + DefaultButton { Layout.fillWidth: true @@ -481,7 +496,7 @@ Item } // Receive Button - DexAppButton + DefaultButton { Layout.preferredWidth: 180 Layout.preferredHeight: 48 @@ -494,12 +509,12 @@ Item onClicked: receive_modal.open() - Arrow + TransactionArrow { anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: arrow_send.anchors.rightMargin - up: false + amISender: false } } @@ -516,7 +531,7 @@ Item Layout.preferredWidth: 180 Layout.preferredHeight: 48 - DexAppButton + DefaultButton { enabled: !API.app.portfolio_pg.global_cfg_mdl.get_coin_info(api_wallet_page.ticker).is_wallet_only anchors.fill: parent @@ -537,15 +552,15 @@ Item anchors.rightMargin: arrow_send.anchors.rightMargin spacing: 2 - Arrow + TransactionArrow { - up: true + amISender: true anchors.verticalCenter: parent.verticalCenter } - Arrow + TransactionArrow { - up: false + amISender: false anchors.verticalCenter: parent.verticalCenter } } @@ -570,7 +585,7 @@ Item Item { Layout.fillWidth: true } - DexAppButton + DefaultButton { text: qsTr("Rewards") radius: 18 @@ -598,7 +613,7 @@ Item Layout.preferredHeight: 48 visible: enabled && current_ticker_infos.is_smartchain_test_coin - DexAppButton + DefaultButton { text: qsTr("Faucet") radius: 18 @@ -626,9 +641,9 @@ Item Layout.fillWidth: true Layout.preferredHeight: 48 - visible: current_ticker_infos.name === "Tokel" + visible: current_ticker_infos.name === "Tokel" || current_ticker_infos.name === "Marmara Credit Loops" - DexAppButton + DefaultButton { text: qsTr("Public Key") radius: 18 @@ -721,7 +736,8 @@ Item radius: 18 - onTickerChanged: loadChart() + // Chart disabled + // onTickerChanged: loadChart() function loadChart() { @@ -775,28 +791,28 @@ Item console.debug("Wallet: Loading chart for %1".arg(symbol)) -// webEngineView.loadHtml(` -// -//
-//
-// -//
-// `.arg(Dex.CurrentTheme.floatingBackgroundColor).arg(Dex.CurrentTheme.textSelectionColor)) + webEngineView.loadHtml(` + +
+
+ +
+ `.arg(Dex.CurrentTheme.floatingBackgroundColor).arg(Dex.CurrentTheme.textSelectionColor)) } WebEngineView @@ -811,7 +827,8 @@ Item target: Dex.CurrentTheme function onThemeChanged() { - loadChart(); + // Chart disabled + // loadChart(); } } @@ -828,13 +845,13 @@ Item scale: 0.5 } - DexLabel + DefaultText { text_value: qsTr("Loading market data") + "..." } } - DexLabel + DefaultText { visible: !parent.ticker_supported text_value: qsTr("There is no chart data for this ticker yet") @@ -857,11 +874,12 @@ Item ClipRRect { + id: clip_rect radius: parent.radius width: transactions_bg.width height: transactions_bg.height - DexRectangle + DefaultRectangle { anchors.fill: parent gradient: Gradient @@ -872,50 +890,70 @@ Item } } - DefaultText - { - anchors.centerIn: parent - visible: current_ticker_infos.tx_state !== "InProgress" && transactions_mdl.length === 0 - text_value: api_wallet_page.tx_fetching_busy ? (qsTr("Refreshing") + "...") : qsTr("No transactions") - font.pixelSize: Style.textSize - } - Transactions { width: parent.width height: parent.height model: transactions_mdl.proxy_mdl } - } - } - RowLayout - { - id: fetching_text_row - visible: api_wallet_page.tx_fetching_busy - Layout.preferredHeight: fetching_text.font.pixelSize * 1.5 + ColumnLayout + { - Layout.topMargin: -layout_margin*0.5 - Layout.bottomMargin: layout_margin*0.5 + visible: current_ticker_infos.tx_state !== "InProgress" && transactions_mdl.length === 0 + anchors.fill: parent + anchors.centerIn: parent + spacing: 24 - Layout.alignment: Qt.AlignHCenter - spacing: 10 - DefaultBusyIndicator - { - Layout.alignment: Qt.AlignVCenter - Layout.preferredWidth: Style.textSizeSmall3 - Layout.preferredHeight: Layout.preferredWidth - } + DefaultText + { + id: fetching_text_row + Layout.topMargin: 24 + Layout.alignment: Qt.AlignHCenter + text_value: api_wallet_page.tx_fetching_busy ? qsTr("Fetching transactions...") : qsTr('No transactions available') + font.pixelSize: Style.textSize + } - DefaultText - { - id: fetching_text - Layout.alignment: Qt.AlignVCenter - text_value: qsTr("Fetching transactions") + "..." - font.pixelSize: Style.textSizeSmall3 + DefaultBusyIndicator + { + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + Layout.preferredWidth: Style.textSizeSmall3 + Layout.preferredHeight: Layout.preferredWidth + indicatorSize: 32 + indicatorDotSize: 5 + visible: api_wallet_page.tx_fetching_busy + } + + DefaultText + { + id: explorerLink + Layout.topMargin: 24 + Layout.alignment: Qt.AlignHCenter + visible: + { + if (addressURL) console.log("addressURL: " + addressURL) + return api_wallet_page.tx_fetching_busy ? false : addressURL == "" ? false : api_wallet_page.tx_fetching_failed + } + text_value: qsTr("Click to view your address on %1 (%2) block explorer").arg(current_ticker_infos.name).arg(api_wallet_page.ticker) + font.pixelSize: Style.textSize + color: explorer_mouseArea.containsMouse ? Dex.CurrentTheme.textSelectionColor : Dex.CurrentTheme.foregroundColor + + DefaultMouseArea + { + id: explorer_mouseArea + cursorShape: Qt.PointingHandCursor + anchors.fill: parent + hoverEnabled: true + onClicked: { + console.log(addressURL) + Qt.openUrlExternally(addressURL) + } + } + } + + Item { Layout.fillHeight: true } + } } } - - implicitHeight: Math.min(contentItem.childrenRect.height, wallet.height*0.5) } } diff --git a/atomic_defi_design/Dex/Wallet/SendModal.qml b/atomic_defi_design/Dex/Wallet/SendModal.qml index 225b2f5af..718c59f85 100644 --- a/atomic_defi_design/Dex/Wallet/SendModal.qml +++ b/atomic_defi_design/Dex/Wallet/SendModal.qml @@ -69,7 +69,9 @@ MultipageModal } function isSpecialToken() { - return General.isTokenType(current_ticker_infos.type) + if (current_ticker_infos.hasOwnProperty("has_parent_fees_ticker")) + return current_ticker_infos.has_parent_fees_ticker + return false } function isERC20() { @@ -96,47 +98,41 @@ MultipageModal } function feeIsHigherThanAmount() { - if(!custom_fees_switch.checked) return false - - const amt = parseFloat(getCryptoAmount()) - const fee_amt = parseFloat(input_custom_fees.text) - return amt < fee_amt - } + if(!custom_fees_switch.checked) return false - function hasFunds() { - if(!General.hasEnoughFunds(true, api_wallet_page.ticker, "", "", _preparePage.cryptoSendMode ? input_amount.text : equivalentAmount.value)) - return false + const amount = parseFloat(getCryptoAmount()) - if(custom_fees_switch.checked) { - if(isSpecialToken()) { - const gas_limit = parseFloat(input_custom_fees_gas.text) - const gas_price = parseFloat(input_custom_fees_gas_price.text) + if(isSpecialToken()) { + const parent_ticker = General.getFeesTicker(current_ticker_infos) + const gas_limit = parseFloat(input_custom_fees_gas.text) + const gas_price = parseFloat(input_custom_fees_gas_price.text) + if (isNaN(gas_price) || isNaN(gas_limit)) return false - const unit = current_ticker_infos.type === "ERC-20" ? 1000000000 : 100000000 - const fee_parent_token = (gas_limit * gas_price)/unit + const unit = current_ticker_infos.type === "ERC-20" ? 1000000000 : 100000000 + const fee_parent_token = (gas_limit * gas_price)/unit - const parent_ticker = current_ticker_infos.type === "ERC-20" ? "ETH" : "QTUM" - if(api_wallet_page.ticker === parent_ticker) { - const amount = parseFloat(getCryptoAmount()) - const total_needed = amount + fee_parent_token - if(!General.hasEnoughFunds(true, parent_ticker, "", "", total_needed.toString())) - return false - } - else { - if(!General.hasEnoughFunds(true, parent_ticker, "", "", fee_parent_token.toString())) - return false - } + if(api_wallet_page.ticker === parent_ticker) { + const total_needed = amount + fee_parent_token + if(General.hasEnoughFunds(true, parent_ticker, "", "", total_needed.toString())) + return false } else { - if(feeIsHigherThanAmount()) return false - - if(!General.hasEnoughFunds(true, api_wallet_page.ticker, "", "", input_custom_fees.text)) + if(General.hasEnoughFunds(true, parent_ticker, "", "", fee_parent_token.toString())) return false } + return true + } + else { + const fee_amt = parseFloat(input_custom_fees.text) + return amount < fee_amt } + } - return true + function hasFunds() { + if(!General.hasEnoughFunds(true, api_wallet_page.ticker, "", "", _preparePage.cryptoSendMode ? input_amount.text : equivalentAmount.value)) + return false + return true } function feesAreFilled() { @@ -172,21 +168,25 @@ MultipageModal reset() } - onSend_rpc_resultChanged: { - if (is_send_busy === false) { + onSend_rpc_resultChanged: + { + if (is_send_busy === false) + { return } // Local var, faster const result = General.clone(send_rpc_result) - if(result.error_code) { + if (result.error_code) + { root.close() - console.log("Send Error:", result.error_code, " Message:", result.error_message) toast.show(qsTr("Failed to send"), General.time_toast_important_error, result.error_message) } - else { - if(!result || !result.withdraw_answer) { + else + { + if (!result || !result.withdraw_answer) + { reset() return } @@ -203,15 +203,6 @@ MultipageModal send_result = result } - onAuth_succeededChanged: { - if (!auth_succeeded) { - console.log("Double verification failed, cannot confirm sending.") - } - else { - console.log("Double verification succeeded, validate sending."); - } - } - onBroadcast_resultChanged: { if (is_broadcast_busy === false) { return @@ -232,6 +223,7 @@ MultipageModal { if (!is_validate_address_busy) { + needFix = false address_data = api_wallet_page.validate_address_data if (address_data.reason !== "") { @@ -244,7 +236,7 @@ MultipageModal } if (address_data.convertible) { - reason.text = address_data.reason; + reason.text = address_data.reason; if (needFix!==true) needFix = true; } } @@ -267,14 +259,13 @@ MultipageModal { id: _preparePage + property bool cryptoSendMode: true + titleText: qsTr("Prepare to send ") + current_ticker_infos.name titleAlignment: Qt.AlignHCenter - property bool cryptoSendMode: true - DefaultRectangle { - enabled: !root.segwit && !root.is_send_busy Layout.preferredWidth: 420 @@ -290,10 +281,9 @@ MultipageModal width: 390 height: 44 - placeholderText: qsTr("Address of the recipient") - onTextChanged: api_wallet_page.validate_address(text) forceFocus: true + onTextChanged: api_wallet_page.validate_address(text) } Rectangle @@ -340,16 +330,19 @@ MultipageModal { visible: errorView && input_address.text !== "" Layout.alignment: Qt.AlignHCenter - Layout.fillWidth: true + Layout.preferredWidth: 380 + spacing: 4 + + Item { Layout.fillWidth: true } DefaultText { id: reason Layout.alignment: Qt.AlignVCenter - Layout.fillWidth: true + Layout.preferredWidth: 320 - wrapMode: Text.WrapAtWordBoundaryOrAnywhere + wrapMode: Label.Wrap color: Dex.CurrentTheme.noColor text_value: qsTr("The address has to be mixed case.") } @@ -358,16 +351,15 @@ MultipageModal { enabled: !root.is_send_busy visible: needFix - Layout.alignment: Qt.AlignVCenter Layout.leftMargin: 10 Layout.preferredWidth: 50 Layout.preferredHeight: 28 - text: qsTr("Fix") - onClicked: api_wallet_page.convert_address(input_address.text, address_data.to_address_format) } + + Item { Layout.fillWidth: true } } // Amount to send @@ -429,11 +421,11 @@ MultipageModal { if (_preparePage.cryptoSendMode) { - input_amount.text = current_ticker_infos.balance; + input_amount.text = API.app.get_balance(api_wallet_page.ticker); } else { - let cryptoBalance = new BigNumber(current_ticker_infos.balance); + let cryptoBalance = new BigNumber(API.app.get_balance(api_wallet_page.ticker)); input_amount.text = cryptoBalance.multipliedBy(current_ticker_infos.current_currency_ticker_price).toFixed(8); } } @@ -569,23 +561,34 @@ MultipageModal } } - // Custom fees switch - DexSwitch + ColumnLayout { - id: custom_fees_switch - enabled: !root.is_send_busy + Layout.preferredWidth: 380 + Layout.alignment: Qt.AlignHCenter Layout.topMargin: 32 - text: qsTr("Enable Custom Fees") - onCheckedChanged: input_custom_fees.text = "" - } - // Custom fees warning - DefaultText - { - visible: custom_fees_switch.checked - font.pixelSize: 14 - color: Dex.CurrentTheme.noColor - text_value: qsTr("Only use custom fees if you know what you are doing!") + // Custom fees switch + DefaultSwitch + { + id: custom_fees_switch + enabled: !root.is_send_busy + Layout.preferredWidth: 260 + onCheckedChanged: input_custom_fees.text = "" + labelWidth: 200 + label.text: qsTr("Enable Custom Fees") + label.wrapMode: Label.NoWrap + } + + // Custom fees warning + DefaultText + { + visible: custom_fees_switch.checked + font.pixelSize: 14 + Layout.alignment: Qt.AlignHCenter + horizontalAlignment: DefaultText.AlignHCenter + color: Dex.CurrentTheme.noColor + text_value: qsTr("Only use custom fees if you know what you are doing!") + } } // Custom Fees section @@ -594,12 +597,13 @@ MultipageModal visible: custom_fees_switch.checked Layout.preferredWidth: parent.width + Layout.alignment: Qt.AlignHCenter Layout.topMargin: 8 // Normal coins, Custom fees input AmountField { - visible: !isSpecialToken() + visible: !isSpecialToken() && !isParentCoin(api_wallet_page.ticker) id: input_custom_fees @@ -652,10 +656,12 @@ MultipageModal visible: feeIsHigherThanAmount() Layout.alignment: Qt.AlignHCenter + horizontalAlignment: DefaultText.AlignHCenter - wrapMode: Text.Wrap + wrapMode: Label.Wrap color: Style.colorRed - text_value: qsTr("Custom Fee can't be higher than the amount") + text_value: qsTr("Custom Fee can't be higher than the amount") + "\n" + + qsTr("You have %1", "AMT TICKER").arg(General.formatCrypto("", API.app.get_balance(General.getFeesTicker(current_ticker_infos)), General.getFeesTicker(current_ticker_infos))) } } @@ -663,15 +669,26 @@ MultipageModal DefaultText { Layout.topMargin: 16 - wrapMode: Text.Wrap + Layout.alignment: Qt.AlignHCenter + horizontalAlignment: DefaultText.AlignHCenter + wrapMode: Label.Wrap visible: !fee_error.visible && !hasFunds() color: Dex.CurrentTheme.noColor - text_value: qsTr("Not enough funds.") + "\n" + qsTr("You have %1", "AMT TICKER").arg(General.formatCrypto("", API.app.get_balance(api_wallet_page.ticker), api_wallet_page.ticker)) + text_value: qsTr("Not enough funds.") + "\n" + + qsTr("You have %1", "AMT TICKER").arg(General.formatCrypto("", API.app.get_balance(api_wallet_page.ticker), api_wallet_page.ticker)) + } + + DefaultBusyIndicator { + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + Layout.preferredWidth: 32 + Layout.preferredHeight: Layout.preferredWidth + indicatorSize: Layout.preferredWidth + indicatorDotSize: 5 + visible: root.is_send_busy } - DefaultBusyIndicator { visible: root.is_send_busy } // Footer RowLayout @@ -721,7 +738,6 @@ MultipageModal input_address.text = selected_address selected_address = "" - console.debug("SendModal: Selected %1 address from addressbook.".arg(input_address.text)) } } } @@ -784,17 +800,20 @@ MultipageModal DefaultBusyIndicator { + Layout.alignment: Qt.AlignVCenter | Qt.AlignHCenter + Layout.preferredWidth: 32 + Layout.preferredHeight: Layout.preferredWidth + indicatorSize: Layout.preferredWidth + indicatorDotSize: 5 visible: root.is_broadcast_busy } // Buttons footer: [ - Item - { - Layout.fillWidth: true - }, - DexAppButton + Item { Layout.fillWidth: true }, + + DefaultButton { text: qsTr("Back") leftPadding: 40 @@ -803,10 +822,9 @@ MultipageModal onClicked: root.currentIndex = 0 enabled: !root.is_broadcast_busy }, - Item - { - Layout.fillWidth: true - }, + + Item { Layout.fillWidth: true }, + DexAppOutlineButton { text: qsTr("Send") @@ -816,10 +834,8 @@ MultipageModal radius: 18 enabled: !root.is_broadcast_busy }, - Item - { - Layout.fillWidth: true - } + + Item { Layout.fillWidth: true } ] } diff --git a/atomic_defi_design/Dex/Wallet/SendModalContactList.qml b/atomic_defi_design/Dex/Wallet/SendModalContactList.qml index 20984b8dd..9e9bbd58a 100644 --- a/atomic_defi_design/Dex/Wallet/SendModalContactList.qml +++ b/atomic_defi_design/Dex/Wallet/SendModalContactList.qml @@ -18,6 +18,9 @@ MultipageModal property string ticker: api_wallet_page.ticker property var selected_address: "" + Component.onCompleted: API.app.addressbookPg.model.proxy.typeFilter = ticker + Component.onDestruction: API.app.addressbookPg.model.proxy.typeFilter = "" + MultipageModalContent { titleText: qsTr("Select a contact with an %1 address").arg(ticker) @@ -28,8 +31,8 @@ MultipageModal Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true placeholderText: qsTr("Search for contacts...") - onTextChanged: API.app.addressbook_pg.model.proxy.search_exp = text - Component.onDestruction: API.app.addressbook_pg.model.proxy.search_exp = "" + onTextChanged: API.app.addressbookPg.model.proxy.searchExp = text + Component.onDestruction: API.app.addressbookPg.model.proxy.searchExp = "" } // Contact List @@ -39,7 +42,7 @@ MultipageModal Layout.fillWidth: true - model: API.app.addressbook_pg.model.proxy + model: API.app.addressbookPg.model.proxy delegate: DefaultRectangle { property int addressesCount @@ -51,10 +54,10 @@ MultipageModal Component.onCompleted: { - modelData.proxy_filter.filter_type = ticker - addressesCount = modelData.proxy_filter.rowCount() + modelData.proxyFilter.filterType = ticker + addressesCount = modelData.proxyFilter.rowCount() } - Component.onDestruction: contactModel.proxy_filter.filter_type = "" + Component.onDestruction: contactModel.proxyFilter.typeFilter = "" DefaultMouseArea { @@ -95,9 +98,6 @@ MultipageModal anchors.bottom: parent.bottom } } - - Component.onCompleted: API.app.addressbook_pg.model.proxy.type_filter = ticker - Component.onDestruction: API.app.addressbook_pg.model.proxy.type_filter = "" } footer: @@ -120,9 +120,9 @@ MultipageModal readonly property var defaultContactModel: { - "proxy_filter": + "proxyFilter": { - "filter_type": "" + "filterType": "" }, "name": "" } @@ -131,7 +131,7 @@ MultipageModal property int columnsMargin: 10 property int nameColumnWidth: width * 0.3 - titleText: qsTr("Choose an %1 address of %2").arg(contactModel.proxy_filter.filter_type).arg(contactModel.name) + titleText: qsTr("Choose an %1 address of %2").arg(contactModel.proxyFilter.filterType).arg(contactModel.name) RowLayout { @@ -160,7 +160,7 @@ MultipageModal Layout.fillWidth: true - model: addressesView.contactModel.proxy_filter + model: addressesView.contactModel.proxyFilter delegate: DefaultRectangle { width: addressListView.width diff --git a/atomic_defi_design/Dex/Wallet/Sidebar.qml b/atomic_defi_design/Dex/Wallet/Sidebar.qml index fefe8f917..4b54ce976 100644 --- a/atomic_defi_design/Dex/Wallet/Sidebar.qml +++ b/atomic_defi_design/Dex/Wallet/Sidebar.qml @@ -58,21 +58,9 @@ Item Layout.preferredWidth: 150 Layout.preferredHeight: 38 - textField.placeholderText: qsTr("Search coin") + textField.placeholderText: qsTr("Search") forceFocus: true - textField.onTextChanged: portfolio_coins.setFilterFixedString(textField.text) - Component.onDestruction: portfolio_coins.setFilterFixedString("") - - Connections - { - target: root - - function onResetted() - { - if (searchCoinField.textField.text === "") resetCoinFilter() - else searchCoinField.textField.text = "" - } - } + searchModel: portfolio_coins } // Coins list diff --git a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml index f6e8e3785..92bb7866b 100644 --- a/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml +++ b/atomic_defi_design/Dex/Wallet/TransactionDetailsModal.qml @@ -33,7 +33,7 @@ MultipageModal { title: qsTr("Amount") text: !details ? "" : General.formatCrypto(!details.am_i_sender, details.amount, api_wallet_page.ticker, details.amount_fiat, API.app.settings_pg.current_currency) - value_color: !details ? "white" : details.am_i_sender ? DexTheme.redColor : DexTheme.greenColor + value_color: !details ? "white" : details.am_i_sender ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor privacy: true label.font.pixelSize: 13 } @@ -43,7 +43,7 @@ MultipageModal { title: qsTr("Fees") text: !details ? "" : General.formatCrypto(parseFloat(details.fees) < 0, Math.abs(parseFloat(details.fees)), current_ticker_infos.fee_ticker, details.fees_amount_fiat, API.app.settings_pg.current_currency) - value_color: !details ? "white" : parseFloat(details.fees) > 0 ? DexTheme.redColor : DexTheme.greenColor + value_color: !details ? "white" : parseFloat(details.fees) > 0 ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor privacy: true label.font.pixelSize: 13 } @@ -62,8 +62,9 @@ MultipageModal id: txHash title: qsTr("Transaction Hash") text: !details ? "" : details.tx_hash - label.font.pixelSize: 13 + label.font.pixelSize: 11 privacy: true + linkURL: !details ? "" :General.getTxExplorerURL(api_wallet_page.ticker, details.tx_hash, false) copy: true onCopyNotificationTitle: qsTr("Transactions") @@ -86,7 +87,7 @@ MultipageModal label.font.pixelSize: 13 } - DexRectangle { + DefaultRectangle { Layout.fillWidth: true Layout.preferredHeight: addressColumn.height + 10 color: DexTheme.contentColorTop @@ -101,6 +102,8 @@ MultipageModal title: qsTr("From") model: !details ? [] : details.from + linkURL: !details ? "" :General.getAddressExplorerURL(api_wallet_page.ticker, details.from) + onCopyNotificationTitle: qsTr("From address") } AddressList { @@ -109,6 +112,11 @@ MultipageModal model: !details ? [] : details.to.length > 1 ? General.arrayExclude(details.to, details.from[0]) : details.to + linkURL: !details ? "" + : details.to.length > 1 + ? General.getAddressExplorerURL(api_wallet_page.ticker, General.arrayExclude(details.to, details.from[0])) + : General.getAddressExplorerURL(api_wallet_page.ticker, details.to) + onCopyNotificationTitle: qsTr("To address") } } } @@ -138,7 +146,7 @@ MultipageModal // Buttons footer: [ - DexButton + DefaultButton { Layout.fillWidth: true text: qsTr("Close") @@ -147,6 +155,7 @@ MultipageModal radius: 18 onClicked: root.close() }, + DexAppOutlineButton { Layout.fillWidth: true diff --git a/atomic_defi_design/Dex/Wallet/Transactions.qml b/atomic_defi_design/Dex/Wallet/Transactions.qml index 9ad085c5d..a195fc610 100644 --- a/atomic_defi_design/Dex/Wallet/Transactions.qml +++ b/atomic_defi_design/Dex/Wallet/Transactions.qml @@ -12,6 +12,12 @@ DefaultListView readonly property int row_height: 45 + property real _categoryColumnWidth: 140 + property real _cryptoColumnWidth: 170 + property real _fiatColumnWidth: 170 + property real _feeColumnWidth: 225 + property real _dateColumnWidth: 170 + ModalLoader { id: tx_details_modal @@ -22,7 +28,7 @@ DefaultListView delegate: DexRectangle { id: rectangle - implicitWidth: list.width + width: list.width height: row_height radius: 0 border.width: 0 @@ -41,84 +47,87 @@ DefaultListView } } - Circle - { - id: note_tag - width: 6 - color: Style.colorOrange - anchors.left: parent.left - anchors.leftMargin: 15 - anchors.verticalCenter: parent.verticalCenter - visible: transaction_note !== "" - } + RowLayout { + id: tx_row + anchors.fill: parent + anchors.margins: 15 - Arrow - { - id: received_icon - up: am_i_sender ? true : false - color: !am_i_sender ? Dex.CurrentTheme.arrowUpColor : Dex.CurrentTheme.arrowDownColor - anchors.verticalCenter: parent.verticalCenter - anchors.left: note_tag.right - anchors.leftMargin: 10 - } + RowLayout { + spacing: 3 + Layout.preferredWidth: _categoryColumnWidth + Circle + { + id: note_tag + width: 6 + color: Style.colorOrange + visible: transaction_note !== "" + } - // Description - DefaultText - { - id: description - text_value: am_i_sender ? qsTr("Sent") : qsTr("Received") - font.pixelSize: Style.textSizeSmall3 - anchors.verticalCenter: parent.verticalCenter - anchors.left: received_icon.right - anchors.leftMargin: 10 - } + TransactionArrow + { + id: received_icon + amISender: am_i_sender ? true : false + } - // Crypto - DefaultText - { - id: crypto_amount - text_value: General.formatCrypto(!am_i_sender, amount, api_wallet_page.ticker) - font.pixelSize: description.font.pixelSize - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.2 - color: am_i_sender ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor - privacy: true - } + // Description + DexLabel + { + id: description + horizontalAlignment: Qt.AlignLeft + text_value: am_i_sender ? qsTr("Sent") : qsTr("Received") + font.pixelSize: Style.textSizeSmall3 + } + } - // Fiat - DefaultText - { - text_value: General.formatFiat(!am_i_sender, amount_fiat, API.app.settings_pg.current_currency) - font.pixelSize: description.font.pixelSize - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.4 - color: crypto_amount.color - privacy: true - } + // Crypto + DexLabel + { + id: crypto_amount + Layout.preferredWidth: _cryptoColumnWidth + horizontalAlignment: Text.AlignRight + text_value: + { + api_wallet_page.ticker.length > 6 + ? General.formatCrypto(!am_i_sender, amount, '', false, false, 6, true) + : General.formatCrypto(!am_i_sender, amount, api_wallet_page.ticker, false, false, 6, true) - // Fee - DefaultText - { - text_value: General.formatCrypto(!(parseFloat(fees) > 0), Math.abs(parseFloat(fees)), - current_ticker_infos.fee_ticker + " " + qsTr("fees")) - font.pixelSize: description.font.pixelSize - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: parent.width * 0.575 - privacy: true - } + } + font.pixelSize: description.font.pixelSize + color: am_i_sender ? Dex.CurrentTheme.noColor : Dex.CurrentTheme.okColor + privacy: true + } - // Date - DefaultText - { - font.pixelSize: description.font.pixelSize - text_value: !date || unconfirmed ? qsTr("Unconfirmed") : date - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: 20 - privacy: true + // Fiat + DexLabel + { + Layout.preferredWidth: _fiatColumnWidth + horizontalAlignment: Text.AlignRight + text_value: General.formatFiat(!am_i_sender, amount_fiat, API.app.settings_pg.current_currency) + font.pixelSize: description.font.pixelSize + color: crypto_amount.color + privacy: true + } + + // Fee + DexLabel + { + Layout.preferredWidth: _feeColumnWidth + horizontalAlignment: Text.AlignRight + text_value: General.formatCrypto(!(parseFloat(fees) > 0), Math.abs(parseFloat(fees)), + current_ticker_infos.fee_ticker + " " + qsTr("fees")) + font.pixelSize: description.font.pixelSize + privacy: true + } + + // Date + DexLabel + { + Layout.preferredWidth: _dateColumnWidth + horizontalAlignment: Text.AlignRight + font.pixelSize: description.font.pixelSize + text_value: !date || unconfirmed ? qsTr("Unconfirmed") : date + privacy: true + } } } } diff --git a/atomic_defi_design/Dex/main.qml b/atomic_defi_design/Dex/main.qml index 4e33fed37..e5da68194 100644 --- a/atomic_defi_design/Dex/main.qml +++ b/atomic_defi_design/Dex/main.qml @@ -108,7 +108,7 @@ DexWindow anchors.fill: parent onClicked: { - let dialog = app.showText( + let dialog = app.showDialog( { "title": qsTr("Confirm Logout"), text: qsTr("Are you sure you want to log out?"), diff --git a/atomic_defi_design/assets/.gitignore b/atomic_defi_design/assets/.gitignore new file mode 100644 index 000000000..90d1f28b1 --- /dev/null +++ b/atomic_defi_design/assets/.gitignore @@ -0,0 +1 @@ +qml.qrc \ No newline at end of file diff --git a/atomic_defi_design/assets/images/coins/$pac.png b/atomic_defi_design/assets/images/coins/$pac.png deleted file mode 100644 index 89e6e8454..000000000 Binary files a/atomic_defi_design/assets/images/coins/$pac.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/0xbtc.png b/atomic_defi_design/assets/images/coins/0xbtc.png deleted file mode 100644 index 0da0826d2..000000000 Binary files a/atomic_defi_design/assets/images/coins/0xbtc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/1inch.png b/atomic_defi_design/assets/images/coins/1inch.png index 4807411a3..53aada062 100644 Binary files a/atomic_defi_design/assets/images/coins/1inch.png and b/atomic_defi_design/assets/images/coins/1inch.png differ diff --git a/atomic_defi_design/assets/images/coins/2give.png b/atomic_defi_design/assets/images/coins/2give.png deleted file mode 100644 index d2fd035f2..000000000 Binary files a/atomic_defi_design/assets/images/coins/2give.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aave.png b/atomic_defi_design/assets/images/coins/aave.png index 8976df01d..dd92a6d14 100644 Binary files a/atomic_defi_design/assets/images/coins/aave.png and b/atomic_defi_design/assets/images/coins/aave.png differ diff --git a/atomic_defi_design/assets/images/coins/abt.png b/atomic_defi_design/assets/images/coins/abt.png deleted file mode 100644 index ae3420900..000000000 Binary files a/atomic_defi_design/assets/images/coins/abt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aby.png b/atomic_defi_design/assets/images/coins/aby.png index bfe2a54a7..23bbd803b 100644 Binary files a/atomic_defi_design/assets/images/coins/aby.png and b/atomic_defi_design/assets/images/coins/aby.png differ diff --git a/atomic_defi_design/assets/images/coins/act.png b/atomic_defi_design/assets/images/coins/act.png deleted file mode 100644 index fdf60fa1a..000000000 Binary files a/atomic_defi_design/assets/images/coins/act.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/actn.png b/atomic_defi_design/assets/images/coins/actn.png index 740e6b6d8..216089167 100644 Binary files a/atomic_defi_design/assets/images/coins/actn.png and b/atomic_defi_design/assets/images/coins/actn.png differ diff --git a/atomic_defi_design/assets/images/coins/ada.png b/atomic_defi_design/assets/images/coins/ada.png index 875d0f686..c3757769a 100644 Binary files a/atomic_defi_design/assets/images/coins/ada.png and b/atomic_defi_design/assets/images/coins/ada.png differ diff --git a/atomic_defi_design/assets/images/coins/add.png b/atomic_defi_design/assets/images/coins/add.png deleted file mode 100644 index 2c3b9ffdb..000000000 Binary files a/atomic_defi_design/assets/images/coins/add.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/adx.png b/atomic_defi_design/assets/images/coins/adx.png index 5785df507..985039926 100644 Binary files a/atomic_defi_design/assets/images/coins/adx.png and b/atomic_defi_design/assets/images/coins/adx.png differ diff --git a/atomic_defi_design/assets/images/coins/ae.png b/atomic_defi_design/assets/images/coins/ae.png deleted file mode 100644 index 0836d135e..000000000 Binary files a/atomic_defi_design/assets/images/coins/ae.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aeon.png b/atomic_defi_design/assets/images/coins/aeon.png deleted file mode 100644 index b9bb37d5c..000000000 Binary files a/atomic_defi_design/assets/images/coins/aeon.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aeur.png b/atomic_defi_design/assets/images/coins/aeur.png deleted file mode 100644 index f86b004c9..000000000 Binary files a/atomic_defi_design/assets/images/coins/aeur.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/agix.png b/atomic_defi_design/assets/images/coins/agix.png index 2a92e7c4c..120b49979 100644 Binary files a/atomic_defi_design/assets/images/coins/agix.png and b/atomic_defi_design/assets/images/coins/agix.png differ diff --git a/atomic_defi_design/assets/images/coins/agrs.png b/atomic_defi_design/assets/images/coins/agrs.png deleted file mode 100644 index 5ae0640b3..000000000 Binary files a/atomic_defi_design/assets/images/coins/agrs.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aion.png b/atomic_defi_design/assets/images/coins/aion.png deleted file mode 100644 index b67ab9a22..000000000 Binary files a/atomic_defi_design/assets/images/coins/aion.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/algo.png b/atomic_defi_design/assets/images/coins/algo.png deleted file mode 100644 index f1400485d..000000000 Binary files a/atomic_defi_design/assets/images/coins/algo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/amb.png b/atomic_defi_design/assets/images/coins/amb.png deleted file mode 100644 index a585755e2..000000000 Binary files a/atomic_defi_design/assets/images/coins/amb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/amp.png b/atomic_defi_design/assets/images/coins/amp.png deleted file mode 100644 index 1a6b58634..000000000 Binary files a/atomic_defi_design/assets/images/coins/amp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ampl.png b/atomic_defi_design/assets/images/coins/ampl.png deleted file mode 100644 index c76e501a0..000000000 Binary files a/atomic_defi_design/assets/images/coins/ampl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ankr.png b/atomic_defi_design/assets/images/coins/ankr.png index f3fd779e6..36d1a266f 100644 Binary files a/atomic_defi_design/assets/images/coins/ankr.png and b/atomic_defi_design/assets/images/coins/ankr.png differ diff --git a/atomic_defi_design/assets/images/coins/ant.png b/atomic_defi_design/assets/images/coins/ant.png index ec0e75f05..46d8df1bd 100644 Binary files a/atomic_defi_design/assets/images/coins/ant.png and b/atomic_defi_design/assets/images/coins/ant.png differ diff --git a/atomic_defi_design/assets/images/coins/ape.png b/atomic_defi_design/assets/images/coins/ape.png new file mode 100644 index 000000000..81e7165e4 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/ape.png differ diff --git a/atomic_defi_design/assets/images/coins/apex.png b/atomic_defi_design/assets/images/coins/apex.png deleted file mode 100644 index 0066bc5f0..000000000 Binary files a/atomic_defi_design/assets/images/coins/apex.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/appc.png b/atomic_defi_design/assets/images/coins/appc.png deleted file mode 100644 index 31cf8497a..000000000 Binary files a/atomic_defi_design/assets/images/coins/appc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ardr.png b/atomic_defi_design/assets/images/coins/ardr.png deleted file mode 100644 index 3b40f740e..000000000 Binary files a/atomic_defi_design/assets/images/coins/ardr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/arg.png b/atomic_defi_design/assets/images/coins/arg.png deleted file mode 100644 index e34528e59..000000000 Binary files a/atomic_defi_design/assets/images/coins/arg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ark.png b/atomic_defi_design/assets/images/coins/ark.png deleted file mode 100644 index a16699177..000000000 Binary files a/atomic_defi_design/assets/images/coins/ark.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/arn.png b/atomic_defi_design/assets/images/coins/arn.png deleted file mode 100644 index 2d9e6c209..000000000 Binary files a/atomic_defi_design/assets/images/coins/arn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/arnx.png b/atomic_defi_design/assets/images/coins/arnx.png deleted file mode 100644 index c234fa6f6..000000000 Binary files a/atomic_defi_design/assets/images/coins/arnx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/arpa.png b/atomic_defi_design/assets/images/coins/arpa.png index 911504e2a..0eb087d3d 100644 Binary files a/atomic_defi_design/assets/images/coins/arpa.png and b/atomic_defi_design/assets/images/coins/arpa.png differ diff --git a/atomic_defi_design/assets/images/coins/arrr.png b/atomic_defi_design/assets/images/coins/arrr.png index 7f18e9f74..b4b8ef411 100644 Binary files a/atomic_defi_design/assets/images/coins/arrr.png and b/atomic_defi_design/assets/images/coins/arrr.png differ diff --git a/atomic_defi_design/assets/images/coins/ary.png b/atomic_defi_design/assets/images/coins/ary.png deleted file mode 100644 index 456a94db3..000000000 Binary files a/atomic_defi_design/assets/images/coins/ary.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ast.png b/atomic_defi_design/assets/images/coins/ast.png deleted file mode 100644 index bd422e51d..000000000 Binary files a/atomic_defi_design/assets/images/coins/ast.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/atm.png b/atomic_defi_design/assets/images/coins/atm.png deleted file mode 100644 index 038c5e7f2..000000000 Binary files a/atomic_defi_design/assets/images/coins/atm.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/atom.png b/atomic_defi_design/assets/images/coins/atom.png index 7ecb202ca..8da424d51 100644 Binary files a/atomic_defi_design/assets/images/coins/atom.png and b/atomic_defi_design/assets/images/coins/atom.png differ diff --git a/atomic_defi_design/assets/images/coins/audr.png b/atomic_defi_design/assets/images/coins/audr.png deleted file mode 100644 index 69b9ecb12..000000000 Binary files a/atomic_defi_design/assets/images/coins/audr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/aur.png b/atomic_defi_design/assets/images/coins/aur.png index f41638720..880ee3a36 100644 Binary files a/atomic_defi_design/assets/images/coins/aur.png and b/atomic_defi_design/assets/images/coins/aur.png differ diff --git a/atomic_defi_design/assets/images/coins/auto.png b/atomic_defi_design/assets/images/coins/auto.png deleted file mode 100644 index 918985a2b..000000000 Binary files a/atomic_defi_design/assets/images/coins/auto.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ava.png b/atomic_defi_design/assets/images/coins/ava.png index 79bc6460f..88b8830e3 100644 Binary files a/atomic_defi_design/assets/images/coins/ava.png and b/atomic_defi_design/assets/images/coins/ava.png differ diff --git a/atomic_defi_design/assets/images/coins/avax.png b/atomic_defi_design/assets/images/coins/avax.png index b7239eee8..ab5ed4d8d 100644 Binary files a/atomic_defi_design/assets/images/coins/avax.png and b/atomic_defi_design/assets/images/coins/avax.png differ diff --git a/atomic_defi_design/assets/images/coins/avaxt.png b/atomic_defi_design/assets/images/coins/avaxt.png index b7239eee8..4f68d9414 100644 Binary files a/atomic_defi_design/assets/images/coins/avaxt.png and b/atomic_defi_design/assets/images/coins/avaxt.png differ diff --git a/atomic_defi_design/assets/images/coins/awc.png b/atomic_defi_design/assets/images/coins/awc.png index 10da211c7..c47710cd2 100644 Binary files a/atomic_defi_design/assets/images/coins/awc.png and b/atomic_defi_design/assets/images/coins/awc.png differ diff --git a/atomic_defi_design/assets/images/coins/axe.png b/atomic_defi_design/assets/images/coins/axe.png index f62c2a3c1..a04239587 100644 Binary files a/atomic_defi_design/assets/images/coins/axe.png and b/atomic_defi_design/assets/images/coins/axe.png differ diff --git a/atomic_defi_design/assets/images/coins/axs.png b/atomic_defi_design/assets/images/coins/axs.png index c07db42c2..a281cbbde 100644 Binary files a/atomic_defi_design/assets/images/coins/axs.png and b/atomic_defi_design/assets/images/coins/axs.png differ diff --git a/atomic_defi_design/assets/images/coins/aywa.png b/atomic_defi_design/assets/images/coins/aywa.png deleted file mode 100644 index 694127bf7..000000000 Binary files a/atomic_defi_design/assets/images/coins/aywa.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bab.png b/atomic_defi_design/assets/images/coins/bab.png deleted file mode 100644 index ccb28183c..000000000 Binary files a/atomic_defi_design/assets/images/coins/bab.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/babydoge.png b/atomic_defi_design/assets/images/coins/babydoge.png index 74338c78e..cc37d9174 100644 Binary files a/atomic_defi_design/assets/images/coins/babydoge.png and b/atomic_defi_design/assets/images/coins/babydoge.png differ diff --git a/atomic_defi_design/assets/images/coins/bal.png b/atomic_defi_design/assets/images/coins/bal.png index 59a2564cb..e1d8d414f 100644 Binary files a/atomic_defi_design/assets/images/coins/bal.png and b/atomic_defi_design/assets/images/coins/bal.png differ diff --git a/atomic_defi_design/assets/images/coins/banano.png b/atomic_defi_design/assets/images/coins/banano.png index 9485eadda..1d930520e 100644 Binary files a/atomic_defi_design/assets/images/coins/banano.png and b/atomic_defi_design/assets/images/coins/banano.png differ diff --git a/atomic_defi_design/assets/images/coins/band.png b/atomic_defi_design/assets/images/coins/band.png index 12a589c9d..3f7aad479 100644 Binary files a/atomic_defi_design/assets/images/coins/band.png and b/atomic_defi_design/assets/images/coins/band.png differ diff --git a/atomic_defi_design/assets/images/coins/bat.png b/atomic_defi_design/assets/images/coins/bat.png index 654b09203..d5754454c 100644 Binary files a/atomic_defi_design/assets/images/coins/bat.png and b/atomic_defi_design/assets/images/coins/bat.png differ diff --git a/atomic_defi_design/assets/images/coins/bay.png b/atomic_defi_design/assets/images/coins/bay.png deleted file mode 100644 index fac7c53db..000000000 Binary files a/atomic_defi_design/assets/images/coins/bay.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bcbc.png b/atomic_defi_design/assets/images/coins/bcbc.png deleted file mode 100644 index 0a4fbaedd..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcbc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bcc.png b/atomic_defi_design/assets/images/coins/bcc.png deleted file mode 100644 index 7f4f42dc3..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bcd.png b/atomic_defi_design/assets/images/coins/bcd.png deleted file mode 100644 index 68ba61b60..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bch.png b/atomic_defi_design/assets/images/coins/bch.png index c0e65ffd6..2b73d4a63 100644 Binary files a/atomic_defi_design/assets/images/coins/bch.png and b/atomic_defi_design/assets/images/coins/bch.png differ diff --git a/atomic_defi_design/assets/images/coins/bcio.png b/atomic_defi_design/assets/images/coins/bcio.png deleted file mode 100644 index aeb4f784f..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcio.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bcn.png b/atomic_defi_design/assets/images/coins/bcn.png deleted file mode 100644 index f2a93aab7..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bco.png b/atomic_defi_design/assets/images/coins/bco.png deleted file mode 100644 index b04106555..000000000 Binary files a/atomic_defi_design/assets/images/coins/bco.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bcpt.png b/atomic_defi_design/assets/images/coins/bcpt.png deleted file mode 100644 index ef7d4a97d..000000000 Binary files a/atomic_defi_design/assets/images/coins/bcpt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bdl.png b/atomic_defi_design/assets/images/coins/bdl.png deleted file mode 100644 index 72f857a36..000000000 Binary files a/atomic_defi_design/assets/images/coins/bdl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/beam.png b/atomic_defi_design/assets/images/coins/beam.png deleted file mode 100644 index d43b416e4..000000000 Binary files a/atomic_defi_design/assets/images/coins/beam.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bela.png b/atomic_defi_design/assets/images/coins/bela.png deleted file mode 100644 index 7c437e9a6..000000000 Binary files a/atomic_defi_design/assets/images/coins/bela.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bep.png b/atomic_defi_design/assets/images/coins/bep.png new file mode 100644 index 000000000..40ea0e6ab Binary files /dev/null and b/atomic_defi_design/assets/images/coins/bep.png differ diff --git a/atomic_defi_design/assets/images/coins/best.png b/atomic_defi_design/assets/images/coins/best.png index ef85a0faa..a63503436 100644 Binary files a/atomic_defi_design/assets/images/coins/best.png and b/atomic_defi_design/assets/images/coins/best.png differ diff --git a/atomic_defi_design/assets/images/coins/bet.png b/atomic_defi_design/assets/images/coins/bet.png index 31e8668e6..c62f2f4c5 100644 Binary files a/atomic_defi_design/assets/images/coins/bet.png and b/atomic_defi_design/assets/images/coins/bet.png differ diff --git a/atomic_defi_design/assets/images/coins/bidr.png b/atomic_defi_design/assets/images/coins/bidr.png index 54b82608d..7c184c120 100644 Binary files a/atomic_defi_design/assets/images/coins/bidr.png and b/atomic_defi_design/assets/images/coins/bidr.png differ diff --git a/atomic_defi_design/assets/images/coins/bix.png b/atomic_defi_design/assets/images/coins/bix.png deleted file mode 100644 index 7f1b942f3..000000000 Binary files a/atomic_defi_design/assets/images/coins/bix.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/blcn.png b/atomic_defi_design/assets/images/coins/blcn.png deleted file mode 100644 index 38e5ef14b..000000000 Binary files a/atomic_defi_design/assets/images/coins/blcn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/blk.png b/atomic_defi_design/assets/images/coins/blk.png index 49294ebfa..873feed9b 100644 Binary files a/atomic_defi_design/assets/images/coins/blk.png and b/atomic_defi_design/assets/images/coins/blk.png differ diff --git a/atomic_defi_design/assets/images/coins/block.png b/atomic_defi_design/assets/images/coins/block.png deleted file mode 100644 index cb1739983..000000000 Binary files a/atomic_defi_design/assets/images/coins/block.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/blz.png b/atomic_defi_design/assets/images/coins/blz.png deleted file mode 100644 index 0a7ee0a91..000000000 Binary files a/atomic_defi_design/assets/images/coins/blz.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bnb.png b/atomic_defi_design/assets/images/coins/bnb.png index bc0dd1f11..40ea0e6ab 100644 Binary files a/atomic_defi_design/assets/images/coins/bnb.png and b/atomic_defi_design/assets/images/coins/bnb.png differ diff --git a/atomic_defi_design/assets/images/coins/bnbt.png b/atomic_defi_design/assets/images/coins/bnbt.png index 19cbc2b10..178ec0d1a 100644 Binary files a/atomic_defi_design/assets/images/coins/bnbt.png and b/atomic_defi_design/assets/images/coins/bnbt.png differ diff --git a/atomic_defi_design/assets/images/coins/bnt.png b/atomic_defi_design/assets/images/coins/bnt.png index d53a04c69..e21ea855a 100644 Binary files a/atomic_defi_design/assets/images/coins/bnt.png and b/atomic_defi_design/assets/images/coins/bnt.png differ diff --git a/atomic_defi_design/assets/images/coins/bnty.png b/atomic_defi_design/assets/images/coins/bnty.png deleted file mode 100644 index e3cb309d2..000000000 Binary files a/atomic_defi_design/assets/images/coins/bnty.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bone.png b/atomic_defi_design/assets/images/coins/bone.png index d25472be2..4216deba2 100644 Binary files a/atomic_defi_design/assets/images/coins/bone.png and b/atomic_defi_design/assets/images/coins/bone.png differ diff --git a/atomic_defi_design/assets/images/coins/booty.png b/atomic_defi_design/assets/images/coins/booty.png deleted file mode 100644 index bc32d91de..000000000 Binary files a/atomic_defi_design/assets/images/coins/booty.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bos.png b/atomic_defi_design/assets/images/coins/bos.png deleted file mode 100644 index 095d1dbcd..000000000 Binary files a/atomic_defi_design/assets/images/coins/bos.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bots.png b/atomic_defi_design/assets/images/coins/bots.png index 944685aae..df526455b 100644 Binary files a/atomic_defi_design/assets/images/coins/bots.png and b/atomic_defi_design/assets/images/coins/bots.png differ diff --git a/atomic_defi_design/assets/images/coins/bpt.png b/atomic_defi_design/assets/images/coins/bpt.png deleted file mode 100644 index a48ec8479..000000000 Binary files a/atomic_defi_design/assets/images/coins/bpt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bq.png b/atomic_defi_design/assets/images/coins/bq.png deleted file mode 100644 index 3abe9ff77..000000000 Binary files a/atomic_defi_design/assets/images/coins/bq.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/brd.png b/atomic_defi_design/assets/images/coins/brd.png deleted file mode 100644 index e33376f18..000000000 Binary files a/atomic_defi_design/assets/images/coins/brd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/brz.png b/atomic_defi_design/assets/images/coins/brz.png index 6bcf1a9f7..b95698c3e 100644 Binary files a/atomic_defi_design/assets/images/coins/brz.png and b/atomic_defi_design/assets/images/coins/brz.png differ diff --git a/atomic_defi_design/assets/images/coins/bsd.png b/atomic_defi_design/assets/images/coins/bsd.png deleted file mode 100644 index 766bb9e16..000000000 Binary files a/atomic_defi_design/assets/images/coins/bsd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bsty.png b/atomic_defi_design/assets/images/coins/bsty.png index 3e4e227f2..8d6a1783b 100644 Binary files a/atomic_defi_design/assets/images/coins/bsty.png and b/atomic_defi_design/assets/images/coins/bsty.png differ diff --git a/atomic_defi_design/assets/images/coins/bsv.png b/atomic_defi_design/assets/images/coins/bsv.png deleted file mode 100644 index 5dc9f6bd1..000000000 Binary files a/atomic_defi_design/assets/images/coins/bsv.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/btc.png b/atomic_defi_design/assets/images/coins/btc.png index 784b8f359..10daeb7dc 100644 Binary files a/atomic_defi_design/assets/images/coins/btc.png and b/atomic_defi_design/assets/images/coins/btc.png differ diff --git a/atomic_defi_design/assets/images/coins/btcd.png b/atomic_defi_design/assets/images/coins/btcd.png deleted file mode 100644 index c1eaff610..000000000 Binary files a/atomic_defi_design/assets/images/coins/btcd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/btcp.png b/atomic_defi_design/assets/images/coins/btcp.png deleted file mode 100644 index a1a799cfd..000000000 Binary files a/atomic_defi_design/assets/images/coins/btcp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/btcz.png b/atomic_defi_design/assets/images/coins/btcz.png index 230d756f6..e692fc57c 100644 Binary files a/atomic_defi_design/assets/images/coins/btcz.png and b/atomic_defi_design/assets/images/coins/btcz.png differ diff --git a/atomic_defi_design/assets/images/coins/btdx.png b/atomic_defi_design/assets/images/coins/btdx.png deleted file mode 100644 index b0aafa737..000000000 Binary files a/atomic_defi_design/assets/images/coins/btdx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bte.png b/atomic_defi_design/assets/images/coins/bte.png index 97087c409..111b5d919 100644 Binary files a/atomic_defi_design/assets/images/coins/bte.png and b/atomic_defi_design/assets/images/coins/bte.png differ diff --git a/atomic_defi_design/assets/images/coins/btg.png b/atomic_defi_design/assets/images/coins/btg.png deleted file mode 100644 index 0d4c627f8..000000000 Binary files a/atomic_defi_design/assets/images/coins/btg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/btm.png b/atomic_defi_design/assets/images/coins/btm.png deleted file mode 100644 index 62892c753..000000000 Binary files a/atomic_defi_design/assets/images/coins/btm.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/bts.png b/atomic_defi_design/assets/images/coins/bts.png deleted file mode 100644 index 6b1397cf4..000000000 Binary files a/atomic_defi_design/assets/images/coins/bts.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/btt.png b/atomic_defi_design/assets/images/coins/btt.png index d734b5499..f9772a94b 100644 Binary files a/atomic_defi_design/assets/images/coins/btt.png and b/atomic_defi_design/assets/images/coins/btt.png differ diff --git a/atomic_defi_design/assets/images/coins/bttc.png b/atomic_defi_design/assets/images/coins/bttc.png index d734b5499..1316eeb40 100644 Binary files a/atomic_defi_design/assets/images/coins/bttc.png and b/atomic_defi_design/assets/images/coins/bttc.png differ diff --git a/atomic_defi_design/assets/images/coins/btu.png b/atomic_defi_design/assets/images/coins/btu.png index 5c748b8e6..a72e539f5 100644 Binary files a/atomic_defi_design/assets/images/coins/btu.png and b/atomic_defi_design/assets/images/coins/btu.png differ diff --git a/atomic_defi_design/assets/images/coins/btx.png b/atomic_defi_design/assets/images/coins/btx.png index 639cb07b3..824dd442d 100644 Binary files a/atomic_defi_design/assets/images/coins/btx.png and b/atomic_defi_design/assets/images/coins/btx.png differ diff --git a/atomic_defi_design/assets/images/coins/burst.png b/atomic_defi_design/assets/images/coins/burst.png deleted file mode 100644 index 05aaad235..000000000 Binary files a/atomic_defi_design/assets/images/coins/burst.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/busd.png b/atomic_defi_design/assets/images/coins/busd.png index 76d02e370..3dc8ad309 100644 Binary files a/atomic_defi_design/assets/images/coins/busd.png and b/atomic_defi_design/assets/images/coins/busd.png differ diff --git a/atomic_defi_design/assets/images/coins/bze.png b/atomic_defi_design/assets/images/coins/bze.png deleted file mode 100644 index 0f6254f82..000000000 Binary files a/atomic_defi_design/assets/images/coins/bze.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cadc.png b/atomic_defi_design/assets/images/coins/cadc.png index ecd7fe012..854d9d13d 100644 Binary files a/atomic_defi_design/assets/images/coins/cadc.png and b/atomic_defi_design/assets/images/coins/cadc.png differ diff --git a/atomic_defi_design/assets/images/coins/cake.png b/atomic_defi_design/assets/images/coins/cake.png index ab7e5927b..3170df2ab 100644 Binary files a/atomic_defi_design/assets/images/coins/cake.png and b/atomic_defi_design/assets/images/coins/cake.png differ diff --git a/atomic_defi_design/assets/images/coins/call.png b/atomic_defi_design/assets/images/coins/call.png deleted file mode 100644 index e7cfc2d22..000000000 Binary files a/atomic_defi_design/assets/images/coins/call.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/case.png b/atomic_defi_design/assets/images/coins/case.png index b54172b7f..37eded8f1 100644 Binary files a/atomic_defi_design/assets/images/coins/case.png and b/atomic_defi_design/assets/images/coins/case.png differ diff --git a/atomic_defi_design/assets/images/coins/cc.png b/atomic_defi_design/assets/images/coins/cc.png deleted file mode 100644 index 04e84b37c..000000000 Binary files a/atomic_defi_design/assets/images/coins/cc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ccl.png b/atomic_defi_design/assets/images/coins/ccl.png index a71780911..5e67f5667 100644 Binary files a/atomic_defi_design/assets/images/coins/ccl.png and b/atomic_defi_design/assets/images/coins/ccl.png differ diff --git a/atomic_defi_design/assets/images/coins/cdn.png b/atomic_defi_design/assets/images/coins/cdn.png index cd00b8dd4..34ed6d4eb 100644 Binary files a/atomic_defi_design/assets/images/coins/cdn.png and b/atomic_defi_design/assets/images/coins/cdn.png differ diff --git a/atomic_defi_design/assets/images/coins/cdt.png b/atomic_defi_design/assets/images/coins/cdt.png deleted file mode 100644 index f44b30650..000000000 Binary files a/atomic_defi_design/assets/images/coins/cdt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cel.png b/atomic_defi_design/assets/images/coins/cel.png index 4f9c14d97..b46803aaa 100644 Binary files a/atomic_defi_design/assets/images/coins/cel.png and b/atomic_defi_design/assets/images/coins/cel.png differ diff --git a/atomic_defi_design/assets/images/coins/celr.png b/atomic_defi_design/assets/images/coins/celr.png index 111cf70ad..88efec645 100644 Binary files a/atomic_defi_design/assets/images/coins/celr.png and b/atomic_defi_design/assets/images/coins/celr.png differ diff --git a/atomic_defi_design/assets/images/coins/cennz.png b/atomic_defi_design/assets/images/coins/cennz.png index f79d10bd8..b6c061cb3 100644 Binary files a/atomic_defi_design/assets/images/coins/cennz.png and b/atomic_defi_design/assets/images/coins/cennz.png differ diff --git a/atomic_defi_design/assets/images/coins/cenz.png b/atomic_defi_design/assets/images/coins/cenz.png deleted file mode 100644 index f79d10bd8..000000000 Binary files a/atomic_defi_design/assets/images/coins/cenz.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cfi.png b/atomic_defi_design/assets/images/coins/cfi.png deleted file mode 100644 index 3040d8259..000000000 Binary files a/atomic_defi_design/assets/images/coins/cfi.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/chain.png b/atomic_defi_design/assets/images/coins/chain.png deleted file mode 100644 index f43a08ba9..000000000 Binary files a/atomic_defi_design/assets/images/coins/chain.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/chat.png b/atomic_defi_design/assets/images/coins/chat.png deleted file mode 100644 index 378d1cddd..000000000 Binary files a/atomic_defi_design/assets/images/coins/chat.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/chips.png b/atomic_defi_design/assets/images/coins/chips.png index 74009f413..b4c4e97b9 100644 Binary files a/atomic_defi_design/assets/images/coins/chips.png and b/atomic_defi_design/assets/images/coins/chips.png differ diff --git a/atomic_defi_design/assets/images/coins/chsb.png b/atomic_defi_design/assets/images/coins/chsb.png index 0a345530d..da6a821a6 100644 Binary files a/atomic_defi_design/assets/images/coins/chsb.png and b/atomic_defi_design/assets/images/coins/chsb.png differ diff --git a/atomic_defi_design/assets/images/coins/chz.png b/atomic_defi_design/assets/images/coins/chz.png index ab2b98edd..400df2863 100644 Binary files a/atomic_defi_design/assets/images/coins/chz.png and b/atomic_defi_design/assets/images/coins/chz.png differ diff --git a/atomic_defi_design/assets/images/coins/ciphs.png b/atomic_defi_design/assets/images/coins/ciphs.png index 5b3b3f15d..e8ed378a6 100644 Binary files a/atomic_defi_design/assets/images/coins/ciphs.png and b/atomic_defi_design/assets/images/coins/ciphs.png differ diff --git a/atomic_defi_design/assets/images/coins/cix.png b/atomic_defi_design/assets/images/coins/cix.png deleted file mode 100644 index ee5c02817..000000000 Binary files a/atomic_defi_design/assets/images/coins/cix.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/clam.png b/atomic_defi_design/assets/images/coins/clam.png deleted file mode 100644 index c4ff987e3..000000000 Binary files a/atomic_defi_design/assets/images/coins/clam.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/clc.png b/atomic_defi_design/assets/images/coins/clc.png index 2821a9a9f..84d9d1d80 100644 Binary files a/atomic_defi_design/assets/images/coins/clc.png and b/atomic_defi_design/assets/images/coins/clc.png differ diff --git a/atomic_defi_design/assets/images/coins/cloak.png b/atomic_defi_design/assets/images/coins/cloak.png deleted file mode 100644 index aa31d016b..000000000 Binary files a/atomic_defi_design/assets/images/coins/cloak.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cmm.png b/atomic_defi_design/assets/images/coins/cmm.png deleted file mode 100644 index 65c6169ca..000000000 Binary files a/atomic_defi_design/assets/images/coins/cmm.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cmt.png b/atomic_defi_design/assets/images/coins/cmt.png deleted file mode 100644 index 48f573912..000000000 Binary files a/atomic_defi_design/assets/images/coins/cmt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cnd.png b/atomic_defi_design/assets/images/coins/cnd.png deleted file mode 100644 index 07592cd27..000000000 Binary files a/atomic_defi_design/assets/images/coins/cnd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cnx.png b/atomic_defi_design/assets/images/coins/cnx.png deleted file mode 100644 index 017f7f881..000000000 Binary files a/atomic_defi_design/assets/images/coins/cnx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cny.png b/atomic_defi_design/assets/images/coins/cny.png deleted file mode 100644 index ce1002b8b..000000000 Binary files a/atomic_defi_design/assets/images/coins/cny.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cob.png b/atomic_defi_design/assets/images/coins/cob.png deleted file mode 100644 index 3f2bc762a..000000000 Binary files a/atomic_defi_design/assets/images/coins/cob.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/colx.png b/atomic_defi_design/assets/images/coins/colx.png deleted file mode 100644 index a71e50f2b..000000000 Binary files a/atomic_defi_design/assets/images/coins/colx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/comp.png b/atomic_defi_design/assets/images/coins/comp.png index 27e255810..66cf06618 100644 Binary files a/atomic_defi_design/assets/images/coins/comp.png and b/atomic_defi_design/assets/images/coins/comp.png differ diff --git a/atomic_defi_design/assets/images/coins/cred.png b/atomic_defi_design/assets/images/coins/cred.png deleted file mode 100644 index fef004a64..000000000 Binary files a/atomic_defi_design/assets/images/coins/cred.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cro.png b/atomic_defi_design/assets/images/coins/cro.png index f65a8814f..588fcd424 100644 Binary files a/atomic_defi_design/assets/images/coins/cro.png and b/atomic_defi_design/assets/images/coins/cro.png differ diff --git a/atomic_defi_design/assets/images/coins/crpt.png b/atomic_defi_design/assets/images/coins/crpt.png deleted file mode 100644 index 272e97db6..000000000 Binary files a/atomic_defi_design/assets/images/coins/crpt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/crv.png b/atomic_defi_design/assets/images/coins/crv.png index e723c7d9b..67db7e5d7 100644 Binary files a/atomic_defi_design/assets/images/coins/crv.png and b/atomic_defi_design/assets/images/coins/crv.png differ diff --git a/atomic_defi_design/assets/images/coins/crw.png b/atomic_defi_design/assets/images/coins/crw.png deleted file mode 100644 index fca0b48f6..000000000 Binary files a/atomic_defi_design/assets/images/coins/crw.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/crypto.png b/atomic_defi_design/assets/images/coins/crypto.png index 063ce6db6..6f368838e 100644 Binary files a/atomic_defi_design/assets/images/coins/crypto.png and b/atomic_defi_design/assets/images/coins/crypto.png differ diff --git a/atomic_defi_design/assets/images/coins/cs.png b/atomic_defi_design/assets/images/coins/cs.png deleted file mode 100644 index ca3b0b353..000000000 Binary files a/atomic_defi_design/assets/images/coins/cs.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ctr.png b/atomic_defi_design/assets/images/coins/ctr.png deleted file mode 100644 index d985a2c26..000000000 Binary files a/atomic_defi_design/assets/images/coins/ctr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ctxc.png b/atomic_defi_design/assets/images/coins/ctxc.png deleted file mode 100644 index 7ece6b9f3..000000000 Binary files a/atomic_defi_design/assets/images/coins/ctxc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/cummies.png b/atomic_defi_design/assets/images/coins/cummies.png index 1e6a9e3d3..1a836bf7a 100644 Binary files a/atomic_defi_design/assets/images/coins/cummies.png and b/atomic_defi_design/assets/images/coins/cummies.png differ diff --git a/atomic_defi_design/assets/images/coins/cvc.png b/atomic_defi_design/assets/images/coins/cvc.png index ed3376c0c..646a054cb 100644 Binary files a/atomic_defi_design/assets/images/coins/cvc.png and b/atomic_defi_design/assets/images/coins/cvc.png differ diff --git a/atomic_defi_design/assets/images/coins/cvt.png b/atomic_defi_design/assets/images/coins/cvt.png index d5daa6727..cbf975908 100644 Binary files a/atomic_defi_design/assets/images/coins/cvt.png and b/atomic_defi_design/assets/images/coins/cvt.png differ diff --git a/atomic_defi_design/assets/images/coins/d.png b/atomic_defi_design/assets/images/coins/d.png deleted file mode 100644 index 7fa63b4f8..000000000 Binary files a/atomic_defi_design/assets/images/coins/d.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dai.png b/atomic_defi_design/assets/images/coins/dai.png index 715a7411b..57dd5d9c2 100644 Binary files a/atomic_defi_design/assets/images/coins/dai.png and b/atomic_defi_design/assets/images/coins/dai.png differ diff --git a/atomic_defi_design/assets/images/coins/dash.png b/atomic_defi_design/assets/images/coins/dash.png index f67fe04a1..93fb0a178 100644 Binary files a/atomic_defi_design/assets/images/coins/dash.png and b/atomic_defi_design/assets/images/coins/dash.png differ diff --git a/atomic_defi_design/assets/images/coins/dat.png b/atomic_defi_design/assets/images/coins/dat.png deleted file mode 100644 index 3be121b4a..000000000 Binary files a/atomic_defi_design/assets/images/coins/dat.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/data.png b/atomic_defi_design/assets/images/coins/data.png deleted file mode 100644 index 455929c4e..000000000 Binary files a/atomic_defi_design/assets/images/coins/data.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dbc.png b/atomic_defi_design/assets/images/coins/dbc.png deleted file mode 100644 index 0ed259624..000000000 Binary files a/atomic_defi_design/assets/images/coins/dbc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dcn.png b/atomic_defi_design/assets/images/coins/dcn.png deleted file mode 100644 index 3d291a930..000000000 Binary files a/atomic_defi_design/assets/images/coins/dcn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dcr.png b/atomic_defi_design/assets/images/coins/dcr.png deleted file mode 100644 index 398c6c3b8..000000000 Binary files a/atomic_defi_design/assets/images/coins/dcr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/deez.png b/atomic_defi_design/assets/images/coins/deez.png deleted file mode 100644 index 63f8c9b80..000000000 Binary files a/atomic_defi_design/assets/images/coins/deez.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dent.png b/atomic_defi_design/assets/images/coins/dent.png deleted file mode 100644 index 575c58064..000000000 Binary files a/atomic_defi_design/assets/images/coins/dent.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dew.png b/atomic_defi_design/assets/images/coins/dew.png deleted file mode 100644 index edca0eee1..000000000 Binary files a/atomic_defi_design/assets/images/coins/dew.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dex.png b/atomic_defi_design/assets/images/coins/dex.png index de71f6546..fa3c92628 100644 Binary files a/atomic_defi_design/assets/images/coins/dex.png and b/atomic_defi_design/assets/images/coins/dex.png differ diff --git a/atomic_defi_design/assets/images/coins/dgb.png b/atomic_defi_design/assets/images/coins/dgb.png index d94fbc1fb..ae4e53ee0 100644 Binary files a/atomic_defi_design/assets/images/coins/dgb.png and b/atomic_defi_design/assets/images/coins/dgb.png differ diff --git a/atomic_defi_design/assets/images/coins/dgc.png b/atomic_defi_design/assets/images/coins/dgc.png index 2ae3b2b18..d8ec144f9 100644 Binary files a/atomic_defi_design/assets/images/coins/dgc.png and b/atomic_defi_design/assets/images/coins/dgc.png differ diff --git a/atomic_defi_design/assets/images/coins/dgd.png b/atomic_defi_design/assets/images/coins/dgd.png deleted file mode 100644 index 74be4db8a..000000000 Binary files a/atomic_defi_design/assets/images/coins/dgd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dia.png b/atomic_defi_design/assets/images/coins/dia.png index cf4055057..eebebae1f 100644 Binary files a/atomic_defi_design/assets/images/coins/dia.png and b/atomic_defi_design/assets/images/coins/dia.png differ diff --git a/atomic_defi_design/assets/images/coins/dimi.png b/atomic_defi_design/assets/images/coins/dimi.png index 595639cb6..2b37a7352 100644 Binary files a/atomic_defi_design/assets/images/coins/dimi.png and b/atomic_defi_design/assets/images/coins/dimi.png differ diff --git a/atomic_defi_design/assets/images/coins/dlt.png b/atomic_defi_design/assets/images/coins/dlt.png deleted file mode 100644 index 831413330..000000000 Binary files a/atomic_defi_design/assets/images/coins/dlt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dnt.png b/atomic_defi_design/assets/images/coins/dnt.png deleted file mode 100644 index 5cc3c2b66..000000000 Binary files a/atomic_defi_design/assets/images/coins/dnt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dock.png b/atomic_defi_design/assets/images/coins/dock.png deleted file mode 100644 index 7e27c3de0..000000000 Binary files a/atomic_defi_design/assets/images/coins/dock.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dodo.png b/atomic_defi_design/assets/images/coins/dodo.png index 3e5c74967..e9fa69a25 100644 Binary files a/atomic_defi_design/assets/images/coins/dodo.png and b/atomic_defi_design/assets/images/coins/dodo.png differ diff --git a/atomic_defi_design/assets/images/coins/doge.png b/atomic_defi_design/assets/images/coins/doge.png index aff116bf4..de023499c 100644 Binary files a/atomic_defi_design/assets/images/coins/doge.png and b/atomic_defi_design/assets/images/coins/doge.png differ diff --git a/atomic_defi_design/assets/images/coins/dogedash.png b/atomic_defi_design/assets/images/coins/dogedash.png index a25a55ab3..bf473e5cf 100644 Binary files a/atomic_defi_design/assets/images/coins/dogedash.png and b/atomic_defi_design/assets/images/coins/dogedash.png differ diff --git a/atomic_defi_design/assets/images/coins/doggy.png b/atomic_defi_design/assets/images/coins/doggy.png index e8745e19d..017ecf077 100644 Binary files a/atomic_defi_design/assets/images/coins/doggy.png and b/atomic_defi_design/assets/images/coins/doggy.png differ diff --git a/atomic_defi_design/assets/images/coins/doi.png b/atomic_defi_design/assets/images/coins/doi.png index 141dd6320..b5638bbdc 100644 Binary files a/atomic_defi_design/assets/images/coins/doi.png and b/atomic_defi_design/assets/images/coins/doi.png differ diff --git a/atomic_defi_design/assets/images/coins/dot.png b/atomic_defi_design/assets/images/coins/dot.png index 0f998dc7d..cfe0aa1c7 100644 Binary files a/atomic_defi_design/assets/images/coins/dot.png and b/atomic_defi_design/assets/images/coins/dot.png differ diff --git a/atomic_defi_design/assets/images/coins/dp.png b/atomic_defi_design/assets/images/coins/dp.png index 8c3146131..749b08b17 100644 Binary files a/atomic_defi_design/assets/images/coins/dp.png and b/atomic_defi_design/assets/images/coins/dp.png differ diff --git a/atomic_defi_design/assets/images/coins/drgn.png b/atomic_defi_design/assets/images/coins/drgn.png deleted file mode 100644 index ed642328f..000000000 Binary files a/atomic_defi_design/assets/images/coins/drgn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/drop.png b/atomic_defi_design/assets/images/coins/drop.png deleted file mode 100644 index 206d4394d..000000000 Binary files a/atomic_defi_design/assets/images/coins/drop.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dta.png b/atomic_defi_design/assets/images/coins/dta.png deleted file mode 100644 index 149f09584..000000000 Binary files a/atomic_defi_design/assets/images/coins/dta.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dth.png b/atomic_defi_design/assets/images/coins/dth.png deleted file mode 100644 index b957588ee..000000000 Binary files a/atomic_defi_design/assets/images/coins/dth.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dtr.png b/atomic_defi_design/assets/images/coins/dtr.png deleted file mode 100644 index bdea3ba2a..000000000 Binary files a/atomic_defi_design/assets/images/coins/dtr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/dust.png b/atomic_defi_design/assets/images/coins/dust.png index 96f0eac59..3b3bc81c8 100644 Binary files a/atomic_defi_design/assets/images/coins/dust.png and b/atomic_defi_design/assets/images/coins/dust.png differ diff --git a/atomic_defi_design/assets/images/coins/dx.png b/atomic_defi_design/assets/images/coins/dx.png index 13cba15bf..5104b0f67 100644 Binary files a/atomic_defi_design/assets/images/coins/dx.png and b/atomic_defi_design/assets/images/coins/dx.png differ diff --git a/atomic_defi_design/assets/images/coins/ebst.png b/atomic_defi_design/assets/images/coins/ebst.png deleted file mode 100644 index aa29c9b73..000000000 Binary files a/atomic_defi_design/assets/images/coins/ebst.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eca.png b/atomic_defi_design/assets/images/coins/eca.png index 1e80a6de8..adafc3486 100644 Binary files a/atomic_defi_design/assets/images/coins/eca.png and b/atomic_defi_design/assets/images/coins/eca.png differ diff --git a/atomic_defi_design/assets/images/coins/edg.png b/atomic_defi_design/assets/images/coins/edg.png deleted file mode 100644 index bc86de582..000000000 Binary files a/atomic_defi_design/assets/images/coins/edg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/edo.png b/atomic_defi_design/assets/images/coins/edo.png deleted file mode 100644 index 88290dda6..000000000 Binary files a/atomic_defi_design/assets/images/coins/edo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/edoge.png b/atomic_defi_design/assets/images/coins/edoge.png deleted file mode 100644 index c0ce51c87..000000000 Binary files a/atomic_defi_design/assets/images/coins/edoge.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/efl.png b/atomic_defi_design/assets/images/coins/efl.png index 97ec97511..241bb9f67 100644 Binary files a/atomic_defi_design/assets/images/coins/efl.png and b/atomic_defi_design/assets/images/coins/efl.png differ diff --git a/atomic_defi_design/assets/images/coins/egld.png b/atomic_defi_design/assets/images/coins/egld.png index b9b53a492..9ad5b4a12 100644 Binary files a/atomic_defi_design/assets/images/coins/egld.png and b/atomic_defi_design/assets/images/coins/egld.png differ diff --git a/atomic_defi_design/assets/images/coins/eiln.png b/atomic_defi_design/assets/images/coins/eiln.png new file mode 100644 index 000000000..1bfd3ee3c Binary files /dev/null and b/atomic_defi_design/assets/images/coins/eiln.png differ diff --git a/atomic_defi_design/assets/images/coins/ela.png b/atomic_defi_design/assets/images/coins/ela.png deleted file mode 100644 index 0159d84e1..000000000 Binary files a/atomic_defi_design/assets/images/coins/ela.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/elec.png b/atomic_defi_design/assets/images/coins/elec.png deleted file mode 100644 index b299d8149..000000000 Binary files a/atomic_defi_design/assets/images/coins/elec.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/elf.png b/atomic_defi_design/assets/images/coins/elf.png index 087f6f568..f578c0bb6 100644 Binary files a/atomic_defi_design/assets/images/coins/elf.png and b/atomic_defi_design/assets/images/coins/elf.png differ diff --git a/atomic_defi_design/assets/images/coins/elix.png b/atomic_defi_design/assets/images/coins/elix.png deleted file mode 100644 index 798f8e8d3..000000000 Binary files a/atomic_defi_design/assets/images/coins/elix.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ella.png b/atomic_defi_design/assets/images/coins/ella.png deleted file mode 100644 index 0afa2e4b3..000000000 Binary files a/atomic_defi_design/assets/images/coins/ella.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/emc.png b/atomic_defi_design/assets/images/coins/emc.png deleted file mode 100644 index ae753f7cc..000000000 Binary files a/atomic_defi_design/assets/images/coins/emc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/emc2.png b/atomic_defi_design/assets/images/coins/emc2.png index 5017a8e90..79150900f 100644 Binary files a/atomic_defi_design/assets/images/coins/emc2.png and b/atomic_defi_design/assets/images/coins/emc2.png differ diff --git a/atomic_defi_design/assets/images/coins/eng.png b/atomic_defi_design/assets/images/coins/eng.png deleted file mode 100644 index 590d518fd..000000000 Binary files a/atomic_defi_design/assets/images/coins/eng.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/enj.png b/atomic_defi_design/assets/images/coins/enj.png index c1390a1d8..569b5922a 100644 Binary files a/atomic_defi_design/assets/images/coins/enj.png and b/atomic_defi_design/assets/images/coins/enj.png differ diff --git a/atomic_defi_design/assets/images/coins/entrp.png b/atomic_defi_design/assets/images/coins/entrp.png deleted file mode 100644 index ad39e0d06..000000000 Binary files a/atomic_defi_design/assets/images/coins/entrp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eon.png b/atomic_defi_design/assets/images/coins/eon.png deleted file mode 100644 index e05fd3c55..000000000 Binary files a/atomic_defi_design/assets/images/coins/eon.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eop.png b/atomic_defi_design/assets/images/coins/eop.png deleted file mode 100644 index 557f3c568..000000000 Binary files a/atomic_defi_design/assets/images/coins/eop.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eos.png b/atomic_defi_design/assets/images/coins/eos.png index 7b4d4e720..9f03930e3 100644 Binary files a/atomic_defi_design/assets/images/coins/eos.png and b/atomic_defi_design/assets/images/coins/eos.png differ diff --git a/atomic_defi_design/assets/images/coins/eqli.png b/atomic_defi_design/assets/images/coins/eqli.png deleted file mode 100644 index 026b5f98e..000000000 Binary files a/atomic_defi_design/assets/images/coins/eqli.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/equa.png b/atomic_defi_design/assets/images/coins/equa.png deleted file mode 100644 index 3158e1f1e..000000000 Binary files a/atomic_defi_design/assets/images/coins/equa.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/erc-20.png b/atomic_defi_design/assets/images/coins/erc-20.png deleted file mode 100644 index db654a890..000000000 Binary files a/atomic_defi_design/assets/images/coins/erc-20.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/erc.png b/atomic_defi_design/assets/images/coins/erc.png new file mode 100644 index 000000000..8ed7e19f1 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/erc.png differ diff --git a/atomic_defi_design/assets/images/coins/etc.png b/atomic_defi_design/assets/images/coins/etc.png index 5f0339b26..42d776e1b 100644 Binary files a/atomic_defi_design/assets/images/coins/etc.png and b/atomic_defi_design/assets/images/coins/etc.png differ diff --git a/atomic_defi_design/assets/images/coins/eth.png b/atomic_defi_design/assets/images/coins/eth.png index c0f1de796..8ed7e19f1 100644 Binary files a/atomic_defi_design/assets/images/coins/eth.png and b/atomic_defi_design/assets/images/coins/eth.png differ diff --git a/atomic_defi_design/assets/images/coins/ethk.png b/atomic_defi_design/assets/images/coins/ethk.png index c0f1de796..f906809a3 100644 Binary files a/atomic_defi_design/assets/images/coins/ethk.png and b/atomic_defi_design/assets/images/coins/ethk.png differ diff --git a/atomic_defi_design/assets/images/coins/ethos.png b/atomic_defi_design/assets/images/coins/ethos.png deleted file mode 100644 index 42667c606..000000000 Binary files a/atomic_defi_design/assets/images/coins/ethos.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ethr.png b/atomic_defi_design/assets/images/coins/ethr.png index c0f1de796..8ed7e19f1 100644 Binary files a/atomic_defi_design/assets/images/coins/ethr.png and b/atomic_defi_design/assets/images/coins/ethr.png differ diff --git a/atomic_defi_design/assets/images/coins/etn.png b/atomic_defi_design/assets/images/coins/etn.png deleted file mode 100644 index 38788c65d..000000000 Binary files a/atomic_defi_design/assets/images/coins/etn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/etp.png b/atomic_defi_design/assets/images/coins/etp.png deleted file mode 100644 index 936f58635..000000000 Binary files a/atomic_defi_design/assets/images/coins/etp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eur.png b/atomic_defi_design/assets/images/coins/eur.png deleted file mode 100644 index 818b85c77..000000000 Binary files a/atomic_defi_design/assets/images/coins/eur.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/eurs.png b/atomic_defi_design/assets/images/coins/eurs.png index 413347147..65edde4e1 100644 Binary files a/atomic_defi_design/assets/images/coins/eurs.png and b/atomic_defi_design/assets/images/coins/eurs.png differ diff --git a/atomic_defi_design/assets/images/coins/evx.png b/atomic_defi_design/assets/images/coins/evx.png deleted file mode 100644 index d6f2fd73c..000000000 Binary files a/atomic_defi_design/assets/images/coins/evx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/exmo.png b/atomic_defi_design/assets/images/coins/exmo.png deleted file mode 100644 index 0073470ff..000000000 Binary files a/atomic_defi_design/assets/images/coins/exmo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/exp.png b/atomic_defi_design/assets/images/coins/exp.png deleted file mode 100644 index 198f690c2..000000000 Binary files a/atomic_defi_design/assets/images/coins/exp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/fair.png b/atomic_defi_design/assets/images/coins/fair.png deleted file mode 100644 index 2071df144..000000000 Binary files a/atomic_defi_design/assets/images/coins/fair.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/fct.png b/atomic_defi_design/assets/images/coins/fct.png deleted file mode 100644 index 527ff428d..000000000 Binary files a/atomic_defi_design/assets/images/coins/fct.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/fet.png b/atomic_defi_design/assets/images/coins/fet.png index 0dab67ece..7258d9bcc 100644 Binary files a/atomic_defi_design/assets/images/coins/fet.png and b/atomic_defi_design/assets/images/coins/fet.png differ diff --git a/atomic_defi_design/assets/images/coins/fil.png b/atomic_defi_design/assets/images/coins/fil.png index 0cf5b9155..a29fd9f5a 100644 Binary files a/atomic_defi_design/assets/images/coins/fil.png and b/atomic_defi_design/assets/images/coins/fil.png differ diff --git a/atomic_defi_design/assets/images/coins/firo.png b/atomic_defi_design/assets/images/coins/firo.png index b9eb8f9d2..a1d8c58c3 100644 Binary files a/atomic_defi_design/assets/images/coins/firo.png and b/atomic_defi_design/assets/images/coins/firo.png differ diff --git a/atomic_defi_design/assets/images/coins/fjc.png b/atomic_defi_design/assets/images/coins/fjc.png index b24dd6716..845f4797e 100644 Binary files a/atomic_defi_design/assets/images/coins/fjc.png and b/atomic_defi_design/assets/images/coins/fjc.png differ diff --git a/atomic_defi_design/assets/images/coins/fjcb.png b/atomic_defi_design/assets/images/coins/fjcb.png index 7c7ce0603..8f60a045e 100644 Binary files a/atomic_defi_design/assets/images/coins/fjcb.png and b/atomic_defi_design/assets/images/coins/fjcb.png differ diff --git a/atomic_defi_design/assets/images/coins/fldc.png b/atomic_defi_design/assets/images/coins/fldc.png deleted file mode 100644 index a758a9990..000000000 Binary files a/atomic_defi_design/assets/images/coins/fldc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/flo.png b/atomic_defi_design/assets/images/coins/flo.png deleted file mode 100644 index 349495c6b..000000000 Binary files a/atomic_defi_design/assets/images/coins/flo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/floki.png b/atomic_defi_design/assets/images/coins/floki.png index 896d275d6..51051ecb3 100644 Binary files a/atomic_defi_design/assets/images/coins/floki.png and b/atomic_defi_design/assets/images/coins/floki.png differ diff --git a/atomic_defi_design/assets/images/coins/flow.png b/atomic_defi_design/assets/images/coins/flow.png index 98acc76f6..b50667d98 100644 Binary files a/atomic_defi_design/assets/images/coins/flow.png and b/atomic_defi_design/assets/images/coins/flow.png differ diff --git a/atomic_defi_design/assets/images/coins/flux.png b/atomic_defi_design/assets/images/coins/flux.png index 80a7711a4..f2812251b 100644 Binary files a/atomic_defi_design/assets/images/coins/flux.png and b/atomic_defi_design/assets/images/coins/flux.png differ diff --git a/atomic_defi_design/assets/images/coins/fsn.png b/atomic_defi_design/assets/images/coins/fsn.png deleted file mode 100644 index de7202890..000000000 Binary files a/atomic_defi_design/assets/images/coins/fsn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ftc.png b/atomic_defi_design/assets/images/coins/ftc.png index da62fcc2c..74d1908c5 100644 Binary files a/atomic_defi_design/assets/images/coins/ftc.png and b/atomic_defi_design/assets/images/coins/ftc.png differ diff --git a/atomic_defi_design/assets/images/coins/ftm.png b/atomic_defi_design/assets/images/coins/ftm.png index 27d47f2eb..741549c80 100644 Binary files a/atomic_defi_design/assets/images/coins/ftm.png and b/atomic_defi_design/assets/images/coins/ftm.png differ diff --git a/atomic_defi_design/assets/images/coins/ftmt.png b/atomic_defi_design/assets/images/coins/ftmt.png index 27d47f2eb..396152ee2 100644 Binary files a/atomic_defi_design/assets/images/coins/ftmt.png and b/atomic_defi_design/assets/images/coins/ftmt.png differ diff --git a/atomic_defi_design/assets/images/coins/fuel.png b/atomic_defi_design/assets/images/coins/fuel.png deleted file mode 100644 index f0cd35a21..000000000 Binary files a/atomic_defi_design/assets/images/coins/fuel.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/fun.png b/atomic_defi_design/assets/images/coins/fun.png deleted file mode 100644 index 73609d6bf..000000000 Binary files a/atomic_defi_design/assets/images/coins/fun.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gala.png b/atomic_defi_design/assets/images/coins/gala.png index 0c097c4df..3484a63d7 100644 Binary files a/atomic_defi_design/assets/images/coins/gala.png and b/atomic_defi_design/assets/images/coins/gala.png differ diff --git a/atomic_defi_design/assets/images/coins/game.png b/atomic_defi_design/assets/images/coins/game.png deleted file mode 100644 index fd3c95c6e..000000000 Binary files a/atomic_defi_design/assets/images/coins/game.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gas.png b/atomic_defi_design/assets/images/coins/gas.png deleted file mode 100644 index 102c36f3e..000000000 Binary files a/atomic_defi_design/assets/images/coins/gas.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gbp.png b/atomic_defi_design/assets/images/coins/gbp.png deleted file mode 100644 index cb7236540..000000000 Binary files a/atomic_defi_design/assets/images/coins/gbp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gbx.png b/atomic_defi_design/assets/images/coins/gbx.png deleted file mode 100644 index 0c8629388..000000000 Binary files a/atomic_defi_design/assets/images/coins/gbx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gbyte.png b/atomic_defi_design/assets/images/coins/gbyte.png deleted file mode 100644 index 5079d51a7..000000000 Binary files a/atomic_defi_design/assets/images/coins/gbyte.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/generic.png b/atomic_defi_design/assets/images/coins/generic.png deleted file mode 100644 index 5edf855df..000000000 Binary files a/atomic_defi_design/assets/images/coins/generic.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gin.png b/atomic_defi_design/assets/images/coins/gin.png deleted file mode 100644 index 80742cfe0..000000000 Binary files a/atomic_defi_design/assets/images/coins/gin.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gleec.png b/atomic_defi_design/assets/images/coins/gleec.png index b245f67f5..23b23b2ce 100644 Binary files a/atomic_defi_design/assets/images/coins/gleec.png and b/atomic_defi_design/assets/images/coins/gleec.png differ diff --git a/atomic_defi_design/assets/images/coins/glmr.png b/atomic_defi_design/assets/images/coins/glmr.png index d449d08ba..543c9436a 100644 Binary files a/atomic_defi_design/assets/images/coins/glmr.png and b/atomic_defi_design/assets/images/coins/glmr.png differ diff --git a/atomic_defi_design/assets/images/coins/glxt.png b/atomic_defi_design/assets/images/coins/glxt.png deleted file mode 100644 index 44794a090..000000000 Binary files a/atomic_defi_design/assets/images/coins/glxt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gm.png b/atomic_defi_design/assets/images/coins/gm.png index ca6c15963..de3a3f732 100644 Binary files a/atomic_defi_design/assets/images/coins/gm.png and b/atomic_defi_design/assets/images/coins/gm.png differ diff --git a/atomic_defi_design/assets/images/coins/gmr.png b/atomic_defi_design/assets/images/coins/gmr.png deleted file mode 100644 index d660e3cc0..000000000 Binary files a/atomic_defi_design/assets/images/coins/gmr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gms.png b/atomic_defi_design/assets/images/coins/gms.png index 3877c3a97..d665b0e1a 100644 Binary files a/atomic_defi_design/assets/images/coins/gms.png and b/atomic_defi_design/assets/images/coins/gms.png differ diff --git a/atomic_defi_design/assets/images/coins/gmt.png b/atomic_defi_design/assets/images/coins/gmt.png new file mode 100644 index 000000000..1f5027659 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/gmt.png differ diff --git a/atomic_defi_design/assets/images/coins/gno.png b/atomic_defi_design/assets/images/coins/gno.png index ccc0709cb..4ec87e9ff 100644 Binary files a/atomic_defi_design/assets/images/coins/gno.png and b/atomic_defi_design/assets/images/coins/gno.png differ diff --git a/atomic_defi_design/assets/images/coins/gnt.png b/atomic_defi_design/assets/images/coins/gnt.png deleted file mode 100644 index 2596892e0..000000000 Binary files a/atomic_defi_design/assets/images/coins/gnt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gold.png b/atomic_defi_design/assets/images/coins/gold.png deleted file mode 100644 index 82102961f..000000000 Binary files a/atomic_defi_design/assets/images/coins/gold.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/grc.png b/atomic_defi_design/assets/images/coins/grc.png deleted file mode 100644 index 93a552e90..000000000 Binary files a/atomic_defi_design/assets/images/coins/grc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/grin.png b/atomic_defi_design/assets/images/coins/grin.png deleted file mode 100644 index 87d85d5a6..000000000 Binary files a/atomic_defi_design/assets/images/coins/grin.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/grms.png b/atomic_defi_design/assets/images/coins/grms.png index 11c316c47..973be805f 100644 Binary files a/atomic_defi_design/assets/images/coins/grms.png and b/atomic_defi_design/assets/images/coins/grms.png differ diff --git a/atomic_defi_design/assets/images/coins/grs.png b/atomic_defi_design/assets/images/coins/grs.png index 460d60e78..616fde55a 100644 Binary files a/atomic_defi_design/assets/images/coins/grs.png and b/atomic_defi_design/assets/images/coins/grs.png differ diff --git a/atomic_defi_design/assets/images/coins/grt.png b/atomic_defi_design/assets/images/coins/grt.png index d0d8cfd8f..303b8415e 100644 Binary files a/atomic_defi_design/assets/images/coins/grt.png and b/atomic_defi_design/assets/images/coins/grt.png differ diff --git a/atomic_defi_design/assets/images/coins/gsc.png b/atomic_defi_design/assets/images/coins/gsc.png deleted file mode 100644 index 0ca026034..000000000 Binary files a/atomic_defi_design/assets/images/coins/gsc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gst.png b/atomic_defi_design/assets/images/coins/gst.png new file mode 100644 index 000000000..ac8421f32 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/gst.png differ diff --git a/atomic_defi_design/assets/images/coins/gto.png b/atomic_defi_design/assets/images/coins/gto.png deleted file mode 100644 index e12ec1f2f..000000000 Binary files a/atomic_defi_design/assets/images/coins/gto.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gup.png b/atomic_defi_design/assets/images/coins/gup.png deleted file mode 100644 index ce119bab6..000000000 Binary files a/atomic_defi_design/assets/images/coins/gup.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gusd.png b/atomic_defi_design/assets/images/coins/gusd.png deleted file mode 100644 index 626b69900..000000000 Binary files a/atomic_defi_design/assets/images/coins/gusd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gvt.png b/atomic_defi_design/assets/images/coins/gvt.png deleted file mode 100644 index f49384de4..000000000 Binary files a/atomic_defi_design/assets/images/coins/gvt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gxs.png b/atomic_defi_design/assets/images/coins/gxs.png deleted file mode 100644 index 506484a98..000000000 Binary files a/atomic_defi_design/assets/images/coins/gxs.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/gzr.png b/atomic_defi_design/assets/images/coins/gzr.png deleted file mode 100644 index 9410fae0a..000000000 Binary files a/atomic_defi_design/assets/images/coins/gzr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/hex.png b/atomic_defi_design/assets/images/coins/hex.png index 480083394..c23b9f0e5 100644 Binary files a/atomic_defi_design/assets/images/coins/hex.png and b/atomic_defi_design/assets/images/coins/hex.png differ diff --git a/atomic_defi_design/assets/images/coins/hight.png b/atomic_defi_design/assets/images/coins/hight.png deleted file mode 100644 index 2fd050d80..000000000 Binary files a/atomic_defi_design/assets/images/coins/hight.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/hlc.png b/atomic_defi_design/assets/images/coins/hlc.png index 69ae83b3a..b21aad036 100644 Binary files a/atomic_defi_design/assets/images/coins/hlc.png and b/atomic_defi_design/assets/images/coins/hlc.png differ diff --git a/atomic_defi_design/assets/images/coins/hodl.png b/atomic_defi_design/assets/images/coins/hodl.png index 7289d2e02..973415fa3 100644 Binary files a/atomic_defi_design/assets/images/coins/hodl.png and b/atomic_defi_design/assets/images/coins/hodl.png differ diff --git a/atomic_defi_design/assets/images/coins/hot.png b/atomic_defi_design/assets/images/coins/hot.png index 91f73719b..a2344243e 100644 Binary files a/atomic_defi_design/assets/images/coins/hot.png and b/atomic_defi_design/assets/images/coins/hot.png differ diff --git a/atomic_defi_design/assets/images/coins/hpb.png b/atomic_defi_design/assets/images/coins/hpb.png deleted file mode 100644 index 2143dbf1b..000000000 Binary files a/atomic_defi_design/assets/images/coins/hpb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/hpy.png b/atomic_defi_design/assets/images/coins/hpy.png index 1a0252566..8f67992f0 100644 Binary files a/atomic_defi_design/assets/images/coins/hpy.png and b/atomic_defi_design/assets/images/coins/hpy.png differ diff --git a/atomic_defi_design/assets/images/coins/hsr.png b/atomic_defi_design/assets/images/coins/hsr.png deleted file mode 100644 index 42dd58fab..000000000 Binary files a/atomic_defi_design/assets/images/coins/hsr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ht.png b/atomic_defi_design/assets/images/coins/ht.png index b1e4f5279..456b8723f 100644 Binary files a/atomic_defi_design/assets/images/coins/ht.png and b/atomic_defi_design/assets/images/coins/ht.png differ diff --git a/atomic_defi_design/assets/images/coins/html.png b/atomic_defi_design/assets/images/coins/html.png deleted file mode 100644 index 1e3295440..000000000 Binary files a/atomic_defi_design/assets/images/coins/html.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/huc.png b/atomic_defi_design/assets/images/coins/huc.png deleted file mode 100644 index ab28b3069..000000000 Binary files a/atomic_defi_design/assets/images/coins/huc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/husd.png b/atomic_defi_design/assets/images/coins/husd.png index a7879e7f5..3eb9033b6 100644 Binary files a/atomic_defi_design/assets/images/coins/husd.png and b/atomic_defi_design/assets/images/coins/husd.png differ diff --git a/atomic_defi_design/assets/images/coins/hyn.png b/atomic_defi_design/assets/images/coins/hyn.png deleted file mode 100644 index cdebf2aca..000000000 Binary files a/atomic_defi_design/assets/images/coins/hyn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ic.png b/atomic_defi_design/assets/images/coins/ic.png index 87cfc008e..bca9219e5 100644 Binary files a/atomic_defi_design/assets/images/coins/ic.png and b/atomic_defi_design/assets/images/coins/ic.png differ diff --git a/atomic_defi_design/assets/images/coins/icn.png b/atomic_defi_design/assets/images/coins/icn.png deleted file mode 100644 index 01692deb6..000000000 Binary files a/atomic_defi_design/assets/images/coins/icn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/icx.png b/atomic_defi_design/assets/images/coins/icx.png deleted file mode 100644 index 406945b82..000000000 Binary files a/atomic_defi_design/assets/images/coins/icx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ignis.png b/atomic_defi_design/assets/images/coins/ignis.png deleted file mode 100644 index 99241a830..000000000 Binary files a/atomic_defi_design/assets/images/coins/ignis.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/il8p.png b/atomic_defi_design/assets/images/coins/il8p.png index afe0e94fc..0dd2d7738 100644 Binary files a/atomic_defi_design/assets/images/coins/il8p.png and b/atomic_defi_design/assets/images/coins/il8p.png differ diff --git a/atomic_defi_design/assets/images/coins/ilk.png b/atomic_defi_design/assets/images/coins/ilk.png deleted file mode 100644 index 6e52bb5d4..000000000 Binary files a/atomic_defi_design/assets/images/coins/ilk.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/iln.png b/atomic_defi_design/assets/images/coins/iln.png index 9a3939a9b..9fe60798b 100644 Binary files a/atomic_defi_design/assets/images/coins/iln.png and b/atomic_defi_design/assets/images/coins/iln.png differ diff --git a/atomic_defi_design/assets/images/coins/inj.png b/atomic_defi_design/assets/images/coins/inj.png index c53eb7e69..91a6bf0c3 100644 Binary files a/atomic_defi_design/assets/images/coins/inj.png and b/atomic_defi_design/assets/images/coins/inj.png differ diff --git a/atomic_defi_design/assets/images/coins/ink.png b/atomic_defi_design/assets/images/coins/ink.png index 259f8eea4..c4acc1a87 100644 Binary files a/atomic_defi_design/assets/images/coins/ink.png and b/atomic_defi_design/assets/images/coins/ink.png differ diff --git a/atomic_defi_design/assets/images/coins/ins.png b/atomic_defi_design/assets/images/coins/ins.png deleted file mode 100644 index b237f8b01..000000000 Binary files a/atomic_defi_design/assets/images/coins/ins.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ion.png b/atomic_defi_design/assets/images/coins/ion.png deleted file mode 100644 index 99bebde91..000000000 Binary files a/atomic_defi_design/assets/images/coins/ion.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/iop.png b/atomic_defi_design/assets/images/coins/iop.png deleted file mode 100644 index c0e840a50..000000000 Binary files a/atomic_defi_design/assets/images/coins/iop.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/iost.png b/atomic_defi_design/assets/images/coins/iost.png deleted file mode 100644 index b9c02093c..000000000 Binary files a/atomic_defi_design/assets/images/coins/iost.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/iota.png b/atomic_defi_design/assets/images/coins/iota.png index 748f6bd3e..af3fa8531 100644 Binary files a/atomic_defi_design/assets/images/coins/iota.png and b/atomic_defi_design/assets/images/coins/iota.png differ diff --git a/atomic_defi_design/assets/images/coins/iotx.png b/atomic_defi_design/assets/images/coins/iotx.png index faae68e8f..72b468728 100644 Binary files a/atomic_defi_design/assets/images/coins/iotx.png and b/atomic_defi_design/assets/images/coins/iotx.png differ diff --git a/atomic_defi_design/assets/images/coins/iq.png b/atomic_defi_design/assets/images/coins/iq.png deleted file mode 100644 index 64200cf5c..000000000 Binary files a/atomic_defi_design/assets/images/coins/iq.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/itc.png b/atomic_defi_design/assets/images/coins/itc.png deleted file mode 100644 index 98ef33558..000000000 Binary files a/atomic_defi_design/assets/images/coins/itc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/jchf.png b/atomic_defi_design/assets/images/coins/jchf.png index f3ac683a5..a64f9a659 100644 Binary files a/atomic_defi_design/assets/images/coins/jchf.png and b/atomic_defi_design/assets/images/coins/jchf.png differ diff --git a/atomic_defi_design/assets/images/coins/jeur.png b/atomic_defi_design/assets/images/coins/jeur.png index 28d922017..b65d21567 100644 Binary files a/atomic_defi_design/assets/images/coins/jeur.png and b/atomic_defi_design/assets/images/coins/jeur.png differ diff --git a/atomic_defi_design/assets/images/coins/jgbp.png b/atomic_defi_design/assets/images/coins/jgbp.png index 898dce131..4ff3ddaef 100644 Binary files a/atomic_defi_design/assets/images/coins/jgbp.png and b/atomic_defi_design/assets/images/coins/jgbp.png differ diff --git a/atomic_defi_design/assets/images/coins/jjpy.png b/atomic_defi_design/assets/images/coins/jjpy.png new file mode 100644 index 000000000..59b79121e Binary files /dev/null and b/atomic_defi_design/assets/images/coins/jjpy.png differ diff --git a/atomic_defi_design/assets/images/coins/jnt.png b/atomic_defi_design/assets/images/coins/jnt.png deleted file mode 100644 index 50559b89e..000000000 Binary files a/atomic_defi_design/assets/images/coins/jnt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/jpy.png b/atomic_defi_design/assets/images/coins/jpy.png deleted file mode 100644 index e5603416e..000000000 Binary files a/atomic_defi_design/assets/images/coins/jpy.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/jpyc.png b/atomic_defi_design/assets/images/coins/jpyc.png index 010a69bc6..12c42bca7 100644 Binary files a/atomic_defi_design/assets/images/coins/jpyc.png and b/atomic_defi_design/assets/images/coins/jpyc.png differ diff --git a/atomic_defi_design/assets/images/coins/jrt.png b/atomic_defi_design/assets/images/coins/jrt.png index 875bcc811..57885402d 100644 Binary files a/atomic_defi_design/assets/images/coins/jrt.png and b/atomic_defi_design/assets/images/coins/jrt.png differ diff --git a/atomic_defi_design/assets/images/coins/jstr.png b/atomic_defi_design/assets/images/coins/jstr.png index 3e6aa1ad9..cbf796640 100644 Binary files a/atomic_defi_design/assets/images/coins/jstr.png and b/atomic_defi_design/assets/images/coins/jstr.png differ diff --git a/atomic_defi_design/assets/images/coins/jumblr.png b/atomic_defi_design/assets/images/coins/jumblr.png index e39127b02..0406898f6 100644 Binary files a/atomic_defi_design/assets/images/coins/jumblr.png and b/atomic_defi_design/assets/images/coins/jumblr.png differ diff --git a/atomic_defi_design/assets/images/coins/kcs.png b/atomic_defi_design/assets/images/coins/kcs.png index 74eae3db4..99a858804 100644 Binary files a/atomic_defi_design/assets/images/coins/kcs.png and b/atomic_defi_design/assets/images/coins/kcs.png differ diff --git a/atomic_defi_design/assets/images/coins/kin.png b/atomic_defi_design/assets/images/coins/kin.png deleted file mode 100644 index a263faa88..000000000 Binary files a/atomic_defi_design/assets/images/coins/kin.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/klown.png b/atomic_defi_design/assets/images/coins/klown.png deleted file mode 100644 index 092fcc258..000000000 Binary files a/atomic_defi_design/assets/images/coins/klown.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/kmd.png b/atomic_defi_design/assets/images/coins/kmd.png index 30e111f31..11278a0f1 100644 Binary files a/atomic_defi_design/assets/images/coins/kmd.png and b/atomic_defi_design/assets/images/coins/kmd.png differ diff --git a/atomic_defi_design/assets/images/coins/knc.png b/atomic_defi_design/assets/images/coins/knc.png index 018ee72e3..dba28dc33 100644 Binary files a/atomic_defi_design/assets/images/coins/knc.png and b/atomic_defi_design/assets/images/coins/knc.png differ diff --git a/atomic_defi_design/assets/images/coins/koin.png b/atomic_defi_design/assets/images/coins/koin.png index b7eb57168..e3bacc069 100644 Binary files a/atomic_defi_design/assets/images/coins/koin.png and b/atomic_defi_design/assets/images/coins/koin.png differ diff --git a/atomic_defi_design/assets/images/coins/krb.png b/atomic_defi_design/assets/images/coins/krb.png deleted file mode 100644 index 38a18b9c4..000000000 Binary files a/atomic_defi_design/assets/images/coins/krb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ksm.png b/atomic_defi_design/assets/images/coins/ksm.png index 01577aa4d..92330a390 100644 Binary files a/atomic_defi_design/assets/images/coins/ksm.png and b/atomic_defi_design/assets/images/coins/ksm.png differ diff --git a/atomic_defi_design/assets/images/coins/labs.png b/atomic_defi_design/assets/images/coins/labs.png index cd04e64ca..0fb443231 100644 Binary files a/atomic_defi_design/assets/images/coins/labs.png and b/atomic_defi_design/assets/images/coins/labs.png differ diff --git a/atomic_defi_design/assets/images/coins/lbc.png b/atomic_defi_design/assets/images/coins/lbc.png index e0797af91..381bc9d92 100644 Binary files a/atomic_defi_design/assets/images/coins/lbc.png and b/atomic_defi_design/assets/images/coins/lbc.png differ diff --git a/atomic_defi_design/assets/images/coins/lcc.png b/atomic_defi_design/assets/images/coins/lcc.png index 7891d45e2..e6d79a107 100644 Binary files a/atomic_defi_design/assets/images/coins/lcc.png and b/atomic_defi_design/assets/images/coins/lcc.png differ diff --git a/atomic_defi_design/assets/images/coins/leash.png b/atomic_defi_design/assets/images/coins/leash.png index 69c8c3451..1c9a5eb80 100644 Binary files a/atomic_defi_design/assets/images/coins/leash.png and b/atomic_defi_design/assets/images/coins/leash.png differ diff --git a/atomic_defi_design/assets/images/coins/lend.png b/atomic_defi_design/assets/images/coins/lend.png deleted file mode 100644 index 4105045b0..000000000 Binary files a/atomic_defi_design/assets/images/coins/lend.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/leo.png b/atomic_defi_design/assets/images/coins/leo.png index d62f88b1b..ee5aa52d9 100644 Binary files a/atomic_defi_design/assets/images/coins/leo.png and b/atomic_defi_design/assets/images/coins/leo.png differ diff --git a/atomic_defi_design/assets/images/coins/link.png b/atomic_defi_design/assets/images/coins/link.png index 5b5447020..7184b9d0c 100644 Binary files a/atomic_defi_design/assets/images/coins/link.png and b/atomic_defi_design/assets/images/coins/link.png differ diff --git a/atomic_defi_design/assets/images/coins/lkk.png b/atomic_defi_design/assets/images/coins/lkk.png deleted file mode 100644 index a11a7622e..000000000 Binary files a/atomic_defi_design/assets/images/coins/lkk.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/loom.png b/atomic_defi_design/assets/images/coins/loom.png deleted file mode 100644 index defb6fac4..000000000 Binary files a/atomic_defi_design/assets/images/coins/loom.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/lpt.png b/atomic_defi_design/assets/images/coins/lpt.png deleted file mode 100644 index a8a70c7db..000000000 Binary files a/atomic_defi_design/assets/images/coins/lpt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/lrc.png b/atomic_defi_design/assets/images/coins/lrc.png index c982e9b61..02c8686e5 100644 Binary files a/atomic_defi_design/assets/images/coins/lrc.png and b/atomic_defi_design/assets/images/coins/lrc.png differ diff --git a/atomic_defi_design/assets/images/coins/lsk.png b/atomic_defi_design/assets/images/coins/lsk.png deleted file mode 100644 index 7783201c5..000000000 Binary files a/atomic_defi_design/assets/images/coins/lsk.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/lstr.png b/atomic_defi_design/assets/images/coins/lstr.png index 7c50bb68d..19a4462b0 100644 Binary files a/atomic_defi_design/assets/images/coins/lstr.png and b/atomic_defi_design/assets/images/coins/lstr.png differ diff --git a/atomic_defi_design/assets/images/coins/ltc.png b/atomic_defi_design/assets/images/coins/ltc.png index b18e701b9..aa1ab0fa3 100644 Binary files a/atomic_defi_design/assets/images/coins/ltc.png and b/atomic_defi_design/assets/images/coins/ltc.png differ diff --git a/atomic_defi_design/assets/images/coins/ltfn.png b/atomic_defi_design/assets/images/coins/ltfn.png index 182dc057b..2b009d526 100644 Binary files a/atomic_defi_design/assets/images/coins/ltfn.png and b/atomic_defi_design/assets/images/coins/ltfn.png differ diff --git a/atomic_defi_design/assets/images/coins/lun.png b/atomic_defi_design/assets/images/coins/lun.png deleted file mode 100644 index 368e83efc..000000000 Binary files a/atomic_defi_design/assets/images/coins/lun.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/luna.png b/atomic_defi_design/assets/images/coins/luna.png index 368a86bdc..7305179f4 100644 Binary files a/atomic_defi_design/assets/images/coins/luna.png and b/atomic_defi_design/assets/images/coins/luna.png differ diff --git a/atomic_defi_design/assets/images/coins/lynx.png b/atomic_defi_design/assets/images/coins/lynx.png index 44cfdb1bb..1b0f4b5c8 100644 Binary files a/atomic_defi_design/assets/images/coins/lynx.png and b/atomic_defi_design/assets/images/coins/lynx.png differ diff --git a/atomic_defi_design/assets/images/coins/maid.png b/atomic_defi_design/assets/images/coins/maid.png deleted file mode 100644 index d32f7aa28..000000000 Binary files a/atomic_defi_design/assets/images/coins/maid.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mana.png b/atomic_defi_design/assets/images/coins/mana.png index 6179c4e29..98c333388 100644 Binary files a/atomic_defi_design/assets/images/coins/mana.png and b/atomic_defi_design/assets/images/coins/mana.png differ diff --git a/atomic_defi_design/assets/images/coins/matic.png b/atomic_defi_design/assets/images/coins/matic.png index 29d881e8b..24e446373 100644 Binary files a/atomic_defi_design/assets/images/coins/matic.png and b/atomic_defi_design/assets/images/coins/matic.png differ diff --git a/atomic_defi_design/assets/images/coins/matictest.png b/atomic_defi_design/assets/images/coins/matictest.png index 29d881e8b..6b6c5ed38 100644 Binary files a/atomic_defi_design/assets/images/coins/matictest.png and b/atomic_defi_design/assets/images/coins/matictest.png differ diff --git a/atomic_defi_design/assets/images/coins/mcap.png b/atomic_defi_design/assets/images/coins/mcap.png deleted file mode 100644 index 3129276a2..000000000 Binary files a/atomic_defi_design/assets/images/coins/mcap.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mcl.png b/atomic_defi_design/assets/images/coins/mcl.png index 99680c3c0..1115d31e4 100644 Binary files a/atomic_defi_design/assets/images/coins/mcl.png and b/atomic_defi_design/assets/images/coins/mcl.png differ diff --git a/atomic_defi_design/assets/images/coins/mco.png b/atomic_defi_design/assets/images/coins/mco.png deleted file mode 100644 index 3a348e297..000000000 Binary files a/atomic_defi_design/assets/images/coins/mco.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mda.png b/atomic_defi_design/assets/images/coins/mda.png deleted file mode 100644 index 78876179c..000000000 Binary files a/atomic_defi_design/assets/images/coins/mda.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mds.png b/atomic_defi_design/assets/images/coins/mds.png deleted file mode 100644 index cbc7b14d8..000000000 Binary files a/atomic_defi_design/assets/images/coins/mds.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/meetone.png b/atomic_defi_design/assets/images/coins/meetone.png deleted file mode 100644 index 6a1a04081..000000000 Binary files a/atomic_defi_design/assets/images/coins/meetone.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mesh.png b/atomic_defi_design/assets/images/coins/mesh.png index 890199eaa..633f06d86 100644 Binary files a/atomic_defi_design/assets/images/coins/mesh.png and b/atomic_defi_design/assets/images/coins/mesh.png differ diff --git a/atomic_defi_design/assets/images/coins/mft.png b/atomic_defi_design/assets/images/coins/mft.png deleted file mode 100644 index 8fd5bdbec..000000000 Binary files a/atomic_defi_design/assets/images/coins/mft.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mgw.png b/atomic_defi_design/assets/images/coins/mgw.png index dfd295139..36f2ee3ff 100644 Binary files a/atomic_defi_design/assets/images/coins/mgw.png and b/atomic_defi_design/assets/images/coins/mgw.png differ diff --git a/atomic_defi_design/assets/images/coins/minds.png b/atomic_defi_design/assets/images/coins/minds.png index 5c2f78087..db524af74 100644 Binary files a/atomic_defi_design/assets/images/coins/minds.png and b/atomic_defi_design/assets/images/coins/minds.png differ diff --git a/atomic_defi_design/assets/images/coins/miota.png b/atomic_defi_design/assets/images/coins/miota.png deleted file mode 100644 index 748f6bd3e..000000000 Binary files a/atomic_defi_design/assets/images/coins/miota.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mir.png b/atomic_defi_design/assets/images/coins/mir.png index 924090925..a225aecff 100644 Binary files a/atomic_defi_design/assets/images/coins/mir.png and b/atomic_defi_design/assets/images/coins/mir.png differ diff --git a/atomic_defi_design/assets/images/coins/mith.png b/atomic_defi_design/assets/images/coins/mith.png deleted file mode 100644 index bf8deaa4d..000000000 Binary files a/atomic_defi_design/assets/images/coins/mith.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mkr.png b/atomic_defi_design/assets/images/coins/mkr.png index 9cf32ba43..d28bc8f3c 100644 Binary files a/atomic_defi_design/assets/images/coins/mkr.png and b/atomic_defi_design/assets/images/coins/mkr.png differ diff --git a/atomic_defi_design/assets/images/coins/mln.png b/atomic_defi_design/assets/images/coins/mln.png index a46301579..ccf71f132 100644 Binary files a/atomic_defi_design/assets/images/coins/mln.png and b/atomic_defi_design/assets/images/coins/mln.png differ diff --git a/atomic_defi_design/assets/images/coins/mm.png b/atomic_defi_design/assets/images/coins/mm.png index 441f46194..32b3fb5e1 100644 Binary files a/atomic_defi_design/assets/images/coins/mm.png and b/atomic_defi_design/assets/images/coins/mm.png differ diff --git a/atomic_defi_design/assets/images/coins/mnx.png b/atomic_defi_design/assets/images/coins/mnx.png deleted file mode 100644 index 8401efb9e..000000000 Binary files a/atomic_defi_design/assets/images/coins/mnx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mnz.png b/atomic_defi_design/assets/images/coins/mnz.png deleted file mode 100644 index c45c6307e..000000000 Binary files a/atomic_defi_design/assets/images/coins/mnz.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/moac.png b/atomic_defi_design/assets/images/coins/moac.png deleted file mode 100644 index 00d76cc9a..000000000 Binary files a/atomic_defi_design/assets/images/coins/moac.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mod.png b/atomic_defi_design/assets/images/coins/mod.png deleted file mode 100644 index af7fdeef8..000000000 Binary files a/atomic_defi_design/assets/images/coins/mod.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mona.png b/atomic_defi_design/assets/images/coins/mona.png index 4fa8b305c..1a73f6004 100644 Binary files a/atomic_defi_design/assets/images/coins/mona.png and b/atomic_defi_design/assets/images/coins/mona.png differ diff --git a/atomic_defi_design/assets/images/coins/morty.png b/atomic_defi_design/assets/images/coins/morty.png index de30d88fc..3a84c8d91 100644 Binary files a/atomic_defi_design/assets/images/coins/morty.png and b/atomic_defi_design/assets/images/coins/morty.png differ diff --git a/atomic_defi_design/assets/images/coins/movr.png b/atomic_defi_design/assets/images/coins/movr.png index fefc768f0..83b207878 100644 Binary files a/atomic_defi_design/assets/images/coins/movr.png and b/atomic_defi_design/assets/images/coins/movr.png differ diff --git a/atomic_defi_design/assets/images/coins/mshark.png b/atomic_defi_design/assets/images/coins/mshark.png index f321f3c63..68d55af96 100644 Binary files a/atomic_defi_design/assets/images/coins/mshark.png and b/atomic_defi_design/assets/images/coins/mshark.png differ diff --git a/atomic_defi_design/assets/images/coins/msr.png b/atomic_defi_design/assets/images/coins/msr.png deleted file mode 100644 index 98bbeacbf..000000000 Binary files a/atomic_defi_design/assets/images/coins/msr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mth.png b/atomic_defi_design/assets/images/coins/mth.png deleted file mode 100644 index 06b34ab5a..000000000 Binary files a/atomic_defi_design/assets/images/coins/mth.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mtl.png b/atomic_defi_design/assets/images/coins/mtl.png deleted file mode 100644 index f4c69b7d5..000000000 Binary files a/atomic_defi_design/assets/images/coins/mtl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/music.png b/atomic_defi_design/assets/images/coins/music.png deleted file mode 100644 index 96c0a0d72..000000000 Binary files a/atomic_defi_design/assets/images/coins/music.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/mzc.png b/atomic_defi_design/assets/images/coins/mzc.png deleted file mode 100644 index fa440d320..000000000 Binary files a/atomic_defi_design/assets/images/coins/mzc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nano.png b/atomic_defi_design/assets/images/coins/nano.png deleted file mode 100644 index 8755c9cd4..000000000 Binary files a/atomic_defi_design/assets/images/coins/nano.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nas.png b/atomic_defi_design/assets/images/coins/nas.png deleted file mode 100644 index 1215d39e0..000000000 Binary files a/atomic_defi_design/assets/images/coins/nas.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nav.png b/atomic_defi_design/assets/images/coins/nav.png index 141a29d27..088c43607 100644 Binary files a/atomic_defi_design/assets/images/coins/nav.png and b/atomic_defi_design/assets/images/coins/nav.png differ diff --git a/atomic_defi_design/assets/images/coins/ncash.png b/atomic_defi_design/assets/images/coins/ncash.png deleted file mode 100644 index eb83cb600..000000000 Binary files a/atomic_defi_design/assets/images/coins/ncash.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ndz.png b/atomic_defi_design/assets/images/coins/ndz.png deleted file mode 100644 index 09107a0e4..000000000 Binary files a/atomic_defi_design/assets/images/coins/ndz.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/near.png b/atomic_defi_design/assets/images/coins/near.png index 962d2448d..4b694ef31 100644 Binary files a/atomic_defi_design/assets/images/coins/near.png and b/atomic_defi_design/assets/images/coins/near.png differ diff --git a/atomic_defi_design/assets/images/coins/nebl.png b/atomic_defi_design/assets/images/coins/nebl.png deleted file mode 100644 index 696f91674..000000000 Binary files a/atomic_defi_design/assets/images/coins/nebl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/neo.png b/atomic_defi_design/assets/images/coins/neo.png index 102c36f3e..95497b652 100644 Binary files a/atomic_defi_design/assets/images/coins/neo.png and b/atomic_defi_design/assets/images/coins/neo.png differ diff --git a/atomic_defi_design/assets/images/coins/neos.png b/atomic_defi_design/assets/images/coins/neos.png deleted file mode 100644 index 13ea0acfa..000000000 Binary files a/atomic_defi_design/assets/images/coins/neos.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/neu.png b/atomic_defi_design/assets/images/coins/neu.png deleted file mode 100644 index 0735bb8cf..000000000 Binary files a/atomic_defi_design/assets/images/coins/neu.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nexo.png b/atomic_defi_design/assets/images/coins/nexo.png index adb8da295..5c21f1427 100644 Binary files a/atomic_defi_design/assets/images/coins/nexo.png and b/atomic_defi_design/assets/images/coins/nexo.png differ diff --git a/atomic_defi_design/assets/images/coins/ngc.png b/atomic_defi_design/assets/images/coins/ngc.png deleted file mode 100644 index 91bb104b5..000000000 Binary files a/atomic_defi_design/assets/images/coins/ngc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nio.png b/atomic_defi_design/assets/images/coins/nio.png deleted file mode 100644 index 8673da7cf..000000000 Binary files a/atomic_defi_design/assets/images/coins/nio.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nlc2.png b/atomic_defi_design/assets/images/coins/nlc2.png deleted file mode 100644 index 94decd5ac..000000000 Binary files a/atomic_defi_design/assets/images/coins/nlc2.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nlg.png b/atomic_defi_design/assets/images/coins/nlg.png deleted file mode 100644 index 46427330e..000000000 Binary files a/atomic_defi_design/assets/images/coins/nlg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nmc.png b/atomic_defi_design/assets/images/coins/nmc.png index bf0a8eeb1..b4399050b 100644 Binary files a/atomic_defi_design/assets/images/coins/nmc.png and b/atomic_defi_design/assets/images/coins/nmc.png differ diff --git a/atomic_defi_design/assets/images/coins/nmr.png b/atomic_defi_design/assets/images/coins/nmr.png deleted file mode 100644 index 8e4d933d8..000000000 Binary files a/atomic_defi_design/assets/images/coins/nmr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nuls.png b/atomic_defi_design/assets/images/coins/nuls.png deleted file mode 100644 index 607e3d898..000000000 Binary files a/atomic_defi_design/assets/images/coins/nuls.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nvc.png b/atomic_defi_design/assets/images/coins/nvc.png index 50c69ad55..77db39e61 100644 Binary files a/atomic_defi_design/assets/images/coins/nvc.png and b/atomic_defi_design/assets/images/coins/nvc.png differ diff --git a/atomic_defi_design/assets/images/coins/nxs.png b/atomic_defi_design/assets/images/coins/nxs.png deleted file mode 100644 index ab97c9d7e..000000000 Binary files a/atomic_defi_design/assets/images/coins/nxs.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nxt.png b/atomic_defi_design/assets/images/coins/nxt.png deleted file mode 100644 index b4007bb76..000000000 Binary files a/atomic_defi_design/assets/images/coins/nxt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/nyan.png b/atomic_defi_design/assets/images/coins/nyan.png index 81c76572f..9360bc241 100644 Binary files a/atomic_defi_design/assets/images/coins/nyan.png and b/atomic_defi_design/assets/images/coins/nyan.png differ diff --git a/atomic_defi_design/assets/images/coins/nzds.png b/atomic_defi_design/assets/images/coins/nzds.png index 5d437c48e..b34980cfa 100644 Binary files a/atomic_defi_design/assets/images/coins/nzds.png and b/atomic_defi_design/assets/images/coins/nzds.png differ diff --git a/atomic_defi_design/assets/images/coins/oax.png b/atomic_defi_design/assets/images/coins/oax.png deleted file mode 100644 index 332501fa1..000000000 Binary files a/atomic_defi_design/assets/images/coins/oax.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/oc.png b/atomic_defi_design/assets/images/coins/oc.png index 8bd25c985..48da8d3f9 100644 Binary files a/atomic_defi_design/assets/images/coins/oc.png and b/atomic_defi_design/assets/images/coins/oc.png differ diff --git a/atomic_defi_design/assets/images/coins/ocean.png b/atomic_defi_design/assets/images/coins/ocean.png index 621e81633..85780ceba 100644 Binary files a/atomic_defi_design/assets/images/coins/ocean.png and b/atomic_defi_design/assets/images/coins/ocean.png differ diff --git a/atomic_defi_design/assets/images/coins/ok.png b/atomic_defi_design/assets/images/coins/ok.png deleted file mode 100644 index e872ea69d..000000000 Binary files a/atomic_defi_design/assets/images/coins/ok.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/okb.png b/atomic_defi_design/assets/images/coins/okb.png index eaaa88f47..234d9f3ca 100644 Binary files a/atomic_defi_design/assets/images/coins/okb.png and b/atomic_defi_design/assets/images/coins/okb.png differ diff --git a/atomic_defi_design/assets/images/coins/omg.png b/atomic_defi_design/assets/images/coins/omg.png index ce9d6b838..8ce18b60e 100644 Binary files a/atomic_defi_design/assets/images/coins/omg.png and b/atomic_defi_design/assets/images/coins/omg.png differ diff --git a/atomic_defi_design/assets/images/coins/omni.png b/atomic_defi_design/assets/images/coins/omni.png deleted file mode 100644 index 5e6892eac..000000000 Binary files a/atomic_defi_design/assets/images/coins/omni.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/one.png b/atomic_defi_design/assets/images/coins/one.png index a5204bc4e..bca157033 100644 Binary files a/atomic_defi_design/assets/images/coins/one.png and b/atomic_defi_design/assets/images/coins/one.png differ diff --git a/atomic_defi_design/assets/images/coins/ong.png b/atomic_defi_design/assets/images/coins/ong.png deleted file mode 100644 index 3240fddca..000000000 Binary files a/atomic_defi_design/assets/images/coins/ong.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ont.png b/atomic_defi_design/assets/images/coins/ont.png index 593b96a93..ef08cb6f1 100644 Binary files a/atomic_defi_design/assets/images/coins/ont.png and b/atomic_defi_design/assets/images/coins/ont.png differ diff --git a/atomic_defi_design/assets/images/coins/ost.png b/atomic_defi_design/assets/images/coins/ost.png deleted file mode 100644 index 960e3a1c8..000000000 Binary files a/atomic_defi_design/assets/images/coins/ost.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ox.png b/atomic_defi_design/assets/images/coins/ox.png deleted file mode 100644 index 7e6466cde..000000000 Binary files a/atomic_defi_design/assets/images/coins/ox.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/oxt.png b/atomic_defi_design/assets/images/coins/oxt.png deleted file mode 100644 index 2cb201638..000000000 Binary files a/atomic_defi_design/assets/images/coins/oxt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pangea.png b/atomic_defi_design/assets/images/coins/pangea.png index 45cc04a88..247c86ce1 100644 Binary files a/atomic_defi_design/assets/images/coins/pangea.png and b/atomic_defi_design/assets/images/coins/pangea.png differ diff --git a/atomic_defi_design/assets/images/coins/part.png b/atomic_defi_design/assets/images/coins/part.png deleted file mode 100644 index f4ac11d6e..000000000 Binary files a/atomic_defi_design/assets/images/coins/part.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pasc.png b/atomic_defi_design/assets/images/coins/pasc.png deleted file mode 100644 index 3a67d49cf..000000000 Binary files a/atomic_defi_design/assets/images/coins/pasc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pasl.png b/atomic_defi_design/assets/images/coins/pasl.png deleted file mode 100644 index 049a0abda..000000000 Binary files a/atomic_defi_design/assets/images/coins/pasl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pax.png b/atomic_defi_design/assets/images/coins/pax.png index c2bd51774..25de9bcd0 100644 Binary files a/atomic_defi_design/assets/images/coins/pax.png and b/atomic_defi_design/assets/images/coins/pax.png differ diff --git a/atomic_defi_design/assets/images/coins/paxg.png b/atomic_defi_design/assets/images/coins/paxg.png index 3ddb6d7ea..c7c6b0f34 100644 Binary files a/atomic_defi_design/assets/images/coins/paxg.png and b/atomic_defi_design/assets/images/coins/paxg.png differ diff --git a/atomic_defi_design/assets/images/coins/pay.png b/atomic_defi_design/assets/images/coins/pay.png deleted file mode 100644 index cc5e150d5..000000000 Binary files a/atomic_defi_design/assets/images/coins/pay.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/payx.png b/atomic_defi_design/assets/images/coins/payx.png deleted file mode 100644 index 04a0cda65..000000000 Binary files a/atomic_defi_design/assets/images/coins/payx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pbc.png b/atomic_defi_design/assets/images/coins/pbc.png deleted file mode 100644 index 6bc763f1d..000000000 Binary files a/atomic_defi_design/assets/images/coins/pbc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pgx.png b/atomic_defi_design/assets/images/coins/pgx.png index ff7baf214..b4ca57919 100644 Binary files a/atomic_defi_design/assets/images/coins/pgx.png and b/atomic_defi_design/assets/images/coins/pgx.png differ diff --git a/atomic_defi_design/assets/images/coins/pic.png b/atomic_defi_design/assets/images/coins/pic.png index 13f34adb1..0521d4e93 100644 Binary files a/atomic_defi_design/assets/images/coins/pic.png and b/atomic_defi_design/assets/images/coins/pic.png differ diff --git a/atomic_defi_design/assets/images/coins/pink.png b/atomic_defi_design/assets/images/coins/pink.png deleted file mode 100644 index ab6542cdb..000000000 Binary files a/atomic_defi_design/assets/images/coins/pink.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pirl.png b/atomic_defi_design/assets/images/coins/pirl.png deleted file mode 100644 index 1dd003617..000000000 Binary files a/atomic_defi_design/assets/images/coins/pirl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pivx.png b/atomic_defi_design/assets/images/coins/pivx.png deleted file mode 100644 index fab1eae46..000000000 Binary files a/atomic_defi_design/assets/images/coins/pivx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/plr.png b/atomic_defi_design/assets/images/coins/plr.png deleted file mode 100644 index 29873e1ce..000000000 Binary files a/atomic_defi_design/assets/images/coins/plr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pnd.png b/atomic_defi_design/assets/images/coins/pnd.png new file mode 100644 index 000000000..b7f56111e Binary files /dev/null and b/atomic_defi_design/assets/images/coins/pnd.png differ diff --git a/atomic_defi_design/assets/images/coins/pnk.png b/atomic_defi_design/assets/images/coins/pnk.png index d73e4f5b5..8ce7656d7 100644 Binary files a/atomic_defi_design/assets/images/coins/pnk.png and b/atomic_defi_design/assets/images/coins/pnk.png differ diff --git a/atomic_defi_design/assets/images/coins/poa.png b/atomic_defi_design/assets/images/coins/poa.png deleted file mode 100644 index ff3eca505..000000000 Binary files a/atomic_defi_design/assets/images/coins/poa.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/poe.png b/atomic_defi_design/assets/images/coins/poe.png deleted file mode 100644 index dc831da0c..000000000 Binary files a/atomic_defi_design/assets/images/coins/poe.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/polis.png b/atomic_defi_design/assets/images/coins/polis.png deleted file mode 100644 index 71d8820bb..000000000 Binary files a/atomic_defi_design/assets/images/coins/polis.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/poly.png b/atomic_defi_design/assets/images/coins/poly.png deleted file mode 100644 index bd0dcad9c..000000000 Binary files a/atomic_defi_design/assets/images/coins/poly.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pot.png b/atomic_defi_design/assets/images/coins/pot.png deleted file mode 100644 index 3d5f01d6c..000000000 Binary files a/atomic_defi_design/assets/images/coins/pot.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/powr.png b/atomic_defi_design/assets/images/coins/powr.png index 107826f05..fc33b287e 100644 Binary files a/atomic_defi_design/assets/images/coins/powr.png and b/atomic_defi_design/assets/images/coins/powr.png differ diff --git a/atomic_defi_design/assets/images/coins/ppc.png b/atomic_defi_design/assets/images/coins/ppc.png index 95f60eb53..946d27425 100644 Binary files a/atomic_defi_design/assets/images/coins/ppc.png and b/atomic_defi_design/assets/images/coins/ppc.png differ diff --git a/atomic_defi_design/assets/images/coins/ppp.png b/atomic_defi_design/assets/images/coins/ppp.png deleted file mode 100644 index 6165ba00d..000000000 Binary files a/atomic_defi_design/assets/images/coins/ppp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ppt.png b/atomic_defi_design/assets/images/coins/ppt.png deleted file mode 100644 index 4b45a9794..000000000 Binary files a/atomic_defi_design/assets/images/coins/ppt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/prcy.png b/atomic_defi_design/assets/images/coins/prcy.png index 198e8f77c..4b73c2e05 100644 Binary files a/atomic_defi_design/assets/images/coins/prcy.png and b/atomic_defi_design/assets/images/coins/prcy.png differ diff --git a/atomic_defi_design/assets/images/coins/pre.png b/atomic_defi_design/assets/images/coins/pre.png deleted file mode 100644 index add0ccebc..000000000 Binary files a/atomic_defi_design/assets/images/coins/pre.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/prl.png b/atomic_defi_design/assets/images/coins/prl.png deleted file mode 100644 index deedccac1..000000000 Binary files a/atomic_defi_design/assets/images/coins/prl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/prux.png b/atomic_defi_design/assets/images/coins/prux.png index 95e65aa50..f9b674b8f 100644 Binary files a/atomic_defi_design/assets/images/coins/prux.png and b/atomic_defi_design/assets/images/coins/prux.png differ diff --git a/atomic_defi_design/assets/images/coins/pungo.png b/atomic_defi_design/assets/images/coins/pungo.png deleted file mode 100644 index 79e746626..000000000 Binary files a/atomic_defi_design/assets/images/coins/pungo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/pura.png b/atomic_defi_design/assets/images/coins/pura.png deleted file mode 100644 index d4bc8e507..000000000 Binary files a/atomic_defi_design/assets/images/coins/pura.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/put.png b/atomic_defi_design/assets/images/coins/put.png index c2db5e634..6caa2096a 100644 Binary files a/atomic_defi_design/assets/images/coins/put.png and b/atomic_defi_design/assets/images/coins/put.png differ diff --git a/atomic_defi_design/assets/images/coins/qash.png b/atomic_defi_design/assets/images/coins/qash.png deleted file mode 100644 index 7e8568fe9..000000000 Binary files a/atomic_defi_design/assets/images/coins/qash.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/qbt.png b/atomic_defi_design/assets/images/coins/qbt.png index 5eaafe928..b84489525 100644 Binary files a/atomic_defi_design/assets/images/coins/qbt.png and b/atomic_defi_design/assets/images/coins/qbt.png differ diff --git a/atomic_defi_design/assets/images/coins/qc.png b/atomic_defi_design/assets/images/coins/qc.png index 87b12c7fb..4007aa621 100644 Binary files a/atomic_defi_design/assets/images/coins/qc.png and b/atomic_defi_design/assets/images/coins/qc.png differ diff --git a/atomic_defi_design/assets/images/coins/qi.png b/atomic_defi_design/assets/images/coins/qi.png index 848d19a55..47f8d0c58 100644 Binary files a/atomic_defi_design/assets/images/coins/qi.png and b/atomic_defi_design/assets/images/coins/qi.png differ diff --git a/atomic_defi_design/assets/images/coins/qiair.png b/atomic_defi_design/assets/images/coins/qiair.png index 848d19a55..47f8d0c58 100644 Binary files a/atomic_defi_design/assets/images/coins/qiair.png and b/atomic_defi_design/assets/images/coins/qiair.png differ diff --git a/atomic_defi_design/assets/images/coins/qiwi.png b/atomic_defi_design/assets/images/coins/qiwi.png deleted file mode 100644 index 3c1c557cb..000000000 Binary files a/atomic_defi_design/assets/images/coins/qiwi.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/qkc.png b/atomic_defi_design/assets/images/coins/qkc.png index 4154df891..f42334bd6 100644 Binary files a/atomic_defi_design/assets/images/coins/qkc.png and b/atomic_defi_design/assets/images/coins/qkc.png differ diff --git a/atomic_defi_design/assets/images/coins/qlc.png b/atomic_defi_design/assets/images/coins/qlc.png deleted file mode 100644 index 70a42fa21..000000000 Binary files a/atomic_defi_design/assets/images/coins/qlc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/qnt.png b/atomic_defi_design/assets/images/coins/qnt.png index 1496985fe..e795e58f9 100644 Binary files a/atomic_defi_design/assets/images/coins/qnt.png and b/atomic_defi_design/assets/images/coins/qnt.png differ diff --git a/atomic_defi_design/assets/images/coins/qrc-20.png b/atomic_defi_design/assets/images/coins/qrc-20.png index 656a8d04f..942c7c1a1 100644 Binary files a/atomic_defi_design/assets/images/coins/qrc-20.png and b/atomic_defi_design/assets/images/coins/qrc-20.png differ diff --git a/atomic_defi_design/assets/images/coins/qrc.png b/atomic_defi_design/assets/images/coins/qrc.png new file mode 100644 index 000000000..f8e4d7f33 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/qrc.png differ diff --git a/atomic_defi_design/assets/images/coins/qrc20.png b/atomic_defi_design/assets/images/coins/qrc20.png index 9a23d89aa..f8e4d7f33 100644 Binary files a/atomic_defi_design/assets/images/coins/qrc20.png and b/atomic_defi_design/assets/images/coins/qrc20.png differ diff --git a/atomic_defi_design/assets/images/coins/qrl.png b/atomic_defi_design/assets/images/coins/qrl.png deleted file mode 100644 index 581b7fd46..000000000 Binary files a/atomic_defi_design/assets/images/coins/qrl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/qsp.png b/atomic_defi_design/assets/images/coins/qsp.png deleted file mode 100644 index cdbec73b7..000000000 Binary files a/atomic_defi_design/assets/images/coins/qsp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/qtum.png b/atomic_defi_design/assets/images/coins/qtum.png index 9a23d89aa..f8e4d7f33 100644 Binary files a/atomic_defi_design/assets/images/coins/qtum.png and b/atomic_defi_design/assets/images/coins/qtum.png differ diff --git a/atomic_defi_design/assets/images/coins/r.png b/atomic_defi_design/assets/images/coins/r.png deleted file mode 100644 index 0f51bb2ea..000000000 Binary files a/atomic_defi_design/assets/images/coins/r.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rads.png b/atomic_defi_design/assets/images/coins/rads.png deleted file mode 100644 index 121d47f9b..000000000 Binary files a/atomic_defi_design/assets/images/coins/rads.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rap.png b/atomic_defi_design/assets/images/coins/rap.png deleted file mode 100644 index 36ad560c3..000000000 Binary files a/atomic_defi_design/assets/images/coins/rap.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rbtc.png b/atomic_defi_design/assets/images/coins/rbtc.png index 784b8f359..01ce3898f 100644 Binary files a/atomic_defi_design/assets/images/coins/rbtc.png and b/atomic_defi_design/assets/images/coins/rbtc.png differ diff --git a/atomic_defi_design/assets/images/coins/rcn.png b/atomic_defi_design/assets/images/coins/rcn.png deleted file mode 100644 index 59aa572ce..000000000 Binary files a/atomic_defi_design/assets/images/coins/rcn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rdd.png b/atomic_defi_design/assets/images/coins/rdd.png deleted file mode 100644 index 7328667f2..000000000 Binary files a/atomic_defi_design/assets/images/coins/rdd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rdn.png b/atomic_defi_design/assets/images/coins/rdn.png deleted file mode 100644 index cc4091e18..000000000 Binary files a/atomic_defi_design/assets/images/coins/rdn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ren.png b/atomic_defi_design/assets/images/coins/ren.png index d32cea165..3cdd4eb1d 100644 Binary files a/atomic_defi_design/assets/images/coins/ren.png and b/atomic_defi_design/assets/images/coins/ren.png differ diff --git a/atomic_defi_design/assets/images/coins/rep.png b/atomic_defi_design/assets/images/coins/rep.png index 817135536..c2c2a7f8d 100644 Binary files a/atomic_defi_design/assets/images/coins/rep.png and b/atomic_defi_design/assets/images/coins/rep.png differ diff --git a/atomic_defi_design/assets/images/coins/repv2.png b/atomic_defi_design/assets/images/coins/repv2.png deleted file mode 100644 index 04b29acf6..000000000 Binary files a/atomic_defi_design/assets/images/coins/repv2.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/req.png b/atomic_defi_design/assets/images/coins/req.png deleted file mode 100644 index 66d74466b..000000000 Binary files a/atomic_defi_design/assets/images/coins/req.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rev.png b/atomic_defi_design/assets/images/coins/rev.png index adb8cdbe9..d1598e8f6 100644 Binary files a/atomic_defi_design/assets/images/coins/rev.png and b/atomic_defi_design/assets/images/coins/rev.png differ diff --git a/atomic_defi_design/assets/images/coins/revs.png b/atomic_defi_design/assets/images/coins/revs.png index ccd857af7..5101db726 100644 Binary files a/atomic_defi_design/assets/images/coins/revs.png and b/atomic_defi_design/assets/images/coins/revs.png differ diff --git a/atomic_defi_design/assets/images/coins/rfox.png b/atomic_defi_design/assets/images/coins/rfox.png deleted file mode 100644 index e69de29bb..000000000 diff --git a/atomic_defi_design/assets/images/coins/rhoc.png b/atomic_defi_design/assets/images/coins/rhoc.png deleted file mode 100644 index b6553fd83..000000000 Binary files a/atomic_defi_design/assets/images/coins/rhoc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ric.png b/atomic_defi_design/assets/images/coins/ric.png deleted file mode 100644 index dc0684259..000000000 Binary files a/atomic_defi_design/assets/images/coins/ric.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rick.png b/atomic_defi_design/assets/images/coins/rick.png index 2d32ff797..7900143f7 100644 Binary files a/atomic_defi_design/assets/images/coins/rick.png and b/atomic_defi_design/assets/images/coins/rick.png differ diff --git a/atomic_defi_design/assets/images/coins/rise.png b/atomic_defi_design/assets/images/coins/rise.png deleted file mode 100644 index fee2f5f81..000000000 Binary files a/atomic_defi_design/assets/images/coins/rise.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rlc.png b/atomic_defi_design/assets/images/coins/rlc.png index 11b0f1abd..756b5659d 100644 Binary files a/atomic_defi_design/assets/images/coins/rlc.png and b/atomic_defi_design/assets/images/coins/rlc.png differ diff --git a/atomic_defi_design/assets/images/coins/rpx.png b/atomic_defi_design/assets/images/coins/rpx.png deleted file mode 100644 index a106c2665..000000000 Binary files a/atomic_defi_design/assets/images/coins/rpx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/rsr.png b/atomic_defi_design/assets/images/coins/rsr.png index dba8513fe..d26ebf4f4 100644 Binary files a/atomic_defi_design/assets/images/coins/rsr.png and b/atomic_defi_design/assets/images/coins/rsr.png differ diff --git a/atomic_defi_design/assets/images/coins/rtm.png b/atomic_defi_design/assets/images/coins/rtm.png index 9beb18531..af0b504a7 100644 Binary files a/atomic_defi_design/assets/images/coins/rtm.png and b/atomic_defi_design/assets/images/coins/rtm.png differ diff --git a/atomic_defi_design/assets/images/coins/rub.png b/atomic_defi_design/assets/images/coins/rub.png deleted file mode 100644 index a2915d317..000000000 Binary files a/atomic_defi_design/assets/images/coins/rub.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/runes.png b/atomic_defi_design/assets/images/coins/runes.png new file mode 100644 index 000000000..a597c1707 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/runes.png differ diff --git a/atomic_defi_design/assets/images/coins/rvn.png b/atomic_defi_design/assets/images/coins/rvn.png index 886b94b61..411286590 100644 Binary files a/atomic_defi_design/assets/images/coins/rvn.png and b/atomic_defi_design/assets/images/coins/rvn.png differ diff --git a/atomic_defi_design/assets/images/coins/ryo.png b/atomic_defi_design/assets/images/coins/ryo.png deleted file mode 100644 index 973c5fe7b..000000000 Binary files a/atomic_defi_design/assets/images/coins/ryo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/s4f.png b/atomic_defi_design/assets/images/coins/s4f.png index 43c7c7cfd..efd5dda3e 100644 Binary files a/atomic_defi_design/assets/images/coins/s4f.png and b/atomic_defi_design/assets/images/coins/s4f.png differ diff --git a/atomic_defi_design/assets/images/coins/safe.png b/atomic_defi_design/assets/images/coins/safe.png deleted file mode 100644 index 2600e6e6c..000000000 Binary files a/atomic_defi_design/assets/images/coins/safe.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sai.png b/atomic_defi_design/assets/images/coins/sai.png deleted file mode 100644 index 08d484239..000000000 Binary files a/atomic_defi_design/assets/images/coins/sai.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/salt.png b/atomic_defi_design/assets/images/coins/salt.png deleted file mode 100644 index aeacd0555..000000000 Binary files a/atomic_defi_design/assets/images/coins/salt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/san.png b/atomic_defi_design/assets/images/coins/san.png deleted file mode 100644 index 1bb3e3cf2..000000000 Binary files a/atomic_defi_design/assets/images/coins/san.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sand.png b/atomic_defi_design/assets/images/coins/sand.png new file mode 100644 index 000000000..0a8fc750d Binary files /dev/null and b/atomic_defi_design/assets/images/coins/sand.png differ diff --git a/atomic_defi_design/assets/images/coins/sbch.png b/atomic_defi_design/assets/images/coins/sbch.png index 10aa0665c..a699e02d8 100644 Binary files a/atomic_defi_design/assets/images/coins/sbch.png and b/atomic_defi_design/assets/images/coins/sbch.png differ diff --git a/atomic_defi_design/assets/images/coins/sbd.png b/atomic_defi_design/assets/images/coins/sbd.png deleted file mode 100644 index e33d5d2de..000000000 Binary files a/atomic_defi_design/assets/images/coins/sbd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sberbank.png b/atomic_defi_design/assets/images/coins/sberbank.png deleted file mode 100644 index ace70f1d0..000000000 Binary files a/atomic_defi_design/assets/images/coins/sberbank.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sc.png b/atomic_defi_design/assets/images/coins/sc.png deleted file mode 100644 index e518cc13f..000000000 Binary files a/atomic_defi_design/assets/images/coins/sc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sca.png b/atomic_defi_design/assets/images/coins/sca.png index 0620e8e48..85fcda264 100644 Binary files a/atomic_defi_design/assets/images/coins/sca.png and b/atomic_defi_design/assets/images/coins/sca.png differ diff --git a/atomic_defi_design/assets/images/coins/sfusd.png b/atomic_defi_design/assets/images/coins/sfusd.png index e5ae4d672..c8143f966 100644 Binary files a/atomic_defi_design/assets/images/coins/sfusd.png and b/atomic_defi_design/assets/images/coins/sfusd.png differ diff --git a/atomic_defi_design/assets/images/coins/shib.png b/atomic_defi_design/assets/images/coins/shib.png index 37f06ca57..b02d5776d 100644 Binary files a/atomic_defi_design/assets/images/coins/shib.png and b/atomic_defi_design/assets/images/coins/shib.png differ diff --git a/atomic_defi_design/assets/images/coins/shift.png b/atomic_defi_design/assets/images/coins/shift.png deleted file mode 100644 index 8942a1487..000000000 Binary files a/atomic_defi_design/assets/images/coins/shift.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/shr.png b/atomic_defi_design/assets/images/coins/shr.png index 0765877e0..e86da6459 100644 Binary files a/atomic_defi_design/assets/images/coins/shr.png and b/atomic_defi_design/assets/images/coins/shr.png differ diff --git a/atomic_defi_design/assets/images/coins/sib.png b/atomic_defi_design/assets/images/coins/sib.png deleted file mode 100644 index 975722dbf..000000000 Binary files a/atomic_defi_design/assets/images/coins/sib.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sibm.png b/atomic_defi_design/assets/images/coins/sibm.png index f6ab63d7c..3f7d8c776 100644 Binary files a/atomic_defi_design/assets/images/coins/sibm.png and b/atomic_defi_design/assets/images/coins/sibm.png differ diff --git a/atomic_defi_design/assets/images/coins/sin.png b/atomic_defi_design/assets/images/coins/sin.png deleted file mode 100644 index 3abf7ef10..000000000 Binary files a/atomic_defi_design/assets/images/coins/sin.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/skl.png b/atomic_defi_design/assets/images/coins/skl.png index 9adc6ddac..7617fbe66 100644 Binary files a/atomic_defi_design/assets/images/coins/skl.png and b/atomic_defi_design/assets/images/coins/skl.png differ diff --git a/atomic_defi_design/assets/images/coins/sky.png b/atomic_defi_design/assets/images/coins/sky.png deleted file mode 100644 index a6e6de1c5..000000000 Binary files a/atomic_defi_design/assets/images/coins/sky.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/slr.png b/atomic_defi_design/assets/images/coins/slr.png deleted file mode 100644 index 05e6da3a5..000000000 Binary files a/atomic_defi_design/assets/images/coins/slr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sls.png b/atomic_defi_design/assets/images/coins/sls.png deleted file mode 100644 index 2ba628f67..000000000 Binary files a/atomic_defi_design/assets/images/coins/sls.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/smart chain.png b/atomic_defi_design/assets/images/coins/smart chain.png new file mode 100644 index 000000000..11278a0f1 Binary files /dev/null and b/atomic_defi_design/assets/images/coins/smart chain.png differ diff --git a/atomic_defi_design/assets/images/coins/smart-chain.png b/atomic_defi_design/assets/images/coins/smart-chain.png index 10d8011ce..417178dd0 100644 Binary files a/atomic_defi_design/assets/images/coins/smart-chain.png and b/atomic_defi_design/assets/images/coins/smart-chain.png differ diff --git a/atomic_defi_design/assets/images/coins/smart.png b/atomic_defi_design/assets/images/coins/smart.png deleted file mode 100644 index b464b7323..000000000 Binary files a/atomic_defi_design/assets/images/coins/smart.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/smtf.png b/atomic_defi_design/assets/images/coins/smtf.png index 9c1c14c6d..494f6217f 100644 Binary files a/atomic_defi_design/assets/images/coins/smtf.png and b/atomic_defi_design/assets/images/coins/smtf.png differ diff --git a/atomic_defi_design/assets/images/coins/sngls.png b/atomic_defi_design/assets/images/coins/sngls.png deleted file mode 100644 index 30728ce9c..000000000 Binary files a/atomic_defi_design/assets/images/coins/sngls.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/snm.png b/atomic_defi_design/assets/images/coins/snm.png deleted file mode 100644 index 134ea7132..000000000 Binary files a/atomic_defi_design/assets/images/coins/snm.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/snt.png b/atomic_defi_design/assets/images/coins/snt.png index e856e1085..8a7ffd285 100644 Binary files a/atomic_defi_design/assets/images/coins/snt.png and b/atomic_defi_design/assets/images/coins/snt.png differ diff --git a/atomic_defi_design/assets/images/coins/snx.png b/atomic_defi_design/assets/images/coins/snx.png index 636a9bc97..f7f1a2a52 100644 Binary files a/atomic_defi_design/assets/images/coins/snx.png and b/atomic_defi_design/assets/images/coins/snx.png differ diff --git a/atomic_defi_design/assets/images/coins/soc.png b/atomic_defi_design/assets/images/coins/soc.png deleted file mode 100644 index de8edeb0d..000000000 Binary files a/atomic_defi_design/assets/images/coins/soc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sol.png b/atomic_defi_design/assets/images/coins/sol.png index 3106cc044..ea6033544 100644 Binary files a/atomic_defi_design/assets/images/coins/sol.png and b/atomic_defi_design/assets/images/coins/sol.png differ diff --git a/atomic_defi_design/assets/images/coins/soulja.png b/atomic_defi_design/assets/images/coins/soulja.png index e60218a2e..f1bd574f4 100644 Binary files a/atomic_defi_design/assets/images/coins/soulja.png and b/atomic_defi_design/assets/images/coins/soulja.png differ diff --git a/atomic_defi_design/assets/images/coins/space.png b/atomic_defi_design/assets/images/coins/space.png index e6c20cc13..304859412 100644 Binary files a/atomic_defi_design/assets/images/coins/space.png and b/atomic_defi_design/assets/images/coins/space.png differ diff --git a/atomic_defi_design/assets/images/coins/spank.png b/atomic_defi_design/assets/images/coins/spank.png deleted file mode 100644 index c190cd015..000000000 Binary files a/atomic_defi_design/assets/images/coins/spank.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/spc.png b/atomic_defi_design/assets/images/coins/spc.png index f21ae96d0..5bb0170ca 100644 Binary files a/atomic_defi_design/assets/images/coins/spc.png and b/atomic_defi_design/assets/images/coins/spc.png differ diff --git a/atomic_defi_design/assets/images/coins/sphtx.png b/atomic_defi_design/assets/images/coins/sphtx.png deleted file mode 100644 index 325d75bea..000000000 Binary files a/atomic_defi_design/assets/images/coins/sphtx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/srm.png b/atomic_defi_design/assets/images/coins/srm.png index 4aed91f9a..181ab79ec 100644 Binary files a/atomic_defi_design/assets/images/coins/srm.png and b/atomic_defi_design/assets/images/coins/srm.png differ diff --git a/atomic_defi_design/assets/images/coins/srn.png b/atomic_defi_design/assets/images/coins/srn.png deleted file mode 100644 index 49ac71ed1..000000000 Binary files a/atomic_defi_design/assets/images/coins/srn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/stak.png b/atomic_defi_design/assets/images/coins/stak.png deleted file mode 100644 index d1ee90992..000000000 Binary files a/atomic_defi_design/assets/images/coins/stak.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/start.png b/atomic_defi_design/assets/images/coins/start.png deleted file mode 100644 index f7b4a28e9..000000000 Binary files a/atomic_defi_design/assets/images/coins/start.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/steem.png b/atomic_defi_design/assets/images/coins/steem.png deleted file mode 100644 index e33d5d2de..000000000 Binary files a/atomic_defi_design/assets/images/coins/steem.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/stfiro.png b/atomic_defi_design/assets/images/coins/stfiro.png index ea325e0cd..07252ebfe 100644 Binary files a/atomic_defi_design/assets/images/coins/stfiro.png and b/atomic_defi_design/assets/images/coins/stfiro.png differ diff --git a/atomic_defi_design/assets/images/coins/storj.png b/atomic_defi_design/assets/images/coins/storj.png index fe1cb0b39..ffd8e7770 100644 Binary files a/atomic_defi_design/assets/images/coins/storj.png and b/atomic_defi_design/assets/images/coins/storj.png differ diff --git a/atomic_defi_design/assets/images/coins/storm.png b/atomic_defi_design/assets/images/coins/storm.png deleted file mode 100644 index 5cc06a2e1..000000000 Binary files a/atomic_defi_design/assets/images/coins/storm.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/stq.png b/atomic_defi_design/assets/images/coins/stq.png deleted file mode 100644 index b86da90c9..000000000 Binary files a/atomic_defi_design/assets/images/coins/stq.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/strat.png b/atomic_defi_design/assets/images/coins/strat.png deleted file mode 100644 index c06eea949..000000000 Binary files a/atomic_defi_design/assets/images/coins/strat.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/stx.png b/atomic_defi_design/assets/images/coins/stx.png deleted file mode 100644 index 8c7a8cc93..000000000 Binary files a/atomic_defi_design/assets/images/coins/stx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sub.png b/atomic_defi_design/assets/images/coins/sub.png deleted file mode 100644 index 00dbf0d10..000000000 Binary files a/atomic_defi_design/assets/images/coins/sub.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/sumo.png b/atomic_defi_design/assets/images/coins/sumo.png deleted file mode 100644 index a31ee14d9..000000000 Binary files a/atomic_defi_design/assets/images/coins/sumo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/supernet.png b/atomic_defi_design/assets/images/coins/supernet.png index 1a4b4f1f1..b96b60f80 100644 Binary files a/atomic_defi_design/assets/images/coins/supernet.png and b/atomic_defi_design/assets/images/coins/supernet.png differ diff --git a/atomic_defi_design/assets/images/coins/sushi.png b/atomic_defi_design/assets/images/coins/sushi.png index 01d56e87d..5204659cf 100644 Binary files a/atomic_defi_design/assets/images/coins/sushi.png and b/atomic_defi_design/assets/images/coins/sushi.png differ diff --git a/atomic_defi_design/assets/images/coins/sxp.png b/atomic_defi_design/assets/images/coins/sxp.png index d3c9933a2..42ee08369 100644 Binary files a/atomic_defi_design/assets/images/coins/sxp.png and b/atomic_defi_design/assets/images/coins/sxp.png differ diff --git a/atomic_defi_design/assets/images/coins/sys.png b/atomic_defi_design/assets/images/coins/sys.png index 1be9cca04..8ea380be2 100644 Binary files a/atomic_defi_design/assets/images/coins/sys.png and b/atomic_defi_design/assets/images/coins/sys.png differ diff --git a/atomic_defi_design/assets/images/coins/taas.png b/atomic_defi_design/assets/images/coins/taas.png deleted file mode 100644 index 01060ba24..000000000 Binary files a/atomic_defi_design/assets/images/coins/taas.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tau.png b/atomic_defi_design/assets/images/coins/tau.png deleted file mode 100644 index b94df236b..000000000 Binary files a/atomic_defi_design/assets/images/coins/tau.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tblk.png b/atomic_defi_design/assets/images/coins/tblk.png index 22f5c90fb..a16e761ec 100644 Binary files a/atomic_defi_design/assets/images/coins/tblk.png and b/atomic_defi_design/assets/images/coins/tblk.png differ diff --git a/atomic_defi_design/assets/images/coins/tbtc.png b/atomic_defi_design/assets/images/coins/tbtc.png index 784b8f359..77e8caf51 100644 Binary files a/atomic_defi_design/assets/images/coins/tbtc.png and b/atomic_defi_design/assets/images/coins/tbtc.png differ diff --git a/atomic_defi_design/assets/images/coins/tbx.png b/atomic_defi_design/assets/images/coins/tbx.png deleted file mode 100644 index 5af22e62f..000000000 Binary files a/atomic_defi_design/assets/images/coins/tbx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tel.png b/atomic_defi_design/assets/images/coins/tel.png index 453dac21c..278c722a1 100644 Binary files a/atomic_defi_design/assets/images/coins/tel.png and b/atomic_defi_design/assets/images/coins/tel.png differ diff --git a/atomic_defi_design/assets/images/coins/ten.png b/atomic_defi_design/assets/images/coins/ten.png deleted file mode 100644 index ee88f6c23..000000000 Binary files a/atomic_defi_design/assets/images/coins/ten.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tern.png b/atomic_defi_design/assets/images/coins/tern.png deleted file mode 100644 index 5aefc007b..000000000 Binary files a/atomic_defi_design/assets/images/coins/tern.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tft.png b/atomic_defi_design/assets/images/coins/tft.png index 370e2110f..aff389669 100644 Binary files a/atomic_defi_design/assets/images/coins/tft.png and b/atomic_defi_design/assets/images/coins/tft.png differ diff --git a/atomic_defi_design/assets/images/coins/tgch.png b/atomic_defi_design/assets/images/coins/tgch.png deleted file mode 100644 index 01b0fb77f..000000000 Binary files a/atomic_defi_design/assets/images/coins/tgch.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/thc.png b/atomic_defi_design/assets/images/coins/thc.png index 7c536e8ec..78ada5b66 100644 Binary files a/atomic_defi_design/assets/images/coins/thc.png and b/atomic_defi_design/assets/images/coins/thc.png differ diff --git a/atomic_defi_design/assets/images/coins/thc_bep20.png b/atomic_defi_design/assets/images/coins/thc_bep20.png index 544bd93b4..ff291a9e3 100644 Binary files a/atomic_defi_design/assets/images/coins/thc_bep20.png and b/atomic_defi_design/assets/images/coins/thc_bep20.png differ diff --git a/atomic_defi_design/assets/images/coins/theta.png b/atomic_defi_design/assets/images/coins/theta.png deleted file mode 100644 index 569801369..000000000 Binary files a/atomic_defi_design/assets/images/coins/theta.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/thx.png b/atomic_defi_design/assets/images/coins/thx.png deleted file mode 100644 index cde6c321a..000000000 Binary files a/atomic_defi_design/assets/images/coins/thx.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tix.png b/atomic_defi_design/assets/images/coins/tix.png deleted file mode 100644 index 3b2aa9e73..000000000 Binary files a/atomic_defi_design/assets/images/coins/tix.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tkl.png b/atomic_defi_design/assets/images/coins/tkl.png index abb685c1a..9a4a458ee 100644 Binary files a/atomic_defi_design/assets/images/coins/tkl.png and b/atomic_defi_design/assets/images/coins/tkl.png differ diff --git a/atomic_defi_design/assets/images/coins/tkn.png b/atomic_defi_design/assets/images/coins/tkn.png deleted file mode 100644 index deb2a9df3..000000000 Binary files a/atomic_defi_design/assets/images/coins/tkn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tks.png b/atomic_defi_design/assets/images/coins/tks.png deleted file mode 100644 index f82600fd4..000000000 Binary files a/atomic_defi_design/assets/images/coins/tks.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tmtg.png b/atomic_defi_design/assets/images/coins/tmtg.png index aed51a902..930d077eb 100644 Binary files a/atomic_defi_design/assets/images/coins/tmtg.png and b/atomic_defi_design/assets/images/coins/tmtg.png differ diff --git a/atomic_defi_design/assets/images/coins/tnb.png b/atomic_defi_design/assets/images/coins/tnb.png deleted file mode 100644 index 0e193c95f..000000000 Binary files a/atomic_defi_design/assets/images/coins/tnb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tnc.png b/atomic_defi_design/assets/images/coins/tnc.png deleted file mode 100644 index 9d5fbc4fc..000000000 Binary files a/atomic_defi_design/assets/images/coins/tnc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tnt.png b/atomic_defi_design/assets/images/coins/tnt.png deleted file mode 100644 index 350626ada..000000000 Binary files a/atomic_defi_design/assets/images/coins/tnt.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tomo.png b/atomic_defi_design/assets/images/coins/tomo.png deleted file mode 100644 index 41014ef45..000000000 Binary files a/atomic_defi_design/assets/images/coins/tomo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tpay.png b/atomic_defi_design/assets/images/coins/tpay.png deleted file mode 100644 index 8a08b1203..000000000 Binary files a/atomic_defi_design/assets/images/coins/tpay.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/tqtum.png b/atomic_defi_design/assets/images/coins/tqtum.png index 9a23d89aa..ef6b453fb 100644 Binary files a/atomic_defi_design/assets/images/coins/tqtum.png and b/atomic_defi_design/assets/images/coins/tqtum.png differ diff --git a/atomic_defi_design/assets/images/coins/trac.png b/atomic_defi_design/assets/images/coins/trac.png index 49bab9185..f27034100 100644 Binary files a/atomic_defi_design/assets/images/coins/trac.png and b/atomic_defi_design/assets/images/coins/trac.png differ diff --git a/atomic_defi_design/assets/images/coins/trb.png b/atomic_defi_design/assets/images/coins/trb.png deleted file mode 100644 index ec5a4360d..000000000 Binary files a/atomic_defi_design/assets/images/coins/trb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/trc.png b/atomic_defi_design/assets/images/coins/trc.png index f3f68ba2a..ab965a18c 100644 Binary files a/atomic_defi_design/assets/images/coins/trc.png and b/atomic_defi_design/assets/images/coins/trc.png differ diff --git a/atomic_defi_design/assets/images/coins/trig.png b/atomic_defi_design/assets/images/coins/trig.png deleted file mode 100644 index ca037070d..000000000 Binary files a/atomic_defi_design/assets/images/coins/trig.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/trtl.png b/atomic_defi_design/assets/images/coins/trtl.png deleted file mode 100644 index 3f4b4f5d0..000000000 Binary files a/atomic_defi_design/assets/images/coins/trtl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/trx.png b/atomic_defi_design/assets/images/coins/trx.png index 3df9610eb..25166d1a1 100644 Binary files a/atomic_defi_design/assets/images/coins/trx.png and b/atomic_defi_design/assets/images/coins/trx.png differ diff --git a/atomic_defi_design/assets/images/coins/tryb.png b/atomic_defi_design/assets/images/coins/tryb.png index 1544f84ed..025c97345 100644 Binary files a/atomic_defi_design/assets/images/coins/tryb.png and b/atomic_defi_design/assets/images/coins/tryb.png differ diff --git a/atomic_defi_design/assets/images/coins/tsl.png b/atomic_defi_design/assets/images/coins/tsl.png index aa5aad77d..ed52fe650 100644 Binary files a/atomic_defi_design/assets/images/coins/tsl.png and b/atomic_defi_design/assets/images/coins/tsl.png differ diff --git a/atomic_defi_design/assets/images/coins/ttt.png b/atomic_defi_design/assets/images/coins/ttt.png index 2f90f6bd9..3bddf690c 100644 Binary files a/atomic_defi_design/assets/images/coins/ttt.png and b/atomic_defi_design/assets/images/coins/ttt.png differ diff --git a/atomic_defi_design/assets/images/coins/tusd.png b/atomic_defi_design/assets/images/coins/tusd.png index a315574d4..5feb301ba 100644 Binary files a/atomic_defi_design/assets/images/coins/tusd.png and b/atomic_defi_design/assets/images/coins/tusd.png differ diff --git a/atomic_defi_design/assets/images/coins/tzc.png b/atomic_defi_design/assets/images/coins/tzc.png deleted file mode 100644 index 62ae87ff6..000000000 Binary files a/atomic_defi_design/assets/images/coins/tzc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/ubq.png b/atomic_defi_design/assets/images/coins/ubq.png index 2ea970b94..fa91a4d18 100644 Binary files a/atomic_defi_design/assets/images/coins/ubq.png and b/atomic_defi_design/assets/images/coins/ubq.png differ diff --git a/atomic_defi_design/assets/images/coins/ubt.png b/atomic_defi_design/assets/images/coins/ubt.png index e9c9f22a3..0fc5e3f9f 100644 Binary files a/atomic_defi_design/assets/images/coins/ubt.png and b/atomic_defi_design/assets/images/coins/ubt.png differ diff --git a/atomic_defi_design/assets/images/coins/uis.png b/atomic_defi_design/assets/images/coins/uis.png index 233414666..4011a5fd4 100644 Binary files a/atomic_defi_design/assets/images/coins/uis.png and b/atomic_defi_design/assets/images/coins/uis.png differ diff --git a/atomic_defi_design/assets/images/coins/uma.png b/atomic_defi_design/assets/images/coins/uma.png index 6e2c6aa7e..71c521c2b 100644 Binary files a/atomic_defi_design/assets/images/coins/uma.png and b/atomic_defi_design/assets/images/coins/uma.png differ diff --git a/atomic_defi_design/assets/images/coins/uni.png b/atomic_defi_design/assets/images/coins/uni.png index 02ab8562c..13ae3a8e1 100644 Binary files a/atomic_defi_design/assets/images/coins/uni.png and b/atomic_defi_design/assets/images/coins/uni.png differ diff --git a/atomic_defi_design/assets/images/coins/unity.png b/atomic_defi_design/assets/images/coins/unity.png deleted file mode 100644 index 3a4b79e55..000000000 Binary files a/atomic_defi_design/assets/images/coins/unity.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/uno.png b/atomic_defi_design/assets/images/coins/uno.png index 8db98dc6d..013be8e08 100644 Binary files a/atomic_defi_design/assets/images/coins/uno.png and b/atomic_defi_design/assets/images/coins/uno.png differ diff --git a/atomic_defi_design/assets/images/coins/uos.png b/atomic_defi_design/assets/images/coins/uos.png index 20ef7e4a4..b6aa768c5 100644 Binary files a/atomic_defi_design/assets/images/coins/uos.png and b/atomic_defi_design/assets/images/coins/uos.png differ diff --git a/atomic_defi_design/assets/images/coins/uqc.png b/atomic_defi_design/assets/images/coins/uqc.png index c079fa6a4..d6e0aa387 100644 Binary files a/atomic_defi_design/assets/images/coins/uqc.png and b/atomic_defi_design/assets/images/coins/uqc.png differ diff --git a/atomic_defi_design/assets/images/coins/usbl.png b/atomic_defi_design/assets/images/coins/usbl.png index a77d949c9..525245746 100644 Binary files a/atomic_defi_design/assets/images/coins/usbl.png and b/atomic_defi_design/assets/images/coins/usbl.png differ diff --git a/atomic_defi_design/assets/images/coins/usd.png b/atomic_defi_design/assets/images/coins/usd.png deleted file mode 100644 index 2a49b5adc..000000000 Binary files a/atomic_defi_design/assets/images/coins/usd.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/usdc.png b/atomic_defi_design/assets/images/coins/usdc.png index 2b8467ccf..70f2d7432 100644 Binary files a/atomic_defi_design/assets/images/coins/usdc.png and b/atomic_defi_design/assets/images/coins/usdc.png differ diff --git a/atomic_defi_design/assets/images/coins/usdi.png b/atomic_defi_design/assets/images/coins/usdi.png index be035d8d3..162dcf3c6 100644 Binary files a/atomic_defi_design/assets/images/coins/usdi.png and b/atomic_defi_design/assets/images/coins/usdi.png differ diff --git a/atomic_defi_design/assets/images/coins/usdt.png b/atomic_defi_design/assets/images/coins/usdt.png index b6b6a612f..0cb9bdb40 100644 Binary files a/atomic_defi_design/assets/images/coins/usdt.png and b/atomic_defi_design/assets/images/coins/usdt.png differ diff --git a/atomic_defi_design/assets/images/coins/ust.png b/atomic_defi_design/assets/images/coins/ust.png index e5e60ed8c..c4740a94f 100644 Binary files a/atomic_defi_design/assets/images/coins/ust.png and b/atomic_defi_design/assets/images/coins/ust.png differ diff --git a/atomic_defi_design/assets/images/coins/utk.png b/atomic_defi_design/assets/images/coins/utk.png index e54a67b8b..fb3c33982 100644 Binary files a/atomic_defi_design/assets/images/coins/utk.png and b/atomic_defi_design/assets/images/coins/utk.png differ diff --git a/atomic_defi_design/assets/images/coins/val.png b/atomic_defi_design/assets/images/coins/val.png index dfc69aecf..d87311ffd 100644 Binary files a/atomic_defi_design/assets/images/coins/val.png and b/atomic_defi_design/assets/images/coins/val.png differ diff --git a/atomic_defi_design/assets/images/coins/veri.png b/atomic_defi_design/assets/images/coins/veri.png deleted file mode 100644 index 75c3bb7c6..000000000 Binary files a/atomic_defi_design/assets/images/coins/veri.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vet.png b/atomic_defi_design/assets/images/coins/vet.png index dd483a0be..6ce075edb 100644 Binary files a/atomic_defi_design/assets/images/coins/vet.png and b/atomic_defi_design/assets/images/coins/vet.png differ diff --git a/atomic_defi_design/assets/images/coins/vgx.png b/atomic_defi_design/assets/images/coins/vgx.png index 443426909..e0e2c26ea 100644 Binary files a/atomic_defi_design/assets/images/coins/vgx.png and b/atomic_defi_design/assets/images/coins/vgx.png differ diff --git a/atomic_defi_design/assets/images/coins/via.png b/atomic_defi_design/assets/images/coins/via.png deleted file mode 100644 index 46ae8fd53..000000000 Binary files a/atomic_defi_design/assets/images/coins/via.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vib.png b/atomic_defi_design/assets/images/coins/vib.png deleted file mode 100644 index d1a1c38f6..000000000 Binary files a/atomic_defi_design/assets/images/coins/vib.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vibe.png b/atomic_defi_design/assets/images/coins/vibe.png deleted file mode 100644 index 9b1674a49..000000000 Binary files a/atomic_defi_design/assets/images/coins/vibe.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vite.png b/atomic_defi_design/assets/images/coins/vite.png index 6a6d15035..55a864186 100644 Binary files a/atomic_defi_design/assets/images/coins/vite.png and b/atomic_defi_design/assets/images/coins/vite.png differ diff --git a/atomic_defi_design/assets/images/coins/vivo.png b/atomic_defi_design/assets/images/coins/vivo.png deleted file mode 100644 index 40a8fb2e8..000000000 Binary files a/atomic_defi_design/assets/images/coins/vivo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vra.png b/atomic_defi_design/assets/images/coins/vra.png index ab92e43e9..338a604fd 100644 Binary files a/atomic_defi_design/assets/images/coins/vra.png and b/atomic_defi_design/assets/images/coins/vra.png differ diff --git a/atomic_defi_design/assets/images/coins/vrc.png b/atomic_defi_design/assets/images/coins/vrc.png deleted file mode 100644 index c19602b01..000000000 Binary files a/atomic_defi_design/assets/images/coins/vrc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vrm.png b/atomic_defi_design/assets/images/coins/vrm.png index ae6c3957d..869433148 100644 Binary files a/atomic_defi_design/assets/images/coins/vrm.png and b/atomic_defi_design/assets/images/coins/vrm.png differ diff --git a/atomic_defi_design/assets/images/coins/vrsc.png b/atomic_defi_design/assets/images/coins/vrsc.png index 98c981e35..fa1b325d0 100644 Binary files a/atomic_defi_design/assets/images/coins/vrsc.png and b/atomic_defi_design/assets/images/coins/vrsc.png differ diff --git a/atomic_defi_design/assets/images/coins/vtc.png b/atomic_defi_design/assets/images/coins/vtc.png deleted file mode 100644 index 7255699eb..000000000 Binary files a/atomic_defi_design/assets/images/coins/vtc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/vtho.png b/atomic_defi_design/assets/images/coins/vtho.png deleted file mode 100644 index 1f10acff9..000000000 Binary files a/atomic_defi_design/assets/images/coins/vtho.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wabi.png b/atomic_defi_design/assets/images/coins/wabi.png deleted file mode 100644 index bc67f7859..000000000 Binary files a/atomic_defi_design/assets/images/coins/wabi.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wan.png b/atomic_defi_design/assets/images/coins/wan.png deleted file mode 100644 index 142552634..000000000 Binary files a/atomic_defi_design/assets/images/coins/wan.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/waves.png b/atomic_defi_design/assets/images/coins/waves.png index 266eb3d0d..95736ac7e 100644 Binary files a/atomic_defi_design/assets/images/coins/waves.png and b/atomic_defi_design/assets/images/coins/waves.png differ diff --git a/atomic_defi_design/assets/images/coins/wax.png b/atomic_defi_design/assets/images/coins/wax.png deleted file mode 100644 index 2c52fa616..000000000 Binary files a/atomic_defi_design/assets/images/coins/wax.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wbtc.png b/atomic_defi_design/assets/images/coins/wbtc.png index 879ec2d32..f0c1536a4 100644 Binary files a/atomic_defi_design/assets/images/coins/wbtc.png and b/atomic_defi_design/assets/images/coins/wbtc.png differ diff --git a/atomic_defi_design/assets/images/coins/wcn.png b/atomic_defi_design/assets/images/coins/wcn.png index 535e23e2c..94d09f9ea 100644 Binary files a/atomic_defi_design/assets/images/coins/wcn.png and b/atomic_defi_design/assets/images/coins/wcn.png differ diff --git a/atomic_defi_design/assets/images/coins/wgr.png b/atomic_defi_design/assets/images/coins/wgr.png deleted file mode 100644 index 5e0729aaf..000000000 Binary files a/atomic_defi_design/assets/images/coins/wgr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/whive.png b/atomic_defi_design/assets/images/coins/whive.png index d61ce54f1..5477296a7 100644 Binary files a/atomic_defi_design/assets/images/coins/whive.png and b/atomic_defi_design/assets/images/coins/whive.png differ diff --git a/atomic_defi_design/assets/images/coins/wicc.png b/atomic_defi_design/assets/images/coins/wicc.png deleted file mode 100644 index d70a5bb6a..000000000 Binary files a/atomic_defi_design/assets/images/coins/wicc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wings.png b/atomic_defi_design/assets/images/coins/wings.png deleted file mode 100644 index 950828c78..000000000 Binary files a/atomic_defi_design/assets/images/coins/wings.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wpr.png b/atomic_defi_design/assets/images/coins/wpr.png deleted file mode 100644 index 9974a02ab..000000000 Binary files a/atomic_defi_design/assets/images/coins/wpr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wsb.png b/atomic_defi_design/assets/images/coins/wsb.png index c556281fa..91f779070 100644 Binary files a/atomic_defi_design/assets/images/coins/wsb.png and b/atomic_defi_design/assets/images/coins/wsb.png differ diff --git a/atomic_defi_design/assets/images/coins/wtc.png b/atomic_defi_design/assets/images/coins/wtc.png deleted file mode 100644 index 9932eb8a5..000000000 Binary files a/atomic_defi_design/assets/images/coins/wtc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/wwcn.png b/atomic_defi_design/assets/images/coins/wwcn.png index bac60e916..21601f860 100644 Binary files a/atomic_defi_design/assets/images/coins/wwcn.png and b/atomic_defi_design/assets/images/coins/wwcn.png differ diff --git a/atomic_defi_design/assets/images/coins/x.png b/atomic_defi_design/assets/images/coins/x.png deleted file mode 100644 index 60cd6a1b0..000000000 Binary files a/atomic_defi_design/assets/images/coins/x.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xas.png b/atomic_defi_design/assets/images/coins/xas.png deleted file mode 100644 index c1db3ce55..000000000 Binary files a/atomic_defi_design/assets/images/coins/xas.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xbc.png b/atomic_defi_design/assets/images/coins/xbc.png deleted file mode 100644 index e3bdd56cb..000000000 Binary files a/atomic_defi_design/assets/images/coins/xbc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xbp.png b/atomic_defi_design/assets/images/coins/xbp.png deleted file mode 100644 index f17afaa51..000000000 Binary files a/atomic_defi_design/assets/images/coins/xbp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xby.png b/atomic_defi_design/assets/images/coins/xby.png deleted file mode 100644 index 87e2731c6..000000000 Binary files a/atomic_defi_design/assets/images/coins/xby.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xcp.png b/atomic_defi_design/assets/images/coins/xcp.png deleted file mode 100644 index fc732ccae..000000000 Binary files a/atomic_defi_design/assets/images/coins/xcp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xdn.png b/atomic_defi_design/assets/images/coins/xdn.png deleted file mode 100644 index 8bff070e3..000000000 Binary files a/atomic_defi_design/assets/images/coins/xdn.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xec.png b/atomic_defi_design/assets/images/coins/xec.png index 01fae8f8b..7aff08853 100644 Binary files a/atomic_defi_design/assets/images/coins/xec.png and b/atomic_defi_design/assets/images/coins/xec.png differ diff --git a/atomic_defi_design/assets/images/coins/xem.png b/atomic_defi_design/assets/images/coins/xem.png deleted file mode 100644 index 16b9e8ceb..000000000 Binary files a/atomic_defi_design/assets/images/coins/xem.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xep.png b/atomic_defi_design/assets/images/coins/xep.png index c779f5b59..b7e6687f9 100644 Binary files a/atomic_defi_design/assets/images/coins/xep.png and b/atomic_defi_design/assets/images/coins/xep.png differ diff --git a/atomic_defi_design/assets/images/coins/xin.png b/atomic_defi_design/assets/images/coins/xin.png deleted file mode 100644 index 29a48c0d1..000000000 Binary files a/atomic_defi_design/assets/images/coins/xin.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xlm.png b/atomic_defi_design/assets/images/coins/xlm.png index ab10cad49..daedc874d 100644 Binary files a/atomic_defi_design/assets/images/coins/xlm.png and b/atomic_defi_design/assets/images/coins/xlm.png differ diff --git a/atomic_defi_design/assets/images/coins/xmcc.png b/atomic_defi_design/assets/images/coins/xmcc.png deleted file mode 100644 index 2281991ac..000000000 Binary files a/atomic_defi_design/assets/images/coins/xmcc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xmg.png b/atomic_defi_design/assets/images/coins/xmg.png deleted file mode 100644 index ee37ceb6f..000000000 Binary files a/atomic_defi_design/assets/images/coins/xmg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xmo.png b/atomic_defi_design/assets/images/coins/xmo.png deleted file mode 100644 index 98e82d2f7..000000000 Binary files a/atomic_defi_design/assets/images/coins/xmo.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xmr.png b/atomic_defi_design/assets/images/coins/xmr.png deleted file mode 100644 index ce409524c..000000000 Binary files a/atomic_defi_design/assets/images/coins/xmr.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xmy.png b/atomic_defi_design/assets/images/coins/xmy.png index a2d32ff59..4102b4cb3 100644 Binary files a/atomic_defi_design/assets/images/coins/xmy.png and b/atomic_defi_design/assets/images/coins/xmy.png differ diff --git a/atomic_defi_design/assets/images/coins/xor.png b/atomic_defi_design/assets/images/coins/xor.png index 74c4cf014..e10e37874 100644 Binary files a/atomic_defi_design/assets/images/coins/xor.png and b/atomic_defi_design/assets/images/coins/xor.png differ diff --git a/atomic_defi_design/assets/images/coins/xp.png b/atomic_defi_design/assets/images/coins/xp.png deleted file mode 100644 index 9478a855a..000000000 Binary files a/atomic_defi_design/assets/images/coins/xp.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xpa.png b/atomic_defi_design/assets/images/coins/xpa.png deleted file mode 100644 index f49910b5c..000000000 Binary files a/atomic_defi_design/assets/images/coins/xpa.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xpm.png b/atomic_defi_design/assets/images/coins/xpm.png index f32e349db..898f5f530 100644 Binary files a/atomic_defi_design/assets/images/coins/xpm.png and b/atomic_defi_design/assets/images/coins/xpm.png differ diff --git a/atomic_defi_design/assets/images/coins/xrg.png b/atomic_defi_design/assets/images/coins/xrg.png index 0545067a7..f68016738 100644 Binary files a/atomic_defi_design/assets/images/coins/xrg.png and b/atomic_defi_design/assets/images/coins/xrg.png differ diff --git a/atomic_defi_design/assets/images/coins/xrp.png b/atomic_defi_design/assets/images/coins/xrp.png index f24cf2596..6d08172cc 100644 Binary files a/atomic_defi_design/assets/images/coins/xrp.png and b/atomic_defi_design/assets/images/coins/xrp.png differ diff --git a/atomic_defi_design/assets/images/coins/xsg.png b/atomic_defi_design/assets/images/coins/xsg.png deleted file mode 100644 index 5747b3113..000000000 Binary files a/atomic_defi_design/assets/images/coins/xsg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xsgd.png b/atomic_defi_design/assets/images/coins/xsgd.png index 67f0438af..1b2ea2536 100644 Binary files a/atomic_defi_design/assets/images/coins/xsgd.png and b/atomic_defi_design/assets/images/coins/xsgd.png differ diff --git a/atomic_defi_design/assets/images/coins/xtz.png b/atomic_defi_design/assets/images/coins/xtz.png index 79ecc75f3..835f83812 100644 Binary files a/atomic_defi_design/assets/images/coins/xtz.png and b/atomic_defi_design/assets/images/coins/xtz.png differ diff --git a/atomic_defi_design/assets/images/coins/xuc.png b/atomic_defi_design/assets/images/coins/xuc.png deleted file mode 100644 index 82dc95396..000000000 Binary files a/atomic_defi_design/assets/images/coins/xuc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xvc.png b/atomic_defi_design/assets/images/coins/xvc.png index 1b2555470..fe898ea72 100644 Binary files a/atomic_defi_design/assets/images/coins/xvc.png and b/atomic_defi_design/assets/images/coins/xvc.png differ diff --git a/atomic_defi_design/assets/images/coins/xvg.png b/atomic_defi_design/assets/images/coins/xvg.png deleted file mode 100644 index 0de5ce45b..000000000 Binary files a/atomic_defi_design/assets/images/coins/xvg.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/xvs.png b/atomic_defi_design/assets/images/coins/xvs.png index b802ff87e..f44c59382 100644 Binary files a/atomic_defi_design/assets/images/coins/xvs.png and b/atomic_defi_design/assets/images/coins/xvs.png differ diff --git a/atomic_defi_design/assets/images/coins/xzc.png b/atomic_defi_design/assets/images/coins/xzc.png deleted file mode 100644 index 926bed031..000000000 Binary files a/atomic_defi_design/assets/images/coins/xzc.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/yfi.png b/atomic_defi_design/assets/images/coins/yfi.png index 856678403..605ea2502 100644 Binary files a/atomic_defi_design/assets/images/coins/yfi.png and b/atomic_defi_design/assets/images/coins/yfi.png differ diff --git a/atomic_defi_design/assets/images/coins/yfii.png b/atomic_defi_design/assets/images/coins/yfii.png index 8b38b9319..d54c7f695 100644 Binary files a/atomic_defi_design/assets/images/coins/yfii.png and b/atomic_defi_design/assets/images/coins/yfii.png differ diff --git a/atomic_defi_design/assets/images/coins/yoyow.png b/atomic_defi_design/assets/images/coins/yoyow.png deleted file mode 100644 index 121fa343d..000000000 Binary files a/atomic_defi_design/assets/images/coins/yoyow.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zb.png b/atomic_defi_design/assets/images/coins/zb.png deleted file mode 100644 index 0abf5cb2b..000000000 Binary files a/atomic_defi_design/assets/images/coins/zb.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zcl.png b/atomic_defi_design/assets/images/coins/zcl.png deleted file mode 100644 index cdc675a7d..000000000 Binary files a/atomic_defi_design/assets/images/coins/zcl.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zec.png b/atomic_defi_design/assets/images/coins/zec.png index 9327fc65d..a2c0e9140 100644 Binary files a/atomic_defi_design/assets/images/coins/zec.png and b/atomic_defi_design/assets/images/coins/zec.png differ diff --git a/atomic_defi_design/assets/images/coins/zel.png b/atomic_defi_design/assets/images/coins/zel.png deleted file mode 100644 index 5900bcda9..000000000 Binary files a/atomic_defi_design/assets/images/coins/zel.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zen.png b/atomic_defi_design/assets/images/coins/zen.png deleted file mode 100644 index aaf63d8cf..000000000 Binary files a/atomic_defi_design/assets/images/coins/zen.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zer.png b/atomic_defi_design/assets/images/coins/zer.png index 848c88540..2fbbdf39b 100644 Binary files a/atomic_defi_design/assets/images/coins/zer.png and b/atomic_defi_design/assets/images/coins/zer.png differ diff --git a/atomic_defi_design/assets/images/coins/zest.png b/atomic_defi_design/assets/images/coins/zest.png deleted file mode 100644 index eb57167cc..000000000 Binary files a/atomic_defi_design/assets/images/coins/zest.png and /dev/null differ diff --git a/atomic_defi_design/assets/images/coins/zet.png b/atomic_defi_design/assets/images/coins/zet.png index b107a81f4..d7433475d 100644 Binary files a/atomic_defi_design/assets/images/coins/zet.png and b/atomic_defi_design/assets/images/coins/zet.png differ diff --git a/atomic_defi_design/assets/images/coins/zil.png b/atomic_defi_design/assets/images/coins/zil.png index e49147f50..8bf4c47cb 100644 Binary files a/atomic_defi_design/assets/images/coins/zil.png and b/atomic_defi_design/assets/images/coins/zil.png differ diff --git a/atomic_defi_design/assets/images/coins/zilla.png b/atomic_defi_design/assets/images/coins/zilla.png index 03f5c545b..14b854d19 100644 Binary files a/atomic_defi_design/assets/images/coins/zilla.png and b/atomic_defi_design/assets/images/coins/zilla.png differ diff --git a/atomic_defi_design/assets/images/coins/zinu.png b/atomic_defi_design/assets/images/coins/zinu.png index 30f2e8d12..58e9fe9b9 100644 Binary files a/atomic_defi_design/assets/images/coins/zinu.png and b/atomic_defi_design/assets/images/coins/zinu.png differ diff --git a/atomic_defi_design/assets/images/coins/zrx.png b/atomic_defi_design/assets/images/coins/zrx.png index d4baae5fc..d546cbbf4 100644 Binary files a/atomic_defi_design/assets/images/coins/zrx.png and b/atomic_defi_design/assets/images/coins/zrx.png differ diff --git a/atomic_defi_design/assets/languages/atomic_defi_en.ts b/atomic_defi_design/assets/languages/atomic_defi_en.ts index cf421a830..57724f7f9 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_en.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_en.ts @@ -2,169 +2,150 @@ - QPlatformTheme - - &Yes - Yes - - - &No - No - - - Cancel - Cancel - AddCustomCoinModal - + Get the contract address from - - - Choose the asset type - - - Type + Choose the asset type - + Cancel Cancel - - - + + + Next - - + + Contract address + + + + Enter the contract address - + Choose the asset ticker - + Ticker - + Enter the ticker - - Contract Address - - - - + Get the contract address from - - - - + + + + Previous - + Choose the asset logo - + Browse - + Please choose the asset logo - + Configuration - + All configuration fields will be fetched using the contract address you provided. - + Name - + Enter the name - + Coingecko ID - + Enter the Coingecko ID - + Get the Coingecko ID - + Active - - + + Preview - + WARNING: Application will restart immidiately to apply the changes! - + Asset not found, please go back and make sure Contract Address is correct - + Config Fields - + Fetched Data - + Submit & Restart @@ -230,52 +211,52 @@ AddressBookAddContactAddressModal - + Edit address entry - + Create a new address - + Selected wallet: %1 - + NONE - + Enter a name - + This key already exists. - + Enter the address - + Validate - + Cancel Cancel - + Convert @@ -283,113 +264,113 @@ AddressBookEditContactModal - + Edit contact - + Contact Name - + Enter a contact name - + Address List - + Search for an address entry. - + Type - + Key - + Address - + Actions - - New Address + + Add Address - + Tags - + + - + Confirm - - + + Cancel Cancel - + The selected address belongs to a disabled coin, you need to enabled it before sending. - + Enable - + Cannot send to this address - + Your balance is empty - + Ok - + Remove address ? - + Yes Yes - + No @@ -397,27 +378,27 @@ AddressBookNewContactCategoryModal - + Add a new tag - + Enter the tag name - + This contact already has this tag - + Add - + Cancel Cancel @@ -425,27 +406,27 @@ AddressBookNewContactModal - + Create a new contact - + Enter the contact name - + This contact name already exists. - + Confirm - + Cancel Cancel @@ -463,15 +444,23 @@ + + AddressBookWalletTypeList + + + %1 is not enabled - You need to enable it before adding an address. Enable it ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + AddressBookWalletTypeListModal - + Select wallet type - + Search @@ -495,7 +484,7 @@ AssetPieChart - + Assets @@ -503,32 +492,37 @@ AssetsList - + Asset - + Balance - + + Fiat Balance + + + + Change 24h - + Price - + Source - + Price provider is: %1 @@ -546,19 +540,11 @@ - + Privacy - - BuyBox - - - Buy - - - CamouflagePasswordModal @@ -612,19 +598,6 @@ - - CandleStickChart - - - Loading market data - - - - - There is no chart data for this pair yet - - - CannotEnableCoinModal @@ -689,122 +662,139 @@ + + Chart + + + Chart + + + + + Loading market data + + + + + There is no chart data for this pair yet + + + ClaimRewardsModal - + Failed to prepare to claim rewards - + Claim your %1 reward? TICKER - + No UTXOs eligible for claiming - + Transaction fee is higher than the reward! - - You will receive %1 - AMT TICKER + + You will receive - + Refresh - + Read more about KMD active users rewards - + UTXO - + Amount - + Reward - + Accruing Start - + Accruing Stop - + Time Left - + Error - + Locktime is not set - + Locktime is less than the threshold - + UTXO height is greater than end of the era - + UTXO amount is less than 10 - + One hour did not pass yet - + Transaction is in mempool - + Unknown problem - + Cancel Cancel - + Confirm @@ -833,16 +823,26 @@ Disable all assets + + + Disable 0 balance assets + + Combo_fiat - + + Language + + + + Fiat - + Recommended: @@ -893,74 +893,74 @@ ConfirmTradeModal - + Confirm Exchange Details - + This swap request can not be undone and is a final event! - + This transaction can take up to 60 mins - DO NOT close this application! - - Total %1 fees: %2 (%3) + + <b>Total %1 fees:</b> - + Security configuration - + dPoW protected - + %1 confirmations for incoming %2 transactions - - + + Read more about dPoW - + Use custom protection settings for incoming %1 transactions TICKER - + Enable Komodo dPoW security - + Required Confirmations - + Warning, this atomic swap is not dPoW protected! - + Cancel Cancel - + Confirm @@ -976,182 +976,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. - + Matching - + Order Matching - + Matched - + Order Matched - + Ongoing - + Swap Ongoing - + Successful - + Swap Successful - + Refunding - + Failed - + Swap Failed - + Unknown - + Unknown State - + Started - + Negotiated - + Taker fee sent - + Maker payment received - + Maker payment wait confirm started - + Maker payment validated and confirmed - + Taker payment sent - + Taker payment spent - + Maker payment spent - + Finished - + Start failed - + Negotiate failed - + Taker fee validate failed - + Maker payment transaction failed - + Maker payment Data send failed - + Maker payment wait confirm failed - + Taker payment validate failed - + Taker payment wait confirm failed - + Taker payment spend failed - + Maker payment wait refund started - + Maker payment refunded - + Maker payment refund failed @@ -1211,7 +1211,7 @@ DexAppPasswordField - + Type password @@ -1255,7 +1255,7 @@ DexPaginator - + items per page @@ -1281,7 +1281,7 @@ DexSweetComboBox - + Search @@ -1294,22 +1294,17 @@ - - Add a custom asset to the list - - - - + Select all assets - + All assets are already enabled! - + You can still enable %1 assets. Selected: %2. @@ -1319,17 +1314,22 @@ - + Change assets limit - + + Add a custom asset + + + + Close - + Enable @@ -1342,27 +1342,27 @@ - + Accept EULA - + Accept Terms and Conditions - + Close - + Cancel Cancel - + Confirm @@ -1388,12 +1388,12 @@ FeeInfo - + Minimum fee - + Fees will be calculated @@ -1401,7 +1401,7 @@ General - + %n day(s) @@ -1409,7 +1409,7 @@ - + %nd day @@ -1418,7 +1418,7 @@ - + %nh hours @@ -1427,7 +1427,7 @@ - + %nm minutes @@ -1436,7 +1436,7 @@ - + %ns seconds @@ -1445,7 +1445,7 @@ - + %nms milliseconds @@ -1454,66 +1454,91 @@ - + - - + + <b>Taker tx fee:</b> + + + + + <b>Dex tx fee:</b> + + + + + <b>Dex fee:</b> + + + + + <b>Maker tx fee:</b> + + + + + %1 %2 %3 (%4) + + + + Trading Fee - + Minimum Trading Amount - + Wallet %1 already exists WALLETNAME - + %1 balance is lower than the fees amount: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount - + Please fill the price field - + Please fill the volume field - - + + %1 volume is lower than minimum trade amount - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error @@ -1521,50 +1546,41 @@ Header - + You get - + You send - + Fiat Price - + CEX rate - - + Price - + Quantity - + Total - - History - - - Recent Swaps - - - ImportWallet @@ -1573,94 +1589,92 @@ - + Import wallet - Setup - + Import wallet - Choose password - + Wallet Name - + Enter seed - - BIP39 seed validation failed, try again or select 'Allow custom seed' + + Your seed is not BIP39 compliant. +Try again or select 'Allow custom seed' to continue. - + + + i understand + + + + + Ok + + + + Allow custom seed - + <strong>Allow custom seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - + I understand - - Enable - - - - + Next - + Enter the same password to confirm - + Continue - - Languages - - - Language - - - LinksRow - + Join our Discord server - + Follow us on Twitter - + Go to Support Guides @@ -1672,16 +1686,21 @@ Funds are recoverable + + + Best Orders + + ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> - + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1720,17 +1739,17 @@ Login - + Incorrect Password - - Connect + + Log In - + Cancel Cancel @@ -1738,127 +1757,129 @@ Main - + Segwit - + Confirmation - + Do you want to send your %1 funds to %2 wallet first? - + Success - + Your transaction is send, may take some time to arrive - - Wallet Balance + + Price - - Price + + Change 24hr - - Change 24h + + Porfolio - - Portfolio % + + Contract Address - + Send - + Enable %1 ? - + Yes Yes - + No - + Receive - + Swap - - Rewards + + is wallet only - - Faucet + + Rewards - - Loading market data + + Faucet - - There is no chart data for this ticker yet + + + + Public Key - - Loading + + Copied to Clipboard - - Scanning blocks for TX History... + + Loading market data - - Syncing TX History... + + There is no chart data for this ticker yet - + Refreshing - + No transactions - + Fetching transactions @@ -1868,25 +1889,52 @@ + + Trading Information + + + + + Exchange Rates + + + + Orders + History + + + Place Order + + + + + Order Selected + + + + + START SWAP + + MarketModeSelector - + Sell - + Buy @@ -1938,163 +1986,161 @@ NewUpdateModal - - Searching new updates... - - - - - Please wait while the application is finding a new update... You can close this modal if you want. - - - - - Already updated + + + + Searching new updates - - %1 is already up-to-date ! + + Fetching... - + + + + Close - - New update detected ! + + Could not check new updates because of the following reason: +%1 - - Do you want to update %1 from %2 to %3 ? + + New version found - - Download + + %1 %2 is available ! - - Remind me later + + Your application is updated. - - Download in progress... + + Download + + + NewWallet - - Update downloaded + + Wrong word, please check again - - Update has been successfully downloaded. Do you want to restart the application now ? + + st - - Restart now + + nd - - Restart later + + rd - - - NewWallet - - Wrong word, please check again + + th - + Failed to create a wallet - + New Wallet - + Confirm Seed - + Choose Password - + Important: Back up your seed phrase before proceeding! - + We recommend storing it offline. - + Generated Seed - + Seed phrase - + copied to clipboard - + Next - + Let's double check your seed phrase - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. - - - Enter the %n. word - - - - + + + Enter the + - + + word + + + + Check - + Enter the same password to confirm - + Continue @@ -2215,60 +2261,60 @@ - + Failed to enable %1 TICKER - + Endpoint not reachable - + Could not reach to endpoint - + Mismatch at %1 custom asset configuration TICKER - + Application needs to be restarted for %1 custom asset. TICKER - + Batch %1 failed. Reason: %2 - + Show - + Restart - + Quit - + There isn't any notification - + Mark all as read @@ -2276,44 +2322,44 @@ OrderForm - + Price - + Volume - + Amount to sell - + Amount to receive - + Min volume: - + How to use the pro-view slider ? - + This slider is used to setup the order requirements you need. Left slider: Sets the minimum amount required to process a trade. Right slider: Sets the volume you want to trade. - + Use custom minimum trade amount @@ -2321,7 +2367,7 @@ Right slider: Sets the volume you want to trade. OrderLine - + Funds are recoverable @@ -2329,7 +2375,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found @@ -2337,97 +2383,103 @@ Right slider: Sets the volume you want to trade. OrderModal - + Swap Details - + Order Details - + + Order Type + + + + Maker Order - + Taker Order - + Refund State - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back - + Date - + ID - + Maker Payment Sent ID - + Maker Payment Spent ID - + Taker Payment Spent ID - + Taker Payment Sent ID - + Error ID - + + Error Log - + Close - + Cancel Order - + Recover Funds - + Refunding... - + View on Explorer @@ -2435,64 +2487,62 @@ Right slider: Sets the volume you want to trade. OrderRemovedModal - + Selected Order Removed - - The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. Please select a new order. + + The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. +Please select a new order. - + OK - - Orders - - - Orders - - - OrdersPage - - + + Filter - + Date - + Export CSV - + Apply Filter - + + Cancel All + + + + From - + To - + Please choose the CSV export name and location @@ -2500,7 +2550,7 @@ Right slider: Sets the volume you want to trade. Pagination - + items per page @@ -2567,66 +2617,66 @@ Right slider: Sets the volume you want to trade. Portfolio - + + ADD ASSET + + + + Search asset - + Show only coins with balance - + (%1/%2) - + Portfolio - - - Add asset - - PriceLine - + Set swap price for evaluation - + Exchange rate - + Selected - + Expensive - + Expedient - + %1 compared to CEX PRICE_DIFF% - + CEXchange rate @@ -2634,37 +2684,37 @@ Right slider: Sets the volume you want to trade. PriceLineSimplified - + Set swap price for evaluation - + Exchange rate - + Selected - + CEXchange rate - + Expensive - + Expedient - + %1 compared to CEX PRICE_DIFF% @@ -2673,63 +2723,21 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order - + Placed the order + + + QObject - - Chart - - - - - Trading Information - - - - - Exchange Rates - - - - - Orders - - - - - History - - - - - Order Book - - - - - Best Orders - - - - - Place Order - - - - - START SWAP - - - - - Order Selected + + Cannot reach the endpoint: @@ -2742,22 +2750,17 @@ Right slider: Sets the volume you want to trade. - Only send %1 to this address + Only send %1 to this address: TICKER - %1 address + copied to clipboard. - - copied to clipboard - - - - + Close @@ -2765,91 +2768,71 @@ Right slider: Sets the volume you want to trade. RecoverSeedModal - - + + View seed and private keys - + Please enter your password to view the seed. - - Wrong Password + + Seed - - Cancel - Cancel - - - - View + + Backup Seed - - Seed phrase + + Public Address copied to clipboard - - - - copied to clipboard - - - - - RPC password - + + Cancel + Cancel - - phrase key copied to clipboard + + View - - Backup seed + + + copied to clipboard - + + RPC Password - + Search a coin. - - %1 address - - - - - %1 private key - - - - + Public Address - - Private Key + + Private Key copied to clipboard - - Close + + Private Key @@ -2892,19 +2875,11 @@ Right slider: Sets the volume you want to trade. SearchField - + Search - - SellBox - - - Sell - - - SendModal @@ -2913,124 +2888,144 @@ Right slider: Sets the volume you want to trade. - + Failed to Send - + Prepare to send - + Address of the recipient - + Amount to send - - Max amount + + Gas price - - Gas price + + Recipient's address - - Recipient's address + + The address has to be mixed case. - - Address Book + + Fix - - The address has to be mixed case. + + MAX - - Fix + + Fiat amount: Unavailable + + + + + Fiat amount: %1 + + + + + %1 amount: %2 + + + + + Specify in Fiat - + + Specify in Crypto + + + + Enable Custom Fees - + Only use custom fees if you know what you are doing! - + Enter the custom fee - + Gas Limit - + Custom Fee can't be higher than the amount - + Not enough funds. - + You have %1 AMT TICKER - + Close - + Prepare - - + + Send - + Amount - + Fees - + Date - + Back @@ -3038,43 +3033,43 @@ Right slider: Sets the volume you want to trade. SendModalContactList - + Select a contact with an %1 address - + Search for contacts... - + %1 addresses - + 1 address - - + + Back - + Choose an %1 address of %2 - + Name - + Address @@ -3082,42 +3077,42 @@ Right slider: Sets the volume you want to trade. SendResult - + Transaction Complete! - + Recipient's address - + Amount - + Fees - + Date - + Transaction Hash - + Close - + View on Explorer @@ -3125,206 +3120,205 @@ Right slider: Sets the volume you want to trade. SettingModal - + Confirm Logout - + Are you sure you want to log out? - + Yes Yes - - + + Cancel Cancel - + Settings - + General - - + Language - + User Interface - + Security - + Enable Desktop Notifications - + Maximum number of enabled coins - + Logs - + Open Folder - + Reset - + Current Font - + Current font changed to %1. - + Theme - + Changing theme to %1 + + + Application Version + + + + + copied to clipboard + + - + About & Version - - + + Reset wallet configuration - + This will restart your wallet with default settings - + Confirm - + Ask system's password before sending coins ? (2FA) - + View seed and private keys - - + + Show - + Setup Camouflage Password - + Open - + Disclaimer and ToS - + Application version - - DEX Version - - - - - DEX Version copied to clipboard. - - - - + MM2 version - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version - + Qt Version - + Qt Version copied to clipboard. - + Search Update - + Logout @@ -3332,62 +3326,62 @@ Right slider: Sets the volume you want to trade. Settings - + Fiat - + Recommended: - + Enable Desktop Notifications - + Use QtTextRendering Or NativeTextRendering - + Open Logs Folder - + View seed and private keys - + Disclaimer and ToS - + Setup Camouflage Password - + Reset wallet configuration - + Delete Wallet - + Log out - + mm2 version @@ -3421,32 +3415,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token - + Available Quantity - + Available Quantity (in %1) - + Fiat Volume - + CEX Rate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> @@ -3454,22 +3448,22 @@ Right slider: Sets the volume you want to trade. SubCoinSelector - + Token - + Balance - + Balance Fiat - + No Selectable coin. @@ -3602,160 +3596,155 @@ Right slider: Sets the volume you want to trade. - Support + SupportModal - - Update available - - - - - Up to date - - - - - Changelog - - - - - Open Logs Folder - - - - + Frequently Asked Questions - + Do you store my private keys? - + No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets. - + How is trading on %1 different from trading on other DEXs? - - Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. + + Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. %1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders. - + How long does each atomic swap take? - + Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarization</a>. - + Do I need to be online for the duration of the swap? - + Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. + The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. + If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. + When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! + For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1. - + How are the fees on %1 calculated? - + There are two fee categories to consider when trading on %1. 1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. + 2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. Network fees can vary greatly depending on your selected trading pair. - + Do you provide user support? - + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - - %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. - - - - + Who is behind %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. - + Is it possible to develop my own white-label exchange on %1? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! - + Which devices can I use %1 on? - + + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. + + + + Compliance Info - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. + + + Changelog + + + + + Open Logs Folder + + SwapProgress - + act SHORT FOR ACTUAL TIME - + est SHORT FOR ESTIMATED - + Progress details @@ -3763,7 +3752,7 @@ Network fees can vary greatly depending on your selected trading pair. SweetDexComboBox - + Search @@ -3771,12 +3760,12 @@ Network fees can vary greatly depending on your selected trading pair. TextAreaWithTitle - + Save - + Edit @@ -3784,12 +3773,12 @@ Network fees can vary greatly depending on your selected trading pair. TextEditWithTitle - + Swap ID - + copied to clipboard @@ -3813,213 +3802,275 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap - + Instant trading with best orders - + From - + Enter an amount - + MAX - + To - + Pick an order - + Price - + Better price found: %1. Updating forms. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. - + Reset form. - + + You have no tradable assets. + + + + %1 - + Tradable: - + Min: %1 - + Pick a coin - + SWAP NOW - + Failed to place the order - + Placed the order - + Entered amount must be superior than 0. - + You must select an order. - + Entered amount is below the minimum required by this order: %1 - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - - Search + + %1 balance does not have enough funds to pay the gas of %2 transactions - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + + Calculating fee estimate... + + + + Total %1 fees: - + %2 (%3) + + TradeViewHeader + + + Pro View Settings + + + + + Display Settings + + + + + Chart + + + + + Ticker Selectors + + + + + Trading Information + + + + + Order Book + + + + + Best Orders + + + + + Place Order + + + TransactionDetailsModal - + Transaction Details - + Amount - + Fees - + Date - + Unconfirmed - + Transaction Hash - + + Transactions + + + + + txid copied to clipboard + + + + Confirmations - + Block Height - + From - + To - + Notes - + Close - + View on Explorer @@ -4027,22 +4078,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Sent - + Received - + fees - + Unconfirmed @@ -4055,6 +4106,14 @@ Network fees can vary greatly depending on your selected trading pair. + + Vertical + + + Order Book + + + WalletNameField @@ -4086,55 +4145,65 @@ Network fees can vary greatly depending on your selected trading pair. - + + Search your wallets... + + + + My Wallets - - + + No wallets found! + + + + + Delete - + Enter password to confirm deletion of - + wallet - + Type password - + Cancel Cancel - - + + Wallet status - + wallet deleted successfully - - + + Ok - + wallet password is incorrect @@ -4163,12 +4232,12 @@ Network fees can vary greatly depending on your selected trading pair. - Invalid checksum for %1. Click on the convert button to turn it into a mixed case address + Invalid checksum for %1. Click the button to convert to mixed case address. - Legacy address used for %1, click on the convert button to convert it to a Cashaddress. + Legacy address used for %1. Click the button to convert to a Cashaddress. diff --git a/atomic_defi_design/assets/languages/atomic_defi_fr.ts b/atomic_defi_design/assets/languages/atomic_defi_fr.ts index 2e60a9036..0fedd91a9 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_fr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_fr.ts @@ -1,172 +1,151 @@ - - QPlatformTheme - - &Yes - Oui - - - &No - Non - - - Cancel - Annuler - - AddCustomCoinModal - + Choose the asset type Choisir le type d'actif - - Type - Type - - - + Cancel Annuler - - - + + + Next Suivant - - + Enter the contract address Entrer l'adresse du contrat - + Choose the asset ticker Choisissez le symbole de l'actif - + Ticker Symbole - + Enter the ticker Entrez le symbole - - Contract Address - Adresse du contrat - - - + Get the contract address from Obtenez l'adresse du contrat de - + + Contract address + + + + Get the contract address from Obtenez l'adresse du contrat de - - - - + + + + Previous Précedent - + Choose the asset logo Choisissez le logo de l'actif - + Browse Naviguer - + Please choose the asset logo S'il-vous-plaît choissisez le logo de l'actif - + Configuration Configuration - + All configuration fields will be fetched using the contract address you provided. Tous les champs de configuration vont être récupérés à partir de l'adresse du contrat que vous avez fournis. - + Name Nom - + Enter the name Entrez le nom - + Coingecko ID Coingecko ID - + Enter the Coingecko ID Entrer l'identifiant coingecko - + Get the Coingecko ID Récupérer l'identifiant coingecko - + Active Actif - - + + Preview Pré-visualisation - + WARNING: Application will restart immidiately to apply the changes! AVERTISSEMENT: l'application redémarrera immédiatement pour appliquer les modifications! - + Asset not found, please go back and make sure Contract Address is correct Actif introuvable, veuillez revenir en arrière et vous assurer que l'adresse du contrat est correcte - + Config Fields Champs de configuration - + Fetched Data Données récupérées - + Submit & Restart Soumettre et redémarrer @@ -232,52 +211,52 @@ AddressBookAddContactAddressModal - + Create a new address Créer une nouvelle adresse - + Edit address entry Edition de l'entrée pour l'addresse - + Selected wallet: %1 Portefeuille sélectionné : %1 - + NONE RIEN - + Enter a name Entrez un nom - + This key already exists. Cette clé existe déjà. - + Enter the address Entrez l'adresse - + Validate Valider - + Cancel Annuler - + Convert @@ -285,113 +264,113 @@ AddressBookEditContactModal - + Edit contact Modifier le contact - + Contact Name Nom du contact - + Enter a contact name Entrez un nom de contact - + Address List Liste d'addresse - + Search for an address entry. Rechercher une addresse. - + Type Type - + Key Clef - + Address Addresse - + Actions Actions - - New Address - Nouvelle addresse + + Add Address + - + Tags Tags - + + + - + Confirm Confirmer - - + + Cancel Annuler - + The selected address belongs to a disabled coin, you need to enabled it before sending. L'adresse sélectionnée appartient à un actif désactivée, vous devez l'activer avant l'envoi. - + Enable Activer - + Cannot send to this address Impossible d'envoyer à cette adresse - + Your balance is empty Votre solde est vide - + Ok Ok - + Remove address ? - + Yes Oui - + No Non @@ -399,27 +378,27 @@ AddressBookNewContactCategoryModal - + Add a new tag Ajouter un nouveau tag - + Enter the tag name Entrer le nom du tag - + This contact already has this tag Ce contact possède déjà ce tag - + Add Ajouter - + Cancel Annuler @@ -427,27 +406,27 @@ AddressBookNewContactModal - + Create a new contact Créer un nouveau contact - + Enter the contact name Entrez le nom du contact - + This contact name already exists. Ce nom de contact existe déjà. - + Confirm Confirmer - + Cancel Annuler @@ -465,15 +444,23 @@ valide + + AddressBookWalletTypeList + + + %1 is not enabled - You need to enable it before adding an address. Enable it ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + AddressBookWalletTypeListModal - + Select wallet type Sélectionnez le type de portefeuille - + Search Rechercher @@ -497,7 +484,7 @@ AssetPieChart - + Assets Actifs @@ -505,32 +492,37 @@ AssetsList - + Asset Asset - + Balance Balance - + + Fiat Balance + + + + Change 24h Changement 24H - + Price Prix - + Source Source - + Price provider is: %1 Fournisseur de prix : %1 @@ -548,19 +540,11 @@ Support - + Privacy Intimité - - BuyBox - - - Buy - Acheter - - CamouflagePasswordModal @@ -614,19 +598,6 @@ Sauvegarder - - CandleStickChart - - - Loading market data - Chargement des données de marché - - - - There is no chart data for this pair yet - Il n'y a pas encore de données graphiques pour cette paire - - CannotEnableCoinModal @@ -691,122 +662,139 @@ Les données de marché (prix, graphiques, etc.) marquées de l'icône ⓘ proviennent de sources tierces.<br><br>Les données proviennent de <a href="https://bandprotocol.com/"> Band Decentralized Oracle</a> et <a href="https://www.coingecko.com/fr">Coingecko </a>.<br><br><b>Paires prises en charge par Oracle:</b><br>%1<br><br><b>Dernière référence (Band Oracle) :</b><br><a href="%2">%2</a> + + Chart + + + Chart + Chart + + + + Loading market data + Chargement des données de marché + + + + There is no chart data for this pair yet + Il n'y a pas encore de données graphiques pour cette paire + + ClaimRewardsModal - + Failed to prepare to claim rewards Échec de la préparation de la réclamation des récompenses - + Claim your %1 reward? TICKER Réclamer votre %1 récompense ? - + No UTXOs eligible for claiming Aucun UTXO éligible pour réclamer - - You will receive %1 - AMT TICKER - Vous allez recevoir %1 - - - + Transaction fee is higher than the reward! Les frais de transaction sont plus élevés que la récompense ! - + + You will receive + + + + Refresh Actualiser - + Read more about KMD active users rewards En savoir plus sur les récompenses des utilisateurs actifs de KMD - + UTXO UTXO - + Amount Montant - + Reward Récompense - + Accruing Start Début accumulation - + Accruing Stop Fin accumulation - + Time Left Temps restant - + Error Erreur - + Locktime is not set L'heure de verrouillage n'est pas définie - + Locktime is less than the threshold Le temps de verrouillage est inférieur au seuil - + UTXO height is greater than end of the era La hauteur UTXO est supérieure à la fin de l'ère - + UTXO amount is less than 10 Le montant UTXO est inférieur à 10 - + One hour did not pass yet Une heure ne s'est pas encore écoulée - + Transaction is in mempool La transaction est en mempool - + Unknown problem Problème inconnu - + Cancel Annuler - + Confirm Confirmer @@ -835,16 +823,26 @@ Disable all assets Désactiver tous les actifs + + + Disable 0 balance assets + + Combo_fiat - + + Language + Langue + + + Fiat Monnaie fiduciaire - + Recommended: Conseillé: @@ -895,74 +893,74 @@ ConfirmTradeModal - + Confirm Exchange Details Détails de la confirmation de l'échange - + This swap request can not be undone and is a final event! La requête de ce swap ne peut pas être annulé, c'est irréversible ! - - Total %1 fees: %2 (%3) - Total %1 frais: %2 (%3) - - - + Security configuration Configuration de la sécurité - + dPoW protected dPoW protégé - - + + Read more about dPoW En savoir plus sur dPoW - + Use custom protection settings for incoming %1 transactions TICKER Utiliser les paramètres de protection personnalisés pour les transactions%1 entrantes - + Enable Komodo dPoW security Activer la sécurité de Komodo dPoW - + %1 confirmations for incoming %2 transactions Il y a %1 confirmations pour les transactions entrantes du ticker %2 - + This transaction can take up to 60 mins - DO NOT close this application! Cette transaction peut prendre jusqu'à 60 minutes - NE fermez PAS cette application ! - + + <b>Total %1 fees:</b> + + + + Required Confirmations Confirmations requises - + Warning, this atomic swap is not dPoW protected! Attention, ce swap atomique n'est pas protégé par dPoW ! - + Cancel Annuler - + Confirm Confirmer @@ -978,182 +976,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Le nombre actuel d'actifs activées ne correspond pas à vos spécifications de configuration. La configuration de vos actifs sera réinitialisée. - + Matching Recherche en cours - + Order Matching Recherche d'un ordre - + Matched Trouvé - + Order Matched Ordre trouvé - + Ongoing En cours - + Swap Ongoing Échange en cours - + Successful Réussi - + Swap Successful Échange terminé - + Refunding En cours de remboursement - + Failed Échoué - + Swap Failed Erreur lors de l'échange - + Unknown Inconnue - + Unknown State État inconnu - + Started Commencé - + Negotiated Négocié - + Taker fee sent Frais de preneur envoyés - + Maker payment received Paiement de l'envoyeur reçu - + Maker payment wait confirm started La confirmation d'attente de paiement de l'envoyeur a commencé - + Maker payment validated and confirmed Paiement de l'envoyeur validé et confirmé - + Taker payment sent Paiement du preneur envoyé - + Taker payment spent Paiement du preneur dépensé - + Maker payment spent Paiement de l'envoyeur dépensé - + Finished Fini - + Start failed Le démarrage a échoué - + Negotiate failed La négociation a échoué - + Taker fee validate failed Échec de la validation des frais du preneur - + Maker payment transaction failed La transaction de paiement du créateur a échoué - + Maker payment Data send failed Échec de l'envoi des données de paiement du créateur - + Maker payment wait confirm failed La confirmation de l'attente de paiement du créateur a échoué - + Taker payment validate failed La validation du paiement du preneur a échoué - + Taker payment wait confirm failed La confirmation de l'attente de paiement du preneur a échoué - + Taker payment spend failed Échec des dépenses de paiement du preneur - + Maker payment wait refund started attente de paiement du créateur, remboursement commencé - + Maker payment refunded Paiement du créateur remboursé - + Maker payment refund failed échec du remboursement du paiement du créateur @@ -1213,7 +1211,7 @@ DexAppPasswordField - + Type password Tapez votre mot de passe @@ -1257,7 +1255,7 @@ DexPaginator - + items per page Nombres d'éléments par page @@ -1283,7 +1281,7 @@ DexSweetComboBox - + Search Rechercher @@ -1301,37 +1299,37 @@ Rechercher un actif - - Add a custom asset to the list - Ajouter un token personnalisé à la liste - - - + All assets are already enabled! Tous les actifs sont déjà activés ! - + Change assets limit Limiter le nombre d'actifs - + Select all assets Sélectionnez tous les actifs - + You can still enable %1 assets. Selected: %2. Vous pouvez toujours activer %1 actifs. Sélectionnés: %2. - + + Add a custom asset + + + + Close Fermer - + Enable Activer @@ -1344,27 +1342,27 @@ Clause de non-responsabilité et conditions d'utilisation - + Accept EULA Acceptez l'EULA - + Accept Terms and Conditions Accepter les termes et conditions - + Close Fermer - + Cancel Annuler - + Confirm Confirmer @@ -1390,12 +1388,12 @@ FeeInfo - + Minimum fee Frais minimum - + Fees will be calculated Les frais seront calculés @@ -1403,7 +1401,7 @@ General - + %n day(s) %n jour(s) @@ -1411,7 +1409,7 @@ - + %nd day @@ -1420,7 +1418,7 @@ - + %nh hours @@ -1429,7 +1427,7 @@ - + %nm minutes @@ -1438,7 +1436,7 @@ - + %ns seconds @@ -1447,7 +1445,7 @@ - + %nms milliseconds @@ -1456,66 +1454,91 @@ - + - - - + + <b>Taker tx fee:</b> + + + + + <b>Dex tx fee:</b> + + + + + <b>Dex fee:</b> + + + + + <b>Maker tx fee:</b> + + + + + %1 %2 %3 (%4) + + + + Trading Fee Frais d'échanges - + Minimum Trading Amount Frais d'échange minimum - + Wallet %1 already exists WALLETNAME Le portefeuille %1 existe déjà - + %1 balance is lower than the fees amount: %2 %3 La %1 balance est inférieur aux frais: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Le solde négociable (après frais) %1 est inférieur au montant minimum de la transaction - + Please fill the price field Veuillez remplir le champ de prix - + Please fill the volume field Veuillez remplir le champ de volume - - + + %1 volume is lower than minimum trade amount Le volume de %1 est inférieur au montant minimum de la transaction - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - + Unknown Error Erreur inconnue @@ -1523,50 +1546,41 @@ Header - + You get Vous recevez - + You send Vous envoyez - + Fiat Price Prix fiduciaire - + CEX rate Taux CEX - - + Price Prix - + Quantity Quantité - + Total Total - - History - - - Recent Swaps - Swaps récents - - ImportWallet @@ -1575,94 +1589,92 @@ Échec de l'importation du portefeuille - + Import wallet - Setup Importer le portefeuille - Configuration - + Import wallet - Choose password Importer le portefeuille - Choisir le mot de passe - + Wallet Name Nom du portefeuille - + Enter seed Entrez la phrase de récupération - - BIP39 seed validation failed, try again or select 'Allow custom seed' - Échec de la validation de la phrase de récupération BIP39, réessayez ou sélectionnez ' Autoriser les phrases de récupérations personnalisées' + + Your seed is not BIP39 compliant. +Try again or select 'Allow custom seed' to continue. + - + + + i understand + + + + + Ok + Ok + + + Allow custom seed Autoriser les phrases de récupération personnalisées - + <strong>Allow custom seed</strong> <strong>Autoriser les phrases personnalisées</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Les phrases de départ personnalisées peuvent être moins sécurisées et plus faciles à déchiffrer qu'une phrase de départ ou une clé privée (WIF) conforme à BIP39 générée.<br><br>Pour confirmer que vous comprenez le risque et savez ce que vous faites, tapez <strong>'Je comprends'</strong> dans la case ci-dessous. - - + I understand Je comprends - - Enable - Activer - - - + Next Suivant - + Enter the same password to confirm Entrez le même mot de passe pour confirmer - + Continue Continuer - - Languages - - - Language - Langue - - LinksRow - + Join our Discord server Rejoignez notre serveur Discord - + Follow us on Twitter Suivez-nous sur Twitter - + Go to Support Guides M'envoyer sur les guides du support @@ -1674,16 +1686,21 @@ Funds are recoverable Les fonds sont récupérables + + + Best Orders + Meilleurs offres + ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> - + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 Cette commande nécessite un montant minimum de %1 %2 <br>Vous n'avez pas assez de fonds.<br> %3 @@ -1722,21 +1739,17 @@ Login - + Incorrect Password Mot de passe incorrect - - Connect - Connection - - - connect - connexion + + Log In + - + Cancel Annuler @@ -1744,127 +1757,129 @@ Main - + Segwit Segwit - + Confirmation Confirmation - + Do you want to send your %1 funds to %2 wallet first? Voulez-vous d'abord envoyer vos fonds %1 vers le portefeuille %2 ? - + Success Succès - + Your transaction is send, may take some time to arrive Votre transaction est envoyée, peut prendre un certain temps pour arriver - - Wallet Balance - Solde portefeuille - - - + Price Prix - - Change 24h - Changement 24H + + Change 24hr + - - Portfolio % - Portefeuille % + + Porfolio + - + + Contract Address + + + + Send Envoyez - + Enable %1 ? Activer %1 ? - + Yes Oui - + No Non - + Receive Recevoir - + Swap Échange - + + is wallet only + + + + Rewards Récompenses - + Faucet Robinet - - Loading market data - Chargement des données de marché - - - - There is no chart data for this ticker yet - Il n'y a pas encore de données graphiques pour ce ticker + + + + Public Key + - - Loading - Chargement + + Copied to Clipboard + Copier dans le presse-papier - - Scanning blocks for TX History... - Analyses des blocs pour l'historique TX... + + Loading market data + Chargement des données de marché - - Syncing TX History... - Synchronisation de l'historique de transactions... + + There is no chart data for this ticker yet + Il n'y a pas encore de données graphiques pour ce ticker - + No transactions Pas de transactions - + Refreshing Actualiser - + Fetching transactions Récupération des transactions @@ -1874,25 +1889,52 @@ Échanger + + Trading Information + Informations de Trading + + + + Exchange Rates + Taux d'échanges + + + Orders Ordres + History Historique + + + Place Order + Placer l'ordre + + + + Order Selected + Ordre séléctionné + + + + START SWAP + COMMENCER L'ÉCHANGE + MarketModeSelector - + Sell Vendre - + Buy Acheter @@ -1944,163 +1986,161 @@ NewUpdateModal - - Searching new updates... - Recherche de nouvelles mises à jour ... - - - - Please wait while the application is finding a new update... You can close this modal if you want. - Veuillez patienter pendant que l'application recherche une nouvelle mise à jour ... Vous pouvez fermer ce modal si vous le souhaitez. - - - - Already updated - Déjà mis à jour + + + + Searching new updates + - - %1 is already up-to-date ! - %1 est déjà à jour ! + + Fetching... + - + + + + Close Fermer - - New update detected ! - Nouvelle mise à jour détectée ! + + Could not check new updates because of the following reason: +%1 + - - Do you want to update %1 from %2 to %3 ? - Voulez-vous mettre à jour %1 de %2 vers %3 ? + + New version found + - - Download - Téléchargement + + %1 %2 is available ! + - - Remind me later - Rappelle-moi plus tard + + Your application is updated. + - - Download in progress... - Téléchargement en cours... + + Download + Téléchargement + + + NewWallet - - Update downloaded - Mise à jour téléchargée + + Wrong word, please check again + Mauvais mot, veuillez vérifier à nouveau - - Update has been successfully downloaded. Do you want to restart the application now ? - La mise à jour a été téléchargée avec succès. Voulez-vous redémarrer l'application maintenant ? + + st + - - Restart now - Redémarrer maintenant + + nd + - - Restart later - Redémarrer plus tard + + rd + - - - NewWallet - - Wrong word, please check again - Mauvais mot, veuillez vérifier à nouveau + + th + - + Failed to create a wallet Impossible de créer un portefeuille - + New Wallet Nouveau portefeuille - + Confirm Seed Confirmer la phrase de récupération - + Choose Password Choisissez un mot de passe - + Important: Back up your seed phrase before proceeding! Important: sauvegardez votre phrase de recupération avant de continuer ! - + We recommend storing it offline. Nous vous recommandons de le stocker hors ligne. - + Generated Seed Générer un Seed - + Seed phrase Phrase de récupération - + copied to clipboard copié dans le presse-papier - + Next Suivant - + Let's double check your seed phrase Vérifions à nouveau votre phrase de récupération - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Votre phrase de récupération est importante - c'est pourquoi nous aimons nous assurer qu'elle est correcte. Nous vous poserons trois questions différentes au sujet de votre phrase source pour vous assurer que vous pourrez facilement restaurer votre portefeuille à tout moment. - - - Enter the %n. word - - Entrez le mot numéro %n - Entrez le mot numéro %n - + + + Enter the + - + + word + + + + Check Vérifier - + Enter the same password to confirm Entrez le même mot de passe pour confirmer - + Continue Continuer @@ -2221,60 +2261,60 @@ Veuillez vérifier votre connexion Internet (par exemple, le service VPN ou le pare-feu peut la bloquer). - + Failed to enable %1 TICKER Échec de l'activation de %1 - + Endpoint not reachable Point final non accessible - + Could not reach to endpoint Impossible d'atteindre le point de terminaison - + Mismatch at %1 custom asset configuration TICKER Non-correspondance à la configuration de l'asset personnalisé %1 - + Application needs to be restarted for %1 custom asset. TICKER L'application doit être redémarrée pour l'asset personnalisé %1. - + Batch %1 failed. Reason: %2 Le lot %1 a échoué. Raison :%2 - + Show Montrer - + Restart Redémarrer - + Quit Quitter - + There isn't any notification Il n'y a aucune notification - + Mark all as read Tout marquer comme lu @@ -2282,27 +2322,27 @@ OrderForm - + Amount to sell Montant à vendre - + Amount to receive Montant à recevoir - + Min volume: Min volume : - + How to use the pro-view slider ? Comment utiliser le slider pro-view ? - + This slider is used to setup the order requirements you need. Left slider: Sets the minimum amount required to process a trade. Right slider: Sets the volume you want to trade. @@ -2311,17 +2351,17 @@ Curseur de gauche : définit le montant minimum requis pour traiter une transact Curseur droit : définit le volume que vous souhaitez trader. - + Use custom minimum trade amount Utiliser le montant d'échange minimum personnalisé - + Price Prix - + Volume Volume @@ -2329,7 +2369,7 @@ Curseur droit : définit le volume que vous souhaitez trader. OrderLine - + Funds are recoverable Les fonds sont récupérables @@ -2337,7 +2377,7 @@ Curseur droit : définit le volume que vous souhaitez trader. OrderList - + No results found Aucun résultat trouvé @@ -2345,97 +2385,103 @@ Curseur droit : définit le volume que vous souhaitez trader. OrderModal - + Swap Details Détails de l'échange - + Order Details Détails de l'ordre - + + Order Type + + + + Maker Order Ordre de vente - + Taker Order Ordre d'achat - + Refund State État de remboursement - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Votre échange a échoué, mais le processus de remboursement automatique de votre paiement a déjà commencé. Veuillez patienter et garder l'application ouverte jusqu'à ce que vous receviez votre remboursement - + Date Date - + ID ID - + Recover Funds Récupérer des fonds - + Refunding... Remboursement... - + View on Explorer Voir dans l'explorateur - + Maker Payment Sent ID Identifiant d'envoi du paiement du créateur - + Maker Payment Spent ID Identifiant de paiement du créateur - + Taker Payment Spent ID Identifiant de paiement du preneur d'achat - + Taker Payment Sent ID Identifiant d'envoi du paiement du preneur - + Cancel Order Annuler l'ordre - + Error ID ID de l'erreur - + + Error Log Journal des erreurs - + Close Fermer @@ -2443,64 +2489,62 @@ Curseur droit : définit le volume que vous souhaitez trader. OrderRemovedModal - + Selected Order Removed Ordre sélectionné supprimé - - The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. Please select a new order. - La commande sélectionnée n'existe plus, elle a peut-être été matché ou annulée, et aucune commande avec un meilleur prix n'est disponible. Veuillez sélectionner un nouvelle ordre. + + The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. +Please select a new order. + - + OK OK - - Orders - - - Orders - Ordres - - OrdersPage - + From De - + To Vers - + Apply Filter Appliquer les changements - - + + Filter Filtrer - + Date Date - + Export CSV Exporter CSV - + + Cancel All + + + + Please choose the CSV export name and location Veuillez choisir le nom et l'emplacement de l'exportation CSV @@ -2508,7 +2552,7 @@ Curseur droit : définit le volume que vous souhaitez trader. Pagination - + items per page Nombres d'éléments par page @@ -2575,66 +2619,66 @@ Curseur droit : définit le volume que vous souhaitez trader. Portfolio - + + ADD ASSET + + + + Search asset Rechercher un actif - + Show only coins with balance Afficher uniquement les assets avec solde - + (%1/%2) (%1/%2) - + Portfolio Portfolio - - - Add asset - Ajouter un actif - PriceLine - + Set swap price for evaluation Définir le prix d'échange pour l'évaluation - + Exchange rate Taux de l'échange - + Selected Choisi - + Expensive Coûteuse - + Expedient Abordable - + %1 compared to CEX PRICE_DIFF% %1 par rapport aux CEX - + CEXchange rate Taux du CEX @@ -2642,37 +2686,37 @@ Curseur droit : définit le volume que vous souhaitez trader. PriceLineSimplified - + Set swap price for evaluation Définir le prix d'échange pour l'évaluation - + Exchange rate Taux de l'échange - + Selected Choisi - + CEXchange rate Taux du CEX - + Expensive Coûteuse - + Expedient Abordable - + %1 compared to CEX PRICE_DIFF% %1 par rapport aux CEX @@ -2681,64 +2725,22 @@ Curseur droit : définit le volume que vous souhaitez trader. ProView - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé avec succès + + + QObject - - Chart - Chart - - - - Trading Information - Informations de Trading - - - - Exchange Rates - Taux d'échanges - - - - Orders - Ordres - - - - History - Historique - - - - Order Book - Carnet d'ordres - - - - Best Orders - Meilleurs offres - - - - Place Order - Placer l'ordre - - - - START SWAP - COMMENCER L'ÉCHANGE - - - - Order Selected - Ordre séléctionné + + Cannot reach the endpoint: + @@ -2750,22 +2752,17 @@ Curseur droit : définit le volume que vous souhaitez trader. - Only send %1 to this address + Only send %1 to this address: TICKER - Envoyez uniquement %1 à cette adresse - - - - %1 address - adresse %1 + - copied to clipboard - copié dans le presse-papier + copied to clipboard. + - + Close Fermer @@ -2773,90 +2770,70 @@ Curseur droit : définit le volume que vous souhaitez trader. RecoverSeedModal - - + + View seed and private keys Afficher le seed et les clefs privées - + Please enter your password to view the seed. Veuillez entrer votre mot de passe pour voir la phrase de récupération. - - Wrong Password - Mauvais mot de passe - - - - Cancel - Annuler - - - - Seed phrase - Phrase de récupération + + Seed + - - - - copied to clipboard - copié dans le presse-papier + + Backup Seed + - - RPC password - Mot de passe RPC + + Public Address copied to clipboard + - - phrase key copied to clipboard - clé de phrase copiée dans le presse-papiers + + Cancel + Annuler - - Backup seed - Seed de récuperation + + + copied to clipboard + copié dans le presse-papier - + + RPC Password Mot de passe RPC - + Search a coin. Rechercher une asset. - - %1 address - adresse %1 - - - - %1 private key - clef privée %1 - - - + Public Address Adresse publique - - Private Key - Clé privée + + Private Key copied to clipboard + - - Close - Fermer + + Private Key + Clé privée - + View Voir @@ -2900,19 +2877,11 @@ Curseur droit : définit le volume que vous souhaitez trader. SearchField - + Search Rechercher - - SellBox - - - Sell - Vendre - - SendModal @@ -2921,124 +2890,144 @@ Curseur droit : définit le volume que vous souhaitez trader. Échec de l'envoi - + Failed to Send Échec de l'envoi - + Prepare to send Préparez à envoyer du - + Address of the recipient Adresse du destinataire - + Amount to send Montant à envoyer - - Max amount - Montant maximum - - - + Gas price Prix ​​du gaz - + Recipient's address Adresse du destinataire - - Address Book - Carnet d'adresses - - - + The address has to be mixed case. L'adresse doit être mixte (case). - + Fix Réparer - + + MAX + MAX + + + + Fiat amount: Unavailable + + + + + Fiat amount: %1 + + + + + %1 amount: %2 + + + + + Specify in Fiat + + + + + Specify in Crypto + + + + Enable Custom Fees Activer les frais personnalisés - + Only use custom fees if you know what you are doing! N'utilisez des frais personnalisés que si vous savez ce que vous faites ! - + Enter the custom fee Entrez les frais personnalisées - + Gas Limit Limite de gaz - + Custom Fee can't be higher than the amount Les frais personnalisées ne peuvent pas être supérieurs au montant - + Not enough funds. Pas assez de fonds. - + You have %1 AMT TICKER Vous avez %1 - + Close Fermer - + Prepare Préparer - - + + Send Envoyez - + Amount Montant - + Fees Frais - + Date Date - + Back Retour @@ -3046,43 +3035,43 @@ Curseur droit : définit le volume que vous souhaitez trader. SendModalContactList - + Select a contact with an %1 address Sélectionnez un contact avec une adresse %1 - + Search for contacts... Rechercher des contacts... - + %1 addresses %1 adresses - + 1 address 1 adresse - - + + Back Retour - + Choose an %1 address of %2 Choisissez une adresse %1 de %2 - + Name Nom - + Address Adresse @@ -3090,42 +3079,42 @@ Curseur droit : définit le volume que vous souhaitez trader. SendResult - + Transaction Complete! Transaction terminée ! - + Recipient's address Adresse du destinataire - + Amount Montant - + Fees Frais - + Date Date - + Transaction Hash Hachage de la transaction - + Close Fermer - + View on Explorer Voir dans l'explorateur @@ -3133,175 +3122,174 @@ Curseur droit : définit le volume que vous souhaitez trader. SettingModal - + Confirm Logout Confirmer la déconnexion - + Are you sure you want to log out? Êtes-vous sûr de vouloir vous déconnecter ? - + Yes Oui - - + + Cancel Annuler - + Settings Réglages - - + Language Langue - + User Interface Interface utilsateur - + Security Sécurité - + General Général - + About & Version À propos & version - + Enable Desktop Notifications Activer les notifications - + Maximum number of enabled coins Nombre maximum d'actifs activés - + Logs Journaux - + Open Folder Ouvrir le dossier - - + + Reset wallet configuration Réinitialiser la configuration du portefeuille - + This will restart your wallet with default settings Cela redémarrera votre portefeuille avec les paramètres par défaut - + Confirm Confirmer - + Changing theme to %1 Changer le thème en %1 - + + Application Version + + + + + copied to clipboard + copié dans le presse-papier + + + Reset Réinitialiser - + Current Font Police actuelle - + Current font changed to %1. La police actuelle est passée à %1. - + Theme Thème - + Ask system's password before sending coins ? (2FA) Demander le mot de passe du système avant d'envoyer des actifs ? (2FA) - + Application version Version de l'application - - DEX Version - DEX Version - - - - DEX Version copied to clipboard. - Version DEX copiée dans le presse-papiers. - - - + MM2 version Version de MM2 - + MM2 Version MM2 Version - + MM2 Version copied to clipboard. MM2 Version copiée dans le presse-papiers. - + Qt version Version de Qt - + Qt Version Qt Version - + Qt Version copied to clipboard. Version Qt copiée dans le presse-papiers. - + Search Update Rechercher une mise à jour - + Logout Se déconnecter @@ -3311,28 +3299,28 @@ Curseur droit : définit le volume que vous souhaitez trader. - + View seed and private keys Afficher la phrase de récupération et les clefs privées - - + + Show Montrer - + Setup Camouflage Password Configurer le mot de passe de camouflage - + Open Ouvrir - + Disclaimer and ToS Clause de non-responsabilité et conditions d'utilisation @@ -3340,62 +3328,62 @@ Curseur droit : définit le volume que vous souhaitez trader. Settings - + Fiat Monnaie fiduciaire - + Recommended: Conseillé : - + Enable Desktop Notifications Activer les notifications - + Use QtTextRendering Or NativeTextRendering Utilisez QtTextRendering ou NativeTextRendering - + Open Logs Folder Ouvrir le répertoire de logs - + View seed and private keys Voir le seed et les clefs privées - + Disclaimer and ToS Clause de non-responsabilité et conditions d'utilisation - + Setup Camouflage Password Configurez un mot de passe de camouflage - + Reset wallet configuration Réinitialiser la configuration du portefeuille - + Delete Wallet Supprimez le portefeuille - + Log out Déconnexion - + mm2 version Version de mm2 @@ -3429,32 +3417,32 @@ Curseur droit : définit le volume que vous souhaitez trader. SubBestOrder - + Token Asset - + Available Quantity Quantité disponible - + Available Quantity (in %1) Quantité disponible (en %1) - + Fiat Volume Montant Fiduciaire - + CEX Rate Taux CEX - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 n'est pas activé - Souhaitez vous l'activer pour pouvoir selectionnez les meilleurs offres %2 ?<br><a href='#'>Oui</a> - <a href='#no'>Non</a> @@ -3462,22 +3450,22 @@ Curseur droit : définit le volume que vous souhaitez trader. SubCoinSelector - + Token Asset - + Balance Balance - + Balance Fiat Balance Fiduciaire - + No Selectable coin. Aucune asset sélectionnable. @@ -3610,176 +3598,157 @@ Curseur droit : définit le volume que vous souhaitez trader. - Support - - - Update available - Mise à jour disponible - - - - Up to date - À jour - - - - Changelog - Anglicisme - Changelog - + SupportModal - - Open Logs Folder - Ouvrir le répertoire de logs - - - + Frequently Asked Questions - Foire aux questions + Foire aux questions - + Do you store my private keys? - Stockez-vous mes clés privées ? + Stockez-vous mes clés privées ? - + No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets. - Non! %1 n'est pas dépositaire. Nous ne stockons jamais de données sensibles, y compris vos clés privées, vos phrases de départ ou votre code PIN. Ces données ne sont stockées que sur l'appareil de l'utilisateur et ne le quittent jamais. Vous avez le plein contrôle de vos actifs. + Non! %1 n'est pas dépositaire. Nous ne stockons jamais de données sensibles, y compris vos clés privées, vos phrases de départ ou votre code PIN. Ces données ne sont stockées que sur l'appareil de l'utilisateur et ne le quittent jamais. Vous avez le plein contrôle de vos actifs. - + How is trading on %1 different from trading on other DEXs? - En quoi le trading sur %1 est-il différent du trading sur d'autres DEX ? + En quoi le trading sur %1 est-il différent du trading sur d'autres DEX ? - - Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. + + Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. %1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders. - Les autres DEX ne vous permettent généralement d'échanger que des actifs basés sur un seul réseau de blockchain, d'utiliser des jetons proxy et de ne passer qu'une seule commande avec les mêmes fonds. - -%1 vous permet de trader de manière native sur deux réseaux blockchain différents sans jetons proxy. Vous pouvez également passer plusieurs commandes avec les mêmes fonds. Par exemple, vous pouvez vendre 0,1 BTC pour KMD, QTUM ou VRSC - la première commande exécutée annule automatiquement toutes les autres commandes. + + + + + How long does each atomic swap take? + Combien de temps dure chaque échange atomique ? - + Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarization</a>. - Les autres DEX ne vous permettent généralement d'échanger que des actifs basés sur un seul réseau de blockchain, d'utiliser des jetons proxy et de ne passer qu'une seule commande avec les mêmes fonds. + Les autres DEX ne vous permettent généralement d'échanger que des actifs basés sur un seul réseau de blockchain, d'utiliser des jetons proxy et de ne passer qu'une seule commande avec les mêmes fonds. Plusieurs facteurs déterminent le temps de traitement de chaque swap. Le temps de blocage des actifs échangés dépend de chaque réseau (Bitcoin étant généralement le plus lent). De plus, l'utilisateur peut personnaliser ses préférences de sécurité. Par exemple, (vous pouvez demander à %1 de considérer une transaction KMD comme finale après seulement 3 confirmations, ce qui raccourcit le temps d'échange par rapport à l'attente d'une <a href="https://komodoplatform.com/security-delayed-proof- of-work-dpow/">notarisation</a>. - + + Do I need to be online for the duration of the swap? + Dois-je être en ligne pendant toute la durée du swap ? + + + Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. + The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. + If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. + When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! -For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1. - Les autres DEX ne vous permettent généralement de négocier que des actifs basés sur un seul réseau de blockchain, d'utiliser des jetons proxy et de ne passer qu'une seule commande avec les mêmes fonds. -Oui. Vous devez rester connecté à Internet et exécuter votre application pour terminer avec succès chaque échange atomique (de très courtes interruptions de connectivité conviennent généralement). Sinon, il existe un risque d'annulation de la transaction si vous êtes un fabricant et un risque de perte de fonds si vous êtes un preneur. -Le protocole d'échange atomique exige que les deux participants restent en ligne et surveillent les chaînes de blocs impliquées pour que le processus reste atomique. -Si vous vous déconnectez, vos commandes échoueront également, et toutes celles qui sont en cours échoueront, ce qui entraînera une perte potentielle de frais de transaction / transaction et une attente pour que l'échange expire et émette un remboursement. Cela peut également affecter négativement le score de réputation de votre portefeuille pour les futures correspondances commerciales. -Lorsque vous reviendrez en ligne, vos commandes recommenceront à être diffusées au prix que vous avez défini avant de vous déconnecter. S'il y a eu un mouvement de prix important entre-temps, vous pourriez involontairement proposer une bonne affaire à quelqu'un ! -Pour cette raison, nous vous recommandons d'annuler les commandes avant de fermer %1, ou de revoir et de réviser vos prix lors du redémarrage de %1. +For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1. + - + How are the fees on %1 calculated? - Comment les frais sur %1 sont-ils calculés ? + Comment les frais sur %1 sont-ils calculés ? + + + + There are two fee categories to consider when trading on %1. + +1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. + +2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. + +Network fees can vary greatly depending on your selected trading pair. + - + + Do you provide user support? + Fournissez-vous un support utilisateur ? + + + + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! + Oui! %1 offre une assistance via le <a href="%2">%1 serveur Discord</a>. L'équipe et la communauté sont toujours ravies de vous aider ! + + + Who is behind %1? - Qui est derrière %1 ? + Qui est derrière %1 ? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. - %1 est développé par l'équipe de Komodo. Komodo est l'un des projets de blockchain les plus établis travaillant sur des solutions innovantes telles que les échanges atomiques, la preuve de travail différée et une architecture multichaîne interopérable. + %1 est développé par l'équipe de Komodo. Komodo est l'un des projets de blockchain les plus établis travaillant sur des solutions innovantes telles que les échanges atomiques, la preuve de travail différée et une architecture multichaîne interopérable. - + Is it possible to develop my own white-label exchange on %1? - Est-il possible de développer mon propre échange en white label sur %1 ? + Est-il possible de développer mon propre échange en white label sur %1 ? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! - Absolument! Vous pouvez lire notre documentation développeur pour plus de détails ou nous contacter avec vos demandes de partenariat. Vous avez une question technique spécifique? La communauté de développeurs %1 est toujours prête à vous aider ! + Absolument! Vous pouvez lire notre documentation développeur pour plus de détails ou nous contacter avec vos demandes de partenariat. Vous avez une question technique spécifique? La communauté de développeurs %1 est toujours prête à vous aider ! - + Which devices can I use %1 on? - Sur quels appareils puis-je utiliser %1 ? - - - - There are two fee categories to consider when trading on %1. - -1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. -2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. - -Network fees can vary greatly depending on your selected trading pair. - Il existe deux catégories de frais à prendre en compte lors de la négociation sur %1. - -1. %1 facture environ 0,13% (1/777 du volume de négociation mais pas moins de 0,0001) comme frais de négociation pour les ordres preneurs, et les ordres maker n'ont aucun frais. -2. Les fabricants et les preneurs devront payer des frais de réseau normaux aux chaînes de blocs impliquées lors de transactions d'échange atomique. - -Les frais de réseau peuvent varier considérablement en fonction de votre paire de trading sélectionnée. + Sur quels appareils puis-je utiliser %1 ? - - Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - Oui! %1 offre une assistance via le <a href="%2">%1 serveur Discord</a>. L'équipe et la communauté sont toujours ravies de vous aider ! - - - + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. - %1 est disponible pour mobile sur <a href="%2">Android et iPhone, et pour ordinateur de bureau sur les systèmes d'exploitation Windows, Mac et Linux</a>. + %1 est disponible pour mobile sur <a href="%2">Android et iPhone, et pour ordinateur de bureau sur les systèmes d'exploitation Windows, Mac et Linux</a>. - + Compliance Info - Informations de conformité + Informations de conformité - + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. - En raison de circonstances réglementaires et juridiques, les citoyens de certaines juridictions, y compris, mais sans s'y limiter, les États-Unis d'Amérique, le Canada, Hong Kong, Israël, Singapour, le Soudan, l'Autriche, l'Iran et tout autre État, pays ou autre juridiction sous embargo par les États-Unis d'Amérique ou l'Union européenne ne sont pas autorisés à utiliser cette application. + En raison de circonstances réglementaires et juridiques, les citoyens de certaines juridictions, y compris, mais sans s'y limiter, les États-Unis d'Amérique, le Canada, Hong Kong, Israël, Singapour, le Soudan, l'Autriche, l'Iran et tout autre État, pays ou autre juridiction sous embargo par les États-Unis d'Amérique ou l'Union européenne ne sont pas autorisés à utiliser cette application. - - How long does each atomic swap take? - Combien de temps dure chaque échange atomique ? - - - - Do I need to be online for the duration of the swap? - Dois-je être en ligne pendant toute la durée du swap ? + + Changelog + Changelog - - Do you provide user support? - Fournissez-vous un support utilisateur ? + + Open Logs Folder + Ouvrir le répertoire de logs SwapProgress - + act SHORT FOR ACTUAL TIME act - + est SHORT FOR ESTIMATED est - + Progress details Détails de la progression @@ -3787,7 +3756,7 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire SweetDexComboBox - + Search Rechercher @@ -3795,12 +3764,12 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire TextAreaWithTitle - + Save Sauvegarder - + Edit Éditer @@ -3808,12 +3777,12 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire TextEditWithTitle - + Swap ID ID du Swap - + copied to clipboard copié dans le presse-papier @@ -3837,145 +3806,154 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire Trade - + Swap Échange - + Instant trading with best orders Trading instantané avec les meilleurs ordres - + From De - + Enter an amount Entrez un montant - + MAX MAX - + To Vers - + Pick an order Choisir une commande - + Price Prix - + Better price found: %1. Updating forms. Meilleur prix trouvé : %1. Mise à jour du formulaire. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Meilleur prix (%1) trouvé mais la quantité reçue (%2) est inférieure à votre montant de réception (%3). Cliquez ici pour mettre à jour la commande sélectionnée. - + Reset form. Réinitialiser le formulaire. - + + You have no tradable assets. + + + + %1 - + Tradable: Disponible: - + Min: %1 - + Pick a coin Choisissez un actif - + SWAP NOW ÉCHANGER MAINTENANT - + Failed to place the order Échec lors du placement de l'ordre - + Placed the order L'ordre a été placé - + Entered amount must be superior than 0. Le montant saisi doit être supérieur à 0. - + You must select an order. Vous devez sélectionner une commande. - + Entered amount is below the minimum required by this order: %1 Le montant saisi est inférieur au minimum requis par cette commande : %1 - - + + %1 needs to be enabled in order to use %2 %1 doit être activé pour utiliser %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions Le solde %1 doit être financé, un solde différent de zéro est requis pour payer les frais de transactions de %2 - - - Search - Rechercher + + %1 balance does not have enough funds to pay the gas of %2 transactions + - + No buy orders found for %1. Aucun ordre d'achat trouvé pour %1. - + You can check later or try to sell a different coin. Vous pouvez vérifier plus tard ou essayer de vendre un actif différent. - + + Calculating fee estimate... + + + + Total %1 fees: Frais totaux %1 : - + %2 (%3) @@ -3983,74 +3961,120 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire TradeViewHeader - DEX - DEX + + Pro View Settings + + + + + Display Settings + + + + + Chart + Chart + + + + Ticker Selectors + + + + + Trading Information + Informations de Trading + + + + Order Book + Carnet d'ordres + + + + Best Orders + Meilleurs offres + + + + Place Order + Placer l'ordre TransactionDetailsModal - + Transaction Details Détails de la transaction - + Amount Montant - + Fees Frais - + Date Date - + Unconfirmed Non confirmé - + Transaction Hash Hachage de la transaction - + + Transactions + + + + + txid copied to clipboard + + + + Confirmations Confirmations - + Block Height Hauteur de bloc - + From De - + To Vers - + Notes Remarques - + Close Fermer - + View on Explorer Voir dans l'explorateur @@ -4058,22 +4082,22 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire Transactions - + Received Reçue - + Sent Envoyé - + fees frais - + Unconfirmed Non confirmé @@ -4086,6 +4110,14 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire L'archive de mise à jour téléchargée est corrompue ! + + Vertical + + + Order Book + Carnet d'ordres + + WalletNameField @@ -4117,55 +4149,65 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire Importer un portefeuille - + + Search your wallets... + + + + My Wallets Mes portefeuilles - - + + No wallets found! + + + + + Delete Supprimez - + Enter password to confirm deletion of Entrez le mot de passe pour confirmer la suppression de - + wallet portefeuille - + Type password Tapez votre mot de passe - + Cancel Annuler - - + + Wallet status État du portefeuille - + wallet deleted successfully portefeuille supprimé avec succès - - + + Ok Ok - + wallet password is incorrect le mot de passe du portefeuille est incorrect @@ -4194,13 +4236,13 @@ Les frais de réseau peuvent varier considérablement en fonction de votre paire - Invalid checksum for %1. Click on the convert button to turn it into a mixed case address - Checksum-non valide pour %1. Cliquez sur le bouton pour avoir une adresse de cas mixte + Invalid checksum for %1. Click the button to convert to mixed case address. + - Legacy address used for %1, click on the convert button to convert it to a Cashaddress. - Ancien format d'adresse utilisée pour %1, cliquez sur le bouton pour la convertir en Cashaddress. + Legacy address used for %1. Click the button to convert to a Cashaddress. + diff --git a/atomic_defi_design/assets/languages/atomic_defi_ru.ts b/atomic_defi_design/assets/languages/atomic_defi_ru.ts index bb25aecc9..f2380b974 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_ru.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_ru.ts @@ -1,172 +1,151 @@ - - QPlatformTheme - - &Yes - &Да - - - &No - &Нет - - - Cancel - Отменить - - AddCustomCoinModal - + Choose the asset type Выберите тип монеты - - Type - Тип - - - + Cancel Отменить - - - + + + Next Далее - - + Enter the contract address Введите адрес контракта - + Choose the asset ticker Введите тикер монеты - + Ticker Тикер - + Enter the ticker Введите тикер - - Contract Address - Адрес контракта - - - + Get the contract address from Получить адрес контракта от - + + Contract address + + + + Get the contract address from Получить адрес контракта от - - - - + + + + Previous Назад - + Choose the asset logo Загрузите логотип монеты - + Browse Выбрать - + Please choose the asset logo Выберите логотип монеты - + Configuration Конфигурация - + All configuration fields will be fetched using the contract address you provided. Все параметры конфигурации будут получены с помощью адреса контракта. - + Name Название - + Enter the name Введите название - + Coingecko ID Coingecko ID - + Enter the Coingecko ID Введите Coingecko ID - + Get the Coingecko ID Получить Coingecko ID - + Active Активно - - + + Preview Превью - + WARNING: Application will restart immidiately to apply the changes! ПРЕДУПРЕЖДЕНИЕ: Приложение будет немедленно перезапущено для применения изменений! - + Asset not found, please go back and make sure Contract Address is correct Токен не найден, убедитесь, что адрес контракта указан верно - + Config Fields Параметры конфигурации - + Fetched Data Полученные данные - + Submit & Restart Отправить и перезапустить @@ -232,52 +211,52 @@ AddressBookAddContactAddressModal - + Create a new address Добавить новый адрес - + Edit address entry Внести изменения в адрес - + Selected wallet: %1 Выбранный кошелек: %1 - + NONE НИ ОДИН - + Enter a name Введите имя - + This key already exists. Этот ключ уже существует. - + Enter the address Введите адрес - + Validate Валидировать - + Cancel Отменить - + Convert Преобразовать @@ -285,113 +264,113 @@ AddressBookEditContactModal - + Edit contact Редактировать контакт - + Contact Name Имя контакта - + Enter a contact name Введите имя - + Address List Список адресов - + Search for an address entry. Поиск адреса. - + Type Тип - + Key Ключ - + Address Адрес - + Actions Действия - - New Address - Новый Адрес + + Add Address + - + Tags Теги - + + + - + Confirm Подтвердить - - + + Cancel Отменить - + The selected address belongs to a disabled coin, you need to enabled it before sending. Вы выбрали адрес отключенной монеты, ее необходимо включить перед отправкой. - + Enable Добавить - + Cannot send to this address Отправка на этот адрес невозможна - + Your balance is empty Баланс отсутствует - + Ok ОК - + Remove address ? Удалить адрес ? - + Yes Да - + No Нет @@ -399,27 +378,27 @@ AddressBookNewContactCategoryModal - + Add a new tag Добавить новый тег - + Enter the tag name Добавить имя тега - + This contact already has this tag У этого контакта уже есть этот тег - + Add Добавить - + Cancel Отменить @@ -427,27 +406,27 @@ AddressBookNewContactModal - + Create a new contact Добавить новый контакт - + Enter the contact name Введите имя контакта - + This contact name already exists. Контакт с таким именем уже существует. - + Confirm Подтвердить - + Cancel Отменить @@ -465,15 +444,23 @@ монету + + AddressBookWalletTypeList + + + %1 is not enabled - You need to enable it before adding an address. Enable it ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + AddressBookWalletTypeListModal - + Select wallet type Выберите тип кошелька - + Search Поиск @@ -497,7 +484,7 @@ AssetPieChart - + Assets Активы @@ -505,32 +492,37 @@ AssetsList - + Asset Актив - + Balance Баланс - + + Fiat Balance + + + + Change 24h Изменение за 24ч - + Price Цена - + Source Источник - + Price provider is: %1 Провайдер цены: %1 @@ -548,19 +540,11 @@ Поддержка - + Privacy Скрыть баланс - - BuyBox - - - Buy - Купить - - CamouflagePasswordModal @@ -614,19 +598,6 @@ Сохранить - - CandleStickChart - - - Loading market data - Загрузка данных - - - - There is no chart data for this pair yet - Нет данных для построения графика для этой торговой пары - - CannotEnableCoinModal @@ -691,122 +662,139 @@ Рыночные данные (цены, графики, и тд.) отмеченные ⓘ иконкой получены от <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> и <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Last reference (Band Oracle):</b><br><a href="%2">%2</a> + + Chart + + + Chart + График + + + + Loading market data + + + + + There is no chart data for this pair yet + Нет данных для построения графика для этой торговой пары + + ClaimRewardsModal - + Failed to prepare to claim rewards Ошибка при создании транзакции для получения вознаграждения - + Claim your %1 reward? TICKER Получить %1 вознаграждение? - + No UTXOs eligible for claiming Нет UTXO, для которых доступны вознаграждения - + Transaction fee is higher than the reward! Комиссия за транзакцию превышает сумму вознаграждений! - - You will receive %1 - AMT TICKER - Вы получите %1 + + You will receive + - + Refresh Обновить - + Read more about KMD active users rewards Подробнее о вознаграждениях для активных пользователей KMD - + UTXO UTXO - + Amount Сумма - + Reward Вознаграждения - + Accruing Start Начало начисления - + Accruing Stop Прекращение начисления - + Time Left Осталось - + Error Ошибка - + Locktime is not set Время блокировки не установлено - + Locktime is less than the threshold Время блокировки меньше минимального - + UTXO height is greater than end of the era Высота UTXO больше, чем конец эпохи - + UTXO amount is less than 10 UTXO меньше 10 - + One hour did not pass yet 1 час еще не прошел - + Transaction is in mempool Транзакция находится в мемпуле - + Unknown problem Неизвестная проблема - + Cancel Отменить - + Confirm Подтвердить @@ -835,16 +823,26 @@ Disable all assets Отключить все ассеты + + + Disable 0 balance assets + + Combo_fiat - + + Language + Язык + + + Fiat Фиат - + Recommended: Рекомендации: @@ -895,74 +893,74 @@ ConfirmTradeModal - + Confirm Exchange Details Подтвердить данные обмена - + This swap request can not be undone and is a final event! Этот запрос на своп не может быть отменен и является окончательным! - + This transaction can take up to 60 mins - DO NOT close this application! Эта транзакция может занять до 60 минут - НЕ закрывайте приложение! - - Total %1 fees: %2 (%3) - Всего %1 комиссии: %2 (%3) + + <b>Total %1 fees:</b> + - + Security configuration Настройки безопасности - + dPoW protected защищено dPoW - + %1 confirmations for incoming %2 transactions %1 подтверждений для входящих %2 транзакций - - + + Read more about dPoW Узнать больше о dPoW - + Use custom protection settings for incoming %1 transactions TICKER Использовать пользовательские настройки защиты для входящих транзакций %1 - + Enable Komodo dPoW security Включить Komodo dPoW - + Required Confirmations Необходимое количество подтверждений - + Warning, this atomic swap is not dPoW protected! Предупреждение, этот атомарный своп не защищен dPoW! - + Cancel Отменить - + Confirm Подтверждение @@ -978,182 +976,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Текущее количество включенных монет не совпадает с конфигурацией. Ваша конфигурация активов будет сброшена. - + Matching Матчинг - + Order Matching Матчинг ордеров - + Matched Сматчен - + Order Matched Ордер сматчен - + Ongoing В процессе - + Swap Ongoing Своп продолжается - + Successful Успешно - + Swap Successful Своп успешно завершен - + Refunding Проводится возврат - + Failed Не завершено - + Swap Failed Своп не был завершен - + Unknown Неизвестно - + Unknown State Статус неизвестен - + Started Начат - + Negotiated Согласован - + Taker fee sent Комиссия тейкера отправлена - + Maker payment received Платеж мейкера получен - + Maker payment wait confirm started Ожидание платежа мейкера - + Maker payment validated and confirmed Платеж мейкера валидирован и подтвержден - + Taker payment sent Платеж тейкера отправлен - + Taker payment spent Платеж тейкера потрачен - + Maker payment spent Платеж мейкера потрачен - + Finished Завершено - + Start failed Не удалось начать - + Negotiate failed Согласование не прошло - + Taker fee validate failed Валидация комиссии тейкера не прошла - + Maker payment transaction failed Платежная транзакция мейкера не прошла - + Maker payment Data send failed Отправка платежных данных мейкера не прошла - + Maker payment wait confirm failed Платежная транзакция мейкера не была подтверждена - + Taker payment validate failed Не прошла валидация платежа тейкера - + Taker payment wait confirm failed Платежная транзакция тейкера не была подтверждена - + Taker payment spend failed Spend платежа тейкера не прошел - + Maker payment wait refund started Ожидание возврата платежа мейкера - + Maker payment refunded Платеж мейкера возвращен - + Maker payment refund failed Возврат платежа мейкера не выполнен @@ -1213,7 +1211,7 @@ DexAppPasswordField - + Type password Введите пароль @@ -1258,7 +1256,7 @@ DexPaginator - + items per page элементов на странице @@ -1284,7 +1282,7 @@ DexSweetComboBox - + Search Поиск @@ -1302,37 +1300,37 @@ Поиск актива - - Add a custom asset to the list - Добавить пользовательский ассет в список - - - + All assets are already enabled! Все ассеты уже добавлены! - + Change assets limit Изменить лимит - + Select all assets Выбрать все ассеты - + You can still enable %1 assets. Selected: %2. Вы можете активировать еще %1 активов. Активно: %2. - + + Add a custom asset + + + + Close Закрыть - + Enable Добавить @@ -1345,27 +1343,27 @@ Дисклеймер и условия использования - + Accept EULA Принять EULA - + Accept Terms and Conditions Принять Terms of Service - + Close Закрыть - + Cancel Отменить - + Confirm Подтвердить @@ -1391,12 +1389,12 @@ FeeInfo - + Minimum fee Минимальная комиссия - + Fees will be calculated Комиссия будет рассчитана @@ -1404,7 +1402,7 @@ General - + %n day(s) %n день @@ -1413,7 +1411,7 @@ - + %nd day @@ -1423,7 +1421,7 @@ - + %nh hours @@ -1433,7 +1431,7 @@ - + %nm minutes @@ -1443,7 +1441,7 @@ - + %ns seconds @@ -1453,7 +1451,7 @@ - + %nms milliseconds @@ -1463,66 +1461,91 @@ - + - - - + + <b>Taker tx fee:</b> + + + + + <b>Dex tx fee:</b> + + + + + <b>Dex fee:</b> + + + + + <b>Maker tx fee:</b> + + + + + %1 %2 %3 (%4) + + + + Trading Fee Торговая комиссия - + Minimum Trading Amount Минимальный объем сделки - + Wallet %1 already exists WALLETNAME Кошелек %1 уже существует - + %1 balance is lower than the fees amount: %2 %3 %1 баланс менее чем размер комиссий: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Торгуемый (после комиссий) баланс %1 - меньше минимальной суммы сделки - + Please fill the price field Пожалуйста, укажите цену - + Please fill the volume field Пожалуйста, укажите сумму - - + + %1 volume is lower than minimum trade amount Сумма %1 меньше минимальной суммы сделки - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - + Unknown Error Неизвестная ошибка @@ -1530,50 +1553,41 @@ Header - + You get Вы получите - + You send Вы отправите - + Fiat Price фиатная цена - + CEX rate Цена на CEX - - + Price Цена - + Quantity Количество - + Total Всего - - History - - - Recent Swaps - Последние свопы - - ImportWallet @@ -1582,94 +1596,92 @@ Не удалось импортировать кошелек - + Import wallet - Setup Импорт кошелька - Введите данные - + Import wallet - Choose password Импорт кошелька - Задайте пароль - + Wallet Name Название кошелька - + Enter seed Введите сид-фразу - - BIP39 seed validation failed, try again or select 'Allow custom seed' - BIP39 валидация сид-фразы неуспешна, пожалуйста попробуйте снова или выберите 'Разрешить пользовательский формат сид-фразы' + + Your seed is not BIP39 compliant. +Try again or select 'Allow custom seed' to continue. + - + + + i understand + + + + + Ok + + + + Allow custom seed Разрешить пользовательский формат сид-фразы - + <strong>Allow custom seed</strong> <strong>Разрешить произвольный seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. Пользовательские seed фразы могут быть менее безопасными и подверженными взлому, в сравнении с фразой сгенерированной в соответствии со стандартом BIP39 или приватным ключом (WIF).<br><br>Для подтверждения того, что вы понимаете что делаете введите <strong>'I understand'</strong> в поле ниже. - - + I understand - - Enable - Добавить - - - + Next Далее - + Enter the same password to confirm Введите тот же пароль для подтверждения - + Continue Продолжить - - Languages - - - Language - Язык - - LinksRow - + Join our Discord server Присоединяйтесь к нашему Discord серверу - + Follow us on Twitter Подписывайтесь на наш Twitter - + Go to Support Guides Форум и база знаний @@ -1681,16 +1693,21 @@ Funds are recoverable Средства могут быть восстановлены + + + Best Orders + Лучшие ордеры + ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> - + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1729,17 +1746,17 @@ Login - + Incorrect Password Неправильный пароль - - Connect + + Log In - + Cancel Отменить @@ -1747,127 +1764,129 @@ Main - + Segwit Segwit - + Confirmation Подтверждение - + Do you want to send your %1 funds to %2 wallet first? Хотели бы вы сначала отправить ваши %1 средства на кошелек %2? - + Success Успех - + Your transaction is send, may take some time to arrive Ваша транзакция была отправлена, получение может занять какое-то время - - Wallet Balance - Баланс кошелька - - - + Price Цена - - Change 24h - Изменение за 24ч + + Change 24hr + + + + + Porfolio + - - Portfolio % - % портфолио + + Contract Address + - + Send Отправить - + Enable %1 ? Активировать %1 ? - + Yes Да - + No Нет - + Receive Получить - + Swap Обменять - + + is wallet only + + + + Rewards Награды - + Faucet Фаусет - - Loading market data - Загрузка рыночных данных - - - - There is no chart data for this ticker yet - Для данного актива пока еще нет графиков данных + + + + Public Key + - - Loading - Загрузка + + Copied to Clipboard + Скопировано в буфер обмена - - Scanning blocks for TX History... - Сканирование блокчейна для получения данных о транзакциях... + + Loading market data + Загрузка рыночных данных - - Syncing TX History... - Синхронизация истории транзакций... + + There is no chart data for this ticker yet + Для данного актива пока еще нет графиков данных - + No transactions Нет транзакций - + Refreshing Обновление данных - + Fetching transactions Получение данных о транзакциях @@ -1877,25 +1896,52 @@ + + Trading Information + Торговая информация + + + + Exchange Rates + Курс обмена + + + Orders Ордеры + History История + + + Place Order + Разместить ордер + + + + Order Selected + Ордер выбран + + + + START SWAP + НАЧАТЬ ОБМЕН + MarketModeSelector - + Sell Продать - + Buy Купить @@ -1947,164 +1993,161 @@ NewUpdateModal - - Searching new updates... - Ищем обновление... - - - - Please wait while the application is finding a new update... You can close this modal if you want. - Пожалуйста подождите пока приложение ищет обновление... Вы можете закрыть это окно если желаете. - - - - Already updated - Обновлено + + + + Searching new updates + - - %1 is already up-to-date ! - %1 уже последней версии! + + Fetching... + - + + + + Close Закрыть - - New update detected ! - Обнаружено обновление ! + + Could not check new updates because of the following reason: +%1 + - - Do you want to update %1 from %2 to %3 ? - Хотели бы вы обновить %1 с %2 на %3 ? + + New version found + - - Download - Скачать + + %1 %2 is available ! + - - Remind me later - Напомнить мне позже + + Your application is updated. + - - Download in progress... - В процессе скачивания... + + Download + Скачать + + + NewWallet - - Update downloaded - Новая версия скачана + + Wrong word, please check again + Неверное слово. Пожалуйста, попробуйте еще раз - - Update has been successfully downloaded. Do you want to restart the application now ? - Новая версия была успешно скачана. Хотели бы вы перезагрузить приложение сейчас? + + st + - - Restart now - Перезагрузить сейчас + + nd + - - Restart later - Перезагрузить потом + + rd + - - - NewWallet - - Wrong word, please check again - Неверное слово. Пожалуйста, попробуйте еще раз + + th + - + Failed to create a wallet Ошибка при создании кошелька - + New Wallet Новый кошелек - + Confirm Seed Подтвердить seed ключ - + Choose Password Задайте пароль - + Important: Back up your seed phrase before proceeding! Важно: убедитесь, что вы сохранили ваш seed ключ, прежде чем продолжить! - + We recommend storing it offline. Мы рекумендуем хранить его офлайн. - + Generated Seed Сгенерированный seed ключ - + Seed phrase Seed фраза - + copied to clipboard скопировано в буфер - + Next Далее - + Let's double check your seed phrase Давайте перепроверим ваш seed ключ - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Ваш seed ключ важен, и поэтому мы хотим убедиться, что вы его сохранили. Мы зададим вам три разных вопроса о вашем seed ключе, чтобы убедиться, что вы сможете легко восстановить свой кошелек, когда захотите. - - - Enter the %n. word - - Введите %nе слово - Введите %nе слово - Введите %nе слово - + + + Enter the + - + + word + + + + Check Проверить - + Enter the same password to confirm Введите тот же пароль для подтверждения - + Continue Продолжить @@ -2225,60 +2268,60 @@ Пожалуйста, проверьте ваше интернет-соединение (например, служба VPN или брандмауэр могут блокировать подключение). - + Failed to enable %1 TICKER Не получается включить %1 - + Endpoint not reachable Эндпоинт не доступен - + Could not reach to endpoint Не удалось подключиться - + Mismatch at %1 custom asset configuration TICKER Несоответствие в конфигурации актива %1 - + Application needs to be restarted for %1 custom asset. TICKER Необходимо перезапустить приложение для %1. - + Batch %1 failed. Reason: %2 Группа %1 .не удалась. Причина: %2 - + Show Показать - + Restart Перезапустить - + Quit Выйти - + There isn't any notification Нет новых уведомлений - + Mark all as read Отметить все как прочитанные @@ -2286,37 +2329,37 @@ OrderForm - + Price Цена - + Volume Объем - + Amount to sell Сумма для продажи - + Amount to receive Получаемая сумма - + Min volume: Мин. объем: - + How to use the pro-view slider ? Как использовать pro-view слайдер? - + This slider is used to setup the order requirements you need. Left slider: Sets the minimum amount required to process a trade. Right slider: Sets the volume you want to trade. @@ -2325,7 +2368,7 @@ Right slider: Sets the volume you want to trade. Правый слайдер: Задает объем который вы хотите обменять. - + Use custom minimum trade amount Задать минимальный объем сделки @@ -2333,7 +2376,7 @@ Right slider: Sets the volume you want to trade. OrderLine - + Funds are recoverable Средства могут быть восстановлены @@ -2341,7 +2384,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found Не найдено результатов @@ -2349,97 +2392,103 @@ Right slider: Sets the volume you want to trade. OrderModal - + Swap Details Детали свопа - + Order Details Детали ордера - + + Order Type + + + + Maker Order Мейкер ордер - + Taker Order Тейкер ордер - + Refund State Статус рефанда - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Обмен не был завершен, но процесс автоматического рефанда уже начался. Пожалуйста, подождите, оставляя приложение открытым, пока вы не получите свои средства - + Date Дата - + ID ID - + Maker Payment Sent ID ID отправки платежа мейкера - + Maker Payment Spent ID ID spend платежа мейкера - + Taker Payment Spent ID ID spend платежа тейкера - + Taker Payment Sent ID ID отправки платежа тейкера - + Error ID ID ошибки - + + Error Log Лог ошибки - + Close Закрыть - + Cancel Order Отменить ордер - + Recover Funds Восстановить средства - + Refunding... Возмещается... - + View on Explorer Показать в эксплорере @@ -2447,64 +2496,62 @@ Right slider: Sets the volume you want to trade. OrderRemovedModal - + Selected Order Removed Выбранный ордер удален - - The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. Please select a new order. - Выбранный ордер больше не существует. Возможно его отменили или заполнили. Пожалуйста выберите другой ордер. + + The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. +Please select a new order. + - + OK - - Orders - - - Orders - Ордеры - - OrdersPage - + From От - + To Кому - + Export CSV Скачать CSV - - + + Filter Фильтр - + Date Дата - + Apply Filter Применить фильтр - + + Cancel All + + + + Please choose the CSV export name and location Выберите название и расположение загружаемого файла @@ -2512,7 +2559,7 @@ Right slider: Sets the volume you want to trade. Pagination - + items per page элементов на странице @@ -2580,66 +2627,66 @@ Right slider: Sets the volume you want to trade. Portfolio - + + ADD ASSET + + + + Search asset Поиск актива - + Show only coins with balance Показывать только монеты с балансом - + (%1/%2) - + Portfolio Портфолио - - - Add asset - Добавить крипто актив - PriceLine - + Set swap price for evaluation Установите цену для оценки - + Exchange rate Обменный курс - + Selected Выбрано - + Expensive Невыгодный курс - + Expedient Выгодный курс - + %1 compared to CEX PRICE_DIFF% %1 по сравнению с CEX - + CEXchange rate CEXchange Цена @@ -2647,37 +2694,37 @@ Right slider: Sets the volume you want to trade. PriceLineSimplified - + Set swap price for evaluation Установите цену для оценки - + Exchange rate Обменный курс - + Selected Выбрано - + CEXchange rate CEXchange Цена - + Expensive Невыгодный курс - + Expedient Выгодный курс - + %1 compared to CEX PRICE_DIFF% %1 по сравнению с CEX @@ -2686,64 +2733,22 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен + + + QObject - - Chart - График - - - - Trading Information - Торговая информация - - - - Exchange Rates - Курс обмена - - - - Orders - Ордеры - - - - History - История - - - - Order Book - Ордербук - - - - Best Orders - Лучшие ордеры - - - - Place Order - Разместить ордер - - - - START SWAP - НАЧАТЬ ОБМЕН - - - - Order Selected - Ордер выбран + + Cannot reach the endpoint: + @@ -2755,22 +2760,17 @@ Right slider: Sets the volume you want to trade. - Only send %1 to this address + Only send %1 to this address: TICKER - Отправить %1 на данный адресс - - - - %1 address - %1 адрес + - copied to clipboard - скопировано в буфер + copied to clipboard. + - + Close Закрыть @@ -2778,90 +2778,70 @@ Right slider: Sets the volume you want to trade. RecoverSeedModal - - + + View seed and private keys Показать seed-фразу и приватные ключи - + Please enter your password to view the seed. Введите пароль для отображения seed ключа. - - Wrong Password - Неправильный пароль - - - - Cancel - Отменить - - - - Seed phrase - Seed фраза + + Seed + - - - - copied to clipboard - скопировано в буфер + + Backup Seed + - - RPC password - RPC пароль + + Public Address copied to clipboard + - - phrase key copied to clipboard - ключевая фраза скопирована в буфер + + Cancel + Отменить - - Backup seed - Сделать бекап seed-фразы + + + copied to clipboard + скопировано в буфер - + + RPC Password RPC Пароль - + Search a coin. Поиск актива. - - %1 address - %1 адрес - - - - %1 private key - %1 приватный ключ - - - + Public Address Публичный адрес - - Private Key - Приватный ключ + + Private Key copied to clipboard + - - Close - Закрыть + + Private Key + Приватный ключ - + View Показать @@ -2905,19 +2885,11 @@ Right slider: Sets the volume you want to trade. SearchField - + Search Поиск - - SellBox - - - Sell - Продать - - SendModal @@ -2926,124 +2898,144 @@ Right slider: Sets the volume you want to trade. Ошибка отправки - + Failed to Send Отправка не прошла - + Prepare to send Подготовить к отправке - + Address of the recipient Адрес получателя - + Amount to send Сумма для отправки - - Max amount - Максимальное количество - - - + Gas price Цена газа - + Recipient's address Адрес получателя - - Address Book - Адресная книга - - - + The address has to be mixed case. Адрес должен быть написан в смешанном регистре. - + Fix Фикс - + + MAX + МАКС + + + + Fiat amount: Unavailable + + + + + Fiat amount: %1 + + + + + %1 amount: %2 + + + + + Specify in Fiat + + + + + Specify in Crypto + + + + Enable Custom Fees Включить настройку комиссий - + Only use custom fees if you know what you are doing! Используйте настраиваемые комиссии только если знаете, что делаете! - + Enter the custom fee Введите комиссию сети - + Gas Limit Gas лимит - + Custom Fee can't be higher than the amount Комиссия не может больше общей суммы транзакции - + Not enough funds. Недостаточно средств. - + You have %1 AMT TICKER У вас %1 - + Close Закрыть - + Prepare Подготовка - - + + Send Отправить - + Amount Сумма - + Fees Комиссия - + Date Дата - + Back Назад @@ -3051,43 +3043,43 @@ Right slider: Sets the volume you want to trade. SendModalContactList - + Select a contact with an %1 address Выберите контакт с %1 адресом - + Search for contacts... Поиск по контактам... - + %1 addresses %1 адреса - + 1 address 1 адрес - - + + Back Назад - + Choose an %1 address of %2 Выбрать %1 адрес из %2 - + Name Название - + Address Адрес @@ -3095,42 +3087,42 @@ Right slider: Sets the volume you want to trade. SendResult - + Transaction Complete! Транзакция завершена! - + Recipient's address Адрес получателя - + Amount Общая сумма транзакции - + Fees Комиссия сети - + Date Дата - + Transaction Hash Хэш транзакции - + Close Закрыть - + View on Explorer Смотреть в эксплорере @@ -3138,175 +3130,174 @@ Right slider: Sets the volume you want to trade. SettingModal - + Confirm Logout Подтвердите выход - + Are you sure you want to log out? Вы действительно хотите выйти? - + Yes Да - - + + Cancel Отмена - + Settings Настройки - - + Language Язык - + User Interface Интерфейс - + Security Приватность - + General Общие - + About & Version О программе - + Enable Desktop Notifications Включить уведомления для рабочего стола - + Maximum number of enabled coins Макс. количество активированных монет - + Logs Логи - + Open Folder Открыть папку с логами - - + + Reset wallet configuration Сбросить конфигурацию кошелька - + This will restart your wallet with default settings Эта опция перезапустит ваш кошелек с настройками по умолчанию - + Confirm Подтвердить - + Changing theme to %1 Изменить тему на %1 - + + Application Version + + + + + copied to clipboard + скопировано в буфер + + + Reset Сбросить - + Current Font Текущий шрифт - + Current font changed to %1. Текущий шрифт изменен на %1. - + Theme Тема - + Ask system's password before sending coins ? (2FA) Спрашивать системный пароль перед отправкой монет? (2FA) - + Application version Версия приложения - - DEX Version - Версия DEX - - - - DEX Version copied to clipboard. - Версия DEX скопирована в буфер обмена. - - - + MM2 version Версия MM2 - + MM2 Version Версия MM2 - + MM2 Version copied to clipboard. Версия MM2 скопирована в буфер обмена. - + Qt version Версия Qt - + Qt Version Версия Qt - + Qt Version copied to clipboard. Версия Qt скопирована в буфер обмена. - + Search Update Проверить на обновления - + Logout Выход @@ -3316,28 +3307,28 @@ Right slider: Sets the volume you want to trade. - + View seed and private keys Показать seed-фразу и приватные ключи - - + + Show Показать - + Setup Camouflage Password Установить камуфляжный пароль - + Open Установить - + Disclaimer and ToS Дисклеймер и Условия Использования @@ -3345,62 +3336,62 @@ Right slider: Sets the volume you want to trade. Settings - + Fiat Фиат - + Recommended: Рекомендации: - + Enable Desktop Notifications Включить уведомления для рабочего стола - + Use QtTextRendering Or NativeTextRendering Использовать QtTextRendering или NativeTextRendering - + Open Logs Folder Открыть папку с логами - + View seed and private keys Показать seed-фразу и приватные ключи - + Disclaimer and ToS Дисклеймер и TOS - + Setup Camouflage Password Установить камуфляжный пароль - + Reset wallet configuration Сбросить конфигурацию кошелька - + Delete Wallet Удалить кошелек - + Log out Выйти - + mm2 version версия MM2 @@ -3434,32 +3425,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token Токен - + Available Quantity Доступное количество - + Available Quantity (in %1) Доступное количество (в %1) - + Fiat Volume Фиатный объем - + CEX Rate CEX цена - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 не активирован -Вы хотите активировать этот %2 актив чтобы видеть лучшие ордеры для него ?<br><a href='#'>Да</a> - <a href='#no'>Нет</a> @@ -3467,22 +3458,22 @@ Right slider: Sets the volume you want to trade. SubCoinSelector - + Token - + Balance Баланс - + Balance Fiat Баланс в фиате - + No Selectable coin. Нет монет для выбора. @@ -3615,171 +3606,155 @@ Right slider: Sets the volume you want to trade. - Support - - - Update available - Доступно обновление - - - - Up to date - Последняя версия - - - - Changelog - Журнал изменений - + SupportModal - - Open Logs Folder - Открыть папку с логами - - - + Frequently Asked Questions - Часто задаваемые вопросы + Часто задаваемые вопросы - + Do you store my private keys? - Вы храните мои личные ключи? + Вы храните мои личные ключи? - + No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets. - Нет! %1 не хранит персональную информацию, включая приватные ключи, seed фразы, или PIN. Эти данные хранятся только у вас и никогда не покидают ваше устройство. Ваши активы всегда в вашем и только вашем распоряжении. + Нет! %1 не хранит персональную информацию, включая приватные ключи, seed фразы, или PIN. Эти данные хранятся только у вас и никогда не покидают ваше устройство. Ваши активы всегда в вашем и только вашем распоряжении. - + How is trading on %1 different from trading on other DEXs? - Как торговля на %1 отличается от других торговли на других децентрализованных биржах? + Как торговля на %1 отличается от других торговли на других децентрализованных биржах? - - Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. + + Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. %1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders. - Другие Децентрализованные биржи обычно позволяют торговать активами которые базируются лишь на единственном блокчейне, используют прокси - токены и разрешают размещать только один ордер одними и теми же средств. - -%1 же позволяет вам торговать нативно через две разные блокчейн сети без прокси токенов. Также вы можете размещать несколько ордеов одним и тем же балансом. Например вы можете продать 0.1 BTC за KMD, QTUM или VRSC – первый сматченный ордер автоматически отменит остальные. + - + + How long does each atomic swap take? + Сколько времени занимает каждый атомарный своп? + + + Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarization</a>. - Несколько факторов определяют время завершения каждого Атомарного Свопа. Время блока на каждой из торгуемых сетей (Bitcoin обычно самый медленный) В добавок каждый юзер может кастомизировать опции защиты. Например в пред-настройках Свопа, (вы можете установить %1 так чтобы протокол считал транзакцию KMD финальной как только она получит всего 3 подтверждения что уменьшает время Атомарного Свопа в сравнении с ожиданием <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">нотаризации</a>. + Несколько факторов определяют время завершения каждого Атомарного Свопа. Время блока на каждой из торгуемых сетей (Bitcoin обычно самый медленный) В добавок каждый юзер может кастомизировать опции защиты. Например в пред-настройках Свопа, (вы можете установить %1 так чтобы протокол считал транзакцию KMD финальной как только она получит всего 3 подтверждения что уменьшает время Атомарного Свопа в сравнении с ожиданием <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">нотаризации</a>. + + + + Do I need to be online for the duration of the swap? + Необходимо ли мне быть в сети во время свопа? - + Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. + The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. + If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. + When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! + For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1. - Да. Вы должны оставаться подключенным к Интернету и иметь работающее приложение для успешного завершения каждого атомарного свопа (очень короткие перерывы в подключении обычно допустимы). В противном случае существует риск отмены сделки, если вы - мейкер, и риск потери средств, если вы - тейкер. -Протокол атомарных свопов требует, чтобы оба участника обмена оставались в сети для наблюдения за блокчейнами, чтобы процесс оставался атомарным. -Если вы перейдете в оффлайн режим, ваши ордеры не будут доступны, и все обмены в процессе закончатся неуспешно, что приведет к потенциальной потере комиссий за торговлю / транзакции, а также к ожиданию отмены свопа и возврата средств. Это также может негативно повлиять на рейтинг репутации вашего кошелька для будущих сделок. -Когда вы вернетесь в онлайн, ваши ордеры снова начнут транслироваться по цене, которую вы установили до выхода в офлайн. Если тем временем произошло значительное движение цены, вы можете непреднамеренно предложить кому-то сделку! -По этой причине мы рекомендуем отменять заказы перед закрытием%1 или проверять и корректировать свои цены при перезапуске%1. + - - Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - Да! %1 предоставляет саппорт через <a href="%2">%1 Discord сервер</a>. Команда и сообщество проекта всегда рады помочь! + + How are the fees on %1 calculated? + Как подсчитывается %1 комиссия? - - %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. - %1 доступен для Android и iOS мобильных устройв <a href="%2">, и для операционных систем Windows, Mac и Linux</a> на PC. + + There are two fee categories to consider when trading on %1. + +1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. + +2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. + +Network fees can vary greatly depending on your selected trading pair. + - + + Do you provide user support? + Предоставляете ли вы поддержку пользователей? + + + + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! + Да! %1 предоставляет саппорт через <a href="%2">%1 Discord сервер</a>. Команда и сообщество проекта всегда рады помочь! + + + Who is behind %1? - Кто создал %1? + Кто создал %1? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. - %1 разрабатывается командой Komodo. Komodo один из наиболее известных блокчейн проектов который работает над такими инновационными решениями как Атомарные Свопы, "Отложенный" PoW, а также над совместимой мульти-чейн архитектурой. + %1 разрабатывается командой Komodo. Komodo один из наиболее известных блокчейн проектов который работает над такими инновационными решениями как Атомарные Свопы, "Отложенный" PoW, а также над совместимой мульти-чейн архитектурой. - + Is it possible to develop my own white-label exchange on %1? - Возможно ли разработать децентрализованную биржу с моим брендом на %1? + Возможно ли разработать децентрализованную биржу с моим брендом на %1? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! - Обязательно! Вы можете прочитать нашу документацию для разработчиков для более детального ревью или же связаться с нашей командой по поводу партнерства. Есть очень специфичный технический вопрос? %1 наше комьюнити разработчиков всегда готово помочь! + Обязательно! Вы можете прочитать нашу документацию для разработчиков для более детального ревью или же связаться с нашей командой по поводу партнерства. Есть очень специфичный технический вопрос? %1 наше комьюнити разработчиков всегда готово помочь! - + Which devices can I use %1 on? - На каких устройствах я могу использовать %1 ? + На каких устройствах я могу использовать %1 ? - - Compliance Info - Комплаенс информация - - - - Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. - В связи с нормативными и правовыми обстоятельствами граждане определенных юрисдикций, включая, помимо прочего, Соединенные Штаты Америки, Канаду, Гонконг, Израиль, Сингапур, Судан, Австрию, Иран и любые другие государства, страны или другие юрисдикции, на которые введено эмбарго. Соединенных Штатов Америки или Европейского Союза не могут использовать это приложение. - - - - How long does each atomic swap take? - Сколько времени занимает каждый атомарный своп? + + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. + %1 доступен для Android и iOS мобильных устройв <a href="%2">, и для операционных систем Windows, Mac и Linux</a> на PC. - - Do I need to be online for the duration of the swap? - Необходимо ли мне быть в сети во время свопа? + + Compliance Info + Комплаенс информация - - How are the fees on %1 calculated? - Как подсчитывается %1 комиссия? + + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. + В связи с нормативными и правовыми обстоятельствами граждане определенных юрисдикций, включая, помимо прочего, Соединенные Штаты Америки, Канаду, Гонконг, Израиль, Сингапур, Судан, Австрию, Иран и любые другие государства, страны или другие юрисдикции, на которые введено эмбарго. Соединенных Штатов Америки или Европейского Союза не могут использовать это приложение. - - There are two fee categories to consider when trading on %1. - -1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. -2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. - -Network fees can vary greatly depending on your selected trading pair. - Две категории комиссий каждый трейдер должен иметь ввиду когда использует %1. - -1. %1 комиссия это примерно 0.13% (1/777 от объема торга но не менее чем 0.0001) в качестве торговой комиссия за тейкер ордеры, а мейкер ордеры в данном случае комиссию не платят. -2. Но и мейкер и тейкер в любом случае должны иметь возможность оплатить комиссиии сети за обычные транзакции во время проведения Атомарного Свопа. - -Комиссии сети могут очень сильно варьироваться в зависимости от выбранной торговой пары. + + Changelog + Журнал изменений - - Do you provide user support? - Предоставляете ли вы поддержку пользователей? + + Open Logs Folder + Открыть папку с логами SwapProgress - + act SHORT FOR ACTUAL TIME фактич - + est SHORT FOR ESTIMATED прибл - + Progress details Прогресс @@ -3787,7 +3762,7 @@ Network fees can vary greatly depending on your selected trading pair. SweetDexComboBox - + Search Поиск @@ -3795,12 +3770,12 @@ Network fees can vary greatly depending on your selected trading pair. TextAreaWithTitle - + Save Сохранить - + Edit Редактировать @@ -3808,12 +3783,12 @@ Network fees can vary greatly depending on your selected trading pair. TextEditWithTitle - + Swap ID ID обмена - + copied to clipboard скопировано в буфер @@ -3837,213 +3812,275 @@ Network fees can vary greatly depending on your selected trading pair. Trade - + Swap Обменять - + Instant trading with best orders Быстрая торговля с лучшими ордерами - + From От - + Enter an amount Введите количество - + MAX МАКС - + To Получатель - + Pick an order Выберите ордер - + Price Цена - + Better price found: %1. Updating forms. Найдена цена лучше: %1.Обновляю форму. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Лучшая цена (%1) была обнаружена но количество (%2) меньше чем в вашем текущем ордере (%3).Нажмите чтобы обновить выбранный ордер. - + Reset form. Сбросить форму. - + + You have no tradable assets. + + + + %1 - + Tradable: Доступно: - + Min: %1 Мин: %1 - + Pick a coin Выберите монету - + SWAP NOW - + Failed to place the order Не удалось разместить ордер - + Placed the order Ордер размещен - + Entered amount must be superior than 0. Введенная сумма должна быть больше 0. - + You must select an order. Вы должны выбрать ордер. - + Entered amount is below the minimum required by this order: %1 Введнная сумма меньше минимальной для этого ордера: %1 - - + + %1 needs to be enabled in order to use %2 %1 должен быть активным для использования %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions нужно пополнить баланс %1 для оплаты газа %2 транзакций - - - Search - Поиск + + %1 balance does not have enough funds to pay the gas of %2 transactions + - + No buy orders found for %1. Не найдено ордеров на покупку дл] %1. - + You can check later or try to sell a different coin. Вы можете попробовать позже или попробовать продать другой актив. - + + Calculating fee estimate... + + + + Total %1 fees: Всего %1 комиссий: - + %2 (%3) + + TradeViewHeader + + + Pro View Settings + + + + + Display Settings + + + + + Chart + График + + + + Ticker Selectors + + + + + Trading Information + Торговая информация + + + + Order Book + Ордербук + + + + Best Orders + Лучшие ордеры + + + + Place Order + Разместить ордер + + TransactionDetailsModal - + Transaction Details Детали транзакции - + Amount Сумма - + Fees Комиссия сети - + Date Дата - + Unconfirmed Не подтверждена - + Transaction Hash Хэш транзакции - + + Transactions + + + + + txid copied to clipboard + + + + Confirmations Подтверждения - + Block Height Блок - + From От - + To Получатель - + Notes Заметки - + Close Закрыть - + View on Explorer Смотреть в эксплорере @@ -4051,22 +4088,22 @@ Network fees can vary greatly depending on your selected trading pair. Transactions - + Received Получено - + Sent Отправлено - + fees комиссии - + Unconfirmed Не подтверждена @@ -4079,6 +4116,14 @@ Network fees can vary greatly depending on your selected trading pair. Скачаный архив с обновлением поврежден ! + + Vertical + + + Order Book + Ордербук + + WalletNameField @@ -4111,55 +4156,65 @@ Network fees can vary greatly depending on your selected trading pair. Импортировать кошелек - + + Search your wallets... + + + + My Wallets Мои кошельки - - + + No wallets found! + + + + + Delete Удалить - + Enter password to confirm deletion of Введите пароль чтобы подтвердить удаление - + wallet кошелек - + Type password Введите пароль - + Cancel Отменить - - + + Wallet status Статус кошелька - + wallet deleted successfully кошелек успешно удален - - + + Ok Ок - + wallet password is incorrect введен неправильный пароль @@ -4188,13 +4243,13 @@ Network fees can vary greatly depending on your selected trading pair. - Invalid checksum for %1. Click on the convert button to turn it into a mixed case address - Невалидная хэш-сумма для %1. Нажмите на кнопку конвертации в mixed case адрес + Invalid checksum for %1. Click the button to convert to mixed case address. + - Legacy address used for %1, click on the convert button to convert it to a Cashaddress. - Введен legacy адрес для %1, нажмите на кнопку для конвертации в Cashaddress формат. + Legacy address used for %1. Click the button to convert to a Cashaddress. + diff --git a/atomic_defi_design/assets/languages/atomic_defi_tr.ts b/atomic_defi_design/assets/languages/atomic_defi_tr.ts index 6f1d12fd3..0fb96a72f 100644 --- a/atomic_defi_design/assets/languages/atomic_defi_tr.ts +++ b/atomic_defi_design/assets/languages/atomic_defi_tr.ts @@ -2,169 +2,150 @@ - QPlatformTheme - - &Yes - Yes - - - &No - No - - - Cancel - Cancel - AddCustomCoinModal - + Choose the asset type Varlık türünü seçin - - Type - Tip - - - + Cancel İptal - - - + + + Next İleri - - + Enter the contract address Kontrat adresini girin - + Choose the asset ticker Varlık kodunu girin - + Ticker Varlık Kodu - + Enter the ticker Varlık kodunu girin - - Contract Address - Kontrat Adresi - - - + Get the contract address from Kontrat adresini şuradan alın - + + Contract address + + + + Get the contract address from Kontrat adresini şuradan alın - - - - + + + + Previous Geri - + Choose the asset logo Varlık logosunu seçin - + Browse Göz at - + Please choose the asset logo Lütfen varlık logosunu seçin - + Configuration Konfigürasyon - + All configuration fields will be fetched using the contract address you provided. Tüm konfigürasyon bilgileri verdiğiniz kontrat adresinden edinilip doldurulacak. - + Name İsim - + Enter the name İsmi girin - + Coingecko ID Coingecko ID - + Enter the Coingecko ID Coingecko ID'sini girin - + Get the Coingecko ID Coingecko ID'si al - + Active Aktif - - + + Preview Görüntüle - + WARNING: Application will restart immidiately to apply the changes! DİKKAT: Program değişiklikleri uygulamak için yeniden başlatılacak! - + Asset not found, please go back and make sure Contract Address is correct Varlık bulunamadı, lütfen geri dönün ve Kontrat Adresi'nin doğruluğundan emin olun - + Config Fields Konfig Alanları - + Fetched Data Çekilen Veri - + Submit & Restart Yolla ve Yeniden Başlat @@ -230,52 +211,52 @@ AddressBookAddContactAddressModal - + Create a new address Yeni bir adres oluştur - + Edit address entry Adres girdisini düzenleyin - + Selected wallet: %1 - + NONE - + Enter a name Bir ad girin - + This key already exists. Bu anahtar zaten mevcut. - + Enter the address Adresi girin - + Validate Geçerle - + Cancel İptal - + Convert @@ -283,113 +264,113 @@ AddressBookEditContactModal - + Edit contact Kişiyi düzenle - + Contact Name Kişi Adı - + Enter a contact name Bir kişi adı girin - + Address List Adres Listesi - + Search for an address entry. Bir adres girdisi arayın. - + Type Tür - + Key Anahtar - + Address Adres - + Actions Eylemler - - New Address - Yeni Adres + + Add Address + - + Tags Etiketler - + + + - + Confirm Onayla - - + + Cancel İptal - + The selected address belongs to a disabled coin, you need to enabled it before sending. Seçilen adres devre dışı bırakılmış bir koine aittir, göndermeden önce etkinleştirmeniz gerekir. - + Enable Etkinleştir - + Cannot send to this address Bu adrese gönderilemiyor - + Your balance is empty Bakiyeniz boş - + Ok Tamam - + Remove address ? - + Yes Evet - + No Hayır @@ -397,27 +378,27 @@ AddressBookNewContactCategoryModal - + Add a new tag Yeni etiket ekle - + Enter the tag name Etiket adı girin - + This contact already has this tag Bu kişi zaten bu etikete sahip - + Add Ekle - + Cancel İptal @@ -425,27 +406,27 @@ AddressBookNewContactModal - + Create a new contact Yeni bir kişi ekle - + Enter the contact name Kişi adını girin - + This contact name already exists. Bu kişi adı zaten mevcut. - + Confirm Onayla - + Cancel İptal @@ -463,15 +444,23 @@ koin seçin + + AddressBookWalletTypeList + + + %1 is not enabled - You need to enable it before adding an address. Enable it ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> + + + AddressBookWalletTypeListModal - + Select wallet type Cüzdan türünü seçin - + Search Ara @@ -495,7 +484,7 @@ AssetPieChart - + Assets Varlıklar @@ -503,32 +492,37 @@ AssetsList - + Asset Varlık - + Balance Bakiye - + + Fiat Balance + + + + Change 24h Değişim 24sa - + Price Fiyat - + Source - + Price provider is: %1 @@ -546,19 +540,11 @@ Destek - + Privacy Gizlilik - - BuyBox - - - Buy - Satın Al - - CamouflagePasswordModal @@ -612,19 +598,6 @@ Kaydet - - CandleStickChart - - - Loading market data - Borsa bilgisi yükleniyor - - - - There is no chart data for this pair yet - Bu parite için henüz grafik verisi yok - - CannotEnableCoinModal @@ -689,122 +662,139 @@ ⓘ simgesiyle işaretlenen piyasa verileri (fiyatlar, grafikler vb.) üçüncü taraf kaynaklardan alınmıştır. .<br><br>Veriler kaynakları: <a href="https://bandprotocol.com/">Band Decentralized Oracle</a> ve <a href="https://coingecko.com">CoinGecko</a>.<br><br><b>Oracle Supported Pairs:</b><br>%1<br><br><b>Son referans (Band Oracle):</b><br><a href="%2">%2</a> + + Chart + + + Chart + Grafik + + + + Loading market data + + + + + There is no chart data for this pair yet + Bu parite için henüz grafik verisi yok + + ClaimRewardsModal - + Failed to prepare to claim rewards Ödül alımı hazırlığı başarısız sonuçlandı - + Claim your %1 reward? TICKER %1 ödülünüzü alacak mısınız? - + No UTXOs eligible for claiming Ödül alımı için uygun UTXO yok - - You will receive %1 - AMT TICKER - %1 alacaksınız - - - + Transaction fee is higher than the reward! İşlem ücreti ödülden daha yüksek! - + + You will receive + + + + Refresh Yenile - + Read more about KMD active users rewards KMD aktif kullanıcı ödülleri hakkında daha fazla bilgi - + UTXO UTXO - + Amount Miktar - + Reward Ödül - + Accruing Start Tahakkuk Başlangıcı - + Accruing Stop Tahakkuk Bitişi - + Time Left Kalan Zaman - + Error Hata - + Locktime is not set Kilit süresi ayarlanmamış - + Locktime is less than the threshold Kilit süresi limitin altında - + UTXO height is greater than end of the era UTXO uzunluğu dönem sonundan daha büyük - + UTXO amount is less than 10 UTXO miktarı 10'dan az - + One hour did not pass yet Henüz bir saat geçmedi - + Transaction is in mempool İşlem mempool'da - + Unknown problem Bilinmeyen hata - + Cancel İptal - + Confirm Onayla @@ -833,16 +823,26 @@ Disable all assets Tüm varlıkları etkisizleştir + + + Disable 0 balance assets + + Combo_fiat - + + Language + Dil + + + Fiat Döviz - + Recommended: Önerilen: @@ -893,74 +893,74 @@ ConfirmTradeModal - + Confirm Exchange Details Al-Sat Detaylarını Onayla - + This swap request can not be undone and is a final event! Bu takas isteği geri döndürülemez! - - Total %1 fees: %2 (%3) - Toplam %1 ücreti: %2 (%3) - - - + Security configuration Güvenlik yapılandırması - + dPoW protected dPoW korumalı - - + + Read more about dPoW dPoW hakkında daha fazla bilgi - + Use custom protection settings for incoming %1 transactions TICKER %1 işlemleri için özel güvenlik ayarları kullan - + Enable Komodo dPoW security Komodo dPoW güvenliğini etkinleştir - + %1 confirmations for incoming %2 transactions Gelen %2 işlemleri için %1 onay - + This transaction can take up to 60 mins - DO NOT close this application! Bu işlem 60 dakikayı bulabilir - Programı KAPATMAYINIZ! - + + <b>Total %1 fees:</b> + + + + Required Confirmations Gereken Onaylar - + Warning, this atomic swap is not dPoW protected! Uyarı, bu atomik takas dPoW korumalı değil! - + Cancel İptal - + Confirm Onayla @@ -976,182 +976,182 @@ Dashboard - + The current number of enabled coins does not match your configuration specification. Your assets configuration will be reset. Etkinleştirilmiş koinlerin mevcut sayısı yapılandırma ayarlarınızla eşleşmiyor. Varlık yapılandırmanız sıfırlanacak. - + Matching Eşleşiyor - + Order Matching Emir Eşleşiyor - + Matched Eşleşti - + Order Matched Emir Eşleşti - + Ongoing Devam ediyor - + Swap Ongoing Takas Devam Ediyor - + Successful Başarılı - + Swap Successful Takas Başarılı - + Refunding Geri ödeniyor - + Failed Başarısız - + Swap Failed Takas Başarısız - + Unknown Bilinmiyor - + Unknown State Bilinmeyen durum - + Started Başlatıldı - + Negotiated Pazarlık yapıldı - + Taker fee sent Alıcı ücreti gönderildi - + Maker payment received Yapıcı ödemesi alındı - + Maker payment wait confirm started Yapıcı ödemesi bekleme onayı başladı - + Maker payment validated and confirmed Yapıcı ödemesi doğrulandı ve onaylandı - + Taker payment sent Alıcı ödemesi gönderildi - + Taker payment spent Alıcı ödemesi harcandı - + Maker payment spent Yapıcı ödemesi harcandı - + Finished Tamamlandı - + Start failed Başlatılamadı - + Negotiate failed Pazarlık başarısız - + Taker fee validate failed Alıcı ücreti doğrulanamadı - + Maker payment transaction failed Yapıcı ödeme işlemi başarısız - + Maker payment Data send failed Yapıcı ödeme verileri gönderilemedi - + Maker payment wait confirm failed Yapıcı ödemesi bekleme onayı başarısız - + Taker payment validate failed Alıcı ödemesi doğrulanamadı - + Taker payment wait confirm failed Alıcı ödemesi bekleme onayı başarısız oldu - + Taker payment spend failed Alıcı ödeme harcaması başarısız oldu - + Maker payment wait refund started Yapıcı ödemesi bekleme iadesi başladı - + Maker payment refunded Yapıcı ödemesi iade edildi - + Maker payment refund failed Yapıcı ödeme iadesi başarısız @@ -1211,7 +1211,7 @@ DexAppPasswordField - + Type password @@ -1254,7 +1254,7 @@ DexPaginator - + items per page sayfa başına öğe @@ -1280,7 +1280,7 @@ DexSweetComboBox - + Search Ara @@ -1298,37 +1298,37 @@ - - Add a custom asset to the list - Listeye özel varlık ekleyin - - - + All assets are already enabled! Bütün varlıklar zaten etkinleştirildi! - + Change assets limit Varlıkların limitini değiştirin - + Select all assets Tüm varlıkları seç - + You can still enable %1 assets. Selected: %2. Hala %1 varlık etkinleştirebilirsiniz. Seçilen: %2. - + + Add a custom asset + + + + Close Kapat - + Enable Etkinleştir @@ -1341,27 +1341,27 @@ Sorumluluk Reddi & Kullanım Şartları - + Accept EULA Son Kullanıcı Lisans Sözleşmesi (EULA) 'ni kabul ediyorum - + Accept Terms and Conditions Şartları ve koşulları kabul ediyorum - + Close Kapat - + Cancel İptal - + Confirm Onayla @@ -1387,12 +1387,12 @@ FeeInfo - + Minimum fee En düşük ücret - + Fees will be calculated Ücretler hesaplanacak @@ -1400,14 +1400,14 @@ General - + %n day(s) %n gün - + %nd day @@ -1415,7 +1415,7 @@ - + %nh hours @@ -1423,7 +1423,7 @@ - + %nm minutes @@ -1431,7 +1431,7 @@ - + %ns seconds @@ -1439,7 +1439,7 @@ - + %nms milliseconds @@ -1447,66 +1447,91 @@ - + - - - + + <b>Taker tx fee:</b> + + + + + <b>Dex tx fee:</b> + + + + + <b>Dex fee:</b> + + + + + <b>Maker tx fee:</b> + + + + + %1 %2 %3 (%4) + %2 (%3) {1 %2 %3 ?} {4)?} + + + Trading Fee Takas Ücreti - + Minimum Trading Amount Minimum Takas Hacmi - + Wallet %1 already exists WALLETNAME %1 cüzdanı zaten mevcut - + %1 balance is lower than the fees amount: %2 %3 %1 bakiye ücret tutarının altında: %2 %3 - + Tradable (after fees) %1 balance is lower than minimum trade amount Takas edilebilir (ücretlerden sonra)%1 bakiyesi minimum işlem ücretinden düşük - + Please fill the price field Lütfen fiyat alanını doldurun - + Please fill the volume field Lütfen hacim alanını doldurunuz - - + + %1 volume is lower than minimum trade amount %1 hacmi, minimum işlem ücretinden düşük - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - + Unknown Error Bilinmeyen Hata @@ -1514,50 +1539,41 @@ Header - + You get Alacağınız - + You send Göndereceğiniz - + Fiat Price Döviz Fiyatı - + CEX rate CEX oranı - - + Price Fiyat - + Quantity Miktar - + Total Toplam - - History - - - Recent Swaps - Son Takaslar - - ImportWallet @@ -1566,94 +1582,92 @@ - + Import wallet - Setup - + Import wallet - Choose password - + Wallet Name Cüzdan Adı - + Enter seed - - BIP39 seed validation failed, try again or select 'Allow custom seed' + + Your seed is not BIP39 compliant. +Try again or select 'Allow custom seed' to continue. - + + + i understand + + + + + Ok + Tamam + + + Allow custom seed Özel Seed'e izin ver - + <strong>Allow custom seed</strong> - + Custom seed phrases might be less secure and easier to crack than a generated BIP39 compliant seed phrase or private key (WIF).<br><br>To confirm you understand the risk and know what you are doing, type <strong>'I understand'</strong> in the box below. - - + I understand - - Enable - Etkinleştir - - - + Next İleri - + Enter the same password to confirm Doğrulamak için aynı parolayı giriniz - + Continue Devam - - Languages - - - Language - Dil - - LinksRow - + Join our Discord server Discord kanalımıza katılın - + Follow us on Twitter Bizi Twitter'dan takip edin - + Go to Support Guides Destek Kılavuzlarına Git @@ -1665,16 +1679,21 @@ Funds are recoverable Fonlar kurtarılabilir + + + Best Orders + En İyi Emirler + ListDelegate - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> - + This order requires a minimum amount of %1 %2 <br>You don't have enough funds.<br> %3 @@ -1713,17 +1732,17 @@ Login - + Incorrect Password Yanlış Parola - - Connect + + Log In - + Cancel İptal @@ -1731,127 +1750,129 @@ Main - + Segwit - + Confirmation - + Do you want to send your %1 funds to %2 wallet first? - + Success - + Your transaction is send, may take some time to arrive - - Wallet Balance - Cüzdan Bakiyesi - - - + Price Fiyat - - Change 24h - Değişim 24sa + + Change 24hr + + + + + Porfolio + - - Portfolio % - Portföy % + + Contract Address + - + Send Gönder - + Enable %1 ? %1 Etkinleştirilsin mi ? - + Yes Evet - + No Hayır - + Receive Al - + Swap Takasla - + + is wallet only + + + + Rewards - + Faucet Musluk - - Loading market data - Piyasa bilgisi yükleniyor - - - - There is no chart data for this ticker yet - Henüz bu hisse senedi için grafik verisi yok + + + + Public Key + - - Loading - Yükleniyor + + Copied to Clipboard + Panoya Kopyalandı - - Scanning blocks for TX History... - TX Geçmişi için bloklar taranıyor ... + + Loading market data + Piyasa bilgisi yükleniyor - - Syncing TX History... - TX Geçmişi senkronize ediliyor ... + + There is no chart data for this ticker yet + Henüz bu hisse senedi için grafik verisi yok - + No transactions İşlem yok - + Refreshing Yenileniyor - + Fetching transactions İşlemler alınıyor @@ -1861,25 +1882,52 @@ Al Sat + + Trading Information + Al Sat Bilgisi + + + + Exchange Rates + Döviz kurları + + + Orders Emirler + History Tarihçe + + + Place Order + Emir Ver + + + + Order Selected + Emir Seçildi + + + + START SWAP + + MarketModeSelector - + Sell Sat - + Buy Satın Al @@ -1931,162 +1979,161 @@ NewUpdateModal - - Searching new updates... - Yeni güncellemeler aranıyor... - - - - Please wait while the application is finding a new update... You can close this modal if you want. - Uygulama yeni bir güncelleme ararken lütfen bekleyin... İsterseniz bu sekmeyi kapatabilirsiniz. - - - - Already updated - Zaten güncellendi + + + + Searching new updates + - - %1 is already up-to-date ! - %1 zaten güncel ! + + Fetching... + - + + + + Close Kapat - - New update detected ! - Yeni güncelleme tespit edildi ! + + Could not check new updates because of the following reason: +%1 + - - Do you want to update %1 from %2 to %3 ? - %1'i %2'den %3'e güncellemek istiyor musunuz ? + + New version found + - - Download - İndir + + %1 %2 is available ! + - - Remind me later - Daha sonra hatırlat + + Your application is updated. + - - Download in progress... - İndirme işlemi devam ediyor... + + Download + İndir + + + NewWallet - - Update downloaded - Güncelleme indirildi + + Wrong word, please check again + Hatalı kelime, lütfen kontrol ediniz - - Update has been successfully downloaded. Do you want to restart the application now ? - Güncelleme başarıyla indirildi. Uygulamayı şimdi yeniden başlatmak istiyor musunuz ? + + st + - - Restart now - Şimdi yeniden başlat + + nd + - - Restart later - Daha sonra yeniden başlat + + rd + - - - NewWallet - - Wrong word, please check again - Hatalı kelime, lütfen kontrol ediniz + + th + - + Failed to create a wallet Cüzdan oluşturulamadı - + New Wallet Yeni Cüzdan - + Confirm Seed Seed'i Onayla - + Choose Password - + Important: Back up your seed phrase before proceeding! Önemli: Devam etmeden önce seed kelimelerinizi yedekleyin! - + We recommend storing it offline. Çevrimdışı saklamanızı öneririz. - + Generated Seed Seed Oluştur - + Seed phrase - + copied to clipboard - + Next İleri - + Let's double check your seed phrase Seed kelimelerinizi tekrar kontrol edelim - + Your seed phrase is important - that's why we like to make sure it's correct. We'll ask you three different questions about your seed phrase to make sure you'll be able to easily restore your wallet whenever you want. Seed kelimeleriniz önemlidir - bu yüzden doğru olduğundan emin olmak istiyoruz. Cüzdanınızı istediğiniz zaman kolayca kurtarabileceğinizden emin olmak için seed kelimeleriniz hakkında üç farklı soru soracağız. - - - Enter the %n. word - - %n. kelimeyi giriniz - + + + Enter the + - + + word + + + + Check - + Enter the same password to confirm Doğrulamak için aynı parolayı giriniz - + Continue Devam @@ -2207,60 +2254,60 @@ Lütfen internet bağlantınızı kontrol edin (ör. VPN hizmeti veya güvenlik duvarı bağlantıyı engelliyor olabilir). - + Failed to enable %1 TICKER %1 etkinleştirilemedi - + Endpoint not reachable Uç nokta ulaşılabilir değil - + Could not reach to endpoint Uç noktaya ulaşılamadı - + Mismatch at %1 custom asset configuration TICKER %1 özel varlık yapılandırmasında uyuşmazlık - + Application needs to be restarted for %1 custom asset. TICKER %1 özel varlığı için uygulamanın yeniden başlatılması gerekiyor. - + Batch %1 failed. Reason: %2 %1 toplu işlemi başarısız oldu. Sebep: %2 - + Show Göster - + Restart Yeniden Başlat - + Quit Çık - + There isn't any notification Bildirim yok - + Mark all as read @@ -2268,44 +2315,44 @@ OrderForm - + Amount to sell Satılacak miktar - + Amount to receive Alınacak miktar - + Min volume: - + How to use the pro-view slider ? - + This slider is used to setup the order requirements you need. Left slider: Sets the minimum amount required to process a trade. Right slider: Sets the volume you want to trade. - + Use custom minimum trade amount - + Price Fiyat - + Volume Hacim @@ -2313,7 +2360,7 @@ Right slider: Sets the volume you want to trade. OrderLine - + Funds are recoverable Fonlar kurtarılabilir @@ -2321,7 +2368,7 @@ Right slider: Sets the volume you want to trade. OrderList - + No results found @@ -2329,97 +2376,103 @@ Right slider: Sets the volume you want to trade. OrderModal - + Swap Details Takas Detayları - + Order Details Emir Detayları - + + Order Type + + + + Maker Order Yapıcı Emri - + Taker Order Alıcı Emri - + Refund State Geri Ödeme Durumu - + Your swap failed but the auto-refund process for your payment started already. Please wait and keep application opened until you receive your payment back Takas işlemi başarısız oldu, ancak otomatik geri ödeme süreci başladı. Lütfen bekleyin ve ödemenizi geri alana kadar uygulamayı açık tutun - + Date Tarih - + ID ID - + Recover Funds Fon Kurtar - + Refunding... - + View on Explorer Explorer'da Göster - + Maker Payment Sent ID Yapıcı Ödemesi Gönderilen Kimliği - + Maker Payment Spent ID Yapıcı Ödemesi Harcanan Kimliği - + Taker Payment Spent ID Alıcı Ödemesi Harcanan Kimliği - + Taker Payment Sent ID Alıcı Ödemesi Gönderilen Kimliği - + Cancel Order Emri İptal Et - + Error ID Hata ID - + + Error Log Hata Kaydı - + Close Kapat @@ -2427,64 +2480,62 @@ Right slider: Sets the volume you want to trade. OrderRemovedModal - + Selected Order Removed Seçilen Emir Kaldırıldı - - The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. Please select a new order. - Seçilen emir artık mevcut değil, eşleşmiş veya iptal edilmiş olabilir, ve daha iyi fiyatlı bir emir bulunmamakta. Lütfen yeni bir emir seçin. + + The selected order does not exist anymore, it might have been matched or canceled, and no order with a better price is available. +Please select a new order. + - + OK TAMAM - - Orders - - - Orders - Emirler - - OrdersPage - + From Gönderen - + To Alan - + Apply Filter Filtreyi Uygula - - + + Filter - + Date Tarih - + Export CSV CSV'yi dışa aktar - + + Cancel All + + + + Please choose the CSV export name and location Lütfen CSV dışa aktarma adını ve konumunu seçin @@ -2492,7 +2543,7 @@ Right slider: Sets the volume you want to trade. Pagination - + items per page sayfa başına öğe @@ -2558,66 +2609,66 @@ Right slider: Sets the volume you want to trade. Portfolio - + + ADD ASSET + + + + Search asset - + Show only coins with balance Sadece bakiyesi olan koinleri göster - + (%1/%2) - + Portfolio - - - Add asset - Varlık ekle - PriceLine - + Set swap price for evaluation Değerlendirme için takas fiyatı belirleyin - + Exchange rate Döviz kuru - + Selected Seçili - + Expensive Pahalı - + Expedient Uygun - + %1 compared to CEX PRICE_DIFF% CEX ile karşılaştırıldığında %1 - + CEXchange rate CEXchange kuru @@ -2625,37 +2676,37 @@ Right slider: Sets the volume you want to trade. PriceLineSimplified - + Set swap price for evaluation Değerlendirme için takas fiyatı belirleyin - + Exchange rate Döviz kuru - + Selected Seçili - + CEXchange rate CEXchange kuru - + Expensive Pahalı - + Expedient Uygun - + %1 compared to CEX PRICE_DIFF% CEX ile karşılaştırıldığında %1 @@ -2664,65 +2715,23 @@ Right slider: Sets the volume you want to trade. ProView - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı + + + QObject - - Chart - Grafik - - - - Trading Information - Al Sat Bilgisi - - - - Exchange Rates - Döviz kurları - - - - Orders - Emirler - - - - History - Tarihçe - - - - Order Book - Emir Defteri - - - - Best Orders - En İyi Emirler - - - - Place Order - Emir Ver - - - - START SWAP + + Cannot reach the endpoint: - - - Order Selected - Emir Seçildi - ReceiveModal @@ -2733,22 +2742,17 @@ Right slider: Sets the volume you want to trade. - Only send %1 to this address + Only send %1 to this address: TICKER - Bu adrese yalnızca %1 gönder - - - - %1 address - copied to clipboard + copied to clipboard. - + Close Kapat @@ -2756,90 +2760,70 @@ Right slider: Sets the volume you want to trade. RecoverSeedModal - - + + View seed and private keys Seed ve özel anahtarları görüntüle - + Please enter your password to view the seed. Seed'i görmek için lütfen parolanızı giriniz. - - Wrong Password - Yanlış Parola - - - - Cancel - İptal - - - - Seed phrase + + Seed - - - - copied to clipboard + + Backup Seed - - RPC password + + Public Address copied to clipboard - - phrase key copied to clipboard - + + Cancel + İptal - - Backup seed - Seed'i yedekle + + + copied to clipboard + - + + RPC Password RPC Parolası - + Search a coin. Koin ara. - - %1 address - + + Public Address + Public Adres - - %1 private key + + Private Key copied to clipboard - - Public Address - Public Adres - - - + Private Key Private Key - - Close - Kapat - - - + View Görüntüle @@ -2883,19 +2867,11 @@ Right slider: Sets the volume you want to trade. SearchField - + Search Ara - - SellBox - - - Sell - Sat - - SendModal @@ -2904,124 +2880,144 @@ Right slider: Sets the volume you want to trade. Gönderilemedi - + Failed to Send Gönderilemedi - + Prepare to send Göndermeye hazırlanıyor - + Address of the recipient - + Amount to send - - Max amount - - - - + Gas price - + Recipient's address Alıcı adresi - - Address Book - Adres Defteri - - - + The address has to be mixed case. Adres, büyük-küçük harf karışık olmalıdır. - + Fix Düzelt - + + MAX + MAKS + + + + Fiat amount: Unavailable + + + + + Fiat amount: %1 + + + + + %1 amount: %2 + + + + + Specify in Fiat + + + + + Specify in Crypto + + + + Enable Custom Fees Özel İşlem Ücretlerini Etkinleştir - + Only use custom fees if you know what you are doing! Özel işlem ücretleri hakkında bilginiz yoksa kullanmayınız! - + Enter the custom fee Özel ücreti giriniz - + Gas Limit Gas Limiti - + Custom Fee can't be higher than the amount Özel İşlem Ücreti takas miktarından daha yüksek olamaz - + Not enough funds. Yetersiz bakiye. - + You have %1 AMT TICKER %1'niz var - + Close Kapat - + Prepare Hazırla - - + + Send Gönder - + Amount Miktar - + Fees İşlem Ücreti - + Date Tarih - + Back Geri @@ -3029,43 +3025,43 @@ Right slider: Sets the volume you want to trade. SendModalContactList - + Select a contact with an %1 address %1 adresi olan bir kişi seçin - + Search for contacts... Kişi ara... - + %1 addresses %1 adresleri - + 1 address 1 adres - - + + Back Geri - + Choose an %1 address of %2 %2'nin bir %1 adresini seçin - + Name İsim - + Address Adres @@ -3073,42 +3069,42 @@ Right slider: Sets the volume you want to trade. SendResult - + Transaction Complete! İşlem Tamamlandı! - + Recipient's address Alıcının adresi - + Amount Miktar - + Fees İşlem Ücreti - + Date Tarih - + Transaction Hash İşlem Hash'i - + Close Kapat - + View on Explorer Explorer'da göster @@ -3116,175 +3112,174 @@ Right slider: Sets the volume you want to trade. SettingModal - + Confirm Logout - + Are you sure you want to log out? - + Yes Evet - - + + Cancel İptal - + Settings Ayarlar - - + Language Dil - + User Interface Kullanıcı Arayüzü - + Security Güvenlik - + General Genel - + About & Version - + Enable Desktop Notifications Masaüstü Bildirimlerini Aktif Et - + Maximum number of enabled coins Maksimum etkin koin sayısı - + Logs Günlük Kaydı - + Open Folder Klasörü Aç - - + + Reset wallet configuration - + This will restart your wallet with default settings - + Confirm Onayla - + Changing theme to %1 - + + Application Version + + + + + copied to clipboard + + + + Reset Sıfırla - + Current Font Geçerli Yazı Tipi - + Current font changed to %1. - + Theme Tema - + Ask system's password before sending coins ? (2FA) Para göndermeden önce sistem parolası sorulsun mu ? (2FA) - + Application version Uygulama sürümü - - DEX Version - - - - - DEX Version copied to clipboard. - - - - + MM2 version MM2 sürümü - + MM2 Version - + MM2 Version copied to clipboard. - + Qt version Qt sürümü - + Qt Version - + Qt Version copied to clipboard. - + Search Update Güncelleme Ara - + Logout Çıkış @@ -3294,28 +3289,28 @@ Right slider: Sets the volume you want to trade. - + View seed and private keys Seed ve özel anahtarları görüntüle - - + + Show Göster - + Setup Camouflage Password Kamuflaj Parolasını Ayarla - + Open - + Disclaimer and ToS Sorumluluk Reddi ve K.Ş. @@ -3323,62 +3318,62 @@ Right slider: Sets the volume you want to trade. Settings - + Fiat Döviz - + Recommended: Önerilen: - + Enable Desktop Notifications Masaüstü Bildirimlerini Aktif Et - + Use QtTextRendering Or NativeTextRendering QtTextRendering veya NativeTextRendering Kullan - + Open Logs Folder Günlük Kaydı Klasörünü Aç - + Disclaimer and ToS Sorumluluk Reddi ve K.Ş. - + Setup Camouflage Password Kamuflaj Parolasını Ayarla - + mm2 version mm2 versiyonu - + Delete Wallet Cüzdanı Sil - + View seed and private keys Seed ve özel anahtarları görüntüle - + Reset wallet configuration - + Log out Çıkış yap @@ -3412,32 +3407,32 @@ Right slider: Sets the volume you want to trade. SubBestOrder - + Token Token - + Available Quantity Mevcut Miktar - + Available Quantity (in %1) Mevcut Miktar (%1 olarak) - + Fiat Volume Fiat Hacmi - + CEX Rate CEX Oranı - + %1 is not enabled - Do you want to enable it to be able to select %2 best orders ?<br><a href='#'>Yes</a> - <a href='#no'>No</a> %1 etkin değil - En iyi %2 siparişini seçebilmesi için etkinleştirmek istiyor musunuz ? <br><a href='#'>Evet</a> - <a href='#no'>Hayır</a> @@ -3445,22 +3440,22 @@ Right slider: Sets the volume you want to trade. SubCoinSelector - + Token Token - + Balance Bakiye - + Balance Fiat Fiat Bakiye - + No Selectable coin. Seçilebilir Koin Yok @@ -3593,171 +3588,155 @@ Right slider: Sets the volume you want to trade. - Support - - - Update available - Güncelleme mevcut - - - - Up to date - Güncel - - - - Changelog - Değişim günlüğü - + SupportModal - - Open Logs Folder - Günlük Kaydı Klasörünü Aç - - - + Frequently Asked Questions - Sıkça Sorulan Sorular + Sıkça Sorulan Sorular - + Do you store my private keys? - Özel anahtarlarımızı depoluyor musunuz? + Özel anahtarlarımızı depoluyor musunuz? - + No! %1 is non-custodial. We never store any sensitive data, including your private keys, seed phrases, or PIN. This data is only stored on the user’s device and never leaves it. You are in full control of your assets. - Hayır! %1 gözetlenmiyor. Özel anahtarlarınız, seed veya PIN'iniz dahil olmak üzere hiçbir hassas veriyi asla depolamayız. Bu veriler yalnızca kullanıcının cihazında depolanır ve asla oradan çıkmaz. Varlıklarınızın tam kontrolü sizdedir. + Hayır! %1 gözetlenmiyor. Özel anahtarlarınız, seed veya PIN'iniz dahil olmak üzere hiçbir hassas veriyi asla depolamayız. Bu veriler yalnızca kullanıcının cihazında depolanır ve asla oradan çıkmaz. Varlıklarınızın tam kontrolü sizdedir. - + How is trading on %1 different from trading on other DEXs? - %1'de işlem yapmanın diğer DEX'lerde işlem yapmaktan farkı nedir? + %1'de işlem yapmanın diğer DEX'lerde işlem yapmaktan farkı nedir? - - Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. + + Other DEXs generally only allow you to trade assets that are based on a single blockchain network, use proxy tokens, and only allow placing a single order with the same funds. %1 enables you to natively trade across two different blockchain networks without proxy tokens. You can also place multiple orders with the same funds. For example, you can sell 0.1 BTC for KMD, QTUM, or VRSC — the first order that fills automatically cancels all other orders. - Diğer DEX'ler genellikle yalnızca tek bir blok zinciri ağına dayalı varlıklarla ticaret yapmanıza izin verir, ve aracı token kullanmanızı ister ve yalnızca aynı fonlarla tek bir sipariş vermenize izin verir. - -%1, aracı token olmadan iki farklı blok zinciri ağında yerel olarak ticaret yapmanızı sağlar. Aynı parayla birden fazla sipariş verebilirsiniz. Örneğin, KMD, QTUM veya VRSC için 0,1 BTC satabilirsiniz - otomatik olarak doldurulan ilk sipariş diğer tüm siparişleri iptal eder. + + + + + How long does each atomic swap take? + Her bir atomik takas ne kadar sürer? - + Several factors determine the processing time for each swap. The block time of the traded assets depends on each network (Bitcoin typically being the slowest) Additionally, the user can customize security preferences. For example, (you can ask %1 to consider a KMD transaction as final after just 3 confirmations which makes the swap time shorter compared to waiting for a <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarization</a>. - Her takas için işlem süresini birkaç faktör belirler. İşlem gören varlıkların blok süresi her bir ağa bağlıdır (Bitcoin tipik olarak en yavaş olanıdır) Ek olarak, kullanıcı güvenlik tercihlerini özelleştirebilir. (Örneğin; %1 in KMD işlemini sadece 3 onayla gerçekleştirmesini seçerek takas süresini <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarizasyon</a> süresinden daha öncesine kısaltabilirsiniz. + Her takas için işlem süresini birkaç faktör belirler. İşlem gören varlıkların blok süresi her bir ağa bağlıdır (Bitcoin tipik olarak en yavaş olanıdır) Ek olarak, kullanıcı güvenlik tercihlerini özelleştirebilir. (Örneğin; %1 in KMD işlemini sadece 3 onayla gerçekleştirmesini seçerek takas süresini <a href="https://komodoplatform.com/security-delayed-proof-of-work-dpow/">notarizasyon</a> süresinden daha öncesine kısaltabilirsiniz. + + + + Do I need to be online for the duration of the swap? + Takas süresi boyunca çevrimiçi olmam gerekir mi? - + Yes. You must remain connected to the internet and have your app running to successfully complete each atomic swap (very short breaks in connectivity are usually fine). Otherwise, there is risk of trade cancellation if you are a maker, and risk of loss of funds if you are a taker. + The atomic swap protocol requires both participants to stay online and monitor the involved blockchains for the process to stay atomic. + If you go offline, so will your orders, and any that are in progress will fail, leading to potential loss of trade / transaction fees, and a wait for the swap to timeout and issue a refund. It may also negatively affect your wallet's reputation score for future trade matching. + When you come back online, your orders will begin to broadcast again at the price you set before you went offline. If there has been significant price movement in the meantime, you might unintentionally offer someone a bargain! + For this reason, we recommend cancelling orders before closing %1, or reviewing and revising your prices when restarting %1. - Evet. Her atomik takası başarıyla tamamlamak için internete bağlı kalmalı ve uygulamanızın çalışır durumda olmasını sağlamalısınız (bağlantıda çok kısa kesintilerde sorun yoktur). Aksi takdirde, eğer satıcıysanız işlemin iptali ve alıcı iseniz fon kaybı riski vardır. -Atomik takas protokolü, her iki katılımcının da çevrimiçi kalmasını ve sürecin atomik kalması için ilgili blok zincirlerini izlemesini gerektirir. -Çevrimdışı olursanız, siparişleriniz ve devam eden siparişleriniz de başarısız olur, bu da potansiyel ticaret / işlem ücretleri kaybına ve takasın zaman aşımına uğraması ve geri ödeme yapılması için beklemeye neden olur. Ayrıca gelecekteki ticaret eşleşmeleri için cüzdanınızın itibar puanını da olumsuz etkileyebilir. -Tekrar çevrimiçi olduğunuzda, siparişleriniz çevrimdışı olmadan önce belirlediğiniz fiyat üzerinden tekrar yayınlanmaya başlayacaktır. Bu arada önemli bir fiyat hareketi olduysa, istemeden birine pazarlık teklif edebilirsiniz! -Bu nedenle, %1 'i kapatmadan önce siparişleri iptal etmenizi veya %1 'i yeniden başlatırken fiyatlarınızı gözden geçirmenizi ve revize etmenizi öneririz. + - + How are the fees on %1 calculated? - %1 üzerinde işlem ücretleri nasıl hesaplanır? + %1 üzerinde işlem ücretleri nasıl hesaplanır? - + There are two fee categories to consider when trading on %1. 1. %1 charges approximately 0.13% (1/777 of trading volume but not lower than 0.0001) as the trading fee for taker orders, and maker orders have zero fees. + 2. Both makers and takers will need to pay normal network fees to the involved blockchains when making atomic swap transactions. Network fees can vary greatly depending on your selected trading pair. - %1 üzerinde alım satım yaparken iki işlem ücreti kategorisi vardır. - -1. %1, alıcı emirler için işlem ücreti olarak yaklaşık %0.13'ünü (0,0001'den düşük olmayacak şekilde alım satım hacminin 1/777'si) alır ve satıcı emirleri sıfır ücrete sahiptir. -2. Hem satıcılar hem de alıcılar, atomik takas işlemleri yaparken ilgili blok zincirlerine normal ağ ücretleri ödemek zorundadırlar. - -Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde değişebilir. + - - Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - + + Do you provide user support? + Kullanıcı desteği sağlıyor musunuz? - - %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. + + Yes! %1 offers support through the <a href="%2">%1 Discord server</a>. The team and the community are always happy to help! - + Who is behind %1? - %1 arkasında kim var? + %1 arkasında kim var? - + %1 is developed by the Komodo team. Komodo is one of the most established blockchain projects working on innovative solutions like atomic swaps, Delayed Proof of Work, and an interoperable multi-chain architecture. - %1, Komodo ekibi tarafından geliştirilmiştir. Komodo, atomik takaslar, Gecikmeli Çalışma Kanıtı ve birlikte çalışabilir bir çok zincirli mimari gibi yenilikçi çözümler üzerinde çalışan en köklü blok zinciri projelerinden biridir. + %1, Komodo ekibi tarafından geliştirilmiştir. Komodo, atomik takaslar, Gecikmeli Çalışma Kanıtı ve birlikte çalışabilir bir çok zincirli mimari gibi yenilikçi çözümler üzerinde çalışan en köklü blok zinciri projelerinden biridir. - + Is it possible to develop my own white-label exchange on %1? - %1 üzerinde kendi markamla borsamı geliştirmem mümkün mü? + %1 üzerinde kendi markamla borsamı geliştirmem mümkün mü? - + Absolutely! You can read our developer documentation for more details or contact us with your partnership inquiries. Have a specific technical question? The %1 developer community is always ready to help! - Kesinlikle! Daha fazla ayrıntı için geliştirici belgelerimizi okuyabilir veya ortaklık sorularınız için bizimle iletişime geçebilirsiniz. Belirli bir teknik sorunuz mu var? %1 geliştirici topluluğu her zaman yardıma hazır! + Kesinlikle! Daha fazla ayrıntı için geliştirici belgelerimizi okuyabilir veya ortaklık sorularınız için bizimle iletişime geçebilirsiniz. Belirli bir teknik sorunuz mu var? %1 geliştirici topluluğu her zaman yardıma hazır! - + Which devices can I use %1 on? - %1 'i hangi cihazlarda kullanabilirim? + %1 'i hangi cihazlarda kullanabilirim? - - Compliance Info - Uyumluluk Bilgisi + + %1 is available for mobile on both <a href="%2">Android and iPhone, and for desktop on Windows, Mac, and Linux</a> operating systems. + - - Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. - Düzenleyici ve yasal koşullar nedeniyle, Amerika Birleşik Devletleri, Kanada, Hong Kong, İsrail, Singapur, Sudan, Avusturya, İran ve Amerika Birleşik Devletleri veya Avrupa Birliği tarafından ambargo uygulanan diğer herhangi bir eyalet, ülke veya diğer bölge vatandaşlarının bu uygulamayı kullanmasına izin verilmez. + + Compliance Info + Uyumluluk Bilgisi - - How long does each atomic swap take? - Her bir atomik takas ne kadar sürer? + + Due to regulatory and legal circumstances the citizens of certain jurisdictions including, but not limited to, the United States of America, Canada, Hong Kong, Israel, Singapore, Sudan, Austria, Iran and any other state, country or other jurisdiction that is embargoed by the United States of America or the European Union are not allowed to use this application. + Düzenleyici ve yasal koşullar nedeniyle, Amerika Birleşik Devletleri, Kanada, Hong Kong, İsrail, Singapur, Sudan, Avusturya, İran ve Amerika Birleşik Devletleri veya Avrupa Birliği tarafından ambargo uygulanan diğer herhangi bir eyalet, ülke veya diğer bölge vatandaşlarının bu uygulamayı kullanmasına izin verilmez. - - Do I need to be online for the duration of the swap? - Takas süresi boyunca çevrimiçi olmam gerekir mi? + + Changelog + Değişim günlüğü - - Do you provide user support? - Kullanıcı desteği sağlıyor musunuz? + + Open Logs Folder + Günlük Kaydı Klasörünü Aç SwapProgress - + act SHORT FOR ACTUAL TIME gerçek - + est SHORT FOR ESTIMATED tahmini - + Progress details İlerleme ayrıntıları @@ -3765,7 +3744,7 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de SweetDexComboBox - + Search Ara @@ -3773,12 +3752,12 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de TextAreaWithTitle - + Save Kaydet - + Edit Düzenle @@ -3786,12 +3765,12 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de TextEditWithTitle - + Swap ID - + copied to clipboard @@ -3815,145 +3794,154 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de Trade - + Swap Takasla - + Instant trading with best orders En iyi emirlerle anında alım satım - + From Gönderen - + Enter an amount Bir miktar gir - + MAX MAKS - + To Alan - + Pick an order Emri seç - + Price Fiyat - + Better price found: %1. Updating forms. Daha iyi fiyat bulundu: %1. Formları güncelliyor. - + Better price (%1) found but received quantity (%2) is lower than your current one (%3). Click here to update the selected order. Daha iyi fiyat (%1) bulundu, ancak alınan miktar (%2) mevcut fiyattan (%3) daha düşük. Seçilen emri güncellemek için buraya tıklayın. - + Reset form. Formu sıfırla - + + You have no tradable assets. + + + + %1 %1 - + Tradable: Al sat yapılabilir: - + Min: %1 - + Pick a coin - + SWAP NOW - + Failed to place the order Emir başarısız oldu - + Placed the order Emir başarılı - + Entered amount must be superior than 0. Girilen tutar 0'dan büyük olmalıdır. - + You must select an order. Bir emir seçmelisiniz. - + Entered amount is below the minimum required by this order: %1 Girilen miktar, bu emrin gerektirdiği minimum %1 tutarının altında - - + + %1 needs to be enabled in order to use %2 - - + + %1 balance needs to be funded, a non-zero balance is required to pay the gas of %2 transactions - - - Search - Ara + + %1 balance does not have enough funds to pay the gas of %2 transactions + - + No buy orders found for %1. - + You can check later or try to sell a different coin. - + + Calculating fee estimate... + + + + Total %1 fees: Toplam %1 işlem giderleri: - + %2 (%3) %2 (%3) @@ -3961,74 +3949,120 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de TradeViewHeader - DEX - DEX + + Pro View Settings + + + + + Display Settings + + + + + Chart + Grafik + + + + Ticker Selectors + + + + + Trading Information + Al Sat Bilgisi + + + + Order Book + Emir Defteri + + + + Best Orders + En İyi Emirler + + + + Place Order + Emir Ver TransactionDetailsModal - + Transaction Details İşlem Detayları - + Amount Miktar - + Fees İşlem Ücreti - + Date Tarih - + Unconfirmed Onaylanmamış - + Transaction Hash İşlem Hash'i - + + Transactions + + + + + txid copied to clipboard + + + + Confirmations Onay Sayısı - + Block Height Blok Uzunluğu - + From Gönderen - + To Alan - + Notes Notlar - + Close Kapat - + View on Explorer Explorer'da göster @@ -4036,22 +4070,22 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de Transactions - + Received Alınan - + Sent Gönderilen - + fees işlem ücretleri - + Unconfirmed Onaylanmamış @@ -4064,6 +4098,14 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de İndirilen güncelleme arşivi bozulmuş ! + + Vertical + + + Order Book + Emir Defteri + + WalletNameField @@ -4095,55 +4137,65 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de - + + Search your wallets... + + + + My Wallets Cüzdanlarım - - + + No wallets found! + + + + + Delete Sil - + Enter password to confirm deletion of - + wallet - + Type password - + Cancel İptal - - + + Wallet status - + wallet deleted successfully - - + + Ok Tamam - + wallet password is incorrect @@ -4172,13 +4224,13 @@ Ağ ücretleri, seçtiğiniz işlem çiftine bağlı olarak büyük ölçüde de - Invalid checksum for %1. Click on the convert button to turn it into a mixed case address - %1 için geçersiz sağlama toplamı. Karışık bir durum adresine dönüştürmek için dönüştür düğmesine tıklayın + Invalid checksum for %1. Click the button to convert to mixed case address. + - Legacy address used for %1, click on the convert button to convert it to a Cashaddress. - %1 için kullanılan eski adres, onu bir Cashaddress'e dönüştürmek için dönüştür düğmesine tıklayın. + Legacy address used for %1. Click the button to convert to a Cashaddress. + diff --git a/atomic_defi_design/qml.qrc b/atomic_defi_design/qml.qrc deleted file mode 100644 index ee1c845da..000000000 --- a/atomic_defi_design/qml.qrc +++ /dev/null @@ -1,637 +0,0 @@ - - - assets/fonts/Ubuntu-B.ttf - assets/fonts/Ubuntu-BI.ttf - assets/fonts/Ubuntu-L.ttf - assets/fonts/Ubuntu-LI.ttf - assets/fonts/Ubuntu-M.ttf - assets/fonts/Ubuntu-MI.ttf - assets/fonts/Ubuntu-R.ttf - assets/fonts/Ubuntu-RI.ttf - assets/fonts/Ubuntu-Th.ttf - assets/images/addressbook.png - assets/images/arrow-down.svg - assets/images/arrow-up.svg - assets/images/arrow_down.svg - assets/images/arrow_up.svg - assets/images/bill.svg - assets/images/circle-failed.png - assets/images/circle-success.png - assets/images/coins/1inch.png - assets/images/coins/aave.png - assets/images/coins/aby.png - assets/images/coins/ada.png - assets/images/coins/adx.png - assets/images/coins/agix.png - assets/images/coins/ankr.png - assets/images/coins/ant.png - assets/images/coins/arpa.png - assets/images/coins/arrr.png - assets/images/coins/atom.png - assets/images/coins/aur.png - assets/images/coins/ava.png - assets/images/coins/avax.png - assets/images/coins/avaxt.png - assets/images/coins/awc.png - assets/images/coins/axe.png - assets/images/coins/axs.png - assets/images/coins/babydoge.png - assets/images/coins/bal.png - assets/images/coins/band.png - assets/images/coins/banano.png - assets/images/coins/bat.png - assets/images/coins/bch.png - assets/images/coins/best.png - assets/images/coins/bet.png - assets/images/coins/bidr.png - assets/images/coins/blk.png - assets/images/coins/bnb.png - assets/images/coins/bnbt.png - assets/images/coins/bnt.png - assets/images/coins/bone.png - assets/images/coins/bots.png - assets/images/coins/brz.png - assets/images/coins/bsty.png - assets/images/coins/btc.png - assets/images/coins/btcz.png - assets/images/coins/btt.png - assets/images/coins/bttc.png - assets/images/coins/btu.png - assets/images/coins/btx.png - assets/images/coins/busd.png - assets/images/coins/bte.png - assets/images/coins/cadc.png - assets/images/coins/cake.png - assets/images/coins/case.png - assets/images/coins/cdn.png - assets/images/coins/ccl.png - assets/images/coins/cel.png - assets/images/coins/celr.png - assets/images/coins/cennz.png - assets/images/coins/chips.png - assets/images/coins/ciphs.png - assets/images/coins/chsb.png - assets/images/coins/chz.png - assets/images/coins/clc.png - assets/images/coins/comp.png - assets/images/coins/cro.png - assets/images/coins/crv.png - assets/images/coins/crypto.png - assets/images/coins/cummies.png - assets/images/coins/cvc.png - assets/images/coins/cvt.png - assets/images/coins/dai.png - assets/images/coins/dash.png - assets/images/coins/dex.png - assets/images/coins/dgb.png - assets/images/coins/dgc.png - assets/images/coins/dia.png - assets/images/coins/dimi.png - assets/images/coins/dodo.png - assets/images/coins/doge.png - assets/images/coins/dogedash.png - assets/images/coins/doggy.png - assets/images/coins/doi.png - assets/images/coins/dot.png - assets/images/coins/dp.png - assets/images/coins/dust.png - assets/images/coins/dx.png - assets/images/coins/eca.png - assets/images/coins/efl.png - assets/images/coins/egld.png - assets/images/coins/elf.png - assets/images/coins/emc2.png - assets/images/coins/enj.png - assets/images/coins/eos.png - assets/images/coins/erc-20.png - assets/images/coins/etc.png - assets/images/coins/eth.png - assets/images/coins/ethk.png - assets/images/coins/ethr.png - assets/images/coins/eurs.png - assets/images/coins/fet.png - assets/images/coins/floki.png - assets/images/coins/flux.png - assets/images/coins/fil.png - assets/images/coins/firo.png - assets/images/coins/fjc.png - assets/images/coins/fjcb.png - assets/images/coins/flow.png - assets/images/coins/ftc.png - assets/images/coins/ftm.png - assets/images/coins/ftmt.png - assets/images/coins/gala.png - assets/images/coins/gleec.png - assets/images/coins/glmr.png - assets/images/coins/gno.png - assets/images/coins/grms.png - assets/images/coins/gm.png - assets/images/coins/gms.png - assets/images/coins/grs.png - assets/images/coins/grt.png - assets/images/coins/hex.png - assets/images/coins/hlc.png - assets/images/coins/hodl.png - assets/images/coins/hot.png - assets/images/coins/hpy.png - assets/images/coins/ht.png - assets/images/coins/husd.png - assets/images/coins/ic.png - assets/images/coins/il8p.png - assets/images/coins/iln.png - assets/images/coins/inj.png - assets/images/coins/ink.png - assets/images/coins/iota.png - assets/images/coins/iotx.png - assets/images/coins/jchf.png - assets/images/coins/jeur.png - assets/images/coins/jgbp.png - assets/images/coins/jpyc.png - assets/images/coins/jrt.png - assets/images/coins/jstr.png - assets/images/coins/jumblr.png - assets/images/coins/kcs.png - assets/images/coins/kmd.png - assets/images/coins/knc.png - assets/images/coins/koin.png - assets/images/coins/ksm.png - assets/images/coins/labs.png - assets/images/coins/lbc.png - assets/images/coins/lcc.png - assets/images/coins/leash.png - assets/images/coins/leo.png - assets/images/coins/link.png - assets/images/coins/lrc.png - assets/images/coins/lstr.png - assets/images/coins/ltc.png - assets/images/coins/ltfn.png - assets/images/coins/luna.png - assets/images/coins/lynx.png - assets/images/coins/mana.png - assets/images/coins/matic.png - assets/images/coins/matictest.png - assets/images/coins/mcl.png - assets/images/coins/mesh.png - assets/images/coins/mgw.png - assets/images/coins/mir.png - assets/images/coins/minds.png - assets/images/coins/mkr.png - assets/images/coins/mln.png - assets/images/coins/mm.png - assets/images/coins/mona.png - assets/images/coins/morty.png - assets/images/coins/movr.png - assets/images/coins/mshark.png - assets/images/coins/nav.png - assets/images/coins/near.png - assets/images/coins/nexo.png - assets/images/coins/nmc.png - assets/images/coins/nvc.png - assets/images/coins/nyan.png - assets/images/coins/nzds.png - assets/images/coins/oc.png - assets/images/coins/ocean.png - assets/images/coins/okb.png - assets/images/coins/omg.png - assets/images/coins/one.png - assets/images/coins/ont.png - assets/images/coins/pangea.png - assets/images/coins/pax.png - assets/images/coins/paxg.png - assets/images/coins/pic.png - assets/images/coins/pnk.png - assets/images/coins/powr.png - assets/images/coins/ppc.png - assets/images/coins/prcy.png - assets/images/coins/pgx.png - assets/images/coins/prux.png - assets/images/coins/put.png - assets/images/coins/qbt.png - assets/images/coins/qc.png - assets/images/coins/qi.png - assets/images/coins/qiair.png - assets/images/coins/qkc.png - assets/images/coins/qnt.png - assets/images/coins/qrc-20.png - assets/images/coins/qrc20.png - assets/images/coins/qtum.png - assets/images/coins/rbtc.png - assets/images/coins/ren.png - assets/images/coins/rep.png - assets/images/coins/rev.png - assets/images/coins/revs.png - assets/images/coins/rick.png - assets/images/coins/rlc.png - assets/images/coins/rsr.png - assets/images/coins/rtm.png - assets/images/coins/rvn.png - assets/images/coins/s4f.png - assets/images/coins/sbch.png - assets/images/coins/sfusd.png - assets/images/coins/shr.png - assets/images/coins/shib.png - assets/images/coins/sibm.png - assets/images/coins/skl.png - assets/images/coins/smart-chain.png - assets/images/coins/smtf.png - assets/images/coins/snt.png - assets/images/coins/snx.png - assets/images/coins/sol.png - assets/images/coins/soulja.png - assets/images/coins/sca.png - assets/images/coins/space.png - assets/images/coins/spc.png - assets/images/coins/srm.png - assets/images/coins/stfiro.png - assets/images/coins/storj.png - assets/images/coins/supernet.png - assets/images/coins/sushi.png - assets/images/coins/sxp.png - assets/images/coins/sys.png - assets/images/coins/tblk.png - assets/images/coins/tbtc.png - assets/images/coins/tel.png - assets/images/coins/tft.png - assets/images/coins/thc.png - assets/images/coins/thc_bep20.png - assets/images/coins/thx.png - assets/images/coins/tkl.png - assets/images/coins/tmtg.png - assets/images/coins/tqtum.png - assets/images/coins/trac.png - assets/images/coins/trc.png - assets/images/coins/trx.png - assets/images/coins/tryb.png - assets/images/coins/tsl.png - assets/images/coins/ttt.png - assets/images/coins/tusd.png - assets/images/coins/ubq.png - assets/images/coins/ubt.png - assets/images/coins/uis.png - assets/images/coins/uma.png - assets/images/coins/uni.png - assets/images/coins/uno.png - assets/images/coins/uos.png - assets/images/coins/uqc.png - assets/images/coins/usbl.png - assets/images/coins/usdc.png - assets/images/coins/usdi.png - assets/images/coins/usdt.png - assets/images/coins/ust.png - assets/images/coins/utk.png - assets/images/coins/val.png - assets/images/coins/vgx.png - assets/images/coins/vite.png - assets/images/coins/vote2022.png - assets/images/coins/vra.png - assets/images/coins/vrm.png - assets/images/coins/vrsc.png - assets/images/coins/wbtc.png - assets/images/coins/wcn.png - assets/images/coins/whive.png - assets/images/coins/wsb.png - assets/images/coins/wwcn.png - assets/images/coins/xec.png - assets/images/coins/xep.png - assets/images/coins/xlm.png - assets/images/coins/xmy.png - assets/images/coins/xor.png - assets/images/coins/xpm.png - assets/images/coins/xrp.png - assets/images/coins/xrg.png - assets/images/coins/xsgd.png - assets/images/coins/xtz.png - assets/images/coins/xvc.png - assets/images/coins/xvs.png - assets/images/coins/yfi.png - assets/images/coins/yfii.png - assets/images/coins/zec.png - assets/images/coins/zer.png - assets/images/coins/zet.png - assets/images/coins/zinu.png - assets/images/coins/zil.png - assets/images/coins/zilla.png - assets/images/coins/zrx.png - assets/images/providers/binance.png - assets/images/providers/coingecko.png - assets/images/providers/coinpaprika.png - assets/images/providers/forex.png - assets/images/providers/nomics.png - assets/images/dashboard-copy.svg - assets/images/dashboard-eye-hide.svg - assets/images/dashboard-eye.svg - assets/images/dashboard-info.svg - assets/images/dex-logo-big.png - assets/images/dex-tray-icon.png - assets/images/exchange-exchange.svg - assets/images/exchange-search.svg - assets/images/exchange-trade-complete.png - assets/images/guide_coingecko_id.gif - assets/images/guide_contract_address_erc.gif - assets/images/guide_contract_address_qrc.gif - assets/images/guide_contract_address_bep.gif - assets/images/icon-discord.png - assets/images/icon-email.png - assets/images/icon-support.png - assets/images/icon-twitter.png - assets/images/komodo-icon.png - assets/images/lang/en.png - assets/images/lang/fr.png - assets/images/lang/ru.png - assets/images/lang/tr.png - assets/images/logo/dex-logo.png - assets/images/menu-assets-portfolio.svg - assets/images/menu-assets-white.svg - assets/images/menu-dapp-white.svg - assets/images/menu-exchange-white.svg - assets/images/menu-news-white.svg - assets/images/menu-settings-white.svg - assets/images/menu-support-white.png - assets/images/settings-seed.svg - assets/images/setup-logs.svg - assets/images/setup-wallet-restore-2.svg - assets/images/setup-welcome-wallet.svg - assets/images/shadowed_circle_blue.svg - assets/images/shadowed_circle_green.svg - assets/images/trade_icon.svg - assets/languages/atomic_defi_en.qm - assets/languages/atomic_defi_fr.qm - assets/languages/atomic_defi_ru.qm - assets/languages/atomic_defi_tr.qm - Dex/App.qml - Dex/String.js - Dex/Components/AddressField.qml - Dex/Components/AddressFieldWithTitle.qml - Dex/Components/AmountField.qml - Dex/Components/AmountFieldWithInfo.qml - Dex/Components/AmountIntField.qml - Dex/Components/AnimatedRectangle.qml - Dex/Components/Arrow.qml - Dex/Components/Blank.qml - Dex/Components/CannotEnableCoinModal.qml - Dex/Components/CexInfoModal.qml - Dex/Components/CexInfoTrigger.qml - Dex/Components/Circle.qml - Dex/Components/ClickableText.qml - Dex/Components/ClipRRect.qml - Dex/Components/CoinMenu.qml - Dex/Components/CoinTypeTag.qml - Dex/Components/ColumnHeader.qml - Dex/Components/ComboBoxWithTitle.qml - Dex/Components/ComponentWithTitle.qml - Dex/Components/CopyFieldButton.qml - Dex/Components/DangerButton.qml - Dex/Components/DefaultAlertIcon.qml - Dex/Components/DefaultAnimatedImage.qml - Dex/Components/DefaultBusyIndicator.qml - Dex/Components/DefaultButton.qml - Dex/Components/DefaultCheckBox.qml - Dex/Components/DefaultColorOverlay.qml - Dex/Components/DefaultComboBox.qml - Dex/Components/DefaultFlickable.qml - Dex/Components/DefaultImage.qml - Dex/Components/DefaultInnerShadow.qml - Dex/Components/DefaultListView.qml - Dex/Components/DefaultLoader.qml - Dex/Components/DefaultModal.qml - Dex/Components/DefaultMouseArea.qml - Dex/Components/DefaultRangeSlider.qml - Dex/Components/DefaultRectangle.qml - Dex/Components/DefaultScrollBar.qml - Dex/Components/DefaultScrollView.qml - Dex/Components/DefaultSlider.qml - Dex/Components/DefaultSplitView.qml - Dex/Components/DefaultSubstractRectangle.qml - Dex/Components/DefaultSweetComboBox.qml - Dex/Components/DefaultSwitch.qml - Dex/Components/DefaultText.qml - Dex/Components/DefaultTextArea.qml - Dex/Components/DefaultTextEdit.qml - Dex/Components/DefaultTextField.qml - Dex/Components/DefaultTooltip.qml - Dex/Components/DexAnimatedImage.qml - Dex/Components/DexAmountField.qml - Dex/Components/DexAppButton.qml - Dex/Components/DexTransparentButton.qml - Dex/Components/DexAppOutlineButton.qml - Dex/Components/DexAppTextField.qml - Dex/Components/DexAppPasswordField.qml - Dex/Components/DexBox.qml - Dex/Components/DexBoxManager.qml - Dex/Components/DexButton.qml - Dex/Components/DexCheckBox.qml - Dex/Components/DexCheckEye.qml - Dex/Components/DexColorOverlay.qml - Dex/Components/DexCopyableLabel.qml - Dex/Components/DexComboBox.qml - Dex/Components/DexDialogManager.qml - Dex/Components/DexDialogTextField.qml - Dex/Components/DexFadebehavior.qml - Dex/Components/DexVisibleBehavior.qml - Dex/Components/DexFlickable.qml - Dex/Components/DexGradientAppButton.qml - Dex/Components/DexIconButton.qml - Dex/Components/DexImage.qml - Dex/Components/DexInnerShadow.qml - Dex/Components/DexItemBox.qml - Dex/Components/DexLabel.qml - Dex/Components/DexLabelUnlinked.qml - Dex/Components/DexLanguage.qml - Dex/Components/DexListView.qml - Dex/Components/DexLoader.qml - Dex/Components/DexKeyChecker.qml - Dex/Components/DexMacControl.qml - Dex/Components/DexModal.qml - Dex/Components/DexModalHeader.qml - Dex/Components/DexMouseArea.qml - Dex/Components/DexPaginator.qml - Dex/Components/DexPopup.qml - Dex/Components/DexRangeSlider.qml - Dex/Components/DexRectangle.qml - Dex/Components/DexScrollBar.qml - Dex/Components/DexSelectableButton.qml - Dex/Components/DexSlider.qml - Dex/Components/DexSplitView.qml - Dex/Components/DexSubstractRectangle.qml - Dex/Components/DexSweetComboBox.qml - Dex/Components/DexSwitch.qml - Dex/Components/DexText.qml - Dex/Components/DexAppTextArea.qml - Dex/Components/DexTextArea.qml - Dex/Components/DexTextEdit.qml - Dex/Components/DexTextField.qml - Dex/Components/DexTooltip.qml - Dex/Components/DexTradeBox.qml - Dex/Components/DexWindow.qml - Dex/Components/DexWindowControl.qml - Dex/Components/DexWindowHeaderControl.qml - Dex/Components/DexMacosHeaderControl.qml - Dex/Components/EulaModal.qml - Dex/Components/FloatingBackground.qml - Dex/Components/ForceRestartModal.qml - Dex/Components/GradientButton.qml - Dex/Components/GradientRectangle.qml - Dex/Components/HelpModal.qml - Dex/Components/HideFieldButton.qml - Dex/Components/HorizontalLine.qml - Dex/Components/InnerBackground.qml - Dex/Components/ItemBox.qml - Dex/Components/LinkIcon.qml - Dex/Components/LinksRow.qml - Dex/Components/LoaderBusyIndicator.qml - Dex/Components/LogModal.qml - Dex/Components/MinTradeModal.qml - Dex/Components/ModalHeader.qml - Dex/Components/ModalLoader.qml - Dex/Components/MultipageModal.qml - Dex/Components/MultipageModalContent.qml - Dex/Components/OutlineButton.qml - Dex/Components/Pagination.qml - Dex/Components/PaginationButton.qml - Dex/Components/PasswordField.qml - Dex/Components/PasswordForm.qml - Dex/Components/PlusButton.qml - Dex/Components/PrimaryButton.qml - Dex/Components/RestartModal.qml - Dex/Components/RightClickMenu.qml - Dex/Components/RoundComboBox.qml - Dex/Components/SearchField.qml - Dex/Components/Separator.qml - Dex/Components/SetupPage.qml - Dex/Components/SidebarPanel.qml - Dex/Components/SquareButton.qml - Dex/Components/SwapIcon.qml - Dex/Components/TextAreaWithTitle.qml - Dex/Components/TextEditWithTitle.qml - Dex/Components/TextFieldWithTitle.qml - Dex/Components/TextWithTitle.qml - Dex/Components/TitleText.qml - Dex/Components/Toast.qml - Dex/Components/ToastManager.qml - Dex/Components/VerticalLine.qml - Dex/Components/VerticalLineBasic.qml - Dex/Components/WalletNameField.qml - Dex/Constants - Dex/Constants/API.qml - Dex/Constants/DexTheme.qml - Dex/Constants/DexTypo.qml - Dex/Constants/General.qml - Dex/Constants/Style.qml - Dex/Dashboard/FatalErrorModal.qml - Dex/Dashboard/NewUpdateModal.qml - Dex/Dashboard/UpdateInvalidChecksum.qml - Dex/Dashboard/NotificationsModal.qml - Dex/Exchange/Exchange.qml - Dex/Exchange/History/History.qml - Dex/Exchange/Orders/Orders.qml - Dex/Exchange/ProView/MarketModeSelector.qml - Dex/Exchange/Trade/BestOrder/Header.qml - Dex/Exchange/Trade/BestOrder/List.qml - Dex/Exchange/Trade/BestOrder/ListDelegate.qml - Dex/Exchange/Trade/CandleStickChart.qml - Dex/Exchange/Trade/ConfirmMultiOrderTradeModal.qml - Dex/Exchange/Trade/ConfirmTradeModal.qml - Dex/Exchange/Trade/DefaultSweetModal.qml - Dex/Exchange/Trade/DexComboBoxLine.qml - Dex/Exchange/Trade/FeeIcon.qml - Dex/Exchange/Trade/MultiOrder.qml - Dex/Exchange/Trade/OrderBook/Header.qml - Dex/Exchange/Trade/OrderBook/Horizontal.qml - Dex/Exchange/Trade/OrderBook/List.qml - Dex/Exchange/Trade/OrderBook/ListDelegate.qml - Dex/Exchange/Trade/OrderBook/Vertical.qml - Dex/Exchange/Trade/Orders/OrderContent.qml - Dex/Exchange/Trade/Orders/OrderLine.qml - Dex/Exchange/Trade/Orders/OrderList.qml - Dex/Exchange/Trade/Orders/OrderModal.qml - Dex/Exchange/Trade/Orders/OrdersPage.qml - Dex/Exchange/Trade/Orders/SwapProgress.qml - Dex/Exchange/Trade/PriceLine.qml - Dex/Exchange/Trade/PriceLineSimplified.qml - Dex/Exchange/Trade/ProView.qml - Dex/Exchange/Trade/SimpleView/List.qml - Dex/Exchange/Trade/SimpleView/Main.qml - Dex/Exchange/Trade/SimpleView/Main.js - Dex/Exchange/Trade/SimpleView/Trade.qml - Dex/Exchange/Trade/SimpleView/OrderRemovedModal.qml - Dex/Exchange/Trade/SimpleView/SubBestOrder.qml - Dex/Exchange/Trade/SimpleView/SubCoinSelector.qml - Dex/Exchange/Trade/SimpleView/SubOrders.qml - Dex/Exchange/Trade/SimpleView/SubHistory.qml - Dex/Exchange/Trade/SweetDexComboBox.qml - Dex/Exchange/Trade/TickerSelector.qml - Dex/Exchange/Trade/Trade.qml - Dex/Exchange/Trade/TradeBox/BuyBox.qml - Dex/Exchange/Trade/TradeBox/OrderForm.qml - Dex/Exchange/Trade/TradeBox/SellBox.qml - Dex/Exchange/Trade/Trading/Items/FeeInfo.qml - Dex/Exchange/Trade/Trading/Items/TotalView.qml - Dex/Exchange/Trade/Trading/TradeViewHeader.qml - Dex/Fiat/FiatRamp.qml - Dex/Graphics/Color.js - Dex/Graphics/qmldir - Dex/NoConnection.qml - Dex/Portfolio/Portfolio.qml - Dex/Screens/Dashboard.qml - Dex/Screens/qmldir - Dex/Screens/Startup/ImportWallet.qml - Dex/Screens/Startup/Logging.qml - Dex/Screens/Startup/Login.qml - Dex/Screens/Startup/Main.qml - Dex/Screens/Startup/NewWallet.qml - Dex/Screens/Startup/WalletsView.qml - Dex/Settings/AddCustomCoinModal.qml - Dex/Settings/CamouflagePasswordModal.qml - Dex/Settings/Combo_fiat.qml - Dex/Settings/DeleteWalletModal.qml - Dex/Settings/Languages.qml - Dex/Settings/RecoverSeedModal.qml - Dex/Settings/SettingsButton.qml - Dex/Settings/SettingModal.qml - Dex/Settings/Settings.qml - Dex/Sidebar/Bottom.qml - Dex/Sidebar/Center.qml - Dex/Sidebar/FigurativeLine.qml - Dex/Sidebar/Line.qml - Dex/Sidebar/Main.qml - Dex/Sidebar/qmldir - Dex/Sidebar/Top.qml - Dex/Support/FAQLine.qml - Dex/Support/Support.qml - Dex/Themes/CurrentTheme.qml - Dex/Themes/DefaultTheme.js - Dex/Themes/qmldir - Dex/Themes/ThemeData.qml - Dex/Wallet/AddressBook.qml - Dex/Wallet/AddressBookAddContactAddressModal.qml - Dex/Wallet/AddressBookEditContactModal.qml - Dex/Wallet/AddressBookNewContactCategoryModal.qml - Dex/Wallet/AddressBookNewContactModal.qml - Dex/Wallet/AddressBookSendWalletSelector.qml - Dex/Wallet/AddressBookWalletTypeList.qml - Dex/Wallet/AddressBookWalletTypeListModal.qml - Dex/Wallet/AddressBookWalletTypeListRow.qml - Dex/Wallet/AddressList.qml - Dex/Wallet/ClaimFaucetResultModal.qml - Dex/Wallet/ClaimRewardsModal.qml - Dex/Wallet/EnableCoinModal.qml - Dex/Wallet/Main.qml - Dex/Wallet/ReceiveModal.qml - Dex/Wallet/SendModal.qml - Dex/Wallet/SendModalContactList.qml - Dex/Wallet/SendResult.qml - Dex/Wallet/Sidebar.qml - Dex/Wallet/SidebarItemDelegate.qml - Dex/Wallet/TransactionDetailsModal.qml - Dex/Wallet/Transactions.qml - Dex/Wallet/Wallet.qml - Dex/Portfolio/AmountChart.qml - Dex/Portfolio/AssetPieChart.qml - Dex/Portfolio/PieItem.qml - Dex/Portfolio/SmartChartView.qml - Dex/Portfolio/AssetsList.qml - Dex/main.qml - qtquickcontrols2.conf - Dex/Components/PopupManager.qml - - diff --git a/ci_tools_atomic_dex/installer/osx/config/config.xml.in b/ci_tools_atomic_dex/installer/osx/config/config.xml.in index 44f7e2a80..ce75ba116 100644 --- a/ci_tools_atomic_dex/installer/osx/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/osx/config/config.xml.in @@ -1,7 +1,7 @@ ${DEX_DISPLAY_NAME} - 0.5.5.1 + 0.5.6 ${DEX_DISPLAY_NAME} Installer ${DEX_WEBSITE} ${DEX_COMPANY} diff --git a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in index dacaa60bd..89c8e81c2 100644 --- a/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/osx/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.5.1 - 2022-05-11 + 0.5.6 + 2022-07-12 diff --git a/ci_tools_atomic_dex/installer/windows/config/config.xml.in b/ci_tools_atomic_dex/installer/windows/config/config.xml.in index 2c2e2a3e2..3ea5ee772 100644 --- a/ci_tools_atomic_dex/installer/windows/config/config.xml.in +++ b/ci_tools_atomic_dex/installer/windows/config/config.xml.in @@ -1,7 +1,7 @@ @DEX_DISPLAY_NAME@ - 0.5.5.1 + 0.5.6 @DEX_DISPLAY_NAME@ Installer @DEX_WEBSITE@ @DEX_COMPANY@ diff --git a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in index dacaa60bd..89c8e81c2 100644 --- a/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in +++ b/ci_tools_atomic_dex/installer/windows/packages/com.komodoplatform.atomicdex/meta/package.xml.in @@ -2,8 +2,8 @@ ${DEX_DISPLAY_NAME} Install ${DEX_DISPLAY_NAME}. - 0.5.5.1 - 2022-05-11 + 0.5.6 + 2022-07-12 diff --git a/ci_tools_atomic_dex/vcpkg-custom-ports b/ci_tools_atomic_dex/vcpkg-custom-ports index 15ad59b29..f20c053d1 160000 --- a/ci_tools_atomic_dex/vcpkg-custom-ports +++ b/ci_tools_atomic_dex/vcpkg-custom-ports @@ -1 +1 @@ -Subproject commit 15ad59b2928caaaac104702ee5b46d0ae5c3da71 +Subproject commit f20c053d1b47957af9c50aa34be45c69dfdcc1a4 diff --git a/cmake/dex_generate_qrc.cmake b/cmake/dex_generate_qrc.cmake new file mode 100644 index 000000000..e242abb7d --- /dev/null +++ b/cmake/dex_generate_qrc.cmake @@ -0,0 +1,40 @@ +function(dex_generate_qrc directory output) + cmake_parse_arguments( + GENERATE_QRC + "" + "PATH_PREFIX" + "FILES_TO_EXCLUDE;FILES" + ${ARGN} + ) + + set(resources) + file(GLOB_RECURSE resources ${directory}/* ${directory}/*/*) + + file(WRITE ${directory}/qml.qrc "\n") + file(APPEND ${directory}/qml.qrc " \n") + foreach(res ${resources}) + set(excluded FALSE) + foreach(file_to_exclude ${GENERATE_QRC_FILES_TO_EXCLUDE}) + set(find_res) + string(FIND ${res} ${file_to_exclude} find_res) + if (${find_res} GREATER -1) + set(excluded TRUE) + break() + endif () + endforeach() + if (excluded) + continue() + endif () + string(REPLACE ${directory}/ "" res ${res}) + file(APPEND ${directory}/qml.qrc " ${res}\n") + endforeach() + foreach(res ${GENERATE_QRC_FILES}) + string(REPLACE ${directory}/ "" res ${res}) + file(APPEND ${directory}/qml.qrc " ${res}\n") + endforeach() + file(APPEND ${directory}/qml.qrc " \n") + file(APPEND ${directory}/qml.qrc "\n") + + set(${output} ${directory}/qml.qrc PARENT_SCOPE) + +endfunction() \ No newline at end of file diff --git a/cmake/install/linux/linux_post_install.cmake b/cmake/install/linux/linux_post_install.cmake index e0b7c1690..246a03f62 100644 --- a/cmake/install/linux/linux_post_install.cmake +++ b/cmake/install/linux/linux_post_install.cmake @@ -56,8 +56,8 @@ foreach (current_lib ${LIST_LIBS}) file(COPY ${current_lib} DESTINATION ${PROJECT_LIB_PATH}) endforeach () message(STATUS "Executing linuxdeployqt to fix dependencies") -message(STATUS "Executing cmd: [${LINUX_DEPLOY_PATH} ${PROJECT_BIN_PATH} -qmldir=${PROJECT_QML_DIR} -bundle-non-qt-libs -exclude-libs="libnss3.so,libnssutil3.so" -unsupported-allow-new-glibc -no-copy-copyright-files -verbose=1 -extra-plugins=iconengines,platformthemes/libqgtk3.so -appimage]") -execute_process(COMMAND ${LINUX_DEPLOY_PATH} ${PROJECT_BIN_PATH} -qmldir=${PROJECT_QML_DIR} -bundle-non-qt-libs -exclude-libs="libnss3.so,libnssutil3.so" -unsupported-allow-new-glibc -no-copy-copyright-files -verbose=1 -extra-plugins=iconengines,platformthemes/libqgtk3.so -appimage +message(STATUS "Executing cmd: [${LINUX_DEPLOY_PATH} ${PROJECT_BIN_PATH} -qmldir=${PROJECT_QML_DIR} -bundle-non-qt-libs -exclude-libs='libnss3.so,libnssutil3.so' -unsupported-allow-new-glibc -no-copy-copyright-files -verbose=1 -extra-plugins=iconengines,platformthemes/libqgtk3.so -appimage]") +execute_process(COMMAND ${LINUX_DEPLOY_PATH} ${PROJECT_BIN_PATH} -qmldir=${PROJECT_QML_DIR} -bundle-non-qt-libs -exclude-libs='libnss3.so,libnssutil3.so' -unsupported-allow-new-glibc -no-copy-copyright-files -verbose=1 -extra-plugins=iconengines,platformthemes/libqgtk3.so -appimage WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) diff --git a/cmake/install/macos/dex_install.cmake b/cmake/install/macos/dex_install.cmake index aa4e9bdc0..96f48384a 100644 --- a/cmake/install/macos/dex_install.cmake +++ b/cmake/install/macos/dex_install.cmake @@ -4,8 +4,8 @@ if (APPLE) MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}" RESOURCE ${ICON} MACOSX_BUNDLE_ICON_FILE dex-logo - MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.5.1 - MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.5.1 + MACOSX_BUNDLE_SHORT_VERSION_STRING 0.5.6 + MACOSX_BUNDLE_LONG_VERSION_STRING 0.5.6 MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in") add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND diff --git a/cmake/install/macos/osx_post_install.cmake b/cmake/install/macos/osx_post_install.cmake index b01cc7506..a226342a6 100644 --- a/cmake/install/macos/osx_post_install.cmake +++ b/cmake/install/macos/osx_post_install.cmake @@ -98,7 +98,7 @@ endif () file(COPY ${CMAKE_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.dmg DESTINATION ${TARGET_APP_PATH}) get_filename_component(QT_ROOT_DIR $ENV{QT_ROOT} DIRECTORY) -set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.3/bin) +set(IFW_BINDIR ${QT_ROOT_DIR}/Tools/QtInstallerFramework/4.4/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "Generating ${DEX_PROJECT_NAME}.7z with [${IFW_BINDIR}/archivegen ${DEX_PROJECT_NAME}.7z ${DEX_PROJECT_NAME}.app] from directory: ${CMAKE_CURRENT_SOURCE_DIR}/bin") diff --git a/cmake/install/windows/windows_post_install.cmake b/cmake/install/windows/windows_post_install.cmake index 5613a15b0..6867250ad 100644 --- a/cmake/install/windows/windows_post_install.cmake +++ b/cmake/install/windows/windows_post_install.cmake @@ -58,7 +58,7 @@ execute_process(COMMAND powershell.exe -File ${PROJECT_ROOT_DIR}/ci_tools_atomic message(STATUS "manifest output: ${MANIFEST_RESULT} ${MANIFEST_OUTPUT} ${MANIFEST_ERROR}") message(STATUS "Creating Installer") -set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.3/bin) +set(IFW_BINDIR $ENV{QT_ROOT}/Tools/QtInstallerFramework/4.4/bin) message(STATUS "IFW_BIN PATH IS ${IFW_BINDIR}") if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${DEX_PROJECT_NAME}.7z) message(STATUS "command is: [${IFW_BINDIR}/archivegen.exe ${DEX_PROJECT_NAME}.7z .]") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 25ab4e6aa..417e52afc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,5 @@ include(DEX_NEW_LIB) +include(dex_generate_qrc) # Core target DEX_NEW_LIB(core INTERFACE @@ -22,6 +23,7 @@ DEX_NEW_LIB(core INTERFACE INTERFACE_DEFS ENTT_API_EXPORT) target_precompile_headers(${PROJECT_NAME}_core INTERFACE core/atomicdex/pch.hpp) + if (APPLE) set_source_files_properties(core/atomicdex/platform/osx/manager.mm PROPERTIES SKIP_PRECOMPILE_HEADERS ON) macro(adex_add_framework fwname appname) @@ -62,6 +64,17 @@ qt5_create_translation(QM_FILES message(STATUS "QM FILES -> ${QM_FILES}") message(STATUS "TS FILES -> ${TS_FILES}") +set(qml_qrc) +set(assets_qrc) +set(imports_qrc ${CMAKE_SOURCE_DIR}/atomic_defi_design/imports/qml.qrc) +dex_generate_qrc(${CMAKE_SOURCE_DIR}/atomic_defi_design/Dex qml_qrc + PATH_PREFIX "Dex" + FILES_TO_EXCLUDE ".gitignore;.DS_Store;.qrc") +dex_generate_qrc(${CMAKE_SOURCE_DIR}/atomic_defi_design/assets assets_qrc + PATH_PREFIX "assets" + FILES_TO_EXCLUDE ".gitignore;.DS_Store;CONTRIBUTING.txt;FONTLOG.txt;LICENCE-FAQ.txt;LICENCE.txt;README.txt;TRADEMARKS.txt;.ts;.qm;.qrc" + FILES "languages/atomic_defi_en.qm;languages/atomic_defi_fr.qm;languages/atomic_defi_ru.qm;languages/atomic_defi_tr.qm") + # Main executable add_executable(${PROJECT_NAME} MACOSX_BUNDLE @@ -73,8 +86,9 @@ add_executable(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/cmake/install/windows/dex.rc ##! QRC - ${CMAKE_SOURCE_DIR}/atomic_defi_design/qml.qrc - ${CMAKE_SOURCE_DIR}/atomic_defi_design/imports/qml.qrc + ${qml_qrc} + ${assets_qrc} + ${imports_qrc} ##! Linguistic ${QM_FILES} @@ -103,8 +117,6 @@ add_executable(${PROJECT_NAME}_tests MACOSX_BUNDLE ${ICON} tests/api/komodo_prices/komodo.prices.tests.cpp tests/api/mm2/mm2.rpc.trade.preimage.tests.cpp tests/api/mm2/mm2.fraction.tests.cpp - #tests/api/github/github.api.tests.cpp - #tests/api/checksum/checksum.api.tests.cpp ##! Utilities tests/utilities/qt.utilities.tests.cpp diff --git a/src/app/app.cpp b/src/app/app.cpp index f47a8e2e0..07922b0fc 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -40,7 +40,6 @@ #include "app.hpp" #include "atomicdex/services/exporter/exporter.service.hpp" #include "atomicdex/services/mm2/auto.update.maker.order.service.hpp" -//#include "atomicdex/services/price/coingecko/coingecko.provider.hpp" #include "atomicdex/services/price/komodo_prices/komodo.prices.provider.hpp" #include "atomicdex/services/price/coingecko/coingecko.wallet.charts.hpp" #include "atomicdex/services/price/coinpaprika/coinpaprika.provider.hpp" @@ -54,8 +53,7 @@ namespace namespace atomic_dex { - void - atomic_dex::application::change_state([[maybe_unused]] int visibility) + void atomic_dex::application::change_state([[maybe_unused]] int visibility) { /*#ifdef __APPLE__ { @@ -66,8 +64,7 @@ namespace atomic_dex #endif*/ } - bool - atomic_dex::application::enable_coins(const QStringList& coins) + bool atomic_dex::application::enable_coins(const QStringList& coins) { auto enableable_coins_count = entity_registry_.template ctx().value("MaximumNbCoinsEnabled").toULongLong(); if (enableable_coins_count < coins.size() + get_portfolio_page()->get_global_cfg()->get_enabled_coins().size()) @@ -101,14 +98,12 @@ namespace atomic_dex return true; } - bool - atomic_dex::application::enable_coin(const QString& coin) + bool atomic_dex::application::enable_coin(const QString& coin) { return enable_coins(QStringList{coin}); } - bool - application::disable_coins(const QStringList& coins) + bool application::disable_coins(const QStringList& coins) { QString primary_coin = QString::fromStdString(g_primary_dex_coin); QString secondary_coin = QString::fromStdString(g_second_primary_dex_coin); @@ -152,8 +147,7 @@ namespace atomic_dex return true; } - bool - application::disable_no_balance_coins() + bool application::disable_no_balance_coins() { auto* portfolio_page = get_portfolio_page(); auto* portfolio_mdl = portfolio_page->get_portfolio(); @@ -170,8 +164,7 @@ namespace atomic_dex return disable_coins(coins_to_disable); } - bool - application::has_coins_with_balance() + bool application::has_coins_with_balance() { auto* portfolio_page = get_portfolio_page(); auto* portfolio_mdl = portfolio_page->get_portfolio(); @@ -181,14 +174,12 @@ namespace atomic_dex return ranges::any_of(portfolio_data, functor); } - bool - atomic_dex::application::first_run() + bool atomic_dex::application::first_run() { return qt_wallet_manager::get_wallets().empty(); } - void - application::launch() + void application::launch() { SPDLOG_INFO("Launch the application"); this->system_manager_.start(); @@ -197,8 +188,7 @@ namespace atomic_dex timer->start(g_timeout_q_timer_ms); } - QString - atomic_dex::application::get_mnemonic() + QString atomic_dex::application::get_mnemonic() { std::array data{}; boost::random_device device; @@ -211,8 +201,7 @@ namespace atomic_dex return output; } - void - application::tick() + void application::tick() { this->process_one_frame(); if (m_event_actions[events_action::need_a_full_refresh_of_mm2]) @@ -293,32 +282,27 @@ namespace atomic_dex } } - mm2_service& - application::get_mm2() + mm2_service& application::get_mm2() { return this->system_manager_.get_system(); } - entt::dispatcher& - application::get_dispatcher() + entt::dispatcher& application::get_dispatcher() { return this->dispatcher_; } - const entt::registry& - application::get_registry() const + const entt::registry& application::get_registry() const { return this->entity_registry_; } - entt::registry& - application::get_registry() + entt::registry& application::get_registry() { return this->entity_registry_; } - void - application::post_handle_settings() + void application::post_handle_settings() { QSettings& settings = get_registry().ctx(); if (settings.value("AutomaticUpdateOrderBot", false).toBool()) @@ -373,10 +357,7 @@ namespace atomic_dex // system_manager_.create_system(system_manager_); //system_manager_.create_system(system_manager_); system_manager_.create_system(); - auto& self_update_system = system_manager_.create_system(); -#if !defined(Q_OS_WINDOWS) - self_update_system.disable(); -#endif + system_manager_.create_system(); system_manager_.create_system(system_manager_); system_manager_.create_system(system_manager_); system_manager_.create_system( @@ -407,36 +388,31 @@ namespace atomic_dex } } - bool - application::do_i_have_enough_funds(const QString& ticker, const QString& amount) const + bool application::do_i_have_enough_funds(const QString& ticker, const QString& amount) const { t_float_50 amount_f = safe_float(amount.toStdString()); return get_mm2().do_i_have_enough_funds(ticker.toStdString(), amount_f); } - const mm2_service& - application::get_mm2() const + const mm2_service& application::get_mm2() const { return this->system_manager_.get_system(); } - QString - application::get_balance(const QString& coin) + QString application::get_balance(const QString& coin) { std::error_code ec; auto res = get_mm2().my_balance(coin.toStdString(), ec); return QString::fromStdString(res); } - void - application::on_mm2_initialized_event([[maybe_unused]] const mm2_initialized& evt) + void application::on_mm2_initialized_event([[maybe_unused]] const mm2_initialized& evt) { SPDLOG_DEBUG("{} l{}", __FUNCTION__, __LINE__); system_manager_.get_system().set_status("enabling_coins"); } - void - application::refresh_orders_and_swaps() + void application::refresh_orders_and_swaps() { auto& mm2 = get_mm2(); if (mm2.is_mm2_running()) @@ -445,8 +421,7 @@ namespace atomic_dex } } - bool - application::disconnect() + bool application::disconnect() { //! Clears pending events while (not this->m_actions_queue.empty()) @@ -504,8 +479,7 @@ namespace atomic_dex return fs::remove(utils::get_atomic_dex_config_folder() / "default.wallet"); } - void - application::connect_signals() + void application::connect_signals() { SPDLOG_INFO("connecting signals"); qobject_cast(m_manager_models.at("notifications"))->connect_signals(); @@ -519,8 +493,7 @@ namespace atomic_dex // get_dispatcher().sink().connect<&application::on_process_swaps_finished_event>(*this); } - void - application::set_qt_app(std::shared_ptr app, QQmlApplicationEngine* engine) + void application::set_qt_app(std::shared_ptr app, QQmlApplicationEngine* engine) { this->m_app = app; connect(m_app.get(), SIGNAL(aboutToQuit()), this, SLOT(exit_handler())); @@ -530,8 +503,7 @@ namespace atomic_dex settings_system.init_lang(); } - QString - application::recover_fund(const QString& uuid) + QString application::recover_fund(const QString& uuid) { QString result; @@ -759,10 +731,9 @@ namespace atomic_dex //! update checker namespace atomic_dex { - self_update_service* - application::get_self_update_service() const + update_checker_service* application::get_update_checker_service() const { - auto ptr = const_cast(std::addressof(system_manager_.get_system())); + auto ptr = const_cast(std::addressof(system_manager_.get_system())); assert(ptr != nullptr); return ptr; } diff --git a/src/app/app.hpp b/src/app/app.hpp index 82c1b11af..5ad906ff5 100644 --- a/src/app/app.hpp +++ b/src/app/app.hpp @@ -48,7 +48,7 @@ #include "atomicdex/services/ip/ip.checker.service.hpp" #include "atomicdex/services/mm2/mm2.service.hpp" #include "atomicdex/services/price/global.provider.hpp" -#include "atomicdex/services/update/self.update.service.hpp" +#include "atomicdex/services/update/update.checker.service.hpp" namespace ag = antara::gaming; @@ -62,7 +62,7 @@ namespace atomic_dex Q_OBJECT //! Properties - Q_PROPERTY(addressbook_page* addressbook_pg READ get_addressbook_page NOTIFY addressbookPageChanged) + Q_PROPERTY(addressbook_page* addressbookPg READ get_addressbook_page NOTIFY addressbookPageChanged) Q_PROPERTY(orders_model* orders_mdl READ get_orders NOTIFY ordersChanged) Q_PROPERTY(portfolio_page_ptr portfolio_pg READ get_portfolio_page NOTIFY portfolioPageChanged) Q_PROPERTY(notification_manager* notification_mgr READ get_notification_manager) @@ -73,7 +73,7 @@ namespace atomic_dex Q_PROPERTY(wallet_page* wallet_pg READ get_wallet_page NOTIFY walletPageChanged) Q_PROPERTY(settings_page* settings_pg READ get_settings_page NOTIFY settingsPageChanged) Q_PROPERTY(qt_wallet_manager* wallet_mgr READ get_wallet_mgr NOTIFY walletMgrChanged) - Q_PROPERTY(self_update_service* self_update_service READ get_self_update_service NOTIFY selfUpdateServiceChanged) + Q_PROPERTY(update_checker_service* updateCheckerService READ get_update_checker_service NOTIFY updateCheckerServiceChanged) //! Private function void connect_signals(); @@ -102,65 +102,55 @@ namespace atomic_dex std::atomic_bool m_primary_coin_fully_enabled{false}; public: - //! Deleted operation application(application& other) = delete; application(application&& other) = delete; application& operator=(application& other) = delete; application& operator=(application&& other) = delete; - //! Constructor explicit application(QObject* pParent = nullptr) ; - ~application() final = default; + ~application() final = default; - //! Post constructor void post_handle_settings(); - //! entt::dispatcher events - void on_ticker_balance_updated_event(const ticker_balance_updated&) ; - void on_fiat_rate_updated(const fiat_rate_updated&) ; - void on_coin_fully_initialized_event(const coin_fully_initialized&) ; - void on_mm2_initialized_event(const mm2_initialized&) ; - void on_process_orders_and_swaps_finished_event(const process_swaps_and_orders_finished&) ; - - //! Properties Getter - mm2_service& get_mm2() ; - [[nodiscard]] const mm2_service& get_mm2() const ; - entt::dispatcher& get_dispatcher() ; - const entt::registry& get_registry() const ; - entt::registry& get_registry() ; - [[nodiscard]] addressbook_page* get_addressbook_page() const ; - [[nodiscard]] portfolio_page* get_portfolio_page() const ; - [[nodiscard]] wallet_page* get_wallet_page() const ; - orders_model* get_orders() const ; - notification_manager* get_notification_manager() const ; - trading_page* get_trading_page() const ; - settings_page* get_settings_page() const ; - qt_wallet_manager* get_wallet_mgr() const ; - internet_service_checker* get_internet_checker() const ; - ip_service_checker* get_ip_checker() const ; - self_update_service* get_self_update_service() const; - exporter_service* get_exporter_service() const ; - - //! Properties Setter - void set_qt_app(std::shared_ptr app, QQmlApplicationEngine* qml_engine) ; - - //! Launch the internal loop for the SDK. + void on_ticker_balance_updated_event(const ticker_balance_updated&); + void on_fiat_rate_updated(const fiat_rate_updated&); + void on_coin_fully_initialized_event(const coin_fully_initialized&); + void on_mm2_initialized_event(const mm2_initialized&); + void on_process_orders_and_swaps_finished_event(const process_swaps_and_orders_finished&); + + mm2_service& get_mm2(); + [[nodiscard]] const mm2_service& get_mm2() const; + entt::dispatcher& get_dispatcher(); + const entt::registry& get_registry() const; + entt::registry& get_registry(); + [[nodiscard]] addressbook_page* get_addressbook_page() const; + [[nodiscard]] portfolio_page* get_portfolio_page() const; + [[nodiscard]] wallet_page* get_wallet_page() const; + orders_model* get_orders() const; + notification_manager* get_notification_manager() const; + trading_page* get_trading_page() const; + settings_page* get_settings_page() const; + qt_wallet_manager* get_wallet_mgr() const; + internet_service_checker* get_internet_checker() const; + ip_service_checker* get_ip_checker() const; + update_checker_service* get_update_checker_service() const; + exporter_service* get_exporter_service() const; + + void set_qt_app(std::shared_ptr app, QQmlApplicationEngine* qml_engine); + void launch(); - //! Bind to the QML Worlds Q_INVOKABLE static void restart(); - //! Wallet Manager QML API Bindings, this internally call the `atomic_dex::qt_wallet_manager` + // Wallet Manager QML API Bindings, this internally call the `atomic_dex::qt_wallet_manager` Q_INVOKABLE bool is_pin_cfg_enabled() const ; - //! Misc Q_INVOKABLE static QString to_eth_checksum_qt(const QString& eth_lowercase_address); Q_INVOKABLE static void change_state(int visibility); //! Portfolio QML API Bindings Q_INVOKABLE QString recover_fund(const QString& uuid); - //! Others Q_INVOKABLE void refresh_orders_and_swaps(); Q_INVOKABLE static QString get_mnemonic(); Q_INVOKABLE static bool first_run(); @@ -175,7 +165,6 @@ namespace atomic_dex Q_INVOKABLE QString get_fiat_from_amount(const QString& ticker, const QString& amount); signals: - //! Signals to the QML Worlds void walletMgrChanged(); void coinInfoChanged(); void onWalletDefaultNameChanged(); @@ -184,7 +173,7 @@ namespace atomic_dex void portfolioPageChanged(); void walletPageChanged(); void ordersChanged(); - void selfUpdateServiceChanged(); + void updateCheckerServiceChanged(); void tradingPageChanged(); void settingsPageChanged(); void internetCheckerChanged(); diff --git a/src/core/atomicdex/api/github/github.api.cpp b/src/core/atomicdex/api/github/github.api.cpp deleted file mode 100644 index 81da7421f..000000000 --- a/src/core/atomicdex/api/github/github.api.cpp +++ /dev/null @@ -1,85 +0,0 @@ -//! 3rdParty -#include - -//! Project -#include "github.api.hpp" - -namespace atomic_dex::github_api -{ - const std::string api_remote_url{"https://api.github.com/"}; - const auto api_client = std::make_unique(FROM_STD_STR(api_remote_url)); - const std::string github_url{"https://github.com/"}; - const auto github_client = std::make_unique(FROM_STD_STR(github_url)); - - pplx::task get_repository_releases_async(const repository_releases_request& request) - { - web::http::http_request http_request; - web::uri_builder uri_builder; - - uri_builder.append_path(FROM_STD_STR("repos")); - uri_builder.append_path(FROM_STD_STR(request.owner)); - uri_builder.append_path(FROM_STD_STR(request.repository)); - uri_builder.append_path(FROM_STD_STR("releases")); - http_request.set_request_uri(uri_builder.to_uri()); - http_request.set_method(web::http::methods::GET); - return api_client->request(http_request); - } - - // Returns the asset element of the release which corresponds to your OS. - const auto get_matching_os_asset = [](const nlohmann::json& answer) - { - for (auto& asset : answer.at("assets")) - { - std::string asset_download_url = asset.at("browser_download_url"); - - if (asset_download_url.find( -#ifdef __APPLE__ - "osx.dmg" -#elif __linux__ - "linux.AppImage" -#elif _WIN32 - "windows.zip" -#endif - ) != std::string::npos) - { - return asset; - } - } - throw std::runtime_error("get_repository_releases_from_http_response: Cannot found a proper download url."); - }; - - std::vector get_repository_releases_from_http_response(const web::http::http_response& resp) - { - std::vector result{}; - const auto json_answer = nlohmann::json::parse(TO_STD_STR(resp.extract_string(true).get())); - - result.reserve(json_answer.size()); - for (auto& release_obj : json_answer) - { - const auto asset = get_matching_os_asset(release_obj); - - result.push_back(repository_release{ - .url = asset.at("browser_download_url"), - .assets_url = release_obj.at("assets_url"), - .name = asset.at("name"), - .tag_name = release_obj.at("tag_name")}); - } - return result; - } - - repository_release get_last_repository_release_from_http_response(const web::http::http_response& resp) - { - const std::string string_answer = TO_STD_STR(resp.extract_string(true).get()); - const auto json_answer = nlohmann::json::parse(string_answer); - - if (json_answer.empty()) - { - return repository_release{}; - } - - const auto asset = get_matching_os_asset(json_answer.at(0)); - - return repository_release{.url = asset.at("browser_download_url"), .assets_url = json_answer.at(0).at("assets_url"), - .name = asset.at("name"), .tag_name = json_answer.at(0).at("tag_name")}; - } -} diff --git a/src/core/atomicdex/api/github/github.api.hpp b/src/core/atomicdex/api/github/github.api.hpp deleted file mode 100644 index 67e71fad2..000000000 --- a/src/core/atomicdex/api/github/github.api.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#pragma once - -//! Std -#include //> std::string -#include //> std::vector - -//! Project -#include "atomicdex/utilities/cpprestsdk.utilities.hpp" - -namespace atomic_dex::github_api -{ - // Request sent to fetch a GitHub repository's releases. - struct repository_releases_request - { - std::string owner; - std::string repository; - }; - - // Sends a request to GitHub to fetch every existing release of a valid repository. - [[nodiscard]] pplx::task get_repository_releases_async(const repository_releases_request& request); - - // GitHub repository release information. - struct repository_release - { - std::string url; - std::string assets_url; - std::string name; - std::string tag_name; - }; - - // Parses the http response returned by `get_repository_releases_async`. Be careful, resp must have returned 200. - [[nodiscard]] std::vector get_repository_releases_from_http_response(const web::http::http_response& resp); - - // Parses only the first release returned by `get_repository_releases_async`. Be careful, resp must have returned 200. - [[nodiscard]] repository_release get_last_repository_release_from_http_response(const web::http::http_response& resp); - - struct download_repository_release_request - { - std::string owner; - std::string repository; - std::string tag_name; - std::string name; - }; -} diff --git a/src/core/atomicdex/api/mm2/mm2.cpp b/src/core/atomicdex/api/mm2/mm2.cpp index b9beab57d..c35bee215 100644 --- a/src/core/atomicdex/api/mm2/mm2.cpp +++ b/src/core/atomicdex/api/mm2/mm2.cpp @@ -285,7 +285,7 @@ namespace mm2::api .base_amount = action == "Sell" ? base_amount : rel_amount, .rel_amount = action == "Sell" ? rel_amount : base_amount, .order_type = is_maker ? "maker" : "taker", - .human_date = QString::fromStdString(atomic_dex::utils::to_human_date(time_key / 1000, "%F %T")), + .human_date = QString::fromStdString(atomic_dex::utils::to_human_date(time_key / 1000, "%F %T")), .unix_timestamp = static_cast(time_key), .order_id = QString::fromStdString(key), .order_status = "matching", @@ -428,7 +428,7 @@ namespace mm2::api { const nlohmann::json& j_evt = content.at("event"); auto timestamp = content.at("timestamp").get(); - std::string human_date = atomic_dex::utils::to_human_date(timestamp / 1000, "%F %H:%M:%S"); + std::string human_date = atomic_dex::utils::to_human_date(timestamp / 1000, "%F %H:%M:%S"); auto evt_type = j_evt.at("type").get(); auto rate_bundler = @@ -473,6 +473,15 @@ namespace mm2::api jf_evt["time_diff"] = res; event_timestamp_registry["Started"] = ts2; // Started finished at this time total_time_in_ms += res; + + if (jf_evt.at("data").contains("taker_payment_lock")) + { + contents.paymentLock = jf_evt.at("data").at("taker_payment_lock").get() * 1000; + } + else if (jf_evt.at("data").contains("maker_payment_lock")) + { + contents.paymentLock = jf_evt.at("data").at("maker_payment_lock").get() * 1000; + } } if (idx > 0) diff --git a/src/core/atomicdex/api/mm2/rpc.withdraw.cpp b/src/core/atomicdex/api/mm2/rpc.withdraw.cpp index fbbb291aa..dd4b51b05 100644 --- a/src/core/atomicdex/api/mm2/rpc.withdraw.cpp +++ b/src/core/atomicdex/api/mm2/rpc.withdraw.cpp @@ -24,6 +24,12 @@ namespace mm2::api j["gas_limit"] = cfg.gas_limit.value_or(40); j["gas_price"] = std::stoi(cfg.gas_price.value()); } + else if (cfg.type == "otherGas") + { + j["type"] = "EthGas"; + j["gas"] = cfg.gas_limit.value_or(55000); + j["gas_price"] = std::stoi(cfg.gas_price.value()); + } else { j["amount"] = cfg.amount.value(); diff --git a/src/core/atomicdex/config/coins.cfg.cpp b/src/core/atomicdex/config/coins.cfg.cpp index ec4f7ccaa..7fd94b9c9 100644 --- a/src/core/atomicdex/config/coins.cfg.cpp +++ b/src/core/atomicdex/config/coins.cfg.cpp @@ -45,6 +45,7 @@ namespace atomic_dex cfg.minimal_claim_amount = cfg.is_claimable ? j.at("minimal_claim_amount").get() : "0"; j.at("active").get_to(cfg.active); j.at("currently_enabled").get_to(cfg.currently_enabled); + if (j.contains("coinpaprika_id")) { j.at("coinpaprika_id").get_to(cfg.coinpaprika_id); @@ -53,10 +54,25 @@ namespace atomic_dex { cfg.coinpaprika_id = "test-coin"; } + + if (j.contains("nomics_id")) + { + j.at("nomics_id").get_to(cfg.nomics_id); + } + else + { + cfg.nomics_id = "test-coin"; + } + if (j.contains("coingecko_id")) { j.at("coingecko_id").get_to(cfg.coingecko_id); } + else + { + cfg.coingecko_id = "test-coin"; + } + if (j.contains("is_custom_coin")) { cfg.is_custom_coin = true; diff --git a/src/core/atomicdex/config/coins.cfg.hpp b/src/core/atomicdex/config/coins.cfg.hpp index e705630d4..3c2d7f703 100644 --- a/src/core/atomicdex/config/coins.cfg.hpp +++ b/src/core/atomicdex/config/coins.cfg.hpp @@ -51,6 +51,7 @@ namespace atomic_dex bool active{false}; std::string coinpaprika_id{"test-coin"}; std::string coingecko_id{"test-coin"}; + std::string nomics_id{"test-coin"}; bool is_custom_coin{false}; std::string type; std::vector explorer_url; ///< usefull for transaction, take this url and append transaction id diff --git a/src/core/atomicdex/data/dex/qt.orders.data.hpp b/src/core/atomicdex/data/dex/qt.orders.data.hpp index 9fa08b3d5..f8348c6d6 100644 --- a/src/core/atomicdex/data/dex/qt.orders.data.hpp +++ b/src/core/atomicdex/data/dex/qt.orders.data.hpp @@ -46,6 +46,8 @@ namespace mm2::api //! eg: 1595406178 unsigned long long unix_timestamp; + unsigned long long paymentLock; + //! eg: b741646a-5738-4012-b5b0-dcd1375affd1 QString order_id; diff --git a/src/core/atomicdex/models/qt.addressbook.contact.model.cpp b/src/core/atomicdex/models/qt.addressbook.contact.model.cpp index 23965168a..4464d0e67 100644 --- a/src/core/atomicdex/models/qt.addressbook.contact.model.cpp +++ b/src/core/atomicdex/models/qt.addressbook.contact.model.cpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -14,13 +14,10 @@ * * ******************************************************************************/ -// STD #include -// Qt #include -// Project #include "atomicdex/pages/qt.portfolio.page.hpp" #include "atomicdex/utilities/qt.utilities.hpp" #include "atomicdex/managers/addressbook.manager.hpp" //> addressbook_manager @@ -48,8 +45,7 @@ namespace atomic_dex // QAbstractListModel Functions namespace atomic_dex { - QVariant - addressbook_contact_model::data(const QModelIndex& index, int role) const + QVariant addressbook_contact_model::data(const QModelIndex& index, int role) const { if (!hasIndex(index.row(), index.column(), index.parent())) { @@ -72,14 +68,12 @@ namespace atomic_dex } } - int - addressbook_contact_model::rowCount([[maybe_unused]] const QModelIndex& parent) const + int addressbook_contact_model::rowCount([[maybe_unused]] const QModelIndex& parent) const { return m_address_entries.size(); } - QHash - addressbook_contact_model::roleNames() const + QHash addressbook_contact_model::roleNames() const { return { {AddressTypeRole, "address_type"}, @@ -92,37 +86,33 @@ namespace atomic_dex // Getters/Setters namespace atomic_dex { - const QString& - addressbook_contact_model::get_name() const + const QString& addressbook_contact_model::get_name() const { return m_name; } - void - addressbook_contact_model::set_name(const QString& name) + void addressbook_contact_model::set_name(const QString& name) { auto& addrbook_manager = m_system_manager.get_system(); if (name != m_name) { - if (!m_name.isEmpty()) + if (!name.isEmpty()) { addrbook_manager.change_contact_name(m_name.toStdString(), name.toStdString()); addrbook_manager.save_configuration(); + m_name = name; + emit nameChanged(); } - m_name = name; - emit nameChanged(); } } - const QStringList& - addressbook_contact_model::get_categories() const + const QStringList& addressbook_contact_model::get_categories() const { return m_categories; } - void - addressbook_contact_model::set_categories(QStringList categories) + void addressbook_contact_model::set_categories(QStringList categories) { m_categories = std::move(categories); emit categoriesChanged(); @@ -142,8 +132,7 @@ namespace atomic_dex // QML API namespace atomic_dex { - bool - addressbook_contact_model::add_category(const QString& category) + bool addressbook_contact_model::addCategory(const QString& category) { if (m_categories.contains(category)) { @@ -154,15 +143,13 @@ namespace atomic_dex return true; } - void - addressbook_contact_model::remove_category(const QString& category) + void addressbook_contact_model::removeCategory(const QString& category) { m_categories.removeOne(category); emit categoriesChanged(); } - bool - addressbook_contact_model::add_address_entry(QString type, QString key, QString value) + bool addressbook_contact_model::addAddressEntry(QString type, QString key, QString value) { // Returns false if the given key already exists. auto res = match(index(0), AddressTypeAndKeyRole, type + key, 1, Qt::MatchFlag::MatchExactly); @@ -182,8 +169,7 @@ namespace atomic_dex return true; } - void - addressbook_contact_model::remove_address_entry(const QString& type, const QString& key) + void addressbook_contact_model::removeAddressEntry(const QString& type, const QString& key) { auto res = match(index(0), AddressTypeAndKeyRole, type + key, 1, Qt::MatchFlag::MatchExactly); @@ -195,8 +181,7 @@ namespace atomic_dex } } - void - addressbook_contact_model::reload() + void addressbook_contact_model::reload() { // Clears model clear(); @@ -205,8 +190,7 @@ namespace atomic_dex populate(); } - void - addressbook_contact_model::save() + void addressbook_contact_model::save() { auto& addrbook_manager = m_system_manager.get_system(); diff --git a/src/core/atomicdex/models/qt.addressbook.contact.model.hpp b/src/core/atomicdex/models/qt.addressbook.contact.model.hpp index 07525ebae..c07a4ffec 100644 --- a/src/core/atomicdex/models/qt.addressbook.contact.model.hpp +++ b/src/core/atomicdex/models/qt.addressbook.contact.model.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -16,11 +16,9 @@ #pragma once -// 3rdParty Headers #include //> ENTT_API #include //> ag::ecs::system_manager -// Project Headers #include "qt.addressbook.contact.proxy.filter.model.hpp" namespace atomic_dex @@ -58,12 +56,12 @@ namespace atomic_dex [[nodiscard]] QHash roleNames() const final; // Getters/Setters - [[nodiscard]] const QString& get_name() const ; - void set_name(const QString& name) ; - [[nodiscard]] const QStringList& get_categories() const ; - void set_categories(QStringList categories) ; - [[nodiscard]] addressbook_contact_proxy_filter_model* get_proxy_filter() const ; - [[nodiscard]] const QVector& get_address_entries() const ; // Returns contact's current addresses. + [[nodiscard]] const QString& get_name() const; + void set_name(const QString& name); + [[nodiscard]] const QStringList& get_categories() const; + void set_categories(QStringList categories); + [[nodiscard]] addressbook_contact_proxy_filter_model* get_proxy_filter() const; + [[nodiscard]] const QVector& get_address_entries() const; // Returns contact's current addresses. // Loads this model data from the persistent data. void populate(); @@ -72,17 +70,17 @@ namespace atomic_dex void clear(); // QML API - Q_INVOKABLE bool add_category(const QString& category) ; // Adds a category to the current contact. - Q_INVOKABLE void remove_category(const QString& category) ; // Removes a category from the current contact. - Q_INVOKABLE bool add_address_entry(QString type, QString key, QString value) ; // Adds an address entry to the current contact. Returns false if the key already exists in the given wallet type, false otherwise. - Q_INVOKABLE void remove_address_entry(const QString& type, const QString& key) ; // Removes an address entry from the current contact. - Q_INVOKABLE void reload(); // Reinitializes data from the persistent data ignoring pending changes. - Q_INVOKABLE void save(); // Saves the current contact pending changes in the persistent data. + Q_INVOKABLE bool addCategory(const QString& category); // Adds a category to the current contact. + Q_INVOKABLE void removeCategory(const QString& category); // Removes a category from the current contact. + Q_INVOKABLE bool addAddressEntry(QString type, QString key, QString value); // Adds an address entry to the current contact. Returns false if the key already exists in the given wallet type, false otherwise. + Q_INVOKABLE void removeAddressEntry(const QString& type, const QString& key); // Removes an address entry from the current contact. + Q_INVOKABLE void reload(); // Reinitializes data from the persistent data ignoring pending changes. + Q_INVOKABLE void save(); // Saves the current contact pending changes in the persistent data. // QML API Properties Q_PROPERTY(QString name READ get_name WRITE set_name NOTIFY nameChanged) Q_PROPERTY(QStringList categories READ get_categories WRITE set_categories NOTIFY categoriesChanged) - Q_PROPERTY(addressbook_contact_proxy_filter_model* proxy_filter READ get_proxy_filter NOTIFY proxyFilterChanged) + Q_PROPERTY(addressbook_contact_proxy_filter_model* proxyFilter READ get_proxy_filter NOTIFY proxyFilterChanged) // QML API Properties Signals signals: diff --git a/src/core/atomicdex/models/qt.addressbook.contact.proxy.filter.model.hpp b/src/core/atomicdex/models/qt.addressbook.contact.proxy.filter.model.hpp index 24aee8ddd..21c427988 100644 --- a/src/core/atomicdex/models/qt.addressbook.contact.proxy.filter.model.hpp +++ b/src/core/atomicdex/models/qt.addressbook.contact.proxy.filter.model.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -49,8 +49,8 @@ namespace atomic_dex [[nodiscard]] bool lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const final; // Sorts address entries by type then by key. // QML API Properties - Q_PROPERTY(QString search_expression READ get_search_expression WRITE set_search_expression NOTIFY searchExpressionChanged) - Q_PROPERTY(QString filter_type READ get_filter_type WRITE set_filter_type NOTIFY filterTypeChanged) + Q_PROPERTY(QString searchExpression READ get_search_expression WRITE set_search_expression NOTIFY searchExpressionChanged) + Q_PROPERTY(QString filterType READ get_filter_type WRITE set_filter_type NOTIFY filterTypeChanged) // QML API Properties Signals signals: diff --git a/src/core/atomicdex/models/qt.addressbook.model.cpp b/src/core/atomicdex/models/qt.addressbook.model.cpp index 6a4d73cad..ed372b198 100644 --- a/src/core/atomicdex/models/qt.addressbook.model.cpp +++ b/src/core/atomicdex/models/qt.addressbook.model.cpp @@ -90,7 +90,7 @@ namespace atomic_dex } void - addressbook_model::remove_contact(const QString& name) + addressbook_model::removeContact(const QString& name) { auto& addrbook_manager = m_system_manager.get_system(); auto res = match(index(0), NameRole, name, 1, Qt::MatchFlag::MatchExactly); @@ -105,7 +105,7 @@ namespace atomic_dex } } - bool addressbook_model::add_contact(const QString& name) + bool addressbook_model::addContact(const QString& name) { auto& addrbook_manager = m_system_manager.get_system(); diff --git a/src/core/atomicdex/models/qt.addressbook.model.hpp b/src/core/atomicdex/models/qt.addressbook.model.hpp index 252e773f3..309d82bcd 100644 --- a/src/core/atomicdex/models/qt.addressbook.model.hpp +++ b/src/core/atomicdex/models/qt.addressbook.model.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -68,8 +68,8 @@ namespace atomic_dex [[nodiscard]] addressbook_proxy_model* get_addressbook_proxy_mdl() const ; // QML API - Q_INVOKABLE bool add_contact(const QString& name); - Q_INVOKABLE void remove_contact(const QString& name); + Q_INVOKABLE bool addContact(const QString& name); + Q_INVOKABLE void removeContact(const QString& name); // QML API properties Q_PROPERTY(addressbook_proxy_model* proxy READ get_addressbook_proxy_mdl NOTIFY addressbookProxyChanged); diff --git a/src/core/atomicdex/models/qt.addressbook.proxy.filter.model.hpp b/src/core/atomicdex/models/qt.addressbook.proxy.filter.model.hpp index b2c59a521..b7f3d2e01 100644 --- a/src/core/atomicdex/models/qt.addressbook.proxy.filter.model.hpp +++ b/src/core/atomicdex/models/qt.addressbook.proxy.filter.model.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -51,12 +51,12 @@ namespace atomic_dex void set_type_filter(QString value) ; // QML Properties - Q_PROPERTY(QString search_exp READ get_search_exp WRITE set_search_exp NOTIFY search_expChanged) - Q_PROPERTY(QString type_filter READ get_type_filter WRITE set_type_filter NOTIFY typeFilterChanged) + Q_PROPERTY(QString searchExp READ get_search_exp WRITE set_search_exp NOTIFY searchExpChanged) + Q_PROPERTY(QString typeFilter READ get_type_filter WRITE set_type_filter NOTIFY typeFilterChanged) // QML Properties Signals signals: - void search_expChanged(); + void searchExpChanged(); void typeFilterChanged(); }; } // namespace atomic_dex diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp index 1012b7e9e..79205dafc 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.cpp @@ -35,6 +35,7 @@ namespace {"ticker", QString::fromStdString(coin.ticker)}, {"name", QString::fromStdString(coin.name)}, {"type", QString::fromStdString(coin.type)}, + {"nomics_id", QString::fromStdString(coin.nomics_id)}, {"explorer_url", QJsonArray::fromStringList(atomic_dex::vector_std_string_to_qt_string_list(coin.explorer_url))}, {"tx_uri", QString::fromStdString(coin.tx_uri)}, {"address_uri", QString::fromStdString(coin.address_url)}, diff --git a/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp b/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp index e14f5bc20..94587cd6f 100644 --- a/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp +++ b/src/core/atomicdex/models/qt.global.coins.cfg.model.hpp @@ -94,7 +94,7 @@ namespace atomic_dex Q_INVOKABLE QStringList get_checked_coins() const; Q_INVOKABLE QVariant get_coin_info(const QString& ticker) const; Q_INVOKABLE QString get_parent_coin(const QString& ticker) const; - Q_INVOKABLE bool is_coin_type(const QString& ticker) const; // Tells if the given string is a valid coin type (e.g. QRC-20) + Q_INVOKABLE bool is_coin_type(const QString& ticker) const; // Tells if the given string is a valid coin type (e.g. QRC-20) // QML API properties Q_PROPERTY(global_coins_cfg_proxy_model* all_disabled_proxy READ get_all_disabled_proxy NOTIFY all_disabled_proxyChanged) diff --git a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp index ef97b090c..1b6122709 100644 --- a/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp +++ b/src/core/atomicdex/models/qt.orderbook.proxy.model.cpp @@ -168,12 +168,12 @@ namespace atomic_dex const auto coin_info = this->m_system_mgr.get_system().get_global_cfg()->get_coin_info(ticker); t_float_50 limit("10000"); bool is_cex_id_available = this->sourceModel()->data(idx, orderbook_model::HaveCEXIDRole).toBool(); - + const auto volume = provider.get_total_volume(utils::retrieve_main_ticker(ticker)); if (coin_info.ticker.empty() || coin_info.wallet_only) //< this means it's not present in our cfg - skipping { return false; } - if (is_cex_id_available && (rates > 100 || fiat_price <= 0 || ((safe_float(provider.get_total_volume(ticker)) < limit) && coin_info.coin_type != CoinType::SmartChain))) + if (is_cex_id_available && (rates > 100 || fiat_price <= 0 || ((safe_float(volume) < limit) && coin_info.coin_type != CoinType::SmartChain))) { return false; } diff --git a/src/core/atomicdex/models/qt.orders.model.cpp b/src/core/atomicdex/models/qt.orders.model.cpp index 2c73a8b3b..64ab7c072 100644 --- a/src/core/atomicdex/models/qt.orders.model.cpp +++ b/src/core/atomicdex/models/qt.orders.model.cpp @@ -91,6 +91,9 @@ namespace atomic_dex case UnixTimestampRole: item.unix_timestamp = value.toULongLong(); break; + case PaymentLockRole: + item.paymentLock = value.toULongLong(); + break; case OrderIdRole: item.order_id = value.toString(); break; @@ -169,6 +172,8 @@ namespace atomic_dex return item.human_date; case UnixTimestampRole: return item.unix_timestamp; + case PaymentLockRole: + return item.paymentLock; case OrderIdRole: return item.order_id; case OrderStatusRole: @@ -232,6 +237,7 @@ namespace atomic_dex {IsMakerRole, "is_maker"}, {HumanDateRole, "date"}, {UnixTimestampRole, "timestamp"}, + {PaymentLockRole, "paymentLock"}, {OrderIdRole, "order_id"}, {OrderStatusRole, "order_status"}, {MakerPaymentIdRole, "maker_payment_id"}, @@ -418,6 +424,7 @@ namespace atomic_dex auto&& [prev_value, new_value, is_change] = update_value(OrdersRoles::OrderStatusRole, contents.order_status, idx, *this); update_value(OrdersRoles::UnixTimestampRole, contents.unix_timestamp, idx, *this); + update_value(OrdersRoles::PaymentLockRole, contents.paymentLock, idx, *this); auto&& [prev_value_d, new_value_d, _] = update_value(OrdersRoles::HumanDateRole, contents.human_date, idx, *this); if (is_change) { @@ -709,10 +716,15 @@ namespace atomic_dex ::mm2::api::to_json(json_data, req); batch.push_back(json_data); + SPDLOG_DEBUG("recover_funds_of_swap request: {}", json_data.dump(-1)); + auto answer_functor = [this](web::http::http_response resp) { nlohmann::json j_out = nlohmann::json::object(); std::string body = TO_STD_STR(resp.extract_string(true).get()); + + SPDLOG_DEBUG("recover_funds_of_swap answer received: {}", body); + if (resp.status_code() == web::http::status_codes::OK) { auto answers = nlohmann::json::parse(body); diff --git a/src/core/atomicdex/models/qt.orders.model.hpp b/src/core/atomicdex/models/qt.orders.model.hpp index f8f065900..b3dfbe7b8 100644 --- a/src/core/atomicdex/models/qt.orders.model.hpp +++ b/src/core/atomicdex/models/qt.orders.model.hpp @@ -66,6 +66,7 @@ namespace atomic_dex IsMakerRole, HumanDateRole, UnixTimestampRole, + PaymentLockRole, OrderIdRole, OrderStatusRole, MakerPaymentIdRole, diff --git a/src/core/atomicdex/models/qt.orders.proxy.model.cpp b/src/core/atomicdex/models/qt.orders.proxy.model.cpp index 7409d7cd4..8dd472fff 100644 --- a/src/core/atomicdex/models/qt.orders.proxy.model.cpp +++ b/src/core/atomicdex/models/qt.orders.proxy.model.cpp @@ -63,6 +63,8 @@ namespace atomic_dex break; case orders_model::UnixTimestampRole: return left_data.toULongLong() < right_data.toULongLong(); + case orders_model::PaymentLockRole: + break; case orders_model::OrderIdRole: break; case orders_model::OrderStatusRole: @@ -280,7 +282,7 @@ namespace atomic_dex SPDLOG_INFO("exporting csv with path: {}", csv_path.string()); std::ofstream ofs(csv_path.string(), std::ios::out | std::ios::trunc); int nb_items = this->rowCount(); - ofs << "Date, BaseCoin, BaseAmount, Status, RelCoin, RelAmount, UUID, ErrorState" << std::endl; + ofs << "Date,BaseCoin,BaseAmount,Status,RelCoin,RelAmount,UUID,ErrorState" << std::endl; for (int cur_idx = 0; cur_idx < nb_items; ++cur_idx) { QModelIndex idx = this->index(cur_idx, 0); diff --git a/src/core/atomicdex/pages/qt.settings.page.cpp b/src/core/atomicdex/pages/qt.settings.page.cpp index bcbb52a64..116335890 100644 --- a/src/core/atomicdex/pages/qt.settings.page.cpp +++ b/src/core/atomicdex/pages/qt.settings.page.cpp @@ -96,30 +96,35 @@ namespace atomic_dex { return QLocale::Language::Turkish; } - if (current_lang == "en") + else if (current_lang == "en") { return QLocale::Language::English; } - if (current_lang == "fr") + else if (current_lang == "fr") { return QLocale::Language::French; } - if (current_lang == "ru") + else if (current_lang == "ru") { return QLocale::Language::Russian; } return QLocale::Language::AnyLanguage; }; + auto path = QString{":/assets/languages/atomic_defi_" + new_lang}; + SPDLOG_INFO("Locale before parsing AtomicDEX settings: {}", QLocale().name().toStdString()); QLocale::setDefault(get_locale(new_lang.toStdString())); SPDLOG_INFO("Locale after parsing AtomicDEX settings: {}", QLocale().name().toStdString()); - [[maybe_unused]] auto res = this->m_translator.load("atomic_defi_" + new_lang, QLatin1String(":/assets/languages")); - assert(res); + if (!this->m_translator.load(path)) + { + SPDLOG_ERROR("Failed to load {} translation in {}.qm", new_lang.toStdString(), path.toStdString()); + return; + } this->m_app->installTranslator(&m_translator); this->m_qml_engine->retranslate(); + SPDLOG_INFO("Successfully loaded {} translation in {}.qm", new_lang.toStdString(), path.toStdString()); emit onLangChanged(); - SPDLOG_INFO("Post lang changed"); } bool atomic_dex::settings_page::is_notification_enabled() const diff --git a/src/core/atomicdex/pages/qt.wallet.page.cpp b/src/core/atomicdex/pages/qt.wallet.page.cpp index 2b801f81b..c40047d4b 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.cpp +++ b/src/core/atomicdex/pages/qt.wallet.page.cpp @@ -234,6 +234,24 @@ namespace atomic_dex } } + bool + atomic_dex::wallet_page::is_tx_fetching_failed() const + { + return m_tx_fetching_failed; + } + + void + atomic_dex::wallet_page::set_tx_fetching_failed(bool status) + { + if (m_tx_fetching_failed != status) + { + m_tx_fetching_failed = status; + emit txFetchingOutcomeChanged(); + } + } + + + QVariant wallet_page::get_ticker_infos() const { @@ -274,6 +292,8 @@ namespace atomic_dex obj["type"] = QString::fromStdString(coin_info.type); obj["segwit_supported"] = coin_info.segwit; obj["is_segwit_on"] = coin_info.is_segwit_on; + obj["has_parent_fees_ticker"] = coin_info.has_parent_fees_ticker; + obj["fees_ticker"] = QString::fromStdString(coin_info.fees_ticker); obj["is_claimable"] = coin_info.is_claimable; obj["address"] = QString::fromStdString(mm2_system.address(ticker, ec)); obj["minimal_balance_for_asking_rewards"] = QString::fromStdString(coin_info.minimal_claim_amount); @@ -496,6 +516,10 @@ namespace atomic_dex { withdraw_req.fees->type = "Qrc20Gas"; } + else if (coin_info.has_parent_fees_ticker) + { + withdraw_req.fees->type = "otherGas"; + } } nlohmann::json json_data = ::mm2::api::template_request("withdraw", true); ::mm2::api::to_json(json_data, withdraw_req); @@ -785,6 +809,14 @@ namespace atomic_dex // SPDLOG_DEBUG("updating / insert tx"); m_transactions_mdl->update_or_insert_transactions(transactions); } + if (ec) + { + this->set_tx_fetching_failed(true); + } + else + { + this->set_tx_fetching_failed(false); + } } else { diff --git a/src/core/atomicdex/pages/qt.wallet.page.hpp b/src/core/atomicdex/pages/qt.wallet.page.hpp index 820f85363..50e4e50c5 100644 --- a/src/core/atomicdex/pages/qt.wallet.page.hpp +++ b/src/core/atomicdex/pages/qt.wallet.page.hpp @@ -48,6 +48,8 @@ namespace atomic_dex void set_rpc_broadcast_data(QString rpc_data); [[nodiscard]] QVariant get_rpc_send_data() const; void set_rpc_send_data(QVariant rpc_data); + [[nodiscard]] bool is_tx_fetching_failed() const; + void set_tx_fetching_failed(bool status); [[nodiscard]] bool is_tx_fetching_busy() const; void set_tx_fetching_busy(bool status); [[nodiscard]] bool is_convert_address_busy() const; @@ -99,6 +101,7 @@ namespace atomic_dex Q_PROPERTY(bool is_send_busy READ is_send_busy WRITE set_send_busy NOTIFY sendStatusChanged) Q_PROPERTY(QVariant send_rpc_data READ get_rpc_send_data WRITE set_rpc_send_data NOTIFY sendDataChanged) Q_PROPERTY(bool tx_fetching_busy READ is_tx_fetching_busy WRITE set_tx_fetching_busy NOTIFY txFetchingStatusChanged) + Q_PROPERTY(bool tx_fetching_failed READ is_tx_fetching_failed WRITE set_tx_fetching_failed NOTIFY txFetchingOutcomeChanged) Q_PROPERTY(bool auth_succeeded READ has_auth_succeeded NOTIFY auth_succeededChanged) Q_PROPERTY(bool send_available READ is_send_available NOTIFY sendAvailableChanged) Q_PROPERTY(QString send_availability_state READ get_send_availability_state NOTIFY sendAvailabilityStateChanged) @@ -123,6 +126,7 @@ namespace atomic_dex void sendDataChanged(); void transactionsMdlChanged(); void txFetchingStatusChanged(); + void txFetchingOutcomeChanged(); void auth_succeededChanged(); void sendAvailabilityStateChanged(); void sendAvailableChanged(); @@ -141,6 +145,7 @@ namespace atomic_dex std::atomic_bool m_is_broadcast_busy{false}; std::atomic_bool m_is_send_busy{false}; std::atomic_bool m_tx_fetching_busy{false}; + std::atomic_bool m_tx_fetching_failed{false}; std::atomic_bool m_validate_address_busy{false}; std::atomic_bool m_convert_address_busy{false}; diff --git a/src/core/atomicdex/services/exporter/exporter.service.cpp b/src/core/atomicdex/services/exporter/exporter.service.cpp index fb40e3a33..46461044b 100644 --- a/src/core/atomicdex/services/exporter/exporter.service.cpp +++ b/src/core/atomicdex/services/exporter/exporter.service.cpp @@ -90,7 +90,7 @@ namespace atomic_dex ofs.setFileName(std_path_to_qstring(csv_path)); ofs.open(QIODevice::Text | QIODevice::WriteOnly | QIODevice::Truncate); std::stringstream ss; - ss << "Date, BaseCoin, BaseAmount, Status, RelCoin, RelAmount, UUID, ErrorState" << std::endl; + ss << "Date,BaseCoin,BaseAmount,Status,RelCoin,RelAmount,UUID,ErrorState" << std::endl; for (auto&& cur_swap: result.swaps) { ss << cur_swap.human_date.toStdString() << ","; diff --git a/src/core/atomicdex/services/update/self.update.service.cpp b/src/core/atomicdex/services/update/self.update.service.cpp deleted file mode 100644 index 9d33f780e..000000000 --- a/src/core/atomicdex/services/update/self.update.service.cpp +++ /dev/null @@ -1,325 +0,0 @@ -//! Std -#include -#include //> std::isdigit -#include - -//! Qt -#include //> qApp -#include -#include -#include -#include - -//! System -#if defined(Q_OS_LINUX) -# include -# include -#endif - -//! 3rdParty -#include - -//! Project -#include "atomicdex/utilities/global.utilities.hpp" //> utils::u8string() -#include "atomicdex/utilities/cpprestsdk.utilities.hpp" //> download_file() -#include "atomicdex/utilities/qt.utilities.hpp" //> to_sha256() -#include "atomicdex/version/version.hpp" //> get_version() -#include "atomicdex/api/checksum/checksum.api.hpp" -#include "self.update.service.hpp" - -namespace atomic_dex -{ - const auto update_archive_path{antara::gaming::core::binary_real_path().parent_path() / ".update_archive"}; - - self_update_service::self_update_service(entt::registry& entity_registry) : system(entity_registry), m_download_mgr(dispatcher_) - { - remove_update_files(); - dispatcher_.sink().connect<&self_update_service::on_download_release_finished>(*this); - dispatcher_.sink().connect<&self_update_service::on_download_release_progressed>(*this); -#if !defined (Q_OS_WINDOWS) - fetch_last_release_info(); -#endif - } - - void - self_update_service::update() - { - using namespace std::chrono_literals; - - const auto now = std::chrono::high_resolution_clock::now(); - const auto s = std::chrono::duration_cast(now - m_update_clock); - if (s >= 1h) - { - fetch_last_release_info(); - m_update_clock = std::chrono::high_resolution_clock::now(); - } - } - - void - self_update_service::fetch_last_release_info() - { - // If an update is already in preparation, just returns. - if (m_update_downloading || m_update_ready.get() || is_update_needed()) - { - return; - } - - auto releases_request = github_api::repository_releases_request{.owner = DEX_REPOSITORY_OWNER, .repository = DEX_REPOSITORY_NAME}; - github_api::get_repository_releases_async(releases_request) - .then([this](web::http::http_response resp) { - if (resp.status_code() == 200) - { - auto last_release = github_api::get_last_repository_release_from_http_response(resp); - m_last_release_info = last_release; - emit last_release_tag_nameChanged(); - emit update_neededChanged(); - } - }) - .then(&handle_exception_pplx_task); - } - - void - self_update_service::download_update() - { - auto release_info = m_last_release_info.get(); - auto download_request = github_api::download_repository_release_request{ - .owner = DEX_REPOSITORY_OWNER, .repository = DEX_REPOSITORY_NAME, .tag_name = release_info.tag_name, .name = release_info.name}; - - auto url = fmt::format( - "https://github.com/{}/{}/{}/{}/{}/{}", download_request.owner, download_request.repository, "releases", "download", download_request.tag_name, - download_request.name); - m_download_mgr.do_download(QUrl(QString::fromStdString(url))); - m_update_downloading = true; - emit updateDownloadingChanged(); - } - - void - self_update_service::perform_update() - { - // Checks update file integrity by comparing checksum - { - QFile file{QString::fromStdString(m_download_mgr.get_last_download_path().string())}; - std::string hashed; - - file.open(QIODevice::ReadOnly); - hashed = sha256_qstring_from_qt_byte_array(file.readAll()).toStdString(); - file.close(); - - checksum::api::get_latest_checksum() - .then([this, hashed](std::string valid_hash) - { - if (hashed != valid_hash) - { - m_update_ready = false; - emit update_readyChanged(); - m_update_downloading = false; - emit updateDownloadingChanged(); - m_update_files_invalid = true; - emit invalidUpdateFilesChanged(); - } - else - { - m_update_files_invalid = false; - } - }).wait(); - if (m_update_files_invalid) - { - return; - } - } - - const auto& cmd = qApp->arguments()[0]; - [[maybe_unused]] const auto& args = qApp->arguments(); - [[maybe_unused]] const auto& dir_path = qApp->applicationDirPath(); - qApp->quit(); - bool res = false; - - // Installs update for MacOS. -#if defined(Q_OS_MACOS) - try - { - const auto image_mount_path = fs::path("/Volumes") / DEX_PROJECT_NAME; - const auto image_mount_cmd = - fmt::format("hdiutil attach -mountpoint {} {}", image_mount_path.c_str(), m_download_mgr.get_last_download_path().c_str()); - const auto image_unmount_cmd = fmt::format("hdiutil detach {}", image_mount_path.c_str()); - - //! Mounting - SPDLOG_INFO("Executing: {}", image_mount_cmd); - std::system(image_mount_cmd.c_str()); - - //! Retrieve App path - fs::path app_path = ag::core::binary_real_path().parent_path().parent_path().parent_path(); - - //! Deleting old - SPDLOG_INFO("Deleting: {}", app_path.c_str()); - fs::remove_all(app_path); - - //! Copying - SPDLOG_INFO("Copying: {} to {}", (image_mount_path / (std::string(DEX_PROJECT_NAME) + ".app")).c_str(), app_path.c_str()); - fs::copy(image_mount_path / (std::string(DEX_PROJECT_NAME) + ".app"), app_path, fs::copy_options::recursive); - - //! Unmount - SPDLOG_INFO("Executing: {}", image_unmount_cmd); - std::system(image_unmount_cmd.c_str()); - - //! DL download tmp path - SPDLOG_INFO("Removing: {}", m_download_mgr.get_last_download_path().c_str()); - fs::remove(m_download_mgr.get_last_download_path()); - } - catch (std::exception& ex) - { - SPDLOG_ERROR(ex.what()); - } - qDebug() << "cmd: " << cmd; - res = QProcess::startDetached(cmd, args, dir_path); -#elif defined(Q_OS_LINUX) - try - { - const char* appimage{nullptr}; - if (appimage = std::getenv("APPIMAGE"); appimage != nullptr) - { - SPDLOG_INFO("APPIMAGE path is {}", appimage); - } - if (appimage == nullptr || not QString(appimage).contains(DEX_PROJECT_NAME)) - { - SPDLOG_INFO("Need to handle zip"); - } - else - { - SPDLOG_INFO("Need to handle appimage"); - - SPDLOG_INFO("Changing rights of the downloaded appimage"); - char mode[] = "0755"; - int i; - i = strtol(mode, 0, 8); - chmod(m_download_mgr.get_last_download_path().c_str(), i); - - //! Download old appimage - SPDLOG_INFO("Removing old appimage: {}", appimage); - fs::remove(appimage); - - SPDLOG_INFO("Copying new appimage: {} to {}", m_download_mgr.get_last_download_path().c_str(), fs::path(appimage).parent_path().c_str()); - fs::copy(m_download_mgr.get_last_download_path(), fs::path(appimage).parent_path()); - - SPDLOG_INFO("Removing: {}", m_download_mgr.get_last_download_path().c_str()); - fs::remove(m_download_mgr.get_last_download_path()); - - auto release_info = m_last_release_info.get(); - QString path((fs::path(appimage).parent_path() / release_info.name).c_str()); - - SPDLOG_INFO("Starting: {}", path.toStdString()); - QProcess::startDetached(path, qApp->arguments()); - } - } - catch (const std::exception& error) - { - SPDLOG_ERROR("{}", error.what()); - } -#elif defined(Q_OS_WIN) - try - { - const auto binary_path = antara::gaming::core::binary_real_path(); - const auto current_install_folder = binary_path.parent_path(); - const auto unzip_cmd = fmt::format("powershell.exe -nologo -noprofile -command \"Expand-Archive -Path {} -DestinationPath {} -Force\"", - m_download_mgr.get_last_download_path().string(), current_install_folder.string()); - - for (const auto& file : fs::recursive_directory_iterator(current_install_folder)) - { - if (file.path().extension() == ".dll" || file.path().extension() == ".exe" || file.path().extension() == ".qmlc" || file.path().extension() == ".jsc") - { - fs::rename(file.path(), file.path().string() + ".old"); - } - } - std::system(unzip_cmd.c_str()); - res = QProcess::startDetached(cmd, args, dir_path); - } - catch (std::exception& ex) - { - SPDLOG_ERROR(ex.what()); - } -#endif - - // Restarts application. - if (!res) - { - SPDLOG_ERROR("Couldn't start a new process"); - } - else - { - SPDLOG_INFO("Successfully restarted the app"); - } - } - - QString - self_update_service::get_last_release_tag_name() const noexcept - { - return QString::fromStdString(m_last_release_info.get().tag_name); - } - - bool - self_update_service::is_update_needed() const noexcept - { - auto tag = m_last_release_info.get().tag_name; - try - { - tag.erase(std::remove_if(tag.begin(), tag.end(), [](char c) { return not std::isdigit(c); }), tag.end()); - return std::stoi(tag) > get_num_version(); - } - catch (std::exception& ex) - { - SPDLOG_ERROR(ex.what()); - return false; - } - } - - bool - self_update_service::is_update_downloading() const noexcept - { - return m_update_downloading; - } - - float self_update_service::get_update_download_progress() const noexcept - { - return m_update_download_progress; - } - - bool - self_update_service::is_update_ready() const noexcept - { - return m_update_ready.get(); - } - - bool self_update_service::are_update_files_invalid() const noexcept - { - return m_update_files_invalid; - } - - void self_update_service::on_download_release_progressed(qt_download_progressed download_progressed) - { - m_update_download_progress = download_progressed.progress; - emit updateDownloadProgressChanged(); - } - - void - self_update_service::on_download_release_finished([[maybe_unused]] const download_release_finished& evt) - { - SPDLOG_DEBUG("Successfully downloaded last release to {}", utils::u8string(m_download_mgr.get_last_download_path())); - m_update_downloading = false; - emit updateDownloadingChanged(); - m_update_ready = true; - emit update_readyChanged(); - } - - void self_update_service::remove_update_files() const noexcept - { - const auto current_install_folder = antara::gaming::core::binary_real_path().parent_path(); - - for (auto file : fs::recursive_directory_iterator(current_install_folder)) - { - if (file.path().extension().string() == ".old") - { - fs::remove(file.path()); - } - } - } -} // namespace atomic_dex \ No newline at end of file diff --git a/src/core/atomicdex/services/update/self.update.service.hpp b/src/core/atomicdex/services/update/self.update.service.hpp deleted file mode 100644 index ccd44609f..000000000 --- a/src/core/atomicdex/services/update/self.update.service.hpp +++ /dev/null @@ -1,92 +0,0 @@ -#pragma once - -//! Qt -#include -#include - -//! 3rdParty -#include -#include - -//! Project -#include "atomicdex/api/github/github.api.hpp" -#include "atomicdex/utilities/qt.download.manager.hpp" -#include "atomicdex/events/events.hpp" - -namespace atomic_dex -{ - class self_update_service : public QObject, public ag::ecs::pre_update_system - { - Q_OBJECT - - Q_PROPERTY(QString last_release_tag_name READ get_last_release_tag_name NOTIFY last_release_tag_nameChanged) - Q_PROPERTY(bool update_needed READ is_update_needed NOTIFY update_neededChanged) - Q_PROPERTY(bool update_downloading READ is_update_downloading NOTIFY updateDownloadingChanged) - Q_PROPERTY(float update_download_progress READ get_update_download_progress NOTIFY updateDownloadProgressChanged) - Q_PROPERTY(bool update_ready READ is_update_ready NOTIFY update_readyChanged) - Q_PROPERTY(bool invalid_update_files READ are_update_files_invalid NOTIFY invalidUpdateFilesChanged) - - boost::synchronized_value m_last_release_info; - bool m_update_downloading{false}; - float m_update_download_progress{0.0F}; - boost::synchronized_value m_update_ready{false}; - bool m_update_files_invalid{false}; - - // Clock used to time the `update()` loop of this ecs system. - std::chrono::high_resolution_clock::time_point m_update_clock; - - // Download manager used to download latest release. - qt_download_manager m_download_mgr; - - public: - explicit self_update_service(entt::registry& entity_registry); - - // ecs::pre_update_system::update implementation - // Basically it calls `fetch_last_release_info()` every hour. - void update(); - - // Fetches last release info and notifies the frontend if a new release is available. - // Notification happens by modifying Q_PROPERTY `update_info`. - Q_INVOKABLE void fetch_last_release_info(); - - // Downloads last release. - Q_INVOKABLE void download_update(); - - // Updates the program to the latest release (downloaded by self_update_service::download_update()). - // Updating might fail if `check_update_files_integrity()` sets `m_update_files_invalid` to true - Q_INVOKABLE void perform_update(); - - // Returns the fetched release tag name. - [[nodiscard]] QString get_last_release_tag_name() const noexcept; - - // Compares fetched last release version to this build version then tells if an update can be downloaded or not. - [[nodiscard]] bool is_update_needed() const noexcept; - - // Tells if an update is downloading. - [[nodiscard]] bool is_update_downloading() const noexcept; - - // Returns the current progress of the update downloading. - [[nodiscard]] float get_update_download_progress() const noexcept; - - [[nodiscard]] bool is_update_ready() const noexcept; - - [[nodiscard]] bool are_update_files_invalid() const noexcept; - - // Removes files used for recent update. - void remove_update_files() const noexcept; - - //! Events - void on_download_release_progressed(qt_download_progressed download_progressed); - void on_download_release_finished([[maybe_unused]] const download_release_finished& evt); - - signals: - void last_release_tag_nameChanged(); - void update_neededChanged(); - void updateDownloadingChanged(); - void updateDownloadProgressChanged(); - void update_readyChanged(); - void invalidUpdateFilesChanged(); - }; -} - -REFL_AUTO(type(atomic_dex::self_update_service)); \ No newline at end of file diff --git a/src/core/atomicdex/services/update/update.checker.service.cpp b/src/core/atomicdex/services/update/update.checker.service.cpp index e4e193017..db89277ca 100644 --- a/src/core/atomicdex/services/update/update.checker.service.cpp +++ b/src/core/atomicdex/services/update/update.checker.service.cpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -14,17 +14,14 @@ * * ******************************************************************************/ -//! PCH #include "atomicdex/pch.hpp" -//! Qt #include +#include -//! Deps #include #include -//! Project headers #include "atomicdex/events/events.hpp" #include "atomicdex/services/update/update.checker.service.hpp" #include "atomicdex/utilities/cpprestsdk.utilities.hpp" @@ -35,28 +32,27 @@ namespace constexpr const char* g_komodolive_endpoint = "https://komodo.live/adexproversion"; t_http_client_ptr g_komodolive_client{std::make_unique(FROM_STD_STR(g_komodolive_endpoint))}; - pplx::task - async_check_retrieve() + pplx::task async_check_retrieve() { nlohmann::json json_data{{"currentVersion", atomic_dex::get_raw_version()}}; return g_komodolive_client->request(create_json_post_request(std::move(json_data))); } - nlohmann::json - get_update_status_rpc(web::http::http_response resp_http) + nlohmann::json get_update_info_rpc(web::http::http_response resp_http) { using namespace std::string_literals; nlohmann::json resp; + nlohmann::json result; if (resp_http.status_code() != 200) { - resp["status"] = "cannot reach the endpoint: "s + g_komodolive_endpoint; + result["status"] = (QObject::tr("Cannot reach the endpoint: ") + g_komodolive_endpoint).toStdString(); } else { resp = nlohmann::json::parse(TO_STD_STR(resp_http.extract_string(true).get())); } - resp["rpc_code"] = resp_http.status_code(); - resp["current_version"] = atomic_dex::get_raw_version(); + result["rpcCode"] = resp_http.status_code(); + result["currentVersion"] = atomic_dex::get_raw_version(); if (resp_http.status_code() == 200) { bool update_needed = false; @@ -67,24 +63,26 @@ namespace boost::algorithm::trim_left_if(current_version_str, boost::is_any_of("0")); boost::algorithm::trim_left_if(endpoint_version, boost::is_any_of("0")); update_needed = std::stoi(current_version_str) < std::stoi(endpoint_version); - resp["update_needed"] = update_needed; + result["updateNeeded"] = update_needed; + result["newVersion"] = resp["new_version"]; + result["downloadUrl"] = resp["download_url"]; + result["changelog"] = resp["changelog"]; + result["status"] = resp["status"]; } - return resp; + return result; } -} // namespace +} + namespace atomic_dex { - //! Constructor - update_service_checker::update_service_checker(entt::registry& registry, QObject* parent) : QObject(parent), system(registry) + update_checker_service::update_checker_service(entt::registry& registry, QObject* parent) : QObject(parent), system(registry) { m_update_clock = std::chrono::high_resolution_clock::now(); - m_update_status = nlohmann::json::object(); - fetch_update_status(); + m_update_info = nlohmann::json::object(); + fetch_update_info(); } - //! Public override - void - update_service_checker::update() + void update_checker_service::update() { using namespace std::chrono_literals; @@ -92,30 +90,31 @@ namespace atomic_dex const auto s = std::chrono::duration_cast(now - m_update_clock); if (s >= 1h) { - fetch_update_status(); + fetch_update_info(); m_update_clock = std::chrono::high_resolution_clock::now(); } } - //! Private api - void - update_service_checker::fetch_update_status() + void update_checker_service::fetch_update_info() { - SPDLOG_DEBUG("{} l{} f[{}]", __FUNCTION__, __LINE__, fs::path(__FILE__).filename().string()); - SPDLOG_INFO("fetching update status"); + if (is_fetching) + return; + is_fetching = true; + emit isFetchingChanged(); async_check_retrieve() .then([this](web::http::http_response resp) { - this->m_update_status = get_update_status_rpc(resp); - emit updateStatusChanged(); + this->m_update_info = get_update_info_rpc(resp); + is_fetching = false; + emit isFetchingChanged(); + emit updateInfoChanged(); }) .then(&handle_exception_pplx_task); } - QVariant - update_service_checker::get_update_status() const + QVariant update_checker_service::get_update_info() const { - nlohmann::json status = *m_update_status; - QJsonDocument doc = QJsonDocument::fromJson(QString::fromStdString(status.dump()).toUtf8()); + nlohmann::json info = *m_update_info; + QJsonDocument doc = QJsonDocument::fromJson(QString::fromStdString(info.dump()).toUtf8()); return doc.toVariant(); } } // namespace atomic_dex diff --git a/src/core/atomicdex/services/update/update.checker.service.hpp b/src/core/atomicdex/services/update/update.checker.service.hpp index 0a9883b95..b6c6eed91 100644 --- a/src/core/atomicdex/services/update/update.checker.service.hpp +++ b/src/core/atomicdex/services/update/update.checker.service.hpp @@ -1,5 +1,5 @@ /****************************************************************************** - * Copyright © 2013-2021 The Komodo Platform Developers. * + * Copyright © 2013-2022 The Komodo Platform Developers. * * * * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * * the top-level directory of this distribution for the individual copyright * @@ -16,53 +16,45 @@ #pragma once -//! Qt #include #include -//! Deps #include #include -//! Project Headers #include namespace atomic_dex { - class update_service_checker final : public QObject, public ag::ecs::pre_update_system + class update_checker_service final : public QObject, public ag::ecs::pre_update_system { Q_OBJECT - Q_PROPERTY(QVariant update_status READ get_update_status NOTIFY updateStatusChanged) + Q_PROPERTY(QVariant updateInfo READ get_update_info NOTIFY updateInfoChanged) + Q_PROPERTY(bool isFetching READ get_is_fetching NOTIFY isFetchingChanged) - //! Private typedefs using t_update_time_point = std::chrono::high_resolution_clock::time_point; using t_json_synchronized = boost::synchronized_value; - //! Private members - t_json_synchronized m_update_status; - t_update_time_point m_update_clock; + t_json_synchronized m_update_info; + t_update_time_point m_update_clock; + boost::synchronized_value is_fetching; - //! Private API - void fetch_update_status() ; - - signals: - void updateStatusChanged(); + void fetch_update_info(); public: - [[deprecated("Use self_update_service instead.")]] - //! Constructor - explicit update_service_checker(entt::registry& registry, QObject* parent = nullptr); + explicit update_checker_service(entt::registry& registry, QObject* parent = nullptr); + ~update_checker_service() final = default; - //! Destructor - ~update_service_checker() final = default; + void update() final; - //! Public override - void update() final; + [[nodiscard]] QVariant get_update_info() const; + [[nodiscard]] bool get_is_fetching() const noexcept { return *is_fetching; } - //! Properties - [[nodiscard]] QVariant get_update_status() const ; + signals: + void updateInfoChanged(); + void isFetchingChanged(); }; } // namespace atomic_dex -REFL_AUTO(type(atomic_dex::update_service_checker)) +REFL_AUTO(type(atomic_dex::update_checker_service)) diff --git a/src/core/atomicdex/version/version.hpp b/src/core/atomicdex/version/version.hpp index 8b36d2383..1e1dfe9a4 100644 --- a/src/core/atomicdex/version/version.hpp +++ b/src/core/atomicdex/version/version.hpp @@ -21,24 +21,24 @@ namespace atomic_dex constexpr const char* get_version() { - return "0.5.5.1-beta"; + return "0.5.6-beta"; } constexpr int get_num_version() noexcept { - return 55; + return 56; } constexpr const char* get_raw_version() { - return "0.5.5.1"; + return "0.5.6"; } constexpr const char* get_precedent_raw_version() { - return "0.5.5"; + return "0.5.5.1"; } } // namespace atomic_dex diff --git a/src/tests/api/github/github.api.tests.cpp b/src/tests/api/github/github.api.tests.cpp deleted file mode 100644 index 2c090a4b4..000000000 --- a/src/tests/api/github/github.api.tests.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// Deps headers -#include -#include - -// Project headers -#include "atomicdex/api/github/github.api.hpp" -#include "atomicdex/version/version.hpp" - -TEST_CASE("Fetch last GitHub release and compare with current") -{ - atomic_dex::github_api::repository_releases_request request {.owner = "KomodoPlatform", .repository = "atomicdex-desktop"}; - atomic_dex::github_api::get_repository_releases_async(request) - .then([](web::http::http_response resp) - { - REQUIRE(resp.status_code() == static_cast(antara::app::http_code::ok)); - CHECK(atomic_dex::github_api::get_last_repository_release_from_http_response(resp).tag_name == atomic_dex::get_version()); - }) - .then(&handle_exception_pplx_task) - .wait(); -} \ No newline at end of file diff --git a/src/tests/models/qt.addressbook.contact.model.tests.cpp b/src/tests/models/qt.addressbook.contact.model.tests.cpp index 4af6fb1c0..1766bb464 100644 --- a/src/tests/models/qt.addressbook.contact.model.tests.cpp +++ b/src/tests/models/qt.addressbook.contact.model.tests.cpp @@ -60,7 +60,7 @@ TEST_CASE("addressbook_contact_model") WHEN("A category is added") { - CHECK(contact_model.add_category("CEO") == true); + CHECK(contact_model.addCategory("CEO") == true); THEN("get_categories should return 5 categories") { @@ -88,7 +88,7 @@ TEST_CASE("addressbook_contact_model") WHEN("A category is removed") { - contact_model.remove_category("Friend"); + contact_model.removeCategory("Friend"); THEN("get_categories should return 3 categories") {