Merge branch 'main' into auto-position
This commit is contained in:
		
						commit
						e623bddcf6
					
				|  | @ -1,6 +1,8 @@ | |||
| package nl.andrewlalis.erme.control.actions; | ||||
| 
 | ||||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.EntityRelationMappingEditor; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import java.awt.*; | ||||
|  | @ -14,6 +16,9 @@ public class AboutAction extends AbstractAction { | |||
| 		return instance; | ||||
| 	} | ||||
| 
 | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public AboutAction() { | ||||
| 		super("About"); | ||||
| 		this.putValue(SHORT_DESCRIPTION, "Show some information about this program."); | ||||
|  | @ -22,7 +27,7 @@ public class AboutAction extends AbstractAction { | |||
| 	@Override | ||||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		JOptionPane.showMessageDialog( | ||||
| 				(Component) e.getSource(), | ||||
| 				this.diagramPanel, | ||||
| 				"Entity-Relation Mapping Editor\n" + | ||||
| 						"by Andrew Lalis\n" + | ||||
| 						"Version " + EntityRelationMappingEditor.VERSION + "\n" + | ||||
|  |  | |||
|  | @ -1,5 +1,8 @@ | |||
| package nl.andrewlalis.erme.control.actions; | ||||
| 
 | ||||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import java.awt.*; | ||||
| import java.awt.event.ActionEvent; | ||||
|  | @ -16,6 +19,9 @@ public class ExitAction extends AbstractAction { | |||
| 		return instance; | ||||
| 	} | ||||
| 
 | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public ExitAction() { | ||||
| 		super("Exit"); | ||||
| 		this.putValue(Action.SHORT_DESCRIPTION, "Exit the program."); | ||||
|  | @ -25,7 +31,7 @@ public class ExitAction extends AbstractAction { | |||
| 	@Override | ||||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		int choice = JOptionPane.showConfirmDialog( | ||||
| 				(Component) e.getSource(), | ||||
| 				this.diagramPanel, | ||||
| 				"Are you sure you want to quit?\nAll unsaved data will be lost.", | ||||
| 				"Confirm Exit", | ||||
| 				JOptionPane.OK_CANCEL_OPTION, | ||||
|  |  | |||
|  | @ -34,6 +34,8 @@ public class ExportToImageAction extends AbstractAction { | |||
| 
 | ||||
| 	@Setter | ||||
| 	private MappingModel model; | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public ExportToImageAction() { | ||||
| 		super("Export to Image"); | ||||
|  | @ -45,7 +47,7 @@ public class ExportToImageAction extends AbstractAction { | |||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		if (this.model.getRelations().isEmpty()) { | ||||
| 			JOptionPane.showMessageDialog( | ||||
| 					(Component) e.getSource(), | ||||
| 					this.diagramPanel, | ||||
| 					"Model is empty. Add some relations before exporting to an image.", | ||||
| 					"Model Empty", | ||||
| 					JOptionPane.WARNING_MESSAGE | ||||
|  | @ -61,7 +63,7 @@ public class ExportToImageAction extends AbstractAction { | |||
| 		if (path != null) { | ||||
| 			fileChooser.setSelectedFile(new File(path)); | ||||
| 		} | ||||
| 		int choice = fileChooser.showSaveDialog((Component) e.getSource()); | ||||
| 		int choice = fileChooser.showSaveDialog(this.diagramPanel); | ||||
| 		if (choice == JFileChooser.APPROVE_OPTION) { | ||||
| 			File chosenFile = fileChooser.getSelectedFile(); | ||||
| 			if (chosenFile == null || chosenFile.isDirectory()) { | ||||
|  | @ -82,7 +84,7 @@ public class ExportToImageAction extends AbstractAction { | |||
| 				ImageIO.write(render, extension, chosenFile); | ||||
| 				prefs.put(LAST_EXPORT_LOCATION_KEY, chosenFile.getAbsolutePath()); | ||||
| 				JOptionPane.showMessageDialog( | ||||
| 						fileChooser, | ||||
| 						this.diagramPanel, | ||||
| 						"Image export completed in " + String.format("%.4f", durationSeconds) + " seconds.\n" + | ||||
| 								"Resolution: " + render.getWidth() + "x" + render.getHeight(), | ||||
| 						"Image Export Complete", | ||||
|  |  | |||
|  | @ -1,5 +1,8 @@ | |||
| package nl.andrewlalis.erme.control.actions; | ||||
| 
 | ||||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import javax.swing.event.HyperlinkEvent; | ||||
| import java.awt.*; | ||||
|  | @ -24,10 +27,13 @@ public abstract class HtmlDocumentViewerAction extends AbstractAction { | |||
| 		this.modalityType = modalityType; | ||||
| 	} | ||||
| 
 | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	@Override | ||||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		JDialog dialog = new JDialog( | ||||
| 				SwingUtilities.getWindowAncestor((Component) e.getSource()), | ||||
| 				SwingUtilities.getWindowAncestor(this.diagramPanel), | ||||
| 				(String) this.getValue(NAME), | ||||
| 				this.modalityType | ||||
| 		); | ||||
|  | @ -54,7 +60,7 @@ public abstract class HtmlDocumentViewerAction extends AbstractAction { | |||
| 		} catch (IOException ex) { | ||||
| 			ex.printStackTrace(); | ||||
| 			JOptionPane.showMessageDialog( | ||||
| 					(Component) e.getSource(), | ||||
| 					this.diagramPanel, | ||||
| 					"An error occured:\n" + ex.getMessage(), | ||||
| 					"Error", | ||||
| 					JOptionPane.ERROR_MESSAGE | ||||
|  | @ -68,7 +74,7 @@ public abstract class HtmlDocumentViewerAction extends AbstractAction { | |||
| 		dialog.setMaximumSize(new Dimension(600, 800)); | ||||
| 		dialog.setPreferredSize(new Dimension(600, 800)); | ||||
| 		dialog.pack(); | ||||
| 		dialog.setLocationRelativeTo(null); | ||||
| 		dialog.setLocationRelativeTo(this.diagramPanel); | ||||
| 		dialog.setVisible(true); | ||||
| 	} | ||||
| 
 | ||||
|  |  | |||
|  | @ -49,7 +49,7 @@ public class LoadAction extends AbstractAction { | |||
| 		if (path != null) { | ||||
| 			fileChooser.setSelectedFile(new File(path)); | ||||
| 		} | ||||
| 		int choice = fileChooser.showOpenDialog((Component) e.getSource()); | ||||
| 		int choice = fileChooser.showOpenDialog(this.diagramPanel); | ||||
| 		if (choice == JFileChooser.APPROVE_OPTION) { | ||||
| 			File chosenFile = fileChooser.getSelectedFile(); | ||||
| 			if (chosenFile == null || chosenFile.isDirectory() || !chosenFile.exists() || !chosenFile.canRead()) { | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package nl.andrewlalis.erme.control.actions; | |||
| 
 | ||||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.model.MappingModel; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import javax.swing.filechooser.FileNameExtensionFilter; | ||||
|  | @ -28,6 +29,8 @@ public class SaveAction extends AbstractAction { | |||
| 
 | ||||
| 	@Setter | ||||
| 	private MappingModel model; | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public SaveAction() { | ||||
| 		super("Save"); | ||||
|  | @ -48,7 +51,7 @@ public class SaveAction extends AbstractAction { | |||
| 		if (path != null) { | ||||
| 			fileChooser.setSelectedFile(new File(path)); | ||||
| 		} | ||||
| 		int choice = fileChooser.showSaveDialog((Component) e.getSource()); | ||||
| 		int choice = fileChooser.showSaveDialog(this.diagramPanel); | ||||
| 		if (choice == JFileChooser.APPROVE_OPTION) { | ||||
| 			File chosenFile = fileChooser.getSelectedFile(); | ||||
| 			if (chosenFile == null || chosenFile.isDirectory()) { | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package nl.andrewlalis.erme.control.actions.edits; | |||
| 
 | ||||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.model.*; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import java.awt.*; | ||||
|  | @ -24,6 +25,8 @@ public class AddAttributeAction extends AbstractAction { | |||
| 
 | ||||
| 	@Setter | ||||
| 	private MappingModel model; | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public AddAttributeAction() { | ||||
| 		super("Add Attribute"); | ||||
|  | @ -36,7 +39,7 @@ public class AddAttributeAction extends AbstractAction { | |||
| 		List<Relation> selectedRelations = this.model.getSelectedRelations(); | ||||
| 		if (selectedRelations.size() != 1) { | ||||
| 			JOptionPane.showMessageDialog( | ||||
| 					(Component) e.getSource(), | ||||
| 					this.diagramPanel, | ||||
| 					"A single relation must be selected to add an attribute.", | ||||
| 					"Single Relation Required", | ||||
| 					JOptionPane.WARNING_MESSAGE | ||||
|  | @ -45,11 +48,11 @@ public class AddAttributeAction extends AbstractAction { | |||
| 		} | ||||
| 		Relation r = selectedRelations.get(0); | ||||
| 		Attribute createdAttribute; | ||||
| 		Component c = (Component) e.getSource(); | ||||
| 		String name = JOptionPane.showInputDialog(c, "Enter the name of the attribute.", "Attribute Name", JOptionPane.PLAIN_MESSAGE); | ||||
| 		Component source = this.diagramPanel; | ||||
| 		String name = JOptionPane.showInputDialog(source, "Enter the name of the attribute.", "Attribute Name", JOptionPane.PLAIN_MESSAGE); | ||||
| 		if (name == null) return; | ||||
| 		Integer index = (Integer) JOptionPane.showInputDialog( | ||||
| 				c, | ||||
| 				source, | ||||
| 				"Select the index to insert this attribute at.", | ||||
| 				"Attribute Index", | ||||
| 				JOptionPane.PLAIN_MESSAGE, | ||||
|  | @ -59,7 +62,7 @@ public class AddAttributeAction extends AbstractAction { | |||
| 		); | ||||
| 		if (index == null) return; | ||||
| 		AttributeType type = (AttributeType) JOptionPane.showInputDialog( | ||||
| 				c, | ||||
| 				source, | ||||
| 				"Select the type this attribute is.", | ||||
| 				"Attribute Type", | ||||
| 				JOptionPane.PLAIN_MESSAGE, | ||||
|  | @ -69,7 +72,7 @@ public class AddAttributeAction extends AbstractAction { | |||
| 		); | ||||
| 		if (type == null) return; | ||||
| 		boolean shouldUseForeignKey = ((String) JOptionPane.showInputDialog( | ||||
| 				c, | ||||
| 				source, | ||||
| 				"Is this attribute a foreign key?", | ||||
| 				"Foreign Key", | ||||
| 				JOptionPane.PLAIN_MESSAGE, | ||||
|  | @ -79,11 +82,11 @@ public class AddAttributeAction extends AbstractAction { | |||
| 		)).equalsIgnoreCase("yes"); | ||||
| 		if (shouldUseForeignKey) { | ||||
| 			if (this.model.getRelations().size() < 2) { | ||||
| 				JOptionPane.showMessageDialog(c, "There should be at least 2 relations present in the model.", "Not Enough Relations", JOptionPane.WARNING_MESSAGE); | ||||
| 				JOptionPane.showMessageDialog(source, "There should be at least 2 relations present in the model.", "Not Enough Relations", JOptionPane.WARNING_MESSAGE); | ||||
| 				return; | ||||
| 			} | ||||
| 			Relation fkRelation = (Relation) JOptionPane.showInputDialog( | ||||
| 					c, | ||||
| 					source, | ||||
| 					"Select the relation that this foreign key references.", | ||||
| 					"Foreign Key Relation Reference", | ||||
| 					JOptionPane.PLAIN_MESSAGE, | ||||
|  | @ -94,11 +97,11 @@ public class AddAttributeAction extends AbstractAction { | |||
| 			if (fkRelation == null) return; | ||||
| 			List<Attribute> eligibleAttributes = fkRelation.getAttributes(); | ||||
| 			if (eligibleAttributes.isEmpty()) { | ||||
| 				JOptionPane.showMessageDialog(c, "There are no referencable attributes in the selected relation.", "No Referencable Attributes", JOptionPane.WARNING_MESSAGE); | ||||
| 				JOptionPane.showMessageDialog(source, "There are no referencable attributes in the selected relation.", "No Referencable Attributes", JOptionPane.WARNING_MESSAGE); | ||||
| 				return; | ||||
| 			} | ||||
| 			Attribute fkAttribute = (Attribute) JOptionPane.showInputDialog( | ||||
| 					c, | ||||
| 					source, | ||||
| 					"Select the attribute that this foreign key references.", | ||||
| 					"Foreign Key Attribute Reference", | ||||
| 					JOptionPane.PLAIN_MESSAGE, | ||||
|  |  | |||
|  | @ -35,9 +35,8 @@ public class AddRelationAction extends AbstractAction { | |||
| 
 | ||||
| 	@Override | ||||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		Component c = (Component) e.getSource(); | ||||
| 		String name = JOptionPane.showInputDialog( | ||||
| 				c, | ||||
| 				this.diagramPanel, | ||||
| 				"Enter the name of the relation.", | ||||
| 				"Add Relation", | ||||
| 				JOptionPane.PLAIN_MESSAGE | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ import lombok.Setter; | |||
| import nl.andrewlalis.erme.model.Attribute; | ||||
| import nl.andrewlalis.erme.model.MappingModel; | ||||
| import nl.andrewlalis.erme.model.Relation; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import java.awt.*; | ||||
|  | @ -25,6 +26,8 @@ public class RemoveAttributeAction extends AbstractAction { | |||
| 
 | ||||
| 	@Setter | ||||
| 	private MappingModel model; | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public RemoveAttributeAction() { | ||||
| 		super("Remove Attribute"); | ||||
|  | @ -37,7 +40,7 @@ public class RemoveAttributeAction extends AbstractAction { | |||
| 		List<Relation> selectedRelations = this.model.getSelectedRelations(); | ||||
| 		if (selectedRelations.size() != 1 || selectedRelations.get(0).getAttributes().isEmpty()) { | ||||
| 			JOptionPane.showMessageDialog( | ||||
| 					(Component) e.getSource(), | ||||
| 					this.diagramPanel, | ||||
| 					"A single relation with at least one attribute must be selected to remove an attribute.", | ||||
| 					"Single Relation With Attribute Required", | ||||
| 					JOptionPane.WARNING_MESSAGE | ||||
|  | @ -46,7 +49,7 @@ public class RemoveAttributeAction extends AbstractAction { | |||
| 		} | ||||
| 		Relation r = selectedRelations.get(0); | ||||
| 		Attribute attribute = (Attribute) JOptionPane.showInputDialog( | ||||
| 				(Component) e.getSource(), | ||||
| 				this.diagramPanel, | ||||
| 				"Select the attribute to remove.", | ||||
| 				"Select Attribute", | ||||
| 				JOptionPane.PLAIN_MESSAGE, | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ package nl.andrewlalis.erme.control.actions.edits; | |||
| import lombok.Setter; | ||||
| import nl.andrewlalis.erme.model.MappingModel; | ||||
| import nl.andrewlalis.erme.model.Relation; | ||||
| import nl.andrewlalis.erme.view.DiagramPanel; | ||||
| 
 | ||||
| import javax.swing.*; | ||||
| import java.awt.*; | ||||
|  | @ -22,6 +23,8 @@ public class RemoveRelationAction extends AbstractAction { | |||
| 
 | ||||
| 	@Setter | ||||
| 	private MappingModel model; | ||||
| 	@Setter | ||||
| 	private DiagramPanel diagramPanel; | ||||
| 
 | ||||
| 	public RemoveRelationAction() { | ||||
| 		super("Remove Relation"); | ||||
|  | @ -33,7 +36,7 @@ public class RemoveRelationAction extends AbstractAction { | |||
| 	public void actionPerformed(ActionEvent e) { | ||||
| 		if (this.model.getSelectedRelations().isEmpty()) { | ||||
| 			JOptionPane.showMessageDialog( | ||||
| 					(Component) e.getSource(), | ||||
| 					this.diagramPanel, | ||||
| 					"No relations selected. Select at least one relation to remove.", | ||||
| 					"No Relations Selected", | ||||
| 					JOptionPane.WARNING_MESSAGE | ||||
|  |  | |||
|  | @ -123,16 +123,25 @@ public class DiagramPanel extends JPanel implements ModelChangeListener { | |||
| 		SaveAction.getInstance().setModel(this.model); | ||||
| 		LoadAction.getInstance().setDiagramPanel(this); | ||||
| 		ExportToImageAction.getInstance().setModel(this.model); | ||||
| 		ExportToImageAction.getInstance().setDiagramPanel(this); | ||||
| 		AddRelationAction.getInstance().setModel(this.model); | ||||
| 		AddRelationAction.getInstance().setDiagramPanel(this); | ||||
| 		RemoveRelationAction.getInstance().setModel(this.model); | ||||
| 		RemoveRelationAction.getInstance().setDiagramPanel(this); | ||||
| 		AddAttributeAction.getInstance().setModel(this.model); | ||||
| 		AddAttributeAction.getInstance().setDiagramPanel(this); | ||||
| 		RemoveAttributeAction.getInstance().setModel(this.model); | ||||
| 		RemoveAttributeAction.getInstance().setDiagramPanel(this); | ||||
| 		LoadSampleModelAction.getInstance().setDiagramPanel(this); | ||||
| 		LolcatAction.getInstance().setDiagramPanel(this); | ||||
| 		AutoPositionAction.getInstance().setDiagramPanel(this); | ||||
|     AutoPositionAction.getInstance().setDiagramPanel(this); | ||||
| 		AutoPositionAction.getInstance().setModel(this.model); | ||||
| 		OrderableListPanel.getInstance().setModel(this.model); | ||||
|     AboutAction.getInstance().setDiagramPanel(this); | ||||
| 		ExitAction.getInstance().setDiagramPanel(this); | ||||
| 		InstructionsAction.getInstance().setDiagramPanel(this); | ||||
| 		MappingAlgorithmHelpAction.getInstance().setDiagramPanel(this); | ||||
| 		SaveAction.getInstance().setDiagramPanel(this); | ||||
| 	} | ||||
| 
 | ||||
| 	public static void prepareGraphics(Graphics2D g) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Bjorn Pijnacker
						Bjorn Pijnacker