Remove theme in Settings

This commit is contained in:
yushijinhun 2018-07-18 21:36:44 +08:00
parent b252266a46
commit 9896165b68
No known key found for this signature in database
GPG Key ID: 5BC167F73EA558E4
7 changed files with 33 additions and 36 deletions

View File

@ -66,6 +66,7 @@ public final class Config implements Cloneable, Observable {
.registerTypeAdapter(ObservableSet.class, new ObservableSetCreator()) .registerTypeAdapter(ObservableSet.class, new ObservableSetCreator())
.registerTypeAdapter(ObservableMap.class, new ObservableMapCreator()) .registerTypeAdapter(ObservableMap.class, new ObservableMapCreator())
.registerTypeAdapterFactory(new JavaFxPropertyTypeAdapterFactory(true, true)) .registerTypeAdapterFactory(new JavaFxPropertyTypeAdapterFactory(true, true))
.registerTypeAdapter(Theme.class, new Theme.TypeAdapter())
.registerTypeAdapter(EnumBackgroundImage.class, new EnumOrdinalDeserializer<>(EnumBackgroundImage.class)) // backward compatibility for backgroundType .registerTypeAdapter(EnumBackgroundImage.class, new EnumOrdinalDeserializer<>(EnumBackgroundImage.class)) // backward compatibility for backgroundType
.registerTypeAdapter(Proxy.Type.class, new EnumOrdinalDeserializer<>(Proxy.Type.class)) // backward compatibility for hasProxy .registerTypeAdapter(Proxy.Type.class, new EnumOrdinalDeserializer<>(Proxy.Type.class)) // backward compatibility for hasProxy
.setPrettyPrinting() .setPrettyPrinting()
@ -113,7 +114,7 @@ public final class Config implements Cloneable, Observable {
private StringProperty proxyPass = new SimpleStringProperty(); private StringProperty proxyPass = new SimpleStringProperty();
@SerializedName("theme") @SerializedName("theme")
private StringProperty theme = new SimpleStringProperty(); private ObjectProperty<Theme> theme = new SimpleObjectProperty<>(Theme.BLUE);
@SerializedName("localization") @SerializedName("localization")
private StringProperty localization = new SimpleStringProperty(); private StringProperty localization = new SimpleStringProperty();
@ -320,15 +321,15 @@ public final class Config implements Cloneable, Observable {
return proxyPass; return proxyPass;
} }
public String getTheme() { public Theme getTheme() {
return theme.get(); return theme.get();
} }
public void setTheme(String theme) { public void setTheme(Theme theme) {
this.theme.set(theme); this.theme.set(theme);
} }
public StringProperty themeProperty() { public ObjectProperty<Theme> themeProperty() {
return theme; return theme;
} }

View File

@ -257,31 +257,6 @@ public class Settings {
selectedAccount.get(); selectedAccount.get();
} }
/****************************************
* THEME *
****************************************/
private final ImmediateObjectProperty<Theme> theme = new ImmediateObjectProperty<Theme>(this, "theme", Theme.getTheme(CONFIG.getTheme()).orElse(Theme.BLUE)) {
@Override
public void invalidated() {
super.invalidated();
CONFIG.setTheme(get().getName().toLowerCase());
}
};
public Theme getTheme() {
return theme.get();
}
public void setTheme(Theme theme) {
this.theme.set(theme);
}
public ImmediateObjectProperty<Theme> themeProperty() {
return theme;
}
/**************************************** /****************************************
* PROFILES * * PROFILES *
****************************************/ ****************************************/

View File

