mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-19 09:54:49 -04:00
now you can enter an expression and create a circuit representing the expression.
This commit is contained in:
parent
58540f5f21
commit
445dc5393f
@ -24,6 +24,7 @@ import de.neemann.digital.draw.model.RealTimeClock;
|
|||||||
import de.neemann.digital.draw.shapes.ShapeFactory;
|
import de.neemann.digital.draw.shapes.ShapeFactory;
|
||||||
import de.neemann.digital.gui.components.*;
|
import de.neemann.digital.gui.components.*;
|
||||||
import de.neemann.digital.gui.components.data.DataSetDialog;
|
import de.neemann.digital.gui.components.data.DataSetDialog;
|
||||||
|
import de.neemann.digital.gui.components.expression.ExpressionDialog;
|
||||||
import de.neemann.digital.gui.components.listing.ROMListingDialog;
|
import de.neemann.digital.gui.components.listing.ROMListingDialog;
|
||||||
import de.neemann.digital.gui.components.table.TableDialog;
|
import de.neemann.digital.gui.components.table.TableDialog;
|
||||||
import de.neemann.digital.gui.remote.DigitalHandler;
|
import de.neemann.digital.gui.remote.DigitalHandler;
|
||||||
@ -538,6 +539,16 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave, E
|
|||||||
}
|
}
|
||||||
.setToolTip(Lang.get("menu_synthesise_tt"))
|
.setToolTip(Lang.get("menu_synthesise_tt"))
|
||||||
.createJMenuItem());
|
.createJMenuItem());
|
||||||
|
|
||||||
|
analyse.add(new ToolTipAction(Lang.get("menu_expression")) {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
new ExpressionDialog(Main.this, shapeFactory).setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.setToolTip(Lang.get("menu_expression_tt"))
|
||||||
|
.createJMenuItem());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void orderMeasurements() {
|
private void orderMeasurements() {
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
package de.neemann.digital.gui.components.expression;
|
||||||
|
|
||||||
|
import de.neemann.digital.analyse.expression.Expression;
|
||||||
|
import de.neemann.digital.analyse.parser.Parser;
|
||||||
|
import de.neemann.digital.builder.circuit.CircuitBuilder;
|
||||||
|
import de.neemann.digital.draw.elements.Circuit;
|
||||||
|
import de.neemann.digital.draw.shapes.ShapeFactory;
|
||||||
|
import de.neemann.digital.gui.Main;
|
||||||
|
import de.neemann.digital.lang.Lang;
|
||||||
|
import de.neemann.gui.ErrorMessage;
|
||||||
|
import de.neemann.gui.ToolTipAction;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog to enter an expression
|
||||||
|
* @author hneemann
|
||||||
|
*/
|
||||||
|
public class ExpressionDialog extends JDialog {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance
|
||||||
|
*
|
||||||
|
* @param parent the parent
|
||||||
|
* @param shapeFactory the shapeFactory used for new circuits
|
||||||
|
*/
|
||||||
|
public ExpressionDialog(JFrame parent, ShapeFactory shapeFactory) {
|
||||||
|
super(parent, Lang.get("expression"), false);
|
||||||
|
|
||||||
|
JTextField text = new JTextField("(C ∨ B) ∧ (A ∨ C) ∧ (B ∨ !C) * (C + !A)", 40);
|
||||||
|
getContentPane().add(text, BorderLayout.CENTER);
|
||||||
|
getContentPane().add(new JLabel(Lang.get("msg_enterAnExpression")), BorderLayout.NORTH);
|
||||||
|
|
||||||
|
JPanel buttons = new JPanel(new FlowLayout(FlowLayout.RIGHT));
|
||||||
|
getContentPane().add(buttons, BorderLayout.SOUTH);
|
||||||
|
|
||||||
|
buttons.add(new ToolTipAction(Lang.get("btn_create")) {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
|
Expression exp = new Parser(text.getText()).parse();
|
||||||
|
CircuitBuilder circuitBuilder = new CircuitBuilder(shapeFactory);
|
||||||
|
circuitBuilder.addCombinatorial("Y", exp);
|
||||||
|
Circuit circuit = circuitBuilder.createCircuit();
|
||||||
|
SwingUtilities.invokeLater(() -> new Main(null, circuit).setVisible(true));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
new ErrorMessage().addCause(ex).show(ExpressionDialog.this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.setToolTip(Lang.get("btn_create_tt")).createJButton());
|
||||||
|
|
||||||
|
pack();
|
||||||
|
setLocationRelativeTo(parent);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* Classes needed to enter an expression and to create a circuit representing the expression
|
||||||
|
*
|
||||||
|
* @author hneemann
|
||||||
|
*/
|
||||||
|
package de.neemann.digital.gui.components.expression;
|
@ -12,8 +12,11 @@
|
|||||||
<string name="btn_reload">Neu Laden</string>
|
<string name="btn_reload">Neu Laden</string>
|
||||||
<string name="btn_reload_tt">Letzte Datei noch einmal laden</string>
|
<string name="btn_reload_tt">Letzte Datei noch einmal laden</string>
|
||||||
<string name="btn_save">Speichern</string>
|
<string name="btn_save">Speichern</string>
|
||||||
|
<string name="btn_create">Erzeugen</string>
|
||||||
|
<string name="btn_create_tt">Erzeugt eine Schaltung in einem eigenen Fenster.</string>
|
||||||
<string name="cancel">Abbrechen</string>
|
<string name="cancel">Abbrechen</string>
|
||||||
<string name="digital">Digital</string>
|
<string name="digital">Digital</string>
|
||||||
|
<string name="expression">Ausdruck</string>
|
||||||
<string name="elem_Add">Addierer</string>
|
<string name="elem_Add">Addierer</string>
|
||||||
<string name="elem_And">Und</string>
|
<string name="elem_And">Und</string>
|
||||||
<string name="elem_Break">Break</string>
|
<string name="elem_Break">Break</string>
|
||||||
@ -312,6 +315,8 @@ Zur Analyse können Sie die Schaltung im Gatterschrittmodus ausführen.</string>
|
|||||||
<string name="menu_view">Ansicht</string>
|
<string name="menu_view">Ansicht</string>
|
||||||
<string name="menu_zoomIn">Vergrößern</string>
|
<string name="menu_zoomIn">Vergrößern</string>
|
||||||
<string name="menu_zoomOut">Verkleinern</string>
|
<string name="menu_zoomOut">Verkleinern</string>
|
||||||
|
<string name="menu_expression">Ausdruck</string>
|
||||||
|
<string name="menu_expression_tt">Erzeugt eine Schaltung aus einem Ausdruck.</string>
|
||||||
<string name="message">Digital
|
<string name="message">Digital
|
||||||
|
|
||||||
Ein einfacher Simulator für digitale Schaltkreise.
|
Ein einfacher Simulator für digitale Schaltkreise.
|
||||||
@ -339,6 +344,7 @@ Geschrieben von Helmut Neemann 2016</string>
|
|||||||
<string name="msg_pinMap_pin_N_is_N">Pin {0}: {1}</string>
|
<string name="msg_pinMap_pin_N_is_N">Pin {0}: {1}</string>
|
||||||
<string name="msg_restartNeeded">Die Änderung erfordert einen Neustart!</string>
|
<string name="msg_restartNeeded">Die Änderung erfordert einen Neustart!</string>
|
||||||
<string name="msg_noRomFound">Kein ROM im Model gefunden! Im ROM muss Automatisches Laden eingeschaltet sein!</string>
|
<string name="msg_noRomFound">Kein ROM im Model gefunden! Im ROM muss Automatisches Laden eingeschaltet sein!</string>
|
||||||
|
<string name="msg_enterAnExpression">Geben Sie einen Ausdruck ein:</string>
|
||||||
<string name="ok">Ok</string>
|
<string name="ok">Ok</string>
|
||||||
<string name="rot_0">0°</string>
|
<string name="rot_0">0°</string>
|
||||||
<string name="rot_180">180°</string>
|
<string name="rot_180">180°</string>
|
||||||
|
@ -12,8 +12,11 @@
|
|||||||
<string name="btn_reload">Reload</string>
|
<string name="btn_reload">Reload</string>
|
||||||
<string name="btn_reload_tt">Reload last hex file</string>
|
<string name="btn_reload_tt">Reload last hex file</string>
|
||||||
<string name="btn_save">Save</string>
|
<string name="btn_save">Save</string>
|
||||||
|
<string name="btn_create">Create</string>
|
||||||
|
<string name="btn_create_tt">Create a circuit in a seperate window</string>
|
||||||
<string name="cancel">Cancel</string>
|
<string name="cancel">Cancel</string>
|
||||||
<string name="digital">Digital</string>
|
<string name="digital">Digital</string>
|
||||||
|
<string name="expression">Expression</string>
|
||||||
<string name="elem_Add">Add</string>
|
<string name="elem_Add">Add</string>
|
||||||
<string name="elem_And">And</string>
|
<string name="elem_And">And</string>
|
||||||
<string name="elem_Break">Break</string>
|
<string name="elem_Break">Break</string>
|
||||||
@ -312,6 +315,8 @@ To analyse you can run the circuit in single gate step mode.</string>
|
|||||||
<string name="menu_view">View</string>
|
<string name="menu_view">View</string>
|
||||||
<string name="menu_zoomIn">Zoom In</string>
|
<string name="menu_zoomIn">Zoom In</string>
|
||||||
<string name="menu_zoomOut">Zoom Out</string>
|
<string name="menu_zoomOut">Zoom Out</string>
|
||||||
|
<string name="menu_expression">Expression</string>
|
||||||
|
<string name="menu_expression_tt">Create a circuit from an expression.</string>
|
||||||
<string name="message">Digital
|
<string name="message">Digital
|
||||||
|
|
||||||
A simple simulator for digital circuits.
|
A simple simulator for digital circuits.
|
||||||
@ -339,6 +344,7 @@ Written bei H.Neemann in 2016</string>
|
|||||||
<string name="msg_noRomFound">No ROM found! ROM needs to be set to auto reload mode.</string>
|
<string name="msg_noRomFound">No ROM found! ROM needs to be set to auto reload mode.</string>
|
||||||
<string name="msg_errorFileNotFound">Could not find file: {0}</string>
|
<string name="msg_errorFileNotFound">Could not find file: {0}</string>
|
||||||
<string name="msg_remoteUnknownCommand">Command {0} unknown!</string>
|
<string name="msg_remoteUnknownCommand">Command {0} unknown!</string>
|
||||||
|
<string name="msg_enterAnExpression">Enter an expression:</string>
|
||||||
<string name="ok">Ok</string>
|
<string name="ok">Ok</string>
|
||||||
<string name="rot_0">0°</string>
|
<string name="rot_0">0°</string>
|
||||||
<string name="rot_180">180°</string>
|
<string name="rot_180">180°</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user