Renaming profile

This commit is contained in:
huangyuhui
2018-02-12 23:52:10 +08:00
parent 47a4a0eaf5
commit 46917af37c
3 changed files with 47 additions and 31 deletions

View File

@@ -41,7 +41,7 @@ public final class Profile {
private final ImmediateObjectProperty<File> gameDirProperty; private final ImmediateObjectProperty<File> gameDirProperty;
public ImmediateObjectProperty<File> getGameDirProperty() { public ImmediateObjectProperty<File> gameDirProperty() {
return gameDirProperty; return gameDirProperty;
} }
@@ -71,7 +71,7 @@ public final class Profile {
private final ImmediateStringProperty nameProperty; private final ImmediateStringProperty nameProperty;
public ImmediateStringProperty getNameProperty() { public ImmediateStringProperty nameProperty() {
return nameProperty; return nameProperty;
} }

View File

@@ -21,6 +21,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import javafx.beans.property.ObjectProperty; import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.text.Font; import javafx.scene.text.Font;
import org.jackhuang.hmcl.Main; import org.jackhuang.hmcl.Main;
import org.jackhuang.hmcl.auth.Account; import org.jackhuang.hmcl.auth.Account;
@@ -88,11 +89,11 @@ public class Settings {
save(); save();
if (!getProfileMap().containsKey(DEFAULT_PROFILE)) checkProfileMap();
getProfileMap().put(DEFAULT_PROFILE, new Profile());
for (Map.Entry<String, Profile> entry2 : getProfileMap().entrySet()) { for (Map.Entry<String, Profile> entry2 : getProfileMap().entrySet()) {
entry2.getValue().setName(entry2.getKey()); entry2.getValue().setName(entry2.getKey());
entry2.getValue().nameProperty().setChangedListener(this::profileNameChanged);
entry2.getValue().addPropertyChangedListener(e -> { entry2.getValue().addPropertyChangedListener(e -> {
save(); save();
}); });
@@ -365,8 +366,10 @@ public class Settings {
private Profile selectedProfile; private Profile selectedProfile;
public Profile getSelectedProfile() { public Profile getSelectedProfile() {
checkProfileMap();
if (!hasProfile(SETTINGS.getSelectedProfile())) { if (!hasProfile(SETTINGS.getSelectedProfile())) {
SETTINGS.setSelectedProfile(DEFAULT_PROFILE); SETTINGS.setSelectedProfile(getProfileMap().keySet().stream().findFirst().get());
Schedulers.computation().schedule(this::onProfileChanged); Schedulers.computation().schedule(this::onProfileChanged);
} }
return getProfile(SETTINGS.getSelectedProfile()); return getProfile(SETTINGS.getSelectedProfile());
@@ -380,15 +383,10 @@ public class Settings {
} }
public Profile getProfile(String name) { public Profile getProfile(String name) {
Profile p = getProfileMap().get(Lang.nonNull(name, DEFAULT_PROFILE)); checkProfileMap();
if (p == null)
if (getProfileMap().containsKey(DEFAULT_PROFILE)) Optional<Profile> p = name == null ? getProfileMap().values().stream().findFirst() : Optional.ofNullable(getProfileMap().get(name));
p = getProfileMap().get(DEFAULT_PROFILE); return p.orElse(null);
else {
p = new Profile();
getProfileMap().put(DEFAULT_PROFILE, p);
}
return p;
} }
public boolean hasProfile(String name) { public boolean hasProfile(String name) {
@@ -403,26 +401,28 @@ public class Settings {
return getProfileMap().values().stream().filter(t -> StringUtils.isNotBlank(t.getName())).collect(Collectors.toList()); return getProfileMap().values().stream().filter(t -> StringUtils.isNotBlank(t.getName())).collect(Collectors.toList());
} }
public boolean putProfile(Profile ver) { public void putProfile(Profile ver) {
if (ver == null || StringUtils.isBlank(ver.getName()) || getProfileMap().containsKey(ver.getName())) if (StringUtils.isBlank(ver.getName()))
return false; throw new IllegalArgumentException("Profile's name is empty");
getProfileMap().put(ver.getName(), ver); getProfileMap().put(ver.getName(), ver);
return true;
ver.nameProperty().setChangedListener(this::profileNameChanged);
} }
public boolean deleteProfile(Profile ver) { public void deleteProfile(Profile profile) {
return deleteProfile(ver.getName()); deleteProfile(profile.getName());
} }
public boolean deleteProfile(String ver) { public void deleteProfile(String profileName) {
if (Objects.equals(DEFAULT_PROFILE, ver)) { getProfileMap().remove(profileName);
return false; checkProfileMap();
} Schedulers.computation().schedule(this::onProfileLoading);
boolean flag = getProfileMap().remove(ver) != null; }
if (flag)
Schedulers.computation().schedule(this::onProfileLoading);
return flag; private void checkProfileMap() {
if (getProfileMap().isEmpty())
getProfileMap().put(DEFAULT_PROFILE, new Profile(DEFAULT_PROFILE));
} }
private void onProfileChanged() { private void onProfileChanged() {
@@ -430,6 +430,10 @@ public class Settings {
EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(SETTINGS, getSelectedProfile())); EventBus.EVENT_BUS.fireEvent(new ProfileChangedEvent(SETTINGS, getSelectedProfile()));
} }
private void profileNameChanged(ObservableValue<? extends String> observableValue, String oldValue, String newValue) {
getProfileMap().put(newValue, getProfileMap().remove(oldValue));
}
/** /**
* Start profiles loading process. * Start profiles loading process.
* Invoked by loading GUI phase. * Invoked by loading GUI phase.

View File

@@ -48,10 +48,22 @@ public class ImmediateStringProperty extends SimpleStringProperty {
super.unbind(); super.unbind();
} }
private Consumer<String> listener = Lang.EMPTY_CONSUMER; private Consumer<String> consumer = null;
private final ChangeListener<String> changeListener = (a, b, newValue) -> listener.accept(newValue); private ChangeListener<String> listener = null;
private final ChangeListener<String> changeListener = (a, b, newValue) -> {
if (consumer != null)
consumer.accept(newValue);
if (listener != null)
listener.changed(a, b, newValue);
};
public void setChangedListener(Consumer<String> listener) { public void setChangedListener(Consumer<String> consumer) {
this.consumer = Objects.requireNonNull(consumer);
this.listener = null;
}
public void setChangedListener(ChangeListener<String> listener) {
this.consumer = null;
this.listener = Objects.requireNonNull(listener); this.listener = Objects.requireNonNull(listener);
} }