From ccc7c1e11242eafe57da0e05a14adb88113e47c2 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Wed, 6 Dec 2017 15:07:07 +0100 Subject: [PATCH 01/32] Reformat code --- gui/src/main/java/io/bisq/gui/bisq.css | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 97e48d3d69..296862f283 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -222,8 +222,7 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } - -.dao-tx-type-unverified-icon, +.dao-tx-type-unverified-icon, .dao-tx-type-unverified-icon:hover { -fx-text-fill: -bs-yellow; -fx-cursor: hand; @@ -247,7 +246,6 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } - .dao-tx-type-received-funds-icon, .dao-tx-type-received-funds-icon:hover { -fx-text-fill: -bs-green-soft; @@ -272,7 +270,6 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } - /******************************************************************************* * * * Tooltip * @@ -1155,4 +1152,4 @@ textfield */ -fx-border-insets: 0 0 0 -2; -fx-background-insets: 0 0 0 -2; -fx-background-radius: 0 4 4 0; -} \ No newline at end of file +} From 332dc60e922e8258b7dee9145f6eddf1e6a37c3e Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 7 Dec 2017 12:53:20 +0100 Subject: [PATCH 02/32] Change class name to use hyphen(-) instead of underscore(_) --- gui/src/main/java/io/bisq/gui/bisq.css | 2 +- .../account/content/seedwords/SeedWordsView.java | 12 ++++++------ .../main/overlays/windows/WalletPasswordWindow.java | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 296862f283..f93b00b424 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -899,7 +899,7 @@ textfield */ * ********************************************************************************************************************/ -.text-field.validation_error, .text-area.validation_error .content, .date-picker.validation_error > .text-field { +.text-field.validation-error, .text-area.validation-error .content, .date-picker.validation-error > .text-field { -fx-background-color: red, linear-gradient( to bottom, diff --git a/gui/src/main/java/io/bisq/gui/main/account/content/seedwords/SeedWordsView.java b/gui/src/main/java/io/bisq/gui/main/account/content/seedwords/SeedWordsView.java index 7f524ea466..5fed50e596 100644 --- a/gui/src/main/java/io/bisq/gui/main/account/content/seedwords/SeedWordsView.java +++ b/gui/src/main/java/io/bisq/gui/main/account/content/seedwords/SeedWordsView.java @@ -104,9 +104,9 @@ public class SeedWordsView extends ActivatableView { seedWordsValidChangeListener = (observable, oldValue, newValue) -> { if (newValue) { - seedWordsTextArea.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); } else { - seedWordsTextArea.getStyleClass().add("validation_error"); + seedWordsTextArea.getStyleClass().add("validation-error"); } }; @@ -137,8 +137,8 @@ public class SeedWordsView extends ActivatableView { .show(); }); - seedWordsTextArea.getStyleClass().remove("validation_error"); - restoreDatePicker.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); + restoreDatePicker.getStyleClass().remove("validation-error"); DeterministicSeed keyChainSeed = btcWalletService.getKeyChainSeed(); @@ -178,8 +178,8 @@ public class SeedWordsView extends ActivatableView { restoreDatePicker.setValue(null); datePicker.setValue(null); - seedWordsTextArea.getStyleClass().remove("validation_error"); - restoreDatePicker.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); + restoreDatePicker.getStyleClass().remove("validation-error"); } private void askForPassword() { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java index 5ead666724..ada21fec27 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java @@ -137,8 +137,8 @@ public class WalletPasswordWindow extends Overlay { restoreButton.setOnAction(null); seedWordsTextArea.setText(""); datePicker.setValue(null); - seedWordsTextArea.getStyleClass().remove("validation_error"); - datePicker.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); + datePicker.getStyleClass().remove("validation-error"); } } @@ -285,9 +285,9 @@ public class WalletPasswordWindow extends Overlay { seedWordsValidChangeListener = (observable, oldValue, newValue) -> { if (newValue) { - seedWordsTextArea.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); } else { - seedWordsTextArea.getStyleClass().add("validation_error"); + seedWordsTextArea.getStyleClass().add("validation-error"); } }; @@ -309,8 +309,8 @@ public class WalletPasswordWindow extends Overlay { restoreButton.setOnAction(e -> onRestore()); - seedWordsTextArea.getStyleClass().remove("validation_error"); - datePicker.getStyleClass().remove("validation_error"); + seedWordsTextArea.getStyleClass().remove("validation-error"); + datePicker.getStyleClass().remove("validation-error"); layout(); } From 235190a3466480b72e772509efac5625502e7c99 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 10:31:12 +0100 Subject: [PATCH 03/32] Extract color codes to top of style file --- gui/src/main/java/io/bisq/gui/bisq.css | 263 ++++++++++++++----------- 1 file changed, 151 insertions(+), 112 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index f93b00b424..34c90b8f8a 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -22,28 +22,60 @@ bg color of non edit textFields: fafafa .root { -bs-grey: #666666; + -bs-dim-grey: dimgrey; + -bs-medium-grey: #AAAAAA; -bs-bg-grey: #dddddd; + -bs-bg-grey2: #bbb; + -bs-bg-grey3: #d3d3d3; + -bs-dark-grey:#999; -bs-light-grey: #cccccc; -bs-content-bg-grey: #f4f4f4; -bs-very-light-grey: #f8f8f8; + -bs-bg-light: #FAFAFA; + -bs-very-light-grey:#F0F0F0; + -bs-very-dark-grey: #3c3c3c; + -bs-very-dark-grey2: #111; + -bs-very-dark-grey3: #444; + -bs-light-grey2: #cfcfcf; + -bs-light-grey3: #b5b5b5; + -bs-bg-grey4: #f6f6f6; + -bs-bg-grey5: #f1f6f7; + -bs-bg-grey6: #e7f5f9; + -bs-bg-grey7: #e0e0e0; + -bs-bg-grey8: #E1E9E1; + -bs-bg-grey9: #fcfcfc; + -bs-bg-grey10: #e5e5e5; + -bs-bg-grey11: #f1f1f1; + -bs-dark-grey: #555; + -fx-accent: #0f86c3; -bs-blue-soft: derive(-fx-accent, 60%); -bs-blue-transparent: #0f87c344; + -bs-bg-blue1: #b5e1ef; + -bs-bg-blue2: #6aa4b6; + -bs-bg-blue3: #9bbdc9; + -bs-bg-blue4: #57acc9; + -bs-green: #00aa33; -bs-green-soft: derive(-bs-green, 60%); -bs-green-transparent: #00aa3344; + -bs-bg-green:#99ba9c; + -bs-bg-green2:#619865; -bs-error-red: #dd0000; + -bs-red: red; -bs-red-soft: derive(-bs-error-red, 60%); -bs-orange: #ff8a2b; + -bs-orange2: #dd6900; -bs-yellow: #ffb60f; -bs-turquoise: #2cacaf; -bs-turquoise2: #1c9099; -bs-brown: #52321b; -bs-dark-blue: #0b456d; + -bs-blue: blue; -bs-dark-green: #708614; -bs-fresh-green: #b7d042; -bs-ocher: #de9d2c; @@ -52,7 +84,9 @@ bg color of non edit textFields: fafafa -bs-soft-red: #fe5e1c; -bs-soft-red2: #f35e1c; -bs-soft-red3: #fa6f25; + -bs-pink: #ff8986; -bs-yellow2: #f7ac03; + -bs-white: #ffffff; -bs-warning: -bs-orange; @@ -66,7 +100,7 @@ bg color of non edit textFields: fafafa -bs-sell-hover: derive(-bs-sell, -10%); -bs-sell-transparent: derive(-bs-sell, 95%); - -bs-cancel: #ddd; + -bs-cancel: -bs-bg-grey; -bs-cancel-focus: derive(-bs-cancel, -50%); -bs-cancel-hover: derive(-bs-cancel, -10%); @@ -77,12 +111,14 @@ bg color of non edit textFields: fafafa -fx-font-size: 13; -fx-font-family: "Verdana"; + -bs-font-dark: #333; + -bs-black: #000000; + -bs-black-transparent: #80000000; } - /* Splash */ #splash { - -fx-background-color: #ffffff; + -fx-background-color: -bs-white; } #splash-error-state-msg { @@ -104,13 +140,13 @@ bg color of non edit textFields: fafafa } #footer-pane { - -fx-background-color: #ddd; + -fx-background-color: -bs-bg-grey; -fx-font-size: 12; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; } #footer-pane-line { - -fx-background: #bbb; + -fx-background: -bs-bg-grey2; } #headline-label { @@ -147,7 +183,7 @@ bg color of non edit textFields: fafafa -fx-font-weight: bold; -fx-alignment: center; -fx-font-size: 11; - -fx-text-fill: white; + -fx-text-fill: -bs-white; } .text-field { @@ -155,12 +191,12 @@ bg color of non edit textFields: fafafa } .text-field:readonly { - -fx-text-fill: #000000; - -fx-background-color: #FAFAFA; + -fx-text-fill: -bs-black; + -fx-background-color: -bs-bg-light; } .text-area:readonly .content { - -fx-background-color: #FAFAFA; + -fx-background-color: -bs-bg-light; } #feedback-text { @@ -169,7 +205,7 @@ bg color of non edit textFields: fafafa #label-url { -fx-cursor: hand; - -fx-text-fill: blue; + -fx-text-fill: -bs-blue; -fx-underline: true; } @@ -184,12 +220,12 @@ bg color of non edit textFields: fafafa } .copy-icon-disputes { - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-cursor: hand; } .copy-icon:hover { - -fx-text-fill: black; + -fx-text-fill: -bs-black; } .external-link-icon { @@ -203,7 +239,7 @@ bg color of non edit textFields: fafafa } .received-funds-icon:hover { - -fx-text-fill: black; + -fx-text-fill: -bs-black; -fx-cursor: hand; } @@ -213,15 +249,16 @@ bg color of non edit textFields: fafafa } .sent-funds-icon:hover { - -fx-text-fill: black; + -fx-text-fill: -bs-black; -fx-cursor: hand; } .internal-funds-icon { - -fx-text-fill: #999; + -fx-text-fill: -bs-dark-grey; -fx-cursor: hand; } + .dao-tx-type-unverified-icon, .dao-tx-type-unverified-icon:hover { -fx-text-fill: -bs-yellow; @@ -246,6 +283,7 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } + .dao-tx-type-received-funds-icon, .dao-tx-type-received-funds-icon:hover { -fx-text-fill: -bs-green-soft; @@ -270,6 +308,7 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } + /******************************************************************************* * * * Tooltip * @@ -277,20 +316,20 @@ bg color of non edit textFields: fafafa ******************************************************************************/ .tooltip { - -fx-background: white; - -fx-text-fill: black; - -fx-background-color: white; + -fx-background: -bs-white; + -fx-text-fill: -bs-black; + -fx-background-color: -bs-white; -fx-background-radius: 6px; -fx-background-insets: 0; -fx-padding: 0.667em 0.75em 0.667em 0.75em; /* 10px */ - -fx-effect: dropshadow(three-pass-box, rgba(0, 0, 0, 0.5), 10, 0.0, 0, 3); + -fx-effect: dropshadow(three-pass-box, -bs-black-transparent, 10, 0.0, 0, 3); -fx-font-size: 0.85em; } /* Same style like non editable textfield. But textfield spans a whole column in a grid, so we use generally textfield */ #label-with-background { - -fx-background-color: #FAFAFA; + -fx-background-color: -bs-bg-light; -fx-border-radius: 4; -fx-padding: 4 4 4 4; } @@ -301,11 +340,11 @@ textfield */ } #address-text-field:hover { - -fx-text-fill: black; + -fx-text-fill: -bs-black; } #funds-confidence { - -fx-progress-color: dimgrey; + -fx-progress-color: -bs-dim-grey; } .hyperlink { @@ -314,7 +353,7 @@ textfield */ } .hyperlink .text { - -fx-fill: white; + -fx-fill: -bs-white; -fx-border-style: none; -fx-border-width: 0px; } @@ -328,7 +367,7 @@ textfield */ .hyperlink .text:hover, .hyperlink .tooltip .text, .hyperlink .text:hover { - -fx-fill: black; + -fx-fill: -bs-black; -fx-border-style: none; -fx-border-width: 0px; } @@ -365,7 +404,7 @@ textfield */ } .table-view .text { - -fx-fill: black; + -fx-fill: -bs-black; } .table-view:focused { @@ -384,11 +423,11 @@ textfield */ } .table-view .table-row-cell:selected .table-row-cell:row-selection .table-row-cell:cell-selection .text { - -fx-fill: white; + -fx-fill: -bs-white; } .table-view .table-row-cell:selected .button .text { - -fx-fill: black; + -fx-fill: -bs-black; } .table-view .table-row-cell .copy-icon .text, @@ -397,15 +436,15 @@ textfield */ } .table-view .table-row-cell:selected .copy-icon .text { - -fx-fill: white; + -fx-fill: -bs-white; } .table-view .table-row-cell:selected .copy-icon .text:hover { - -fx-fill: black; + -fx-fill: -bs-black; } .table-view .table-row-cell:selected .hyperlink .text { - -fx-fill: white; + -fx-fill: -bs-white; -fx-border-style: none; -fx-border-width: 0px; } @@ -419,7 +458,7 @@ textfield */ .table-view .table-row-cell .hyperlink .text:hover, .table-view .table-row-cell:selected .hyperlink .tooltip .text, .table-view .table-row-cell:selected .hyperlink .text:hover { - -fx-fill: black; + -fx-fill: -bs-black; -fx-border-style: none; -fx-border-width: 0px; } @@ -444,7 +483,7 @@ textfield */ ******************************************************************************/ #non-clickable-icon { - -fx-text-fill: #AAAAAA; + -fx-text-fill: -bs-medium-grey; } #clickable-icon { @@ -504,15 +543,15 @@ textfield */ /* validation */ #validation-error { - -fx-text-fill: red; + -fx-text-fill: -bs-red; } /* Account */ #content-pane-top { - -fx-background-color: #cfcfcf, - linear-gradient(#cfcfcf 0%, #b5b5b5 100%), - linear-gradient(#d3d3d3 0%, -bs-bg-grey 100%); + -fx-background-color: -bs-light-grey2, + linear-gradient(-bs-light-grey2 0%, -bs-light-grey3 100%), + linear-gradient(-bs-bg-grey3 0%, -bs-bg-grey 100%); -fx-background-insets: 0 0 0 0, 0, 1; } @@ -547,8 +586,8 @@ textfield */ #currency-info-label { -fx-border-radius: 0 4 4 0; -fx-padding: 4 4 4 4; - -fx-background-color: #f6f6f6; - -fx-border-color: #aaa; + -fx-background-color: -bs-bg-grey4; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid solid solid none; -fx-border-insets: 0 0 0 -2; } @@ -556,8 +595,8 @@ textfield */ #currency-info-label-disabled { -fx-border-radius: 0 4 4 0; -fx-padding: 4 4 4 4; - -fx-background-color: #e0e0e0; - -fx-border-color: #e0e0e0; + -fx-background-color: -bs-bg-grey7; + -fx-border-color: -bs-bg-grey7; -fx-border-style: solid solid solid none; -fx-border-insets: 0 0 0 -2; } @@ -565,7 +604,7 @@ textfield */ #toggle-price-left { -fx-border-radius: 4 0 0 4; -fx-padding: 4 4 4 4; - -fx-border-color: #aaa; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid none solid solid; -fx-border-insets: 0 -2 0 0; -fx-background-insets: 0 -2 0 0; @@ -575,7 +614,7 @@ textfield */ #toggle-price-right { -fx-border-radius: 0 4 4 0; -fx-padding: 4 4 4 4; - -fx-border-color: #aaa; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid solid solid none; -fx-border-insets: 0 0 0 -2; -fx-background-insets: 0 0 0 -2; @@ -583,7 +622,7 @@ textfield */ } #totals-separator { - -fx-background: #AAAAAA; + -fx-background: -bs-medium-grey; } #payment-info { @@ -594,7 +633,7 @@ textfield */ #wizard-title-deactivated { -fx-font-weight: bold; -fx-font-size: 16; - -fx-text-fill: #999999; + -fx-text-fill: -bs-dark-grey; } #wizard-title-active { @@ -610,7 +649,7 @@ textfield */ } #wizard-sub-title-deactivated { - -fx-text-fill: #999999; + -fx-text-fill: #-bs-dark-grey; } #wizard-sub-title-active { @@ -622,8 +661,8 @@ textfield */ } #wizard-item-background-deactivated { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, #ccc); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -633,8 +672,8 @@ textfield */ } #wizard-item-background-active { - -fx-body-color: linear-gradient(to bottom, #f1f6f7, #e7f5f9); - -fx-outer-border: linear-gradient(to bottom, #b5e1ef, #6aa4b6); + -fx-body-color: linear-gradient(to bottom, -bs-bg-grey5, -bs-bg-grey6); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-blue1, -bs-bg-blue2); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -644,8 +683,8 @@ textfield */ } #wizard-item-background-completed { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, #99ba9c, #619865); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-green, -bs-bg-green2); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -658,7 +697,7 @@ textfield */ #wizard-title-disabled { -fx-font-weight: bold; -fx-font-size: 16; - -fx-text-fill: #999999; + -fx-text-fill: -bs-dark-grey; } #wizard-title-active { @@ -674,8 +713,8 @@ textfield */ } #account-settings-item-background-disabled { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, #ccc); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -685,8 +724,8 @@ textfield */ } #account-settings-item-background-active { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, #ccc); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -696,8 +735,8 @@ textfield */ } #account-settings-item-background-selected { - -fx-body-color: linear-gradient(to bottom, #f1f6f7, #e7f5f9); - -fx-outer-border: linear-gradient(to bottom, #b5e1ef, #6aa4b6); + -fx-body-color: linear-gradient(to bottom, -bs-bg-grey5, -bs-bg-grey6); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-blue1, -bs-bg-blue2); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -709,10 +748,10 @@ textfield */ /* Pending trades */ #trade-wizard-item-background-disabled { -fx-text-fill: -bs-grey; - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, #ccc); - /* -fx-body-color: #F0F0F0; - -fx-outer-border: #ccc;*/ + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); + /* -fx-body-color: -bs-very-light-grey; + -fx-outer-border: -bs-light-grey;*/ -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -724,9 +763,9 @@ textfield */ #trade-wizard-item-background-active { -fx-font-weight: bold; -fx-font-size: 14; - -fx-body-color: linear-gradient(to bottom, #f1f6f7, #e7f5f9); - -fx-outer-border: linear-gradient(to bottom, #b5e1ef, #6aa4b6); - /* -fx-body-color: #e7f5f9; + -fx-body-color: linear-gradient(to bottom, -bs-bg-grey5, -bs-bg-grey6); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-blue1, -bs-bg-blue2); + /* -fx-body-color: -bs-bg-grey6; -fx-outer-border: #6aa4b6;*/ -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, @@ -737,8 +776,8 @@ textfield */ } #trade-wizard-item-background-completed { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #E1E9E1); - -fx-outer-border: linear-gradient(to bottom, #99ba9c, #619865); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-bg-grey8); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-green, -bs-bg-green2); /* -fx-body-color: #def6df; -fx-outer-border: #7db581;*/ -fx-background-color: -fx-shadow-highlight-color, @@ -758,7 +797,7 @@ textfield */ #open-dispute-button { -fx-font-weight: bold; -fx-font-size: 14; - -fx-base: #dd0000; + -fx-base: -bs-error-red; } /* TitledGroupBg */ @@ -777,8 +816,8 @@ textfield */ } #titled-group-bg { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, #ccc); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -788,8 +827,8 @@ textfield */ } #titled-group-bg-active { - -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, #F0F0F0); - -fx-outer-border: linear-gradient(to bottom, #9bbdc9, #57acc9); + -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); + -fx-outer-border: linear-gradient(to bottom, -bs-bg-blue3, -bs-bg-blue4); -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -832,23 +871,23 @@ textfield */ /* message-list-view*/ #message-list-view.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { - -fx-background-color: white; + -fx-background-color: -bs-white; } #message-list-view.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell { - -fx-background-color: white; + -fx-background-color: -bs-white; } #message-list-view.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled { - -fx-background-color: white; + -fx-background-color: -bs-white; } #message-list-view.list-view > .virtual-flow > .clipped-container > .sheet > .list-cell:filled:selected { - -fx-background-color: white; + -fx-background-color: -bs-white; } #message-list-view.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell { - -fx-background-color: white; + -fx-background-color: -bs-white; } #message-list-view.list-cell { @@ -884,12 +923,12 @@ textfield */ } .attachment-icon { - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-cursor: hand; } .attachment-icon-black { - -fx-text-fill: black; + -fx-text-fill: -bs-black; -fx-cursor: hand; } @@ -899,12 +938,12 @@ textfield */ * ********************************************************************************************************************/ -.text-field.validation-error, .text-area.validation-error .content, .date-picker.validation-error > .text-field { - -fx-background-color: red, +.text-field.validation_error, .text-area.validation_error .content, .date-picker.validation_error > .text-field { + -fx-background-color: -bs-red, linear-gradient( to bottom, - derive(#ff8986, 40%) 5%, - derive(#ff8986, 70%) 40% + derive(-bs-pink, 40%) 5%, + derive(-bs-pink, 70%) 40% ); } @@ -920,19 +959,19 @@ textfield */ } #charts .axis { - -fx-tick-label-fill: black; + -fx-tick-label-fill: -bs-black; } #charts .chart-plot-background { - -fx-background-color: white; + -fx-background-color: -bs-white; } #charts .default-color0.chart-area-symbol { - -fx-background-color: -bs-sell, white; + -fx-background-color: -bs-sell, -bs-white; } #charts .default-color1.chart-area-symbol { - -fx-background-color: -bs-buy, white; + -fx-background-color: -bs-buy, -bs-white; } #charts .default-color0.chart-series-area-line { @@ -964,7 +1003,7 @@ textfield */ #buy-button-big { -fx-base: -bs-buy; - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-font-weight: bold; -fx-font-size: 15; -fx-background-radius: 5; @@ -980,7 +1019,7 @@ textfield */ #buy-button { -fx-base: -bs-buy; - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-font-weight: bold; } @@ -994,7 +1033,7 @@ textfield */ #sell-button-big { -fx-base: -bs-sell; - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-font-weight: bold; -fx-font-size: 15; -fx-background-radius: 5; @@ -1010,7 +1049,7 @@ textfield */ #sell-button { -fx-base: -bs-sell; - -fx-text-fill: white; + -fx-text-fill: -bs-white; -fx-font-weight: bold; } @@ -1024,7 +1063,7 @@ textfield */ #cancel-button { -fx-base: -bs-cancel; - -fx-text-fill: #444; + -fx-text-fill: -bs-very-dark-grey3; -fx-font-weight: bold; } @@ -1050,19 +1089,19 @@ textfield */ #popup-bg { -fx-font-size: 14; -fx-text-fill: #333; - -fx-background-color: white; + -fx-background-color: -bs-white; -fx-background-radius: 10 10 10 10; -fx-background-insets: 10; - -fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0); + -fx-effect: dropshadow(gaussian, -bs-dark-grey, 10, 0, 0, 0); } #popup-bg-top { -fx-font-size: 14; -fx-text-fill: #333; - -fx-background-color: white; + -fx-background-color: -bs-white; -fx-background-radius: 0 0 10 10; -fx-background-insets: 10; - -fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0); + -fx-effect: dropshadow(gaussian, -bs-dark-grey, 10, 0, 0, 0); } #notification-popup-headline { @@ -1073,20 +1112,20 @@ textfield */ #notification-popup-bg { -fx-font-size: 11; - -fx-text-fill: #3c3c3c; - -fx-background-color: linear-gradient(to bottom, #fcfcfc, #e5e5e5); + -fx-text-fill: -bs-very-dark-grey; + -fx-background-color: linear-gradient(to bottom, -bs-bg-grey9, -bs-bg-grey10); -fx-background-radius: 5 5 5 5; -fx-background-insets: 5 5 20 20; - -fx-effect: dropshadow(gaussian, #666, 12, 0, -1, 3); + -fx-effect: dropshadow(gaussian, -bs-grey, 12, 0, -1, 3); } #peer-info-popup-bg { -fx-font-size: 11; - -fx-text-fill: #3c3c3c; - -fx-background-color: linear-gradient(to bottom, #fafafa, #f1f1f1); + -fx-text-fill: -bs-very-dark-grey; + -fx-background-color: linear-gradient(to bottom, -bs-bg-light, -bs-bg-grey11); -fx-background-radius: 3 3 3 3; -fx-background-insets: 5 5 20 20; - -fx-effect: dropshadow(gaussian, #666, 12, 0, -1, 3); + -fx-effect: dropshadow(gaussian, -bs-grey, 12, 0, -1, 3); } #peer-info-popup-headline { @@ -1096,21 +1135,21 @@ textfield */ } .popup-icon-information { - -fx-text-fill: #ddd; + -fx-text-fill: -bs-bg-grey; } .popup-icon-warning { - -fx-text-fill: #dd6900; + -fx-text-fill: -bs-orange2; } #price-feed-combo { - -fx-background-color: #555; - -fx-text-fill: white; + -fx-background-color: -bs-dark-grey; + -fx-text-fill: -bs-white; -fx-alignment: center; } #invert-market-price { - -fx-text-fill: #111; + -fx-text-fill: -bs-very-dark-grey2; } #popup-qr-code-info { @@ -1121,13 +1160,13 @@ textfield */ -fx-font-weight: bold; -fx-alignment: center; -fx-font-size: 10; - -fx-text-fill: white; + -fx-text-fill: -bs-white; } #toggle-left { -fx-border-radius: 4 0 0 4; -fx-padding: 4 4 4 4; - -fx-border-color: #aaa; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid solid solid solid; -fx-border-insets: 0 -2 0 0; -fx-background-insets: 0 -2 0 0; @@ -1137,7 +1176,7 @@ textfield */ #toggle-center { -fx-border-radius: 0 0 0 0; -fx-padding: 4 4 4 4; - -fx-border-color: #aaa; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid solid solid solid; -fx-border-insets: 0 0 0 0; -fx-background-insets: 0 0 0 0; @@ -1147,7 +1186,7 @@ textfield */ #toggle-right { -fx-border-radius: 0 4 4 0; -fx-padding: 4 4 4 4; - -fx-border-color: #aaa; + -fx-border-color: -bs-medium-grey; -fx-border-style: solid solid solid solid; -fx-border-insets: 0 0 0 -2; -fx-background-insets: 0 0 0 -2; From 1482d41520003ab5b6ccefb3e445298b8260d582 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 11:18:12 +0100 Subject: [PATCH 04/32] Sort color codes --- gui/src/main/java/io/bisq/gui/bisq.css | 78 ++++++++++++-------------- 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 34c90b8f8a..4e4fc16037 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -22,7 +22,7 @@ bg color of non edit textFields: fafafa .root { -bs-grey: #666666; - -bs-dim-grey: dimgrey; + -bs-black-transparent: #80000000; -bs-medium-grey: #AAAAAA; -bs-bg-grey: #dddddd; -bs-bg-grey2: #bbb; @@ -39,54 +39,54 @@ bg color of non edit textFields: fafafa -bs-light-grey2: #cfcfcf; -bs-light-grey3: #b5b5b5; -bs-bg-grey4: #f6f6f6; - -bs-bg-grey5: #f1f6f7; - -bs-bg-grey6: #e7f5f9; + -bs-black: #000000; + -bs-font-dark: #333; -bs-bg-grey7: #e0e0e0; - -bs-bg-grey8: #E1E9E1; + -bs-white: #ffffff; -bs-bg-grey9: #fcfcfc; -bs-bg-grey10: #e5e5e5; -bs-bg-grey11: #f1f1f1; -bs-dark-grey: #555; + -bs-dim-grey: dimgrey; - - -fx-accent: #0f86c3; - -bs-blue-soft: derive(-fx-accent, 60%); - -bs-blue-transparent: #0f87c344; - - -bs-bg-blue1: #b5e1ef; - -bs-bg-blue2: #6aa4b6; - -bs-bg-blue3: #9bbdc9; - -bs-bg-blue4: #57acc9; - - -bs-green: #00aa33; - -bs-green-soft: derive(-bs-green, 60%); - -bs-green-transparent: #00aa3344; - -bs-bg-green:#99ba9c; - -bs-bg-green2:#619865; - - -bs-error-red: #dd0000; -bs-red: red; - -bs-red-soft: derive(-bs-error-red, 60%); - - -bs-orange: #ff8a2b; - -bs-orange2: #dd6900; - -bs-yellow: #ffb60f; - -bs-turquoise: #2cacaf; - -bs-turquoise2: #1c9099; - -bs-brown: #52321b; - -bs-dark-blue: #0b456d; - -bs-blue: blue; - -bs-dark-green: #708614; - -bs-fresh-green: #b7d042; - -bs-ocher: #de9d2c; - -bs-light-blue: #c4eef2; + -bs-error-red: #dd0000; + -bs-pink: #ff8986; -bs-smooth-red: #ed7157; -bs-soft-red: #fe5e1c; -bs-soft-red2: #f35e1c; -bs-soft-red3: #fa6f25; - -bs-pink: #ff8986; + -bs-brown: #52321b; + -bs-orange: #ff8a2b; + -bs-orange2: #dd6900; + -bs-ocher: #de9d2c; -bs-yellow2: #f7ac03; - -bs-white: #ffffff; + -bs-yellow: #ffb60f; + -bs-fresh-green: #b7d042; + -bs-dark-green: #708614; + -bs-bg-grey8: #E1E9E1; + -bs-bg-green2:#619865; + -bs-bg-green:#99ba9c; + -bs-green: #00aa33; + -bs-green-transparent: #00aa3344; + -bs-turquoise: #2cacaf; + -bs-turquoise2: #1c9099; + -bs-light-blue: #c4eef2; + -bs-bg-grey5: #f1f6f7; + -bs-bg-grey6: #e7f5f9; + -bs-bg-blue2: #6aa4b6; + -bs-bg-blue1: #b5e1ef; + -bs-bg-blue4: #57acc9; + -bs-bg-blue3: #9bbdc9; + -fx-faint-focus-color: #0f87c322; + -bs-blue-transparent: #0f87c344; + -fx-accent: #0f86c3; + -bs-dark-blue: #0b456d; + -bs-blue: blue; + + -bs-blue-soft: derive(-fx-accent, 60%); + -bs-green-soft: derive(-bs-green, 60%); + -bs-red-soft: derive(-bs-error-red, 60%); -bs-warning: -bs-orange; @@ -106,14 +106,10 @@ bg color of non edit textFields: fafafa -fx-default-button: derive(-fx-accent, 95%); -fx-focus-color: -fx-accent; - -fx-faint-focus-color: #0f87c322; -fx-selection-bar: derive(-fx-accent, 50%); -fx-font-size: 13; -fx-font-family: "Verdana"; - -bs-font-dark: #333; - -bs-black: #000000; - -bs-black-transparent: #80000000; } /* Splash */ From 07e6bea5b0f7ae7deb7702e7fca6e6910abd80df Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 11:39:13 +0100 Subject: [PATCH 05/32] Add color derive examples --- gui/src/main/java/io/bisq/gui/bisq.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 4e4fc16037..4f6c1d7aff 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -28,11 +28,11 @@ bg color of non edit textFields: fafafa -bs-bg-grey2: #bbb; -bs-bg-grey3: #d3d3d3; -bs-dark-grey:#999; - -bs-light-grey: #cccccc; + -bs-light-grey: #cccccc; /* derive(-bs-white, -20%); */ -bs-content-bg-grey: #f4f4f4; -bs-very-light-grey: #f8f8f8; - -bs-bg-light: #FAFAFA; - -bs-very-light-grey:#F0F0F0; + -bs-bg-light: #FAFAFA; /* derive(-bs-white, -2%) */ + -bs-very-light-grey:#F0F0F0; /* derive(-bs-white, -6%) */ -bs-very-dark-grey: #3c3c3c; -bs-very-dark-grey2: #111; -bs-very-dark-grey3: #444; From 5658cee60f17199d665f8b82ffd46f6f7f7d3ba1 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 11:52:59 +0100 Subject: [PATCH 06/32] Extract missing font colors --- gui/src/main/java/io/bisq/gui/bisq.css | 33 ++++++++++++-------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 4f6c1d7aff..c1f9563370 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -21,8 +21,8 @@ bg color of non edit textFields: fafafa */ .root { + -bs-very-dark-grey3: #444; -bs-grey: #666666; - -bs-black-transparent: #80000000; -bs-medium-grey: #AAAAAA; -bs-bg-grey: #dddddd; -bs-bg-grey2: #bbb; @@ -35,7 +35,7 @@ bg color of non edit textFields: fafafa -bs-very-light-grey:#F0F0F0; /* derive(-bs-white, -6%) */ -bs-very-dark-grey: #3c3c3c; -bs-very-dark-grey2: #111; - -bs-very-dark-grey3: #444; + -bs-black-transparent: #80000000; -bs-light-grey2: #cfcfcf; -bs-light-grey3: #b5b5b5; -bs-bg-grey4: #f6f6f6; @@ -48,6 +48,7 @@ bg color of non edit textFields: fafafa -bs-bg-grey11: #f1f1f1; -bs-dark-grey: #555; -bs-dim-grey: dimgrey; + -bs-very-dark-grey3: #333000; -bs-red: red; -bs-error-red: #dd0000; @@ -553,7 +554,7 @@ textfield */ #info-icon-label { -fx-font-size: 16; - -fx-text-fill: #333000; + -fx-text-fill: -bs-very-dark-grey3; } /* OfferPayload book */ @@ -635,25 +636,25 @@ textfield */ #wizard-title-active { -fx-font-weight: bold; -fx-font-size: 16; - -fx-text-fill: #333333; + -fx-text-fill: -bs-font-dark; } #wizard-title-completed { -fx-font-weight: bold; -fx-font-size: 16; - -fx-text-fill: #333333; + -fx-text-fill: -bs-font-dark; } #wizard-sub-title-deactivated { - -fx-text-fill: #-bs-dark-grey; + -fx-text-fill: -bs-dark-grey; } #wizard-sub-title-active { - -fx-text-fill: #333333; + -fx-text-fill: -bs-font-dark; } #wizard-sub-title-completed { - -fx-text-fill: #333333; + -fx-text-fill: -bs-font-dark; } #wizard-item-background-deactivated { @@ -699,7 +700,7 @@ textfield */ #wizard-title-active { -fx-font-weight: bold; -fx-font-size: 16; - -fx-text-fill: #333333; + -fx-text-fill: -bs-font-dark; } #wizard-title-selected { @@ -761,8 +762,6 @@ textfield */ -fx-font-size: 14; -fx-body-color: linear-gradient(to bottom, -bs-bg-grey5, -bs-bg-grey6); -fx-outer-border: linear-gradient(to bottom, -bs-bg-blue1, -bs-bg-blue2); - /* -fx-body-color: -bs-bg-grey6; - -fx-outer-border: #6aa4b6;*/ -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -774,8 +773,6 @@ textfield */ #trade-wizard-item-background-completed { -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-bg-grey8); -fx-outer-border: linear-gradient(to bottom, -bs-bg-green, -bs-bg-green2); - /* -fx-body-color: #def6df; - -fx-outer-border: #7db581;*/ -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, @@ -1079,12 +1076,12 @@ textfield */ #popup-headline { -fx-font-size: 16; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; } #popup-bg { -fx-font-size: 14; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; -fx-background-color: -bs-white; -fx-background-radius: 10 10 10 10; -fx-background-insets: 10; @@ -1093,7 +1090,7 @@ textfield */ #popup-bg-top { -fx-font-size: 14; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; -fx-background-color: -bs-white; -fx-background-radius: 0 0 10 10; -fx-background-insets: 10; @@ -1103,7 +1100,7 @@ textfield */ #notification-popup-headline { -fx-font-size: 13; -fx-font-weight: bold; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; } #notification-popup-bg { @@ -1127,7 +1124,7 @@ textfield */ #peer-info-popup-headline { -fx-font-size: 13; -fx-font-weight: bold; - -fx-text-fill: #333; + -fx-text-fill: -bs-font-dark; } .popup-icon-information { From d85cebd1ee302e764bae19ba7bfe98c5b8ac2126 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 12:15:28 +0100 Subject: [PATCH 07/32] Move qr code image style into stylesheet --- gui/src/main/java/io/bisq/gui/bisq.css | 40 ++++++++++++------- .../gui/main/funds/deposit/DepositView.java | 2 +- .../offer/createoffer/CreateOfferView.java | 2 +- .../main/offer/takeoffer/TakeOfferView.java | 2 +- 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index c1f9563370..159111e616 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -384,7 +384,7 @@ textfield */ /******************************************************************************* * * - * Table * + * Table * * * ******************************************************************************/ @@ -475,7 +475,7 @@ textfield */ /******************************************************************************* * * - * Icons * + * Icons * * * ******************************************************************************/ @@ -494,7 +494,17 @@ textfield */ /******************************************************************************* * * - * Tab pane * + * Images * + * * + ******************************************************************************/ + +.qr-code { + -fx-cursor: hand; +} + +/******************************************************************************* + * * + * Tab pane * * * ******************************************************************************/ @@ -926,9 +936,9 @@ textfield */ } /******************************************************************************************************************** - * - * Text validation - * + * * + * Text validation * + * * ********************************************************************************************************************/ .text-field.validation_error, .text-area.validation_error .content, .date-picker.validation_error > .text-field { @@ -941,9 +951,9 @@ textfield */ } /******************************************************************************************************************** - * - * Market overview - * + * * + * Market overview * + * * ********************************************************************************************************************/ #charts .chart-legend { @@ -989,9 +999,9 @@ textfield */ } /******************************************************************************************************************** - * - * Rounded buttons - * + * * + * Rounded buttons * + * * ********************************************************************************************************************/ #buy-button-big { @@ -1069,9 +1079,9 @@ textfield */ } /******************************************************************************************************************** - * - * Popups - * + * * + * Popups * + * * ********************************************************************************************************************/ #popup-headline { diff --git a/gui/src/main/java/io/bisq/gui/main/funds/deposit/DepositView.java b/gui/src/main/java/io/bisq/gui/main/funds/deposit/DepositView.java index 8916ee8c31..35acb4ba0e 100644 --- a/gui/src/main/java/io/bisq/gui/main/funds/deposit/DepositView.java +++ b/gui/src/main/java/io/bisq/gui/main/funds/deposit/DepositView.java @@ -145,7 +145,7 @@ public class DepositView extends ActivatableView { titledGroupBg = addTitledGroupBg(gridPane, gridRow, 3, Res.get("funds.deposit.fundWallet")); qrCodeImageView = new ImageView(); - qrCodeImageView.setStyle("-fx-cursor: hand;"); + qrCodeImageView.getStyleClass().add("qr-code"); Tooltip.install(qrCodeImageView, new Tooltip(Res.get("shared.openLargeQRWindow"))); qrCodeImageView.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute( () -> UserThread.runAfter( diff --git a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java index 9a24ba7022..273474d348 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java @@ -930,7 +930,7 @@ public class CreateOfferView extends ActivatableViewAndModel GUIUtil.showFeeInfoBeforeExecute( () -> UserThread.runAfter( diff --git a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java index 4b20c61ea9..7068592495 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java @@ -804,7 +804,7 @@ public class TakeOfferView extends ActivatableViewAndModel GUIUtil.showFeeInfoBeforeExecute( () -> UserThread.runAfter( From 867c310cd575c13101d8765669ad8fb44d6dcfdc Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 13:05:03 +0100 Subject: [PATCH 08/32] Extract inline style for GridPanes --- gui/src/main/java/io/bisq/gui/bisq.css | 36 +++++++++++++++++++ .../io/bisq/gui/main/overlays/Overlay.java | 2 +- .../main/overlays/windows/ContractWindow.java | 6 +--- .../windows/DisplayAlertMessageWindow.java | 4 +-- .../windows/DisputeSummaryWindow.java | 6 +--- .../overlays/windows/OfferDetailsWindow.java | 6 +--- .../windows/TorNetworkSettingsWindow.java | 2 +- .../overlays/windows/TradeDetailsWindow.java | 6 +--- 8 files changed, 44 insertions(+), 24 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 159111e616..d9cf1ca66f 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -935,6 +935,19 @@ textfield */ -fx-cursor: hand; } +/******************************************************************************* + * * + * Grid pane * + * * + ******************************************************************************/ + +.grid-pane { + -fx-background-color: -bs-content-bg-grey; + -fx-background-radius: 5; + -fx-effect: dropshadow(gaussian, -bs-dark-grey, 10, 0, 0, 0); + -fx-background-insets: 10; +} + /******************************************************************************************************************** * * * Text validation * @@ -1195,3 +1208,26 @@ textfield */ -fx-background-insets: 0 0 0 -2; -fx-background-radius: 0 4 4 0; } + +/******************************************************************************************************************** + * * + * Overlay * + * * + ********************************************************************************************************************/ + +.separator { + -fx-background: -bs-light-grey; +} + +.headline-label { + -fx-font-weight: bold; + -fx-font-size: 22; +} + +.info-headline-label { + -fx-text-fill: -fx-accent; +} + +.alert-headline-label { + -fx-text-fill: -bs-error-red; +} diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/Overlay.java b/gui/src/main/java/io/bisq/gui/main/overlays/Overlay.java index 6c7949e6e9..f6ee766f55 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/Overlay.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/Overlay.java @@ -705,7 +705,7 @@ public abstract class Overlay { Separator separator = new Separator(); separator.setMouseTransparent(true); separator.setOrientation(Orientation.HORIZONTAL); - separator.setStyle("-fx-background: #ccc;"); + separator.getStyleClass().add("separator"); GridPane.setHalignment(separator, HPos.CENTER); GridPane.setRowIndex(separator, ++rowIndex); GridPane.setColumnSpan(separator, 2); diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/ContractWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/ContractWindow.java index 9b163ff889..56ec6457b2 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/ContractWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/ContractWindow.java @@ -84,11 +84,7 @@ public class ContractWindow extends Overlay { protected void createGridPane() { super.createGridPane(); gridPane.setPadding(new Insets(35, 40, 30, 40)); - gridPane.setStyle("-fx-background-color: -bs-content-bg-grey;" + - "-fx-background-radius: 5 5 5 5;" + - "-fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0);" + - "-fx-background-insets: 10;" - ); + gridPane.getStyleClass().add("grid-pane"); } private void addContent() { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java index 92a1b8a4c0..56ac867b8d 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java @@ -69,14 +69,14 @@ public class DisplayAlertMessageWindow extends Overlay { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisputeSummaryWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisputeSummaryWindow.java index d628279492..532ead2608 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisputeSummaryWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisputeSummaryWindow.java @@ -152,11 +152,7 @@ public class DisputeSummaryWindow extends Overlay { protected void createGridPane() { super.createGridPane(); gridPane.setPadding(new Insets(35, 40, 30, 40)); - gridPane.setStyle("-fx-background-color: -bs-content-bg-grey;" + - "-fx-background-radius: 5 5 5 5;" + - "-fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0);" + - "-fx-background-insets: 10;" - ); + gridPane.getStyleClass().add("grid-pane"); } private void addContent() { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/OfferDetailsWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/OfferDetailsWindow.java index 45ec57211d..0e48f75f0e 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/OfferDetailsWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/OfferDetailsWindow.java @@ -130,11 +130,7 @@ public class OfferDetailsWindow extends Overlay { protected void createGridPane() { super.createGridPane(); gridPane.setPadding(new Insets(35, 40, 30, 40)); - gridPane.setStyle("-fx-background-color: -bs-content-bg-grey;" + - "-fx-background-radius: 5 5 5 5;" + - "-fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0);" + - "-fx-background-insets: 10;" - ); + gridPane.getStyleClass().add("grid-pane"); } private void addContent() { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TorNetworkSettingsWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TorNetworkSettingsWindow.java index 80d9a44a66..5b3b4e4da9 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TorNetworkSettingsWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TorNetworkSettingsWindow.java @@ -175,7 +175,7 @@ public class TorNetworkSettingsWindow extends Overlay } private void addContent() { - gridPane.setStyle("-fx-background-color: #f8f8f8;"); + gridPane.getStyleClass().add("grid-pane"); Label label = addLabel(gridPane, ++rowIndex, Res.get("torNetworkSettingWindow.info")); label.setWrapText(true); diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TradeDetailsWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TradeDetailsWindow.java index 5e4d6a3622..7b1bafa6a2 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TradeDetailsWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TradeDetailsWindow.java @@ -98,11 +98,7 @@ public class TradeDetailsWindow extends Overlay { protected void createGridPane() { super.createGridPane(); gridPane.setPadding(new Insets(35, 40, 30, 40)); - gridPane.setStyle("-fx-background-color: -bs-content-bg-grey;" + - "-fx-background-radius: 5 5 5 5;" + - "-fx-effect: dropshadow(gaussian, #999, 10, 0, 0, 0);" + - "-fx-background-insets: 10;" - ); + gridPane.getStyleClass().add("grid-pane"); } private void addContent() { From c4f3f5cdfc3bc3b62f8663ea4b6eb854798a2bbb Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 13:53:21 +0100 Subject: [PATCH 09/32] Extract general icon behavior ("hand cursor") and remove styles that have no effect. --- gui/src/main/java/io/bisq/gui/bisq.css | 34 ++++++------------- .../bisq/gui/components/AddressTextField.java | 4 +-- .../AddressWithIconAndDirection.java | 3 +- .../gui/components/BsqAddressTextField.java | 2 +- .../gui/components/HyperlinkWithIcon.java | 2 +- .../gui/components/TextFieldWithCopyIcon.java | 2 +- .../io/bisq/gui/components/TxIdTextField.java | 4 +-- .../main/java/io/bisq/gui/main/MainView.java | 2 +- .../gui/main/dao/wallet/tx/BsqTxView.java | 2 +- .../disputes/trader/TraderDisputeView.java | 2 +- 10 files changed, 22 insertions(+), 35 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index d9cf1ca66f..0e747b67f3 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -192,6 +192,11 @@ bg color of non edit textFields: fafafa -fx-background-color: -bs-bg-light; } +.display-text-field { + -fx-alignment: center; + -fx-background-color: -bs-white; +} + .text-area:readonly .content { -fx-background-color: -bs-bg-light; } @@ -206,6 +211,10 @@ bg color of non edit textFields: fafafa -fx-underline: true; } +.icon, icon:hover { + -fx-cursor: hand; +} + #icon-button { -fx-cursor: hand; -fx-background-color: transparent; @@ -213,12 +222,10 @@ bg color of non edit textFields: fafafa .copy-icon { -fx-text-fill: -fx-accent; - -fx-cursor: hand; } .copy-icon-disputes { -fx-text-fill: -bs-white; - -fx-cursor: hand; } .copy-icon:hover { @@ -227,82 +234,61 @@ bg color of non edit textFields: fafafa .external-link-icon { -fx-text-fill: -fx-accent; - -fx-cursor: hand; } .received-funds-icon { -fx-text-fill: -bs-green-soft; - -fx-cursor: hand; -} - -.received-funds-icon:hover { - -fx-text-fill: -bs-black; - -fx-cursor: hand; } .sent-funds-icon { -fx-text-fill: -bs-red-soft; - -fx-cursor: hand; -} - -.sent-funds-icon:hover { - -fx-text-fill: -bs-black; - -fx-cursor: hand; } +/* TODO: not used at the moment*/ .internal-funds-icon { -fx-text-fill: -bs-dark-grey; -fx-cursor: hand; } - .dao-tx-type-unverified-icon, .dao-tx-type-unverified-icon:hover { -fx-text-fill: -bs-yellow; - -fx-cursor: hand; } .dao-tx-type-invalid-icon, .dao-tx-type-invalid-icon:hover { -fx-text-fill: -bs-error-red; - -fx-cursor: hand; } .dao-tx-type-default-icon, .dao-tx-type-default-icon:hover { -fx-text-fill: -bs-grey; - -fx-cursor: hand; } .dao-tx-type-genesis-icon, .dao-tx-type-genesis-icon:hover { -fx-text-fill: -fx-accent; - -fx-cursor: hand; } .dao-tx-type-received-funds-icon, .dao-tx-type-received-funds-icon:hover { -fx-text-fill: -bs-green-soft; - -fx-cursor: hand; } .dao-tx-type-sent-funds-icon, .dao-tx-type-sent-funds-icon:hover { -fx-text-fill: -bs-red-soft; - -fx-cursor: hand; } .dao-tx-type-default-icon, .dao-tx-type-default-icon:hover { -fx-text-fill: -bs-grey; - -fx-cursor: hand; } .dao-tx-type-issuance-icon, .dao-tx-type-issuance-icon:hover { -fx-text-fill: -bs-green; - -fx-cursor: hand; } diff --git a/gui/src/main/java/io/bisq/gui/components/AddressTextField.java b/gui/src/main/java/io/bisq/gui/components/AddressTextField.java index a7694d77b6..e16724f9b8 100644 --- a/gui/src/main/java/io/bisq/gui/components/AddressTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/AddressTextField.java @@ -72,14 +72,14 @@ public class AddressTextField extends AnchorPane { Label extWalletIcon = new Label(); extWalletIcon.setLayoutY(3); - extWalletIcon.getStyleClass().add("copy-icon"); + extWalletIcon.getStyleClass().addAll("icon", "copy-icon"); extWalletIcon.setTooltip(new Tooltip(tooltipText)); AwesomeDude.setIcon(extWalletIcon, AwesomeIcon.SIGNIN); extWalletIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(this::openWallet)); Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().add("copy-icon"); + copyIcon.getStyleClass().addAll("icon", "copy-icon"); Tooltip.install(copyIcon, new Tooltip(Res.get("addressTextField.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); copyIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(() -> { diff --git a/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java b/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java index cb7d098ba3..e3c8356e48 100644 --- a/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java +++ b/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java @@ -22,6 +22,7 @@ public class AddressWithIconAndDirection extends AnchorPane { public AddressWithIconAndDirection(String text, String address, AwesomeIcon awesomeIcon, boolean received) { Label directionIcon = new Label(); directionIcon.setLayoutY(3); + directionIcon.getStyleClass().add("icon"); directionIcon.getStyleClass().add(received ? "received-funds-icon" : "sent-funds-icon"); AwesomeDude.setIcon(directionIcon, received ? AwesomeIcon.SIGNIN : AwesomeIcon.SIGNOUT); directionIcon.setMouseTransparent(true); @@ -45,7 +46,7 @@ public class AddressWithIconAndDirection extends AnchorPane { openLinkIcon = new Label(); openLinkIcon.setLayoutY(3); - openLinkIcon.getStyleClass().add("external-link-icon"); + openLinkIcon.getStyleClass().addAll("icon", "external-link-icon"); openLinkIcon.setOpacity(0.7); AwesomeDude.setIcon(openLinkIcon, awesomeIcon); diff --git a/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java b/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java index e8235febbb..12d440ffe2 100644 --- a/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java @@ -74,7 +74,7 @@ public class BsqAddressTextField extends AnchorPane { Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().add("copy-icon"); + copyIcon.getStyleClass().addAll("icon", "copy-icon"); copyIcon.setTooltip(new Tooltip(Res.get("addressTextField.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); copyIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(() -> { diff --git a/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java b/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java index 94dc4922c2..9ebfeba73d 100644 --- a/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java +++ b/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java @@ -29,7 +29,7 @@ public class HyperlinkWithIcon extends HBox { hyperlink = new Hyperlink(text); icon = new Label(); - icon.getStyleClass().add("external-link-icon"); + icon.getStyleClass().addAll("icon", "external-link-icon"); AwesomeDude.setIcon(icon, awesomeIcon); icon.setMinWidth(20); icon.setOpacity(0.7); diff --git a/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java b/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java index 30b51e5bf8..ba25f6b10f 100644 --- a/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java +++ b/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java @@ -42,7 +42,7 @@ public class TextFieldWithCopyIcon extends AnchorPane { public TextFieldWithCopyIcon() { Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().add("copy-icon"); + copyIcon.getStyleClass().addAll("icon", "copy-icon"); copyIcon.setTooltip(new Tooltip(Res.get("shared.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AnchorPane.setRightAnchor(copyIcon, 0.0); diff --git a/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java b/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java index 7d91ed8eed..9647e3f0a7 100644 --- a/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java @@ -75,7 +75,7 @@ public class TxIdTextField extends AnchorPane { copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().add("copy-icon"); + copyIcon.getStyleClass().addAll("icon", "copy-icon"); copyIcon.setTooltip(new Tooltip(Res.get("txIdTextField.copyIcon.tooltip"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AnchorPane.setRightAnchor(copyIcon, 30.0); @@ -83,7 +83,7 @@ public class TxIdTextField extends AnchorPane { Tooltip tooltip = new Tooltip(Res.get("txIdTextField.blockExplorerIcon.tooltip")); blockExplorerIcon = new Label(); - blockExplorerIcon.getStyleClass().add("external-link-icon"); + blockExplorerIcon.getStyleClass().addAll("icon", "external-link-icon"); blockExplorerIcon.setTooltip(tooltip); AwesomeDude.setIcon(blockExplorerIcon, AwesomeIcon.EXTERNAL_LINK); blockExplorerIcon.setMinWidth(20); diff --git a/gui/src/main/java/io/bisq/gui/main/MainView.java b/gui/src/main/java/io/bisq/gui/main/MainView.java index d7801e4329..1d10f83fb0 100644 --- a/gui/src/main/java/io/bisq/gui/main/MainView.java +++ b/gui/src/main/java/io/bisq/gui/main/MainView.java @@ -284,7 +284,7 @@ public class MainView extends InitializableView { textField.setPrefWidth(115); //140 textField.setMouseTransparent(true); textField.setFocusTraversable(false); - textField.setStyle("-fx-alignment: center; -fx-background-color: white;"); + textField.getStyleClass().add("display-text-field"); Label label = new Label(text); label.setId("nav-balance-label"); diff --git a/gui/src/main/java/io/bisq/gui/main/dao/wallet/tx/BsqTxView.java b/gui/src/main/java/io/bisq/gui/main/dao/wallet/tx/BsqTxView.java index 12f8f600b0..6ef12bd263 100644 --- a/gui/src/main/java/io/bisq/gui/main/dao/wallet/tx/BsqTxView.java +++ b/gui/src/main/java/io/bisq/gui/main/dao/wallet/tx/BsqTxView.java @@ -481,7 +481,7 @@ public class BsqTxView extends ActivatableView { break; } Label label = AwesomeDude.createIconLabel(awesomeIcon); - label.getStyleClass().add(style); + label.getStyleClass().addAll("icon", style); label.setTooltip(new Tooltip(toolTipText)); setGraphic(label); } else { diff --git a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java index 6197643f8d..5c040a8760 100644 --- a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java +++ b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java @@ -852,7 +852,7 @@ public class TraderDisputeView extends ActivatableView { // Need to set it here otherwise style is not correct AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY, "16.0"); - copyIcon.getStyleClass().add("copy-icon-disputes"); + copyIcon.getStyleClass().addAll("icon", "copy-icon-disputes"); // TODO There are still some cell rendering issues on updates setGraphic(messageAnchorPane); From 662136822306cf49da5059b3280f6bb1da4e4889 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 13:55:29 +0100 Subject: [PATCH 10/32] Remove unused style --- gui/src/main/java/io/bisq/gui/bisq.css | 6 ------ 1 file changed, 6 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 0e747b67f3..d824ed02e2 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -244,12 +244,6 @@ bg color of non edit textFields: fafafa -fx-text-fill: -bs-red-soft; } -/* TODO: not used at the moment*/ -.internal-funds-icon { - -fx-text-fill: -bs-dark-grey; - -fx-cursor: hand; -} - .dao-tx-type-unverified-icon, .dao-tx-type-unverified-icon:hover { -fx-text-fill: -bs-yellow; From 59fd85e43b7099a4df9ef5a1cc1d43f306b61af3 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 16:42:28 +0100 Subject: [PATCH 11/32] Remove unused colors and add usage counter --- gui/src/main/java/io/bisq/gui/bisq.css | 138 +++++++++++-------------- 1 file changed, 62 insertions(+), 76 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index d824ed02e2..d94c5d6487 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -21,89 +21,75 @@ bg color of non edit textFields: fafafa */ .root { - -bs-very-dark-grey3: #444; - -bs-grey: #666666; - -bs-medium-grey: #AAAAAA; - -bs-bg-grey: #dddddd; - -bs-bg-grey2: #bbb; - -bs-bg-grey3: #d3d3d3; - -bs-dark-grey:#999; - -bs-light-grey: #cccccc; /* derive(-bs-white, -20%); */ - -bs-content-bg-grey: #f4f4f4; - -bs-very-light-grey: #f8f8f8; - -bs-bg-light: #FAFAFA; /* derive(-bs-white, -2%) */ - -bs-very-light-grey:#F0F0F0; /* derive(-bs-white, -6%) */ - -bs-very-dark-grey: #3c3c3c; - -bs-very-dark-grey2: #111; - -bs-black-transparent: #80000000; - -bs-light-grey2: #cfcfcf; - -bs-light-grey3: #b5b5b5; - -bs-bg-grey4: #f6f6f6; - -bs-black: #000000; - -bs-font-dark: #333; - -bs-bg-grey7: #e0e0e0; - -bs-white: #ffffff; - -bs-bg-grey9: #fcfcfc; - -bs-bg-grey10: #e5e5e5; - -bs-bg-grey11: #f1f1f1; - -bs-dark-grey: #555; - -bs-dim-grey: dimgrey; - -bs-very-dark-grey3: #333000; + -bs-very-dark-grey3: #444; /* 3 usages */ + -bs-grey: #666666; /* 8 usages */ + -bs-medium-grey: #AAAAAA; /* 8 usages */ + -bs-bg-grey: #dddddd; /* 25 usages */ + -bs-bg-grey2: #bbb; /* 1 usages */ + -bs-bg-grey3: #d3d3d3; /* 1 usages */ + -bs-dark-grey:#999; /* 8 usages */ + -bs-light-grey: #cccccc; /* derive(-bs-white, -20%); 13 usages */ + -bs-content-bg-grey: #f4f4f4; /* 14 usages */ + -bs-very-light-grey: #f8f8f8; /* 10 usages */ + -bs-bg-light: #FAFAFA; /* derive(-bs-white, -2%) 4 usages */ + -bs-very-light-grey:#F0F0F0; /* derive(-bs-white, -6%) 10 usages */ + -bs-very-dark-grey: #3c3c3c; /* 8 usages */ + -bs-very-dark-grey2: #111; /* 1 usages */ + -bs-black-transparent: #80000000; /* 1 usages */ + -bs-light-grey2: #cfcfcf;/* 2 usages */ + -bs-light-grey3: #b5b5b5; /* 1 usages */ + -bs-bg-grey4: #f6f6f6; /* 1 usages */ + -bs-black: #000000; /* 13 usages */ + -bs-font-dark: #333; /* 11 usages */ + -bs-bg-grey7: #e0e0e0; /* 2 usages */ + -bs-white: #ffffff; /* 30 usages */ + -bs-bg-grey9: #fcfcfc; /* 1 usages */ + -bs-bg-grey10: #e5e5e5; /* 1 usages */ + -bs-bg-grey11: #f1f1f1; /* 1 usages */ + -bs-dark-grey: #555; /* 8 usages */ + -bs-dim-grey: dimgrey; /* 1 usages */ + -bs-very-dark-grey3: #333000; /* 3 usages */ - -bs-red: red; - -bs-error-red: #dd0000; - -bs-pink: #ff8986; - -bs-smooth-red: #ed7157; - -bs-soft-red: #fe5e1c; - -bs-soft-red2: #f35e1c; - -bs-soft-red3: #fa6f25; - -bs-brown: #52321b; - -bs-orange: #ff8a2b; - -bs-orange2: #dd6900; - -bs-ocher: #de9d2c; - -bs-yellow2: #f7ac03; - -bs-yellow: #ffb60f; - -bs-fresh-green: #b7d042; - -bs-dark-green: #708614; - -bs-bg-grey8: #E1E9E1; - -bs-bg-green2:#619865; - -bs-bg-green:#99ba9c; - -bs-green: #00aa33; - -bs-green-transparent: #00aa3344; - -bs-turquoise: #2cacaf; - -bs-turquoise2: #1c9099; - -bs-light-blue: #c4eef2; - -bs-bg-grey5: #f1f6f7; - -bs-bg-grey6: #e7f5f9; - -bs-bg-blue2: #6aa4b6; - -bs-bg-blue1: #b5e1ef; - -bs-bg-blue4: #57acc9; - -bs-bg-blue3: #9bbdc9; - -fx-faint-focus-color: #0f87c322; + -bs-red: red; /* 5 usages */ + -bs-error-red: #dd0000; /* 5 usages */ + -bs-pink: #ff8986; /* 2 usages */ + -bs-orange: #ff8a2b; /* 2 usages */ + -bs-orange2: #dd6900; /* 1 usages */ + -bs-yellow: #ffb60f; /* 2 usages */ + -bs-bg-grey8: #E1E9E1; /* 1 usages */ + -bs-bg-green2:#619865; /* 2 usages */ + -bs-bg-green:#99ba9c; /* 4 usages */ + -bs-green: #00aa33; /* 6 usages */ + -bs-turquoise: #2cacaf; /* 1 usages */ + -bs-bg-grey5: #f1f6f7; /* 4 usages */ + -bs-bg-grey6: #e7f5f9; /* 3 usages */ + -bs-bg-blue2: #6aa4b6; /* 3 usages */ + -bs-bg-blue1: #b5e1ef; /* 3 usages */ + -bs-bg-blue4: #57acc9; /* 1 usages */ + -bs-bg-blue3: #9bbdc9; /* 1 usages */ + -fx-faint-focus-color: #0f87c322; /* 5 usages */ + -fx-accent: #0f86c3; /* 18 usages */ -bs-blue-transparent: #0f87c344; - -fx-accent: #0f86c3; - -bs-dark-blue: #0b456d; - -bs-blue: blue; + -bs-blue: blue; /* 1 usages */ - -bs-blue-soft: derive(-fx-accent, 60%); - -bs-green-soft: derive(-bs-green, 60%); - -bs-red-soft: derive(-bs-error-red, 60%); + -bs-green-soft: derive(-bs-green, 60%); /* 2 usages */ + -bs-red-soft: derive(-bs-error-red, 60%); /* 2 usages */ - -bs-warning: -bs-orange; + -bs-warning: -bs-orange; /* 1 usages */ - -bs-buy: -bs-yellow; - -bs-buy-focus: derive(-bs-buy, -50%); - -bs-buy-hover: derive(-bs-buy, -10%); - -bs-buy-transparent: derive(-bs-buy, 75%); + -bs-buy: -bs-yellow; /* 12 usages */ + -bs-buy-focus: derive(-bs-buy, -50%); /* 2 usages */ + -bs-buy-hover: derive(-bs-buy, -10%); /* 2 usages */ + -bs-buy-transparent: derive(-bs-buy, 75%); /* 1 usages */ - -bs-sell: -bs-turquoise; - -bs-sell-focus: derive(-bs-sell, -50%); - -bs-sell-hover: derive(-bs-sell, -10%); - -bs-sell-transparent: derive(-bs-sell, 95%); + -bs-sell: -bs-turquoise; /* 11 usages */ + -bs-sell-focus: derive(-bs-sell, -50%); /* 2 usages */ + -bs-sell-hover: derive(-bs-sell, -10%); /* 2 usages */ + -bs-sell-transparent: derive(-bs-sell, 95%); /* 1 usages */ - -bs-cancel: -bs-bg-grey; - -bs-cancel-focus: derive(-bs-cancel, -50%); - -bs-cancel-hover: derive(-bs-cancel, -10%); + -bs-cancel: -bs-bg-grey; /* 5 usages */ + -bs-cancel-focus: derive(-bs-cancel, -50%); /* 1 usages */ + -bs-cancel-hover: derive(-bs-cancel, -10%); /* 1 usages */ -fx-default-button: derive(-fx-accent, 95%); -fx-focus-color: -fx-accent; From 73c1f783253e34b3e7cab80759a50b187068f2c6 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 17:03:15 +0100 Subject: [PATCH 12/32] Extract arbitration inline styles --- gui/src/main/java/io/bisq/gui/bisq.css | 30 +++++++++++++++++++ .../disputes/trader/TraderDisputeView.java | 22 +++++++------- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index d94c5d6487..524b2d152b 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -1197,3 +1197,33 @@ textfield */ .alert-headline-label { -fx-text-fill: -bs-error-red; } + +/******************************************************************************************************************** + * * + * Arbitration * + * * + ********************************************************************************************************************/ + +.message { + -fx-text-fill: -bs-black; +} + +.my-message { + -fx-text-fill: -bs-white; +} + +.message-header { + -fx-text-fill: -bs-light-grey; + -fx-font-size: 11; +} + +.system-message-header { + -fx-text-fill: -bs-green; + -fx-font-size: 11; +} + +.my-message-header { + -fx-text-fill: -fx-accent; + -fx-font-size: 11; +} + diff --git a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java index 5c040a8760..eeb04f1451 100644 --- a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java +++ b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java @@ -740,15 +740,15 @@ public class TraderDisputeView extends ActivatableView { arrow.setManaged(!item.isSystemMessage()); statusIcon.setVisible(false); if (item.isSystemMessage()) { - headerLabel.setStyle("-fx-text-fill: -bs-green; -fx-font-size: 11;"); + headerLabel.getStyleClass().add("system-message-header"); bg.setId("message-bubble-green"); - messageLabel.setStyle("-fx-text-fill: white;"); - copyIcon.setStyle("-fx-text-fill: white;"); + messageLabel.getStyleClass().add("my-message"); + copyIcon.getStyleClass().add("my-message"); } else if (isMyMsg) { - headerLabel.setStyle("-fx-text-fill: -fx-accent; -fx-font-size: 11;"); + headerLabel.getStyleClass().add("my-message-header"); bg.setId("message-bubble-blue"); - messageLabel.setStyle("-fx-text-fill: white;"); - copyIcon.setStyle("-fx-text-fill: white;"); + messageLabel.getStyleClass().add("my-message"); + copyIcon.getStyleClass().add("my-message"); if (isTrader) arrow.setId("bubble_arrow_blue_left"); else @@ -775,10 +775,10 @@ public class TraderDisputeView extends ActivatableView { /*else if (sendMsgProgressIndicator.getProgress() == 0) showNotArrivedIcon();*/ } else { - headerLabel.setStyle("-fx-text-fill: -bs-light-grey; -fx-font-size: 11;"); + headerLabel.getStyleClass().add("message-header"); bg.setId("message-bubble-grey"); - messageLabel.setStyle("-fx-text-fill: black;"); - copyIcon.setStyle("-fx-text-fill: black;"); + messageLabel.getStyleClass().add("message"); + copyIcon.getStyleClass().add("message"); if (isTrader) arrow.setId("bubble_arrow_grey_right"); else @@ -828,9 +828,9 @@ public class TraderDisputeView extends ActivatableView { attachmentsBox.getChildren().add(new Label(Res.get("support.attachments") + " ") {{ setPadding(new Insets(0, 0, 3, 0)); if (isMyMsg) - setStyle("-fx-text-fill: white;"); + getStyleClass().add("my-message"); else - setStyle("-fx-text-fill: black;"); + getStyleClass().add("message"); }}); item.getAttachments().stream().forEach(attachment -> { final Label icon = new Label(); From 5de928e65db1156f46466431558e6a85eeee3424 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Thu, 14 Dec 2017 17:10:45 +0100 Subject: [PATCH 13/32] Extract DAO inline style --- gui/src/main/java/io/bisq/gui/bisq.css | 10 ++++++++++ .../active/ActiveCompensationRequestView.java | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 524b2d152b..4f964582c5 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -1227,3 +1227,13 @@ textfield */ -fx-font-size: 11; } +/******************************************************************************************************************** + * * + * DAO * + * * + ********************************************************************************************************************/ + +.compensation-root { + -fx-background-insets: 0, 0 0 0 0 +} + diff --git a/gui/src/main/java/io/bisq/gui/main/dao/compensation/active/ActiveCompensationRequestView.java b/gui/src/main/java/io/bisq/gui/main/dao/compensation/active/ActiveCompensationRequestView.java index 7490d28354..bc7361d390 100644 --- a/gui/src/main/java/io/bisq/gui/main/dao/compensation/active/ActiveCompensationRequestView.java +++ b/gui/src/main/java/io/bisq/gui/main/dao/compensation/active/ActiveCompensationRequestView.java @@ -95,7 +95,7 @@ public class ActiveCompensationRequestView extends ActivatableView Date: Thu, 14 Dec 2017 17:28:54 +0100 Subject: [PATCH 14/32] Extract inline styles from create offer view --- gui/src/main/java/io/bisq/gui/bisq.css | 16 ++++++++++++++++ .../main/offer/createoffer/CreateOfferView.java | 15 +++++++++------ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 4f964582c5..0cbb127a86 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -602,6 +602,22 @@ textfield */ -fx-background-color: -bs-content-bg-grey; } +.toggle-button-active { + -fx-background-color: -bs-blue-transparent; +} + +.toggle-button-inactive { + -fx-background-color: -bs-very-light-grey; +} + +.percentage-label { + -fx-alignment: center; +} + +.offer-separator { + -fx-background: -bs-grey; +} + /* Account setup */ #wizard-title-deactivated { -fx-font-weight: bold; diff --git a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java index 273474d348..baef8b8abb 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java @@ -1118,10 +1118,13 @@ public class CreateOfferView extends ActivatableViewAndModel amountValueCurrencyBoxTuple = getEditableValueCurrencyBox( Res.get("createOffer.amount.prompt")); @@ -1221,7 +1224,7 @@ public class CreateOfferView extends ActivatableViewAndModel Date: Thu, 14 Dec 2017 17:33:32 +0100 Subject: [PATCH 15/32] Extract inline styles from take offer view --- gui/src/main/java/io/bisq/gui/bisq.css | 2 ++ .../java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 0cbb127a86..b988058cef 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -610,6 +610,8 @@ textfield */ -fx-background-color: -bs-very-light-grey; } +/* Offer */ + .percentage-label { -fx-alignment: center; } diff --git a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java index 7068592495..a4ce84df23 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java @@ -959,8 +959,7 @@ public class TakeOfferView extends ActivatableViewAndModel amountValueCurrencyBoxTuple = getNonEditableValueCurrencyBox(); HBox amountValueCurrencyBox = amountValueCurrencyBoxTuple.first; @@ -1029,7 +1028,7 @@ public class TakeOfferView extends ActivatableViewAndModel Date: Thu, 14 Dec 2017 19:11:06 +0100 Subject: [PATCH 16/32] Extract inline styles of MainView --- gui/src/main/java/io/bisq/gui/bisq.css | 20 +++++++++++++++++++ .../main/java/io/bisq/gui/main/MainView.java | 11 +++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index b988058cef..21026baf4c 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -201,6 +201,10 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } +.hidden-icon-button { + -fx-background-color: transparent; +} + #icon-button { -fx-cursor: hand; -fx-background-color: transparent; @@ -271,6 +275,18 @@ bg color of non edit textFields: fafafa -fx-text-fill: -bs-green; } +.version { + -fx-text-fill: black; + -fx-underline: false; + -fx-cursor: null; +} + +.version-new { + -fx-text-fill: -bs-error-red; + -fx-underline: true; + -fx-cursor: hand; +} + /******************************************************************************* * * @@ -348,6 +364,10 @@ textfield */ -fx-border-width: 0px; } +.market-price-tooltip { + -fx-font-size: 12; +} + /******************************************************************************* * * * Table * diff --git a/gui/src/main/java/io/bisq/gui/main/MainView.java b/gui/src/main/java/io/bisq/gui/main/MainView.java index 1d10f83fb0..edfd294df6 100644 --- a/gui/src/main/java/io/bisq/gui/main/MainView.java +++ b/gui/src/main/java/io/bisq/gui/main/MainView.java @@ -329,7 +329,7 @@ public class MainView extends InitializableView { final Button btcAverageIconButton = new Button("", btcAverageIcon); btcAverageIconButton.setPadding(new Insets(-1, 0, -1, 0)); btcAverageIconButton.setFocusTraversable(false); - btcAverageIconButton.setStyle("-fx-background-color: transparent;"); + btcAverageIconButton.getStyleClass().add("hidden-icon-button"); HBox.setMargin(btcAverageIconButton, new Insets(0, 5, 0, 0)); btcAverageIconButton.setOnAction(e -> GUIUtil.openWebPage("https://bitcoinaverage.com")); btcAverageIconButton.setVisible(model.isFiatCurrencyPriceFeedSelected.get()); @@ -353,7 +353,7 @@ public class MainView extends InitializableView { final Button poloniexIconButton = new Button("", poloniexIcon); poloniexIconButton.setPadding(new Insets(-3, 0, -3, 0)); poloniexIconButton.setFocusTraversable(false); - poloniexIconButton.setStyle("-fx-background-color: transparent;"); + poloniexIconButton.getStyleClass().add("hidden-icon-button"); HBox.setMargin(poloniexIconButton, new Insets(2, 3, 0, 0)); poloniexIconButton.setOnAction(e -> GUIUtil.openWebPage("https://poloniex.com")); poloniexIconButton.setVisible(model.isCryptoCurrencyPriceFeedSelected.get()); @@ -398,7 +398,7 @@ public class MainView extends InitializableView { } else { label.setText(Res.get("mainView.marketPrice.bisqInternalPrice")); final Tooltip tooltip = new Tooltip(Res.get("mainView.marketPrice.tooltip.bisqInternalPrice")); - tooltip.setStyle("-fx-font-size: 12"); + tooltip.getStyleClass().add("market-price-tooltip"); label.setTooltip(tooltip); } } else { @@ -590,12 +590,13 @@ public class MainView extends InitializableView { }); setBottomAnchor(versionLabel, 7d); model.newVersionAvailableProperty.addListener((observable, oldValue, newValue) -> { + versionLabel.getStyleClass().removeAll("version-new","version"); if (newValue) { - versionLabel.setStyle("-fx-text-fill: -bs-error-red; -fx-underline: true; -fx-cursor: hand;"); + versionLabel.getStyleClass().add("version-new"); versionLabel.setOnMouseClicked(e -> model.openDownloadWindow()); versionLabel.setText("v" + Version.VERSION + " " + Res.get("mainView.version.update")); } else { - versionLabel.setStyle("-fx-text-fill: black; -fx-underline: false; -fx-cursor: null;"); + versionLabel.getStyleClass().add("version"); versionLabel.setOnMouseClicked(null); versionLabel.setText("v" + Version.VERSION); } From 519976c09ba0cc48cb10d4dc54235508962e997c Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Fri, 15 Dec 2017 10:28:32 +0100 Subject: [PATCH 17/32] Extract table title inline style --- gui/src/main/java/io/bisq/gui/bisq.css | 8 ++++++++ .../gui/main/market/offerbook/OfferBookChartView.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 21026baf4c..bf8fa70add 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -630,6 +630,14 @@ textfield */ -fx-background-color: -bs-very-light-grey; } +/* OfferBook */ + +.table-title { + -fx-font-weight: bold; + -fx-font-size: 16; + -fx-alignment: center; +} + /* Offer */ .percentage-label { diff --git a/gui/src/main/java/io/bisq/gui/main/market/offerbook/OfferBookChartView.java b/gui/src/main/java/io/bisq/gui/main/market/offerbook/OfferBookChartView.java index 1461d935e9..0a4ddb1f1c 100644 --- a/gui/src/main/java/io/bisq/gui/main/market/offerbook/OfferBookChartView.java +++ b/gui/src/main/java/io/bisq/gui/main/market/offerbook/OfferBookChartView.java @@ -453,7 +453,7 @@ public class OfferBookChartView extends ActivatableViewAndModel titleLabel.prefWidthProperty().bind(tableView.widthProperty())); boolean isSellOffer = direction == OfferPayload.Direction.SELL; From 4b6298582a6fc6285c4807d4a15c5da2bbf367fe Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Fri, 15 Dec 2017 11:08:50 +0100 Subject: [PATCH 18/32] Add general styles for consolidation --- gui/src/main/java/io/bisq/gui/bisq.css | 130 +++++------------- .../bisq/gui/components/AddressTextField.java | 5 +- .../AddressWithIconAndDirection.java | 2 +- .../gui/components/BsqAddressTextField.java | 3 +- .../gui/components/HyperlinkWithIcon.java | 2 +- .../gui/components/TableGroupHeadline.java | 1 + .../gui/components/TextFieldWithCopyIcon.java | 2 +- .../io/bisq/gui/components/TxIdTextField.java | 5 +- .../main/java/io/bisq/gui/main/MainView.java | 7 +- .../disputes/trader/TraderDisputeView.java | 4 +- .../offer/createoffer/CreateOfferView.java | 1 + .../main/offer/takeoffer/TakeOfferView.java | 1 + .../windows/DisplayAlertMessageWindow.java | 4 +- .../DisplayUpdateDownloadWindow.java | 9 +- .../pendingtrades/steps/TradeStepView.java | 8 +- 15 files changed, 65 insertions(+), 119 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index bf8fa70add..ff34b0c3a9 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -98,21 +98,44 @@ bg color of non edit textFields: fafafa -fx-font-size: 13; -fx-font-family: "Verdana"; } + +/******************************************************************************************************************** + * * + * General * + * * + ********************************************************************************************************************/ + +.error-text { + -fx-text-fill: -bs-error-red; +} + +.error { + -fx-accent: -bs-error-red; +} + +.success-text { + -fx-text-fill: -bs-green; +} + +.highlight { + -fx-text-fill: -fx-accent; +} + +.headline-label { + -fx-font-weight: bold; + -fx-font-size: 22; +} + +.show-hand { + -fx-cursor: hand; +} + /* Splash */ #splash { -fx-background-color: -bs-white; } -#splash-error-state-msg { - -fx-text-fill: -bs-error-red; -} - -#splash-bitcoin-network-label { - -fx-text-fill: -fx-accent; - -fx-font-weight: bold; -} - /* Main UI */ #base-content-container { -fx-background-color: -bs-bg-grey; @@ -210,10 +233,6 @@ bg color of non edit textFields: fafafa -fx-background-color: transparent; } -.copy-icon { - -fx-text-fill: -fx-accent; -} - .copy-icon-disputes { -fx-text-fill: -bs-white; } @@ -222,10 +241,6 @@ bg color of non edit textFields: fafafa -fx-text-fill: -bs-black; } -.external-link-icon { - -fx-text-fill: -fx-accent; -} - .received-funds-icon { -fx-text-fill: -bs-green-soft; } @@ -313,11 +328,6 @@ textfield */ -fx-padding: 4 4 4 4; } -#address-text-field { - -fx-cursor: hand; - -fx-text-fill: -fx-accent; -} - #address-text-field:hover { -fx-text-fill: -bs-black; } @@ -469,11 +479,6 @@ textfield */ -fx-text-fill: -bs-medium-grey; } -#clickable-icon { - -fx-text-fill: -fx-accent; - -fx-cursor: hand; -} - #clickable-icon:hover { -fx-text-fill: -bs-grey; } @@ -649,36 +654,6 @@ textfield */ } /* Account setup */ -#wizard-title-deactivated { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -bs-dark-grey; -} - -#wizard-title-active { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -bs-font-dark; -} - -#wizard-title-completed { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -bs-font-dark; -} - -#wizard-sub-title-deactivated { - -fx-text-fill: -bs-dark-grey; -} - -#wizard-sub-title-active { - -fx-text-fill: -bs-font-dark; -} - -#wizard-sub-title-completed { - -fx-text-fill: -bs-font-dark; -} - #wizard-item-background-deactivated { -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); -fx-outer-border: linear-gradient(to bottom, -bs-bg-grey, -bs-light-grey); @@ -713,23 +688,6 @@ textfield */ } /* Account settings */ -#wizard-title-disabled { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -bs-dark-grey; -} - -#wizard-title-active { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -bs-font-dark; -} - -#wizard-title-selected { - -fx-font-weight: bold; - -fx-font-size: 16; - -fx-text-fill: -fx-accent; -} #account-settings-item-background-disabled { -fx-body-color: linear-gradient(to bottom, -bs-content-bg-grey, -bs-very-light-grey); @@ -826,7 +784,6 @@ textfield */ #titled-group-bg-label-active { -fx-font-weight: bold; -fx-font-size: 14; - -fx-text-fill: -fx-accent; -fx-background-color: -bs-content-bg-grey; } @@ -1231,19 +1188,6 @@ textfield */ -fx-background: -bs-light-grey; } -.headline-label { - -fx-font-weight: bold; - -fx-font-size: 22; -} - -.info-headline-label { - -fx-text-fill: -fx-accent; -} - -.alert-headline-label { - -fx-text-fill: -bs-error-red; -} - /******************************************************************************************************************** * * * Arbitration * @@ -1263,16 +1207,6 @@ textfield */ -fx-font-size: 11; } -.system-message-header { - -fx-text-fill: -bs-green; - -fx-font-size: 11; -} - -.my-message-header { - -fx-text-fill: -fx-accent; - -fx-font-size: 11; -} - /******************************************************************************************************************** * * * DAO * diff --git a/gui/src/main/java/io/bisq/gui/components/AddressTextField.java b/gui/src/main/java/io/bisq/gui/components/AddressTextField.java index e16724f9b8..ac83ee12b0 100644 --- a/gui/src/main/java/io/bisq/gui/components/AddressTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/AddressTextField.java @@ -53,6 +53,7 @@ public class AddressTextField extends AnchorPane { public AddressTextField() { TextField textField = new TextField(); textField.setId("address-text-field"); + textField.getStyleClass().addAll("highlight","show-hand"); textField.setEditable(false); textField.textProperty().bind(address); String tooltipText = Res.get("addressTextField.openWallet"); @@ -72,14 +73,14 @@ public class AddressTextField extends AnchorPane { Label extWalletIcon = new Label(); extWalletIcon.setLayoutY(3); - extWalletIcon.getStyleClass().addAll("icon", "copy-icon"); + extWalletIcon.getStyleClass().addAll("icon", "highlight"); extWalletIcon.setTooltip(new Tooltip(tooltipText)); AwesomeDude.setIcon(extWalletIcon, AwesomeIcon.SIGNIN); extWalletIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(this::openWallet)); Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().addAll("icon", "copy-icon"); + copyIcon.getStyleClass().addAll("icon", "highlight"); Tooltip.install(copyIcon, new Tooltip(Res.get("addressTextField.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); copyIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(() -> { diff --git a/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java b/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java index e3c8356e48..33ec25d3b2 100644 --- a/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java +++ b/gui/src/main/java/io/bisq/gui/components/AddressWithIconAndDirection.java @@ -46,7 +46,7 @@ public class AddressWithIconAndDirection extends AnchorPane { openLinkIcon = new Label(); openLinkIcon.setLayoutY(3); - openLinkIcon.getStyleClass().addAll("icon", "external-link-icon"); + openLinkIcon.getStyleClass().addAll("icon", "highlight"); openLinkIcon.setOpacity(0.7); AwesomeDude.setIcon(openLinkIcon, awesomeIcon); diff --git a/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java b/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java index 12d440ffe2..b8520de37e 100644 --- a/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/BsqAddressTextField.java @@ -47,6 +47,7 @@ public class BsqAddressTextField extends AnchorPane { public BsqAddressTextField() { TextField textField = new TextField(); textField.setId("address-text-field"); + textField.getStyleClass().addAll("highlight","show-hand"); textField.setEditable(false); textField.textProperty().bind(address); String tooltipText = Res.get("addressTextField.copyToClipboard"); @@ -74,7 +75,7 @@ public class BsqAddressTextField extends AnchorPane { Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().addAll("icon", "copy-icon"); + copyIcon.getStyleClass().addAll("icon", "highlight"); copyIcon.setTooltip(new Tooltip(Res.get("addressTextField.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); copyIcon.setOnMouseClicked(e -> GUIUtil.showFeeInfoBeforeExecute(() -> { diff --git a/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java b/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java index 9ebfeba73d..686b06da23 100644 --- a/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java +++ b/gui/src/main/java/io/bisq/gui/components/HyperlinkWithIcon.java @@ -29,7 +29,7 @@ public class HyperlinkWithIcon extends HBox { hyperlink = new Hyperlink(text); icon = new Label(); - icon.getStyleClass().addAll("icon", "external-link-icon"); + icon.getStyleClass().addAll("icon", "highlight"); AwesomeDude.setIcon(icon, awesomeIcon); icon.setMinWidth(20); icon.setOpacity(0.7); diff --git a/gui/src/main/java/io/bisq/gui/components/TableGroupHeadline.java b/gui/src/main/java/io/bisq/gui/components/TableGroupHeadline.java index daaa87875d..10f3ce8656 100644 --- a/gui/src/main/java/io/bisq/gui/components/TableGroupHeadline.java +++ b/gui/src/main/java/io/bisq/gui/components/TableGroupHeadline.java @@ -67,6 +67,7 @@ public class TableGroupHeadline extends Pane { private void setActive() { setId("titled-group-bg-active"); label.setId("titled-group-bg-label-active"); + label.getStyleClass().add("highlight"); } public String getText() { diff --git a/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java b/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java index ba25f6b10f..2efbfa76f0 100644 --- a/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java +++ b/gui/src/main/java/io/bisq/gui/components/TextFieldWithCopyIcon.java @@ -42,7 +42,7 @@ public class TextFieldWithCopyIcon extends AnchorPane { public TextFieldWithCopyIcon() { Label copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().addAll("icon", "copy-icon"); + copyIcon.getStyleClass().addAll("icon", "highlight"); copyIcon.setTooltip(new Tooltip(Res.get("shared.copyToClipboard"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AnchorPane.setRightAnchor(copyIcon, 0.0); diff --git a/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java b/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java index 9647e3f0a7..4adb2d64f8 100644 --- a/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java +++ b/gui/src/main/java/io/bisq/gui/components/TxIdTextField.java @@ -75,7 +75,7 @@ public class TxIdTextField extends AnchorPane { copyIcon = new Label(); copyIcon.setLayoutY(3); - copyIcon.getStyleClass().addAll("icon", "copy-icon"); + copyIcon.getStyleClass().addAll("icon", "highlight"); copyIcon.setTooltip(new Tooltip(Res.get("txIdTextField.copyIcon.tooltip"))); AwesomeDude.setIcon(copyIcon, AwesomeIcon.COPY); AnchorPane.setRightAnchor(copyIcon, 30.0); @@ -83,7 +83,7 @@ public class TxIdTextField extends AnchorPane { Tooltip tooltip = new Tooltip(Res.get("txIdTextField.blockExplorerIcon.tooltip")); blockExplorerIcon = new Label(); - blockExplorerIcon.getStyleClass().addAll("icon", "external-link-icon"); + blockExplorerIcon.getStyleClass().addAll("icon", "highlight"); blockExplorerIcon.setTooltip(tooltip); AwesomeDude.setIcon(blockExplorerIcon, AwesomeIcon.EXTERNAL_LINK); blockExplorerIcon.setMinWidth(20); @@ -92,6 +92,7 @@ public class TxIdTextField extends AnchorPane { textField = new TextField(); textField.setId("address-text-field"); + textField.getStyleClass().addAll("highlight","show-hand"); textField.setEditable(false); textField.setTooltip(tooltip); AnchorPane.setRightAnchor(textField, 80.0); diff --git a/gui/src/main/java/io/bisq/gui/main/MainView.java b/gui/src/main/java/io/bisq/gui/main/MainView.java index edfd294df6..0191de8d01 100644 --- a/gui/src/main/java/io/bisq/gui/main/MainView.java +++ b/gui/src/main/java/io/bisq/gui/main/MainView.java @@ -424,7 +424,10 @@ public class MainView extends InitializableView { // createBitcoinInfoBox btcSplashInfo = new Label(); btcSplashInfo.textProperty().bind(model.btcInfo); - walletServiceErrorMsgListener = (ov, oldValue, newValue) -> btcSplashInfo.setId("splash-error-state-msg"); + walletServiceErrorMsgListener = (ov, oldValue, newValue) -> { + btcSplashInfo.setId("splash-error-state-msg"); + btcSplashInfo.getStyleClass().add("error-text"); + }; model.walletServiceErrorMsg.addListener(walletServiceErrorMsgListener); btcSyncIndicator = new ProgressBar(); @@ -466,6 +469,7 @@ public class MainView extends InitializableView { splashP2PNetworkErrorMsgListener = (ov, oldValue, newValue) -> { if (newValue != null) { splashP2PNetworkLabel.setId("splash-error-state-msg"); + splashP2PNetworkLabel.getStyleClass().add("error-text"); splashP2PNetworkBusyAnimation.stop(); } else if (model.splashP2PNetworkAnimationVisible.get()) { splashP2PNetworkBusyAnimation.play(); @@ -554,6 +558,7 @@ public class MainView extends InitializableView { model.walletServiceErrorMsg.addListener((ov, oldValue, newValue) -> { if (newValue != null) { btcInfoLabel.setId("splash-error-state-msg"); + btcInfoLabel.getStyleClass().add("error-text"); if (btcNetworkWarnMsgPopup == null) { btcNetworkWarnMsgPopup = new Popup<>().warning(newValue); btcNetworkWarnMsgPopup.show(); diff --git a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java index eeb04f1451..daadf69dee 100644 --- a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java +++ b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java @@ -740,12 +740,12 @@ public class TraderDisputeView extends ActivatableView { arrow.setManaged(!item.isSystemMessage()); statusIcon.setVisible(false); if (item.isSystemMessage()) { - headerLabel.getStyleClass().add("system-message-header"); + headerLabel.getStyleClass().addAll("message-header","success-text"); bg.setId("message-bubble-green"); messageLabel.getStyleClass().add("my-message"); copyIcon.getStyleClass().add("my-message"); } else if (isMyMsg) { - headerLabel.getStyleClass().add("my-message-header"); + headerLabel.getStyleClass().add("highlight"); bg.setId("message-bubble-blue"); messageLabel.getStyleClass().add("my-message"); copyIcon.getStyleClass().add("my-message"); diff --git a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java index baef8b8abb..aecf4b13f8 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/createoffer/CreateOfferView.java @@ -1199,6 +1199,7 @@ public class CreateOfferView extends ActivatableViewAndModel createInfoPopover()); diff --git a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java index a4ce84df23..12704d85f0 100644 --- a/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java +++ b/gui/src/main/java/io/bisq/gui/main/offer/takeoffer/TakeOfferView.java @@ -1003,6 +1003,7 @@ public class TakeOfferView extends ActivatableViewAndModel createInfoPopover()); diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java index 56ac867b8d..68e1859593 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/DisplayAlertMessageWindow.java @@ -69,14 +69,14 @@ public class DisplayAlertMessageWindow extends Overlay { diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java index 0a41990e42..1a87342b05 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java @@ -87,7 +87,7 @@ public class DisplayUpdateDownloadWindow extends Overlay downloadResults = downloadTask.getValue(); Optional downloadFailed = downloadResults.stream() .filter(fileDescriptor -> !BisqInstaller.DownloadStatusEnum.OK.equals(fileDescriptor.getDownloadStatus())).findFirst(); + downloadedFilesLabel.getStyleClass().removeAll("error-text","success-text"); if (downloadResults == null || downloadResults.isEmpty() || downloadFailed.isPresent()) { showErrorMessage(downloadButton, statusLabel, downloadFailedString); - downloadedFilesLabel.setStyle("-fx-text-fill: -bs-error-red;"); + downloadedFilesLabel.getStyleClass().add("error-text"); } else { log.debug("Download completed successfully."); - downloadedFilesLabel.setStyle("-fx-text-fill: -bs-green;"); + downloadedFilesLabel.getStyleClass().add("success-text"); verifyTask = installer.verify(downloadResults); verifiedSigLabel.setOpacity(1); @@ -233,7 +234,7 @@ public class DisplayUpdateDownloadWindow extends Overlay().feedback(Res.get("displayUpdateDownloadWindow.success")) .actionButtonText(Res.get("displayUpdateDownloadWindow.download.openDir")) .onAction(() -> { diff --git a/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/steps/TradeStepView.java b/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/steps/TradeStepView.java index 1284f03194..5b69e4b379 100644 --- a/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/steps/TradeStepView.java +++ b/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/steps/TradeStepView.java @@ -214,13 +214,13 @@ public abstract class TradeStepView extends AnchorPane { if (remainingTime != null) { timeLeftTextField.setText(remainingTime); if (model.showWarning() || model.showDispute()) { - timeLeftTextField.setStyle("-fx-text-fill: -bs-error-red"); - timeLeftProgressBar.setStyle("-fx-accent: -bs-error-red;"); + timeLeftTextField.getStyleClass().add("error-text"); + timeLeftProgressBar.getStyleClass().add("error"); } } else { timeLeftTextField.setText("Trade not completed in time (" + model.getDateForOpenDispute() + ")"); - timeLeftTextField.setStyle("-fx-text-fill: -bs-error-red"); - timeLeftProgressBar.setStyle("-fx-accent: -bs-error-red;"); + timeLeftTextField.getStyleClass().add("error-text"); + timeLeftProgressBar.getStyleClass().add("error"); } } } From 89009fe8598789b81d3ab6e0074457f1deba287b Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Fri, 15 Dec 2017 11:12:04 +0100 Subject: [PATCH 19/32] Add missing highlight hover style --- gui/src/main/java/io/bisq/gui/bisq.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index ff34b0c3a9..d09a709dee 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -121,6 +121,10 @@ bg color of non edit textFields: fafafa -fx-text-fill: -fx-accent; } +.highlight:hover { + -fx-text-fill: -bs-black; +} + .headline-label { -fx-font-weight: bold; -fx-font-size: 22; From b003322a4990f49e549471e18db9d2fe96ce8b59 Mon Sep 17 00:00:00 2001 From: Christoph Atteneder Date: Fri, 15 Dec 2017 11:15:29 +0100 Subject: [PATCH 20/32] Extract separator inline styles --- gui/src/main/java/io/bisq/gui/bisq.css | 14 ++++---------- .../overlays/windows/WalletPasswordWindow.java | 2 +- .../DisplayUpdateDownloadWindow.java | 4 ++-- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index d09a709dee..2505883a6a 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -134,6 +134,10 @@ bg color of non edit textFields: fafafa -fx-cursor: hand; } +.separator { + -fx-background: -bs-light-grey; +} + /* Splash */ #splash { @@ -1182,16 +1186,6 @@ textfield */ -fx-background-radius: 0 4 4 0; } -/******************************************************************************************************************** - * * - * Overlay * - * * - ********************************************************************************************************************/ - -.separator { - -fx-background: -bs-light-grey; -} - /******************************************************************************************************************** * * * Arbitration * diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java index ada21fec27..a7caba340a 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java @@ -256,7 +256,7 @@ public class WalletPasswordWindow extends Overlay { Separator separator = new Separator(); separator.setMouseTransparent(true); separator.setOrientation(Orientation.HORIZONTAL); - separator.setStyle("-fx-background: #ccc;"); + separator.getStyleClass().add("separator"); GridPane.setHalignment(separator, HPos.CENTER); GridPane.setRowIndex(separator, ++rowIndex); GridPane.setColumnSpan(separator, 2); diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java index 1a87342b05..69eb6ea7fe 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/downloadupdate/DisplayUpdateDownloadWindow.java @@ -95,7 +95,7 @@ public class DisplayUpdateDownloadWindow extends Overlay Date: Fri, 15 Dec 2017 11:38:49 +0100 Subject: [PATCH 21/32] Extract inline styles --- gui/src/main/java/io/bisq/gui/bisq.css | 48 ++++++++++++++----- .../io/bisq/gui/components/InfoDisplay.java | 2 +- .../disputes/trader/TraderDisputeView.java | 2 +- .../windows/ShowWalletDataWindow.java | 2 +- .../gui/main/overlays/windows/TacWindow.java | 6 +-- .../windows/WalletPasswordWindow.java | 2 +- .../pendingtrades/PendingTradesView.java | 7 --- 7 files changed, 44 insertions(+), 25 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/bisq.css b/gui/src/main/java/io/bisq/gui/bisq.css index 2505883a6a..89bddb6d19 100644 --- a/gui/src/main/java/io/bisq/gui/bisq.css +++ b/gui/src/main/java/io/bisq/gui/bisq.css @@ -105,6 +105,7 @@ bg color of non edit textFields: fafafa * * ********************************************************************************************************************/ +/* Text */ .error-text { -fx-text-fill: -bs-error-red; } @@ -130,14 +131,37 @@ bg color of non edit textFields: fafafa -fx-font-size: 22; } -.show-hand { - -fx-cursor: hand; -} +/* Other UI Elements */ .separator { -fx-background: -bs-light-grey; } +/* Behavior */ + +.show-hand { + -fx-cursor: hand; +} + +.hide-focus { + -fx-focus-color: transparent; +} + +/* Font */ + +.very-small-text { + -fx-font-size: 9; +} + +.small-text { + -fx-font-size: 10; +} + +.normal-text { + -fx-font-size: 12; +} + + /* Splash */ #splash { @@ -184,10 +208,6 @@ bg color of non edit textFields: fafafa -fx-fill: -fx-accent; } -#nav-button-label { - -fx-font-size: 10; -} - #nav-balance-label { -fx-font-size: 10; -fx-alignment: center; @@ -218,10 +238,6 @@ bg color of non edit textFields: fafafa -fx-background-color: -bs-bg-light; } -#feedback-text { - -fx-font-size: 10; -} - #label-url { -fx-cursor: hand; -fx-text-fill: -bs-blue; @@ -501,6 +517,16 @@ textfield */ -fx-cursor: hand; } +/******************************************************************************* + * * + * Textarea * + * * + ******************************************************************************/ + +.text-area { + -fx-border-color: -bs-bg-grey; +} + /******************************************************************************* * * * Tab pane * diff --git a/gui/src/main/java/io/bisq/gui/components/InfoDisplay.java b/gui/src/main/java/io/bisq/gui/components/InfoDisplay.java index e73334ff6f..613906868c 100644 --- a/gui/src/main/java/io/bisq/gui/components/InfoDisplay.java +++ b/gui/src/main/java/io/bisq/gui/components/InfoDisplay.java @@ -114,7 +114,7 @@ public class InfoDisplay extends Parent { label.prefWidthProperty().bind(textFlow.widthProperty()); link.setVisited(false); // focus border is a bit confusing here so we remove it - link.setStyle("-fx-focus-color: transparent;"); + link.getStyleClass().add("hide-focus"); link.setOnAction(onAction.get()); getParent().layout(); } else { diff --git a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java index daadf69dee..71cad3bd5b 100644 --- a/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java +++ b/gui/src/main/java/io/bisq/gui/main/disputes/trader/TraderDisputeView.java @@ -707,7 +707,7 @@ public class TraderDisputeView extends ActivatableView { messageLabel.setWrapText(true); headerLabel.setTextAlignment(TextAlignment.CENTER); attachmentsBox.setSpacing(5); - statusIcon.setStyle("-fx-font-size: 10;"); + statusIcon.getStyleClass().add("small-text"); copyIcon.setTooltip(new Tooltip(Res.get("shared.copyToClipboard"))); messageAnchorPane.getChildren().addAll(bg, arrow, headerLabel, messageLabel, copyIcon, attachmentsBox, statusIcon); } diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/ShowWalletDataWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/ShowWalletDataWindow.java index 714d49a800..3eb3a74188 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/ShowWalletDataWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/ShowWalletDataWindow.java @@ -85,7 +85,7 @@ public class ShowWalletDataWindow extends Overlay { Label label = labelTextAreaTuple2.first; label.setMinWidth(150); textArea.setPrefHeight(500); - textArea.setStyle("-fx-font-size: 10;"); + textArea.getStyleClass().add("small-text"); CheckBox isUpdateCheckBox = addLabelCheckBox(gridPane, ++rowIndex, Res.get("showWalletDataWindow.includePrivKeys"), "").second; isUpdateCheckBox.setSelected(false); diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java index a8c161e5d8..62b0b630f5 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java @@ -79,11 +79,11 @@ public class TacWindow extends Overlay { @Override protected void addMessage() { super.addMessage(); - String fontSize = smallScreen ? "9" : "12"; - messageLabel.setStyle("-fx-font-size: " + fontSize + ";"); + String fontStyleClass = smallScreen ? "small-text" : "normal-text"; + messageLabel.getStyleClass().add(fontStyleClass) HyperlinkWithIcon hyperlinkWithIcon = addHyperlinkWithIcon(gridPane, ++rowIndex, Res.get("tacWindow.arbitrationSystem"), "https://bisq.network/arbitration_system.pdf"); - hyperlinkWithIcon.setStyle("-fx-font-size: " + fontSize + ";"); + hyperlinkWithIcon.getStyleClass().add(fontStyleClass); GridPane.setMargin(hyperlinkWithIcon, new Insets(-6, 0, -20, -4)); } diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java index a7caba340a..45bba51925 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/WalletPasswordWindow.java @@ -266,7 +266,7 @@ public class WalletPasswordWindow extends Overlay { Tuple2 tuple = addLabelTextArea(gridPane, ++rowIndex, Res.get("seed.seedWords"), "", 5); seedWordsTextArea = tuple.second; seedWordsTextArea.setPrefHeight(60); - seedWordsTextArea.setStyle("-fx-border-color: #ddd;"); + seedWordsTextArea.getStyleClass().add("text-area"); Tuple2 labelDatePickerTuple2 = addLabelDatePicker(gridPane, ++rowIndex, Res.get("seed.creationDate")); diff --git a/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/PendingTradesView.java b/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/PendingTradesView.java index a300ef9edd..3f7ddf88c4 100644 --- a/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/PendingTradesView.java +++ b/gui/src/main/java/io/bisq/gui/main/portfolio/pendingtrades/PendingTradesView.java @@ -307,13 +307,6 @@ public class PendingTradesView extends ActivatableViewAndModel Date: Mon, 18 Dec 2017 11:20:13 +0100 Subject: [PATCH 22/32] Show tor connection progress during app startup --- common/src/main/resources/i18n/displayStrings.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_de.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_el.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_es.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_hu.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_pt.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_ro.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_ru.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_sr.properties | 8 ++++---- .../src/main/resources/i18n/displayStrings_zh.properties | 8 ++++---- .../resources/i18n/in_dev/displayStrings_fr.properties | 8 ++++---- 11 files changed, 44 insertions(+), 44 deletions(-) diff --git a/common/src/main/resources/i18n/displayStrings.properties b/common/src/main/resources/i18n/displayStrings.properties index e976177a63..9197094bcd 100644 --- a/common/src/main/resources/i18n/displayStrings.properties +++ b/common/src/main/resources/i18n/displayStrings.properties @@ -230,10 +230,10 @@ mainView.footer.btcInfo.connectingTo=connecting to mainView.footer.btcInfo.connectionFailed=connection failed mainView.footer.p2pInfo= P2P network peers: {0} -mainView.bootstrapState.connectionToTorNetwork=Connecting to Tor network... -mainView.bootstrapState.torNodeCreated=Tor node created -mainView.bootstrapState.hiddenServicePublished=Hidden Service published -mainView.bootstrapState.initialDataReceived=Initial data received +mainView.bootstrapState.connectionToTorNetwork=(1/4) Connecting to Tor network... +mainView.bootstrapState.torNodeCreated=(2/4) Tor node created +mainView.bootstrapState.hiddenServicePublished=(3/4) Hidden Service published +mainView.bootstrapState.initialDataReceived=(4/4) Initial data received mainView.bootstrapWarning.noSeedNodesAvailable=No seed nodes available mainView.bootstrapWarning.noNodesAvailable=No seed nodes and peers available diff --git a/common/src/main/resources/i18n/displayStrings_de.properties b/common/src/main/resources/i18n/displayStrings_de.properties index 604de1a128..be20b7f3e1 100644 --- a/common/src/main/resources/i18n/displayStrings_de.properties +++ b/common/src/main/resources/i18n/displayStrings_de.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=verbinde mit mainView.footer.btcInfo.connectionFailed=Verbindung fehlgeschlagen mainView.footer.p2pInfo= P2P-Netzwerk-Peers: {0} -mainView.bootstrapState.connectionToTorNetwork=Verbindung mit Tor-Netzwerk wird hergestellt... -mainView.bootstrapState.torNodeCreated=Tor-Knoten erstellt -mainView.bootstrapState.hiddenServicePublished=Hidden Service veröffentlicht -mainView.bootstrapState.initialDataReceived=Anfangsdaten erhalten +mainView.bootstrapState.connectionToTorNetwork=(1/4) Verbindung mit Tor-Netzwerk wird hergestellt... +mainView.bootstrapState.torNodeCreated=(2/4) Tor-Knoten erstellt +mainView.bootstrapState.hiddenServicePublished=(3/4) Hidden Service veröffentlicht +mainView.bootstrapState.initialDataReceived=(4/4) Anfangsdaten erhalten mainView.bootstrapWarning.noSeedNodesAvailable=Keine Seed-Knoten verfügbar mainView.bootstrapWarning.noNodesAvailable=Keine Seed-Knoten und Peers verfügbar diff --git a/common/src/main/resources/i18n/displayStrings_el.properties b/common/src/main/resources/i18n/displayStrings_el.properties index f88bb25275..74f16d0439 100644 --- a/common/src/main/resources/i18n/displayStrings_el.properties +++ b/common/src/main/resources/i18n/displayStrings_el.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=σύνδεση με mainView.footer.btcInfo.connectionFailed=σύνδεση απέτυχε mainView.footer.p2pInfo= P2P network peers: {0} -mainView.bootstrapState.connectionToTorNetwork=Σύνδεση με δίκτυο Tor... -mainView.bootstrapState.torNodeCreated=Κόμβος Tor δημιουργήθηκε -mainView.bootstrapState.hiddenServicePublished=Κοινοποίηση κρυφής υπηρεσίας -mainView.bootstrapState.initialDataReceived=Αρχικά δεδομένα ελήφθησαν +mainView.bootstrapState.connectionToTorNetwork=(1/4) Σύνδεση με δίκτυο Tor... +mainView.bootstrapState.torNodeCreated=(2/4) Κόμβος Tor δημιουργήθηκε +mainView.bootstrapState.hiddenServicePublished=(3/4) Κοινοποίηση κρυφής υπηρεσίας +mainView.bootstrapState.initialDataReceived=(4/4) Αρχικά δεδομένα ελήφθησαν mainView.bootstrapWarning.noSeedNodesAvailable=Δεν υπάρχουν διαθέσιμοι seed κόμβοι mainView.bootstrapWarning.noNodesAvailable=Δεν υπάρχουν διαθέσιμοι seed κόμβοι και peers diff --git a/common/src/main/resources/i18n/displayStrings_es.properties b/common/src/main/resources/i18n/displayStrings_es.properties index f6151e717e..2d7c398bc0 100644 --- a/common/src/main/resources/i18n/displayStrings_es.properties +++ b/common/src/main/resources/i18n/displayStrings_es.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=Conectando a mainView.footer.btcInfo.connectionFailed=Conexión fallida mainView.footer.p2pInfo= Pares de red P2P: {0} -mainView.bootstrapState.connectionToTorNetwork=Conectando a la red Tor... -mainView.bootstrapState.torNodeCreated=Nodo Tor creado -mainView.bootstrapState.hiddenServicePublished=Servicio Escondido publicado -mainView.bootstrapState.initialDataReceived=Datos iniciales recibidos. +mainView.bootstrapState.connectionToTorNetwork=(1/4) Conectando a la red Tor... +mainView.bootstrapState.torNodeCreated=(2/4) Nodo Tor creado +mainView.bootstrapState.hiddenServicePublished=(3/4) Servicio Escondido publicado +mainView.bootstrapState.initialDataReceived=(4/4) Datos iniciales recibidos. mainView.bootstrapWarning.noSeedNodesAvailable=No hay nodos de siembra disponibles mainView.bootstrapWarning.noNodesAvailable=No hay nodos de sembrado y pares disponibles diff --git a/common/src/main/resources/i18n/displayStrings_hu.properties b/common/src/main/resources/i18n/displayStrings_hu.properties index 5684435cc1..74543c7717 100644 --- a/common/src/main/resources/i18n/displayStrings_hu.properties +++ b/common/src/main/resources/i18n/displayStrings_hu.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=csatlakozás mainView.footer.btcInfo.connectionFailed=sikeretlen kapcsolat mainView.footer.p2pInfo= P2P hálózat társak: {0} -mainView.bootstrapState.connectionToTorNetwork=Csatlakozás Tor hálózathoz... -mainView.bootstrapState.torNodeCreated=Tor csomópont létrehozva -mainView.bootstrapState.hiddenServicePublished=Rejtett Szolgáltatás megjelentve -mainView.bootstrapState.initialDataReceived=Kezdeti adatok megérkezve +mainView.bootstrapState.connectionToTorNetwork=(1/4) Csatlakozás Tor hálózathoz... +mainView.bootstrapState.torNodeCreated=(2/4) Tor csomópont létrehozva +mainView.bootstrapState.hiddenServicePublished=(3/4) Rejtett Szolgáltatás megjelentve +mainView.bootstrapState.initialDataReceived=(4/4) Kezdeti adatok megérkezve mainView.bootstrapWarning.noSeedNodesAvailable=Nincs elérhető mag csomópont mainView.bootstrapWarning.noNodesAvailable=Nincs elérhető mag és társ csomópont diff --git a/common/src/main/resources/i18n/displayStrings_pt.properties b/common/src/main/resources/i18n/displayStrings_pt.properties index faa7ca1f9a..084632f34b 100644 --- a/common/src/main/resources/i18n/displayStrings_pt.properties +++ b/common/src/main/resources/i18n/displayStrings_pt.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=conectando à mainView.footer.btcInfo.connectionFailed=falha na conexão mainView.footer.p2pInfo= Pares na rede P2P: {0} -mainView.bootstrapState.connectionToTorNetwork=Conectando à rede Tor.... -mainView.bootstrapState.torNodeCreated=Nó da rede Tor criado -mainView.bootstrapState.hiddenServicePublished=Serviço Oculto publicado -mainView.bootstrapState.initialDataReceived=Dados iniciais recebidos +mainView.bootstrapState.connectionToTorNetwork=(1/4) Conectando à rede Tor.... +mainView.bootstrapState.torNodeCreated=(2/4) Nó da rede Tor criado +mainView.bootstrapState.hiddenServicePublished=(3/4) Serviço Oculto publicado +mainView.bootstrapState.initialDataReceived=(4/4) Dados iniciais recebidos mainView.bootstrapWarning.noSeedNodesAvailable=Nenhum nó semente disponível mainView.bootstrapWarning.noNodesAvailable=Sem nós semente e pares disponíveis diff --git a/common/src/main/resources/i18n/displayStrings_ro.properties b/common/src/main/resources/i18n/displayStrings_ro.properties index 78203de622..f6189604b9 100644 --- a/common/src/main/resources/i18n/displayStrings_ro.properties +++ b/common/src/main/resources/i18n/displayStrings_ro.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=conectare la mainView.footer.btcInfo.connectionFailed=conectare eșuată mainView.footer.p2pInfo= Semeni de rețea P2P: {0} -mainView.bootstrapState.connectionToTorNetwork=Conectare la rețeaua Tor... -mainView.bootstrapState.torNodeCreated=Nod Tor creat -mainView.bootstrapState.hiddenServicePublished=Serviciu ascuns publicat -mainView.bootstrapState.initialDataReceived=Date inițiale primite +mainView.bootstrapState.connectionToTorNetwork=(1/4) Conectare la rețeaua Tor... +mainView.bootstrapState.torNodeCreated=(2/4) Nod Tor creat +mainView.bootstrapState.hiddenServicePublished=(3/4) Serviciu ascuns publicat +mainView.bootstrapState.initialDataReceived=(4/4) Date inițiale primite mainView.bootstrapWarning.noSeedNodesAvailable=Nu există noduri nucleu disponibile mainView.bootstrapWarning.noNodesAvailable=Nu există semeni și noduri nucleu disponibile diff --git a/common/src/main/resources/i18n/displayStrings_ru.properties b/common/src/main/resources/i18n/displayStrings_ru.properties index f8d358b674..2d74573bf7 100644 --- a/common/src/main/resources/i18n/displayStrings_ru.properties +++ b/common/src/main/resources/i18n/displayStrings_ru.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=соединение с mainView.footer.btcInfo.connectionFailed=соединение неудачно mainView.footer.p2pInfo= Участников P2P сети: {0} -mainView.bootstrapState.connectionToTorNetwork=Соединение с сетью Tor... -mainView.bootstrapState.torNodeCreated=Создан узел Tor -mainView.bootstrapState.hiddenServicePublished=Скрытая служба опубликовала -mainView.bootstrapState.initialDataReceived=Начальные данные получены +mainView.bootstrapState.connectionToTorNetwork=(1/4) Соединение с сетью Tor... +mainView.bootstrapState.torNodeCreated=(2/4) Создан узел Tor +mainView.bootstrapState.hiddenServicePublished=(3/4) Скрытая служба опубликовала +mainView.bootstrapState.initialDataReceived=(4/4) Начальные данные получены mainView.bootstrapWarning.noSeedNodesAvailable=Нет доступных узлов. mainView.bootstrapWarning.noNodesAvailable=Нет доступных узлов и участников diff --git a/common/src/main/resources/i18n/displayStrings_sr.properties b/common/src/main/resources/i18n/displayStrings_sr.properties index ca3b0bd87f..6a2de36db5 100644 --- a/common/src/main/resources/i18n/displayStrings_sr.properties +++ b/common/src/main/resources/i18n/displayStrings_sr.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=povezivanje sa mainView.footer.btcInfo.connectionFailed=veza nije uspostavljena mainView.footer.p2pInfo= Pirovi P2P mreže: {0} -mainView.bootstrapState.connectionToTorNetwork=Povezivanje sa Tor mrežom... -mainView.bootstrapState.torNodeCreated=Tor noda napravljena -mainView.bootstrapState.hiddenServicePublished=Skriven Servis objavljen -mainView.bootstrapState.initialDataReceived=Inicijalni podaci primljeni +mainView.bootstrapState.connectionToTorNetwork=(1/4) Povezivanje sa Tor mrežom... +mainView.bootstrapState.torNodeCreated=(2/4) Tor noda napravljena +mainView.bootstrapState.hiddenServicePublished=(3/4) Skriven Servis objavljen +mainView.bootstrapState.initialDataReceived=(4/4) Inicijalni podaci primljeni mainView.bootstrapWarning.noSeedNodesAvailable=Sid node nisu dostupne mainView.bootstrapWarning.noNodesAvailable=Sid node i pirovi nisu dostupni diff --git a/common/src/main/resources/i18n/displayStrings_zh.properties b/common/src/main/resources/i18n/displayStrings_zh.properties index 9e4d8de0b7..720e21a866 100644 --- a/common/src/main/resources/i18n/displayStrings_zh.properties +++ b/common/src/main/resources/i18n/displayStrings_zh.properties @@ -226,10 +226,10 @@ mainView.footer.btcInfo.connectingTo=连接至 mainView.footer.btcInfo.connectionFailed=连接失败 mainView.footer.p2pInfo= P2P 网络节点: {0} -mainView.bootstrapState.connectionToTorNetwork=连接至 Tor 网络... -mainView.bootstrapState.torNodeCreated=Tor 节点已创建 -mainView.bootstrapState.hiddenServicePublished=隐藏的服务已发布 -mainView.bootstrapState.initialDataReceived=初始数据已接收 +mainView.bootstrapState.connectionToTorNetwork=(1/4) 连接至 Tor 网络... +mainView.bootstrapState.torNodeCreated=(2/4) Tor 节点已创建 +mainView.bootstrapState.hiddenServicePublished=(3/4) 隐藏的服务已发布 +mainView.bootstrapState.initialDataReceived=(4/4) 初始数据已接收 mainView.bootstrapWarning.noSeedNodesAvailable=没有可用的种子节点 mainView.bootstrapWarning.noNodesAvailable=没有可用的种子节点和节点 diff --git a/common/src/main/resources/i18n/in_dev/displayStrings_fr.properties b/common/src/main/resources/i18n/in_dev/displayStrings_fr.properties index 902ab9fac5..063ebbfd34 100644 --- a/common/src/main/resources/i18n/in_dev/displayStrings_fr.properties +++ b/common/src/main/resources/i18n/in_dev/displayStrings_fr.properties @@ -414,10 +414,10 @@ mainView.footer.btcInfo.synchronizedWith=Synchronisé avec mainView.footer.btcInfo.connectingTo=Connexion à mainView.footer.btcInfo.connectionFailed=Échec de la connexion mainView.footer.p2pInfo=Pairs de réseau P2P: {0} -mainView.bootstrapState.connectionToTorNetwork=Connexion au réseau Tor... -mainView.bootstrapState.torNodeCreated=Noeud Tor créé -mainView.bootstrapState.hiddenServicePublished=Service caché publié -mainView.bootstrapState.initialDataReceived=Données initiales reçues +mainView.bootstrapState.connectionToTorNetwork=(1/4) Connexion au réseau Tor... +mainView.bootstrapState.torNodeCreated=(2/4) Noeud Tor créé +mainView.bootstrapState.hiddenServicePublished=(3/4) Service caché publié +mainView.bootstrapState.initialDataReceived=(4/4) Données initiales reçues mainView.bootstrapWarning.noSeedNodesAvailable=Aucun nœud d'initialisation disponible mainView.bootstrapWarning.noNodesAvailable=Aucun nœud d'initialisation ou de pair persistant n'est disponible mainView.bootstrapWarning.bootstrappingToP2PFailed=Le démarrage du réseau P2P a échoué From 714ccc1ecd7ad02e05b04786e8d8ff444ca93e61 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 02:03:03 +0100 Subject: [PATCH 23/32] Increase num btc nodes from 8 to 9 --- core/src/main/java/io/bisq/core/app/BisqEnvironment.java | 2 +- core/src/main/java/io/bisq/core/app/BisqExecutable.java | 2 +- core/src/main/java/io/bisq/core/btc/wallet/WalletsSetup.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/io/bisq/core/app/BisqEnvironment.java b/core/src/main/java/io/bisq/core/app/BisqEnvironment.java index 61276d65ef..6395277b79 100644 --- a/core/src/main/java/io/bisq/core/app/BisqEnvironment.java +++ b/core/src/main/java/io/bisq/core/app/BisqEnvironment.java @@ -275,7 +275,7 @@ public class BisqEnvironment extends StandardEnvironment { ""; numConnectionForBtc = commandLineProperties.containsProperty(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC) ? (String) commandLineProperties.getProperty(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC) : - "8"; + "9"; MutablePropertySources propertySources = this.getPropertySources(); propertySources.addFirst(commandLineProperties); diff --git a/core/src/main/java/io/bisq/core/app/BisqExecutable.java b/core/src/main/java/io/bisq/core/app/BisqExecutable.java index 00ddc106d4..18140478e7 100644 --- a/core/src/main/java/io/bisq/core/app/BisqExecutable.java +++ b/core/src/main/java/io/bisq/core/app/BisqExecutable.java @@ -160,7 +160,7 @@ public abstract class BisqExecutable { description("User agent at btc node connections", "")) .withRequiredArg(); parser.accepts(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC, - description("Number of connections to the Bitcoin network", "8")) + description("Number of connections to the Bitcoin network", "9")) .withRequiredArg(); diff --git a/core/src/main/java/io/bisq/core/btc/wallet/WalletsSetup.java b/core/src/main/java/io/bisq/core/btc/wallet/WalletsSetup.java index e488443614..b25c7b8547 100644 --- a/core/src/main/java/io/bisq/core/btc/wallet/WalletsSetup.java +++ b/core/src/main/java/io/bisq/core/btc/wallet/WalletsSetup.java @@ -71,8 +71,8 @@ import static com.google.common.base.Preconditions.checkNotNull; // merge WalletsSetup with WalletConfig to one class. @Slf4j public class WalletsSetup { - // We reduce defaultConnections from 12 (PeerGroup.DEFAULT_CONNECTIONS) to 8 nodes - private static final int DEFAULT_CONNECTIONS = 8; + // We reduce defaultConnections from 12 (PeerGroup.DEFAULT_CONNECTIONS) to 9 nodes + private static final int DEFAULT_CONNECTIONS = 9; private static final long STARTUP_TIMEOUT = 180; private final String btcWalletFileName; From 9f775f2caef59a163b30055509d4ba0b77bc744c Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 02:52:54 +0100 Subject: [PATCH 24/32] Make validators not singleton --- gui/src/main/java/io/bisq/gui/GuiModule.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/gui/src/main/java/io/bisq/gui/GuiModule.java b/gui/src/main/java/io/bisq/gui/GuiModule.java index 1f59f27f73..b07c547921 100644 --- a/gui/src/main/java/io/bisq/gui/GuiModule.java +++ b/gui/src/main/java/io/bisq/gui/GuiModule.java @@ -31,7 +31,6 @@ import io.bisq.gui.main.offer.offerbook.OfferBook; import io.bisq.gui.util.BSFormatter; import io.bisq.gui.util.BsqFormatter; import io.bisq.gui.util.Transitions; -import io.bisq.gui.util.validation.*; import javafx.stage.Stage; import org.springframework.core.env.Environment; @@ -61,13 +60,6 @@ public class GuiModule extends AppModule { bind(BSFormatter.class).in(Singleton.class); bind(BsqFormatter.class).in(Singleton.class); - bind(IBANValidator.class).in(Singleton.class); - bind(BtcValidator.class).in(Singleton.class); - bind(FiatVolumeValidator.class).in(Singleton.class); - bind(FiatPriceValidator.class).in(Singleton.class); - bind(AltcoinValidator.class).in(Singleton.class); - bind(InputValidator.class).in(Singleton.class); - bind(PasswordValidator.class).in(Singleton.class); bind(Transitions.class).in(Singleton.class); bind(Stage.class).toInstance(primaryStage); From 510147822f9440aadc07dd00de7f935ff1f18bb9 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 03:27:19 +0100 Subject: [PATCH 25/32] Update version nr for seed, provider and statistic nodes. Cleanup --- core/src/main/java/io/bisq/core/app/BisqEnvironment.java | 2 +- .../java/io/bisq/core/network/CoreSeedNodesRepository.java | 1 - core/src/main/java/io/bisq/core/offer/OpenOfferManager.java | 2 -- .../src/main/java/io/bisq/network/p2p/network/Statistic.java | 4 ---- provider/src/main/java/io/bisq/provider/ProviderVersion.java | 2 +- seednode/src/main/java/io/bisq/seednode/SeedNode.java | 2 +- statistics/src/main/java/io/bisq/statistics/Statistics.java | 3 +-- 7 files changed, 4 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/io/bisq/core/app/BisqEnvironment.java b/core/src/main/java/io/bisq/core/app/BisqEnvironment.java index 6395277b79..cca7c369ae 100644 --- a/core/src/main/java/io/bisq/core/app/BisqEnvironment.java +++ b/core/src/main/java/io/bisq/core/app/BisqEnvironment.java @@ -272,7 +272,7 @@ public class BisqEnvironment extends StandardEnvironment { "Bisq"; useAllProvidedNodes = commandLineProperties.containsProperty(BtcOptionKeys.USE_ALL_PROVIDED_NODES) ? (String) commandLineProperties.getProperty(BtcOptionKeys.USE_ALL_PROVIDED_NODES) : - ""; + "false"; numConnectionForBtc = commandLineProperties.containsProperty(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC) ? (String) commandLineProperties.getProperty(BtcOptionKeys.NUM_CONNECTIONS_FOR_BTC) : "9"; diff --git a/core/src/main/java/io/bisq/core/network/CoreSeedNodesRepository.java b/core/src/main/java/io/bisq/core/network/CoreSeedNodesRepository.java index 46281e4c9e..49eb54e8a3 100644 --- a/core/src/main/java/io/bisq/core/network/CoreSeedNodesRepository.java +++ b/core/src/main/java/io/bisq/core/network/CoreSeedNodesRepository.java @@ -94,7 +94,6 @@ public class CoreSeedNodesRepository implements SeedNodesRepository { new NodeAddress("rm7b56wbrcczpjvl.onion:8000"), // @manfredkarrer new NodeAddress("fl3mmribyxgrv63c.onion:8000"), // @manfredkarrer - //TODO dev // local dev // new NodeAddress("joehwtpe7ijnz4df.onion:8000"), // new NodeAddress("uqxi3zrpobhtoes6.onion:8000"), diff --git a/core/src/main/java/io/bisq/core/offer/OpenOfferManager.java b/core/src/main/java/io/bisq/core/offer/OpenOfferManager.java index f89ca7449b..0b52251356 100644 --- a/core/src/main/java/io/bisq/core/offer/OpenOfferManager.java +++ b/core/src/main/java/io/bisq/core/offer/OpenOfferManager.java @@ -68,9 +68,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe private static final long RETRY_REPUBLISH_DELAY_SEC = 10; private static final long REPUBLISH_AGAIN_AT_STARTUP_DELAY_SEC = 30; - @SuppressWarnings("ConstantConditions") private static final long REPUBLISH_INTERVAL_MS = TimeUnit.MINUTES.toMillis(30); - @SuppressWarnings("ConstantConditions") private static final long REFRESH_INTERVAL_MS = TimeUnit.MINUTES.toMillis(5); private final KeyRing keyRing; diff --git a/network/src/main/java/io/bisq/network/p2p/network/Statistic.java b/network/src/main/java/io/bisq/network/p2p/network/Statistic.java index bbbd33c74f..501cf01a88 100644 --- a/network/src/main/java/io/bisq/network/p2p/network/Statistic.java +++ b/network/src/main/java/io/bisq/network/p2p/network/Statistic.java @@ -6,16 +6,12 @@ import javafx.beans.property.IntegerProperty; import javafx.beans.property.LongProperty; import javafx.beans.property.SimpleIntegerProperty; import javafx.beans.property.SimpleLongProperty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Statistic { - private static final Logger log = LoggerFactory.getLogger(Statistic.class); - /////////////////////////////////////////////////////////////////////////////////////////// // Static diff --git a/provider/src/main/java/io/bisq/provider/ProviderVersion.java b/provider/src/main/java/io/bisq/provider/ProviderVersion.java index 17b1bf8519..fa132b98bb 100644 --- a/provider/src/main/java/io/bisq/provider/ProviderVersion.java +++ b/provider/src/main/java/io/bisq/provider/ProviderVersion.java @@ -18,5 +18,5 @@ package io.bisq.provider; public class ProviderVersion { - public static final String VERSION = "0.6.3"; + public static final String VERSION = "0.6.4"; } diff --git a/seednode/src/main/java/io/bisq/seednode/SeedNode.java b/seednode/src/main/java/io/bisq/seednode/SeedNode.java index eba8eb0146..cf338ff393 100644 --- a/seednode/src/main/java/io/bisq/seednode/SeedNode.java +++ b/seednode/src/main/java/io/bisq/seednode/SeedNode.java @@ -37,7 +37,7 @@ import java.util.Arrays; @Slf4j public class SeedNode { - public static final String VERSION = "0.6.2"; + public static final String VERSION = "0.6.3"; private static BisqEnvironment bisqEnvironment; public static void setEnvironment(BisqEnvironment bisqEnvironment) { diff --git a/statistics/src/main/java/io/bisq/statistics/Statistics.java b/statistics/src/main/java/io/bisq/statistics/Statistics.java index ce21b10aeb..a2416cf826 100644 --- a/statistics/src/main/java/io/bisq/statistics/Statistics.java +++ b/statistics/src/main/java/io/bisq/statistics/Statistics.java @@ -41,8 +41,7 @@ import java.util.Arrays; @Slf4j public class Statistics { - // Bisq v0.6.1 did not change anything relevant for that project so we stick with 0.6.0 - public static final String VERSION = "0.6.0"; + public static final String VERSION = "0.6.1"; private static BisqEnvironment bisqEnvironment; public static void setEnvironment(BisqEnvironment bisqEnvironment) { From ea4b926a8c52d621735dc4dd151560ed9b4aabbd Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 12:48:13 +0100 Subject: [PATCH 26/32] Change mvn plugin version --- monitor/pom.xml | 5 ++--- network/src/main/java/io/bisq/network/http/HttpClient.java | 3 +-- provider/pom.xml | 5 ++--- seednode/pom.xml | 5 ++--- statistics/pom.xml | 5 ++--- 5 files changed, 9 insertions(+), 14 deletions(-) diff --git a/monitor/pom.xml b/monitor/pom.xml index ae0d72ca1e..1eb3d7e745 100644 --- a/monitor/pom.xml +++ b/monitor/pom.xml @@ -86,13 +86,12 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.1.0 false - + io.bisq.monitor.MonitorMain diff --git a/network/src/main/java/io/bisq/network/http/HttpClient.java b/network/src/main/java/io/bisq/network/http/HttpClient.java index 67873c9269..36332bc2a0 100644 --- a/network/src/main/java/io/bisq/network/http/HttpClient.java +++ b/network/src/main/java/io/bisq/network/http/HttpClient.java @@ -30,11 +30,10 @@ import java.util.UUID; import static com.google.common.base.Preconditions.checkNotNull; - +// TODO close connection if failing public class HttpClient { private static final Logger log = LoggerFactory.getLogger(HttpClient.class); - @Nullable private Socks5ProxyProvider socks5ProxyProvider; @Getter diff --git a/provider/pom.xml b/provider/pom.xml index 27be5e1851..9fe55ae9b4 100644 --- a/provider/pom.xml +++ b/provider/pom.xml @@ -86,13 +86,12 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.1.0 false - + io.bisq.provider.ProviderMain diff --git a/seednode/pom.xml b/seednode/pom.xml index bac3b031ac..4ba41b35f2 100644 --- a/seednode/pom.xml +++ b/seednode/pom.xml @@ -86,13 +86,12 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.1.0 false - + io.bisq.seednode.SeedNodeMain diff --git a/statistics/pom.xml b/statistics/pom.xml index 23df462eb5..43e22bc3d9 100644 --- a/statistics/pom.xml +++ b/statistics/pom.xml @@ -85,13 +85,12 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.1.0 false - + io.bisq.statistics.StatisticsMain From b70d5f69af9ac765a9b56335eff8dd13c3b968af Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 18:17:23 +0100 Subject: [PATCH 27/32] Connect to other peers directrly after HS is published. Connect in parallel to 8 peers. Change some timeouts. --- .../io/bisq/core/btc/wallet/WalletConfig.java | 2 +- .../p2p/GetBlocksRequestHandler.java | 7 +- .../blockchain/p2p/RequestBlocksHandler.java | 1 - .../OfferAvailabilityProtocol.java | 9 +- .../java/io/bisq/network/p2p/P2PService.java | 23 +- .../network/p2p/network/TorNetworkNode.java | 2 +- .../network/p2p/peers/BroadcastHandler.java | 21 +- .../bisq/network/p2p/peers/PeerManager.java | 65 +++--- .../peers/getdata/GetDataRequestHandler.java | 11 +- .../p2p/peers/getdata/RequestDataHandler.java | 4 +- .../p2p/peers/getdata/RequestDataManager.java | 208 +++++++++--------- .../p2p/peers/keepalive/KeepAliveHandler.java | 2 +- .../p2p/peers/keepalive/KeepAliveManager.java | 4 +- .../peerexchange/GetPeersRequestHandler.java | 5 +- .../peerexchange/PeerExchangeHandler.java | 12 +- .../peerexchange/PeerExchangeManager.java | 148 +++++++------ 16 files changed, 263 insertions(+), 261 deletions(-) diff --git a/core/src/main/java/io/bisq/core/btc/wallet/WalletConfig.java b/core/src/main/java/io/bisq/core/btc/wallet/WalletConfig.java index b5346d35f6..e3458a384c 100644 --- a/core/src/main/java/io/bisq/core/btc/wallet/WalletConfig.java +++ b/core/src/main/java/io/bisq/core/btc/wallet/WalletConfig.java @@ -57,6 +57,7 @@ import static com.google.common.base.Preconditions.*; // Does the basic wiring @Slf4j public class WalletConfig extends AbstractIdleService { + private static int TIMEOUT = 120 * 1000; // connectTimeoutMillis. 60 sec used in bitcoinj, but for Tor we allow more. /////////////////////////////////////////////////////////////////////////////////////////// // WalletFactory @@ -190,7 +191,6 @@ public class WalletConfig extends AbstractIdleService { new InetSocketAddress(socks5Proxy.getInetAddress().getHostName(), socks5Proxy.getPort())); - int TIMEOUT = 120 * 1000; // 60 used in bitcoinj, but for Tor we allow more. ProxySocketFactory proxySocketFactory = new ProxySocketFactory(proxy); // we dont use tor mode if we have a local node running BlockingClientManager blockingClientManager = bisqEnvironment.isBitcoinLocalhostNodeRunning() ? diff --git a/core/src/main/java/io/bisq/core/dao/blockchain/p2p/GetBlocksRequestHandler.java b/core/src/main/java/io/bisq/core/dao/blockchain/p2p/GetBlocksRequestHandler.java index 27faf8c4bc..7d3452c2ff 100644 --- a/core/src/main/java/io/bisq/core/dao/blockchain/p2p/GetBlocksRequestHandler.java +++ b/core/src/main/java/io/bisq/core/dao/blockchain/p2p/GetBlocksRequestHandler.java @@ -13,16 +13,13 @@ import io.bisq.core.dao.blockchain.vo.BsqBlock; import io.bisq.network.p2p.network.CloseConnectionReason; import io.bisq.network.p2p.network.Connection; import io.bisq.network.p2p.network.NetworkNode; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.List; import java.util.concurrent.TimeUnit; - +@Slf4j public class GetBlocksRequestHandler { - private static final Logger log = LoggerFactory.getLogger(GetBlocksRequestHandler.class); - private static final long TIMEOUT = 120; diff --git a/core/src/main/java/io/bisq/core/dao/blockchain/p2p/RequestBlocksHandler.java b/core/src/main/java/io/bisq/core/dao/blockchain/p2p/RequestBlocksHandler.java index 37ed9fa510..03c619c13b 100644 --- a/core/src/main/java/io/bisq/core/dao/blockchain/p2p/RequestBlocksHandler.java +++ b/core/src/main/java/io/bisq/core/dao/blockchain/p2p/RequestBlocksHandler.java @@ -25,7 +25,6 @@ import static com.google.common.base.Preconditions.checkArgument; @Slf4j public class RequestBlocksHandler implements MessageListener { - private static final long TIMEOUT = 120; diff --git a/core/src/main/java/io/bisq/core/offer/availability/OfferAvailabilityProtocol.java b/core/src/main/java/io/bisq/core/offer/availability/OfferAvailabilityProtocol.java index e86782378f..8c65e65541 100644 --- a/core/src/main/java/io/bisq/core/offer/availability/OfferAvailabilityProtocol.java +++ b/core/src/main/java/io/bisq/core/offer/availability/OfferAvailabilityProtocol.java @@ -30,13 +30,10 @@ import io.bisq.core.offer.messages.OfferAvailabilityResponse; import io.bisq.core.offer.messages.OfferMessage; import io.bisq.core.util.Validator; import io.bisq.network.p2p.DecryptedDirectMessageListener; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import lombok.extern.slf4j.Slf4j; +@Slf4j public class OfferAvailabilityProtocol { - private static final Logger log = LoggerFactory.getLogger(OfferAvailabilityProtocol.class); - - private static final long TIMEOUT = 120; + private static final long TIMEOUT = 90; private final OfferAvailabilityModel model; private final ResultHandler resultHandler; diff --git a/network/src/main/java/io/bisq/network/p2p/P2PService.java b/network/src/main/java/io/bisq/network/p2p/P2PService.java index d02da1a03f..abe2d3e1d0 100644 --- a/network/src/main/java/io/bisq/network/p2p/P2PService.java +++ b/network/src/main/java/io/bisq/network/p2p/P2PService.java @@ -43,6 +43,7 @@ import org.slf4j.LoggerFactory; import java.security.PublicKey; import java.util.*; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.concurrent.TimeUnit; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @@ -234,7 +235,6 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis /////////////////////////////////////////////////////////////////////////////////////////// // SetupListener implementation /////////////////////////////////////////////////////////////////////////////////////////// - @Override public void onTorNodeReady() { Log.traceCall(); @@ -284,8 +284,18 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis "seedNodeOfPreliminaryDataRequest must be present"); requestDataManager.requestUpdateData(); + + // If we start up first time we don't have any peers so we need to request from seed node. + // As well it can be that the persisted peer list is outdated with dead peers. + UserThread.runAfter(() -> { + peerExchangeManager.requestReportedPeersFromSeedNodes(seedNodeOfPreliminaryDataRequest.get()); + }, 100, TimeUnit.MILLISECONDS); + + // If we have reported or persisted peers we try to connect to those + UserThread.runAfter(peerExchangeManager::initialRequestPeersFromReportedOrPersistedPeers, 300, TimeUnit.MILLISECONDS); } + /////////////////////////////////////////////////////////////////////////////////////////// // RequestDataManager.Listener implementation /////////////////////////////////////////////////////////////////////////////////////////// @@ -299,11 +309,6 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis @Override public void onUpdatedDataReceived() { - Optional seedNodeOfPreliminaryDataRequest = requestDataManager.getNodeAddressOfPreliminaryDataRequest(); - checkArgument(seedNodeOfPreliminaryDataRequest.isPresent(), - "seedNodeOfPreliminaryDataRequest must be present"); - peerExchangeManager.requestReportedPeersFromSeedNodes(seedNodeOfPreliminaryDataRequest.get()); - if (!isBootstrapped) { isBootstrapped = true; p2pServiceListeners.stream().forEach(P2PServiceListener::onBootstrapComplete); @@ -445,6 +450,7 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis @Override public void onFailure(@NotNull Throwable throwable) { + log.error(throwable.toString()); throwable.printStackTrace(); sendDirectMessageListener.onFault(); } @@ -531,10 +537,7 @@ public class P2PService implements SetupListener, MessageListener, ConnectionLis @Override public void onFailure(@NotNull Throwable throwable) { - log.trace("SendEncryptedMailboxMessage onFailure"); - log.debug(throwable.toString()); - log.debug("We cannot send message to peer. Peer might be offline. We will store message in mailbox."); - log.trace("create MailboxEntry with peerAddress " + peersNodeAddress); + log.info("We cannot send message to peer. Peer might be offline. We will store message in mailbox. peersNodeAddress=" + peersNodeAddress); PublicKey receiverStoragePublicKey = peersPubKeyRing.getSignaturePubKey(); addMailboxData(new MailboxStoragePayload(prefixedSealedAndSignedMessage, keyRing.getSignatureKeyPair().getPublic(), diff --git a/network/src/main/java/io/bisq/network/p2p/network/TorNetworkNode.java b/network/src/main/java/io/bisq/network/p2p/network/TorNetworkNode.java index f8daa0df88..c7107b9332 100644 --- a/network/src/main/java/io/bisq/network/p2p/network/TorNetworkNode.java +++ b/network/src/main/java/io/bisq/network/p2p/network/TorNetworkNode.java @@ -254,7 +254,7 @@ public class TorNetworkNode extends NetworkNode { public void onFailure(@NotNull Throwable throwable) { UserThread.execute(() -> { - log.error("Hidden service creation failed", throwable); + log.error("Hidden service creation failed" + throwable); restartTor(throwable.getMessage()); }); } diff --git a/network/src/main/java/io/bisq/network/p2p/peers/BroadcastHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/BroadcastHandler.java index a88915c181..0dbbc12339 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/BroadcastHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/BroadcastHandler.java @@ -11,22 +11,22 @@ import io.bisq.network.p2p.NodeAddress; import io.bisq.network.p2p.network.Connection; import io.bisq.network.p2p.network.NetworkNode; import io.bisq.network.p2p.storage.messages.BroadcastMessage; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +@Slf4j public class BroadcastHandler implements PeerManager.Listener { - /////////////////////////////////////////////////////////////////////////////////////////// - // Static - /////////////////////////////////////////////////////////////////////////////////////////// + private static final long TIMEOUT = 60; - private static final Logger log = LoggerFactory.getLogger(BroadcastHandler.class); - private static final long TIMEOUT = 120; + + /////////////////////////////////////////////////////////////////////////////////////////// + // Listener + /////////////////////////////////////////////////////////////////////////////////////////// interface ResultHandler { void onCompleted(BroadcastHandler broadcastHandler); @@ -34,11 +34,6 @@ public class BroadcastHandler implements PeerManager.Listener { void onFault(BroadcastHandler broadcastHandler); } - - /////////////////////////////////////////////////////////////////////////////////////////// - // Listener - /////////////////////////////////////////////////////////////////////////////////////////// - public interface Listener { @SuppressWarnings({"EmptyMethod", "UnusedParameters"}) void onBroadcasted(BroadcastMessage message, int numOfCompletedBroadcasts); @@ -182,7 +177,7 @@ public class BroadcastHandler implements PeerManager.Listener { public void onFailure(@NotNull Throwable throwable) { numOfFailedBroadcasts++; if (!stopped) { - log.debug("Broadcast to " + nodeAddress + " failed.\n\t" + + log.info("Broadcast to " + nodeAddress + " failed.\n\t" + "ErrorMessage=" + throwable.getMessage()); if (numOfCompletedBroadcasts + numOfFailedBroadcasts == numPeers) onFault("stopped at onFailure: " + errorMessage); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java b/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java index bf53f6e9b2..4e85d14737 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java @@ -14,6 +14,7 @@ import io.bisq.network.p2p.network.*; import io.bisq.network.p2p.peers.peerexchange.Peer; import io.bisq.network.p2p.peers.peerexchange.PeerList; import io.bisq.network.p2p.seed.SeedNodesRepository; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import javax.annotation.Nullable; @@ -33,7 +34,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { private static final long CHECK_MAX_CONN_DELAY_SEC = 10; // Use a long delay as the bootstrapping peer might need a while until it knows its onion address - private static final long REMOVE_ANONYMOUS_PEER_SEC = 120; + private static final long REMOVE_ANONYMOUS_PEER_SEC = 240; private static final int MAX_REPORTED_PEERS = 1000; private static final int MAX_PERSISTED_PEERS = 500; @@ -73,7 +74,9 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { private boolean stopped; private boolean lostAllConnections; + @Getter private int minConnections; + private int disconnectFromSeedNode; private int maxConnectionsPeer; private int maxConnectionsNonDirect; private int maxConnectionsAbsolute; @@ -154,12 +157,14 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { } // Modify this to change the relationships between connection limits. + // maxConnections default 12 private void setConnectionLimits(int maxConnections) { - this.maxConnections = maxConnections; - minConnections = Math.max(1, maxConnections - 4); - maxConnectionsPeer = maxConnections + 4; - maxConnectionsNonDirect = maxConnections + 8; - maxConnectionsAbsolute = maxConnections + 18; + this.maxConnections = maxConnections; // 12 + disconnectFromSeedNode = Math.min(6, maxConnections + 1); // 6 + minConnections = Math.max(1, maxConnections - 4); // 1-8 + maxConnectionsPeer = maxConnections + 4; // 16 + maxConnectionsNonDirect = maxConnections + 8; // 20 + maxConnectionsAbsolute = maxConnections + 18; // 30 -> seedNode with maxConnections=30 -> 48 } /////////////////////////////////////////////////////////////////////////////////////////// @@ -244,7 +249,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { removeSuperfluousSeedNodes(); removeTooOldReportedPeers(); removeTooOldPersistedPeers(); - checkMaxConnections(maxConnections); + checkMaxConnections(); } else { log.debug("We have stopped already. We ignore that checkMaxConnectionsTimer.run call."); } @@ -252,13 +257,13 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { } } - private boolean checkMaxConnections(int limit) { - Log.traceCall("limit=" + limit); + private boolean checkMaxConnections() { + Log.traceCall("maxConnections=" + maxConnections); Set allConnections = networkNode.getAllConnections(); int size = allConnections.size(); - log.debug("We have {} connections open. Our limit is {}", size, limit); + log.debug("We have {} connections open. Our limit is {}", size, maxConnections); - if (size > limit) { + if (size > maxConnections) { log.debug("We have too many connections open.\n\t" + "Lets try first to remove the inbound connections of type PEER."); List candidates = allConnections.stream() @@ -266,7 +271,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { .filter(e -> e.getPeerType() == Connection.PeerType.PEER) .collect(Collectors.toList()); - if (candidates.size() == 0) { + if (candidates.isEmpty()) { log.debug("No candidates found. We check if we exceed our " + "maxConnectionsPeer limit of {}", maxConnectionsPeer); if (size > maxConnectionsPeer) { @@ -275,7 +280,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { .filter(e -> e.getPeerType() == Connection.PeerType.PEER) .collect(Collectors.toList()); - if (candidates.size() == 0) { + if (candidates.isEmpty()) { log.debug("No candidates found. We check if we exceed our " + "maxConnectionsNonDirect limit of {}", maxConnectionsNonDirect); if (size > maxConnectionsNonDirect) { @@ -284,7 +289,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { .filter(e -> e.getPeerType() != Connection.PeerType.DIRECT_MSG_PEER && e.getPeerType() != Connection.PeerType.INITIAL_DATA_REQUEST) .collect(Collectors.toList()); - if (candidates.size() == 0) { + if (candidates.isEmpty()) { log.debug("No candidates found. We check if we exceed our " + "maxConnectionsAbsolute limit of {}", maxConnectionsAbsolute); if (size > maxConnectionsAbsolute) { @@ -297,13 +302,13 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { } } - if (candidates.size() > 0) { + if (!candidates.isEmpty()) { candidates.sort((o1, o2) -> ((Long) o1.getStatistic().getLastActivityTimestamp()).compareTo(((Long) o2.getStatistic().getLastActivityTimestamp()))); log.debug("Candidates.size() for shut down=" + candidates.size()); Connection connection = candidates.remove(0); log.debug("We are going to shut down the oldest connection.\n\tconnection=" + connection.toString()); if (!connection.isStopped()) - connection.shutDown(CloseConnectionReason.TOO_MANY_CONNECTIONS_OPEN, () -> checkMaxConnections(limit)); + connection.shutDown(CloseConnectionReason.TOO_MANY_CONNECTIONS_OPEN, () -> UserThread.runAfter(this::checkMaxConnections, 100, TimeUnit.MILLISECONDS)); return true; } else { log.warn("No candidates found to remove (That case should not be possible as we use in the " + @@ -322,7 +327,9 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { networkNode.getAllConnections().stream() .filter(connection -> !connection.hasPeersNodeAddress()) .forEach(connection -> UserThread.runAfter(() -> { - // We give 30 seconds delay and check again if still no address is set + // We give 240 seconds delay and check again if still no address is set + // Keep the delay long as we don't want to disconnect a peer in case we are a seed node just + // because he needs longer for the HS publishing if (!connection.hasPeersNodeAddress() && !connection.isStopped()) { log.debug("We close the connection as the peer address is still unknown.\n\t" + "connection=" + connection); @@ -333,20 +340,18 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { private void removeSuperfluousSeedNodes() { Log.traceCall(); - if (networkNode.getConfirmedConnections().size() > maxConnections) { - Set connections = networkNode.getConfirmedConnections(); - if (hasSufficientConnections()) { - List candidates = connections.stream() - .filter(this::isSeedNode) - .collect(Collectors.toList()); + if (networkNode.getConfirmedConnections().size() > disconnectFromSeedNode) { + List seedNodes = networkNode.getConfirmedConnections().stream() + .filter(this::isSeedNode) + .collect(Collectors.toList()); - if (candidates.size() > 1) { - candidates.sort((o1, o2) -> ((Long) o1.getStatistic().getLastActivityTimestamp()).compareTo(((Long) o2.getStatistic().getLastActivityTimestamp()))); - log.debug("Number of connections exceeding MAX_CONNECTIONS_EXTENDED_1. Current size=" + candidates.size()); - Connection connection = candidates.remove(0); - log.debug("We are going to shut down the oldest connection.\n\tconnection=" + connection.toString()); - connection.shutDown(CloseConnectionReason.TOO_MANY_SEED_NODES_CONNECTED, this::removeSuperfluousSeedNodes); - } + if (!seedNodes.isEmpty()) { + seedNodes.sort((o1, o2) -> ((Long) o1.getStatistic().getLastActivityTimestamp()).compareTo(((Long) o2.getStatistic().getLastActivityTimestamp()))); + log.debug("Number of seed node connections to disconnect. Current size=" + seedNodes.size()); + Connection connection = seedNodes.get(0); + log.debug("We are going to shut down the oldest connection.\n\tconnection=" + connection.toString()); + connection.shutDown(CloseConnectionReason.TOO_MANY_SEED_NODES_CONNECTED, + () -> UserThread.runAfter(this::removeSuperfluousSeedNodes, 200, TimeUnit.MILLISECONDS)); } } } diff --git a/network/src/main/java/io/bisq/network/p2p/peers/getdata/GetDataRequestHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/getdata/GetDataRequestHandler.java index a644a91447..33a7f543b2 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/getdata/GetDataRequestHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/getdata/GetDataRequestHandler.java @@ -19,9 +19,8 @@ import io.bisq.network.p2p.storage.payload.CapabilityRequiringPayload; import io.bisq.network.p2p.storage.payload.PersistableNetworkPayload; import io.bisq.network.p2p.storage.payload.ProtectedStorageEntry; import io.bisq.network.p2p.storage.payload.ProtectedStoragePayload; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.HashSet; import java.util.List; @@ -29,11 +28,9 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; - +@Slf4j public class GetDataRequestHandler { - private static final Logger log = LoggerFactory.getLogger(GetDataRequestHandler.class); - - private static final long TIMEOUT = 120; + private static final long TIMEOUT = 60; /////////////////////////////////////////////////////////////////////////////////////////// @@ -195,7 +192,7 @@ public class GetDataRequestHandler { private void handleFault(String errorMessage, CloseConnectionReason closeConnectionReason, Connection connection) { if (!stopped) { - log.debug(errorMessage + "\n\tcloseConnectionReason=" + closeConnectionReason); + log.info(errorMessage + "\n\tcloseConnectionReason=" + closeConnectionReason); cleanup(); listener.onFault(errorMessage, connection); } else { diff --git a/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataHandler.java index 5f5fed7948..6da2dc165e 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataHandler.java @@ -35,7 +35,7 @@ import static com.google.common.base.Preconditions.checkArgument; @Slf4j class RequestDataHandler implements MessageListener { - private static final long TIMEOUT = 120; + private static final long TIMEOUT = 60; private NodeAddress peersNodeAddress; @@ -142,7 +142,6 @@ class RequestDataHandler implements MessageListener { " failed. That is expected if the peer is offline.\n\t" + "getDataRequest=" + getDataRequest + "." + "\n\tException=" + throwable.getMessage(); - log.debug(errorMessage); handleFault(errorMessage, nodeAddress, CloseConnectionReason.SEND_MSG_FAILURE); } else { log.trace("We have stopped already. We ignore that networkNode.sendMessage.onFailure call. " + @@ -299,6 +298,7 @@ class RequestDataHandler implements MessageListener { @SuppressWarnings("UnusedParameters") private void handleFault(String errorMessage, NodeAddress nodeAddress, CloseConnectionReason closeConnectionReason) { cleanup(); + log.info(errorMessage); //peerManager.shutDownConnection(nodeAddress, closeConnectionReason); peerManager.handleConnectionFault(nodeAddress); listener.onFault(errorMessage, null); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataManager.java b/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataManager.java index 5c0333c478..4749557582 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/getdata/RequestDataManager.java @@ -11,9 +11,8 @@ import io.bisq.network.p2p.peers.getdata.messages.GetDataRequest; import io.bisq.network.p2p.peers.peerexchange.Peer; import io.bisq.network.p2p.seed.SeedNodesRepository; import io.bisq.network.p2p.storage.P2PDataStorage; +import lombok.extern.slf4j.Slf4j; import org.jetbrains.annotations.Nullable; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.util.*; @@ -21,9 +20,8 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkArgument; +@Slf4j public class RequestDataManager implements MessageListener, ConnectionListener, PeerManager.Listener { - private static final Logger log = LoggerFactory.getLogger(RequestDataManager.class); - private static final long RETRY_DELAY_SEC = 10; private static final long CLEANUP_TIMER = 120; private boolean isPreliminaryDataRequest = true; @@ -208,30 +206,30 @@ public class RequestDataManager implements MessageListener, ConnectionListener, final String uid = connection.getUid(); if (!getDataRequestHandlers.containsKey(uid)) { GetDataRequestHandler getDataRequestHandler = new GetDataRequestHandler(networkNode, dataStorage, - new GetDataRequestHandler.Listener() { - @Override - public void onComplete() { - getDataRequestHandlers.remove(uid); - log.trace("requestDataHandshake completed.\n\tConnection={}", connection); - } - - @Override - public void onFault(String errorMessage, @Nullable Connection connection) { - getDataRequestHandlers.remove(uid); - if (!stopped) { - log.trace("GetDataRequestHandler failed.\n\tConnection={}\n\t" + - "ErrorMessage={}", connection, errorMessage); - peerManager.handleConnectionFault(connection); - } else { - log.warn("We have stopped already. We ignore that getDataRequestHandler.handle.onFault call."); + new GetDataRequestHandler.Listener() { + @Override + public void onComplete() { + getDataRequestHandlers.remove(uid); + log.trace("requestDataHandshake completed.\n\tConnection={}", connection); } - } - }); + + @Override + public void onFault(String errorMessage, @Nullable Connection connection) { + getDataRequestHandlers.remove(uid); + if (!stopped) { + log.trace("GetDataRequestHandler failed.\n\tConnection={}\n\t" + + "ErrorMessage={}", connection, errorMessage); + peerManager.handleConnectionFault(connection); + } else { + log.warn("We have stopped already. We ignore that getDataRequestHandler.handle.onFault call."); + } + } + }); getDataRequestHandlers.put(uid, getDataRequestHandler); getDataRequestHandler.handle((GetDataRequest) networkEnvelop, connection); } else { log.warn("We have already a GetDataRequestHandler for that connection started. " + - "We start a cleanup timer if the handler has not closed by itself in between 2 minutes."); + "We start a cleanup timer if the handler has not closed by itself in between 2 minutes."); UserThread.runAfter(() -> { if (getDataRequestHandlers.containsKey(uid)) { @@ -256,68 +254,68 @@ public class RequestDataManager implements MessageListener, ConnectionListener, if (!stopped) { if (!handlerMap.containsKey(nodeAddress)) { RequestDataHandler requestDataHandler = new RequestDataHandler(networkNode, dataStorage, peerManager, - new RequestDataHandler.Listener() { - @Override - public void onComplete() { - log.trace("RequestDataHandshake of outbound connection complete. nodeAddress={}", - nodeAddress); - stopRetryTimer(); + new RequestDataHandler.Listener() { + @Override + public void onComplete() { + log.trace("RequestDataHandshake of outbound connection complete. nodeAddress={}", + nodeAddress); + stopRetryTimer(); - // need to remove before listeners are notified as they cause the update call - handlerMap.remove(nodeAddress); + // need to remove before listeners are notified as they cause the update call + handlerMap.remove(nodeAddress); - // 1. We get a response from requestPreliminaryData - if (!nodeAddressOfPreliminaryDataRequest.isPresent()) { - nodeAddressOfPreliminaryDataRequest = Optional.of(nodeAddress); - listener.onPreliminaryDataReceived(); - } - - // 2. Later we get a response from requestUpdatesData - if (dataUpdateRequested) { - dataUpdateRequested = false; - listener.onUpdatedDataReceived(); - } - - listener.onDataReceived(); - } - - @Override - public void onFault(String errorMessage, @Nullable Connection connection) { - log.trace("requestDataHandshake with outbound connection failed.\n\tnodeAddress={}\n\t" + - "ErrorMessage={}", nodeAddress, errorMessage); - - peerManager.handleConnectionFault(nodeAddress); - handlerMap.remove(nodeAddress); - - if (!remainingNodeAddresses.isEmpty()) { - log.debug("There are remaining nodes available for requesting data. " + - "We will try requestDataFromPeers again."); - NodeAddress nextCandidate = remainingNodeAddresses.get(0); - remainingNodeAddresses.remove(nextCandidate); - requestData(nextCandidate, remainingNodeAddresses); - } else { - log.debug("There is no remaining node available for requesting data. " + - "That is expected if no other node is online.\n\t" + - "We will try to use reported peers (if no available we use persisted peers) " + - "and try again to request data from our seed nodes after a random pause."); - - // Notify listeners + // 1. We get a response from requestPreliminaryData if (!nodeAddressOfPreliminaryDataRequest.isPresent()) { - if (peerManager.isSeedNode(nodeAddress)) - listener.onNoSeedNodeAvailable(); - else - listener.onNoPeersAvailable(); + nodeAddressOfPreliminaryDataRequest = Optional.of(nodeAddress); + listener.onPreliminaryDataReceived(); } - restart(); + // 2. Later we get a response from requestUpdatesData + if (dataUpdateRequested) { + dataUpdateRequested = false; + listener.onUpdatedDataReceived(); + } + + listener.onDataReceived(); } - } - }); + + @Override + public void onFault(String errorMessage, @Nullable Connection connection) { + log.trace("requestDataHandshake with outbound connection failed.\n\tnodeAddress={}\n\t" + + "ErrorMessage={}", nodeAddress, errorMessage); + + peerManager.handleConnectionFault(nodeAddress); + handlerMap.remove(nodeAddress); + + if (!remainingNodeAddresses.isEmpty()) { + log.debug("There are remaining nodes available for requesting data. " + + "We will try requestDataFromPeers again."); + NodeAddress nextCandidate = remainingNodeAddresses.get(0); + remainingNodeAddresses.remove(nextCandidate); + requestData(nextCandidate, remainingNodeAddresses); + } else { + log.debug("There is no remaining node available for requesting data. " + + "That is expected if no other node is online.\n\t" + + "We will try to use reported peers (if no available we use persisted peers) " + + "and try again to request data from our seed nodes after a random pause."); + + // Notify listeners + if (!nodeAddressOfPreliminaryDataRequest.isPresent()) { + if (peerManager.isSeedNode(nodeAddress)) + listener.onNoSeedNodeAvailable(); + else + listener.onNoPeersAvailable(); + } + + restart(); + } + } + }); handlerMap.put(nodeAddress, requestDataHandler); requestDataHandler.requestData(nodeAddress, isPreliminaryDataRequest); } else { log.warn("We have started already a requestDataHandshake to peer. nodeAddress=" + nodeAddress + "\n" + - "We start a cleanup timer if the handler has not closed by itself in between 2 minutes."); + "We start a cleanup timer if the handler has not closed by itself in between 2 minutes."); UserThread.runAfter(() -> { if (handlerMap.containsKey(nodeAddress)) { @@ -341,54 +339,54 @@ public class RequestDataManager implements MessageListener, ConnectionListener, Log.traceCall(); if (retryTimer == null) { retryTimer = UserThread.runAfter(() -> { - log.trace("retryTimer called"); - stopped = false; + log.trace("retryTimer called"); + stopped = false; - stopRetryTimer(); + stopRetryTimer(); - // We create a new list of candidates - // 1. shuffled seedNodes - // 2. reported peers sorted by last activity date - // 3. Add as last persisted peers sorted by last activity date - List list = getFilteredList(new ArrayList<>(seedNodeAddresses), new ArrayList<>()); - Collections.shuffle(list); + // We create a new list of candidates + // 1. shuffled seedNodes + // 2. reported peers sorted by last activity date + // 3. Add as last persisted peers sorted by last activity date + List list = getFilteredList(new ArrayList<>(seedNodeAddresses), new ArrayList<>()); + Collections.shuffle(list); - List filteredReportedPeers = getFilteredNonSeedNodeList(getSortedNodeAddresses(peerManager.getReportedPeers()), list); - list.addAll(filteredReportedPeers); + List filteredReportedPeers = getFilteredNonSeedNodeList(getSortedNodeAddresses(peerManager.getReportedPeers()), list); + list.addAll(filteredReportedPeers); - List filteredPersistedPeers = getFilteredNonSeedNodeList(getSortedNodeAddresses(peerManager.getPersistedPeers()), list); - list.addAll(filteredPersistedPeers); + List filteredPersistedPeers = getFilteredNonSeedNodeList(getSortedNodeAddresses(peerManager.getPersistedPeers()), list); + list.addAll(filteredPersistedPeers); - if (!list.isEmpty()) { - NodeAddress nextCandidate = list.get(0); - list.remove(nextCandidate); - requestData(nextCandidate, list); - } - }, - RETRY_DELAY_SEC); + if (!list.isEmpty()) { + NodeAddress nextCandidate = list.get(0); + list.remove(nextCandidate); + requestData(nextCandidate, list); + } + }, + RETRY_DELAY_SEC); } } private List getSortedNodeAddresses(Collection collection) { return collection.stream() - .collect(Collectors.toList()) - .stream() - .sorted((o1, o2) -> o2.getDate().compareTo(o1.getDate())) - .map(Peer::getNodeAddress) - .collect(Collectors.toList()); + .collect(Collectors.toList()) + .stream() + .sorted((o1, o2) -> o2.getDate().compareTo(o1.getDate())) + .map(Peer::getNodeAddress) + .collect(Collectors.toList()); } private List getFilteredList(Collection collection, List list) { return collection.stream() - .filter(e -> !list.contains(e) && - !peerManager.isSelf(e)) - .collect(Collectors.toList()); + .filter(e -> !list.contains(e) && + !peerManager.isSelf(e)) + .collect(Collectors.toList()); } private List getFilteredNonSeedNodeList(Collection collection, List list) { return getFilteredList(collection, list).stream() - .filter(e -> !peerManager.isSeedNode(e)) - .collect(Collectors.toList()); + .filter(e -> !peerManager.isSeedNode(e)) + .collect(Collectors.toList()); } private void stopRetryTimer() { diff --git a/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveHandler.java index de424a1918..f25482db56 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveHandler.java @@ -101,9 +101,9 @@ class KeepAliveHandler implements MessageListener { String errorMessage = "Sending ping to " + connection + " failed. That is expected if the peer is offline.\n\tping=" + ping + ".\n\tException=" + throwable.getMessage(); - log.debug(errorMessage); cleanup(); //peerManager.shutDownConnection(connection, CloseConnectionReason.SEND_MSG_FAILURE); + log.info(errorMessage); peerManager.handleConnectionFault(connection); listener.onFault(errorMessage); } else { diff --git a/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveManager.java b/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveManager.java index 0c7ac3d85e..52246b9004 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/keepalive/KeepAliveManager.java @@ -95,9 +95,9 @@ public class KeepAliveManager implements MessageListener, ConnectionListener, Pe public void onFailure(@NotNull Throwable throwable) { if (!stopped) { String errorMessage = "Sending pong to " + connection + - " failed. That is expected if the peer is offline. pong=" + pong + "." + + " failed. That is expected if the peer is offline. "+ "Exception: " + throwable.getMessage(); - log.debug(errorMessage); + log.info(errorMessage); peerManager.handleConnectionFault(connection); } else { log.warn("We have stopped already. We ignore that networkNode.sendMessage.onFailure call."); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/GetPeersRequestHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/GetPeersRequestHandler.java index 5421ee476a..80bf69bc16 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/GetPeersRequestHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/GetPeersRequestHandler.java @@ -21,7 +21,8 @@ import static com.google.common.base.Preconditions.checkArgument; @Slf4j class GetPeersRequestHandler { - private static final long TIMEOUT = 120; + // We want to keep timeout short here + private static final long TIMEOUT = 40; /////////////////////////////////////////////////////////////////////////////////////////// @@ -103,7 +104,7 @@ class GetPeersRequestHandler { String errorMessage = "Sending getPeersResponse to " + connection + " failed. That is expected if the peer is offline. getPeersResponse=" + getPeersResponse + "." + "Exception: " + throwable.getMessage(); - log.debug(errorMessage); + log.info(errorMessage); handleFault(errorMessage, CloseConnectionReason.SEND_MSG_FAILURE, connection); } else { log.trace("We have stopped already. We ignore that networkNode.sendMessage.onFailure call."); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java index 849d61fedd..893a246739 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java @@ -21,10 +21,12 @@ import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; import java.util.Random; import java.util.concurrent.TimeUnit; + @Slf4j class PeerExchangeHandler implements MessageListener { - private static final long TIMEOUT = 120; - private static final int DELAY_MS = 1000; + // We want to keep timeout short here + private static final long TIMEOUT = 40; + private static final int DELAY_MS = 500; /////////////////////////////////////////////////////////////////////////////////////////// @@ -82,14 +84,12 @@ class PeerExchangeHandler implements MessageListener { if (!stopped) { if (networkNode.getNodeAddress() != null) { GetPeersRequest getPeersRequest = new GetPeersRequest(networkNode.getNodeAddress(), nonce, peerManager.getConnectedNonSeedNodeReportedPeers(nodeAddress)); - if (timeoutTimer == null) { timeoutTimer = UserThread.runAfter(() -> { // setup before sending to avoid race conditions if (!stopped) { String errorMessage = "A timeout occurred at sending getPeersRequest:" + getPeersRequest + " for nodeAddress:" + nodeAddress; log.debug(errorMessage + " / PeerExchangeHandler=" + PeerExchangeHandler.this); - log.debug("timeoutTimer called on " + this); handleFault(errorMessage, CloseConnectionReason.SEND_MSG_TIMEOUT, nodeAddress); } else { log.trace("We have stopped that handler already. We ignore that timeoutTimer.run call."); @@ -121,9 +121,7 @@ class PeerExchangeHandler implements MessageListener { public void onFailure(@NotNull Throwable throwable) { if (!stopped) { String errorMessage = "Sending getPeersRequest to " + nodeAddress + - " failed. That is expected if the peer is offline.\n\tgetPeersRequest=" + getPeersRequest + - ".\n\tException=" + throwable.getMessage(); - log.debug(errorMessage); + " failed. That is expected if the peer is offline. Exception=" + throwable.getMessage(); handleFault(errorMessage, CloseConnectionReason.SEND_MSG_FAILURE, nodeAddress); } else { log.trace("We have stopped that handler already. We ignore that sendGetPeersRequest.onFailure call."); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java index 00ef30f173..8aeee4968b 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java @@ -24,7 +24,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, private static final long RETRY_DELAY_SEC = 10; private static final long RETRY_DELAY_AFTER_ALL_CON_LOST_SEC = 3; - private static final long REQUEST_PERIODICALLY_INTERVAL_SEC = 10 * 60; + private static final long REQUEST_PERIODICALLY_INTERVAL_MIN = 10; private final NetworkNode networkNode; private final PeerManager peerManager; @@ -81,6 +81,19 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, startPeriodicTimer(); } + public void initialRequestPeersFromReportedOrPersistedPeers() { + if (!peerManager.getReportedPeers().isEmpty() || !peerManager.getPersistedPeers().isEmpty()) { + // We will likely get more connections as the GetPeersResponse onComplete handler triggers a new request if the confirmed + // connections have not reached the min connection target. + // So we potentially request 2 times 8 but we prefer to get fast connected + // and disconnect afterwards when we exceed max connections rather to delay connection in case many of our peers from the list are dead. + for (int i = 0; i < Math.min(8, peerManager.getMaxConnections()); i++) + requestWithAvailablePeers(); + } else { + log.info("We don't have any reported or persisted peers, so we need to wait until we receive from the seed node the initial peer list."); + } + } + /////////////////////////////////////////////////////////////////////////////////////////// // ConnectionListener implementation @@ -158,20 +171,20 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, connection.setPeerType(Connection.PeerType.SEED_NODE); GetPeersRequestHandler getPeersRequestHandler = new GetPeersRequestHandler(networkNode, - peerManager, - new GetPeersRequestHandler.Listener() { - @Override - public void onComplete() { - log.trace("PeerExchangeHandshake completed.\n\tConnection={}", connection); - } + peerManager, + new GetPeersRequestHandler.Listener() { + @Override + public void onComplete() { + log.trace("PeerExchangeHandshake completed.\n\tConnection={}", connection); + } - @Override - public void onFault(String errorMessage, Connection connection) { - log.trace("PeerExchangeHandshake failed.\n\terrorMessage={}\n\t" + - "connection={}", errorMessage, connection); - peerManager.handleConnectionFault(connection); - } - }); + @Override + public void onFault(String errorMessage, Connection connection) { + log.trace("PeerExchangeHandshake failed.\n\terrorMessage={}\n\t" + + "connection={}", errorMessage, connection); + peerManager.handleConnectionFault(connection); + } + }); getPeersRequestHandler.handle((GetPeersRequest) networkEnvelop, connection); } else { log.warn("We have stopped already. We ignore that onMessage call."); @@ -189,56 +202,55 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, if (!stopped) { if (!handlerMap.containsKey(nodeAddress)) { PeerExchangeHandler peerExchangeHandler = new PeerExchangeHandler(networkNode, - peerManager, - new PeerExchangeHandler.Listener() { - @Override - public void onComplete() { - log.trace("PeerExchangeHandshake of outbound connection complete. nodeAddress={}", nodeAddress); - handlerMap.remove(nodeAddress); - requestWithAvailablePeers(); - } - - @Override - public void onFault(String errorMessage, @Nullable Connection connection) { - log.trace("PeerExchangeHandshake of outbound connection failed.\n\terrorMessage={}\n\t" + - "nodeAddress={}", errorMessage, nodeAddress); - - peerManager.handleConnectionFault(nodeAddress); - handlerMap.remove(nodeAddress); - if (!remainingNodeAddresses.isEmpty()) { - if (!peerManager.hasSufficientConnections()) { - log.debug("There are remaining nodes available for requesting peers. " + - "We will try getReportedPeers again."); - NodeAddress nextCandidate = remainingNodeAddresses.get(new Random().nextInt(remainingNodeAddresses.size())); - remainingNodeAddresses.remove(nextCandidate); - requestReportedPeers(nextCandidate, remainingNodeAddresses); - } else { - // That path will rarely be reached - log.debug("We have already sufficient connections."); - } - } else { - log.debug("There is no remaining node available for requesting peers. " + - "That is expected if no other node is online.\n\t" + - "We will try again after a pause."); - if (retryTimer == null) - retryTimer = UserThread.runAfter(() -> { - if (!stopped) { - log.trace("retryTimer called from requestReportedPeers code path"); - stopRetryTimer(); - requestWithAvailablePeers(); - } else { - stopRetryTimer(); - log.warn("We have stopped already. We ignore that retryTimer.run call."); - } - }, RETRY_DELAY_SEC); + peerManager, + new PeerExchangeHandler.Listener() { + @Override + public void onComplete() { + handlerMap.remove(nodeAddress); + requestWithAvailablePeers(); } - } - }); + + @Override + public void onFault(String errorMessage, @Nullable Connection connection) { + log.info("PeerExchangeHandshake of outbound connection failed.\n\terrorMessage={}\n\t" + + "nodeAddress={}", errorMessage, nodeAddress); + + peerManager.handleConnectionFault(nodeAddress); + handlerMap.remove(nodeAddress); + if (!remainingNodeAddresses.isEmpty()) { + if (!peerManager.hasSufficientConnections()) { + log.debug("There are remaining nodes available for requesting peers. " + + "We will try getReportedPeers again."); + NodeAddress nextCandidate = remainingNodeAddresses.get(new Random().nextInt(remainingNodeAddresses.size())); + remainingNodeAddresses.remove(nextCandidate); + requestReportedPeers(nextCandidate, remainingNodeAddresses); + } else { + // That path will rarely be reached + log.debug("We have already sufficient connections."); + } + } else { + log.debug("There is no remaining node available for requesting peers. " + + "That is expected if no other node is online.\n\t" + + "We will try again after a pause."); + if (retryTimer == null) + retryTimer = UserThread.runAfter(() -> { + if (!stopped) { + log.trace("retryTimer called from requestReportedPeers code path"); + stopRetryTimer(); + requestWithAvailablePeers(); + } else { + stopRetryTimer(); + log.warn("We have stopped already. We ignore that retryTimer.run call."); + } + }, RETRY_DELAY_SEC); + } + } + }); handlerMap.put(nodeAddress, peerExchangeHandler); peerExchangeHandler.sendGetPeersRequestAfterRandomDelay(nodeAddress); } else { log.trace("We have started already a peerExchangeHandler. " + - "We ignore that call. nodeAddress=" + nodeAddress); + "We ignore that call. nodeAddress=" + nodeAddress); } } else { log.trace("We have stopped already. We ignore that requestReportedPeers call."); @@ -302,7 +314,7 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, stopped = false; if (periodicTimer == null) periodicTimer = UserThread.runPeriodically(this::requestWithAvailablePeers, - REQUEST_PERIODICALLY_INTERVAL_SEC, TimeUnit.SECONDS); + REQUEST_PERIODICALLY_INTERVAL_MIN, TimeUnit.MINUTES); } private void restart() { @@ -322,22 +334,22 @@ public class PeerExchangeManager implements MessageListener, ConnectionListener, private List getNodeAddresses(Collection collection) { return collection.stream() - .map(Peer::getNodeAddress) - .collect(Collectors.toList()); + .map(Peer::getNodeAddress) + .collect(Collectors.toList()); } private List getFilteredList(Collection collection, List list) { return collection.stream() - .filter(e -> !list.contains(e) && - !peerManager.isSelf(e) && - !peerManager.isConfirmed(e)) - .collect(Collectors.toList()); + .filter(e -> !list.contains(e) && + !peerManager.isSelf(e) && + !peerManager.isConfirmed(e)) + .collect(Collectors.toList()); } private List getFilteredNonSeedNodeList(Collection collection, List list) { return getFilteredList(collection, list).stream() - .filter(e -> !peerManager.isSeedNode(e)) - .collect(Collectors.toList()); + .filter(e -> !peerManager.isSeedNode(e)) + .collect(Collectors.toList()); } private void stopPeriodicTimer() { From 022f4c068e4923257eb5302aef15ab27e5e200bb Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 19:48:38 +0100 Subject: [PATCH 28/32] Improve logging --- .../main/java/io/bisq/network/p2p/peers/PeerManager.java | 2 +- .../network/p2p/peers/peerexchange/PeerExchangeHandler.java | 5 ++--- .../network/p2p/peers/peerexchange/PeerExchangeManager.java | 6 ++---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java b/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java index 4e85d14737..a129bc4e8e 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/PeerManager.java @@ -448,7 +448,7 @@ public class PeerManager implements ConnectionListener, PersistedDataHost { result.append("\n------------------------------------------------------------\n"); log.debug(result.toString()); } - log.debug("Number of collected reported peers: {}", reportedPeers.size()); + log.info("Number of reported peers: {}", reportedPeers.size()); } } diff --git a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java index 893a246739..2e8d7960db 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeHandler.java @@ -81,15 +81,14 @@ class PeerExchangeHandler implements MessageListener { private void sendGetPeersRequest(NodeAddress nodeAddress) { Log.traceCall("nodeAddress=" + nodeAddress + " / this=" + this); + log.info("sendGetPeersRequest to nodeAddress={}", nodeAddress); if (!stopped) { if (networkNode.getNodeAddress() != null) { GetPeersRequest getPeersRequest = new GetPeersRequest(networkNode.getNodeAddress(), nonce, peerManager.getConnectedNonSeedNodeReportedPeers(nodeAddress)); if (timeoutTimer == null) { timeoutTimer = UserThread.runAfter(() -> { // setup before sending to avoid race conditions if (!stopped) { - String errorMessage = "A timeout occurred at sending getPeersRequest:" + getPeersRequest + " for nodeAddress:" + nodeAddress; - log.debug(errorMessage + " / PeerExchangeHandler=" + - PeerExchangeHandler.this); + String errorMessage = "A timeout occurred at sending getPeersRequest. nodeAddress=" + nodeAddress; handleFault(errorMessage, CloseConnectionReason.SEND_MSG_TIMEOUT, nodeAddress); } else { log.trace("We have stopped that handler already. We ignore that timeoutTimer.run call."); diff --git a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java index 8aeee4968b..4f7dab452a 100644 --- a/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java +++ b/network/src/main/java/io/bisq/network/p2p/peers/peerexchange/PeerExchangeManager.java @@ -10,8 +10,7 @@ import io.bisq.network.p2p.network.*; import io.bisq.network.p2p.peers.PeerManager; import io.bisq.network.p2p.peers.peerexchange.messages.GetPeersRequest; import io.bisq.network.p2p.seed.SeedNodesRepository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import javax.annotation.Nullable; import javax.inject.Inject; @@ -19,9 +18,8 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +@Slf4j public class PeerExchangeManager implements MessageListener, ConnectionListener, PeerManager.Listener { - private static final Logger log = LoggerFactory.getLogger(PeerExchangeManager.class); - private static final long RETRY_DELAY_SEC = 10; private static final long RETRY_DELAY_AFTER_ALL_CON_LOST_SEC = 3; private static final long REQUEST_PERIODICALLY_INTERVAL_MIN = 10; From cf634e2dd09e829a3172315981c4df9735c24120 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 19:53:28 +0100 Subject: [PATCH 29/32] 0.6.2 release candidate --- common/src/main/java/io/bisq/common/app/Version.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/io/bisq/common/app/Version.java b/common/src/main/java/io/bisq/common/app/Version.java index 7e53fdb0be..fbf0470eda 100644 --- a/common/src/main/java/io/bisq/common/app/Version.java +++ b/common/src/main/java/io/bisq/common/app/Version.java @@ -17,14 +17,12 @@ package io.bisq.common.app; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import static com.google.common.base.Preconditions.checkArgument; +@Slf4j public class Version { - private static final Logger log = LoggerFactory.getLogger(Version.class); - // The application versions // VERSION = 0.5.0 introduces proto buffer for the P2P network and local DB and is a not backward compatible update // Therefore all sub versions start again with 1 From 3983245846b16e9f1febfe2e8db19bd11d9810ed Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 20:53:30 +0100 Subject: [PATCH 30/32] Fix windows build issues --- .../core/provider/ProvidersRepository.java | 2 +- package/win/64bit/Bisq-setup-icon.bmp | Bin 9800 -> 0 bytes package/win/64bit/Bisq.ico | Bin 37998 -> 0 bytes package/win/64bit/Bisq.iss | 74 ------------------ package/{win/32bit => windows}/32bitBuild.bat | 0 package/{win/64bit => windows}/64bitBuild.bat | 0 .../32bit => windows}/Bisq-setup-icon.bmp | Bin package/{win/32bit => windows}/Bisq.ico | Bin package/{win/32bit => windows}/Bisq.iss | 2 +- 9 files changed, 2 insertions(+), 76 deletions(-) delete mode 100644 package/win/64bit/Bisq-setup-icon.bmp delete mode 100644 package/win/64bit/Bisq.ico delete mode 100755 package/win/64bit/Bisq.iss rename package/{win/32bit => windows}/32bitBuild.bat (100%) rename package/{win/64bit => windows}/64bitBuild.bat (100%) rename package/{win/32bit => windows}/Bisq-setup-icon.bmp (100%) rename package/{win/32bit => windows}/Bisq.ico (100%) rename package/{win/32bit => windows}/Bisq.iss (96%) diff --git a/core/src/main/java/io/bisq/core/provider/ProvidersRepository.java b/core/src/main/java/io/bisq/core/provider/ProvidersRepository.java index 58bee024fc..6212b09afe 100644 --- a/core/src/main/java/io/bisq/core/provider/ProvidersRepository.java +++ b/core/src/main/java/io/bisq/core/provider/ProvidersRepository.java @@ -37,7 +37,7 @@ public class ProvidersRepository { "http://ceaanhbvluug4we6.onion/, " +// @miker "http://44mgyoe2b6oqiytt.onion/, " +// @manfredkarrer "http://5bmpx76qllutpcyp.onion/, " +// @manfredkarrer - "http://rb2l2qale2pqzjyo.onion/"; // @sqrrm + "http://rb2l2qale2pqzjyo.onion/"; // @manfredkarrer private final String providersFromProgramArgs; private final boolean useLocalhostForP2P; diff --git a/package/win/64bit/Bisq-setup-icon.bmp b/package/win/64bit/Bisq-setup-icon.bmp deleted file mode 100644 index b78242dec35a1254259457bd886b49d7bdebc43d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9800 zcmeHM30PEB6n=m#$}+O4fPxsJ?)Q2Fvrkr^?|bt&@4R!*`QN!`x%Uw=CCr~` zJ)Xd|KYqjUdlEkjrU$MJ9tp@3SENW|y!fi@{ADLy_P-Y6|Cy?OJd2B^)=%~Gip!Z|rP z5U#JU*DS9=mA;SQpN58pva&MxBq1RoD=X{TwQKDvX=-XZ)q236?F#&3%$k}Scoqo?CB?;p>@2Ay|JjLQwk(jn?42c| zJT?-9Ze3j+n`0{ac-*l-A3qny+Jo11&sSfSm#b=Ot~Auw*Ic=RP*ljIIaz$1a+!3~ zns+!FU9f+EW1Dpl!F>Zb{>&5R78WR%FIZ^PCPqMZv+69* zm#7=XyW>#j8^(dEb7#-QA34(9#@?CfL`)-#M?DrK%@@n0`I3CGR3gsL6P-v(oIUM% zC&mf^OvK3bmFY7LGp+lmmX>C?NG_FZ+4LS~DqSsYF~3toCx(v?4IdXeCh&33EQxjO6hM+7sMxVF`<$(;UD_sH9gGGJN?E(+3}7CLJ^0*&u%Z12gojSp z9UUze3E3&Ekjv&yn@%&GLh9@4@nZNhuSYBn8!-l%LiubW*e?J{Z2%F?vuCRwG8? zYa9Ihq{(c}XvYz==E$THGVe--eC4vp*7kRQ-H5YaH!oTV&y}1R-hYsrh3&j)Gbo+| zyY>w5^g$R5>o-s#k+#_}>M#G7U)dlX8H;`%y-ua23Ukp?_^3voZQI7P?8Kh&w_Wt_ySVExpA$PV$MY-8_X7}jO z;1MWRIDXt8J9EmjG11>p09a!zcyUgiAeVAXMWmfbVS%(kZ44VZwy3B;sg(17`!!TPA~#wge=J$HWH8>`?w8mM5#A37W{W7hV~A7avt$3`{O*VUo=v2nUFHcpHM z>JkuQEyR9A>B#vDsRj*1*@cTgfA>AoUxSQ}kIKtbo_0q~67{c%TnX?_a;_T^?r$&t@!V724?MO^t{_>X>Pyo6UM}Is- z4dG>XZ2frF)aN$7^-kiEIIP&I9ux#BW+ahxG@h!}oj}JSc3Ya8p9z^n2EvUf0*DH7 z3&5O;Y7A5)CZb4pghUdXI1-{LN`w)EBNUhs%81{TN_hGEb;YUj4?oE~HV zLJR>&K_*|TIl}}H{Dz_8jPiH$%t%c)41?BDaX ziJ0tRZI9KO1~D@|LU-%lsSAOM|1q^|-s83aK`T0w`yr5 cHV!KmE{*qCmX%IO8@`> diff --git a/package/win/64bit/Bisq.ico b/package/win/64bit/Bisq.ico deleted file mode 100644 index 803352295563a2975b49c36056fa667a1504252a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37998 zcmdRX2Ut}}67B^7K{6;oa#qPvL^3FX7!Z-5WCTL1gD4aR3L8a2f&xcIlqnVpbq$3= zQBnQ$+Yb+gDh1aV8Griy0z7w?2!-O~`^RrK6l#thyZ{P(zxxsj^;jN-ItG4&N5Pe! zu7d*#1?u@_iHwZIuB@!o{rvfJ+u-2f`ta~DGBPsqs|4?XXEr)JJKL+PtM#LzqOd=G z`lK@h%I@wi@_Wnr+8Q!CIywv9)t{fAZ{FM6`@OFsUq;7}TRQs4eP=ghdV0ETdwYB3 zw_b+zmK7EwA4*D*#l=Nr1n_TWV1yh$N{7^Zs6+tI>)@H+Y<#eP01;w4j$BbtL<-*K zB0er|$k9VYh@*uy@{ia4>0QWQPiGf0KK>Pn3=T$)VB;dZ46KM0pD;ps5FcSZLWMMc zZ1`1{$G?0<6i-Vb+E>(&cX@e;obV~+qO?4cmG%-zPkxTvxTK1>+1evpTU)>Seq=x} zLV=Bk+%>$3TvNJ$Fc6U=&z{7g`wIKp{;3s#WB+Rf&fiTfZG;4M0HHlZjF4eqBS&!w zk#}$2BHyN_kf!>Nh@YD$0(tzc5)&4QkfU%AG8Fdr<6VQBXr5m_OF`~~@mpD5{-@X1 zR@aa>8Ci&#o)K~c2Nxj)Jit1LQJCntg7@Hf|3<&}qC+DP?aNmYc(lEB7ZG9SL|Diu zkuxG$OKtjSp4z1-#Y&UZrm6f8J+fWa7GNSX(H~n4oFwW=ihq%$Lo+e zT|iiXuJ7#ZG_S9%uL6GlNhZPl{Q~c;0%`%I4G8;}`rwcLhI$65DilyhX#InJALy)K zmZYR4RA68rW=>9yL~(I(T1`#ONMmE;MssuXUQ0_0@_PtA3*Q0nj)FQ~g1V$bLP9WM z-JoC;6%}a$-82St3bMJm3D-B8pzQn}+J7FtyRfi;bai!o1$Am)ym%1ZrH}lrKP2TKV0`OR3qfC zv!esKBzG18TM(k5dF??N{?5NTfjXuN=$@|6pOK-#0l;ema>u|B%_G#oC#dO>6Gs^k5{v`rYfwMCSlj+9 zo%X%CRlw^lZGD6i8y_*!x`7^pm(QOgoHPsw6%IaPcgF%Lc%2J$WDaugwmDkgbJH>* zZOu?U{QHuV{tBVSB|whi5h0-u{gJ|geB^?R9C{D2yJLGzsr_r%U{Nrdu>w*e$ii;P$*Z!=cfAIs>0qgp) zZg>v&PZ`0Jh>w#i*aJ_a_oa-~7s%t_(BCCDb2GC@U1c?Te4*_8vi_giz(U(baDHLg z19}mT)xRr^b@hmnxHQ6krUj8HJ zBjDkrC13-qo>fAm1%!coXQFj4wCUj3=w7*oEdPpa_B$I%1J8*88v5MU4)&eP$Z;w< z^jJe%%-6*o`8GNAJFEJq$40>wNkAw-YJf&omRHbo3uOt~qrXR=fcJi_z`8X7VE}^l z!{aGH&j7*w68aWUsDIDi0H1-+!gt`iDS%D`!UTl!0M^mpQ9MAUux@CFF#?hX1pPpC zfezrWlvl4_q4M(bP??#TjKGF+1m_ing@xm#rKRg-Wo5hN<>knKLhxNs#|Eft0@V2d z)a?S=VE*vo0}8eY3;2zSiHX4g_msf%jlf>pnVg(N`)5$T*VosPjg5`}h~T?xz`udM z9;_4CZ?G>dpskAu2?-b(85t~YQ}g#0xTb(@I|rzMs0%MYInF?53TM zA3wT$`SPXcCv)pJUjCDpq3vE#T8fKfPeYV4)7mf=wo#)T8C?1xQrg- z$%%1fY;*+a{M>v_ z(;tO|pl!;Us!H@RE-DJ(8`S8%{Kx@ZBne;-KNisT?mukpA20u|bLf|s6&E8MRJ7>& zsSgq&ArBuSB}IkE`}{m4_R%A>{RHg@XcI~D3L+EZ#Z1$ZvR${@ZAu|6IK7G$u$|Bp2L{aNU* z^U$;WtiSv1?jPaWgYCdEuPiM`V-&Xm79HgC03pZ1L9{NZAe$ST-|PG%Cp%!DHo2~g zmht`eetCp)0QJm6cP~T&=r?64Ib>vT2-yHK2iM~-{f6J$KE!0lzkER+1%&|phW9V$ z0P+NNfV{{lq_?a4dlOK1{Ly_KVku8!Vi9FYS%e$tGUyYMWB%M%{^c0JeN7zf?VlQ( zzPJ4cPtf`w+6f+Zj%a+Ig`5(NyF3Gl^4koxKxU?Z%e?F5LKB*nx5-2V*1N=AjoC1?+kAi``X(ELJ~{}W{w zyo)w^AvOT}^&% z{mTe+&;HT^4TATu#+a}Ov>Zbj*x80|+fN0`Fx=M^#iWq)5;6$HLjJ;14(hT7v<>I^ z6ell2gHMDwS=b3*fNB9DPzI&=gwU}b zsC%Kk3U$BeaUS&E`lF7A&;Q8+0T(7fC_rZbjR8W(^PVR>McnT>ATS2htV zQ?P;`|E9co^9BXz03goSuU}gLpB~14TEY1gpfy0-;NBh}e9cg>(CB? z^Z)MMyFu6oC@XN>!I(q2p?m-SeGQ1;{bAecFJtg`R0MVP81RLFOf_X^XEQ_I4Gau0 zKtH^o?ES^M{C9BlpFINQ3CK!dY-}th!09-^TIu;;%K2~g0?ILro4Nq|0Ag(Zp5ADj z2ij)<=NkfY!&6pPW&+Z3wtlOQ|HXAE2Qc3GB=Ql6Y101#FZc9t3EH-pQgbYng2VP9~m4%2=6@fLfS3Tpf@`a*ej0OdggGC@@82UAWaYohJbWHv2)e4*eiN$$ZNT!Uo!wt{ z9*#T2q~UlnlTv(_1&F6efn0(7++3s#;Jl^9MMxo-i)RV(h? zwtrLpQvRWx0`pTK7VTth^G_HN%%6Z*C7c&YK0)Ns7a zH~jzU+h7g>9=Cx&ETQewC$wz9v6VY1_FZ=Nd4uCh4B|yFW(0YJvJS89-`_t%%pxT| z@lW&iYZVLt8$CHL0SWU9K(bz@qjRmG?t?N7*CRTIDL4c@|3C5u`K1AQsZf{0y$I%S zLYdmBrb!Noge!N>xLNRUtM5aOY5Qv+8)^-D=Hw*KgPFUKfGOB z5qKRw1NoxHB}5zm9z8iefsRKcfIOaXkpH;_)(Xr^fVrqJUl`)nFkenqNED52{MG!Y zr=+6uu=d9aj<2ME5b_@6V?o)0a+92xfN;?)4ZQr9mYL~kFxOJw*CXr$)NjFlerUcS@9C+}5pf>=@4Q3# zf|&8#>@3YK;vKg{6z!=AymMofccSsr_Ty=lrPH2e;<3u z8;on3>gpqbzP^Y$$nRt%{wZH_zkmD3ry%wQZDJTNydr-N9h2MVALg2?DV#_539hZb ztF!@|`=^-M&-F9~)**BZ{I_)YPvh^4W()4gFn$8}iv0r5;kfUCRB9+=uhTQo`G5QO z|EeR@nQ(mf*X{n;{<|a8Coscp*{F} z_}+g8&KE5{$@ka=jQNFvct6Jx8gv{y+&>VV7YyeKlChTdznrT-)1kLnIp`SCK5xJG z2=@ptM`v`?&tl`zaR>?=Jan!ejA286R)R+Wfw=`QlVK{`-&5e;Db6kMGadAM`T%7} zi1j!E^(V{;fcX$GhVWy|q8{X9LOuICzT@~)orB-xKz@D?-#10{O;^PzYfYW z7;{MHxRyD*0c`rC5CqR8y@ zzx{^uhi3nhQy3Vv0K^KYbH7Fy-=M`OMz3KyFt++vHIVp6QRsY!2>&4T_difC!Zi-( z3F2pP{r(Ti0BDmF5DJhhAgD{xd2KMy6OKQ`$soZ!3$6*M*CB2O34RZzt#TD@%ft8n z2L(EI=v)hMqz3fe@qyo4LEQ8zz%yWO6|{Mveuus`{9Z-l{3Rq4=qG4r{ErIEN1+D< z$9|uL!FfBN?*)Dv*V534WP@*;VBRF`6Z}5yN89)N!~eaL9?+CHAT-}F2)}<0j<63f z$n=+D(xAS-qCokEy8bkv@4WBlLF``xM<`2hJ#+y=>m_jfUlte~?FHloh!)U4@xI@O zALasniv;x&)UEM=V84d|L0bdbOVI9sbA(>=;P__>tOM2s>x6Z~HiiK~8BYXc42T^N z|6m_|1mji?e}i!x zhDR{2`{TSn?hh|tR3JQb^boj9sCZ8P%1?uhfx^WBS8iCpFh-#+B`V6xTy^N3jlbza z+tpK$9iyqk-|$A`aZC^Y{g@aUv)+^oZ9>XQZEsyw&&8%jrV=P7N>`fJ+LbFdHa_My z?p$h&Td!0Kj-z_pmUZp%c<+$b(p+<6OtJ)s(3~T{@F5u}dxCMjtDUIofR!{^C_$B7 z34PzH&ieLikGyGzgHKTxrRTO@uDm(cnRSOoJ{UDT_toS~mx)^Wfej3X;aR6la?^ua zMQ-``T${0l>?QgN2kloyJBe`>!=GtW?v6(ndS?r-XfP5|;eA2%l;biUI5+Dg6|Cod z(q7^M7ENCNy?N`m^Ywa{8Bry*mmWR+goP`zW%tzkDPsqwur&5%qN{ehWtr2twC6wY zy*S_dd6s|It-vsId>LZ`SWjE0Kf@X?A^*@Ks{XE5{cN!Z($bP}0*Ym(ro z)jO>$PtR?P;tS9to~PydD#SN=K*vkfXSMu_9$pSHE&&dc-)+3YqowzUL-$;U3G`?ym`Xe= zF0-H_F&HqjQMzO|`~rJlFrHAKy}fbGt8$yuBiDl~FsYfP`_FhUOWF%>hDmhy5&0U->w@#Zqc}v>Q}i^7iH#=D8p^t&_q0G0LKbaja}?q2b}mPG^s@oHZh&p$zzZn|ks(A0IAd6Bgm@ z9?oP^FqZ6=ZAgvOlcz67Ju=tsJUMG9M}9hg-e9bT+idXNBME1vmsuG}d6{$t4M8pQ zataCy7lb22`5O+|715=&D;iwE)YOa#Ji%kI=3=#VVf{%fjK0-Rc`SdTlNgrA&A zC-YD%xPyzwWW0U+?nTJrrl;R_n4cwfTwb-;EU;q<3cB#3(7$69cY4*y&x;ELpK8Jr z6B~B!+nkzRiHH_95qpS-clHLecSSQzd6TrZ2KLk1Pl)w!fwTdu60gtG!otS|Lk=O7 zd%FVDo#s`u_Y_iE8D7(B6Dx+FyQpL^-gqm{W{^70VTsw=I#=azWlXEy0NP7(2_+4@l3vm9o$>!w6QF8-ZGf*dXl# z-ZC-=Dn2b1Nr=LRKDVSEsDM(VnZn$b#7svoT8+7605aQ zPhK{hd2)~@Jcz;Tv7dl|^V;0kJ!d6{FP;o4Dmv7&2Gj%=sRt%1WLUNjxX7WLSm)o- z;x-s{POmP`2(~QFyCV$gsb{LfFU>odnjUmRz6tM^zZ&%*wfqtqcFSUZn79nVFBo#- zr8#L9Jh@6h5L`~$w{%j=APS|-VtOvLedrZF(?*xnUc-QtgJ0@6#TP!|J-uYgXd~>R zrn6V9$&Medui~g8rKAkta({l;ydXBe)2_Gg^owkZr^(6W?&Tpownkt4g3cCZ;-y_m z{7@M(&`_Ti=TUEzfloyss^i7}0rBzf!X(-nU-w&B7G1b3npJF7X`EHEM3HaaNB{V< z8y%fyxT2DhQU3;iWBkd0louECj;vmhm#cMN1j+{2YnI`Ng^cUDo+owPqn@9?c3DNmGyRtS5lp)Hw~<%f9ER36*X*-uNBG`6r6D+0#%S7} zd@rE93%eY1C+z8zMcIp&Szin9ls2?IZ`khl!@|t%slwyn8eJT&DFG!K0gniEOKa<9GB7famkqUyU+CND8q)ppHA*Kf zKa0ogqLP?cvj3sY+A^drP*XoIM}$w5Y_`0*{NMm4W2Hm~f6chJ_kpz1JGil7@$*HZ}2Db~mXno}M)_6QL1vDr@0pQPnC;EEsfQ zxX_NXGf3deZH1NTO#F5;JEUoX#CCUztj$<~R%X9-!)m`PGFzq4)6i_3 zYqb@_v7A;WE>};!u6k92gyK4;T9-zVlf>Q3yDBA8-uks>UZnRuy|Eb|^EvFiA21(u z8k6Wf-Mh_-^3SmB`ATWsvTILpg0e5L(YDmRmRo#%!bEiSEjfQ|(=LVQR~-sRH}8MMijtc~iVtV06QZFRZ zt_l-*>(^tI6X{;S$neph&VK&>5qE4s(t~a)EH5BES;bpq;o&S~mZHqj%IwXO>$Yy& zwYoW$tyU#OG+D{28qqC|lySE$vmh&g!U8^XLzN5{1&?H=BfAXZ9Q1? zoV`cL1;SbRotp{VmWvXtzTM*RtRhu7ASPC?sJJsc*B32z&-!hE1)q35)|+8YjC0d& zNm4W2uVZU!QbQjg?A29P_!9&l@0Se<*!7#b?X85o+X!E_>Yg34l$zUj(JR0B#cp4_1xVU{_rn?kBv4tTVg^PuUx7e58i6d${II| zXpK6%t6@-LTQ=W}9M{_V4YhEc`kwRo+qVy$9CYEP)N$cadn7C*BBGzCRabY8!$#hB z1ZBjhQFl;z05kLgpY^#!JS@zP&JJvEJs(lbx{n`O**3fB_T1?-A1hwG$n1za5K$3o z$f_5GC$i(#f*injG(P?~w4l<+NFY~$@A`*{!8>|-mRAK(50ot>LtByMhjKV{;z!@G zMnp&JnLVJUBH*f*ey02h=jjlI$8JSkrimWka24ipfeLOzW9=XlmRs2n_$yD|p4FHs_0ld~?pya2`AI1m3WFynud06@T|f9tn+aIsc!HrF z5}1<(YW~#*?1F+4UpCw^W$xW0%(|%lmb0o{Pc-Qh8w$@y29t?vq&Y**me*n*jkey8Zb}U`!(e4S`i-XNwd+qcydxzS!9Y<-I331& zh{r_7!Zfn>Zqs4Y#6e=vRNc?B!jid0-trI$1#jF36>OuMH?OGDXvs5r>U}lQePeRz zI63>;X|4)>PZCTuwZ-k-4Hvh59%AzX8Zcw(p4eCy(+(631Xqrf8weY|*5ISd85ZH2 zq~vG!DnjYMt^%X~%)yrQPNzBUlqhvfTS*09k6~?)47Gvz8(CZzNh$6o?yJ|Xspgl( zee}P*HqV=u{^m*W8j+Z`d4HBU#>SzvcF%zk#+oTcNv4FE87}K(o4TeZ_LID^q?$2R zwbl9pG|%)%1c=Bhj!SD`l~397-Q6W(Q4>xv+)Yo6(s6l|+j1&?k$j6TR_NPg z;l(@WX-?bE7`NAOXK3eoYM-`O)zp-;Q5DolB);(Z)8tx$_)fIq%7%K_VP${3w00S# z+X9=L@0H_(5~c*x`1D5|te4*qhRAsj8btY!Sdb`F9;T4obYN50c486EyT^18C+tW} zU#Yubh}0&DopYHgIgw}~kLjJehSQyNE~VB-8XmhfuH8L-%gnTDVm+B9^yv__Zy~nK z3JEq)Ds^#T%88OO5f@J-^w^k$#>d}eWfB%8dmc_=aNJV%U2}IwM`ND);D_yb-l>QS z(qMsHl3FGQmgbIOje@kAn$r55N&SNc&80no&g{N(+O7vMgr)6U=pViv)6Fh2SD&Fu zivY9Cbwe~nu;o-xj9?n@N&1igDgxmXY)n-Xw$JeoQMT-Dh4kCoBCWb~F{8qVNWalY*hl<4$&w*ZqJH7WNuyU=qtGo_(H@^2P4M3{hMt z)up?4>2x!0v~zGU;63#BSIWQJb5TVFgC$piz<)~m`W+euUL;U=chr7o$)sheVw<7$ zQ#bB2WO?gct2R$aS3~e@kw&2r_V(Hw2OC>VV51O=#O6W`Cmz!p>i&r2a%#}^ccbAn zJ@4Ts*ZJM5ul1QEyow2yRGX{R!#TRLn8zQdaDKei0+1yJPYJY!9v7tOMhJqM`~M;A;DcG&&=eA z$mlw3%7n_Mq4&WLBWlj{lbr3k2Q0|$w^p1C#RZXU3|xj?%@VeSUPR};U#Ago(zm{j z=59P~E@I!ms(n%Ns{_|rjr@_b4_JL(uty(boB_%@;7<0A$aJU0jJie7z?~yUj#%~_ zp|qZJG`S+0j!F}Baa=8?=LJ66OmE%;-fLOLUrkF9vxsG~y! z^uFHShxd)qryhl|D3BzQbiLBp9$}#{Y2>%aa*zEx!mq4C~&L~uHw2o?j`C6Y$YeN zFzFZc)YUaUeaaZsYUocL_DE*jk03mp%&JDzvYXDd@T`LKL7u4C8ejHr-;SD^nx@#! zyPe=nf02FXX=Wy&JENr@gR7{}R(AW{t3pvcxSHVXmM*~P&Bd&vghI@9h3`xneN{*!9jxi6o2>Wm~Tyn zr1<1yO4@U)?f9XQzM=P7msAo6f~j4A1jOt4eDVVkik6M$Ci^#c))V})5*WBCJXGV>&FeMn;AqT)wp$`{HH#&5s?5tgJN(MH)CG3hGKqO7zSGOclYttcrp3g8o%0Se;o~ zmma)oHx2cs!o$1J-kpE%;P&~3Xi-PZmoMvEc^=C+kSZxE)>pbbVikIJ%>RSW!?AOU ziUzyA7vA1maW^Svv_5xkQr4s^OJb(KG~jqUdzi8EL0>Xi$YUhm8LV%F{?GXI+eDX^ zth?Xbq9MEx6_ZuSeyY*dJF-yTH!P&0JK2qaqF8@xeHZ!ZmK86U>jsi>Og~ zT^8>D@r14RNgut?Tp%aTc2NR1zsa|?1%{QA=nX5N2F``co9hrQkGGti^eS;)A6a_G z-#K;g8F`_K^_#70t@^p zdVGvbOg?(+Sta1hMu9ucwk+j!{Qj&sx3mW5M4cJ9H7mB~xo@`na(8_GJVv-dP?;d( zB@LjQ_nUn~qhYmkY^~8mv^E4<7?V&XX!UjH*$}@fz0ttI;NA>2m6tDHR?n`HTrRU7 zJ!Pr-fE35-vd65RG_jog)&pt1Jgv>a^|Gb|#6xG4&6M8;7y*1k2j#@Z|qGssquI_+bx4m7LSGqO^9SqXt%DbY}fI_iIww<*>FM zN)HEGSgJA z7{7;B2DyEH0RcA~#%IBDngu2R4JHYWt!;Qj_%X*FH}iL!Pjsq{`TQhnZ6%K@hUaK- zv9eu1r!=>_qpB+GhV)6Ps?uo@$$3|@u(WsdH(pBEVS8=Gf5Wc&%-Ql*Lk~mV^qW-2 zIA0BWuRnhF%{4^Lbm4-LQTm{u3d3*9~LRz;KP}DK5 zH*bnN42@-I?A>}BU}$;RHy-s)Oq**{k2>BwiU~z3d)BybExzBq#V|uBkEgeqUlgAW4bCqZO)EaWsA&-NM>`B)0()sM=Q zk-uX2-AD_6q3H6x!q`6QI7e(yL_Qu+yGqZVJ(kXC%7ZlFrxllQ0D zwaeF49}LZNa7#P_yKbP=W)igsCin|yb!mw%7p2uz0!gLM;bMVxJ6=>USl8Io4z%@1 z<+{}95aRN1X~|zFz@ue)Y;$7oqJaTs0Ww@9N;@Jb;Wv)$*YYg}9-7%=GbJSpLaSpnHc`NSFylaWOU&sA&0G`9 z`GJr(HYW1|(&x|F+7&u%QI@f>*VGr3*+@{_*_ zz<7Ff^l6~7oFU64$vqpLjjjePOi#B*xd0whVA$g4l-gbjWg*4Be<3!1X^2v1Ry}!$dh}bBb?iLL$3iG|@dp9igO)KwE$MhD8(YtQc7B9?4 zsi@^$x@mUXY`iuEi351RykF_T^wg#1zIkAJGdmp-!=+xr9A4dm5+kPVJ7sYU7wh5! z@B0B0hPj#{8$FScMsu#i2Z5i*lA`iBP+9GsaERmzYj*L9SRs8cZqrxm<>@r{7Wci~ zHWhnTR#rRnp(e`2>|pb1A_3oG)Xb22=c>X<@pf4m#$(4C4SQGWOSX2pt*XTr7KrQX z>8an~UcIKaT<3jhspii7(_1B{J13Tx`{$95^9j4;I@#+lMtPVyCi~?lF-2WMn+2OvlFEN9$XHx z4-q3<*xub)p66X!PD@D2ELorWisc2chUd2PrIS~u7>&;1do+9l@v6^qC}#g&jCh)n8Utfgw_UTmyu|m0 zS{TNFT9LnEAX}H<^Z9e$&iZ}z&E4FV<$|)kS3>~r#T;IA+}O!ga}Xc&>zdFrITwub zA#vGSoapFWvv?s&+e&))@VM&L8zhgHgX%t}d{H3ga~;15H;i2UfwTRCbDQfG5rVC& zeD&;a6av2hIOl7Ph3@$qH@I{XL%?5-VcU^(*GRRc>9j~qE%f#Ju;ZEiMW!nBut#dD z@narMPu=BYJ)cw}Z0s0C)tZRN$iw+IV(~;gB|Dho^d|#|hjeS&h@*1B$^>YrRZ+j` z6W`Cb*_ikf;^M*@<0RtSn?)bKROQg0U!vM+y+qH>&+j>rxP5SzZgw{TCvuk8WFlC? z7bRbW3e#&yy$g2Pp2=M~)_1!TdYu_l8eAh6W|$Po-oNjG0OSqpp3RQWAW@`4+4=fG zx3a|OZYp5x);B71@E^yBm>SMD*3vpbEagNT6GOc-YEqVzpOw|(u8a3@ZH=fiL#O3s zTB08p@z8vIC^?D=3u3lS7knplU*KYCvIxcqIm%XLf!3_7URPCD3;2Hs4Gwx3G*UEF z6xK*OC9bk`__Y1(TrMuw3JQ$Yv*cvKXBCP#r{ykgfxmwM13u}Ku{QOVCReSPPC1qo z?9rHVQQ%YRI!Tr}&)uTn)$w3G&&17T$HMg5aGU4EN6uu|^C~y%@TBEjS%8^$w8WhO z%u%Xxyifa-pPfpuA6Em{4WW=BsdXWB9oOST4iP5S zm)RD4Sd8*s{0Ob`6Y;(1`YCmxbdNN*MNwi2C*D&%JxmX!?QNd{aFA%43PbK9D*Z&d zRS|(;%Vknr0fBaEwHt?LpZUmJTay(GIpVv!>~(SJ6r*}r*R^nkk^rmb{SdQcxlM2! z?CPJoyM5Aez?SHTi`CPkX%u`e#7;%F#!LhtJwwK5fG39-5` zzP+HU!8`B!7-cFpdza2t>j-@_F4nbIj}#+n4MiTmCrRYpd3buh z@X=2HjnGr3w;7p6);Evwz7jPMuSjYPz0K|ajD&{rPL&%msV5^RXT*+IzbPeK#xeH$ zc;vNLmZ}aEFD&V9RA?9Qo6k^XJRa@GjjDNjb+7H+(isDOs2`xQtUR1u8q&IJ#Y;ED}xVd*X zC5B*wL6iQp-FQ2X>~het@{%)Qhy7~<4;|m>dhOR^W<2w*HIVvx<5zXE`VH-x`z zqetDh<0wknuKAqx(i>8hI!xBW@kh*6<&>>8Q?{XDVHC3l^4P#0)yk~wWU;IZLS1RU z5-s73lbC%&Sg-5w1^06OT7i~(bu=yua(|-|0EuuUTSIqEz{VnS5zZn$}D-Jblmj2?T)xeGMtaf z7g%pOY;q|7+I}Ls434YfKcM;rLbKmV}DF zc{h^9RCd;i`m}`df~=yW)hSr(5zmL|b4f50TNKXQa2DCm-dz25FXMVqu)qHaA+>oj zugUYC&yF4Y7*=-ZN$TsH%OW5edRJ1b&}+8O4n&@U)9(y{U~#JgL+(;L@8(xQsU*{@ zh-|>ECp93-f+^)RbNu%0JEWGwP6K6qTq13PS7J_EP?*Hq9Oa025wAZ!5@0G6sREo{ zrDxiHmWBm=Rz(9`+m_fEYC(D|yZ{Th>G^kuAD%4q@Pfu;@?W`H+?$an; zQT11#j_u})^>#9)gP0_uo`yhnR{vp7MtS}W=4^|pcSD3sc52dFw`!v_haPbt4 zGAHa<;T5LF%@hPSF6c@0n$BBa;Jfu(AqigDAJ8QOjJ(?uo7< z3-`KG*P9A~v)$a{0s_Vn4?9?JV=5{LG%@NL8b+R-Z?3+bfA%UCR?h9uw*ewjN?JR2 z`9-?_(aVa8isN1Z&0p&i#cLj^>nbTZF(18s*p8SL(@iQN`Q7EdSrH1ZCl3b9=hdj$ zSkq6u>M6YGoOr&or>A}^k47bLP;+Vu_iPAtH5SXDdp7kOOvVNQFhyd?wSoSo$yYAF zIF|h-vtSS}^~K!R+iz2Ey+~IY_fs}6+;pPncJw&4Y|I?9f|h{*j)i)Nf+WMZ8uVWD-m0qnn+FA4_~d9ArCnpF@jS9F0Py?7QV&mQ4<8=~0GNr*ZB*P1Y^;|z)T6zMdE0}o&z`QX(!P5; z@+MEw67xkdNB(k^Gt%K8a(6v(ebV~@-L3{*{Ff9~^WD9sKh* zRMRd3L*wz%(jk&7SPeuv*&&w1xiekX7AZ*ycNifO;IF6xLZM1!jjH#wIhdFLe9Hc*yQ6Mz_a@fezz@8b zWMuT&Q6O}{b;I^Xb}AnTUC|ck5!EKu4L`1|l`86uHwYSxsyTk&Tb*ya~2QjcI zn`o;D#fpj5*Usw4r*7RkOz}m~Y2_Hud-a+VaW$DkMGvo+*^{@YUYd)_tgt*wR>^w! zBS2%`e|tmI^Vac>JfVfH?P!F74U*Y%UtY;Jdz$Pyho2 z=~b^vHRK%6oRPAR{B$S74F$`sMK%=BN1aZ6({l z(yQyX3hPm&lzsa0XnN{B>TRrQ{x+K}^U4$$ikcfxIOE7B{5cN}*#qN7s&y zP1y8Ob3{ZX3Yt++J$Q~1>NsgVc5i4b-hMFT9cPx3M|Ew>#NI)7zX5%P$&r`lxjl^_ ze$$ZczIs}mZZ8KvM%wbj!vKfzf=epmh4Y)3Lk_ca^lrm=-)_@b7D>FgjnbwZ(x7_8 zil-PJdXxIqXRpdBy~RcRjq2<~R*4dek&iwA4b}cAwYSBvxBl_^OrN^1?&^B+2?@$u zW)w8!?7?G&G})u!4bAhaktv2j`oh?gz^Ky8?b!g{ra1kjsx-`1Lc+ro6qhfDQsz(Q z%Hl39FPq-EV_3UJr$0m;8hVVAGcBp~p=NFxc~@rIgiLhbCKK*+?$dCn<1O4ljgx8|&^whN1!Ov{7xmsdY`EYvTx z0Q_HXsRPQkZ=TLUno5uy`{s=RL{_hhSOnyt&TU{yVq!3WbfyXee$p)dD1$4$1{_YT^1ZxKBqjuqXG zYu~KSc5B4r;F)QcHIkEKDRWCX1SR_e~< zK|VfN(`G~Y5d){!13%Z^kWHG-8x8LC$cdPI$T@=Y0QpAg zuWoDPI=O1BO%p%x@#&gi6XEfV$xVH*+FyvfMOYX9VQZD9^{PaM0fiZXmxS}$8~t75 zC4B4pCVYtp9$XDD3NaJM)tRAn>HKsB#`Pm-MwU2vMir#o{4&B=WO>qt<|l%>hQ1CK z(d$pO9eI)7%gaAQQAT&#E-X9_;0Eo!Daoxl6u>-|KWi+On4zKQDktY-kA)Hnj+G*Q zP)T|%5sL}Saq~S0m|xZ^l)_xYsK8OtRI85SR41ooP_VL6sjC-aRWtxjDnCEJ%UV69 zL&>1t!c{Do!v>v35Mq(z(RFn_P`3HmMtpNab!ISky*#cIS*MF5ik!_Jez%!hU#Cob zr-TT{HxDJv7vj-1F&6PPQK3Wh*v8Ezev@V{5Gt!o@c(F>8}>M%=85pDsToVAGkW%N zvd><=k7<$I^8x{dnn3C^E`9;tZ@2`F&G_T#c&=q?otIXpmPq$Yl-gw_=LjO6x*>}z za<~7Z+`2@C?%vKNt-fAn1KQ6W{eeAZ;~V4@1gFMc=<}k&S;Jyun?Ss>yU1QwUIC-< zQ?!`tq5EgB^(j%>UG;V6YUlBD^mlQ5coe=|^h)ri@66I{$=sZPPjLM4xhYO4N=$ z$XTg_LK%!1JOsG@rb6PVf3#Jo4{K#0bvu<{7L|5@heR1`SbThS{_N=&SucY$yeEUV zitH~PPjuVCW{>#rqV){Z=2&fYt-$)bo;bJhdRq4nn2k(EyYR9*#dYmfYR20jvWol0!Ieozw$_HNZ618qE#l6godblC~3vE!;QN z<$ZS^l!$oM_?{haj8`<*S@XDI!$?KH7F<$pUa&mSXKvKoA4B?(;TTCbon2eo6_%rs z^6f(7&9T)x*vmMqg*kzN08V6ZclV^p+T}skM_++(f__C+oSuPjEEH*sbP!)mB7Rv1sQJ)DUP%g`?I^sTAMSxXQ*O3ofM0`gO< z%!m^CKPAD)2nSp4?bV|<;^+L*7$R_wuBdl)9R=iMu8k+v!Oz7kktGX z(SL`98K5@urh!+#?aRZ1#Y4>Zv!+v0*xS25Rdr_eF~4E4Jmyt#S=_8U=i$xsl1atI zWF~>$RVnfr*Uq1tSaK>h>v4FM69 z=x-kvoC)X&K}O```o=oA98WE#R4XTlg#krpU=SazoO(cHucG7DQJw6lZ|O&2VqY6u z1IT|-0{?#ruDs>_GTwDz;}ugKmrdS4225%{0t``1Lc*Y(`9~)mM}~NFZ?=o{iiv%? zf3bxyUoPe?jysOvj;NtooaLxN>AhLC6qD35#p_a+vv}qUrFQmC0Sy0q9rIgy(HoPv z(s~8Gb#=-d92~Lz#by9r0!u?K+{+3%O7jG6W@hf#N4~1P6XyZBzo{eZ@+ybv9X5DC z+&Rmw=!61|94go=Yx=6%=N#kDPS7z13EQeV*JMo6@XLlmI*)Y7;(BJ(Rb1_(xWBPM zbvESq=mt5ZpvfGU*|lkpl^qF?XE)PR616?&>h~nQhK0R5Q0Q5$+}X2_zZ{S=Wx^`V zN={)FRQ-PUIk9Tugs<<(HW zWDs=unkK~w;lruuU}hs+X{o8X5|0BI+)kyGv`kp!o?9+%#X7t^Ag`!4pmvPuDb5+D zE4s`8_~_*BbKLOcFnvMnj{ADVKe+kX{pHPC_dN&Yd0eU?UpF#>hnY{0eLQ*XKAYkP zBLR>iW+fI6((VNew;Q2~!(+iXON2TybZpIbp?xt7-OHcj@#xX;y6EBGlezBo zUF`;?pmtPM`Y6@o;kl`U4gMflv1Fh6DLU^KjY`=6RB~8^kQf;<0VDd@sv?rXoOYYf!x7xCI zptswu#>B{ig{CGboguW)<@{sFT`%qPAS|NzGTj?rbgE=7Qn~-NTisAw&ilj z&|=T#_M13KCbxp(ETyaZj~?^b1pP4>Z1`Gow_9~8qJmNibAvhZ_is7zo79euEVWkA zbbS-(VL_3l;O?}8 zpE#9w*7PODyRh*a@8YzeG^ly4`l*x&}yfW8O{UE@xiU3MX>7jQ!mRfy; z((T}eZee|W)JfBpP;ko=_03D#7z?DGI4PYMkS5A?(-`3=@>65JuL{0v$Lg}^l-TL( zlRqXA6~$Ak^6;zkq4)#@UTw|>i*2(F>gbd0nGqrf12@I(dUmbJg6ErbkgxmdOS$eN zIuLKWG;MGS*q9h~&wb|#b9Pxjxk9Aw2Nrb$Ux`q4pJpdKJ|#P)bD-vn{;zZ+vJXOh z0w(njFK;&PXqa}EDT4IRY*KCj6=D}Q;3S}^7+pIxRm$S~>f1NXY{S4#T@q4oIcU=s z8&T){OKIx;pt5eG{;j?~x00Sn%a4^)r%Xu+zvy0&Tm-7V#3gfqRw>@|;<@k3OJ9AI zhUH!{2TtZ#Xz(V8pkft;3?w!IYT>eMR|D$K}|{$M&se&dA6fq z-7&e86sEe3sQbN~%J%Bt1g_|pSTsFzyn6ZB?)nol*nII2c&e&QWkyeVq^AQouIDy> z3%az$@w}I#`bulrvt}881#T$N2QU3YaB*<~+KM-#&?U13kDq5Jp}EeigNAu@F)2!V zAy4X_z8|?(Kj;D=bqo}`N$)hy#0;q&g%Sd1xM8M@G&w-j!jO3g&-|g_zv;n01Nb^pP zZ{DZ(;tez;Qt8SMIA7lJGMZu|qex22i5&3^6V4yt`BK14ebTq-uGINT4Iilt=F<8tnL>js&dIqOX&6}GwiT9?*2UtlsU0kq z^W!eqjy{iBWym?Zy88IPIX$;?nT-F%{ekY+Y)Hih^1$Cp11 zQ5Qy^kNS5^NPvEn`EzDra!zvhj-r);Wxy5fb8j3RcGqWy-j+4S;B^UzTLj<7YPov5 z0Zr?8JSV9wqIG&Dr#onG9_wvv+@hndcZ!U~bC?_^{5c6l@IHQVvq`1Td&sSCwp(j9 zH<28Vm+}4VAX)dDwEw1H{_XJ0(qEt7dH_+l@znZ_;%faf0?{`Mz>WKSsA1{R2oBU2 zmfGXOw+yY3vy9N#%?lp6_(}GZszZ9iaW_V zRdOudH^gR^zNR!i47F{g&mBq}TG28ylQU4^JG)RW#jNSMJY7`jzs-76{D3C%<4;Q; zl`~DhKF%u4p*OAEfzZ>V_l29k9G*x z8qfr&IfG-Z03*!A#TA(MD|++*n-am_2kZZ*p9+xH7$Kpg^mKiz$KncE zw5Q_6zm2oS#EWYjYg6uilkaXPat`w|+L=QWUcu2Y+a0E}9q?)ho$cf2XKZ3psav=8 zNi2?=t|tRTfK5Zvj#A=~SjVfFStTz%>k<~vD=rSHEv0m;HjnYT7!#KuD5#v#9;UiH zl-u#pqakKyvoWEo=K^TApfZ01W*ni^^FIe+X6 z>2igZ>=$U$pK;;pGr^0-N#tq>dyE9E2;Lij!LOcEZ@%paV;NcFGJs5AWMcg9k*b_x z4S?biGwW+Rr1_=P;;gc;e;FDcZraVHony#2>k~~IxSMfV#%t>lnE$A%nj3A(miG>_ zo^#=9(H2NAtgf!^HIJ3MlpU$I0+lFUUOmv+>N+LbI{2}2WUO^|_1IUWzxlCsu;bm` z)s+I~nrSyQ3i&&LXn@qPH|9To9t(lGH(4OFCV`!VLP6`Gpn^Q?bPY=3JCb*^L7RTdAl*7t1%vbty zuQ8_x!>J-NMn-($dv_w8?z4XI#CnnO=VbzyX0!1tpy|S=%))9a(olt(!2f!r6s1fOkgk)y7#gs{ZRC_0S@4P5e%L7_`y+aBCt@V65ZSTQvGXz>CeS z@1Bn}7A`6%c;svCanVXrnJoNun0Oz&m655bx{ZzG?wfsK;P|bqXb4sh9JN#9KYj${ z=w&p|qcHim1ieNcpnGk~2#yuzncv69O%w6>Y5+CD2XD@_@-e0lILXM4hQA5@ULZi% zU}kpr_mq8U-R{}!iruIFw4Xkn`WC1*&f5V{$It}Vju@Jnx%)ND8h8f>H`5opcz7h% z2fYt%QwQ}%MTImo3v1G=ODO{Ho&a>Lv0kUQj7nxoP$SAQ4rbp&paMYyJj?`ueR-m1g^o)voL5 z>2=~hwc3{RV;N7=t*EH#&*$o6a*T}M{-0h4csWKw@);TLPnNC>ZqD|BrY73gbz>*M ztIi6E-p%!$v`bXt1XQVq*F~kO$p^E&)?fSY8|w*4|j|#-Jc4cf-PBO)+cWB>nP}W1*#3u~OKp z=TXRP;XZF&C#U5Q4h)#h6(B)FK&K| zWTz%AJs3VmEySK&2TrV0PqfCf5`lN|{b}!J{6V@kJvHRB2y|jv8f!=ZTDz{4_z^DN zy_TggK>HI!ZF2JRIv@PNR!Q=IRYP)qz9wvTI&YCt-*ezA@l~|ysNyi;=P@(ab(*bD zIQ+YId3bViZe_cwrexmM|b;!TVdTl)z?E!G+!6ir&TQK0)pw4J4puc3TW)r zjh+(>l@=l%MxZ{>;m#Ntc zc*p~ydrguuzkI#`2>^D5tl+C?QZpF4#6u6)3hSqQPj&Pkoxps?Mi4de{2yxu%1^ z&z<3ZljKtOW2dZv4->A{ly{{`9UL6WJr~*)uql&QQ?wx-y?PZc93BG!2$qGhu`#=u zDfGMFLhWix?*mGydCGGc8#D0>k&=d%MmDb&<3-KP%s~7l-q#?A6(!ECrIG+vKXh`u zciA9q>4G43t9};e>gt+rHbhAoo{3}nmTVyal`GT>r9?oM_;G(W5(=C#c{+SYwei=C zz3o5F{5CK!kW*BANabi#~6wqvwwMn#_Tvy59oqNC*`Nn$$88P6Y&R0IOF0K|#Vp#Ns(DN_;iod^qO>UxI z+S1Vcqea@F_J}j;i8sE|MTe)Sr+e!dO==9^Ee2BL^NyRX)V*ZKjPKtu(2ys;y2J>> z7ZUp~;S>^8|MF3@4e2Q`rJWCbHdw`xs(jL3sd=U9^VF2SmX_AT%{xFjP5KUawL~BtPR9V`gRX9D-Kqh?bC) zlM%0*cfGW;O^V3*r_TTIYjjO=*2^*CU9wPwqoX60W?|p^Lw_eHCr7K7b+Vr2w2Oh8 zP0`bCJVfuhInuKcsP9Wl(su3S9g?lBd2H}&_bnCH)n)8Hqx*t8WqXze6z7)vE=&%O zPiafJ)_oCUvVS}MscJ2??x1-_`KaGSDkI?X$pta7yW7hHvnm1bL5~fboma%ztbIm8 z8Co?K4DZ_8>tDO}rP5=*nO@%D-~$G0YG#(4oUCDKX<0>_Y_%O0=#zo4+}WuFZn|14 zNq}l>yZhJNWtDZY5aQzE&P#4&oyiXkZEH0$G3kh+NuWMtr z;S710A5s&E?%NWB;PYkn!LPC`52U)KB_{_52OJh5ne6DVOukMI3MG|?8=XjAoUN3S zkr^D1u{-?vbAWAuBzBZ1u4}9P(+jbk#b+uTTs_?0E>A`aus^3OiwumOuSBBUt%dVp zx~&`hING!z^l;3!sfmh;(#Zv*BjDd#z>eR1bff7qw=QCIY^?XwCw?Izrx*;@!>>gW z%lP8Oi=Q(!L!PYQyVM>h5Gn)rHo|2DuBKFtxKW(((R1g`x|N(!99(4JWljQB z=J)Ro5G-0OQwmy;=&B6@tZfy)pLxyAYM=Muqf6F){&XNtzVq?%;cjfXfZgos>}=c` zH@PnD`(wO==ZW@qGX*tkx%-U5EUxCnBBdZPFq=EErz1_`c09_SlG3Ps-H-QP_??-Y zc@KrGCpIP~V;>-%2;?jl?>0dkfW3J0eC*a;bSDX~9X4eZMuWu;kw>pVl7=RVWj3Kj z?9)&vArhr#k(QgG>c9085|N(#oC+Qh&mkLCQX&psn>2XDZFFa-Cng00Vy?mN1TI=G zu)~sozNW%|+sXC*{T91);l8c=hDF;RkVHljClAP)=^A7@WNQZu0FcZf|mXP^IkFdO1NdSUC5w%=-HJ z0BhWmm#x9jUVRZ6mm;npKmS|aJ0$pY{~I13@BF(%q@Ui8L{-DGOdiNm^f0)7ebZO? z%YBm7IhLvF`vgCWv`vaDEyv9SqGMm01XTt=a$P@#`DAAZiGB)xq}tl_-@knX@}7ojAd%?Pr9~*UhQ%omp=7#9ub=WeyVoH= zpRhAoIe1a*JMp)FHSW*W639Tz;fkK-GW?H@6im>Yw``j5oA(Y576RrG{bsL?hL$Eu z462RT*t1uzUIpb`boLN6TFxTv1XpdjIU)D%7ZKOo^v|8X9kH7wtqY!0L?W>To<^2} zIXAkfj?~c9B&DFBfJAC56Uq9u6@1Kj#ESz11JBdajPKl;m(3i~K%z^K*LO-=M!L|v;-PfP3mm@I(R*Ow{;OE;-C0rqG?eSPMS zAFfuC1T@+5pEEN<5F&kN<0yu2mYX)Lp1#SIw1_r9YOhH8n8#kCQe{zJg8PzVIzzMMqb{;u{G!^>}4|I8N%A~ zfVwJlX)B+{DZ);LT5uG)kDkRf-#43Wr(p%O&rgV}tM@LQ9BvD2y-K_%W(ng^vq?Ji zrU*uYAwiUjF%&^&GDAv0)RgUAP*60#N`8I(L_m7Gr zagpeId7%eXc{86sv$|yZMWenwYGwW5AJC2d$x2Z<9p7c&=2U4{ISmyR7$f?fwnO*e zmsG1NwBO0mp59@gvh6$^@)`h_!I{^2J9=Ne+EZK3{~294c-twZP!!gT0)~Ek<5Zwlt!2ECnALYL5R7ZOqFXXc2r( z&2$L903EGX=bUV^Mr~|IRV)sN&Zc0F#1s^E=b>RafaGOSZrc_zJ`?gJ4r;=LjXQdX z6_Q(sF+^ZNsekQ-9!1fPd*dBpbI0ofhe0<&XIsTupG2Tk1hJz-$}8C<@8XJs78@ee zNk>CXLgGT})Q#o(9Bol{7eftN-?kE4)zrCGqvj39xhxYIG`OWGl(>|5M1BNF{BVS$ z(1dY$r290Fn9R?}A^0t6Te37JYU?{&$qNunA^xq`Y*pKm!-C3ROt*eT?T0wo3YVwZ zhTow#B?%6>r+A2?bieyUTE~;o>H<4eyr2kWm%0M#x~HPu@LY6TQV+ckLY{o(_e|)! zR)w%LzMo^hp-%2`%hDG0n6_QRri<)i+HNC`C$YoJ~(%{_~bxGXD$AkQNq z2}@8__Y|2YA7}bGu=nuN9;4e&iI8Xwsj5who_GXzEKj~IztSa7L<~6_W9k`0!Ib*o zLK11~TrU*2h0h6YNi11vXa76{bF$XN*n*AXQ##Q$iE6E;(w#>?tjo@X(azA;Ht&wn t$}wgaDf%AGeOa77s?(6q-lRU^&AVZLCKG$!1y1ZkV08?&OEqo7{s$!R4Ilsj diff --git a/package/win/64bit/Bisq.iss b/package/win/64bit/Bisq.iss deleted file mode 100755 index b4473f4eec..0000000000 --- a/package/win/64bit/Bisq.iss +++ /dev/null @@ -1,74 +0,0 @@ -;This file will be executed next to the application bundle image -;I.e. current directory will contain folder Bisq with application files -[Setup] -AppId={{bisq}} -AppName=Bisq -AppVersion=0.6.2 -AppVerName=Bisq -AppPublisher=Bisq -AppComments=Bisq -AppCopyright=Copyright (C) 2016 -AppPublisherURL=https://bisq.network -AppSupportURL=https://bisq.network -;AppUpdatesURL=http://java.com/ -DefaultDirName={localappdata}\Bisq -DisableStartupPrompt=Yes -DisableDirPage=Yes -DisableProgramGroupPage=Yes -DisableReadyPage=Yes -DisableFinishedPage=Yes -DisableWelcomePage=Yes -DefaultGroupName=Bisq -;Optional License -LicenseFile= -;WinXP or above -MinVersion=0,5.1 -OutputBaseFilename=Bisq -Compression=lzma -SolidCompression=yes -PrivilegesRequired=lowest -SetupIconFile=C:\Users\asd\Desktop\exchange\package\win\64bit\Bisq.ico -UninstallDisplayIcon={app}\Bisq.ico -UninstallDisplayName=Bisq -WizardImageStretch=No -WizardSmallImageFile=Bisq-setup-icon.bmp -ArchitecturesInstallIn64BitMode=x64 -ChangesAssociations=Yes - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -Source: "Bisq\Bisq.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "Bisq\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs - -[Icons] -Name: "{group}\Bisq"; Filename: "{app}\Bisq.exe"; IconFilename: "{app}\Bisq.ico"; Check: returnTrue() -Name: "{commondesktop}\Bisq"; Filename: "{app}\Bisq.exe"; IconFilename: "{app}\Bisq.ico"; Check: returnFalse() - -[Run] -Filename: "{app}\Bisq.exe"; Description: "{cm:LaunchProgram,Bisq}"; Flags: nowait postinstall skipifsilent; Check: returnTrue() -Filename: "{app}\Bisq.exe"; Parameters: "-install -svcName ""Bisq"" -svcDesc ""Bisq"" -mainExe ""Bisq.exe"" "; Check: returnFalse() - -[UninstallRun] -Filename: "{app}\Bisq.exe "; Parameters: "-uninstall -svcName Bisq -stopOnUninstall"; Check: returnFalse() - -[Code] -function returnTrue(): Boolean; -begin - Result := True; -end; - -function returnFalse(): Boolean; -begin - Result := False; -end; - -function InitializeSetup(): Boolean; -begin -// Possible future improvements: -// if version less or same => just launch app -// if upgrade => check if same app is running and wait for it to exit -// Add pack200/unpack200 support? - Result := True; -end; diff --git a/package/win/32bit/32bitBuild.bat b/package/windows/32bitBuild.bat similarity index 100% rename from package/win/32bit/32bitBuild.bat rename to package/windows/32bitBuild.bat diff --git a/package/win/64bit/64bitBuild.bat b/package/windows/64bitBuild.bat similarity index 100% rename from package/win/64bit/64bitBuild.bat rename to package/windows/64bitBuild.bat diff --git a/package/win/32bit/Bisq-setup-icon.bmp b/package/windows/Bisq-setup-icon.bmp similarity index 100% rename from package/win/32bit/Bisq-setup-icon.bmp rename to package/windows/Bisq-setup-icon.bmp diff --git a/package/win/32bit/Bisq.ico b/package/windows/Bisq.ico similarity index 100% rename from package/win/32bit/Bisq.ico rename to package/windows/Bisq.ico diff --git a/package/win/32bit/Bisq.iss b/package/windows/Bisq.iss similarity index 96% rename from package/win/32bit/Bisq.iss rename to package/windows/Bisq.iss index 42f99c5a48..e88c099905 100755 --- a/package/win/32bit/Bisq.iss +++ b/package/windows/Bisq.iss @@ -27,7 +27,7 @@ OutputBaseFilename=Bisq Compression=lzma SolidCompression=yes PrivilegesRequired=lowest -SetupIconFile=C:\Users\mk\Desktop\exchange\package\win\32bit\Bisq.ico +SetupIconFile=Bisq.ico UninstallDisplayIcon={app}\Bisq.ico UninstallDisplayName=Bisq WizardImageStretch=No From 2bad6db79ee507cf01bd5e096b56b86418fe0056 Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Wed, 20 Dec 2017 20:57:50 +0100 Subject: [PATCH 31/32] Fix windows build issues --- package/windows/Bisq.iss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/windows/Bisq.iss b/package/windows/Bisq.iss index e88c099905..c27fc3cd73 100755 --- a/package/windows/Bisq.iss +++ b/package/windows/Bisq.iss @@ -27,9 +27,9 @@ OutputBaseFilename=Bisq Compression=lzma SolidCompression=yes PrivilegesRequired=lowest -SetupIconFile=Bisq.ico +SetupIconFile=Bisq\Bisq.ico UninstallDisplayIcon={app}\Bisq.ico -UninstallDisplayName=Bisq +UninstallDisplayName=Bisq WizardImageStretch=No WizardSmallImageFile=Bisq-setup-icon.bmp ArchitecturesInstallIn64BitMode=x64 From 5efc6c0a4ec21fceaefd1f5e72212f1ad7d5d79a Mon Sep 17 00:00:00 2001 From: Manfred Karrer Date: Thu, 21 Dec 2017 00:43:41 +0100 Subject: [PATCH 32/32] Fix missing ; --- .../main/java/io/bisq/gui/main/overlays/windows/TacWindow.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java index 62b0b630f5..576fa1c2a2 100644 --- a/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java +++ b/gui/src/main/java/io/bisq/gui/main/overlays/windows/TacWindow.java @@ -80,7 +80,7 @@ public class TacWindow extends Overlay { protected void addMessage() { super.addMessage(); String fontStyleClass = smallScreen ? "small-text" : "normal-text"; - messageLabel.getStyleClass().add(fontStyleClass) + messageLabel.getStyleClass().add(fontStyleClass); HyperlinkWithIcon hyperlinkWithIcon = addHyperlinkWithIcon(gridPane, ++rowIndex, Res.get("tacWindow.arbitrationSystem"), "https://bisq.network/arbitration_system.pdf"); hyperlinkWithIcon.getStyleClass().add(fontStyleClass);