mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 14:56:29 -04:00
restricted nested editing
This commit is contained in:
parent
6084d6383c
commit
61d5922a76
@ -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);
|
||||
|
@ -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"));
|
||||
|
10
src/main/java/de/neemann/digital/gui/SavedListener.java
Normal file
10
src/main/java/de/neemann/digital/gui/SavedListener.java
Normal file
@ -0,0 +1,10 @@
|
||||
package de.neemann.digital.gui;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* @author hneemann
|
||||
*/
|
||||
public interface SavedListener {
|
||||
void saved(File filename);
|
||||
}
|
@ -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) {
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user