mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-18 09:24:42 -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.gui.components.*;
|
||||
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.table.TableDialog;
|
||||
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"))
|
||||
.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() {
|
||||
|
@ -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_tt">Letzte Datei noch einmal laden</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="digital">Digital</string>
|
||||
<string name="expression">Ausdruck</string>
|
||||
<string name="elem_Add">Addierer</string>
|
||||
<string name="elem_And">Und</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_zoomIn">Vergrößern</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
|
||||
|
||||
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_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_enterAnExpression">Geben Sie einen Ausdruck ein:</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="rot_0">0°</string>
|
||||
<string name="rot_180">180°</string>
|
||||
|
@ -12,8 +12,11 @@
|
||||
<string name="btn_reload">Reload</string>
|
||||
<string name="btn_reload_tt">Reload last hex file</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="digital">Digital</string>
|
||||
<string name="expression">Expression</string>
|
||||
<string name="elem_Add">Add</string>
|
||||
<string name="elem_And">And</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_zoomIn">Zoom In</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
|
||||
|
||||
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_errorFileNotFound">Could not find file: {0}</string>
|
||||
<string name="msg_remoteUnknownCommand">Command {0} unknown!</string>
|
||||
<string name="msg_enterAnExpression">Enter an expression:</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="rot_0">0°</string>
|
||||
<string name="rot_180">180°</string>
|
||||
|
Loading…
x
Reference in New Issue
Block a user