mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 06:49:36 -04:00
allows the user to specify ghdl options, see #421
This commit is contained in:
parent
a814f678b4
commit
e33e9a1488
@ -23,6 +23,7 @@ public class Key<VALUE> {
|
|||||||
private CheckEnabled checkEnabled;
|
private CheckEnabled checkEnabled;
|
||||||
private boolean isSecondary;
|
private boolean isSecondary;
|
||||||
private boolean requiresRestart = false;
|
private boolean requiresRestart = false;
|
||||||
|
private String panelId;
|
||||||
|
|
||||||
// Both values are always null in digital.
|
// Both values are always null in digital.
|
||||||
// Both are only used within a custom implemented component.
|
// Both are only used within a custom implemented component.
|
||||||
@ -234,6 +235,24 @@ public class Key<VALUE> {
|
|||||||
return requiresRestart;
|
return requiresRestart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves this key to the panel with the given id
|
||||||
|
*
|
||||||
|
* @param panelId the panel id
|
||||||
|
* @return this for chained calls
|
||||||
|
*/
|
||||||
|
public Key<VALUE> setPanelId(String panelId) {
|
||||||
|
this.panelId = panelId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the panel id, null if no panel is set
|
||||||
|
*/
|
||||||
|
public String getPanelId() {
|
||||||
|
return panelId;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A integer attribute.
|
* A integer attribute.
|
||||||
* Stores additional combo box values
|
* Stores additional combo box values
|
||||||
|
@ -706,7 +706,22 @@ public final class Keys {
|
|||||||
* Path to ghdl
|
* Path to ghdl
|
||||||
*/
|
*/
|
||||||
public static final Key<File> SETTINGS_GHDL_PATH
|
public static final Key<File> SETTINGS_GHDL_PATH
|
||||||
= new Key.KeyFile("ghdlPath", new File("ghdl")).setSecondary();
|
= new Key.KeyFile("ghdlPath", new File("ghdl")).setPanelId("ghdl");
|
||||||
|
/**
|
||||||
|
* The ghdl analysis options
|
||||||
|
*/
|
||||||
|
public static final Key<String> SETTINGS_GHDL_OPT_ANALYSYS
|
||||||
|
= new Key<>("ghdlOptAnalysis", "-a --std=08 --ieee=synopsys").setPanelId("ghdl");
|
||||||
|
/**
|
||||||
|
* The ghdl elaboration options
|
||||||
|
*/
|
||||||
|
public static final Key<String> SETTINGS_GHDL_OPT_ELABORATION
|
||||||
|
= new Key<>("ghdlOptElaboration", "-e --std=08 --ieee=synopsys stdIOInterface").setPanelId("ghdl");
|
||||||
|
/**
|
||||||
|
* The ghdl run options
|
||||||
|
*/
|
||||||
|
public static final Key<String> SETTINGS_GHDL_OPT_RUN
|
||||||
|
= new Key<>("ghdlOptRun", "-r --std=08 --ieee=synopsys stdIOInterface --unbuffered").setPanelId("ghdl");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Path to iverilog installation directory
|
* Path to iverilog installation directory
|
||||||
|
@ -28,9 +28,9 @@ public class ApplicationGHDL extends ApplicationVHDLStdIO {
|
|||||||
String ghdl = getGhdlPath().getPath();
|
String ghdl = getGhdlPath().getPath();
|
||||||
|
|
||||||
file = createVHDLFile(label, code, inputs, outputs);
|
file = createVHDLFile(label, code, inputs, outputs);
|
||||||
ProcessStarter.start(file.getParentFile(), ghdl, "-a", "--std=08", "--ieee=synopsys", file.getName());
|
ProcessStarter.start(file.getParentFile(), new Options().add(ghdl).addSettings(Keys.SETTINGS_GHDL_OPT_ANALYSYS).add(file.getName()).getArray());
|
||||||
ProcessStarter.start(file.getParentFile(), ghdl, "-e", "--std=08", "--ieee=synopsys", "stdIOInterface");
|
ProcessStarter.start(file.getParentFile(), new Options().add(ghdl).addSettings(Keys.SETTINGS_GHDL_OPT_ELABORATION).getArray());
|
||||||
ProcessBuilder pb = new ProcessBuilder(ghdl, "-r", "--std=08", "--ieee=synopsys", "stdIOInterface", "--unbuffered").redirectErrorStream(true).directory(file.getParentFile());
|
ProcessBuilder pb = new ProcessBuilder(new Options().add(ghdl).addSettings(Keys.SETTINGS_GHDL_OPT_RUN).getList()).redirectErrorStream(true).directory(file.getParentFile());
|
||||||
return new GHDLProcessInterface(pb.start(), file.getParentFile());
|
return new GHDLProcessInterface(pb.start(), file.getParentFile());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (file != null)
|
if (file != null)
|
||||||
@ -63,8 +63,8 @@ public class ApplicationGHDL extends ApplicationVHDLStdIO {
|
|||||||
String ghdl = getGhdlPath().getPath();
|
String ghdl = getGhdlPath().getPath();
|
||||||
|
|
||||||
file = createVHDLFile(label, code, inputs, outputs);
|
file = createVHDLFile(label, code, inputs, outputs);
|
||||||
String m1 = ProcessStarter.start(file.getParentFile(), ghdl, "-a", "--ieee=synopsys", file.getName());
|
String m1 = ProcessStarter.start(file.getParentFile(), new Options().add(ghdl).addSettings(Keys.SETTINGS_GHDL_OPT_ANALYSYS).add(file.getName()).getArray());
|
||||||
String m2 = ProcessStarter.start(file.getParentFile(), ghdl, "-e", "--ieee=synopsys", "stdIOInterface");
|
String m2 = ProcessStarter.start(file.getParentFile(), new Options().add(ghdl).addSettings(Keys.SETTINGS_GHDL_OPT_ELABORATION).getArray());
|
||||||
return ProcessStarter.joinStrings(m1, m2);
|
return ProcessStarter.joinStrings(m1, m2);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (ghdlNotFound(e))
|
if (ghdlNotFound(e))
|
||||||
|
88
src/main/java/de/neemann/digital/core/extern/Options.java
vendored
Normal file
88
src/main/java/de/neemann/digital/core/extern/Options.java
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* 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.core.extern;
|
||||||
|
|
||||||
|
import de.neemann.digital.core.element.Key;
|
||||||
|
import de.neemann.digital.gui.Settings;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to split option strings to a option list
|
||||||
|
*/
|
||||||
|
public class Options {
|
||||||
|
|
||||||
|
private final ArrayList<String> list;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance
|
||||||
|
*/
|
||||||
|
public Options() {
|
||||||
|
list = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a string from the settings
|
||||||
|
*
|
||||||
|
* @param key the key to use
|
||||||
|
* @return this for chained calls
|
||||||
|
*/
|
||||||
|
public Options addSettings(Key<String> key) {
|
||||||
|
return addString(Settings.getInstance().get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a string containing many options
|
||||||
|
*
|
||||||
|
* @param options the string containing the options
|
||||||
|
* @return this for chained calls
|
||||||
|
*/
|
||||||
|
public Options addString(String options) {
|
||||||
|
StringBuilder opt = new StringBuilder();
|
||||||
|
boolean inQuote = false;
|
||||||
|
for (int i = 0; i < options.length(); i++) {
|
||||||
|
char c = options.charAt(i);
|
||||||
|
if (c == '"')
|
||||||
|
inQuote = !inQuote;
|
||||||
|
|
||||||
|
if (Character.isWhitespace(c) && !inQuote) {
|
||||||
|
if (opt.length() > 0)
|
||||||
|
list.add(opt.toString());
|
||||||
|
opt.setLength(0);
|
||||||
|
} else {
|
||||||
|
opt.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (opt.length() > 0)
|
||||||
|
list.add(opt.toString());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a single raw option
|
||||||
|
*
|
||||||
|
* @param option the options to add
|
||||||
|
* @return this for chained calls
|
||||||
|
*/
|
||||||
|
public Options add(String option) {
|
||||||
|
list.add(option);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the options as a list
|
||||||
|
*/
|
||||||
|
public ArrayList<String> getList() {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the options as an array
|
||||||
|
*/
|
||||||
|
public String[] getArray() {
|
||||||
|
return list.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
}
|
@ -52,6 +52,9 @@ public final class Settings extends SettingsBase {
|
|||||||
intList.add(Keys.SETTINGS_ATF1502_FITTER);
|
intList.add(Keys.SETTINGS_ATF1502_FITTER);
|
||||||
intList.add(Keys.SETTINGS_ATMISP);
|
intList.add(Keys.SETTINGS_ATMISP);
|
||||||
intList.add(Keys.SETTINGS_GHDL_PATH);
|
intList.add(Keys.SETTINGS_GHDL_PATH);
|
||||||
|
intList.add(Keys.SETTINGS_GHDL_OPT_ANALYSYS);
|
||||||
|
intList.add(Keys.SETTINGS_GHDL_OPT_ELABORATION);
|
||||||
|
intList.add(Keys.SETTINGS_GHDL_OPT_RUN);
|
||||||
intList.add(Keys.SETTINGS_IVERILOG_PATH);
|
intList.add(Keys.SETTINGS_IVERILOG_PATH);
|
||||||
intList.add(Keys.SETTINGS_TOOLCHAIN_CONFIG);
|
intList.add(Keys.SETTINGS_TOOLCHAIN_CONFIG);
|
||||||
intList.add(Keys.SETTINGS_FONT_SCALING);
|
intList.add(Keys.SETTINGS_FONT_SCALING);
|
||||||
|
@ -35,14 +35,13 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class AttributeDialog extends JDialog {
|
public class AttributeDialog extends JDialog {
|
||||||
private final java.util.List<EditorHolder> editors;
|
private final java.util.List<EditorHolder> editors;
|
||||||
private final JPanel panel;
|
|
||||||
private final Window parent;
|
private final Window parent;
|
||||||
private final Point pos;
|
private final Point pos;
|
||||||
private final ElementAttributes originalAttributes;
|
private final ElementAttributes originalAttributes;
|
||||||
private final ElementAttributes modifiedAttributes;
|
private final ElementAttributes modifiedAttributes;
|
||||||
private final JPanel buttonPanel;
|
private final JPanel buttonPanel;
|
||||||
private final ConstraintsBuilder constraints;
|
|
||||||
private final AbstractAction okAction;
|
private final AbstractAction okAction;
|
||||||
|
private final EditorPanel primaryPanel;
|
||||||
private HashMap<Key, JCheckBox> checkBoxes;
|
private HashMap<Key, JCheckBox> checkBoxes;
|
||||||
private JComponent topMostTextComponent;
|
private JComponent topMostTextComponent;
|
||||||
private VisualElement visualElement;
|
private VisualElement visualElement;
|
||||||
@ -100,32 +99,32 @@ public class AttributeDialog extends JDialog {
|
|||||||
this.originalAttributes = elementAttributes;
|
this.originalAttributes = elementAttributes;
|
||||||
this.modifiedAttributes = new ElementAttributes(elementAttributes);
|
this.modifiedAttributes = new ElementAttributes(elementAttributes);
|
||||||
|
|
||||||
panel = new JPanel(new GridBagLayout());
|
ArrayList<EditorPanel> panels = new ArrayList<EditorPanel>();
|
||||||
|
primaryPanel = new EditorPanel(EditorPanel.PRIMARY);
|
||||||
|
panels.add(primaryPanel);
|
||||||
|
|
||||||
editors = new ArrayList<>();
|
editors = new ArrayList<>();
|
||||||
|
|
||||||
topMostTextComponent = null;
|
topMostTextComponent = null;
|
||||||
constraints = new ConstraintsBuilder().inset(3).fill();
|
|
||||||
|
|
||||||
JPanel secondaryPanel = null;
|
EditorPanel secondaryPanel = null;
|
||||||
ConstraintsBuilder secondaryConstraints = null;
|
if (!addCheckBoxes && enableTwoTabs(list)) {
|
||||||
|
secondaryPanel = new EditorPanel(EditorPanel.SECONDARY);
|
||||||
boolean enableTwoTabs = !addCheckBoxes && enableTwoTabs(list);
|
panels.add(secondaryPanel);
|
||||||
|
|
||||||
if (enableTwoTabs) {
|
|
||||||
secondaryPanel = new JPanel(new GridBagLayout());
|
|
||||||
secondaryConstraints = new ConstraintsBuilder().inset(3).fill();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean isSecondary = false;
|
|
||||||
for (Key key : list) {
|
for (Key key : list) {
|
||||||
Editor e = EditorFactory.INSTANCE.create(key, modifiedAttributes.get(key));
|
Editor e = EditorFactory.INSTANCE.create(key, modifiedAttributes.get(key));
|
||||||
editors.add(new EditorHolder(e, key));
|
editors.add(new EditorHolder(e, key));
|
||||||
if (key.isSecondary() && enableTwoTabs) {
|
EditorPanel panelToUse = primaryPanel;
|
||||||
e.addToPanel(secondaryPanel, key, modifiedAttributes, this, secondaryConstraints);
|
if (key.isSecondary() && secondaryPanel != null)
|
||||||
isSecondary = true;
|
panelToUse = secondaryPanel;
|
||||||
} else
|
|
||||||
e.addToPanel(panel, key, modifiedAttributes, this, constraints);
|
if (key.getPanelId() != null)
|
||||||
|
panelToUse = findPanel(panels, key.getPanelId());
|
||||||
|
|
||||||
|
|
||||||
|
e.addToPanel(panelToUse, key, modifiedAttributes, this);
|
||||||
|
|
||||||
if (addCheckBoxes) {
|
if (addCheckBoxes) {
|
||||||
if (checkBoxes == null)
|
if (checkBoxes == null)
|
||||||
@ -134,14 +133,11 @@ public class AttributeDialog extends JDialog {
|
|||||||
checkBox.setSelected(true);
|
checkBox.setSelected(true);
|
||||||
checkBox.setToolTipText(Lang.get("msg_modifyThisAttribute"));
|
checkBox.setToolTipText(Lang.get("msg_modifyThisAttribute"));
|
||||||
checkBoxes.put(key, checkBox);
|
checkBoxes.put(key, checkBox);
|
||||||
panel.add(checkBox, constraints.x(2));
|
panelToUse.add(checkBox, cb -> cb.x(2));
|
||||||
checkBox.addChangeListener(event -> e.setEnabled(checkBox.isSelected()));
|
checkBox.addChangeListener(event -> e.setEnabled(checkBox.isSelected()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key.isSecondary() && enableTwoTabs)
|
panelToUse.nextRow();
|
||||||
secondaryConstraints.nextRow();
|
|
||||||
else
|
|
||||||
constraints.nextRow();
|
|
||||||
|
|
||||||
if (topMostTextComponent == null && e instanceof EditorFactory.StringEditor)
|
if (topMostTextComponent == null && e instanceof EditorFactory.StringEditor)
|
||||||
topMostTextComponent = ((EditorFactory.StringEditor) e).getTextComponent();
|
topMostTextComponent = ((EditorFactory.StringEditor) e).getTextComponent();
|
||||||
@ -157,14 +153,14 @@ public class AttributeDialog extends JDialog {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSecondary) {
|
if (panels.size() == 1) {
|
||||||
|
getContentPane().add(primaryPanel.getScrollPane());
|
||||||
|
} else {
|
||||||
JTabbedPane tp = new JTabbedPane(JTabbedPane.TOP);
|
JTabbedPane tp = new JTabbedPane(JTabbedPane.TOP);
|
||||||
tp.addTab(Lang.get("attr_primary"), new JScrollPane(panel));
|
for (EditorPanel ep : panels)
|
||||||
tp.addTab(Lang.get("attr_secondary"), new JScrollPane(secondaryPanel));
|
tp.addTab(Lang.get(ep.getLangKey()), ep.getScrollPane());
|
||||||
getContentPane().add(tp);
|
getContentPane().add(tp);
|
||||||
} else
|
}
|
||||||
getContentPane().add(new JScrollPane(panel));
|
|
||||||
|
|
||||||
|
|
||||||
okAction = new AbstractAction(Lang.get("ok")) {
|
okAction = new AbstractAction(Lang.get("ok")) {
|
||||||
@Override
|
@Override
|
||||||
@ -221,6 +217,16 @@ public class AttributeDialog extends JDialog {
|
|||||||
JComponent.WHEN_IN_FOCUSED_WINDOW);
|
JComponent.WHEN_IN_FOCUSED_WINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private EditorPanel findPanel(ArrayList<EditorPanel> panels, String panelId) {
|
||||||
|
for (EditorPanel p : panels)
|
||||||
|
if (panelId.equals(p.getPanelId()))
|
||||||
|
return p;
|
||||||
|
|
||||||
|
EditorPanel p = new EditorPanel(panelId);
|
||||||
|
panels.add(p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the dialogs title
|
* Sets the dialogs title
|
||||||
*
|
*
|
||||||
@ -277,9 +283,7 @@ public class AttributeDialog extends JDialog {
|
|||||||
* @return this for chained calls
|
* @return this for chained calls
|
||||||
*/
|
*/
|
||||||
AttributeDialog addButton(String label, ToolTipAction action) {
|
AttributeDialog addButton(String label, ToolTipAction action) {
|
||||||
panel.add(new JLabel(label), constraints);
|
primaryPanel.addButton(label, action);
|
||||||
panel.add(action.createJButton(), constraints.x(1));
|
|
||||||
constraints.nextRow();
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,9 +36,8 @@ public interface Editor<T> {
|
|||||||
* @param key the key which is to edit
|
* @param key the key which is to edit
|
||||||
* @param elementAttributes the attributes
|
* @param elementAttributes the attributes
|
||||||
* @param dialog the containing dialog
|
* @param dialog the containing dialog
|
||||||
* @param constraints the constraints used to place the components in the panel
|
|
||||||
*/
|
*/
|
||||||
void addToPanel(JPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog dialog, ConstraintsBuilder constraints);
|
void addToPanel(EditorPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog dialog);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to enable/disable the component.
|
* Used to enable/disable the component.
|
||||||
|
@ -122,7 +122,7 @@ public final class EditorFactory {
|
|||||||
private JLabel label;
|
private JLabel label;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addToPanel(JPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog attributeDialog, ConstraintsBuilder constraints) {
|
public void addToPanel(EditorPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog attributeDialog) {
|
||||||
this.attributeDialog = attributeDialog;
|
this.attributeDialog = attributeDialog;
|
||||||
label = new JLabel(key.getName() + ": ");
|
label = new JLabel(key.getName() + ": ");
|
||||||
final String description = new LineBreaker().toHTML().breakLines(key.getDescription());
|
final String description = new LineBreaker().toHTML().breakLines(key.getDescription());
|
||||||
@ -130,12 +130,12 @@ public final class EditorFactory {
|
|||||||
component = getComponent(elementAttributes);
|
component = getComponent(elementAttributes);
|
||||||
component.setToolTipText(description);
|
component.setToolTipText(description);
|
||||||
if (labelAtTop) {
|
if (labelAtTop) {
|
||||||
panel.add(label, constraints.width(2));
|
panel.add(label, cb -> cb.width(2));
|
||||||
constraints.nextRow();
|
panel.nextRow();
|
||||||
panel.add(component, constraints.width(2).dynamicHeight());
|
panel.add(component, cb -> cb.width(2).dynamicHeight());
|
||||||
} else {
|
} else {
|
||||||
panel.add(label, constraints);
|
panel.add(label);
|
||||||
panel.add(component, constraints.x(1).dynamicWidth());
|
panel.add(component, cb -> cb.x(1).dynamicWidth());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,8 +466,8 @@ public final class EditorFactory {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addToPanel(JPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog attributeDialog, ConstraintsBuilder constraints) {
|
public void addToPanel(EditorPanel panel, Key key, ElementAttributes elementAttributes, AttributeDialog attributeDialog) {
|
||||||
panel.add(bool, constraints.width(2));
|
panel.add(bool, cb -> cb.width(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
113
src/main/java/de/neemann/digital/gui/components/EditorPanel.java
Normal file
113
src/main/java/de/neemann/digital/gui/components/EditorPanel.java
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
import de.neemann.gui.ToolTipAction;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Panel used in the editor
|
||||||
|
*/
|
||||||
|
public class EditorPanel {
|
||||||
|
/**
|
||||||
|
* The Id for the primary panel
|
||||||
|
*/
|
||||||
|
public static final String PRIMARY = "primary";
|
||||||
|
/**
|
||||||
|
* The Id for the secondary panel
|
||||||
|
*/
|
||||||
|
public static final String SECONDARY = "secondary";
|
||||||
|
|
||||||
|
private final JPanel panel;
|
||||||
|
private final ConstraintsBuilder constraints;
|
||||||
|
private final String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new instance
|
||||||
|
*
|
||||||
|
* @param id the panels id, used to identify the panel and as part of the language key
|
||||||
|
*/
|
||||||
|
public EditorPanel(String id) {
|
||||||
|
this.id = id;
|
||||||
|
panel = new JPanel(new GridBagLayout());
|
||||||
|
constraints = new ConstraintsBuilder().inset(3).fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves to the next row
|
||||||
|
*/
|
||||||
|
public void nextRow() {
|
||||||
|
constraints.nextRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return this panel wrapped with a scroll pane
|
||||||
|
*/
|
||||||
|
public Component getScrollPane() {
|
||||||
|
return new JScrollPane(panel);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the language key
|
||||||
|
*/
|
||||||
|
public String getLangKey() {
|
||||||
|
return "attr_panel_" + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a component using the default constrains
|
||||||
|
*
|
||||||
|
* @param component the components to add
|
||||||
|
*/
|
||||||
|
public void add(JComponent component) {
|
||||||
|
panel.add(component, constraints);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a component
|
||||||
|
*
|
||||||
|
* @param component the components to add
|
||||||
|
* @param c allows to modify the constraints
|
||||||
|
*/
|
||||||
|
public void add(JComponent component, Constraints c) {
|
||||||
|
panel.add(component, c.create(constraints));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a button
|
||||||
|
*
|
||||||
|
* @param label the label to use
|
||||||
|
* @param action the action to use
|
||||||
|
*/
|
||||||
|
public void addButton(String label, ToolTipAction action) {
|
||||||
|
panel.add(new JLabel(label), constraints);
|
||||||
|
panel.add(action.createJButton(), constraints.x(1));
|
||||||
|
constraints.nextRow();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the panels id
|
||||||
|
*/
|
||||||
|
public String getPanelId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The interface used to modify the constraints
|
||||||
|
*/
|
||||||
|
interface Constraints {
|
||||||
|
/**
|
||||||
|
* Allows to modify the constraints
|
||||||
|
*
|
||||||
|
* @param cb the default constraints
|
||||||
|
* @return the modified constraints
|
||||||
|
*/
|
||||||
|
ConstraintsBuilder create(ConstraintsBuilder cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,8 +19,8 @@
|
|||||||
<string name="attr_dialogHighz">HighZ</string>
|
<string name="attr_dialogHighz">HighZ</string>
|
||||||
<string name="attr_dialogOctal">Oktal</string>
|
<string name="attr_dialogOctal">Oktal</string>
|
||||||
<string name="attr_dialogBinary">Binär</string>
|
<string name="attr_dialogBinary">Binär</string>
|
||||||
<string name="attr_primary">Standard</string>
|
<string name="attr_panel_primary">Standard</string>
|
||||||
<string name="attr_secondary">Erweitert</string>
|
<string name="attr_panel_secondary">Erweitert</string>
|
||||||
<string name="btn_discard">Verwerfen</string>
|
<string name="btn_discard">Verwerfen</string>
|
||||||
<string name="btn_edit">Bearbeiten</string>
|
<string name="btn_edit">Bearbeiten</string>
|
||||||
<string name="btn_editFurther">Weiter bearbeiten</string>
|
<string name="btn_editFurther">Weiter bearbeiten</string>
|
||||||
@ -1313,18 +1313,31 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
|
|||||||
Die Eingänge eines 8-Bit Addierers könnten also mit "a:8,b:8,c_in" beschrieben werden.</string>
|
Die Eingänge eines 8-Bit Addierers könnten also mit "a:8,b:8,c_in" beschrieben werden.</string>
|
||||||
<string name="key_externalOutputs">Ausgänge</string>
|
<string name="key_externalOutputs">Ausgänge</string>
|
||||||
<string name="key_externalOutputs_tt">Die Ausgänge des externen Prozesses. Es handelt sich um eine kommaseparierte
|
<string name="key_externalOutputs_tt">Die Ausgänge des externen Prozesses. Es handelt sich um eine kommaseparierte
|
||||||
Liste mit Signalnamen. Bei jedem Signalnamen kann, mit einem Doppelpunkt getrennt, eine Bitanzahl angegeben werden.
|
Liste mit Signalnamen. Bei jedem Signalnamen kann, mit einem Doppelpunkt getrennt, eine Bitanzahl angegeben
|
||||||
Die Ausgänge eines 8-Bit Addierers könnten also mit "s:8,c_out" beschrieben werden.</string>
|
werden.
|
||||||
|
Die Ausgänge eines 8-Bit Addierers könnten also mit "s:8,c_out" beschrieben werden.
|
||||||
|
</string>
|
||||||
<string name="key_Code">Programmcode</string>
|
<string name="key_Code">Programmcode</string>
|
||||||
<string name="key_Code_tt">Der Programmcode welcher ausgeführt werden soll.</string>
|
<string name="key_Code_tt">Der Programmcode welcher ausgeführt werden soll.</string>
|
||||||
|
<string name="attr_panel_ghdl">GHDL</string>
|
||||||
<string name="key_ghdlPath">GHDL</string>
|
<string name="key_ghdlPath">GHDL</string>
|
||||||
<string name="key_ghdlPath_tt">Pfad der ausführbaren ghdl-Datei. Nur wichtig, wenn ghdl zur Interpretation von
|
<string name="key_ghdlPath_tt">Pfad der ausführbaren ghdl-Datei. Nur wichtig, wenn ghdl zur Interpretation von
|
||||||
VHDL-Code verwendet werden soll.</string>
|
VHDL-Code verwendet werden soll.
|
||||||
|
</string>
|
||||||
|
<string name="key_ghdlOptAnalysis">Analyse</string>
|
||||||
|
<string name="key_ghdlOptAnalysis_tt">Optionen, die für die Analyse durch GHDL verwendet werden.</string>
|
||||||
|
<string name="key_ghdlOptElaboration">Elaboration</string>
|
||||||
|
<string name="key_ghdlOptElaboration_tt">Optionen, die für die Elaboration durch GHDL verwendet werden.</string>
|
||||||
|
<string name="key_ghdlOptRun">Start</string>
|
||||||
|
<string name="key_ghdlOptRun_tt">Optionen, die für den Start durch GHDL verwendet werden.</string>
|
||||||
<string name="key_iverilogPath">IVerilog</string>
|
<string name="key_iverilogPath">IVerilog</string>
|
||||||
<string name="key_iverilogPath_tt">Pfad zum Icarus-Verilog-Installationsordner. Nur notwendig, wenn Sie iverilog
|
<string name="key_iverilogPath_tt">Pfad zum Icarus-Verilog-Installationsordner. Nur notwendig, wenn Sie iverilog
|
||||||
verwenden möchten, um mit Verilog definierte Komponenten zu simulieren.</string>
|
verwenden möchten, um mit Verilog definierte Komponenten zu simulieren.
|
||||||
|
</string>
|
||||||
<string name="key_maxValue">Maximalwert</string>
|
<string name="key_maxValue">Maximalwert</string>
|
||||||
<string name="key_maxValue_tt">Wird hier eine Null eingetragen, wird der maximal mögliche Wert verwendet (Alle Bits sind Eins).</string>
|
<string name="key_maxValue_tt">Wird hier eine Null eingetragen, wird der maximal mögliche Wert verwendet (Alle Bits
|
||||||
|
sind Eins).
|
||||||
|
</string>
|
||||||
|
|
||||||
<string name="key_dipDefault">Ausgabe ist High</string>
|
<string name="key_dipDefault">Ausgabe ist High</string>
|
||||||
<string name="key_dipDefault_tt">Der Vorgabewert des DIP-Schalters, wenn die Simulation gestartet wird.</string>
|
<string name="key_dipDefault_tt">Der Vorgabewert des DIP-Schalters, wenn die Simulation gestartet wird.</string>
|
||||||
|
@ -19,8 +19,8 @@
|
|||||||
<string name="attr_dialogHighz">HighZ</string>
|
<string name="attr_dialogHighz">HighZ</string>
|
||||||
<string name="attr_dialogOctal">Octal</string>
|
<string name="attr_dialogOctal">Octal</string>
|
||||||
<string name="attr_dialogBinary">Binary</string>
|
<string name="attr_dialogBinary">Binary</string>
|
||||||
<string name="attr_primary">Basic</string>
|
<string name="attr_panel_primary">Basic</string>
|
||||||
<string name="attr_secondary">Advanced</string>
|
<string name="attr_panel_secondary">Advanced</string>
|
||||||
<string name="btn_discard">Discard Changes</string>
|
<string name="btn_discard">Discard Changes</string>
|
||||||
<string name="btn_edit">Edit</string>
|
<string name="btn_edit">Edit</string>
|
||||||
<string name="btn_editFurther">Continue editing</string>
|
<string name="btn_editFurther">Continue editing</string>
|
||||||
@ -1289,15 +1289,27 @@
|
|||||||
<string name="key_externalOutputs">Outputs</string>
|
<string name="key_externalOutputs">Outputs</string>
|
||||||
<string name="key_externalOutputs_tt">The outputs of the external process.
|
<string name="key_externalOutputs_tt">The outputs of the external process.
|
||||||
It is a comma-separated list of signal names. For each signal name, with a colon separated, a number of bits
|
It is a comma-separated list of signal names. For each signal name, with a colon separated, a number of bits
|
||||||
can be specified. The outputs of an 8-bit adder could thus be described as "s:8,c_out".</string>
|
can be specified. The outputs of an 8-bit adder could thus be described as "s:8,c_out".
|
||||||
|
</string>
|
||||||
<string name="key_Code">Programcode</string>
|
<string name="key_Code">Programcode</string>
|
||||||
<string name="key_Code_tt">The programm code to be executed by the external application.</string>
|
<string name="key_Code_tt">The programm code to be executed by the external application.</string>
|
||||||
|
<string name="attr_panel_ghdl">GHDL</string>
|
||||||
<string name="key_ghdlPath">GHDL</string>
|
<string name="key_ghdlPath">GHDL</string>
|
||||||
<string name="key_ghdlPath_tt">Path to the executable ghdl file. Only necessary if you want to use ghdl to simulate
|
<string name="key_ghdlPath_tt">Path to the executable ghdl file. Only necessary if you want to use ghdl to simulate
|
||||||
components defined with vhdl.</string>
|
components defined with vhdl.
|
||||||
|
</string>
|
||||||
|
<string name="key_ghdlOptAnalysis">Analysis</string>
|
||||||
|
<string name="key_ghdlOptAnalysis_tt">Options used for the GHDL analysis.</string>
|
||||||
|
<string name="key_ghdlOptElaboration">Elaboration</string>
|
||||||
|
<string name="key_ghdlOptElaboration_tt">Options used for the GHDL elaboration.</string>
|
||||||
|
<string name="key_ghdlOptRun">Run</string>
|
||||||
|
<string name="key_ghdlOptRun_tt">Options used for the start of GHDL.</string>
|
||||||
|
|
||||||
<string name="key_iverilogPath">IVerilog</string>
|
<string name="key_iverilogPath">IVerilog</string>
|
||||||
<string name="key_iverilogPath_tt">Path to the Icarus verilog installation folder. Only necessary if you want to use iverilog to simulate
|
<string name="key_iverilogPath_tt">Path to the Icarus verilog installation folder. Only necessary if you want to use
|
||||||
components defined with verilog.</string>
|
iverilog to simulate
|
||||||
|
components defined with verilog.
|
||||||
|
</string>
|
||||||
<string name="key_maxValue">Maximum Value</string>
|
<string name="key_maxValue">Maximum Value</string>
|
||||||
<string name="key_maxValue_tt">If a zero is entered, the maximum possible value is used (all bits are one).</string>
|
<string name="key_maxValue_tt">If a zero is entered, the maximum possible value is used (all bits are one).</string>
|
||||||
|
|
||||||
|
@ -9,28 +9,28 @@
|
|||||||
<string name="maxValue">máximo</string>
|
<string name="maxValue">máximo</string>
|
||||||
<string name="attr_dialogTitle">Propiedades</string>
|
<string name="attr_dialogTitle">Propiedades</string>
|
||||||
<string name="attr_openCircuit">Abrir circuito</string>
|
<string name="attr_openCircuit">Abrir circuito</string>
|
||||||
<string name="attr_openCircuitLabel">Incluir circuito:</string>
|
<string name="attr_openCircuitLabel">Incluir circuito:</string>
|
||||||
<string name="attr_openCircuit_tt">Abre el circuito en una ventana nueva</string>
|
<string name="attr_openCircuit_tt">Abre el circuito en una ventana nueva</string>
|
||||||
<string name="attr_help">Ayuda</string>
|
<string name="attr_help">Ayuda</string>
|
||||||
<string name="attr_help_tt">Muestra una pequeña descripción de este elemento</string>
|
<string name="attr_help_tt">Muestra una pequeña descripción de este elemento</string>
|
||||||
<string name="attr_dialogHex">HEX</string>
|
<string name="attr_dialogHex">HEX</string>
|
||||||
<string name="attr_dialogDecimal">Decimal</string>
|
<string name="attr_dialogDecimal">Decimal</string>
|
||||||
<string name="attr_dialogAscii">ASCII</string>
|
<string name="attr_dialogAscii">ASCII</string>
|
||||||
<string name="attr_dialogHighz">Alta impedancia</string>
|
<string name="attr_dialogHighz">Alta impedancia</string>
|
||||||
<string name="attr_dialogOctal">Octal</string>
|
<string name="attr_dialogOctal">Octal</string>
|
||||||
<string name="attr_dialogBinary">Binario</string>
|
<string name="attr_dialogBinary">Binario</string>
|
||||||
<string name="attr_primary">Básico</string>
|
<string name="attr_panel_primary">Básico</string>
|
||||||
<string name="attr_secondary">Avanzado</string>
|
<string name="attr_panel_secondary">Avanzado</string>
|
||||||
<string name="btn_discard">Descartar cambios</string>
|
<string name="btn_discard">Descartar cambios</string>
|
||||||
<string name="btn_edit">Editar</string>
|
<string name="btn_edit">Editar</string>
|
||||||
<string name="btn_editFurther">Seguir editando</string>
|
<string name="btn_editFurther">Seguir editando</string>
|
||||||
<string name="btn_load">Cargar</string>
|
<string name="btn_load">Cargar</string>
|
||||||
<string name="btn_reload">Recargar</string>
|
<string name="btn_reload">Recargar</string>
|
||||||
<string name="btn_reload_tt">Recargar último archivo HEX</string>
|
<string name="btn_reload_tt">Recargar último archivo HEX</string>
|
||||||
<string name="btn_save">Guardar</string>
|
<string name="btn_save">Guardar</string>
|
||||||
<string name="btn_saveAsHex_tt">Guardar como archivo HEX</string>
|
<string name="btn_saveAsHex_tt">Guardar como archivo HEX</string>
|
||||||
<string name="btn_create">Crear</string>
|
<string name="btn_create">Crear</string>
|
||||||
<string name="btn_create_tt">Crear un circuito en otra ventana</string>
|
<string name="btn_create_tt">Crear un circuito en otra ventana</string>
|
||||||
<string name="btn_editDetached">Editar por separado</string>
|
<string name="btn_editDetached">Editar por separado</string>
|
||||||
<string name="btn_editDetached_tt">Abre el diálogo como no modal</string>
|
<string name="btn_editDetached_tt">Abre el diálogo como no modal</string>
|
||||||
<string name="btn_openInBrowser">Navegador</string>
|
<string name="btn_openInBrowser">Navegador</string>
|
||||||
|
@ -9,28 +9,28 @@
|
|||||||
<string name="maxValue">maximum</string>
|
<string name="maxValue">maximum</string>
|
||||||
<string name="attr_dialogTitle">Attributes</string>
|
<string name="attr_dialogTitle">Attributes</string>
|
||||||
<string name="attr_openCircuit">Open Circuit</string>
|
<string name="attr_openCircuit">Open Circuit</string>
|
||||||
<string name="attr_openCircuitLabel">Included circuit:</string>
|
<string name="attr_openCircuitLabel">Included circuit:</string>
|
||||||
<string name="attr_openCircuit_tt">Opens the circuit in a new window.</string>
|
<string name="attr_openCircuit_tt">Opens the circuit in a new window.</string>
|
||||||
<string name="attr_help">Help</string>
|
<string name="attr_help">Help</string>
|
||||||
<string name="attr_help_tt">Shows a short description of this element.</string>
|
<string name="attr_help_tt">Shows a short description of this element.</string>
|
||||||
<string name="attr_dialogHex">Hex</string>
|
<string name="attr_dialogHex">Hex</string>
|
||||||
<string name="attr_dialogDecimal">Decimal</string>
|
<string name="attr_dialogDecimal">Decimal</string>
|
||||||
<string name="attr_dialogAscii">Ascii</string>
|
<string name="attr_dialogAscii">Ascii</string>
|
||||||
<string name="attr_dialogHighz">HighZ</string>
|
<string name="attr_dialogHighz">HighZ</string>
|
||||||
<string name="attr_dialogOctal">Octal</string>
|
<string name="attr_dialogOctal">Octal</string>
|
||||||
<string name="attr_dialogBinary">Binary</string>
|
<string name="attr_dialogBinary">Binary</string>
|
||||||
<string name="attr_primary">Basic</string>
|
<string name="attr_panel_primary">Basic</string>
|
||||||
<string name="attr_secondary">Advanced</string>
|
<string name="attr_panel_secondary">Advanced</string>
|
||||||
<string name="btn_discard">Discard Changes</string>
|
<string name="btn_discard">Discard Changes</string>
|
||||||
<string name="btn_edit">Edit</string>
|
<string name="btn_edit">Edit</string>
|
||||||
<string name="btn_editFurther">Continue editing</string>
|
<string name="btn_editFurther">Continue editing</string>
|
||||||
<string name="btn_load">Load</string>
|
<string name="btn_load">Load</string>
|
||||||
<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_saveAsHex_tt">Save as HEX file.</string>
|
<string name="btn_saveAsHex_tt">Save as HEX file.</string>
|
||||||
<string name="btn_create">Create</string>
|
<string name="btn_create">Create</string>
|
||||||
<string name="btn_create_tt">Create a circuit in a separate window</string>
|
<string name="btn_create_tt">Create a circuit in a separate window</string>
|
||||||
<string name="btn_editDetached">Edit detached</string>
|
<string name="btn_editDetached">Edit detached</string>
|
||||||
<string name="btn_editDetached_tt">Opens the dialog as a non modal dialog</string>
|
<string name="btn_editDetached_tt">Opens the dialog as a non modal dialog</string>
|
||||||
<string name="btn_openInBrowser">Browser</string>
|
<string name="btn_openInBrowser">Browser</string>
|
||||||
|
@ -9,28 +9,28 @@
|
|||||||
<string name="settings">A seguir descrevem-se as configurações disponíveis no simulador.</string>
|
<string name="settings">A seguir descrevem-se as configurações disponíveis no simulador.</string>
|
||||||
<string name="attr_dialogTitle">Atributos</string>
|
<string name="attr_dialogTitle">Atributos</string>
|
||||||
<string name="attr_openCircuit">Abrir circuito</string>
|
<string name="attr_openCircuit">Abrir circuito</string>
|
||||||
<string name="attr_openCircuitLabel">Incluir circuito:</string>
|
<string name="attr_openCircuitLabel">Incluir circuito:</string>
|
||||||
<string name="attr_openCircuit_tt">Abrir circuito em um nova janela.</string>
|
<string name="attr_openCircuit_tt">Abrir circuito em um nova janela.</string>
|
||||||
<string name="attr_help">Ajuda</string>
|
<string name="attr_help">Ajuda</string>
|
||||||
<string name="attr_help_tt">Mostrar uma breve descrição desse elemento.</string>
|
<string name="attr_help_tt">Mostrar uma breve descrição desse elemento.</string>
|
||||||
<string name="attr_dialogHex">Hexadecimal</string>
|
<string name="attr_dialogHex">Hexadecimal</string>
|
||||||
<string name="attr_dialogDecimal">Decimal</string>
|
<string name="attr_dialogDecimal">Decimal</string>
|
||||||
<string name="attr_dialogAscii">ASCII</string>
|
<string name="attr_dialogAscii">ASCII</string>
|
||||||
<string name="attr_dialogHighz">Alta impedância</string>
|
<string name="attr_dialogHighz">Alta impedância</string>
|
||||||
<string name="attr_dialogOctal">Octal</string>
|
<string name="attr_dialogOctal">Octal</string>
|
||||||
<string name="attr_dialogBinary">Binário</string>
|
<string name="attr_dialogBinary">Binário</string>
|
||||||
<string name="attr_primary">Básico</string>
|
<string name="attr_panel_primary">Básico</string>
|
||||||
<string name="attr_secondary">Avançado</string>
|
<string name="attr_panel_secondary">Avançado</string>
|
||||||
<string name="btn_discard">Descartar alterações</string>
|
<string name="btn_discard">Descartar alterações</string>
|
||||||
<string name="btn_edit">Editar</string>
|
<string name="btn_edit">Editar</string>
|
||||||
<string name="btn_editFurther">Continuar edição</string>
|
<string name="btn_editFurther">Continuar edição</string>
|
||||||
<string name="btn_load">Carregar</string>
|
<string name="btn_load">Carregar</string>
|
||||||
<string name="btn_reload">Recarregar</string>
|
<string name="btn_reload">Recarregar</string>
|
||||||
<string name="btn_reload_tt">Recarregar último arquivo em hexadecimal</string>
|
<string name="btn_reload_tt">Recarregar último arquivo em hexadecimal</string>
|
||||||
<string name="btn_save">Salvar</string>
|
<string name="btn_save">Salvar</string>
|
||||||
<string name="btn_saveAsHex_tt">Salvar como arquivo HEX.</string>
|
<string name="btn_saveAsHex_tt">Salvar como arquivo HEX.</string>
|
||||||
<string name="btn_create">Criar</string>
|
<string name="btn_create">Criar</string>
|
||||||
<string name="btn_create_tt">Criar circuito em janela separada</string>
|
<string name="btn_create_tt">Criar circuito em janela separada</string>
|
||||||
<string name="btn_editDetached">Editar em separado</string>
|
<string name="btn_editDetached">Editar em separado</string>
|
||||||
<string name="btn_editDetached_tt">Abrir diálogo como não modal</string>
|
<string name="btn_editDetached_tt">Abrir diálogo como não modal</string>
|
||||||
<string name="btn_openInBrowser">Navegador</string>
|
<string name="btn_openInBrowser">Navegador</string>
|
||||||
|
@ -10,28 +10,28 @@
|
|||||||
<string name="settings">The following describes the available settings of the simulator.</string>
|
<string name="settings">The following describes the available settings of the simulator.</string>
|
||||||
<string name="attr_dialogTitle">Attributes</string>
|
<string name="attr_dialogTitle">Attributes</string>
|
||||||
<string name="attr_openCircuit">Open Circuit</string>
|
<string name="attr_openCircuit">Open Circuit</string>
|
||||||
<string name="attr_openCircuitLabel">Included circuit:</string>
|
<string name="attr_openCircuitLabel">Included circuit:</string>
|
||||||
<string name="attr_openCircuit_tt">Opens the circuit in a new window.</string>
|
<string name="attr_openCircuit_tt">Opens the circuit in a new window.</string>
|
||||||
<string name="attr_help">Help</string>
|
<string name="attr_help">Help</string>
|
||||||
<string name="attr_help_tt">Shows a short description of this element.</string>
|
<string name="attr_help_tt">Shows a short description of this element.</string>
|
||||||
<string name="attr_dialogHex">Hex</string>
|
<string name="attr_dialogHex">Hex</string>
|
||||||
<string name="attr_dialogDecimal">Decimal</string>
|
<string name="attr_dialogDecimal">Decimal</string>
|
||||||
<string name="attr_dialogAscii">Ascii</string>
|
<string name="attr_dialogAscii">Ascii</string>
|
||||||
<string name="attr_dialogHighz">HighZ</string>
|
<string name="attr_dialogHighz">HighZ</string>
|
||||||
<string name="attr_dialogOctal">Octal</string>
|
<string name="attr_dialogOctal">Octal</string>
|
||||||
<string name="attr_dialogBinary">Binary</string>
|
<string name="attr_dialogBinary">Binary</string>
|
||||||
<string name="attr_primary">Basic</string>
|
<string name="attr_panel_primary">Basic</string>
|
||||||
<string name="attr_secondary">Advanced</string>
|
<string name="attr_panel_secondary">Advanced</string>
|
||||||
<string name="btn_discard">Discard Changes</string>
|
<string name="btn_discard">Discard Changes</string>
|
||||||
<string name="btn_edit">Edit</string>
|
<string name="btn_edit">Edit</string>
|
||||||
<string name="btn_editFurther">Continue editing</string>
|
<string name="btn_editFurther">Continue editing</string>
|
||||||
<string name="btn_load">Load</string>
|
<string name="btn_load">Load</string>
|
||||||
<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_saveAsHex_tt">Save as HEX file.</string>
|
<string name="btn_saveAsHex_tt">Save as HEX file.</string>
|
||||||
<string name="btn_create">Create</string>
|
<string name="btn_create">Create</string>
|
||||||
<string name="btn_create_tt">Create a circuit in a separate window</string>
|
<string name="btn_create_tt">Create a circuit in a separate window</string>
|
||||||
<string name="btn_editDetached">Edit detached</string>
|
<string name="btn_editDetached">Edit detached</string>
|
||||||
<string name="btn_editDetached_tt">Opens the dialog as a non modal dialog</string>
|
<string name="btn_editDetached_tt">Opens the dialog as a non modal dialog</string>
|
||||||
<string name="btn_openInBrowser">Browser</string>
|
<string name="btn_openInBrowser">Browser</string>
|
||||||
|
26
src/test/java/de/neemann/digital/core/extern/OptionsTest.java
vendored
Normal file
26
src/test/java/de/neemann/digital/core/extern/OptionsTest.java
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* 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.core.extern;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class OptionsTest extends TestCase {
|
||||||
|
|
||||||
|
public void testSimple() {
|
||||||
|
check(new Options().addString("-a -e -u=zzz"), "-a", "-e", "-u=zzz");
|
||||||
|
check(new Options().addString("-a -e -u=\"Hello World\""), "-a", "-e", "-u=\"Hello World\"");
|
||||||
|
check(new Options().addString("-a -u=\"Hello World\" -e"), "-a", "-u=\"Hello World\"", "-e");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void check(Options options, String... opt) {
|
||||||
|
ArrayList<String> l = options.getList();
|
||||||
|
assertEquals(opt.length, l.size());
|
||||||
|
for (int i = 0; i < opt.length; i++)
|
||||||
|
assertEquals(opt[i], l.get(i));
|
||||||
|
}
|
||||||
|
}
|
@ -68,7 +68,7 @@ public class TestLang extends TestCase {
|
|||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for (String key : map.keySet()) {
|
for (String key : map.keySet()) {
|
||||||
if (!keys.contains(key)) {
|
if (!keys.contains(key)) {
|
||||||
if (!(key.startsWith("key_") || key.startsWith("elem_") || key.startsWith("tutorial"))) {
|
if (!(key.startsWith("key_") || key.startsWith("elem_") || key.startsWith("attr_panel_") || key.startsWith("tutorial"))) {
|
||||||
if (sb.length() > 0)
|
if (sb.length() > 0)
|
||||||
sb.append(", ");
|
sb.append(", ");
|
||||||
sb.append('"').append(key).append('"');
|
sb.append('"').append(key).append('"');
|
||||||
|
@ -894,7 +894,7 @@
|
|||||||
</wire>
|
</wire>
|
||||||
<wire>
|
<wire>
|
||||||
<p1 x="760" y="980"/>
|
<p1 x="760" y="980"/>
|
||||||
<p2 x="780" y="980"/>
|
<p2 x="820" y="980"/>
|
||||||
</wire>
|
</wire>
|
||||||
<wire>
|
<wire>
|
||||||
<p1 x="280" y="980"/>
|
<p1 x="280" y="980"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user