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.