diff --git a/common/src/main/java/bisq/common/config/Config.java b/common/src/main/java/bisq/common/config/Config.java index fb5f16659ec..2fb76613cd8 100644 --- a/common/src/main/java/bisq/common/config/Config.java +++ b/common/src/main/java/bisq/common/config/Config.java @@ -68,6 +68,7 @@ public class Config { public static final String BASE_CURRENCY_NETWORK = "baseCurrencyNetwork"; public static final String REFERRAL_ID = "referralId"; public static final String USE_DEV_MODE = "useDevMode"; + public static final String USE_DEV_MODE_HEADER = "useDevModeHeader"; public static final String TOR_DIR = "torDir"; public static final String STORAGE_DIR = "storageDir"; public static final String KEY_STORAGE_DIR = "keyStorageDir"; @@ -159,6 +160,7 @@ public class Config { public final boolean daoActivated; public final String referralId; public final boolean useDevMode; + public final boolean useDevModeHeader; public final boolean useDevPrivilegeKeys; public final boolean dumpStatistics; public final boolean ignoreDevMsg; @@ -356,6 +358,13 @@ public Config(String defaultAppName, File defaultUserDataDir, String... args) { .ofType(boolean.class) .defaultsTo(false); + ArgumentAcceptingOptionSpec useDevModeHeaderOpt = + parser.accepts(USE_DEV_MODE_HEADER, + "Use dev mode css scheme to distinguish dev instances.") + .withRequiredArg() + .ofType(boolean.class) + .defaultsTo(false); + ArgumentAcceptingOptionSpec useDevPrivilegeKeysOpt = parser.accepts(USE_DEV_PRIVILEGE_KEYS, "If set to true all privileged features requiring a private " + "key to be enabled are overridden by a dev key pair (This is for developers only!)") @@ -706,6 +715,7 @@ public Config(String defaultAppName, File defaultUserDataDir, String... args) { this.torStreamIsolation = options.has(torStreamIsolationOpt); this.referralId = options.valueOf(referralIdOpt); this.useDevMode = options.valueOf(useDevModeOpt); + this.useDevModeHeader = options.valueOf(useDevModeHeaderOpt); this.useDevPrivilegeKeys = options.valueOf(useDevPrivilegeKeysOpt); this.dumpStatistics = options.valueOf(dumpStatisticsOpt); this.ignoreDevMsg = options.valueOf(ignoreDevMsgOpt); diff --git a/core/src/main/java/bisq/core/app/BisqExecutable.java b/core/src/main/java/bisq/core/app/BisqExecutable.java index 73f85dacc4f..a8565c24d50 100644 --- a/core/src/main/java/bisq/core/app/BisqExecutable.java +++ b/core/src/main/java/bisq/core/app/BisqExecutable.java @@ -164,6 +164,7 @@ protected void applyInjector() { protected void setupDevEnv() { DevEnv.setDevMode(config.useDevMode); + DevEnv.setDevMode(config.useDevModeHeader); DevEnv.setDaoActivated(config.daoActivated); } diff --git a/core/src/main/java/bisq/core/app/CoreModule.java b/core/src/main/java/bisq/core/app/CoreModule.java index 1f058e123a7..e207ae033bf 100644 --- a/core/src/main/java/bisq/core/app/CoreModule.java +++ b/core/src/main/java/bisq/core/app/CoreModule.java @@ -75,6 +75,7 @@ protected void configure() { bindConstant().annotatedWith(named(USE_DEV_PRIVILEGE_KEYS)).to(config.useDevPrivilegeKeys); bindConstant().annotatedWith(named(USE_DEV_MODE)).to(config.useDevMode); + bindConstant().annotatedWith(named(USE_DEV_MODE_HEADER)).to(config.useDevModeHeader); bindConstant().annotatedWith(named(REFERRAL_ID)).to(config.referralId); // ordering is used for shut down sequence diff --git a/core/src/main/java/bisq/core/app/misc/ModuleForAppWithP2p.java b/core/src/main/java/bisq/core/app/misc/ModuleForAppWithP2p.java index aa76144c0df..4ffdb7f79cb 100644 --- a/core/src/main/java/bisq/core/app/misc/ModuleForAppWithP2p.java +++ b/core/src/main/java/bisq/core/app/misc/ModuleForAppWithP2p.java @@ -79,6 +79,7 @@ protected void configure() { bindConstant().annotatedWith(named(USE_DEV_PRIVILEGE_KEYS)).to(config.useDevPrivilegeKeys); bindConstant().annotatedWith(named(USE_DEV_MODE)).to(config.useDevMode); + bindConstant().annotatedWith(named(USE_DEV_MODE_HEADER)).to(config.useDevModeHeader); bindConstant().annotatedWith(named(REFERRAL_ID)).to(config.referralId); // ordering is used for shut down sequence diff --git a/desktop/src/main/java/bisq/desktop/app/BisqApp.java b/desktop/src/main/java/bisq/desktop/app/BisqApp.java index f8d35763edc..1202a1eb1ff 100644 --- a/desktop/src/main/java/bisq/desktop/app/BisqApp.java +++ b/desktop/src/main/java/bisq/desktop/app/BisqApp.java @@ -169,7 +169,7 @@ public void handleUncaughtException(Throwable throwable, boolean doShutDown) { if (scene == null) { log.warn("Scene not available yet, we create a new scene. The bug might be caused by an exception in a constructor or by a circular dependency in Guice. throwable=" + throwable.toString()); scene = new Scene(new StackPane(), 1000, 650); - CssTheme.loadSceneStyles(scene, CssTheme.CSS_THEME_LIGHT); + CssTheme.loadSceneStyles(scene, CssTheme.CSS_THEME_LIGHT, false); stage.setScene(scene); stage.show(); } @@ -221,10 +221,11 @@ private Scene createAndConfigScene(MainView mainView, Injector injector) { addSceneKeyEventHandler(scene, injector); Preferences preferences = injector.getInstance(Preferences.class); + var config = injector.getInstance(Config.class); preferences.getCssThemeProperty().addListener((ov) -> { - CssTheme.loadSceneStyles(scene, preferences.getCssTheme()); + CssTheme.loadSceneStyles(scene, preferences.getCssTheme(), config.useDevModeHeader); }); - CssTheme.loadSceneStyles(scene, preferences.getCssTheme()); + CssTheme.loadSceneStyles(scene, preferences.getCssTheme(), config.useDevModeHeader); return scene; } diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java index 7c0973d6bca..3776b3f1a7e 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java @@ -102,6 +102,7 @@ public class PendingTradesView extends ActivatableViewAndModel tableView; @@ -141,13 +142,15 @@ public PendingTradesView(PendingTradesViewModel model, @Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter formatter, PrivateNotificationManager privateNotificationManager, Preferences preferences, - @Named(Config.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys) { + @Named(Config.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys, + @Named(Config.USE_DEV_MODE_HEADER) boolean useDevModeHeader) { super(model); this.tradeDetailsWindow = tradeDetailsWindow; this.formatter = formatter; this.privateNotificationManager = privateNotificationManager; this.preferences = preferences; this.useDevPrivilegeKeys = useDevPrivilegeKeys; + this.useDevModeHeader = useDevModeHeader; } @Override @@ -412,7 +415,7 @@ private void openChat(Trade trade) { }); Scene scene = new Scene(pane); - CssTheme.loadSceneStyles(scene, preferences.getCssTheme()); + CssTheme.loadSceneStyles(scene, preferences.getCssTheme(), useDevModeHeader); scene.addEventHandler(KeyEvent.KEY_RELEASED, ev -> { if (ev.getCode() == KeyCode.ESCAPE) { ev.consume(); diff --git a/desktop/src/main/java/bisq/desktop/theme-dev.css b/desktop/src/main/java/bisq/desktop/theme-dev.css new file mode 100644 index 00000000000..5d3852ba1bd --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/theme-dev.css @@ -0,0 +1,4 @@ +.root { + -bs-rd-nav-background: #841413; + -bs-rd-nav-primary-background: #841413; +} diff --git a/desktop/src/main/java/bisq/desktop/util/CssTheme.java b/desktop/src/main/java/bisq/desktop/util/CssTheme.java index 7bfe6021272..0698f0fbded 100644 --- a/desktop/src/main/java/bisq/desktop/util/CssTheme.java +++ b/desktop/src/main/java/bisq/desktop/util/CssTheme.java @@ -24,12 +24,14 @@ public class CssTheme { public static final int CSS_THEME_DARK = 1; private static int currentCSSTheme; + private static boolean useDevHeader; - public static void loadSceneStyles(Scene scene, int cssTheme) { + public static void loadSceneStyles(Scene scene, int cssTheme, boolean devHeader) { String cssThemeFolder = "/bisq/desktop/"; String cssThemeFile = ""; currentCSSTheme = cssTheme; + useDevHeader = devHeader; switch (cssTheme) { @@ -52,6 +54,8 @@ public static void loadSceneStyles(Scene scene, int cssTheme) { // load theme last to allow override cssThemeFolder + cssThemeFile ); + if (useDevHeader) + scene.getStylesheets().add(cssThemeFolder + "theme-dev.css"); } public static boolean isDarkTheme() {