better error messages, fixed som library bugs

This commit is contained in:
hneemann 2016-03-27 22:19:14 +02:00
parent 784bafb67e
commit 59bc557fc1
8 changed files with 46 additions and 21 deletions

View File

@ -54,4 +54,9 @@ public class Pin {
} }
public enum Direction {input, output, both} public enum Direction {input, output, both}
@Override
public String toString() {
return name;
}
} }

View File

@ -17,15 +17,17 @@ public class CustomElement implements Element {
private final NetList netList; private final NetList netList;
private final Circuit circuit; private final Circuit circuit;
private final ElementLibrary library; private final ElementLibrary library;
private final String name;
public CustomElement(Circuit circuit, ElementLibrary library) { public CustomElement(Circuit circuit, ElementLibrary library, String name) {
this.circuit = circuit; this.circuit = circuit;
this.library = library; this.library = library;
this.name = name;
netList = new NetList(circuit.getWires()); netList = new NetList(circuit.getWires());
} }
public ModelDescription getModelDescription() throws PinException, NodeException { public ModelDescription getModelDescription() throws PinException, NodeException {
return new ModelDescription(circuit, library, true, new NetList(netList)); return new ModelDescription(circuit, library, true, name, new NetList(netList));
} }
@Override @Override

View File

@ -38,10 +38,10 @@ public class ModelDescription implements Iterable<ModelEntry> {
this(circuit, library, false); this(circuit, library, false);
} }
public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom) throws PinException, NodeException { public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom) throws PinException, NodeException {
this(circuit, library, readAsCustom, new NetList(circuit.getWires())); this(circuit, library, readAsCustom, "unknown", new NetList(circuit.getWires()));
} }
public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom, NetList netList) throws PinException, NodeException { public ModelDescription(Circuit circuit, ElementLibrary library, boolean readAsCustom, String fileName, NetList netList) throws PinException, NodeException {
this.netList = netList; this.netList = netList;
entries = new ArrayList<>(); entries = new ArrayList<>();
if (readAsCustom) if (readAsCustom)
@ -63,9 +63,11 @@ public class ModelDescription implements Iterable<ModelEntry> {
if (elementType == In.DESCRIPTION || elementType == Out.DESCRIPTION) { if (elementType == In.DESCRIPTION || elementType == Out.DESCRIPTION) {
String label = ve.getElementAttributes().get(AttributeKey.Label); String label = ve.getElementAttributes().get(AttributeKey.Label);
if (label == null || label.length() == 0) if (label == null || label.length() == 0)
throw new PinException(Lang.get("err_pinWithoutName")); throw new PinException(Lang.get("err_pinWithoutName", fileName));
if (pins.size() != 1) if (pins.size() != 1)
throw new PinException(Lang.get("err_N_isNotInputOrOutput", label)); throw new PinException(Lang.get("err_N_isNotInputOrOutput", label, fileName));
if (ioMap.containsKey(label))
throw new PinException(Lang.get("err_duplicatePinLabel", label, fileName));
ioMap.put(label, pins.get(0)); ioMap.put(label, pins.get(0));
isNotAIO = false; isNotAIO = false;

View File

@ -36,6 +36,7 @@ public class MissingShape implements Shape {
@Override @Override
public void drawTo(Graphic graphic) { public void drawTo(Graphic graphic) {
Style style = Style.SHAPE_PIN; Style style = Style.SHAPE_PIN;
graphic.drawLine(new Vector(0, 0), new Vector(0, style.getFontSize()), style);
graphic.drawText(new Vector(0, 0), new Vector(1, 0), message, Orientation.LEFTBOTTOM, style); graphic.drawText(new Vector(0, 0), new Vector(1, 0), message, Orientation.LEFTBOTTOM, style);
if (cause != null && cause.length() > 0) if (cause != null && cause.length() > 0)
graphic.drawText(new Vector(0, style.getFontSize()), new Vector(1, style.getFontSize()), cause, Orientation.LEFTBOTTOM, style); graphic.drawText(new Vector(0, style.getFontSize()), new Vector(1, style.getFontSize()), cause, Orientation.LEFTBOTTOM, style);

View File

@ -27,7 +27,7 @@ public class LibrarySelector implements ElementNotFoundNotification {
private JMenu customMenu; private JMenu customMenu;
private InsertHistory insertHistory; private InsertHistory insertHistory;
private CircuitComponent circuitComponent; private CircuitComponent circuitComponent;
private ArrayList<String> importedElements; private ArrayList<ImportedItem> importedElements;
public LibrarySelector(ElementLibrary library) { public LibrarySelector(ElementLibrary library) {
this.library = library; this.library = library;
@ -56,8 +56,10 @@ public class LibrarySelector implements ElementNotFoundNotification {
customMenu.add(new ToolTipAction(Lang.get("menu_refresh")) { customMenu.add(new ToolTipAction(Lang.get("menu_refresh")) {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
for (String name : importedElements) for (ImportedItem item : importedElements) {
library.removeElement(name); library.removeElement(item.name);
customMenu.remove(item.menuEntry);
}
} }
}.setToolTip(Lang.get("menu_refresh_tt"))); }.setToolTip(Lang.get("menu_refresh_tt")));
@ -71,7 +73,7 @@ public class LibrarySelector implements ElementNotFoundNotification {
parts.add(subMenu); parts.add(subMenu);
lastPath = path; lastPath = path;
} }
subMenu.add(new InsertAction(pc.getName(), insertHistory, circuitComponent)); subMenu.add(new InsertAction(pc.getName(), insertHistory, circuitComponent).createJMenuItem());
} }
return parts; return parts;
@ -117,13 +119,15 @@ public class LibrarySelector implements ElementNotFoundNotification {
Circuit circuit = Circuit.loadCircuit(file); Circuit circuit = Circuit.loadCircuit(file);
ElementTypeDescription description = ElementTypeDescription description =
new ElementTypeDescription(file.getName(), new ElementTypeDescription(file.getName(),
attributes -> new CustomElement(circuit, library), attributes -> new CustomElement(circuit, library, file.getName()),
circuit.getInputNames(library)) circuit.getInputNames(library))
.setShortName(createShortName(file)); .setShortName(createShortName(file));
library.addDescription(description); library.addDescription(description);
JMenuItem menuEntry = new InsertAction(description.getName(), insertHistory, circuitComponent).createJMenuItem();
if (customMenu != null) if (customMenu != null)
customMenu.add(new InsertAction(description.getName(), insertHistory, circuitComponent)); customMenu.add(menuEntry);
importedElements.add(description.getName());
importedElements.add(new ImportedItem(description.getName(), menuEntry));
return description; return description;
} catch (Exception e) { } catch (Exception e) {
SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_errorImportingModel")).addCause(e)); SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_errorImportingModel")).addCause(e));
@ -137,4 +141,13 @@ public class LibrarySelector implements ElementNotFoundNotification {
return name; return name;
} }
private static class ImportedItem {
private final String name;
private final JMenuItem menuEntry;
public ImportedItem(String name, JMenuItem menuEntry) {
this.name = name;
this.menuEntry = menuEntry;
}
}
} }

View File

@ -53,15 +53,15 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
private Model model; private Model model;
private ModelDescription modelDescription; private ModelDescription modelDescription;
public Main(File filename) { public Main(File fileToOpen) {
super(Lang.get("digital")); super(Lang.get("digital"));
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
Circuit cr = new Circuit(); Circuit cr = new Circuit();
circuitComponent = new CircuitComponent(cr, library); circuitComponent = new CircuitComponent(cr, library);
if (filename != null) { if (fileToOpen != null) {
SwingUtilities.invokeLater(() -> loadFile(filename)); SwingUtilities.invokeLater(() -> loadFile(fileToOpen));
} else { } else {
String name = prefs.get("name", null); String name = prefs.get("name", null);
if (name != null) { if (name != null) {

View File

@ -41,11 +41,12 @@ err_burnError=Es sind mehrere Ausg\u00E4nge zusammengeschaltet
err_needs_N0_bits_found_N2_bits=Es werden {0} Bits ben\u00F6tigt, aber es wurden {1} Bits gefunden err_needs_N0_bits_found_N2_bits=Es werden {0} Bits ben\u00F6tigt, aber es wurden {1} Bits gefunden
err_selectorInputCountMismatch=Die Zahl der Eing\u00E4nge passt nicht zur Bitbreite der Auswahlleitung err_selectorInputCountMismatch=Die Zahl der Eing\u00E4nge passt nicht zur Bitbreite der Auswahlleitung
err_splitterBitsMismatch=Die Bitzahl am Spiltter passt nicht err_splitterBitsMismatch=Die Bitzahl am Spiltter passt nicht
err_pinWithoutName=Es gibt einen Pin ohne einen Namen err_pinWithoutName=Es gibt einen Pin ohne einen Namen in {0}
err_pin_N_unknown=Pin {0} ist unbekannt err_pin_N_unknown=Pin {0} ist unbekannt
err_pin_N_notFound=Pin {0} wurde nicht gefunden. err_pin_N_notFound=Pin {0} wurde nicht gefunden.
err_netOfPin_N_notFound=Das Netz von Pin {0} wurde nicht gefunden err_netOfPin_N_notFound=Das Netz von Pin {0} wurde nicht gefunden
err_N_isNotInputOrOutput=Pin {0} ist werder Eingang noch Ausgang err_N_isNotInputOrOutput=Pin {0} in Element {1} ist werder Eingang noch Ausgang
err_duplicatePinLabel=Pin {0} in Element {1} exitiert mehrfach
err_pin_N0_atElement_N1_notFound=Pin {0} von Element {1} wurde nicht gefunden err_pin_N0_atElement_N1_notFound=Pin {0} von Element {1} wurde nicht gefunden
err_noValueSetFor_N0_atElement_N1=Kein Wert gesetzt f\u00FCr {0} an Element {1} err_noValueSetFor_N0_atElement_N1=Kein Wert gesetzt f\u00FCr {0} an Element {1}
err_onOutConnectedToWire=Kein Ausgang mit der Leitung verbunden err_onOutConnectedToWire=Kein Ausgang mit der Leitung verbunden
@ -67,7 +68,7 @@ msg_errorCreatingModel=Fehler beim Erzeugen des Modells
msg_errorWritingFile=Fehler beim Schreiben einer Datei msg_errorWritingFile=Fehler beim Schreiben einer Datei
msg_errorReadingFile=Fehler beim Lesen einer Datei msg_errorReadingFile=Fehler beim Lesen einer Datei
msg_errorCalculatingStep=Fehler beim Berechnen eines Schrittes msg_errorCalculatingStep=Fehler beim Berechnen eines Schrittes
msg_missingShape_N=Es fehlt ein Diagramm für {0} msg_missingShape_N=Es fehlt ein Diagramm f\u00FCr {0}
btn_edit=Bearbeiten btn_edit=Bearbeiten
btn_load=Laden btn_load=Laden
tt_moveItemUp=Eintrag nach oben schieben tt_moveItemUp=Eintrag nach oben schieben

View File

@ -41,11 +41,12 @@ err_burnError=More then one output is active on a wire
err_needs_N0_bits_found_N2_bits=There are {0} bits needed, but {1} bits found err_needs_N0_bits_found_N2_bits=There are {0} bits needed, but {1} bits found
err_selectorInputCountMismatch=Number of inputs does not match selector bit count err_selectorInputCountMismatch=Number of inputs does not match selector bit count
err_splitterBitsMismatch=Bit count of splitter is not matching err_splitterBitsMismatch=Bit count of splitter is not matching
err_pinWithoutName=Found a pin without a name err_pinWithoutName=Found a pin without a name in {0}
err_pin_N_unknown=Pin {0} unknown err_pin_N_unknown=Pin {0} unknown
err_pin_N_notFound=Pin {0} not found err_pin_N_notFound=Pin {0} not found
err_netOfPin_N_notFound=Net of pin {0} not found err_netOfPin_N_notFound=Net of pin {0} not found
err_N_isNotInputOrOutput=Pin {0} is not a input or output err_N_isNotInputOrOutput=Pin {0} in element {1} is not a input or output
err_duplicatePinLabel=Pin {0} in element {1} exists twice
err_pin_N0_atElement_N1_notFound=Pin {0} not found at Element {1} err_pin_N0_atElement_N1_notFound=Pin {0} not found at Element {1}
err_noValueSetFor_N0_atElement_N1=No value set for {0} at Element {1} err_noValueSetFor_N0_atElement_N1=No value set for {0} at Element {1}
err_onOutConnectedToWire=No output connected to a wire err_onOutConnectedToWire=No output connected to a wire