diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java index 0b90785..acedecb 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/KorrekturHelper.java @@ -88,8 +88,9 @@ public class KorrekturHelper for (var li = 0; li < lines.length; li++) { var line = lines[li]; + if (getIndent(line) != path.size()) + { throw new IllegalStateException("Indentation error on Line" + lineMap[li] + "!"); } var cmd = line.substring(path.size()).split("\t", 2)[0]; - System.out.println(indent(path.size()) + lineMap[li] + " - " + cmd + " - " + line); var n = switch (cmd) { case "!header": // !header # Test-Schema @@ -108,8 +109,6 @@ public class KorrekturHelper var i = li + 1; for (; i < lines.length; i++) { - System.out.println(indent(path.size() + 1) + lineMap[i] + " - " + cmd + " - " + lines[i]); - System.out.println(getIndent(lines[i]) + " - " + path.size()); if (getIndent(lines[i]) != path.size() + 1) { break; @@ -131,7 +130,7 @@ public class KorrekturHelper throw new IOException("Indentation Error on Line " + lineMap[li] + "!"); default: - throw new IOException("Unknown Command: " + cmd); + throw new IOException("Unknown Command on Line " + lineMap[li] + ": " + cmd); }; if (!path.isEmpty()) { @@ -297,12 +296,14 @@ public class KorrekturHelper } private final JButton btn_toClipboard; + private String currentHtml = ""; /** The JFrame for this {@link KorrekturHelper} */ public final JFrame frm; - private final HtmlContext hc; + private boolean inReset = false; + private final LinkedHashSet nodes; /** @@ -335,7 +336,7 @@ public class KorrekturHelper btn_toClipboard.addActionListener(e -> copyToClipboard()); menuPanel.add(btn_toClipboard); var btn_reset = new JButton("Reset"); - btn_reset.addActionListener(e -> this.nodes.forEach(Node::reset)); + btn_reset.addActionListener(e -> reset()); menuPanel.add(btn_reset); contentPanel.add(menuPanel, BorderLayout.NORTH); @@ -345,6 +346,7 @@ public class KorrekturHelper var panel = new JPanel(true); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); var jsp = new JScrollPane(panel); + jsp.getVerticalScrollBar().setUnitIncrement(16); Consumer c = n -> verifyClipboard(); for (var n : nodes) { @@ -378,11 +380,24 @@ public class KorrekturHelper btn_toClipboard.setBackground(Color.GREEN); } + /** + * Resets the Input Mask + */ + public synchronized void reset() + { + inReset = true; + this.nodes.forEach(Node::reset); + inReset = false; + verifyClipboard(); + } + /** * Called on change of data or when the System signifies, the Clipboard changed */ public synchronized void verifyClipboard() { + if (inReset) + { return; } var sb = new StringBuilder(); recursiveToHtml(nodes, sb, hc, 0); currentHtml = sb.toString(); diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema index d083570..19ee573 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/Test.schema @@ -3,13 +3,13 @@ :base 0.0 // Design für Punkte. Pts ist dabei für die Punkte, PtsText für den Text. die Punkte zählen als Teil des Textes (
  • 'Punkte'Text
  • ) // full -> best-Case -:fullPts color: #0f0; +:fullPts color: #0f0; font-weight: bold; :fullPtsText // no -> worst-case -:noPts color: #f00; +:noPts color: #f00; font-weight: bold; :noPtsText // partial -> alle verbleibenden Fälle. Sonderfall: Elemente die 0 Punkte bringen (egal was ausgewählt ist) haben auch diesen Fall! -:partialPts color: #fb0; +:partialPts color: #fb0; font-weight: bold; :partialPtsText :cbmsOk color: #080; :cbmsFail color: #800; diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/EitherNode.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/EitherNode.java index 1cb6f49..4dcdc87 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/EitherNode.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/EitherNode.java @@ -61,12 +61,14 @@ public class EitherNode extends AbstractNode content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS)); content.add(btn_ok); content.add(btn_fail); + btn_ok.doClick(); } @Override protected void _reset() { bg.clearSelection(); + btn_ok.doClick(); } @Override @@ -128,7 +130,9 @@ public class EitherNode extends AbstractNode Utils.formatPoints(achievedPoints(hc.mc)) + // (points.signum() < 0 ? "" : " / " + Utils.formatPoints(maximumPoints())) + "P" + // " " + // - (btn_fail.isSelected() ? btn_fail.getText() : btn_ok.getText()) + // + (points.signum() < 0 ? btn_fail.isSelected() ? messageOK : messageFail + : btn_fail.isSelected() ? messageFail : messageOK) + + // ""; } diff --git a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/RadioMultiSelectNode.java b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/RadioMultiSelectNode.java index 2ff8655..4bfa927 100644 --- a/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/RadioMultiSelectNode.java +++ b/src/main/java/de/tuDortmund/cs/rvs/pingger/korrekturHelper/nodes/RadioMultiSelectNode.java @@ -3,6 +3,7 @@ package de.tuDortmund.cs.rvs.pingger.korrekturHelper.nodes; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.math.MathContext; +import java.util.Arrays; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; @@ -57,7 +58,6 @@ public class RadioMultiSelectNode extends AbstractNode var s = lines[i].substring(1).split("\t"); if (s.length != 2) { throw new IllegalArgumentException("Expected exactly 1 \\t"); } - System.out.println(s[0] + "\t" + s[1]); points[i - 1] = new BigDecimal(s[0]); text[i - 1] = s[1]; rbs[i - 1] = new JRadioButton(Utils.formatPoints(points[i - 1]) + "P - " + text[i - 1]); @@ -65,17 +65,21 @@ public class RadioMultiSelectNode extends AbstractNode content.add(rbs[i - 1]); bg.add(rbs[i - 1]); } + rbs[0].doClick(); } @Override protected void _reset() { bg.clearSelection(); + rbs[0].doClick(); } @Override public BigDecimal achievedPoints(MathContext mc) { + if (!isVisibleInResultHtml()) + { return BigDecimal.ZERO; } return points[getSelected()]; } @@ -86,17 +90,17 @@ public class RadioMultiSelectNode extends AbstractNode if (rbs[i].isSelected()) { return i; } } - return rbs.length - 1; + return -1; } @Override public boolean isVisibleInResultHtml() - { return true; } + { return Arrays.stream(rbs).anyMatch(JRadioButton::isSelected); } @Override public BigDecimal maximumPoints() { - return maxPoints; + return isVisibleInResultHtml() ? maxPoints : BigDecimal.ZERO; } @Override @@ -123,6 +127,13 @@ public class RadioMultiSelectNode extends AbstractNode @Override public String toResultHtml(HtmlContext hc) { + if (!isVisibleInResultHtml()) + { + return "" + // + "" + // + Utils.formatPoints(BigDecimal.ZERO) + " / " + Utils.formatPoints(maxPoints) + "P " + // + (baseMsg == null ? "" : baseMsg) + ""; + } return "" + // " " + // Utils.formatPoints(achievedPoints(hc.mc)) + " / " + Utils.formatPoints(maxPoints) + "P " + //