From ad6e26fa80c962105ad88ec46c65e27e6b6ffb16 Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 7 Apr 2017 10:35:09 +0200 Subject: [PATCH] experimental creation of bidirectional counters in the table dialog --- .../gui/components/table/TableDialog.java | 39 +++++++++++++++++++ src/main/resources/lang/lang_de.xml | 1 + src/main/resources/lang/lang_en.xml | 1 + 3 files changed, 41 insertions(+) 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 52568e2df..884264e42 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 @@ -141,6 +141,12 @@ public class TableDialog extends JDialog { sizeMenu.add(sequential); for (int i = 2; i <= 8; i++) sequential.add(new JMenuItem(new SizeSequentialAction(i))); + if (Main.enableExperimental()) { + JMenu sequentialBiDir = new JMenu(Lang.get("menu_table_new_sequential_bidir")); + sizeMenu.add(sequentialBiDir); + for (int i = 2; i <= 8; i++) + sequentialBiDir.add(new JMenuItem(new SizeSequentialBidirectionalAction(i))); + } bar.add(sizeMenu); JMenu reorderMenu = new JMenu(Lang.get("menu_table_reorder")); @@ -631,6 +637,39 @@ public class TableDialog extends JDialog { } } + private final class SizeSequentialBidirectionalAction extends AbstractAction { + private int n; + + private SizeSequentialBidirectionalAction(int n) { + super(Lang.get("menu_table_N_variables", n)); + this.n = n; + } + + @Override + public void actionPerformed(ActionEvent actionEvent) { + ArrayList vars = new ArrayList<>(); + vars.add(new Variable("dir")); + for (int i = n - 1; i >= 0; i--) + vars.add(new Variable("Q_" + i + "n")); + TruthTable truthTable = new TruthTable(vars); + int i = n - 1; + int rows = 1 << (n + 1); + for (int vi = 1; vi < vars.size(); vi++) { + BoolTableByteArray val = new BoolTableByteArray(rows); + for (int n = 0; n < rows; n++) { + if (n >= rows / 2) + val.set(n, ((n - 1) >> i) & 1); + else + val.set(n, ((n + 1) >> i) & 1); + } + truthTable.addResult(vars.get(vi).getIdentifier() + "+1", val); + i--; + } + + setModel(new TruthTableTableModel(truthTable)); + } + } + private final class CenterDefaultTableCellRenderer extends DefaultTableCellRenderer { @Override diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 2bf1e36e4..c78126cc4 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -664,6 +664,7 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Spalten hinzufügen Kombintorisch Automat + Automat bidirektional Ausgänge Umsortieren Setzen diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index e89ec9e02..7c4eba232 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -653,6 +653,7 @@ The names of the variables may not be unique. Add Columns Combinatorial Sequential + Sequential bidirectional Outputs Reorder Set