diff --git a/src/main/java/de/neemann/digital/gui/components/table/PlainTextExpressionListener.java b/src/main/java/de/neemann/digital/gui/components/table/PlainTextExpressionListener.java
new file mode 100644
index 000000000..e54cf0f1e
--- /dev/null
+++ b/src/main/java/de/neemann/digital/gui/components/table/PlainTextExpressionListener.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2020 Helmut Neemann.
+ * Use of this source code is governed by the GPL v3 license
+ * that can be found in the LICENSE file.
+ */
+package de.neemann.digital.gui.components.table;
+
+import de.neemann.digital.analyse.expression.Expression;
+import de.neemann.digital.analyse.expression.format.FormatToExpression;
+
+/**
+ * Formats expressions to plain text
+ */
+public class PlainTextExpressionListener implements ExpressionListener {
+ private final StringBuilder sb = new StringBuilder();
+
+ @Override
+ public void resultFound(String name, Expression expression) {
+ String exp = FormatToExpression.defaultFormat(expression);
+ sb.append(name);
+ sb.append(" = ");
+ sb.append(exp);
+ sb.append('\n');
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public String toString() {
+ return sb.toString();
+ }
+}
diff --git a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
index 2ed7206e2..7fc49412f 100644
--- a/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
+++ b/src/main/java/de/neemann/digital/gui/components/table/TableDialog.java
@@ -107,15 +107,15 @@ public class TableDialog extends JDialog {
private final HashMap availGenerators = new HashMap<>();
private final JMenu hardwareMenu;
private final TruthTableTableModel model;
+ private final AllSolutionsDialog allSolutionsDialog;
+ private final KarnaughMapDialog kvMap;
+ private final Mouse mouse = Mouse.getMouse();
+ private final UndoManager undoManager;
private JCheckBoxMenuItem createJK;
private File filename;
private int columnIndex;
- private AllSolutionsDialog allSolutionsDialog;
private ExpressionListenerStore lastGeneratedExpressions;
- private KarnaughMapDialog kvMap;
private JMenuItem lastUsedGenratorMenuItem;
- private Mouse mouse = Mouse.getMouse();
- private UndoManager undoManager;
/**
* Creates a new instance
@@ -136,7 +136,7 @@ public class TableDialog extends JDialog {
model = new TruthTableTableModel(undoManager);
model.addTableModelListener(new CalculationTableModelListener());
- kvMap = new KarnaughMapDialog(this, (boolTable, row) -> model.incValue(boolTable, row));
+ kvMap = new KarnaughMapDialog(this, model::incValue);
statusBar = new ExpressionComponent();
font = Screen.getInstance().getFont(1.66f);
@@ -403,23 +403,17 @@ public class TableDialog extends JDialog {
}
});
-
- fileMenu.add(new ToolTipAction(Lang.get("menu_table_exportTableLaTeX")) {
+ fileMenu.add(new TextExportAction(Lang.get("menu_table_exportTablePlainText")) {
@Override
- public void actionPerformed(ActionEvent e) {
- try {
- final LaTeXExpressionListener laTeXExpressionListener = new LaTeXExpressionListener(undoManager.getActual());
- ExpressionListener expressionListener = laTeXExpressionListener;
- if (createJK.isSelected())
- expressionListener = new ExpressionListenerJK(expressionListener);
- lastGeneratedExpressions.replayTo(expressionListener);
- expressionListener.close();
+ ExpressionListener createExpressionListener() {
+ return new PlainTextExpressionListener();
+ }
+ });
- new ShowStringDialog(TableDialog.this, Lang.get("win_table_exportDialog"),
- laTeXExpressionListener.toString()).setVisible(true);
- } catch (ExpressionException | FormatterException e1) {
- new ErrorMessage(Lang.get("msg_errorDuringCalculation")).addCause(e1).show(TableDialog.this);
- }
+ fileMenu.add(new TextExportAction(Lang.get("menu_table_exportTableLaTeX")) {
+ @Override
+ ExpressionListener createExpressionListener() throws ExpressionException {
+ return new LaTeXExpressionListener(undoManager.getActual());
}
});
@@ -770,7 +764,7 @@ public class TableDialog extends JDialog {
}
private final class SizeAction extends AbstractAction {
- private int n;
+ private final int n;
private SizeAction(int n) {
super(Lang.get("menu_table_N_variables", n));
@@ -785,7 +779,7 @@ public class TableDialog extends JDialog {
}
private final class SizeSequentialAction extends AbstractAction {
- private int n;
+ private final int n;
private SizeSequentialAction(int n) {
super(Lang.get("menu_table_N_variables", n));
@@ -814,7 +808,7 @@ public class TableDialog extends JDialog {
}
private final class SizeSequentialBidirectionalAction extends AbstractAction {
- private int n;
+ private final int n;
private SizeSequentialBidirectionalAction(int n) {
super(Lang.get("menu_table_N_variables", n));
@@ -974,4 +968,29 @@ public class TableDialog extends JDialog {
}
}
}
+
+ private abstract class TextExportAction extends ToolTipAction {
+ private TextExportAction(String name) {
+ super(name);
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ try {
+ final ExpressionListener laTeXExpressionListener = createExpressionListener();
+ ExpressionListener expressionListener = laTeXExpressionListener;
+ if (createJK.isSelected())
+ expressionListener = new ExpressionListenerJK(expressionListener);
+ lastGeneratedExpressions.replayTo(expressionListener);
+ expressionListener.close();
+
+ new ShowStringDialog(TableDialog.this, Lang.get("win_table_exportDialog"),
+ laTeXExpressionListener.toString()).setVisible(true);
+ } catch (ExpressionException | FormatterException e1) {
+ new ErrorMessage(Lang.get("msg_errorDuringCalculation")).addCause(e1).show(TableDialog.this);
+ }
+ }
+
+ abstract ExpressionListener createExpressionListener() throws ExpressionException;
+ }
}
diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml
index 419d4f6dd..3f9a4a3e2 100644
--- a/src/main/resources/lang/lang_de.xml
+++ b/src/main/resources/lang/lang_de.xml
@@ -1639,6 +1639,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig?
Bausteine
Erzeugt eine JEDEC Datei für den Baustein
Erzeuge LaTeX
+ Erzeuge einfachen Text
Erzeuge Testfall
Erzeugt eine Testfallbeschreibung, welche in einen Testfall
übernommen werden kann.
diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml
index b51437391..640fcd20d 100644
--- a/src/main/resources/lang/lang_en.xml
+++ b/src/main/resources/lang/lang_en.xml
@@ -1602,6 +1602,7 @@
Device
Creates a JEDEC file for the device
Export LaTeX
+ Export Plain Text
Export Test Case
Creates a test case description that can be used in a test
case.