diff options
| -rw-r--r-- | pom.xml | 11 | ||||
| -rw-r--r-- | src/main/java/events/VSAbstractEvent.java | 7 | ||||
| -rw-r--r-- | src/main/java/events/internal/VSProtocolEvent.java | 32 | ||||
| -rw-r--r-- | src/main/java/prefs/VSDefaultPrefs.java | 1 | ||||
| -rw-r--r-- | src/main/java/serialize/VSSerialize.java | 43 | ||||
| -rw-r--r-- | src/main/resources/styles/main.css | 116 |
6 files changed, 190 insertions, 20 deletions
@@ -136,15 +136,6 @@ </dependency> <!-- GUI --> - <dependency> - <groupId>org.openjfx</groupId> - <artifactId>javafx-controls</artifactId> - <version>17.0.2</version> - </dependency> - <dependency> - <groupId>org.openjfx</groupId> - <artifactId>javafx-fxml</artifactId> - <version>17.0.2</version> - </dependency> + <!-- JavaFX dependencies removed for Swing rollback --> </dependencies> </project> diff --git a/src/main/java/events/VSAbstractEvent.java b/src/main/java/events/VSAbstractEvent.java index 52c2423..d11ccbd 100644 --- a/src/main/java/events/VSAbstractEvent.java +++ b/src/main/java/events/VSAbstractEvent.java @@ -228,7 +228,12 @@ abstract public class VSAbstractEvent extends VSSerializablePrefs { int id = ((Integer) objectInputStream.readObject()).intValue(); String savedEventShortname = (String) objectInputStream.readObject(); this.eventClassname = (String) objectInputStream.readObject(); - this.eventShortname = createShortname(savedEventShortname); + + // Always use current localization strings + this.eventShortname = VSRegisteredEvents.getShortnameByClassname(eventClassname); + if (this.eventShortname == null) { + this.eventShortname = createShortname(savedEventShortname); + } if (VSSerialize.DEBUG) { System.out.println("eventClassname: " + eventClassname); diff --git a/src/main/java/events/internal/VSProtocolEvent.java b/src/main/java/events/internal/VSProtocolEvent.java index de630e3..caf8b15 100644 --- a/src/main/java/events/internal/VSProtocolEvent.java +++ b/src/main/java/events/internal/VSProtocolEvent.java @@ -111,8 +111,10 @@ public class VSProtocolEvent extends VSAbstractInternalEvent protocol.isServer(isProtocolActivation); StringBuffer buffer = new StringBuffer(); - buffer.append(VSRegisteredEvents.getShortnameByClassname( - protocolClassname)); + buffer.append(VSRegisteredEvents.getShortnameByClassname(protocolClassname)); + if (buffer.length() == 0) { + buffer.append(protocolClassname); + } buffer.append(" "); buffer.append(isClientProtocol @@ -122,7 +124,7 @@ public class VSProtocolEvent extends VSAbstractInternalEvent buffer.append(" "); buffer.append(isProtocolActivation ? prefs.getString("lang.activated") - : prefs.getString("langactivated")); + : prefs.getString("lang.deactivated")); log(buffer.toString()); } @@ -162,14 +164,30 @@ public class VSProtocolEvent extends VSAbstractInternalEvent /** For later backwards compatibility, to add more stuff */ objectInputStream.readObject(); + // Set protocolClassname before calling createShortname protocolClassname = (String) objectInputStream.readObject(); + isClientProtocol = ((Boolean) objectInputStream.readObject()).booleanValue(); + isProtocolActivation = ((Boolean) objectInputStream.readObject()).booleanValue(); - isClientProtocol = ((Boolean) - objectInputStream.readObject()).booleanValue();; - isProtocolActivation = ((Boolean) - objectInputStream.readObject()).booleanValue();; + // Set the event shortname using current localization + this.setShortname(createShortname(null)); /** For later backwards compatibility, to add more stuff */ objectInputStream.readObject(); } + + protected String createShortname(String savedShortname) { + // Always use current localization strings + String protocolShortname = VSRegisteredEvents.getShortnameByClassname(protocolClassname); + if (protocolShortname == null) { + protocolShortname = protocolClassname; + } + String clientServer = isClientProtocol ? + prefs.getString("lang.client") : + prefs.getString("lang.server"); + String activateDeactivate = isProtocolActivation ? + prefs.getString("lang.activated") : + prefs.getString("lang.deactivated"); + return protocolShortname + " " + clientServer + " " + activateDeactivate; + } } diff --git a/src/main/java/prefs/VSDefaultPrefs.java b/src/main/java/prefs/VSDefaultPrefs.java index f980734..bc57098 100644 --- a/src/main/java/prefs/VSDefaultPrefs.java +++ b/src/main/java/prefs/VSDefaultPrefs.java @@ -49,6 +49,7 @@ public class VSDefaultPrefs extends VSSerializablePrefs { initString("lang.about.info", "This program used to be the diploma thesis of Paul C. Buetow. Please contact vs-sim@dev.buetow.org, if you find any errors!"); initString("lang.activate", "activate"); initString("lang.activated", "activated"); + initString("lang.deactivated", "deactivated"); initString("lang.actualize", "Activation"); initString("lang.all", "All"); initString("lang.antialiasing", "Anti-Aliasing"); diff --git a/src/main/java/serialize/VSSerialize.java b/src/main/java/serialize/VSSerialize.java index a6d3580..e8470e3 100644 --- a/src/main/java/serialize/VSSerialize.java +++ b/src/main/java/serialize/VSSerialize.java @@ -208,14 +208,53 @@ public final class VSSerialize { FileInputStream fileInputStream = new FileInputStream(filename); ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); + // Create new prefs with current localization VSDefaultPrefs prefs = new VSDefaultPrefs(); - prefs.deserialize(this, objectInputStream); - prefs.addWithDefaults(); + prefs.fillWithDefaults(); // This sets up current localization strings + + // Read the serialized prefs but don't use their strings + VSSerializablePrefs serializedPrefs = new VSSerializablePrefs(); + serializedPrefs.deserialize(this, objectInputStream); + + // Copy non-string values from serialized prefs + for (String key : serializedPrefs.getIntegerKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initInteger(key, serializedPrefs.getInteger(key)); + } + } + for (String key : serializedPrefs.getBooleanKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initBoolean(key, serializedPrefs.getBoolean(key)); + } + } + for (String key : serializedPrefs.getFloatKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initFloat(key, serializedPrefs.getFloat(key)); + } + } + for (String key : serializedPrefs.getColorKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initColor(key, serializedPrefs.getColor(key)); + } + } + for (String key : serializedPrefs.getVectorKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initVector(key, serializedPrefs.getVector(key)); + } + } + for (String key : serializedPrefs.getLongKeySet()) { + if (!key.startsWith("lang.")) { + prefs.initLong(key, serializedPrefs.getLong(key)); + } + } this.setObject("prefs", prefs); simulator = new VSSimulator(prefs, simulatorFrame); simulatorFrame.addSimulator(simulator); + + // Store the current prefs in the serialize object for use during deserialization + this.setObject("current_prefs", prefs); simulator.deserialize(this, objectInputStream); } catch (Exception e) { diff --git a/src/main/resources/styles/main.css b/src/main/resources/styles/main.css new file mode 100644 index 0000000..5fcbeaf --- /dev/null +++ b/src/main/resources/styles/main.css @@ -0,0 +1,116 @@ +/* Main container styles */ +.main-container { + -fx-background-color: #f5f5f5; +} + +/* Top container styles */ +.top-container { + -fx-background-color: #ffffff; + -fx-effect: dropshadow(gaussian, rgba(0,0,0,0.1), 10, 0, 0, 2); +} + +/* Menu styles */ +.main-menu { + -fx-background-color: #ffffff; +} + +.main-menu .menu { + -fx-padding: 5 10; +} + +.main-menu .menu-item { + -fx-padding: 5 10; +} + +.main-menu .menu-item:hover { + -fx-background-color: #f0f0f0; +} + +/* Toolbar styles */ +.main-toolbar { + -fx-background-color: #ffffff; + -fx-padding: 5; + -fx-spacing: 5; +} + +.toolbar-button { + -fx-background-color: transparent; + -fx-padding: 5 10; + -fx-cursor: hand; +} + +.toolbar-button:hover { + -fx-background-color: #f0f0f0; + -fx-background-radius: 3; +} + +/* Tab pane styles */ +.simulator-tabs { + -fx-background-color: #ffffff; +} + +.simulator-tabs .tab-header-area .tab-header-background { + -fx-background-color: #ffffff; +} + +.simulator-tabs .tab { + -fx-background-color: #f0f0f0; + -fx-padding: 5 15; +} + +.simulator-tabs .tab:selected { + -fx-background-color: #ffffff; + -fx-border-color: #e0e0e0; + -fx-border-width: 0 0 2 0; +} + +/* Button styles */ +.start-button { + -fx-graphic: url('/icons/start.png'); +} + +.pause-button { + -fx-graphic: url('/icons/pause.png'); +} + +.reset-button { + -fx-graphic: url('/icons/reset.png'); +} + +.replay-button { + -fx-graphic: url('/icons/replay.png'); +} + +/* General styles */ +.button { + -fx-background-color: #ffffff; + -fx-border-color: #e0e0e0; + -fx-border-radius: 3; + -fx-padding: 5 10; +} + +.button:hover { + -fx-background-color: #f0f0f0; +} + +.button:pressed { + -fx-background-color: #e0e0e0; +} + +/* Dialog styles */ +.dialog-pane { + -fx-background-color: #ffffff; +} + +.dialog-pane .header-panel { + -fx-background-color: #f5f5f5; +} + +.dialog-pane .button-bar .button { + -fx-background-color: #2196f3; + -fx-text-fill: white; +} + +.dialog-pane .button-bar .button:hover { + -fx-background-color: #1976d2; +}
\ No newline at end of file |
