summaryrefslogtreecommitdiffstats
path: root/dozentenmodul
diff options
context:
space:
mode:
authorSimon Rettberg2018-11-21 11:44:36 +0100
committerSimon Rettberg2018-11-21 11:44:36 +0100
commit64eb5cc2b4d62d00694957c7fcf04cb3053aff00 (patch)
tree8e579fd092800873e7b3262d44da394f1814c43f /dozentenmodul
parent[client] VM-Versions -> VM-Versionen (diff)
downloadtutor-module-64eb5cc2b4d62d00694957c7fcf04cb3053aff00.tar.gz
tutor-module-64eb5cc2b4d62d00694957c7fcf04cb3053aff00.tar.xz
tutor-module-64eb5cc2b4d62d00694957c7fcf04cb3053aff00.zip
[client] Add setting to mute/unmute sound at startup
Diffstat (limited to 'dozentenmodul')
-rwxr-xr-xdozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/RunscriptConfigurator.java262
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java2
2 files changed, 173 insertions, 91 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/RunscriptConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/RunscriptConfigurator.java
index 5323a215..635ec7c9 100755
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/RunscriptConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/RunscriptConfigurator.java
@@ -11,6 +11,7 @@ import java.io.IOException;
import java.io.StringReader;
import java.util.EventListener;
import java.util.EventObject;
+import java.util.HashMap;
import javax.swing.Box;
import javax.swing.DefaultComboBoxModel;
@@ -19,56 +20,23 @@ import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor;
-import org.openslx.dozmod.gui.configurator.RunscriptConfigurator.RunscriptType;
-import org.openslx.dozmod.gui.configurator.RunscriptConfigurator.RunscriptVisibility;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.control.WordWrapLabel;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.TextChangeListener;
+import org.openslx.util.Util;
/**
* Widget for advanced configuration options for lectures. This handles
- * following options - Network rules - Runscript - USB
+ * Runscript
*/
public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
private static final long serialVersionUID = -3497629601818983994L;
-
- public static enum RunscriptType {
- SHELL("Shellskript", "sh"), BATCH("Windows-Batch", "bat");
-
- private final String displayName;
- private final String extension;
-
- private RunscriptType(String name, String extension) {
- this.displayName = name;
- this.extension = extension;
- }
-
- @Override
- public String toString() {
- return extension + " (" + displayName + ")";
- }
- }
-
- public static enum RunscriptVisibility {
- NORMAL("Normal", 1), MINIMIZED("Minimiert", 2), HIDDEN("Versteckt", 0);
-
- private final String displayName;
- private final int flag;
-
- private RunscriptVisibility(String name, int flag) {
- this.displayName = name;
- this.flag = flag;
- }
-
- @Override
- public String toString() {
- return displayName;
- }
- }
+
+ private RsSettings runscriptSettings = new RsSettings(null);
public RunscriptConfigurator() {
super();
@@ -112,31 +80,21 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
// handle user input, this is tricky since
// * either an item has been selected -> editorContent will be of our enum type
// * user typed its own interpreter into the box -> editorContent will be a castable String
- String extension = null;
Object cboContent = cboRunscriptType.getEditor().getItem();
if (cboContent instanceof RunscriptType) {
- extension = ((RunscriptType) cboContent).extension;
+ runscriptSettings.put(Field.EXTENSION, ((RunscriptType) cboContent).extension);
} else if (cboContent instanceof String) {
- extension = (String) cboContent;
+ runscriptSettings.put(Field.EXTENSION, (String) cboContent);
}
String taInputText = taRunScript.getText();
- if (taInputText.isEmpty())
- return "";
- if (extension == null || extension.isEmpty()) {
- // this should never happen, so return null to report this invalid state
- setError("Fehlende Dateinamenerweiterung!");
- return null;
- }
RunscriptVisibility visibility = (RunscriptVisibility) cboRunscriptVisibility.getSelectedItem();
- if (visibility == null) {
- // this should never happen, so return null to report this invalid state
- setError("Fehlendes Sichtbarkeits-Flag!");
- return null;
- }
+ runscriptSettings.put(Field.VISIBILITY, Integer.toString(visibility.value));
+ SoundState sound = (SoundState)cboSoundState.getSelectedItem();
+ runscriptSettings.put(Field.MUTED, Integer.toString(sound.value));
setError("");
- return "ext=" + extension + ";" + "visibility=" + visibility.flag + "\n" + taInputText;
+ return runscriptSettings.serialize() + "\n" + taInputText;
}
/**
@@ -154,37 +112,37 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
return;
}
String header = null;
- try {
- BufferedReader reader = new BufferedReader(new StringReader(config));
+ try (BufferedReader reader = new BufferedReader(new StringReader(config))) {
header = reader.readLine();
- reader.close();
} catch (IOException e) {
// swallow ...
}
if (header != null) {
- // we should have following format: ext=<interpreter>;visibility=<flag>
- // e.g. ext=sh;scriptVisibility=0
- String[] options = header.split(";");
- String extension = null;
- for (String option : options) {
- if(option.startsWith("ext=")) {
- extension = option.replace("ext=", "");
- for (RunscriptType type : RunscriptType.values()) {
- if (type.extension.equals(extension)) {
- cboRunscriptType.setSelectedItem(type);
- // mark that we found it by nulling the shebang...
- extension = null;
- break;
- }
- }
- } else if (option.startsWith("visibility=")) {
- option = option.replace("visibility=", "");
- for (RunscriptVisibility windowFlag : RunscriptVisibility.values()) {
- if (windowFlag.flag == Integer.parseInt(option)) {
- cboRunscriptVisibility.setSelectedItem(windowFlag);
- break;
- }
- }
+ // we should have following format: ext=<interpreter/extension>;visibility=<flag>;...
+ // e.g. ext=sh;visibility=0
+ runscriptSettings.deserialize(header);
+ String extension = runscriptSettings.get(Field.EXTENSION);
+ for (RunscriptType type : RunscriptType.values()) {
+ if (type.extension.equals(extension)) {
+ cboRunscriptType.setSelectedItem(type);
+ // mark that we found it by nulling the shebang...
+ extension = null;
+ break;
+ }
+ }
+ int visibility = Util.parseInt(runscriptSettings.get(Field.VISIBILITY), 1);
+ for (RunscriptVisibility windowFlag : RunscriptVisibility.values()) {
+ if (windowFlag.value == visibility) {
+ cboRunscriptVisibility.setSelectedItem(windowFlag);
+ break;
+ }
+ }
+ cboSoundState.setSelectedItem(SoundState.DEFAULT);
+ int mute = Util.parseInt(runscriptSettings.get(Field.MUTED), -1);
+ for (SoundState s : SoundState.values()) {
+ if (s.value == mute) {
+ cboSoundState.setSelectedItem(s);
+ break;
}
}
@@ -195,7 +153,7 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
}
// finished with the interpreter, remove that line from the given config
// before setting that text
- taRunScript.setText(config.replaceFirst(header + "\n", ""));
+ taRunScript.setText(config.replaceFirst(".*?\n", ""));
}
/**
@@ -243,6 +201,69 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout {
changeMonitor.add(taRunScript);
changeMonitor.addEditableCombo(cboRunscriptType, null);
changeMonitor.addFixedCombo(cboRunscriptVisibility, null);
+ changeMonitor.addFixedCombo(cboSoundState, null);
+ }
+
+ private static enum Field {
+ EXTENSION("ext"),
+ VISIBILITY("visibility"),
+ MUTED("soundMuted");
+ public final String id;
+
+ Field(String id) {
+ this.id = id;
+ }
+ }
+
+ /**
+ * Map holding the inline settings from line 1 of the script
+ */
+ private static class RsSettings extends HashMap<String, String> {
+ private static final long serialVersionUID = -5893345450266600626L;
+
+ public RsSettings(String data) {
+ super();
+ deserialize(data);
+ }
+
+ public String put(Field key, String value) {
+ value = value.replace(';', '_').replace('\r', '_').replace('\n', '_');
+ return super.put(key.id, value);
+ }
+
+ public String get(Field key)
+ {
+ String ret = super.get(key.id);
+ if (ret == null)
+ return "";
+ return ret;
+ }
+
+ public String serialize() {
+ StringBuilder sb = new StringBuilder();
+ for (Entry<String, String> e : this.entrySet()) {
+ if (sb.length() != 0) {
+ sb.append(';');
+ }
+ sb.append(e.getKey());
+ sb.append('=');
+ sb.append(e.getValue());
+ }
+ return sb.toString();
+ }
+
+ public void deserialize(String data) {
+ if (data == null)
+ return;
+ clear();
+ String[] parts = data.split(";");
+ for (String s : parts) {
+ String[] entry = s.split("=");
+ if (entry.length == 2) {
+ put(entry[0], entry[1]);
+ }
+ }
+ }
}
}
@@ -255,24 +276,34 @@ class RunscriptConfiguratorLayout extends JPanel {
private static final long serialVersionUID = 648729071828404053L;
- private final static String txtRunScriptDesc = "Ein hier eingetragenes Skript wird nach dem Start dieser VM automatisch ausgeführt.";
+ private final static String RUN_SCRIPT_HELP = "Ein hier eingetragenes Skript wird nach dem Start"
+ + " der VM automatisch ausgeführt.";
protected final QLabel lblError;
protected final JTextArea taRunScript;
protected final ComboBox<RunscriptType> cboRunscriptType;
protected final ComboBox<RunscriptVisibility> cboRunscriptVisibility;
+ protected final ComboBox<SoundState> cboSoundState;
public RunscriptConfiguratorLayout() {
-
GridManager grid = new GridManager(this, 2, true, new Insets(5, 5, 5, 5));
- taRunScript = new JTextArea("", 5, 20);
- JScrollPane scpRunScript = new JScrollPane(taRunScript,
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
- taRunScript.setLineWrap(true);
- taRunScript.setWrapStyleWord(true);
- grid.add(new WordWrapLabel(txtRunScriptDesc, false, true), 2)
+ grid.add(new QLabel("Audio"));
+ cboSoundState = new ComboBox<>(new ComboBoxRenderer<SoundState>() {
+ @Override
+ public String renderItem(SoundState item) {
+ return item.displayName;
+ }
+ });
+ cboSoundState.setModel(new DefaultComboBoxModel<SoundState>(SoundState.values()));
+ grid.add(cboSoundState).fill(true, false).expand(true, false);
+ grid.nextRow();
+
+ grid.add(Box.createVerticalStrut(4), 2);
+ grid.nextRow();
+
+ grid.add(new WordWrapLabel(RUN_SCRIPT_HELP, false, true), 2)
.fill(true, false).expand(true, false);
grid.nextRow();
+
cboRunscriptType = new ComboBox<RunscriptType>(
new ComboBoxRenderer<RunscriptType>() {
@Override
@@ -290,12 +321,13 @@ class RunscriptConfiguratorLayout extends JPanel {
grid.add(cboRunscriptType).fill(true, false)
.expand(true, false);
grid.nextRow();
+
cboRunscriptVisibility = new ComboBox<RunscriptVisibility>(new ComboBoxRenderer<RunscriptVisibility>() {
@Override
public String renderItem(RunscriptVisibility item) {
if (item == null)
return null;
- return item.toString();
+ return item.displayName;
}
});
cboRunscriptVisibility.setModel(new DefaultComboBoxModel<RunscriptVisibility>(RunscriptVisibility.values()));
@@ -304,8 +336,16 @@ class RunscriptConfiguratorLayout extends JPanel {
grid.add(cboRunscriptVisibility).fill(true, false)
.expand(true, false);
grid.nextRow();
+
+ taRunScript = new JTextArea("", 5, 20);
+ JScrollPane scpRunScript = new JScrollPane(taRunScript,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
+ JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
+ taRunScript.setLineWrap(true);
+ taRunScript.setWrapStyleWord(true);
grid.add(scpRunScript, 2).fill(true, true).expand(true, true);
grid.nextRow();
+
lblError = new QLabel("");
lblError.setForeground(Color.RED);
JPanel pnlError = new JPanel();
@@ -314,6 +354,48 @@ class RunscriptConfiguratorLayout extends JPanel {
pnlError.add(Box.createGlue());
grid.add(pnlError, 2).fill(true, false).expand(true, false);
grid.finish(false);
+ }
+
+}
+
+
+enum RunscriptType {
+ SHELL("Shellskript", "sh"), BATCH("Windows-Batch", "bat");
+
+ public final String displayName;
+ public final String extension;
+ private RunscriptType(String name, String extension) {
+ this.displayName = name;
+ this.extension = extension;
+ }
+
+ @Override
+ public String toString() {
+ return extension + " (" + displayName + ")";
}
}
+
+enum RunscriptVisibility {
+ NORMAL("Normal", 1), MINIMIZED("Minimiert", 2), HIDDEN("Versteckt", 0);
+
+ public final String displayName;
+ public final int value;
+
+ private RunscriptVisibility(String name, int flag) {
+ this.displayName = name;
+ this.value = flag;
+ }
+}
+
+enum SoundState {
+ DEFAULT("Vorgabe des Pools", -1), MUTED("Stummschalten", 1), UNMUTED("Aktivieren", 0);
+
+ public final String displayName;
+ public final int value;
+
+ private SoundState(String name, int value) {
+ this.displayName = name;
+ this.value = value;
+ }
+} \ No newline at end of file
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
index f8ebee60..2792e9fd 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
@@ -85,7 +85,7 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
super(modalParent, "<init>", ModalityType.APPLICATION_MODAL);
setResizable(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
- setPreferredSize(Gui.getScaledDimension(630, 610));
+ setPreferredSize(Gui.getScaledDimension(630, 680));
((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
/* *******************************************************************************