Skip to content

Commit 85d80b6

Browse files
Release 1.1.4 follow-up: palette, presets, i18n, settings key
- Palette: Code erzeugen button under trash; English palette If/tooltip wording - Element presets: two options only; elementlabelpreset + legacy migration - DE/EN/pt_PT structure labels (loops, Fallauswahl); preset labels Java-like / Oberflächensprache Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2c2be03 commit 85d80b6

8 files changed

Lines changed: 114 additions & 104 deletions

File tree

‎src/main/java/de/visustruct/control/GlobalSettings.java‎

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -313,16 +313,30 @@ private static void applySettingsFromProperties(Properties pr) {
313313
}
314314
}
315315

316-
s = pr.getProperty("elementbeschriftungpreset");
317-
if (s != null) {
316+
/* Neu: elementlabelpreset = 0 (Java) | 1 (didaktisch/UI-Sprache). Legacy: elementbeschriftungpreset 0–4. */
317+
s = pr.getProperty("elementlabelpreset");
318+
if (s != null && !s.isBlank()) {
318319
try {
319320
int p = Integer.parseInt(s.trim());
320-
if (p >= 0 && p < ElementBeschriftungPresets.ANZAHL_PRESETS) {
321+
if (p == ElementBeschriftungPresets.PRESET_ENGLISH_JAVA
322+
|| p == ElementBeschriftungPresets.PRESET_DIDACTIC_I18N) {
321323
elementBeschriftungPresetIndex = p;
322324
}
323325
} catch (NumberFormatException ignored) {
324326
// ungültig → Standard beibehalten
325327
}
328+
} else {
329+
s = pr.getProperty("elementbeschriftungpreset");
330+
if (s != null && !s.isBlank()) {
331+
try {
332+
int p = Integer.parseInt(s.trim());
333+
if (p >= 0 && p <= 4) {
334+
elementBeschriftungPresetIndex = ElementBeschriftungPresets.migrateLegacyPresetIndex(p);
335+
}
336+
} catch (NumberFormatException ignored) {
337+
// ungültig → Standard beibehalten
338+
}
339+
}
326340
}
327341

328342
s = pr.getProperty("uilanguage");
@@ -378,7 +392,7 @@ public static void saveSettings(){
378392

379393
properties.setProperty("lookandfeel", ""+lookAndFeelAktuell);
380394

381-
properties.setProperty("elementbeschriftungpreset", "" + elementBeschriftungPresetIndex);
395+
properties.setProperty("elementlabelpreset", "" + elementBeschriftungPresetIndex);
382396

383397
properties.setProperty("uilanguage", uiLanguageTag);
384398

‎src/main/java/de/visustruct/view/AuswahlPanel.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class AuswahlPanel extends JPanel implements DropTargetListener, DragGest
5656
private static final long serialVersionUID = 3619714917985247680L;
5757
private AuswahlPanelElement[] panelElemente = new AuswahlPanelElement[9]; //9 StruktogrammElemente stehen zur Auswahl
5858
private JButton palettePngButton;
59+
private JButton paletteCodeGenButton;
5960
private JButton paletteInfoButton;
6061
private DragSource dragSource;
6162
private JButton muelleimer;
@@ -121,6 +122,14 @@ public AuswahlPanel(Controlling controlling){
121122
muelleimerTooltipSetzen();
122123
add(muelleimer, c);
123124

125+
c.gridy++;
126+
paletteCodeGenButton = paletteAktionsButton(I18n.tr("palette.generateCode"));
127+
paletteCodeGenButton.setToolTipText(I18n.tr("menu.file.generateCode"));
128+
paletteCodeGenButton.getAccessibleContext().setAccessibleName(I18n.tr("palette.generateCode"));
129+
paletteCodeGenButton.addActionListener(e -> new CodeErzeuger(controlling.getGUI(),
130+
I18n.tr("menu.file.generateCode"), true, controlling.gibAktuellesStruktogramm()));
131+
add(paletteCodeGenButton, c);
132+
124133
c.gridy++;
125134
c.insets = new Insets(1, 0, 3, 0);
126135

@@ -205,6 +214,11 @@ public void aktualisiereBeschriftungen(){
205214
muelleimer.setForeground(paletteTrashBaseColor());
206215
muelleimerTooltipSetzen();
207216
muelleimerIconZumAktuellenZustand();
217+
if (paletteCodeGenButton != null) {
218+
paletteCodeGenButton.setText(I18n.tr("palette.generateCode"));
219+
paletteCodeGenButton.setToolTipText(I18n.tr("menu.file.generateCode"));
220+
paletteCodeGenButton.getAccessibleContext().setAccessibleName(I18n.tr("palette.generateCode"));
221+
}
208222
if (palettePngButton != null) {
209223
palettePngButton.setText(I18n.tr("palette.exportPng"));
210224
}

‎src/main/java/de/visustruct/view/ElementBeschriftungPresets.java‎

Lines changed: 33 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,48 +7,33 @@
77

88
/**
99
* Fest vorgegebene Textvorlagen für neu eingefügte Elemente (keine freie Eingabe).
10+
* Zwei Pakete — wie VisuStruct-SwiftUI: syntaxnahe Java-Vorgaben oder Begriffe gemäß Oberflächensprache.
1011
* Muss dieselbe Länge haben wie {@link EinstellungsDialog#anzahlStruktogrammElemente}.
1112
*/
1213
public final class ElementBeschriftungPresets {
1314

14-
public static final int PRESET_KLASSISCH = 0;
15-
public static final int PRESET_FORMAL = 1;
16-
public static final int PRESET_JAVA_NA = 2;
17-
/** Syntaxnahe Java-Vorgaben — Programm-Standard; neue Blöcke mit Platzhaltertext, Palette mit {@link #javaStandardPaletteButtonLabel(int)}. */
18-
public static final int PRESET_ENGLISH_JAVA = 3;
19-
/** Didaktische Begriffe gemäß UI-Sprache ({@link StructureElementI18n}). */
20-
public static final int PRESET_DIDACTIC_I18N = 4;
21-
public static final int ANZAHL_PRESETS = 5;
15+
/** Syntaxnahe Java-Vorgaben; Palette mit {@link #javaStandardPaletteButtonLabel(int)}. */
16+
public static final int PRESET_ENGLISH_JAVA = 0;
17+
/** Begriffe und Platzhalter gemäß gewählter Oberflächensprache ({@link StructureElementI18n}). */
18+
public static final int PRESET_DIDACTIC_I18N = 1;
19+
public static final int ANZAHL_PRESETS = 2;
2220

23-
/**
24-
* Reihenfolge im Dialog „Beschriftung (Struktogramm)“: zuerst Java (syntaxnah), danach
25-
* {@link #PRESET_DIDACTIC_I18N} — Standardtexte in der <b>gewählten Oberflächensprache</b> —, dann die
26-
* fest deutschsprachigen Pakete (Formal, Java-ähnlich, Klassisch).
27-
*/
2821
public static final int[] PRESET_DIALOG_REIHENFOLGE = {
2922
PRESET_ENGLISH_JAVA,
3023
PRESET_DIDACTIC_I18N,
31-
PRESET_FORMAL,
32-
PRESET_JAVA_NA,
33-
PRESET_KLASSISCH,
3424
};
3525

3626
private static final int N = 10;
3727

38-
private static final String[][] PRESETS = {
39-
{"Anweisung", "Verzweigung", "Fallauswahl", "0 < i < anzahl", "While Schleife", "Do-While Schleife",
40-
"Endlosschleife", "Aussprung", "Aufruf", "\u00f8"},
41-
{"Anweisung", "Verzweigung", "Fallauswahl", "Z\u00e4hlergesteuerte Schleife", "Kopfgesteuerte Schleife",
42-
"Fu\u00dfgesteuerte Schleife", "Endlosschleife", "Aussprung", "Aufruf", "Leeres Element"},
43-
{"Anweisung", "if (Verzweigung)", "switch (Auswahl)", "For Schleife", "While Schleife", "Do-While Schleife",
44-
"Endlosschleife", "Aussprung", "Aufruf", "Leeres Element"},
45-
{"Statement", "condition", "selector", "i = 0; i < n; i++",
46-
"condition", "condition", "\u221e", "break", "method()", "\u00f8"},
28+
/** Standardtexte für {@link #PRESET_ENGLISH_JAVA} (Platzhalter in neuen Blöcken). */
29+
private static final String[] ENGLISH_JAVA_ROW = {
30+
"Statement", "condition", "selector", "i = 0; i < n; i++",
31+
"condition", "condition", "\u221e", "break", "method()", "\u00f8",
4732
};
4833

4934
/**
50-
* Nur Palette bei {@link #PRESET_ENGLISH_JAVA}: echte Java-Schlüsselwörter / übliche Kurzformen (nicht {@code condition} für alles).
51-
* Reihenfolge = Elementtypen 0–9 wie {@link #PRESETS}.
35+
* Nur Palette bei {@link #PRESET_ENGLISH_JAVA}: echte Java-Schlüsselwörter / übliche Kurzformen
36+
* (nicht {@code condition} für alles).
5237
*/
5338
private static final String[] JAVA_STANDARD_PALETTE_LABELS = {
5439
"Statement",
@@ -64,25 +49,32 @@ public final class ElementBeschriftungPresets {
6449
};
6550

6651
static {
67-
if (PRESETS.length != ANZAHL_PRESETS - 1) {
68-
throw new IllegalStateException("Preset-Anzahl");
69-
}
7052
if (PRESET_DIALOG_REIHENFOLGE.length != ANZAHL_PRESETS) {
7153
throw new IllegalStateException("Preset-Dialog-Reihenfolge");
7254
}
7355
if (JAVA_STANDARD_PALETTE_LABELS.length != N) {
7456
throw new IllegalStateException("Java-Palette-L\u00e4nge");
7557
}
76-
for (String[] row : PRESETS) {
77-
if (row.length != N) {
78-
throw new IllegalStateException("Preset-L\u00e4nge");
79-
}
58+
if (ENGLISH_JAVA_ROW.length != N) {
59+
throw new IllegalStateException("English-Java-Preset-L\u00e4nge");
8060
}
8161
}
8262

8363
private ElementBeschriftungPresets() {
8464
}
8565

66+
/**
67+
* Alte Einstellungen (0–4) aus {@code elementbeschriftungpreset} auf die zwei verbleibenden
68+
* Presets abbilden.
69+
*/
70+
public static int migrateLegacyPresetIndex(int legacy) {
71+
return switch (legacy) {
72+
case 0, 1, 4 -> PRESET_DIDACTIC_I18N;
73+
case 2, 3 -> PRESET_ENGLISH_JAVA;
74+
default -> PRESET_ENGLISH_JAVA;
75+
};
76+
}
77+
8678
/** Gespeichertes Preset → Index der zugehörigen Radio-Option im Dialog. */
8779
public static int dialogPlatzFuerPreset(int presetIndex) {
8880
for (int u = 0; u < PRESET_DIALOG_REIHENFOLGE.length; u++) {
@@ -110,30 +102,21 @@ public static String javaStandardPaletteButtonLabel(int typ) {
110102
}
111103

112104
public static String getPresetAnzeigename(int index) {
113-
switch (index) {
114-
case PRESET_KLASSISCH:
115-
return I18n.tr("elementPreset.classic");
116-
case PRESET_FORMAL:
117-
return I18n.tr("elementPreset.formal");
118-
case PRESET_JAVA_NA:
119-
return I18n.tr("elementPreset.javaLikeDe");
120-
case PRESET_ENGLISH_JAVA:
121-
return I18n.tr("elementPreset.englishJava");
122-
case PRESET_DIDACTIC_I18N:
123-
return I18n.tr("menu.settings.labelsStruktogramm");
124-
default:
125-
return I18n.tr("elementPreset.englishJava");
126-
}
105+
return switch (index) {
106+
case PRESET_ENGLISH_JAVA -> I18n.tr("elementPreset.englishJava");
107+
case PRESET_DIDACTIC_I18N -> I18n.tr("elementPreset.didacticUiLanguage");
108+
default -> I18n.tr("elementPreset.englishJava");
109+
};
127110
}
128111

129112
public static String[] gibPresetZeile(int index) {
130113
if (index == PRESET_DIDACTIC_I18N) {
131114
return StructureElementI18n.didacticDefaultTexts();
132115
}
133116
if (index < 0 || index >= ANZAHL_PRESETS) {
134-
return PRESETS[PRESET_ENGLISH_JAVA];
117+
return Arrays.copyOf(ENGLISH_JAVA_ROW, N);
135118
}
136-
return PRESETS[index];
119+
return Arrays.copyOf(ENGLISH_JAVA_ROW, N);
137120
}
138121

139122
public static String[] kopierePreset(int index) {

‎src/main/java/de/visustruct/view/StruktogrammPalette.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public static String getPaletteButtonKurzEnglish(int typ) {
2121
case 0:
2222
return "Statement";
2323
case 1:
24-
return "Branch";
24+
return "If";
2525
case 2:
2626
return "Switch";
2727
case 3:
@@ -47,7 +47,7 @@ public static String getPaletteElementTooltipEnglish(int typ) {
4747
case 0:
4848
return "Statement — simple action or assignment";
4949
case 1:
50-
return "If — conditional branch";
50+
return "If / else — decision";
5151
case 2:
5252
return "Switch — multi-way selection";
5353
case 3:

‎src/main/resources/de/visustruct/i18n/Messages.properties‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,31 +133,30 @@ fileChooser.newFolderError=Could not create new folder.
133133
# Structure block names (didactic; order = element types 0–9)
134134
structure.element.statement=Statement
135135
structure.element.decision=Decision
136-
structure.element.multiway=Multi-way selection
137-
structure.element.forLoop=Counter loop (repetition)
138-
structure.element.whileLoop=Pre-test loop (repetition)
139-
structure.element.doWhileLoop=Post-test loop (repetition)
136+
structure.element.multiway=Switch (multi-way)
137+
structure.element.forLoop=For loop
138+
structure.element.whileLoop=While loop
139+
structure.element.doWhileLoop=Do-while loop
140140
structure.element.infiniteLoop=Infinite loop
141-
structure.element.breakExit=Break (exit)
141+
structure.element.breakExit=Break
142142
structure.element.call=Call
143143
structure.element.empty=Empty block
144144

145+
# Short palette labels (interface language preset)
145146
structure.palette.statement=Statement
146147
structure.palette.decision=If
147148
structure.palette.multiway=Switch
148-
structure.palette.forLoop=For
149-
structure.palette.whileLoop=While
150-
structure.palette.doWhileLoop=Do-while
149+
structure.palette.forLoop=For loop
150+
structure.palette.whileLoop=While loop
151+
structure.palette.doWhileLoop=Do-while loop
151152
structure.palette.infiniteLoop=Infinite loop
152153
structure.palette.breakExit=Break
153154
structure.palette.call=Call
154155
structure.palette.empty=Empty
155156
structure.multiway.defaultCaseLabel=default
156157

157-
elementPreset.classic=Classic (school, German)
158-
elementPreset.formal=Formal (German)
159-
elementPreset.javaLikeDe=German, Java-like
160-
elementPreset.englishJava=Java (Default)
158+
elementPreset.englishJava=Java-like
159+
elementPreset.didacticUiLanguage=Interface language
161160

162161
dialog.elementText.title=Settings — default block texts
163162
dialog.elementText.intro=Default text for <b>newly inserted</b> structure-chart blocks.
@@ -191,5 +190,6 @@ palette.exportPng=Export PNG
191190
palette.aboutVisuStruct=About VisuStruct
192191
palette.aboutTooltip=About VisuStruct
193192
palette.deleteElement=Delete block
193+
palette.generateCode=Generate code
194194
palette.trashDrop=Drop here to delete
195195
palette.trashClick=Click to delete the selected block

‎src/main/resources/de/visustruct/i18n/Messages_de.properties‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,33 +133,31 @@ fileChooser.newFolderError=Neuer Ordner konnte nicht angelegt werden.
133133
# Didaktische / fachliche Namen der Strukturblöcke (Reihenfolge = Elementtypen 0–9)
134134
structure.element.statement=Anweisung
135135
structure.element.decision=Verzweigung
136-
structure.element.multiway=Mehrfachauswahl
137-
structure.element.forLoop=Zählschleife (Wiederholung)
138-
structure.element.whileLoop=Kopfgesteuerte Schleife (Wiederholung)
139-
structure.element.doWhileLoop=Fußgesteuerte Schleife (Wiederholung)
136+
structure.element.multiway=Fallauswahl
137+
structure.element.forLoop=For-Schleife
138+
structure.element.whileLoop=While-Schleife
139+
structure.element.doWhileLoop=Do-while-Schleife
140140
structure.element.infiniteLoop=Endlosschleife
141141
structure.element.breakExit=Aussprung
142142
structure.element.call=Aufruf
143143
structure.element.empty=Leeres Element
144144

145-
# Kurze Paletten-Buttons (Preset „Beschriftung (Struktogramm)“)
145+
# Kurze Paletten-Buttons (Preset „Oberflächensprache“)
146146
structure.palette.statement=Anweisung
147147
structure.palette.decision=Verzweigung
148148
structure.palette.multiway=Fallauswahl
149-
structure.palette.forLoop=For
150-
structure.palette.whileLoop=While
151-
structure.palette.doWhileLoop=Do-while
149+
structure.palette.forLoop=For-Schleife
150+
structure.palette.whileLoop=While-Schleife
151+
structure.palette.doWhileLoop=Do-while-Schleife
152152
structure.palette.infiniteLoop=Endlosschleife
153153
structure.palette.breakExit=Aussprung
154154
structure.palette.call=Aufruf
155155
structure.palette.empty=Leer
156156
# Letzte Spalte bei switch/Mehrfachauswahl: Java-Schlüsselwort default (nicht else)
157157
structure.multiway.defaultCaseLabel=default
158158

159-
elementPreset.classic=Klassisch (Schule, deutsch)
160-
elementPreset.formal=Formal (deutsch)
161-
elementPreset.javaLikeDe=Deutsch, Java-ähnlich
162-
elementPreset.englishJava=Java (Standard)
159+
elementPreset.englishJava=Java-like
160+
elementPreset.didacticUiLanguage=Oberflächensprache
163161

164162
dialog.elementText.title=Einstellungen — Textvorlagen
165163
dialog.elementText.intro=Standardtexte für <b>neu eingefügte</b> Struktogramm-Elemente.
@@ -194,5 +192,6 @@ palette.exportPng=PNG exportieren
194192
palette.aboutVisuStruct=Über VisuStruct
195193
palette.aboutTooltip=Über VisuStruct
196194
palette.deleteElement=Element löschen
195+
palette.generateCode=Code erzeugen
197196
palette.trashDrop=Zum Löschen hier ablegen
198197
palette.trashClick=Markiertes Element per Klick löschen

‎src/main/resources/de/visustruct/i18n/Messages_en.properties‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,31 +133,30 @@ fileChooser.newFolderError=Could not create new folder.
133133
# Structure block names (didactic; order = element types 0–9)
134134
structure.element.statement=Statement
135135
structure.element.decision=Decision
136-
structure.element.multiway=Multi-way selection
137-
structure.element.forLoop=Counter loop (repetition)
138-
structure.element.whileLoop=Pre-test loop (repetition)
139-
structure.element.doWhileLoop=Post-test loop (repetition)
136+
structure.element.multiway=Switch (multi-way)
137+
structure.element.forLoop=For loop
138+
structure.element.whileLoop=While loop
139+
structure.element.doWhileLoop=Do-while loop
140140
structure.element.infiniteLoop=Infinite loop
141-
structure.element.breakExit=Break (exit)
141+
structure.element.breakExit=Break
142142
structure.element.call=Call
143143
structure.element.empty=Empty block
144144

145+
# Short palette labels (interface language preset)
145146
structure.palette.statement=Statement
146147
structure.palette.decision=If
147148
structure.palette.multiway=Switch
148-
structure.palette.forLoop=For
149-
structure.palette.whileLoop=While
150-
structure.palette.doWhileLoop=Do-while
149+
structure.palette.forLoop=For loop
150+
structure.palette.whileLoop=While loop
151+
structure.palette.doWhileLoop=Do-while loop
151152
structure.palette.infiniteLoop=Infinite loop
152153
structure.palette.breakExit=Break
153154
structure.palette.call=Call
154155
structure.palette.empty=Empty
155156
structure.multiway.defaultCaseLabel=default
156157

157-
elementPreset.classic=Classic (school, German)
158-
elementPreset.formal=Formal (German)
159-
elementPreset.javaLikeDe=German, Java-like
160-
elementPreset.englishJava=Java (Default)
158+
elementPreset.englishJava=Java-like
159+
elementPreset.didacticUiLanguage=Interface language
161160

162161
dialog.elementText.title=Settings — default block texts
163162
dialog.elementText.intro=Default text for <b>newly inserted</b> structure-chart blocks.
@@ -191,5 +190,6 @@ palette.exportPng=Export PNG
191190
palette.aboutVisuStruct=About VisuStruct
192191
palette.aboutTooltip=About VisuStruct
193192
palette.deleteElement=Delete block
193+
palette.generateCode=Generate code
194194
palette.trashDrop=Drop here to delete
195195
palette.trashClick=Click to delete the selected block

0 commit comments

Comments
 (0)