restricted nested editing

This commit is contained in:
hneemann 2016-03-28 09:49:36 +02:00
parent 6084d6383c
commit 61d5922a76
5 changed files with 63 additions and 19 deletions

View File

@ -124,11 +124,18 @@ public class LibrarySelector implements ElementNotFoundNotification {
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(); JMenuItem menuEntry = new InsertAction(description.getName(), insertHistory, circuitComponent).createJMenuItem();
ImportedItem item = findImportedItem(description.getName());
if (item != null) {
if (customMenu != null) {
customMenu.remove(item.menuEntry);
}
importedElements.remove(item);
}
importedElements.add(new ImportedItem(description.getName(), menuEntry));
if (customMenu != null) if (customMenu != null)
customMenu.add(menuEntry); customMenu.add(menuEntry);
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));
@ -136,6 +143,14 @@ public class LibrarySelector implements ElementNotFoundNotification {
return null; return null;
} }
private ImportedItem findImportedItem(String name) {
for (ImportedItem i : importedElements) {
if (i.name.equals(name))
return i;
}
return null;
}
private String createShortName(File file) { private String createShortName(File file) {
String name = file.getName(); String name = file.getName();
if (name.endsWith(".dig")) name = name.substring(0, name.length() - 4); if (name.endsWith(".dig")) name = name.substring(0, name.length() - 4);

View File

@ -49,31 +49,35 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
private final JCheckBoxMenuItem runClock; private final JCheckBoxMenuItem runClock;
private final LibrarySelector librarySelector; private final LibrarySelector librarySelector;
private final ShapeFactory shapeFactory; private final ShapeFactory shapeFactory;
private final SavedListener savedListener;
private File lastFilename; private File lastFilename;
private File filename; private File filename;
private Model model; private Model model;
private ModelDescription modelDescription; private ModelDescription modelDescription;
public Main() { public Main() {
this(null, null); this(null, null, null);
} }
public Main(Component parent, File fileToOpen) { public Main(Component parent, File fileToOpen, SavedListener savedListener) {
super(Lang.get("digital")); super(Lang.get("digital"));
this.savedListener = savedListener;
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
library = new ElementLibrary(); library = new ElementLibrary();
shapeFactory = new ShapeFactory(library); shapeFactory = new ShapeFactory(library);
boolean normalMode = savedListener == null;
Circuit cr = new Circuit(); Circuit cr = new Circuit();
circuitComponent = new CircuitComponent(cr, library); circuitComponent = new CircuitComponent(cr, library);
if (fileToOpen != null) { if (fileToOpen != null) {
SwingUtilities.invokeLater(() -> loadFile(fileToOpen)); SwingUtilities.invokeLater(() -> loadFile(fileToOpen, false));
} else { } else {
String name = prefs.get("name", null); String name = prefs.get("name", null);
if (name != null) { if (name != null) {
SwingUtilities.invokeLater(() -> loadFile(new File(name))); SwingUtilities.invokeLater(() -> loadFile(new File(name), false));
} }
} }
@ -88,11 +92,11 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) { if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
setFilename(null); setFilename(null, true);
circuitComponent.setCircuit(new Circuit()); circuitComponent.setCircuit(new Circuit());
} }
} }
}; }.setActive(normalMode);
ToolTipAction open = new ToolTipAction(Lang.get("menu_open"), iconOpen) { ToolTipAction open = new ToolTipAction(Lang.get("menu_open"), iconOpen) {
@Override @Override
@ -100,11 +104,11 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) { if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
JFileChooser fc = getjFileChooser(lastFilename); JFileChooser fc = getjFileChooser(lastFilename);
if (fc.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) { if (fc.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) {
loadFile(fc.getSelectedFile()); loadFile(fc.getSelectedFile(), true);
} }
} }
} }
}; }.setActive(normalMode);
ToolTipAction openWin = new ToolTipAction(Lang.get("menu_openWin"), iconOpenWin) { ToolTipAction openWin = new ToolTipAction(Lang.get("menu_openWin"), iconOpenWin) {
@Override @Override
@ -112,13 +116,13 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) { if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
JFileChooser fc = getjFileChooser(lastFilename); JFileChooser fc = getjFileChooser(lastFilename);
if (fc.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) { if (fc.showOpenDialog(Main.this) == JFileChooser.APPROVE_OPTION) {
Main m = new Main(Main.this, fc.getSelectedFile()); Main m = new Main(Main.this, fc.getSelectedFile(), null);
m.setLocationRelativeTo(Main.this); m.setLocationRelativeTo(Main.this);
m.setVisible(true); m.setVisible(true);
} }
} }
} }
}.setToolTip(Lang.get("menu_openWin_tt")); }.setToolTip(Lang.get("menu_openWin_tt")).setActive(normalMode);
ToolTipAction saveas = new ToolTipAction(Lang.get("menu_saveAs"), iconSaveAs) { ToolTipAction saveas = new ToolTipAction(Lang.get("menu_saveAs"), iconSaveAs) {
@ -129,7 +133,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
saveFile(fc.getSelectedFile()); saveFile(fc.getSelectedFile());
} }
} }
}; }.setActive(normalMode);
save = new ToolTipAction(Lang.get("menu_save"), iconSave) { save = new ToolTipAction(Lang.get("menu_save"), iconSave) {
@Override @Override
@ -333,12 +337,12 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
save.actionPerformed(null); save.actionPerformed(null);
} }
private void loadFile(File filename) { private void loadFile(File filename, boolean toPrefs) {
try { try {
librarySelector.setFilePath(filename.getParentFile()); librarySelector.setFilePath(filename.getParentFile());
Circuit circ = Circuit.loadCircuit(filename, shapeFactory); Circuit circ = Circuit.loadCircuit(filename, shapeFactory);
circuitComponent.setCircuit(circ); circuitComponent.setCircuit(circ);
setFilename(filename); setFilename(filename, toPrefs);
} catch (Exception e) { } catch (Exception e) {
circuitComponent.setCircuit(new Circuit()); circuitComponent.setCircuit(new Circuit());
new ErrorMessage(Lang.get("msg_errorReadingFile")).addCause(e).show(this); new ErrorMessage(Lang.get("msg_errorReadingFile")).addCause(e).show(this);
@ -351,17 +355,20 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
try { try {
circuitComponent.getCircuit().save(filename); circuitComponent.getCircuit().save(filename);
setFilename(filename); if (savedListener != null)
savedListener.saved(filename);
setFilename(filename, false);
} catch (IOException e) { } catch (IOException e) {
new ErrorMessage(Lang.get("msg_errorWritingFile")).addCause(e).show(); new ErrorMessage(Lang.get("msg_errorWritingFile")).addCause(e).show();
} }
} }
private void setFilename(File filename) { private void setFilename(File filename, boolean toPrefs) {
this.filename = filename; this.filename = filename;
if (filename != null) { if (filename != null) {
this.lastFilename = filename; this.lastFilename = filename;
prefs.put("name", filename.getPath()); if (toPrefs)
prefs.put("name", filename.getPath());
setTitle(filename + " - " + Lang.get("digital")); setTitle(filename + " - " + Lang.get("digital"));
} else } else
setTitle(Lang.get("digital")); setTitle(Lang.get("digital"));

View File

@ -0,0 +1,10 @@
package de.neemann.digital.gui;
import java.io.File;
/**
* @author hneemann
*/
public interface SavedListener {
void saved(File filename);
}

View File

@ -14,6 +14,7 @@ import de.neemann.digital.draw.shapes.Drawable;
import de.neemann.digital.draw.shapes.GenericShape; import de.neemann.digital.draw.shapes.GenericShape;
import de.neemann.digital.gui.LibrarySelector; import de.neemann.digital.gui.LibrarySelector;
import de.neemann.digital.gui.Main; import de.neemann.digital.gui.Main;
import de.neemann.digital.gui.SavedListener;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -21,6 +22,7 @@ import java.awt.event.*;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
@ -321,7 +323,12 @@ public class CircuitComponent extends JComponent implements Observer {
String name = vp.getElementName(); String name = vp.getElementName();
ElementTypeDescription elementType = library.getElementType(name); ElementTypeDescription elementType = library.getElementType(name);
if (elementType instanceof LibrarySelector.ElementTypeDescriptionCustom) { if (elementType instanceof LibrarySelector.ElementTypeDescriptionCustom) {
new Main(this, ((LibrarySelector.ElementTypeDescriptionCustom) elementType).getFile()).setVisible(true); new Main(this, ((LibrarySelector.ElementTypeDescriptionCustom) elementType).getFile(), new SavedListener() {
@Override
public void saved(File filename) {
library.removeElement(filename.getName());
}
}).setVisible(true);
} else { } else {
ArrayList<AttributeKey> list = elementType.getAttributeList(); ArrayList<AttributeKey> list = elementType.getAttributeList();
if (list.size() > 0) { if (list.size() > 0) {

View File

@ -24,6 +24,11 @@ public abstract class ToolTipAction extends AbstractAction {
return this; return this;
} }
public ToolTipAction setActive(boolean newValue) {
super.setEnabled(newValue);
return this;
}
public JButton createJButton() { public JButton createJButton() {
JButton b = new JButton(this); JButton b = new JButton(this);
if (toolTipText != null) { if (toolTipText != null) {