@ -24,6 +24,11 @@ import org.jackhuang.hmcl.util.FileUtils;
import org.jackhuang.hmcl.util.IOUtils; import org.jackhuang.hmcl.util.IOUtils;
import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.Logging;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import static org.jackhuang.hmcl.setting.ConfigHolder.CONFIG;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Optional; import java.util.Optional;
@ -115,7 +120,7 @@ public class Theme {
} }
public static ObjectBinding<Color> foregroundFillBinding() { public static ObjectBinding<Color> foregroundFillBinding() {
return Bindings.createObjectBinding(() -> Settings.INSTANCE.getTheme().getForegroundColor(), Settings.INSTANCE.themeProperty()); return Bindings.createObjectBinding(() -> CONFIG.getTheme().getForegroundColor(), CONFIG.themeProperty());
} }
public static ObjectBinding<Color> blackFillBinding() { public static ObjectBinding<Color> blackFillBinding() {
@ -125,4 +130,16 @@ public class Theme {
public static ObjectBinding<Color> whiteFillBinding() { public static ObjectBinding<Color> whiteFillBinding() {
return Bindings.createObjectBinding(() -> Color.WHITE); return Bindings.createObjectBinding(() -> Color.WHITE);
} }
public static class TypeAdapter extends com.google.gson.TypeAdapter<Theme> {
@Override
public void write(JsonWriter out, Theme value) throws IOException {
out.value(value.getName().toLowerCase());
}
@Override
public Theme read(JsonReader in) throws IOException {
return getTheme(in.nextString()).orElse(Theme.BLUE);
}
}
} }

View File

@ -34,6 +34,8 @@ import org.jackhuang.hmcl.ui.construct.TaskExecutorDialogPane;
import org.jackhuang.hmcl.util.FutureCallback; import org.jackhuang.hmcl.util.FutureCallback;
import org.jackhuang.hmcl.util.JavaVersion; import org.jackhuang.hmcl.util.JavaVersion;
import static org.jackhuang.hmcl.setting.ConfigHolder.CONFIG;
import java.util.function.Consumer; import java.util.function.Consumer;
public final class Controllers { public final class Controllers {
@ -106,7 +108,7 @@ public final class Controllers {
decorator.setCustomMaximize(false); decorator.setCustomMaximize(false);
scene = new Scene(decorator, 804, 521); scene = new Scene(decorator, 804, 521);
scene.getStylesheets().setAll(Settings.INSTANCE.getTheme().getStylesheets()); scene.getStylesheets().setAll(CONFIG.getTheme().getStylesheets());
stage.setMinWidth(804); stage.setMinWidth(804);
stage.setMaxWidth(804); stage.setMaxWidth(804);
stage.setMinHeight(521); stage.setMinHeight(521);

View File

@ -43,6 +43,7 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import static org.jackhuang.hmcl.setting.ConfigHolder.CONFIG;
import static org.jackhuang.hmcl.util.i18n.I18n.i18n; import static org.jackhuang.hmcl.util.i18n.I18n.i18n;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
@ -64,7 +65,7 @@ public final class LogWindow extends Stage {
public LogWindow() { public LogWindow() {
setScene(new Scene(impl, 800, 480)); setScene(new Scene(impl, 800, 480));
getScene().getStylesheets().addAll(Settings.INSTANCE.getTheme().getStylesheets()); getScene().getStylesheets().addAll(CONFIG.getTheme().getStylesheets());
setTitle(i18n("logwindow.title")); setTitle(i18n("logwindow.title"));
getIcons().add(new Image("/assets/img/icon.png")); getIcons().add(new Image("/assets/img/icon.png"));
} }

View File

@ -202,13 +202,13 @@ public final class SettingsPage extends StackPane implements DecoratorPage {
CONFIG.setBackgroundImageType((EnumBackgroundImage) newValue.getUserData())); CONFIG.setBackgroundImageType((EnumBackgroundImage) newValue.getUserData()));
// theme // theme
JFXColorPicker picker = new JFXColorPicker(Color.web(Settings.INSTANCE.getTheme().getColor()), null); JFXColorPicker picker = new JFXColorPicker(Color.web(CONFIG.getTheme().getColor()), null);
picker.setCustomColorText(i18n("color.custom")); picker.setCustomColorText(i18n("color.custom"));
picker.setRecentColorsText(i18n("color.recent")); picker.setRecentColorsText(i18n("color.recent"));
picker.getCustomColors().setAll(Theme.SUGGESTED_COLORS); picker.getCustomColors().setAll(Theme.SUGGESTED_COLORS);
picker.setOnAction(e -> { picker.setOnAction(e -> {
Theme theme = Theme.custom(Theme.getColorDisplayName(picker.getValue())); Theme theme = Theme.custom(Theme.getColorDisplayName(picker.getValue()));
Settings.INSTANCE.setTheme(theme); CONFIG.setTheme(theme);
Controllers.getScene().getStylesheets().setAll(theme.getStylesheets()); Controllers.getScene().getStylesheets().setAll(theme.getStylesheets());
}); });
themeColorPickerContainer.getChildren().setAll(picker); themeColorPickerContainer.getChildren().setAll(picker);

View File

@ -21,14 +21,15 @@ import javafx.scene.Scene;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.web.WebView; import javafx.scene.web.WebView;
import javafx.stage.Stage; import javafx.stage.Stage;
import org.jackhuang.hmcl.setting.Settings;
import static org.jackhuang.hmcl.setting.ConfigHolder.CONFIG;
public class WebStage extends Stage { public class WebStage extends Stage {
private final WebView webView = new WebView(); private final WebView webView = new WebView();
public WebStage() { public WebStage() {
setScene(new Scene(webView, 800, 480)); setScene(new Scene(webView, 800, 480));
getScene().getStylesheets().addAll(Settings.INSTANCE.getTheme().getStylesheets()); getScene().getStylesheets().addAll(CONFIG.getTheme().getStylesheets());
getIcons().add(new Image("/assets/img/icon.png")); getIcons().add(new Image("/assets/img/icon.png"));
} }