summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pom.xml11
-rw-r--r--src/main/java/events/VSAbstractEvent.java7
-rw-r--r--src/main/java/events/internal/VSProtocolEvent.java32
-rw-r--r--src/main/java/prefs/VSDefaultPrefs.java1
-rw-r--r--src/main/java/serialize/VSSerialize.java43
-rw-r--r--src/main/resources/styles/main.css116
6 files changed, 190 insertions, 20 deletions
diff --git a/pom.xml b/pom.xml
index e31ec1c..6408f55 100644
--- a/pom.xml
+++ b/pom.xml
@@ -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