From 7a4015fdb5d8eb6478047e14ce771e740e6bbc57 Mon Sep 17 00:00:00 2001 From: Craig Raw Date: Fri, 25 Apr 2025 17:37:32 +0200 Subject: [PATCH] convert images to theme aware svg for all wallet models and dialogs --- build.gradle | 2 +- .../sparrowwallet/sparrow/AppController.java | 5 +- .../sparrowwallet/sparrow/AppServices.java | 4 +- .../sparrow/control/CardImportPane.java | 2 +- .../sparrow/control/DevicePane.java | 12 +- .../sparrow/control/DialogImage.java | 85 ++++++++ .../control/DownloadVerifierDialog.java | 9 +- .../sparrow/control/FileImportPane.java | 5 +- .../control/FileKeystoreExportPane.java | 2 +- .../control/FileKeystoreImportPane.java | 2 +- .../sparrow/control/FileWalletExportPane.java | 2 +- .../sparrow/control/FileWalletImportPane.java | 2 +- .../control/FileWalletKeystoreImportPane.java | 2 +- .../sparrow/control/MessageSignDialog.java | 9 +- .../sparrow/control/MnemonicGridDialog.java | 3 +- .../control/MnemonicKeystoreDisplayPane.java | 2 +- .../control/MnemonicKeystoreEntryPane.java | 2 +- .../control/MnemonicKeystoreImportPane.java | 2 +- .../sparrow/control/MnemonicKeystorePane.java | 5 +- .../MnemonicShareKeystoreImportPane.java | 2 +- .../MnemonicWalletKeystoreImportPane.java | 2 +- .../control/PrivateKeySweepDialog.java | 12 +- .../sparrow/control/SearchWalletDialog.java | 9 +- .../sparrow/control/SendToManyDialog.java | 3 +- .../control/ServiceProgressDialog.java | 8 +- .../sparrow/control/TextAreaDialog.java | 3 +- .../sparrow/control/TextfieldDialog.java | 3 +- .../control/TitledDescriptionPane.java | 17 +- .../sparrow/control/WalletIcon.java | 32 +-- .../sparrow/control/WalletModelImage.java | 78 +++++++ .../sparrow/control/WalletSummaryDialog.java | 9 +- .../control/XprvKeystoreImportPane.java | 4 +- .../sparrow/settings/ServerAliasDialog.java | 5 +- .../sparrow/wallet/KeystoreController.java | 2 +- .../sparrow/wallet/SendController.java | 2 +- .../com/sparrowwallet/sparrow/about.fxml | 7 +- .../sparrowwallet/sparrow/paynym/paynym.fxml | 7 +- .../sparrow/paynym/paynymaddresses.fxml | 9 +- .../com/sparrowwallet/sparrow/welcome.fxml | 8 +- src/main/resources/image/.DS_Store | Bin 6148 -> 0 bytes src/main/resources/image/airgapvault.png | Bin 1340 -> 0 bytes src/main/resources/image/airgapvault@2x.png | Bin 2728 -> 0 bytes src/main/resources/image/airgapvault@3x.png | Bin 5775 -> 0 bytes .../resources/image/bitbox02-icon-invert.png | Bin 1618 -> 0 bytes .../image/bitbox02-icon-invert@2x.png | Bin 2106 -> 0 bytes src/main/resources/image/bitbox02-icon.png | Bin 550 -> 0 bytes src/main/resources/image/bitbox02-icon@2x.png | Bin 1277 -> 0 bytes src/main/resources/image/bitbox02-orig.png | Bin 1423 -> 0 bytes src/main/resources/image/bitbox02.png | Bin 3422 -> 0 bytes src/main/resources/image/bitbox02@2x.png | Bin 6053 -> 0 bytes src/main/resources/image/bitbox02@3x.png | Bin 13254 -> 0 bytes src/main/resources/image/bitcoincore.png | Bin 3316 -> 0 bytes src/main/resources/image/bitcoincore@2x.png | Bin 5516 -> 0 bytes src/main/resources/image/bitcoincore@3x.png | Bin 10467 -> 0 bytes src/main/resources/image/bluewallet.png | Bin 6344 -> 0 bytes src/main/resources/image/bluewallet@2x.png | Bin 8104 -> 0 bytes src/main/resources/image/bluewallet@3x.png | Bin 11153 -> 0 bytes src/main/resources/image/border-wallets.png | Bin 2698 -> 0 bytes .../resources/image/border-wallets@2x.png | Bin 3790 -> 0 bytes .../resources/image/border-wallets@3x.png | Bin 6240 -> 0 bytes src/main/resources/image/bsms.png | Bin 2609 -> 0 bytes src/main/resources/image/bsms@2x.png | Bin 4090 -> 0 bytes src/main/resources/image/bsms@3x.png | Bin 7529 -> 0 bytes src/main/resources/image/caravan.png | Bin 3157 -> 0 bytes src/main/resources/image/caravan@2x.png | Bin 5346 -> 0 bytes src/main/resources/image/caravan@3x.png | Bin 10000 -> 0 bytes .../resources/image/cobovault-icon-invert.png | Bin 1629 -> 0 bytes .../image/cobovault-icon-invert@2x.png | Bin 1865 -> 0 bytes src/main/resources/image/cobovault-icon.png | Bin 1622 -> 0 bytes .../resources/image/cobovault-icon@2x.png | Bin 1835 -> 0 bytes src/main/resources/image/cobovault-orig.png | Bin 34655 -> 0 bytes src/main/resources/image/cobovault.png | Bin 1978 -> 0 bytes src/main/resources/image/cobovault@2x.png | Bin 2933 -> 0 bytes src/main/resources/image/cobovault@3x.png | Bin 5285 -> 0 bytes .../resources/image/coldcard-icon-invert.png | Bin 1730 -> 0 bytes .../image/coldcard-icon-invert@2x.png | Bin 2147 -> 0 bytes src/main/resources/image/coldcard-icon.png | Bin 287 -> 0 bytes src/main/resources/image/coldcard-icon@2x.png | Bin 741 -> 0 bytes src/main/resources/image/coldcard-orig.png | Bin 5396 -> 0 bytes src/main/resources/image/coldcard.png | Bin 2664 -> 0 bytes src/main/resources/image/coldcard@2x.png | Bin 4285 -> 0 bytes src/main/resources/image/coldcard@3x.png | Bin 9915 -> 0 bytes .../image/dialog/borderwallets-invert.svg | 10 + .../resources/image/dialog/borderwallets.svg | 10 + .../resources/image/dialog/paynym-invert.svg | 201 ++++++++++++++++++ src/main/resources/image/dialog/paynym.svg | 201 ++++++++++++++++++ .../resources/image/dialog/seed-invert.svg | 9 + src/main/resources/image/dialog/seed.svg | 9 + .../resources/image/dialog/sparrow-invert.svg | 117 ++++++++++ src/main/resources/image/dialog/sparrow.svg | 117 ++++++++++ .../resources/image/dialog/useradd-invert.svg | 9 + src/main/resources/image/dialog/useradd.svg | 9 + .../image/dialog/whirlpool-invert.svg | 11 + src/main/resources/image/dialog/whirlpool.svg | 11 + .../resources/image/digitalbitbox-orig.png | Bin 1423 -> 0 bytes src/main/resources/image/digitalbitbox.png | Bin 3422 -> 0 bytes src/main/resources/image/digitalbitbox@2x.png | Bin 6053 -> 0 bytes src/main/resources/image/digitalbitbox@3x.png | Bin 13254 -> 0 bytes src/main/resources/image/electrum-orig.png | Bin 16367 -> 0 bytes src/main/resources/image/electrum.png | Bin 7899 -> 0 bytes src/main/resources/image/electrum@2x.png | Bin 7899 -> 0 bytes src/main/resources/image/electrum@3x.png | Bin 22531 -> 0 bytes src/main/resources/image/eps.png | Bin 2128 -> 0 bytes src/main/resources/image/eps@2x.png | Bin 2917 -> 0 bytes src/main/resources/image/eps@3x.png | Bin 4604 -> 0 bytes src/main/resources/image/jade-icon-invert.png | Bin 1590 -> 0 bytes .../resources/image/jade-icon-invert@2x.png | Bin 2065 -> 0 bytes src/main/resources/image/jade-icon.png | Bin 1596 -> 0 bytes src/main/resources/image/jade-icon@2x.png | Bin 2072 -> 0 bytes src/main/resources/image/jade.png | Bin 1733 -> 0 bytes src/main/resources/image/jade@2x.png | Bin 2868 -> 0 bytes src/main/resources/image/jade@3x.png | Bin 6668 -> 0 bytes src/main/resources/image/keepkey-orig.png | Bin 3803 -> 0 bytes src/main/resources/image/keepkey.png | Bin 3057 -> 0 bytes src/main/resources/image/keepkey@2x.png | Bin 4674 -> 0 bytes src/main/resources/image/keepkey@3x.png | Bin 10221 -> 0 bytes src/main/resources/image/keystone.png | Bin 2392 -> 0 bytes src/main/resources/image/keystone@2x.png | Bin 3607 -> 0 bytes src/main/resources/image/keystone@3x.png | Bin 6560 -> 0 bytes src/main/resources/image/krux.png | Bin 1557 -> 0 bytes src/main/resources/image/krux@2x.png | Bin 1956 -> 0 bytes src/main/resources/image/krux@3x.png | Bin 2269 -> 0 bytes src/main/resources/image/labels.png | Bin 979 -> 0 bytes src/main/resources/image/labels@2x.png | Bin 1815 -> 0 bytes src/main/resources/image/labels@3x.png | Bin 4014 -> 0 bytes .../resources/image/ledger-icon-invert.png | Bin 1621 -> 0 bytes .../resources/image/ledger-icon-invert@2x.png | Bin 1891 -> 0 bytes src/main/resources/image/ledger-icon.png | Bin 1613 -> 0 bytes src/main/resources/image/ledger-icon@2x.png | Bin 1875 -> 0 bytes src/main/resources/image/ledger-orig.png | Bin 3097 -> 0 bytes src/main/resources/image/ledger.png | Bin 2407 -> 0 bytes src/main/resources/image/ledger@2x.png | Bin 2897 -> 0 bytes src/main/resources/image/ledger@3x.png | Bin 4421 -> 0 bytes src/main/resources/image/onekey.png | Bin 1242 -> 0 bytes src/main/resources/image/onekey@2x.png | Bin 2411 -> 0 bytes src/main/resources/image/onekey@3x.png | Bin 5379 -> 0 bytes .../resources/image/passport-icon-invert.png | Bin 1951 -> 0 bytes .../image/passport-icon-invert@2x.png | Bin 2699 -> 0 bytes src/main/resources/image/passport-icon.png | Bin 558 -> 0 bytes src/main/resources/image/passport-icon@2x.png | Bin 1487 -> 0 bytes src/main/resources/image/passport.png | Bin 4027 -> 0 bytes src/main/resources/image/passport@2x.png | Bin 8566 -> 0 bytes src/main/resources/image/passport@3x.png | Bin 21258 -> 0 bytes src/main/resources/image/paynym.png | Bin 3784 -> 0 bytes src/main/resources/image/paynym@2x.png | Bin 6155 -> 0 bytes src/main/resources/image/paynym@3x.png | Bin 14155 -> 0 bytes src/main/resources/image/samourai.png | Bin 2902 -> 0 bytes src/main/resources/image/samourai@2x.png | Bin 4926 -> 0 bytes src/main/resources/image/samourai@3x.png | Bin 9845 -> 0 bytes src/main/resources/image/satochip.png | Bin 4536 -> 0 bytes src/main/resources/image/satochip@2x.png | Bin 7739 -> 0 bytes src/main/resources/image/satochip@3x.png | Bin 15554 -> 0 bytes src/main/resources/image/satscard.png | Bin 3758 -> 0 bytes src/main/resources/image/satscard@2x.png | Bin 4335 -> 0 bytes src/main/resources/image/satscard@3x.png | Bin 5635 -> 0 bytes src/main/resources/image/satschip.png | Bin 852 -> 0 bytes src/main/resources/image/satschip@2x.png | Bin 1697 -> 0 bytes src/main/resources/image/satschip@3x.png | Bin 3963 -> 0 bytes src/main/resources/image/seed.png | Bin 2739 -> 0 bytes src/main/resources/image/seed@2x.png | Bin 3976 -> 0 bytes src/main/resources/image/seed@3x.png | Bin 6779 -> 0 bytes src/main/resources/image/seedsigner-icon.png | Bin 1771 -> 0 bytes .../resources/image/seedsigner-icon@2x.png | Bin 2174 -> 0 bytes src/main/resources/image/seedsigner-orig.png | Bin 67631 -> 0 bytes src/main/resources/image/seedsigner.png | Bin 2632 -> 0 bytes src/main/resources/image/seedsigner@2x.png | Bin 4550 -> 0 bytes src/main/resources/image/seedsigner@3x.png | Bin 8775 -> 0 bytes .../resources/image/seedtool-icon-invert.png | Bin 1903 -> 0 bytes .../resources/image/seedtool-icon-invert.svg | 91 -------- .../image/seedtool-icon-invert@2x.png | Bin 2584 -> 0 bytes src/main/resources/image/seedtool-icon.png | Bin 1853 -> 0 bytes src/main/resources/image/seedtool-icon.svg | 91 -------- src/main/resources/image/seedtool-icon@2x.png | Bin 2493 -> 0 bytes src/main/resources/image/seedtool.png | Bin 3008 -> 0 bytes src/main/resources/image/seedtool@2x.png | Bin 5212 -> 0 bytes src/main/resources/image/seedtool@3x.png | Bin 10101 -> 0 bytes src/main/resources/image/sparrow-large.png | Bin 1110079 -> 0 bytes src/main/resources/image/sparrow-small.png | Bin 8353 -> 0 bytes src/main/resources/image/sparrow-small@2x.png | Bin 15680 -> 0 bytes src/main/resources/image/sparrow-small@3x.png | Bin 41742 -> 0 bytes src/main/resources/image/sparrow.svg | 127 ----------- .../resources/image/specter-icon-invert.png | Bin 1817 -> 0 bytes .../image/specter-icon-invert@2x.png | Bin 2259 -> 0 bytes src/main/resources/image/specter-icon.png | Bin 1790 -> 0 bytes src/main/resources/image/specter-icon@2x.png | Bin 2211 -> 0 bytes src/main/resources/image/specter.png | Bin 2722 -> 0 bytes src/main/resources/image/specter@2x.png | Bin 4585 -> 0 bytes src/main/resources/image/specter@3x.png | Bin 9018 -> 0 bytes src/main/resources/image/tapsigner.png | Bin 2081 -> 0 bytes src/main/resources/image/tapsigner@2x.png | Bin 2831 -> 0 bytes src/main/resources/image/tapsigner@3x.png | Bin 4363 -> 0 bytes src/main/resources/image/transactions.png | Bin 5890 -> 0 bytes src/main/resources/image/transactions@2x.png | Bin 7111 -> 0 bytes src/main/resources/image/transactions@3x.png | Bin 10396 -> 0 bytes .../resources/image/trezor-icon-invert.png | Bin 1595 -> 0 bytes .../resources/image/trezor-icon-invert@2x.png | Bin 2014 -> 0 bytes src/main/resources/image/trezor-icon.png | Bin 1605 -> 0 bytes src/main/resources/image/trezor-icon@2x.png | Bin 1969 -> 0 bytes src/main/resources/image/trezor-orig.png | Bin 1562 -> 0 bytes src/main/resources/image/trezor.png | Bin 2979 -> 0 bytes src/main/resources/image/trezor@2x.png | Bin 2640 -> 0 bytes src/main/resources/image/trezor@3x.png | Bin 5314 -> 0 bytes src/main/resources/image/useradd.png | Bin 2219 -> 0 bytes src/main/resources/image/useradd@2x.png | Bin 3129 -> 0 bytes src/main/resources/image/useradd@3x.png | Bin 5214 -> 0 bytes .../airgapvault-icon-invert.svg | 0 .../{ => walletmodel}/airgapvault-icon.svg | 0 .../image/walletmodel/airgapvault-invert.svg | 9 + .../image/walletmodel/airgapvault.svg | 9 + .../bitbox02-icon-invert.svg | 2 +- .../image/{ => walletmodel}/bitbox02-icon.svg | 2 +- .../image/walletmodel/bitbox02-invert.svg | 9 + .../resources/image/walletmodel/bitbox02.svg | 9 + .../image/walletmodel/bitcoincore-invert.svg | 12 ++ .../image/walletmodel/bitcoincore.svg | 12 ++ .../image/walletmodel/bluewallet-invert.svg | 17 ++ .../image/walletmodel/bluewallet-orig.svg | 14 ++ .../image/walletmodel/bluewallet.svg | 17 ++ .../image/walletmodel/bsms-invert.svg | 9 + src/main/resources/image/walletmodel/bsms.svg | 9 + .../image/walletmodel/caravan-invert.svg | 19 ++ .../resources/image/walletmodel/caravan.svg | 19 ++ .../walletmodel/cobovault-icon-invert.svg | 11 + .../image/walletmodel/cobovault-icon.svg | 11 + .../image/walletmodel/cobovault-invert.svg | 11 + .../resources/image/walletmodel/cobovault.svg | 11 + .../coldcard-icon-invert.svg | 0 .../image/{ => walletmodel}/coldcard-icon.svg | 0 .../image/walletmodel/coldcard-invert.svg | 16 ++ .../resources/image/walletmodel/coldcard.svg | 16 ++ .../walletmodel/digitalbitbox-icon-invert.svg | 6 + .../image/walletmodel/digitalbitbox-icon.svg | 6 + .../walletmodel/digitalbitbox-invert.svg | 9 + .../image/walletmodel/digitalbitbox.svg | 9 + .../image/walletmodel/electrum-invert.svg | 11 + .../resources/image/walletmodel/electrum.svg | 11 + .../image/walletmodel/eps-invert.svg | 13 ++ src/main/resources/image/walletmodel/eps.svg | 13 ++ .../{ => walletmodel}/jade-icon-invert.svg | 0 .../image/{ => walletmodel}/jade-icon.svg | 0 .../image/walletmodel/jade-invert.svg | 18 ++ src/main/resources/image/walletmodel/jade.svg | 18 ++ .../image/walletmodel/keepkey-icon-invert.svg | 35 +++ .../image/walletmodel/keepkey-icon.svg | 35 +++ .../image/walletmodel/keepkey-invert.svg | 19 ++ .../resources/image/walletmodel/keepkey.svg | 19 ++ .../keystone-icon-invert.svg | 0 .../image/{ => walletmodel}/keystone-icon.svg | 0 .../image/walletmodel/keystone-invert.svg | 10 + .../resources/image/walletmodel/keystone.svg | 10 + .../{ => walletmodel}/krux-icon-invert.svg | 0 .../image/{ => walletmodel}/krux-icon.svg | 0 .../image/walletmodel/krux-invert.svg | 9 + src/main/resources/image/walletmodel/krux.svg | 9 + .../image/walletmodel/labels-invert.svg | 9 + .../resources/image/walletmodel/labels.svg | 9 + .../{ => walletmodel}/ledger-icon-invert.svg | 0 .../image/{ => walletmodel}/ledger-icon.svg | 0 .../image/walletmodel/ledger-invert.svg | 14 ++ .../resources/image/walletmodel/ledger.svg | 14 ++ .../{ => walletmodel}/onekey-icon-invert.svg | 0 .../image/{ => walletmodel}/onekey-icon.svg | 0 .../image/walletmodel/onekey-invert.svg | 9 + .../resources/image/walletmodel/onekey.svg | 9 + .../passport-icon-invert.svg | 0 .../image/{ => walletmodel}/passport-icon.svg | 0 .../image/walletmodel/passport-invert.svg | 92 ++++++++ .../resources/image/walletmodel/passport.svg | 92 ++++++++ .../image/walletmodel/samourai-invert.svg | 9 + .../resources/image/walletmodel/samourai.svg | 9 + .../satochip-icon-invert.svg | 0 .../image/{ => walletmodel}/satochip-icon.svg | 0 .../image/walletmodel/satochip-invert.svg | 11 + .../resources/image/walletmodel/satochip.svg | 11 + .../image/walletmodel/satscard-invert.svg | 24 +++ .../resources/image/walletmodel/satscard.svg | 24 +++ .../satschip-icon-invert.svg | 0 .../image/{ => walletmodel}/satschip-icon.svg | 0 .../image/walletmodel/satschip-invert.svg | 16 ++ .../resources/image/walletmodel/satschip.svg | 14 ++ .../image/walletmodel/seed-invert.svg | 9 + src/main/resources/image/walletmodel/seed.svg | 9 + .../seedsigner-icon-invert.svg | 0 .../{ => walletmodel}/seedsigner-icon.svg | 0 .../image/walletmodel/seedsigner-invert.svg | 32 +++ .../image/walletmodel/seedsigner.svg | 32 +++ .../walletmodel/seedtool-icon-invert.svg | 36 ++++ .../image/walletmodel/seedtool-icon.svg | 36 ++++ .../image/walletmodel/seedtool-invert.svg | 36 ++++ .../resources/image/walletmodel/seedtool.svg | 36 ++++ .../image/walletmodel/sparrow-invert.svg | 117 ++++++++++ .../resources/image/walletmodel/sparrow.svg | 117 ++++++++++ .../image/walletmodel/specter-icon-invert.svg | 15 ++ .../image/walletmodel/specter-icon.svg | 15 ++ .../image/walletmodel/specter-invert.svg | 15 ++ .../resources/image/walletmodel/specter.svg | 15 ++ .../tapsigner-icon-invert.svg | 0 .../{ => walletmodel}/tapsigner-icon.svg | 0 .../image/walletmodel/tapsigner-invert.svg | 11 + .../resources/image/walletmodel/tapsigner.svg | 11 + .../image/walletmodel/transactions-invert.svg | 9 + .../image/walletmodel/transactions.svg | 9 + .../{ => walletmodel}/trezor-icon-invert.svg | 0 .../image/{ => walletmodel}/trezor-icon.svg | 0 .../image/walletmodel/trezor-invert.svg | 9 + .../resources/image/walletmodel/trezor.svg | 9 + src/main/resources/image/whirlpool.png | Bin 1008 -> 0 bytes src/main/resources/image/whirlpool@2x.png | Bin 1812 -> 0 bytes src/main/resources/image/whirlpool@3x.png | Bin 3777 -> 0 bytes 309 files changed, 2389 insertions(+), 461 deletions(-) create mode 100644 src/main/java/com/sparrowwallet/sparrow/control/DialogImage.java create mode 100644 src/main/java/com/sparrowwallet/sparrow/control/WalletModelImage.java delete mode 100644 src/main/resources/image/.DS_Store delete mode 100644 src/main/resources/image/airgapvault.png delete mode 100644 src/main/resources/image/airgapvault@2x.png delete mode 100644 src/main/resources/image/airgapvault@3x.png delete mode 100644 src/main/resources/image/bitbox02-icon-invert.png delete mode 100644 src/main/resources/image/bitbox02-icon-invert@2x.png delete mode 100644 src/main/resources/image/bitbox02-icon.png delete mode 100644 src/main/resources/image/bitbox02-icon@2x.png delete mode 100644 src/main/resources/image/bitbox02-orig.png delete mode 100644 src/main/resources/image/bitbox02.png delete mode 100644 src/main/resources/image/bitbox02@2x.png delete mode 100644 src/main/resources/image/bitbox02@3x.png delete mode 100644 src/main/resources/image/bitcoincore.png delete mode 100644 src/main/resources/image/bitcoincore@2x.png delete mode 100644 src/main/resources/image/bitcoincore@3x.png delete mode 100644 src/main/resources/image/bluewallet.png delete mode 100644 src/main/resources/image/bluewallet@2x.png delete mode 100644 src/main/resources/image/bluewallet@3x.png delete mode 100644 src/main/resources/image/border-wallets.png delete mode 100644 src/main/resources/image/border-wallets@2x.png delete mode 100644 src/main/resources/image/border-wallets@3x.png delete mode 100644 src/main/resources/image/bsms.png delete mode 100644 src/main/resources/image/bsms@2x.png delete mode 100644 src/main/resources/image/bsms@3x.png delete mode 100644 src/main/resources/image/caravan.png delete mode 100644 src/main/resources/image/caravan@2x.png delete mode 100644 src/main/resources/image/caravan@3x.png delete mode 100644 src/main/resources/image/cobovault-icon-invert.png delete mode 100644 src/main/resources/image/cobovault-icon-invert@2x.png delete mode 100644 src/main/resources/image/cobovault-icon.png delete mode 100644 src/main/resources/image/cobovault-icon@2x.png delete mode 100644 src/main/resources/image/cobovault-orig.png delete mode 100644 src/main/resources/image/cobovault.png delete mode 100644 src/main/resources/image/cobovault@2x.png delete mode 100644 src/main/resources/image/cobovault@3x.png delete mode 100644 src/main/resources/image/coldcard-icon-invert.png delete mode 100644 src/main/resources/image/coldcard-icon-invert@2x.png delete mode 100644 src/main/resources/image/coldcard-icon.png delete mode 100644 src/main/resources/image/coldcard-icon@2x.png delete mode 100644 src/main/resources/image/coldcard-orig.png delete mode 100644 src/main/resources/image/coldcard.png delete mode 100644 src/main/resources/image/coldcard@2x.png delete mode 100644 src/main/resources/image/coldcard@3x.png create mode 100644 src/main/resources/image/dialog/borderwallets-invert.svg create mode 100644 src/main/resources/image/dialog/borderwallets.svg create mode 100644 src/main/resources/image/dialog/paynym-invert.svg create mode 100644 src/main/resources/image/dialog/paynym.svg create mode 100644 src/main/resources/image/dialog/seed-invert.svg create mode 100644 src/main/resources/image/dialog/seed.svg create mode 100644 src/main/resources/image/dialog/sparrow-invert.svg create mode 100644 src/main/resources/image/dialog/sparrow.svg create mode 100644 src/main/resources/image/dialog/useradd-invert.svg create mode 100644 src/main/resources/image/dialog/useradd.svg create mode 100644 src/main/resources/image/dialog/whirlpool-invert.svg create mode 100644 src/main/resources/image/dialog/whirlpool.svg delete mode 100644 src/main/resources/image/digitalbitbox-orig.png delete mode 100644 src/main/resources/image/digitalbitbox.png delete mode 100644 src/main/resources/image/digitalbitbox@2x.png delete mode 100644 src/main/resources/image/digitalbitbox@3x.png delete mode 100644 src/main/resources/image/electrum-orig.png delete mode 100644 src/main/resources/image/electrum.png delete mode 100644 src/main/resources/image/electrum@2x.png delete mode 100644 src/main/resources/image/electrum@3x.png delete mode 100644 src/main/resources/image/eps.png delete mode 100644 src/main/resources/image/eps@2x.png delete mode 100644 src/main/resources/image/eps@3x.png delete mode 100644 src/main/resources/image/jade-icon-invert.png delete mode 100644 src/main/resources/image/jade-icon-invert@2x.png delete mode 100644 src/main/resources/image/jade-icon.png delete mode 100644 src/main/resources/image/jade-icon@2x.png delete mode 100644 src/main/resources/image/jade.png delete mode 100644 src/main/resources/image/jade@2x.png delete mode 100644 src/main/resources/image/jade@3x.png delete mode 100644 src/main/resources/image/keepkey-orig.png delete mode 100644 src/main/resources/image/keepkey.png delete mode 100644 src/main/resources/image/keepkey@2x.png delete mode 100644 src/main/resources/image/keepkey@3x.png delete mode 100644 src/main/resources/image/keystone.png delete mode 100644 src/main/resources/image/keystone@2x.png delete mode 100644 src/main/resources/image/keystone@3x.png delete mode 100644 src/main/resources/image/krux.png delete mode 100644 src/main/resources/image/krux@2x.png delete mode 100644 src/main/resources/image/krux@3x.png delete mode 100644 src/main/resources/image/labels.png delete mode 100644 src/main/resources/image/labels@2x.png delete mode 100644 src/main/resources/image/labels@3x.png delete mode 100644 src/main/resources/image/ledger-icon-invert.png delete mode 100644 src/main/resources/image/ledger-icon-invert@2x.png delete mode 100644 src/main/resources/image/ledger-icon.png delete mode 100644 src/main/resources/image/ledger-icon@2x.png delete mode 100644 src/main/resources/image/ledger-orig.png delete mode 100644 src/main/resources/image/ledger.png delete mode 100644 src/main/resources/image/ledger@2x.png delete mode 100644 src/main/resources/image/ledger@3x.png delete mode 100644 src/main/resources/image/onekey.png delete mode 100644 src/main/resources/image/onekey@2x.png delete mode 100644 src/main/resources/image/onekey@3x.png delete mode 100644 src/main/resources/image/passport-icon-invert.png delete mode 100644 src/main/resources/image/passport-icon-invert@2x.png delete mode 100644 src/main/resources/image/passport-icon.png delete mode 100644 src/main/resources/image/passport-icon@2x.png delete mode 100644 src/main/resources/image/passport.png delete mode 100644 src/main/resources/image/passport@2x.png delete mode 100644 src/main/resources/image/passport@3x.png delete mode 100644 src/main/resources/image/paynym.png delete mode 100644 src/main/resources/image/paynym@2x.png delete mode 100644 src/main/resources/image/paynym@3x.png delete mode 100644 src/main/resources/image/samourai.png delete mode 100644 src/main/resources/image/samourai@2x.png delete mode 100644 src/main/resources/image/samourai@3x.png delete mode 100644 src/main/resources/image/satochip.png delete mode 100644 src/main/resources/image/satochip@2x.png delete mode 100644 src/main/resources/image/satochip@3x.png delete mode 100644 src/main/resources/image/satscard.png delete mode 100644 src/main/resources/image/satscard@2x.png delete mode 100644 src/main/resources/image/satscard@3x.png delete mode 100644 src/main/resources/image/satschip.png delete mode 100644 src/main/resources/image/satschip@2x.png delete mode 100644 src/main/resources/image/satschip@3x.png delete mode 100644 src/main/resources/image/seed.png delete mode 100644 src/main/resources/image/seed@2x.png delete mode 100644 src/main/resources/image/seed@3x.png delete mode 100644 src/main/resources/image/seedsigner-icon.png delete mode 100644 src/main/resources/image/seedsigner-icon@2x.png delete mode 100644 src/main/resources/image/seedsigner-orig.png delete mode 100644 src/main/resources/image/seedsigner.png delete mode 100644 src/main/resources/image/seedsigner@2x.png delete mode 100644 src/main/resources/image/seedsigner@3x.png delete mode 100644 src/main/resources/image/seedtool-icon-invert.png delete mode 100644 src/main/resources/image/seedtool-icon-invert.svg delete mode 100644 src/main/resources/image/seedtool-icon-invert@2x.png delete mode 100644 src/main/resources/image/seedtool-icon.png delete mode 100644 src/main/resources/image/seedtool-icon.svg delete mode 100644 src/main/resources/image/seedtool-icon@2x.png delete mode 100644 src/main/resources/image/seedtool.png delete mode 100644 src/main/resources/image/seedtool@2x.png delete mode 100644 src/main/resources/image/seedtool@3x.png delete mode 100644 src/main/resources/image/sparrow-large.png delete mode 100644 src/main/resources/image/sparrow-small.png delete mode 100644 src/main/resources/image/sparrow-small@2x.png delete mode 100644 src/main/resources/image/sparrow-small@3x.png delete mode 100644 src/main/resources/image/sparrow.svg delete mode 100644 src/main/resources/image/specter-icon-invert.png delete mode 100644 src/main/resources/image/specter-icon-invert@2x.png delete mode 100644 src/main/resources/image/specter-icon.png delete mode 100644 src/main/resources/image/specter-icon@2x.png delete mode 100644 src/main/resources/image/specter.png delete mode 100644 src/main/resources/image/specter@2x.png delete mode 100644 src/main/resources/image/specter@3x.png delete mode 100644 src/main/resources/image/tapsigner.png delete mode 100644 src/main/resources/image/tapsigner@2x.png delete mode 100644 src/main/resources/image/tapsigner@3x.png delete mode 100644 src/main/resources/image/transactions.png delete mode 100644 src/main/resources/image/transactions@2x.png delete mode 100644 src/main/resources/image/transactions@3x.png delete mode 100644 src/main/resources/image/trezor-icon-invert.png delete mode 100644 src/main/resources/image/trezor-icon-invert@2x.png delete mode 100644 src/main/resources/image/trezor-icon.png delete mode 100644 src/main/resources/image/trezor-icon@2x.png delete mode 100644 src/main/resources/image/trezor-orig.png delete mode 100644 src/main/resources/image/trezor.png delete mode 100644 src/main/resources/image/trezor@2x.png delete mode 100644 src/main/resources/image/trezor@3x.png delete mode 100644 src/main/resources/image/useradd.png delete mode 100644 src/main/resources/image/useradd@2x.png delete mode 100644 src/main/resources/image/useradd@3x.png rename src/main/resources/image/{ => walletmodel}/airgapvault-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/airgapvault-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/airgapvault-invert.svg create mode 100644 src/main/resources/image/walletmodel/airgapvault.svg rename src/main/resources/image/{ => walletmodel}/bitbox02-icon-invert.svg (87%) rename src/main/resources/image/{ => walletmodel}/bitbox02-icon.svg (87%) create mode 100644 src/main/resources/image/walletmodel/bitbox02-invert.svg create mode 100644 src/main/resources/image/walletmodel/bitbox02.svg create mode 100644 src/main/resources/image/walletmodel/bitcoincore-invert.svg create mode 100644 src/main/resources/image/walletmodel/bitcoincore.svg create mode 100644 src/main/resources/image/walletmodel/bluewallet-invert.svg create mode 100644 src/main/resources/image/walletmodel/bluewallet-orig.svg create mode 100644 src/main/resources/image/walletmodel/bluewallet.svg create mode 100644 src/main/resources/image/walletmodel/bsms-invert.svg create mode 100644 src/main/resources/image/walletmodel/bsms.svg create mode 100644 src/main/resources/image/walletmodel/caravan-invert.svg create mode 100644 src/main/resources/image/walletmodel/caravan.svg create mode 100644 src/main/resources/image/walletmodel/cobovault-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/cobovault-icon.svg create mode 100644 src/main/resources/image/walletmodel/cobovault-invert.svg create mode 100644 src/main/resources/image/walletmodel/cobovault.svg rename src/main/resources/image/{ => walletmodel}/coldcard-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/coldcard-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/coldcard-invert.svg create mode 100644 src/main/resources/image/walletmodel/coldcard.svg create mode 100644 src/main/resources/image/walletmodel/digitalbitbox-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/digitalbitbox-icon.svg create mode 100644 src/main/resources/image/walletmodel/digitalbitbox-invert.svg create mode 100644 src/main/resources/image/walletmodel/digitalbitbox.svg create mode 100644 src/main/resources/image/walletmodel/electrum-invert.svg create mode 100644 src/main/resources/image/walletmodel/electrum.svg create mode 100644 src/main/resources/image/walletmodel/eps-invert.svg create mode 100644 src/main/resources/image/walletmodel/eps.svg rename src/main/resources/image/{ => walletmodel}/jade-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/jade-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/jade-invert.svg create mode 100644 src/main/resources/image/walletmodel/jade.svg create mode 100644 src/main/resources/image/walletmodel/keepkey-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/keepkey-icon.svg create mode 100644 src/main/resources/image/walletmodel/keepkey-invert.svg create mode 100644 src/main/resources/image/walletmodel/keepkey.svg rename src/main/resources/image/{ => walletmodel}/keystone-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/keystone-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/keystone-invert.svg create mode 100644 src/main/resources/image/walletmodel/keystone.svg rename src/main/resources/image/{ => walletmodel}/krux-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/krux-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/krux-invert.svg create mode 100644 src/main/resources/image/walletmodel/krux.svg create mode 100644 src/main/resources/image/walletmodel/labels-invert.svg create mode 100644 src/main/resources/image/walletmodel/labels.svg rename src/main/resources/image/{ => walletmodel}/ledger-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/ledger-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/ledger-invert.svg create mode 100644 src/main/resources/image/walletmodel/ledger.svg rename src/main/resources/image/{ => walletmodel}/onekey-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/onekey-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/onekey-invert.svg create mode 100644 src/main/resources/image/walletmodel/onekey.svg rename src/main/resources/image/{ => walletmodel}/passport-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/passport-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/passport-invert.svg create mode 100644 src/main/resources/image/walletmodel/passport.svg create mode 100644 src/main/resources/image/walletmodel/samourai-invert.svg create mode 100644 src/main/resources/image/walletmodel/samourai.svg rename src/main/resources/image/{ => walletmodel}/satochip-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/satochip-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/satochip-invert.svg create mode 100644 src/main/resources/image/walletmodel/satochip.svg create mode 100644 src/main/resources/image/walletmodel/satscard-invert.svg create mode 100644 src/main/resources/image/walletmodel/satscard.svg rename src/main/resources/image/{ => walletmodel}/satschip-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/satschip-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/satschip-invert.svg create mode 100644 src/main/resources/image/walletmodel/satschip.svg create mode 100644 src/main/resources/image/walletmodel/seed-invert.svg create mode 100644 src/main/resources/image/walletmodel/seed.svg rename src/main/resources/image/{ => walletmodel}/seedsigner-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/seedsigner-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/seedsigner-invert.svg create mode 100644 src/main/resources/image/walletmodel/seedsigner.svg create mode 100644 src/main/resources/image/walletmodel/seedtool-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/seedtool-icon.svg create mode 100644 src/main/resources/image/walletmodel/seedtool-invert.svg create mode 100644 src/main/resources/image/walletmodel/seedtool.svg create mode 100644 src/main/resources/image/walletmodel/sparrow-invert.svg create mode 100644 src/main/resources/image/walletmodel/sparrow.svg create mode 100644 src/main/resources/image/walletmodel/specter-icon-invert.svg create mode 100644 src/main/resources/image/walletmodel/specter-icon.svg create mode 100644 src/main/resources/image/walletmodel/specter-invert.svg create mode 100644 src/main/resources/image/walletmodel/specter.svg rename src/main/resources/image/{ => walletmodel}/tapsigner-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/tapsigner-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/tapsigner-invert.svg create mode 100644 src/main/resources/image/walletmodel/tapsigner.svg create mode 100644 src/main/resources/image/walletmodel/transactions-invert.svg create mode 100644 src/main/resources/image/walletmodel/transactions.svg rename src/main/resources/image/{ => walletmodel}/trezor-icon-invert.svg (100%) rename src/main/resources/image/{ => walletmodel}/trezor-icon.svg (100%) create mode 100644 src/main/resources/image/walletmodel/trezor-invert.svg create mode 100644 src/main/resources/image/walletmodel/trezor.svg delete mode 100644 src/main/resources/image/whirlpool.png delete mode 100644 src/main/resources/image/whirlpool@2x.png delete mode 100644 src/main/resources/image/whirlpool@3x.png diff --git a/build.gradle b/build.gradle index e24e6fed..45d5f124 100644 --- a/build.gradle +++ b/build.gradle @@ -169,7 +169,7 @@ application { "--add-reads=org.flywaydb.core=java.desktop"] if(os.macOsX) { - applicationDefaultJvmArgs += ["-Dprism.lcdtext=false", "-Xdock:name=Sparrow", "-Xdock:icon=/Users/scy/git/sparrow/src/main/resources/sparrow-large.png", + applicationDefaultJvmArgs += ["-Dprism.lcdtext=false", "-Xdock:name=Sparrow", "--add-opens=javafx.graphics/com.sun.glass.ui.mac=centerdevice.nsmenufx"] } if(headless) { diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index fb55503a..baf5c498 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -2634,7 +2634,6 @@ public class AppController implements Initializable { } }); - Image image = new Image("image/sparrow-small.png", 50, 50, false, false); String walletName = event.getWallet().getFullDisplayName(); if(walletName.length() > 40) { walletName = walletName.substring(0, 40) + "..."; @@ -2643,10 +2642,10 @@ public class AppController implements Initializable { Notifications notificationBuilder = Notifications.create() .title("Sparrow - " + walletName) .text(text) - .graphic(new ImageView(image)) + .graphic(new DialogImage(DialogImage.Type.SPARROW)) .hideAfter(Duration.seconds(15)) .position(Pos.TOP_RIGHT) - .threshold(5, Notifications.create().title("Sparrow").text("Multiple new wallet transactions").graphic(new ImageView(image))) + .threshold(5, Notifications.create().title("Sparrow").text("Multiple new wallet transactions").graphic(new DialogImage(DialogImage.Type.SPARROW))) .onAction(e -> selectTab(event.getWallet())); //If controlsfx can't find our window, we must set the window ourselves (unfortunately notification is then shown within this window) diff --git a/src/main/java/com/sparrowwallet/sparrow/AppServices.java b/src/main/java/com/sparrowwallet/sparrow/AppServices.java index b6f27f87..36222a75 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppServices.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppServices.java @@ -13,6 +13,7 @@ import com.sparrowwallet.drongo.crypto.InvalidPasswordException; import com.sparrowwallet.drongo.crypto.Key; import com.sparrowwallet.drongo.policy.PolicyType; import com.sparrowwallet.drongo.wallet.*; +import com.sparrowwallet.sparrow.control.DialogImage; import com.sparrowwallet.sparrow.control.WalletPasswordDialog; import com.sparrowwallet.sparrow.glyphfont.FontAwesome5; import com.sparrowwallet.sparrow.net.Auth47; @@ -1095,8 +1096,7 @@ public class AppServices { walletChoiceDialog.initOwner(getActiveWindow()); walletChoiceDialog.setTitle("Choose Wallet"); walletChoiceDialog.setHeaderText("Choose a wallet to " + actionDescription); - Image image = new Image("/image/sparrow-small.png"); - walletChoiceDialog.getDialogPane().setGraphic(new ImageView(image)); + walletChoiceDialog.getDialogPane().setGraphic(new DialogImage(DialogImage.Type.SPARROW)); setStageIcon(walletChoiceDialog.getDialogPane().getScene().getWindow()); moveToActiveWindowScreen(walletChoiceDialog); Optional optWallet = walletChoiceDialog.showAndWait(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/CardImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/CardImportPane.java index fe466794..03ea3994 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/CardImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/CardImportPane.java @@ -48,7 +48,7 @@ public class CardImportPane extends TitledDescriptionPane { private final SimpleStringProperty pin = new SimpleStringProperty(""); public CardImportPane(Wallet wallet, KeystoreCardImport importer, KeyDerivation requiredDerivation) { - super(importer.getName(), "Place card on reader", importer.getKeystoreImportDescription(getAccount(wallet, requiredDerivation)), "image/" + importer.getWalletModel().getType() + ".png"); + super(importer.getName(), "Place card on reader", importer.getKeystoreImportDescription(getAccount(wallet, requiredDerivation)), importer.getWalletModel()); this.importer = importer; this.derivation = requiredDerivation == null ? wallet.getScriptType().getDefaultDerivation() : requiredDerivation.getDerivation(); } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/DevicePane.java b/src/main/java/com/sparrowwallet/sparrow/control/DevicePane.java index 8077c55c..a74d8ce6 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/DevicePane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/DevicePane.java @@ -75,7 +75,7 @@ public class DevicePane extends TitledDescriptionPane { private boolean defaultDevice; public DevicePane(Wallet wallet, Device device, boolean defaultDevice, KeyDerivation requiredDerivation) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = DeviceOperation.IMPORT; this.wallet = wallet; this.psbt = null; @@ -102,7 +102,7 @@ public class DevicePane extends TitledDescriptionPane { } public DevicePane(Wallet wallet, PSBT psbt, Device device, boolean defaultDevice) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = DeviceOperation.SIGN; this.wallet = wallet; this.psbt = psbt; @@ -129,7 +129,7 @@ public class DevicePane extends TitledDescriptionPane { } public DevicePane(Wallet wallet, OutputDescriptor outputDescriptor, Device device, boolean defaultDevice) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = DeviceOperation.DISPLAY_ADDRESS; this.wallet = wallet; this.psbt = null; @@ -152,7 +152,7 @@ public class DevicePane extends TitledDescriptionPane { } public DevicePane(Wallet wallet, String message, KeyDerivation keyDerivation, Device device, boolean defaultDevice) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = DeviceOperation.SIGN_MESSAGE; this.wallet = wallet; this.psbt = null; @@ -179,7 +179,7 @@ public class DevicePane extends TitledDescriptionPane { } public DevicePane(Wallet wallet, List availableAccounts, Device device, boolean defaultDevice) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = DeviceOperation.DISCOVER_KEYSTORES; this.wallet = wallet; this.psbt = null; @@ -202,7 +202,7 @@ public class DevicePane extends TitledDescriptionPane { } public DevicePane(DeviceOperation deviceOperation, Device device, boolean defaultDevice) { - super(device.getModel().toDisplayString(), "", "", "image/" + device.getType() + ".png"); + super(device.getModel().toDisplayString(), "", "", device.getModel()); this.deviceOperation = deviceOperation; this.wallet = null; this.psbt = null; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/DialogImage.java b/src/main/java/com/sparrowwallet/sparrow/control/DialogImage.java new file mode 100644 index 00000000..3f837d05 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/control/DialogImage.java @@ -0,0 +1,85 @@ +package com.sparrowwallet.sparrow.control; + +import com.sparrowwallet.sparrow.AppServices; +import com.sparrowwallet.sparrow.Theme; +import com.sparrowwallet.sparrow.io.Config; +import javafx.beans.NamedArg; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.layout.StackPane; +import org.girod.javafx.svgimage.SVGImage; +import org.girod.javafx.svgimage.SVGLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URL; +import java.util.Locale; + +public class DialogImage extends StackPane { + private static final Logger log = LoggerFactory.getLogger(DialogImage.class); + + public static final int WIDTH = 50; + public static final int HEIGHT = 50; + + public ObjectProperty typeProperty = new SimpleObjectProperty<>(); + + public DialogImage() { + setPrefSize(WIDTH, HEIGHT); + this.typeProperty.addListener((observable, oldValue, type) -> { + refresh(type); + }); + } + + public DialogImage(@NamedArg("type") Type type) { + this(); + this.typeProperty.set(type); + } + + public void refresh() { + Type type = getType(); + refresh(type); + } + + protected void refresh(Type type) { + SVGImage svgImage; + if(Config.get().getTheme() == Theme.DARK) { + svgImage = loadSVGImage("/image/dialog/" + type.name().toLowerCase(Locale.ROOT) + "-invert.svg"); + } else { + svgImage = loadSVGImage("/image/dialog/" + type.name().toLowerCase(Locale.ROOT) + ".svg"); + } + + if(svgImage != null) { + getChildren().clear(); + getChildren().add(svgImage); + } + } + + public Type getType() { + return typeProperty.get(); + } + + public ObjectProperty typeProperty() { + return typeProperty; + } + + public void setType(Type type) { + this.typeProperty.set(type); + } + + private SVGImage loadSVGImage(String imageName) { + try { + URL url = AppServices.class.getResource(imageName); + if(url != null) { + return SVGLoader.load(url); + } + } catch(Exception e) { + log.error("Could not find image " + imageName); + } + + return null; + } + + public enum Type { + SPARROW, SEED, PAYNYM, BORDERWALLETS, USERADD, WHIRLPOOL; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java index 84624c42..968375e9 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/DownloadVerifierDialog.java @@ -632,15 +632,8 @@ public class DownloadVerifierDialog extends Dialog { vBox.getChildren().addAll(headerLabel, descriptionLabel); add(vBox, 0, 0); - StackPane graphicContainer = new StackPane(); + StackPane graphicContainer = new DialogImage(DialogImage.Type.SPARROW); graphicContainer.getStyleClass().add("graphic-container"); - Image image = new Image("image/sparrow-small.png", 50, 50, false, false); - if (!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setSmooth(false); - imageView.setImage(image); - graphicContainer.getChildren().add(imageView); - } add(graphicContainer, 1, 0); ColumnConstraints textColumn = new ColumnConstraints(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileImportPane.java index c0aea821..d165972c 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileImportPane.java @@ -7,6 +7,7 @@ import com.sparrowwallet.drongo.protocol.ScriptType; import com.sparrowwallet.drongo.wallet.Keystore; import com.sparrowwallet.drongo.wallet.KeystoreSource; import com.sparrowwallet.drongo.wallet.Wallet; +import com.sparrowwallet.drongo.wallet.WalletModel; import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.glyphfont.FontAwesome5; import com.sparrowwallet.sparrow.io.FileImport; @@ -44,8 +45,8 @@ public abstract class FileImportPane extends TitledDescriptionPane { private final boolean fileFormatAvailable; protected List wallets; - public FileImportPane(FileImport importer, String title, String description, String content, String imageUrl, boolean scannable, boolean fileFormatAvailable) { - super(title, description, content, imageUrl); + public FileImportPane(FileImport importer, String title, String description, String content, WalletModel walletModel, boolean scannable, boolean fileFormatAvailable) { + super(title, description, content, walletModel); this.importer = importer; this.scannable = scannable; this.fileFormatAvailable = fileFormatAvailable; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreExportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreExportPane.java index 0cd2f562..6eecf0f3 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreExportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreExportPane.java @@ -37,7 +37,7 @@ public class FileKeystoreExportPane extends TitledDescriptionPane { private final boolean file; public FileKeystoreExportPane(Keystore keystore, KeystoreFileExport exporter) { - super(exporter.getName(), "Keystore export", exporter.getKeystoreExportDescription(), "image/" + exporter.getWalletModel().getType() + ".png"); + super(exporter.getName(), "Keystore export", exporter.getKeystoreExportDescription(), exporter.getWalletModel()); this.keystore = keystore; this.exporter = exporter; this.scannable = exporter.isKeystoreExportScannable(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreImportPane.java index 49d2da20..bb1a4d42 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileKeystoreImportPane.java @@ -16,7 +16,7 @@ public class FileKeystoreImportPane extends FileImportPane { private final KeyDerivation requiredDerivation; public FileKeystoreImportPane(Wallet wallet, KeystoreFileImport importer, KeyDerivation requiredDerivation) { - super(importer, importer.getName(), "Key import", importer.getKeystoreImportDescription(getAccount(wallet, requiredDerivation)), "image/" + importer.getWalletModel().getType() + ".png", importer.isKeystoreImportScannable(), importer.isFileFormatAvailable()); + super(importer, importer.getName(), "Key import", importer.getKeystoreImportDescription(getAccount(wallet, requiredDerivation)), importer.getWalletModel(), importer.isKeystoreImportScannable(), importer.isFileFormatAvailable()); this.wallet = wallet; this.importer = importer; this.requiredDerivation = requiredDerivation; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletExportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletExportPane.java index c25aa2f5..4980de8b 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletExportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletExportPane.java @@ -41,7 +41,7 @@ public class FileWalletExportPane extends TitledDescriptionPane { private final boolean file; public FileWalletExportPane(Wallet wallet, WalletExport exporter) { - super(exporter.getName(), "Wallet export", exporter.getWalletExportDescription(), "image/" + exporter.getWalletModel().getType() + ".png"); + super(exporter.getName(), "Wallet export", exporter.getWalletExportDescription(), exporter.getWalletModel()); this.wallet = wallet; this.exporter = exporter; this.scannable = exporter.isWalletExportScannable(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletImportPane.java index 2a581e3d..49328623 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletImportPane.java @@ -12,7 +12,7 @@ public class FileWalletImportPane extends FileImportPane { private final WalletImport importer; public FileWalletImportPane(WalletImport importer) { - super(importer, importer.getName(), "Wallet import", importer.getWalletImportDescription(), "image/" + importer.getWalletModel().getType() + ".png", importer.isWalletImportScannable(), importer.isWalletImportFileFormatAvailable()); + super(importer, importer.getName(), "Wallet import", importer.getWalletImportDescription(), importer.getWalletModel(), importer.isWalletImportScannable(), importer.isWalletImportFileFormatAvailable()); this.importer = importer; } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletKeystoreImportPane.java index 212ae93d..c1a0e1b5 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/FileWalletKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/FileWalletKeystoreImportPane.java @@ -42,7 +42,7 @@ public class FileWalletKeystoreImportPane extends FileImportPane { private String password; public FileWalletKeystoreImportPane(KeystoreFileImport importer) { - super(importer, importer.getName(), "Wallet import", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png", importer.isKeystoreImportScannable(), importer.isFileFormatAvailable()); + super(importer, importer.getName(), "Wallet import", importer.getKeystoreImportDescription(), importer.getWalletModel(), importer.isKeystoreImportScannable(), importer.isFileFormatAvailable()); this.importer = importer; } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java index bb036f55..867e702d 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MessageSignDialog.java @@ -118,14 +118,7 @@ public class MessageSignDialog extends Dialog { dialogPane.getStylesheets().add(AppServices.class.getResource("dialog.css").toExternalForm()); AppServices.setStageIcon(dialogPane.getScene().getWindow()); dialogPane.setHeaderText(title == null ? (wallet == null ? "Verify Message" : "Sign/Verify Message") : title); - - Image image = new Image("image/seed.png", 50, 50, false, false); - if (!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setSmooth(false); - imageView.setImage(image); - dialogPane.setGraphic(imageView); - } + dialogPane.setGraphic(new WalletModelImage(WalletModel.SEED)); VBox vBox = new VBox(); vBox.setSpacing(20); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicGridDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicGridDialog.java index b85e6d40..e0cf0c4e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicGridDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicGridDialog.java @@ -50,8 +50,7 @@ public class MnemonicGridDialog extends Dialog> { dialogPane.getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm()); dialogPane.getStylesheets().add(AppServices.class.getResource("grid.css").toExternalForm()); dialogPane.setHeaderText("Load a Border Wallets PDF, or generate a grid from a BIP39 seed.\nThen select 11 or 23 words in a pattern on the grid.\nThe order of selection is important!"); - javafx.scene.image.Image image = new Image("/image/border-wallets.png"); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(new DialogImage(DialogImage.Type.BORDERWALLETS)); String[][] emptyWordGrid = new String[128][GRID_COLUMN_COUNT]; Grid grid = getGrid(emptyWordGrid); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreDisplayPane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreDisplayPane.java index a48e7c18..9b59fc09 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreDisplayPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreDisplayPane.java @@ -19,7 +19,7 @@ public class MnemonicKeystoreDisplayPane extends MnemonicKeystorePane { private final DeterministicSeed.Type type; public MnemonicKeystoreDisplayPane(Keystore keystore) { - super(keystore.getSeed().getType().getName(), keystore.getSeed().needsPassphrase() && (keystore.getSeed().getPassphrase() == null || keystore.getSeed().getPassphrase().length() > 0) ? "Passphrase entered" : "No passphrase", "", "image/" + WalletModel.SEED.getType() + ".png"); + super(keystore.getSeed().getType().getName(), keystore.getSeed().needsPassphrase() && (keystore.getSeed().getPassphrase() == null || keystore.getSeed().getPassphrase().length() > 0) ? "Passphrase entered" : "No passphrase", "", WalletModel.SEED); showHideLink.setVisible(false); buttonBox.getChildren().clear(); this.type = keystore.getSeed().getType(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreEntryPane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreEntryPane.java index de458cab..7b8e29d1 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreEntryPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreEntryPane.java @@ -19,7 +19,7 @@ public class MnemonicKeystoreEntryPane extends MnemonicKeystorePane { private boolean generated; public MnemonicKeystoreEntryPane(String name, int numWords) { - super(name, "Enter seed words", "", "image/" + WalletModel.SEED.getType() + ".png"); + super(name, "Enter seed words", "", WalletModel.SEED); showHideLink.setVisible(false); buttonBox.getChildren().clear(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreImportPane.java index a4b9deb9..2372ab35 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystoreImportPane.java @@ -45,7 +45,7 @@ public class MnemonicKeystoreImportPane extends MnemonicKeystorePane { private List generatedMnemonicCode; public MnemonicKeystoreImportPane(Wallet wallet, KeystoreMnemonicImport importer, KeyDerivation defaultDerivation) { - super(importer.getName(), "Create or enter seed", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png"); + super(importer.getName(), "Create or enter seed", importer.getKeystoreImportDescription(), importer.getWalletModel()); this.wallet = wallet; this.importer = importer; this.defaultDerivation = defaultDerivation; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.java index b17127e7..d3dda2d6 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicKeystorePane.java @@ -3,6 +3,7 @@ package com.sparrowwallet.sparrow.control; import com.sparrowwallet.drongo.wallet.Bip39MnemonicCode; import com.sparrowwallet.drongo.wallet.DeterministicSeed; import com.sparrowwallet.drongo.wallet.MnemonicException; +import com.sparrowwallet.drongo.wallet.WalletModel; import com.sparrowwallet.drongo.wallet.slip39.Slip39MnemonicCode; import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.glyphfont.GlyphUtils; @@ -51,8 +52,8 @@ public class MnemonicKeystorePane extends TitledDescriptionPane { protected final SimpleStringProperty passphraseProperty = new SimpleStringProperty(""); protected IntegerProperty defaultWordSizeProperty; - public MnemonicKeystorePane(String title, String description, String content, String imageUrl) { - super(title, description, content, imageUrl); + public MnemonicKeystorePane(String title, String description, String content, WalletModel walletModel) { + super(title, description, content, walletModel); } @Override diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.java index 75aff920..906659b8 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicShareKeystoreImportPane.java @@ -44,7 +44,7 @@ public class MnemonicShareKeystoreImportPane extends MnemonicKeystorePane { private int currentShare; public MnemonicShareKeystoreImportPane(Wallet wallet, KeystoreMnemonicShareImport importer, KeyDerivation defaultDerivation) { - super(importer.getName(), "Enter seed share", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png"); + super(importer.getName(), "Enter seed share", importer.getKeystoreImportDescription(), importer.getWalletModel()); this.wallet = wallet; this.importer = importer; this.defaultDerivation = defaultDerivation; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicWalletKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicWalletKeystoreImportPane.java index ad6e19cb..9aff3134 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/MnemonicWalletKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/MnemonicWalletKeystoreImportPane.java @@ -41,7 +41,7 @@ public class MnemonicWalletKeystoreImportPane extends MnemonicKeystorePane { private Button importButton; public MnemonicWalletKeystoreImportPane(KeystoreMnemonicImport importer) { - super(importer.getName(), "Seed import", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png"); + super(importer.getName(), "Seed import", importer.getKeystoreImportDescription(), importer.getWalletModel()); this.importer = importer; } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/PrivateKeySweepDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/PrivateKeySweepDialog.java index f08c863a..38451a12 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/PrivateKeySweepDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/PrivateKeySweepDialog.java @@ -14,6 +14,7 @@ import com.sparrowwallet.drongo.protocol.*; import com.sparrowwallet.drongo.psbt.PSBT; import com.sparrowwallet.drongo.psbt.PSBTInput; import com.sparrowwallet.drongo.wallet.Wallet; +import com.sparrowwallet.drongo.wallet.WalletModel; import com.sparrowwallet.sparrow.AppServices; import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.UnitFormat; @@ -73,14 +74,7 @@ public class PrivateKeySweepDialog extends Dialog { dialogPane.getStylesheets().add(AppServices.class.getResource("dialog.css").toExternalForm()); AppServices.setStageIcon(dialogPane.getScene().getWindow()); dialogPane.setHeaderText("Sweep Private Key"); - - Image image = new Image("image/seed.png", 50, 50, false, false); - if(!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setSmooth(false); - imageView.setImage(image); - dialogPane.setGraphic(imageView); - } + dialogPane.setGraphic(new WalletModelImage(WalletModel.SEED)); Form form = new Form(); Fieldset fieldset = new Fieldset(); @@ -378,7 +372,7 @@ public class PrivateKeySweepDialog extends Dialog { }); if(Config.get().getServerType() == ServerType.BITCOIN_CORE) { - ServiceProgressDialog serviceProgressDialog = new ServiceProgressDialog("Address Scan", "Scanning address for transactions...", "/image/sparrow.png", addressUtxosService); + ServiceProgressDialog serviceProgressDialog = new ServiceProgressDialog("Address Scan", "Scanning address for transactions...", new DialogImage(DialogImage.Type.SPARROW), addressUtxosService); serviceProgressDialog.initOwner(getDialogPane().getScene().getWindow()); AppServices.moveToActiveWindowScreen(serviceProgressDialog); } diff --git a/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java index 3332cb0a..b844567d 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/SearchWalletDialog.java @@ -60,14 +60,7 @@ public class SearchWalletDialog extends Dialog { dialogPane.getStylesheets().add(AppServices.class.getResource("search.css").toExternalForm()); AppServices.setStageIcon(dialogPane.getScene().getWindow()); dialogPane.setHeaderText(showWallet ? "Search All Wallets" : "Search Wallet " + walletForms.get(0).getMasterWallet().getName()); - - Image image = new Image("image/sparrow-small.png", 50, 50, false, false); - if(!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setSmooth(false); - imageView.setImage(image); - dialogPane.setGraphic(imageView); - } + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); VBox vBox = new VBox(); vBox.setSpacing(20); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/SendToManyDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/SendToManyDialog.java index 942b13fa..0899baf8 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/SendToManyDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/SendToManyDialog.java @@ -42,8 +42,7 @@ public class SendToManyDialog extends Dialog> { setTitle("Send to Many"); dialogPane.getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm()); dialogPane.setHeaderText("Send to many recipients by specifying addresses and amounts.\nOnly the first row's label is necessary."); - Image image = new Image("/image/sparrow-small.png"); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); List initialPayments = IntStream.range(0, 100).mapToObj(i -> new Payment(null, null, -1, false)).collect(Collectors.toList()); Grid grid = getGrid(initialPayments); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/ServiceProgressDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/ServiceProgressDialog.java index 8586bd8e..289ff7e0 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/ServiceProgressDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/ServiceProgressDialog.java @@ -3,13 +3,12 @@ package com.sparrowwallet.sparrow.control; import com.sparrowwallet.sparrow.AppServices; import javafx.beans.property.*; import javafx.concurrent.Worker; +import javafx.scene.Node; import javafx.scene.control.DialogPane; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import org.controlsfx.dialog.ProgressDialog; public class ServiceProgressDialog extends ProgressDialog { - public ServiceProgressDialog(String title, String header, String imagePath, Worker worker) { + public ServiceProgressDialog(String title, String header, Node graphic, Worker worker) { super(worker); final DialogPane dialogPane = getDialogPane(); @@ -20,8 +19,7 @@ public class ServiceProgressDialog extends ProgressDialog { setHeaderText(header); dialogPane.getStyleClass().remove("progress-dialog"); - Image image = new Image(imagePath); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(graphic); } public static class ProxyWorker implements Worker { diff --git a/src/main/java/com/sparrowwallet/sparrow/control/TextAreaDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/TextAreaDialog.java index 7aa63174..fd9db165 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/TextAreaDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/TextAreaDialog.java @@ -44,8 +44,7 @@ public class TextAreaDialog extends Dialog { final DialogPane dialogPane = new TextAreaDialogPane(); setDialogPane(dialogPane); - Image image = new Image("/image/sparrow-small.png"); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); HBox hbox = new HBox(); this.textArea = new TextArea(defaultValue); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/TextfieldDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/TextfieldDialog.java index 6b4ce7d7..17c3d76e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/TextfieldDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/TextfieldDialog.java @@ -29,8 +29,7 @@ public class TextfieldDialog extends Dialog { final DialogPane dialogPane = getDialogPane(); setDialogPane(dialogPane); - Image image = new Image("/image/sparrow-small.png"); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); HBox hbox = new HBox(); this.textField = new TextField(defaultValue); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/TitledDescriptionPane.java b/src/main/java/com/sparrowwallet/sparrow/control/TitledDescriptionPane.java index f6c542e3..994dd559 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/TitledDescriptionPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/TitledDescriptionPane.java @@ -2,14 +2,13 @@ package com.sparrowwallet.sparrow.control; import com.sparrowwallet.drongo.KeyDerivation; import com.sparrowwallet.drongo.wallet.Wallet; +import com.sparrowwallet.drongo.wallet.WalletModel; import com.sparrowwallet.sparrow.AppServices; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.control.*; -import javafx.scene.image.Image; -import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; @@ -23,17 +22,17 @@ public class TitledDescriptionPane extends TitledPane { protected Hyperlink showHideLink; protected HBox buttonBox; - public TitledDescriptionPane(String title, String description, String content, String imageUrl) { + public TitledDescriptionPane(String title, String description, String content, WalletModel walletModel) { getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm()); getStyleClass().add("titled-description-pane"); setPadding(Insets.EMPTY); - setGraphic(getTitle(title, description, imageUrl)); + setGraphic(getTitle(title, description, walletModel)); setContent(getContentBox(content)); removeArrow(); } - protected Node getTitle(String title, String description, String imageUrl) { + protected Node getTitle(String title, String description, WalletModel walletModel) { HBox listItem = new HBox(); listItem.setPadding(new Insets(10, 20, 10, 10)); listItem.setSpacing(10); @@ -43,12 +42,8 @@ public class TitledDescriptionPane extends TitledPane { imageBox.setMinHeight(50); listItem.getChildren().add(imageBox); - Image image = new Image(imageUrl, 50, 50, true, true); - if (!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setImage(image); - imageBox.getChildren().add(imageView); - } + WalletModelImage walletModelImage = new WalletModelImage(walletModel); + imageBox.getChildren().add(walletModelImage); VBox labelsBox = new VBox(); labelsBox.setSpacing(5); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletIcon.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletIcon.java index 35d0d348..710cb98b 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletIcon.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletIcon.java @@ -74,33 +74,15 @@ public class WalletIcon extends StackPane { SVGImage svgImage; if(Config.get().getTheme() == Theme.DARK) { - svgImage = loadSVGImage("/image/" + walletModel.getType() + "-icon-invert.svg"); + svgImage = loadSVGImage("/image/walletmodel/" + walletModel.getType() + "-icon-invert.svg"); } else { - svgImage = loadSVGImage("/image/" + walletModel.getType() + "-icon.svg"); + svgImage = loadSVGImage("/image/walletmodel/" + walletModel.getType() + "-icon.svg"); } if(svgImage != null) { getChildren().add(svgImage); return; } - - Image image = null; - if(Config.get().getTheme() == Theme.DARK) { - image = loadImage("image/" + walletModel.getType() + "-icon-invert.png"); - } - - if(image == null) { - image = loadImage("image/" + walletModel.getType() + "-icon.png"); - } - - if(image == null) { - image = loadImage("image/" + walletModel.getType() + ".png"); - } - - if(image != null && !image.isError()) { - ImageView imageView = new ImageView(image); - getChildren().add(imageView); - } } } @@ -127,16 +109,6 @@ public class WalletIcon extends StackPane { return null; } - private Image loadImage(String imageName) { - try { - return new Image(imageName, 15, 15, true, true); - } catch(Exception e) { - //ignore - } - - return null; - } - private void addWalletIcon(String walletId) { Image image = new Image(PROTOCOL + ":" + walletId.replaceAll(" ", "%20").replaceAll("#", "%23") + "?" + QUERY, WIDTH, HEIGHT, true, false); getChildren().clear(); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletModelImage.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletModelImage.java new file mode 100644 index 00000000..10263a41 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletModelImage.java @@ -0,0 +1,78 @@ +package com.sparrowwallet.sparrow.control; + +import com.sparrowwallet.drongo.wallet.WalletModel; +import com.sparrowwallet.sparrow.AppServices; +import com.sparrowwallet.sparrow.Theme; +import com.sparrowwallet.sparrow.io.Config; +import javafx.beans.NamedArg; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.image.Image; +import javafx.scene.layout.StackPane; +import org.girod.javafx.svgimage.SVGImage; +import org.girod.javafx.svgimage.SVGLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.net.URL; + +public class WalletModelImage extends StackPane { + private static final Logger log = LoggerFactory.getLogger(WalletModelImage.class); + + public static final int WIDTH = 50; + public static final int HEIGHT = 50; + + private final ObjectProperty walletModelProperty = new SimpleObjectProperty<>(); + + public WalletModelImage() { + setPrefSize(WIDTH, HEIGHT); + walletModelProperty.addListener((observable, oldValue, walletModel) -> { + refresh(walletModel); + }); + } + + public WalletModelImage(@NamedArg("walletModel") WalletModel walletModel) { + this(); + walletModelProperty.set(walletModel); + } + + public WalletModel getWalletModel() { + return walletModelProperty.get(); + } + + public ObjectProperty walletModelProperty() { + return walletModelProperty; + } + + public void refresh() { + WalletModel walletModel = getWalletModel(); + refresh(walletModel); + } + + protected void refresh(WalletModel walletModel) { + SVGImage svgImage; + if(Config.get().getTheme() == Theme.DARK) { + svgImage = loadSVGImage("/image/walletmodel/" + walletModel.getType() + "-invert.svg"); + } else { + svgImage = loadSVGImage("/image/walletmodel/" + walletModel.getType() + ".svg"); + } + + if(svgImage != null) { + getChildren().clear(); + getChildren().add(svgImage); + } + } + + private SVGImage loadSVGImage(String imageName) { + try { + URL url = AppServices.class.getResource(imageName); + if(url != null) { + return SVGLoader.load(url); + } + } catch(Exception e) { + log.error("Could not find image " + imageName); + } + + return null; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletSummaryDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletSummaryDialog.java index 7e85a318..78e83566 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletSummaryDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletSummaryDialog.java @@ -43,14 +43,7 @@ public class WalletSummaryDialog extends Dialog { AppServices.setStageIcon(dialogPane.getScene().getWindow()); dialogPane.setHeaderText("Wallet Summary for " + (allOpenWallets ? "All Open Wallets" : masterWallets.get(0).getName())); - - Image image = new Image("image/sparrow-small.png", 50, 50, false, false); - if(!image.isError()) { - ImageView imageView = new ImageView(); - imageView.setSmooth(false); - imageView.setImage(image); - dialogPane.setGraphic(imageView); - } + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); HBox hBox = new HBox(40); diff --git a/src/main/java/com/sparrowwallet/sparrow/control/XprvKeystoreImportPane.java b/src/main/java/com/sparrowwallet/sparrow/control/XprvKeystoreImportPane.java index 71f5f50f..0a6d2a6e 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/XprvKeystoreImportPane.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/XprvKeystoreImportPane.java @@ -36,7 +36,7 @@ public class XprvKeystoreImportPane extends TitledDescriptionPane { private ExtendedKey xprv; public XprvKeystoreImportPane(Wallet wallet, KeystoreXprvImport importer, KeyDerivation defaultDerivation) { - super(importer.getName(), "Extended key import", importer.getKeystoreImportDescription(), "image/" + importer.getWalletModel().getType() + ".png"); + super(importer.getName(), "Extended key import", importer.getKeystoreImportDescription(), importer.getWalletModel()); this.wallet = wallet; this.importer = importer; this.defaultDerivation = defaultDerivation; @@ -46,7 +46,7 @@ public class XprvKeystoreImportPane extends TitledDescriptionPane { } public XprvKeystoreImportPane(Keystore keystore) { - super("Master Private Key", "BIP32 key", "", "image/" + WalletModel.SEED.getType() + ".png"); + super("Master Private Key", "BIP32 key", "", WalletModel.SEED); this.wallet = null; this.importer = null; this.defaultDerivation = keystore.getKeyDerivation(); diff --git a/src/main/java/com/sparrowwallet/sparrow/settings/ServerAliasDialog.java b/src/main/java/com/sparrowwallet/sparrow/settings/ServerAliasDialog.java index ca9c26d0..5960bddf 100644 --- a/src/main/java/com/sparrowwallet/sparrow/settings/ServerAliasDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/settings/ServerAliasDialog.java @@ -1,6 +1,7 @@ package com.sparrowwallet.sparrow.settings; import com.sparrowwallet.sparrow.AppServices; +import com.sparrowwallet.sparrow.control.DialogImage; import com.sparrowwallet.sparrow.glyphfont.FontAwesome5; import com.sparrowwallet.sparrow.io.Config; import com.sparrowwallet.sparrow.io.Server; @@ -39,9 +40,7 @@ public class ServerAliasDialog extends Dialog { setTitle("Server Aliases"); dialogPane.getStylesheets().add(AppServices.class.getResource("general.css").toExternalForm()); dialogPane.setHeaderText("Configure aliases for recently connected servers.\nNew servers are added to this list on successful connections."); - - Image image = new Image("/image/sparrow-small.png"); - dialogPane.setGraphic(new ImageView(image)); + dialogPane.setGraphic(new DialogImage(DialogImage.Type.SPARROW)); serverTable = new TableView<>(); serverTable.setPlaceholder(new Label("No servers added yet")); diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/KeystoreController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/KeystoreController.java index c2ac5b5c..fb56d111 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/KeystoreController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/KeystoreController.java @@ -498,7 +498,7 @@ public class KeystoreController extends WalletFormController implements Initiali log.error("Error communicating with card", e); AppServices.showErrorDialog("Error communicating with card", e.getMessage()); }); - ServiceProgressDialog serviceProgressDialog = new ServiceProgressDialog("Authentication Delay", "Waiting for authentication delay to clear...", "/image/" + cardApi.getCardType().getType() + ".png", authDelayService); + ServiceProgressDialog serviceProgressDialog = new ServiceProgressDialog("Authentication Delay", "Waiting for authentication delay to clear...", new WalletModelImage(cardApi.getCardType()), authDelayService); serviceProgressDialog.initOwner(cardServiceButtons.getScene().getWindow()); AppServices.moveToActiveWindowScreen(serviceProgressDialog); authDelayService.start(); diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java index 3cb46668..73dc6a0a 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java @@ -1260,7 +1260,7 @@ public class SendController extends WalletFormController implements Initializabl log.error("Error broadcasting notification transaction", failedEvent.getSource().getException()); AppServices.showErrorDialog("Error broadcasting notification transaction", failedEvent.getSource().getException().getMessage()); }); - ServiceProgressDialog progressDialog = new ServiceProgressDialog("Broadcast", "Broadcast Notification Transaction", "/image/paynym.png", proxyWorker); + ServiceProgressDialog progressDialog = new ServiceProgressDialog("Broadcast", "Broadcast Notification Transaction", new DialogImage(DialogImage.Type.PAYNYM), proxyWorker); progressDialog.initOwner(notificationButton.getScene().getWindow()); AppServices.moveToActiveWindowScreen(progressDialog); proxyWorker.setMessage("Broadcasting notification transaction..."); diff --git a/src/main/resources/com/sparrowwallet/sparrow/about.fxml b/src/main/resources/com/sparrowwallet/sparrow/about.fxml index 1e834ba7..52794707 100644 --- a/src/main/resources/com/sparrowwallet/sparrow/about.fxml +++ b/src/main/resources/com/sparrowwallet/sparrow/about.fxml @@ -5,9 +5,8 @@ + - - @@ -15,9 +14,7 @@ - - - +