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))
.setShortName(createShortName(file));
library.addDescription(description);
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)
customMenu.add(menuEntry);
importedElements.add(new ImportedItem(description.getName(), menuEntry));
return description;
} catch (Exception e) {
SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_errorImportingModel")).addCause(e));
@ -136,6 +143,14 @@ public class LibrarySelector implements ElementNotFoundNotification {
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) {
String name = file.getName();
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 LibrarySelector librarySelector;
private final ShapeFactory shapeFactory;
private final SavedListener savedListener;
private File lastFilename;
private File filename;
private Model model;
private ModelDescription modelDescription;
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"));
this.savedListener = savedListener;
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
library = new ElementLibrary();
shapeFactory = new ShapeFactory(library);
boolean normalMode = savedListener == null;
Circuit cr = new Circuit();
circuitComponent = new CircuitComponent(cr, library);
if (fileToOpen != null) {
SwingUtilities.invokeLater(() -> loadFile(fileToOpen));
SwingUtilities.invokeLater(() -> loadFile(fileToOpen, false));
} else {
String name = prefs.get("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
public void actionPerformed(ActionEvent e) {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
setFilename(null);
setFilename(null, true);
circuitComponent.setCircuit(new Circuit());
}
}
};
}.setActive(normalMode);
ToolTipAction open = new ToolTipAction(Lang.get("menu_open"), iconOpen) {
@Override
@ -100,11 +104,11 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
JFileChooser fc = getjFileChooser(lastFilename);
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) {
@Override
@ -112,13 +116,13 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
if (ClosingWindowListener.checkForSave(Main.this, Main.this)) {
JFileChooser fc = getjFileChooser(lastFilename);
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.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) {
@ -129,7 +133,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
saveFile(fc.getSelectedFile());
}
}
};
}.setActive(normalMode);
save = new ToolTipAction(Lang.get("menu_save"), iconSave) {
@Override
@ -333,12 +337,12 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
save.actionPerformed(null);
}
private void loadFile(File filename) {
private void loadFile(File filename, boolean toPrefs) {
try {
librarySelector.setFilePath(filename.getParentFile());
Circuit circ = Circuit.loadCircuit(filename, shapeFactory);
circuitComponent.setCircuit(circ);
setFilename(filename);
setFilename(filename, toPrefs);
} catch (Exception e) {
circuitComponent.setCircuit(new Circuit());
new ErrorMessage(Lang.get("msg_errorReadingFile")).addCause(e).show(this);
@ -351,17 +355,20 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
try {
circuitComponent.getCircuit().save(filename);
setFilename(filename);
if (savedListener != null)
savedListener.saved(filename);
setFilename(filename, false);
} catch (IOException e) {
new ErrorMessage(Lang.get("msg_errorWritingFile")).addCause(e).show();
}
}
private void setFilename(File filename) {
private void setFilename(File filename, boolean toPrefs) {
this.filename = filename;
if (filename != null) {
this.lastFilename = filename;
prefs.put("name", filename.getPath());
if (toPrefs)
prefs.put("name", filename.getPath());
setTitle(filename + " - " + Lang.get("digital"));
} else
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.gui.LibrarySelector;
import de.neemann.digital.gui.Main;
import de.neemann.digital.gui.SavedListener;
import javax.swing.*;
import java.awt.*;
@ -21,6 +22,7 @@ import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.awt.geom.NoninvertibleTransformException;
import java.awt.geom.Point2D;
import java.io.File;
import java.util.ArrayList;
/**
@ -321,7 +323,12 @@ public class CircuitComponent extends JComponent implements Observer {
String name = vp.getElementName();
ElementTypeDescription elementType = library.getElementType(name);
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 {
ArrayList<AttributeKey> list = elementType.getAttributeList();
if (list.size() > 0) {

View File

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