Added instructions.
This commit is contained in:
parent
f541a994b9
commit
e606b8f9f4
|
@ -0,0 +1,36 @@
|
||||||
|
package nl.andrewlalis.erme.control.actions;
|
||||||
|
|
||||||
|
import nl.andrewlalis.erme.EntityRelationMappingEditor;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
|
||||||
|
public class AboutAction extends AbstractAction {
|
||||||
|
private static AboutAction instance;
|
||||||
|
|
||||||
|
public static AboutAction getInstance() {
|
||||||
|
if (instance == null) instance = new AboutAction();
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AboutAction() {
|
||||||
|
super("About");
|
||||||
|
this.putValue(SHORT_DESCRIPTION, "Show some information about this program.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JOptionPane.showMessageDialog(
|
||||||
|
(Component) e.getSource(),
|
||||||
|
"Entity-Relation Mapping Editor\n" +
|
||||||
|
"by Andrew Lalis\n" +
|
||||||
|
"Version " + EntityRelationMappingEditor.VERSION + "\n" +
|
||||||
|
"To report bugs or make suggestions, please visit the GitHub\n" +
|
||||||
|
"repository for this application and create a new issue.\n\n" +
|
||||||
|
"Thank you for using the ERME!",
|
||||||
|
"About ERME",
|
||||||
|
JOptionPane.INFORMATION_MESSAGE
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
package nl.andrewlalis.erme.control.actions;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
import javax.swing.event.HyperlinkEvent;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
|
||||||
|
public class InstructionsAction extends AbstractAction {
|
||||||
|
private static InstructionsAction instance;
|
||||||
|
|
||||||
|
public static InstructionsAction getInstance() {
|
||||||
|
if (instance == null) instance = new InstructionsAction();
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InstructionsAction() {
|
||||||
|
super("Instructions");
|
||||||
|
this.putValue(SHORT_DESCRIPTION, "Instructions for how to use this program.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
JDialog dialog = new JDialog(SwingUtilities.getWindowAncestor((Component) e.getSource()), "Instructions", Dialog.ModalityType.APPLICATION_MODAL);
|
||||||
|
JTextPane textPane = new JTextPane();
|
||||||
|
textPane.setEditable(false);
|
||||||
|
textPane.setContentType("text/html");
|
||||||
|
try {
|
||||||
|
textPane.setText(this.readFile());
|
||||||
|
textPane.addHyperlinkListener(event -> {
|
||||||
|
if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
|
||||||
|
if (!Desktop.isDesktopSupported()) {
|
||||||
|
JOptionPane.showMessageDialog(dialog, "Desktop API not supported. You may still visit the link manually:\n" + event.getURL(), "Desktop API Not Supported", JOptionPane.WARNING_MESSAGE);
|
||||||
|
} else {
|
||||||
|
Desktop desktop = Desktop.getDesktop();
|
||||||
|
try {
|
||||||
|
desktop.browse(event.getURL().toURI());
|
||||||
|
} catch (IOException | URISyntaxException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
JOptionPane.showMessageDialog(dialog, "An error occurred and the URL could not be opened:\n" + event.getURL(), "URL Could Not Open", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
JOptionPane.showMessageDialog(
|
||||||
|
(Component) e.getSource(),
|
||||||
|
"An error occured:\n" + ex.getMessage(),
|
||||||
|
"Error",
|
||||||
|
JOptionPane.ERROR_MESSAGE
|
||||||
|
);
|
||||||
|
textPane.setContentType("text/plain");
|
||||||
|
textPane.setText("Unable to load content.");
|
||||||
|
}
|
||||||
|
JScrollPane scrollPane = new JScrollPane(textPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
|
dialog.setContentPane(scrollPane);
|
||||||
|
dialog.setMaximumSize(new Dimension(600, 800));
|
||||||
|
dialog.setPreferredSize(new Dimension(600, 800));
|
||||||
|
dialog.pack();
|
||||||
|
dialog.setLocationRelativeTo(null);
|
||||||
|
dialog.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String readFile() throws IOException {
|
||||||
|
InputStream is = getClass().getClassLoader().getResourceAsStream("html/instructions.html");
|
||||||
|
if (is == null) {
|
||||||
|
throw new IOException("Could not get stream for instructions.html.");
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(is))) {
|
||||||
|
String line = reader.readLine();
|
||||||
|
while (line != null) {
|
||||||
|
sb.append(line).append('\n');
|
||||||
|
line = reader.readLine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,5 @@
|
||||||
package nl.andrewlalis.erme.view;
|
package nl.andrewlalis.erme.view;
|
||||||
|
|
||||||
import nl.andrewlalis.erme.EntityRelationMappingEditor;
|
|
||||||
import nl.andrewlalis.erme.control.actions.*;
|
import nl.andrewlalis.erme.control.actions.*;
|
||||||
import nl.andrewlalis.erme.control.actions.edits.AddAttributeAction;
|
import nl.andrewlalis.erme.control.actions.edits.AddAttributeAction;
|
||||||
import nl.andrewlalis.erme.control.actions.edits.AddRelationAction;
|
import nl.andrewlalis.erme.control.actions.edits.AddRelationAction;
|
||||||
|
@ -8,9 +7,6 @@ import nl.andrewlalis.erme.control.actions.edits.RemoveAttributeAction;
|
||||||
import nl.andrewlalis.erme.control.actions.edits.RemoveRelationAction;
|
import nl.andrewlalis.erme.control.actions.edits.RemoveRelationAction;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The menu bar that's visible atop the application.
|
* The menu bar that's visible atop the application.
|
||||||
|
@ -48,28 +44,8 @@ public class EditorMenuBar extends JMenuBar {
|
||||||
|
|
||||||
private JMenu buildHelpMenu() {
|
private JMenu buildHelpMenu() {
|
||||||
JMenu menu = new JMenu("Help");
|
JMenu menu = new JMenu("Help");
|
||||||
JMenuItem instructionsItem = new JMenuItem("GitHub (Instructions)");
|
menu.add(InstructionsAction.getInstance());
|
||||||
instructionsItem.addActionListener(e -> {
|
menu.add(AboutAction.getInstance());
|
||||||
try {
|
|
||||||
Desktop.getDesktop().browse(URI.create("https://github.com/andrewlalis/EntityRelationMappingEditor"));
|
|
||||||
} catch (IOException ioException) {
|
|
||||||
ioException.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
menu.add(instructionsItem);
|
|
||||||
JMenuItem aboutItem = new JMenuItem("About");
|
|
||||||
aboutItem.addActionListener(e -> JOptionPane.showMessageDialog(
|
|
||||||
(Component) e.getSource(),
|
|
||||||
"Entity-Relation Mapping Editor\n" +
|
|
||||||
"by Andrew Lalis\n" +
|
|
||||||
"Version " + EntityRelationMappingEditor.VERSION + "\n" +
|
|
||||||
"To report bugs or make suggestions, please visit the GitHub\n" +
|
|
||||||
"repository for this application and create a new issue.\n\n" +
|
|
||||||
"Thank you for using the ERME!",
|
|
||||||
"About ERME",
|
|
||||||
JOptionPane.INFORMATION_MESSAGE
|
|
||||||
));
|
|
||||||
menu.add(aboutItem);
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Instructions</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Entity-Relation Mapping Editor</h1>
|
||||||
|
<p>Created by <a href="https://github.com/andrewlalis">@andrewlalis</a></p>
|
||||||
|
|
||||||
|
<p><em>A simple UI for editing entity-relation mapping diagrams.</em></p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Have you noticed any unexpected behavior? Is there something you thing would make a good addition to this application?
|
||||||
|
<a href="https://github.com/andrewlalis/EntityRelationMappingEditor/issues">Create a new issue on GitHub!</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Instructions for Use</h3>
|
||||||
|
<p>
|
||||||
|
The interface and menus should be pretty self-explanatory, so they'll just be covered here in light detail.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
The <em>File</em> menu contains options for creating a new model, saving, loading or exporting a model, and finally an option to quit the program.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The <em>Edit</em> menu contains options for making changes to the current model, such as adding or removing relations and attributes, or undoing/redoing actions.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
The <em>Help</em> menu contains some items with additional information about the application, like this help page and a simple <em>About</em> popup with version information.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>
|
||||||
|
The main focus of the application is the <em>Diagram Panel</em> where all of the editing actually takes place. This is where any relations you create, or attributes you create, appear; this is what is rendered when you select the option to export your model to an image.
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Click on a relation to select it.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
CTRL+Click to select multiple relations at once.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Drag relations to move them around the workspace.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Right-click on different areas to access a context menu with some helpful actions.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
When exporting the model to an image, be sure to add the desired image file extension (.png, .jpg, .bmp, etc.), or the application will default to .png.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue