Cleaned up the user interface a lot.
This commit is contained in:
parent
ec06cf56cf
commit
392114e3e6
8
pom.xml
8
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>nl.andrewlalis</groupId>
|
||||
<artifactId>BlockBookBinder</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<version>1.2.0</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>12</maven.compiler.source>
|
||||
|
@ -62,5 +62,11 @@
|
|||
<artifactId>flatlaf</artifactId>
|
||||
<version>1.0-rc3</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-model</artifactId>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -1,6 +1,7 @@
|
|||
package nl.andrewlalis.blockbookbinder;
|
||||
|
||||
import com.formdev.flatlaf.FlatDarkLaf;
|
||||
import nl.andrewlalis.blockbookbinder.util.VersionReader;
|
||||
import nl.andrewlalis.blockbookbinder.view.MainFrame;
|
||||
|
||||
import javax.swing.*;
|
||||
|
@ -9,6 +10,8 @@ import javax.swing.*;
|
|||
* The main class for the application.
|
||||
*/
|
||||
public class BlockBookBinder {
|
||||
public static final String VERSION = VersionReader.getVersion();
|
||||
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
FlatDarkLaf.install();
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
package nl.andrewlalis.blockbookbinder.control;
|
||||
|
||||
import nl.andrewlalis.blockbookbinder.model.build.BookBuilder;
|
||||
import nl.andrewlalis.blockbookbinder.view.book.BookPreviewPanel;
|
||||
import nl.andrewlalis.blockbookbinder.view.SourceTextPanel;
|
||||
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Action listener that, when activated, converts the text from the source panel
|
||||
* into a formatted book.
|
||||
*/
|
||||
public class ConvertToBookActionListener implements ActionListener {
|
||||
private final SourceTextPanel sourceTextPanel;
|
||||
private final BookPreviewPanel bookPreviewPanel;
|
||||
|
||||
public ConvertToBookActionListener(SourceTextPanel sourceTextPanel, BookPreviewPanel bookPreviewPanel) {
|
||||
this.sourceTextPanel = sourceTextPanel;
|
||||
this.bookPreviewPanel = bookPreviewPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
this.bookPreviewPanel.setBook(
|
||||
new BookBuilder().build(this.sourceTextPanel.getSourceText())
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package nl.andrewlalis.blockbookbinder.control;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
public class ImportAction extends AbstractAction {
|
||||
public ImportAction(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public ImportAction(String name, Icon icon) {
|
||||
super(name, icon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
System.out.println("Import!");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package nl.andrewlalis.blockbookbinder.control.export;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import nl.andrewlalis.blockbookbinder.model.Book;
|
||||
import nl.andrewlalis.blockbookbinder.view.book.BookPreviewPanel;
|
||||
import nl.andrewlalis.blockbookbinder.view.export.ExportToBookDialog;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
public class ExportBookToMinecraftAction extends AbstractAction {
|
||||
@Getter
|
||||
private static final ExportBookToMinecraftAction instance = new ExportBookToMinecraftAction();
|
||||
|
||||
public ExportBookToMinecraftAction() {
|
||||
super("Export to Minecraft");
|
||||
this.putValue(SHORT_DESCRIPTION, "Export the current book to Minecraft.");
|
||||
}
|
||||
|
||||
@Setter
|
||||
private BookPreviewPanel bookPreviewPanel;
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
final Book book = bookPreviewPanel.getBook();
|
||||
if (book == null || book.getPageCount() == 0) {
|
||||
JOptionPane.showMessageDialog(
|
||||
this.bookPreviewPanel.getRootPane(),
|
||||
"Cannot export an empty book.",
|
||||
"Empty Book",
|
||||
JOptionPane.WARNING_MESSAGE
|
||||
);
|
||||
return;
|
||||
}
|
||||
ExportToBookDialog dialog = new ExportToBookDialog(SwingUtilities.getWindowAncestor(this.bookPreviewPanel), bookPreviewPanel.getBook());
|
||||
dialog.setupAndShow();
|
||||
}
|
||||
}
|
|
@ -1,19 +1,22 @@
|
|||
package nl.andrewlalis.blockbookbinder.control;
|
||||
package nl.andrewlalis.blockbookbinder.control.source;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import nl.andrewlalis.blockbookbinder.view.SourceTextPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
/**
|
||||
* Listener for an action where the source text is 'cleaned' by removing any
|
||||
* trailing whitespace, and removing unnecessary newlines.
|
||||
*/
|
||||
public class CleanSourceActionListener implements ActionListener {
|
||||
private final SourceTextPanel sourceTextPanel;
|
||||
public class CleanSourceAction extends AbstractAction {
|
||||
@Getter
|
||||
private final static CleanSourceAction instance = new CleanSourceAction();
|
||||
|
||||
public CleanSourceActionListener(SourceTextPanel sourceTextPanel) {
|
||||
this.sourceTextPanel = sourceTextPanel;
|
||||
@Setter
|
||||
private SourceTextPanel sourceTextPanel;
|
||||
|
||||
public CleanSourceAction() {
|
||||
super("Clean Source");
|
||||
this.putValue(SHORT_DESCRIPTION, "Clean up the source text.");
|
||||
}
|
||||
|
||||
@Override
|
|
@ -0,0 +1,32 @@
|
|||
package nl.andrewlalis.blockbookbinder.control.source;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import nl.andrewlalis.blockbookbinder.model.build.BookBuilder;
|
||||
import nl.andrewlalis.blockbookbinder.view.SourceTextPanel;
|
||||
import nl.andrewlalis.blockbookbinder.view.book.BookPreviewPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
public class CompileFromSourceAction extends AbstractAction {
|
||||
@Getter
|
||||
private static final CompileFromSourceAction instance = new CompileFromSourceAction();
|
||||
|
||||
@Setter
|
||||
private SourceTextPanel sourceTextPanel;
|
||||
@Setter
|
||||
private BookPreviewPanel bookPreviewPanel;
|
||||
|
||||
public CompileFromSourceAction() {
|
||||
super("Compile From Source");
|
||||
this.putValue(SHORT_DESCRIPTION, "Compile the current source text into a book.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
this.bookPreviewPanel.setBook(
|
||||
new BookBuilder().build(this.sourceTextPanel.getSourceText())
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package nl.andrewlalis.blockbookbinder.control.source;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
|
||||
public class ImportSourceAction extends AbstractAction {
|
||||
@Getter
|
||||
private static final ImportSourceAction instance = new ImportSourceAction();
|
||||
|
||||
public ImportSourceAction() {
|
||||
super("Import Source");
|
||||
this.putValue(SHORT_DESCRIPTION, "Import source text from a file.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
package nl.andrewlalis.blockbookbinder.util;
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
public class VersionReader {
|
||||
public static String getVersion() {
|
||||
MavenXpp3Reader reader = new MavenXpp3Reader();
|
||||
try {
|
||||
Model model;
|
||||
if ((new File("pom.xml")).exists()) {
|
||||
model = reader.read(new FileReader("pom.xml"));
|
||||
} else {
|
||||
model = reader.read(new InputStreamReader(
|
||||
VersionReader.class.getResourceAsStream("/META-INF/maven/nl.andrewlalis/BlockBookBinder/pom.xml")
|
||||
));
|
||||
}
|
||||
return model.getVersion();
|
||||
} catch (IOException | XmlPullParserException e) {
|
||||
e.printStackTrace();
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,13 @@
|
|||
package nl.andrewlalis.blockbookbinder.view;
|
||||
|
||||
import nl.andrewlalis.blockbookbinder.model.Book;
|
||||
import nl.andrewlalis.blockbookbinder.BlockBookBinder;
|
||||
import nl.andrewlalis.blockbookbinder.control.export.ExportBookToMinecraftAction;
|
||||
import nl.andrewlalis.blockbookbinder.control.source.CleanSourceAction;
|
||||
import nl.andrewlalis.blockbookbinder.control.source.CompileFromSourceAction;
|
||||
import nl.andrewlalis.blockbookbinder.control.source.ImportSourceAction;
|
||||
import nl.andrewlalis.blockbookbinder.util.ApplicationProperties;
|
||||
import nl.andrewlalis.blockbookbinder.view.about.AboutDialog;
|
||||
import nl.andrewlalis.blockbookbinder.view.book.BookPreviewPanel;
|
||||
import nl.andrewlalis.blockbookbinder.view.export.ExportToBookDialog;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
|
@ -19,7 +22,7 @@ public class MainFrame extends JFrame {
|
|||
ApplicationProperties.getIntProp("frame.default_width"),
|
||||
ApplicationProperties.getIntProp("frame.default_height")
|
||||
));
|
||||
this.setTitle(ApplicationProperties.getProp("frame.title"));
|
||||
this.setTitle(ApplicationProperties.getProp("frame.title") + " Version " + BlockBookBinder.VERSION);
|
||||
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
final URL iconUrl = this.getClass().getClassLoader().getResource("images/book_and_quill.png");
|
||||
if (iconUrl != null) {
|
||||
|
@ -34,15 +37,41 @@ public class MainFrame extends JFrame {
|
|||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private Container buildContentPane() {
|
||||
JPanel mainPanel = new JPanel(new BorderLayout());
|
||||
JPanel doublePanel = new JPanel(new GridLayout(1, 2));
|
||||
|
||||
BookPreviewPanel bookPreviewPanel = new BookPreviewPanel();
|
||||
doublePanel.add(bookPreviewPanel);
|
||||
CompileFromSourceAction.getInstance().setBookPreviewPanel(bookPreviewPanel);
|
||||
ExportBookToMinecraftAction.getInstance().setBookPreviewPanel(bookPreviewPanel);
|
||||
|
||||
SourceTextPanel sourceTextPanel = new SourceTextPanel();
|
||||
doublePanel.add(sourceTextPanel);
|
||||
CompileFromSourceAction.getInstance().setSourceTextPanel(sourceTextPanel);
|
||||
CleanSourceAction.getInstance().setSourceTextPanel(sourceTextPanel);
|
||||
|
||||
mainPanel.add(doublePanel, BorderLayout.CENTER);
|
||||
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
private JMenuBar buildMenuBar() {
|
||||
JMenuBar menuBar = new JMenuBar();
|
||||
|
||||
JMenu fileMenu = new JMenu("File");
|
||||
fileMenu.add(ImportSourceAction.getInstance());
|
||||
JMenuItem exitItem = new JMenuItem("Exit");
|
||||
exitItem.addActionListener(e -> this.dispose());
|
||||
fileMenu.add(exitItem);
|
||||
menuBar.add(fileMenu);
|
||||
|
||||
JMenu bookMenu = new JMenu("Book");
|
||||
bookMenu.add(CompileFromSourceAction.getInstance());
|
||||
bookMenu.add(CleanSourceAction.getInstance());
|
||||
bookMenu.add(ExportBookToMinecraftAction.getInstance());
|
||||
menuBar.add(bookMenu);
|
||||
|
||||
JMenu helpMenu = new JMenu("Help");
|
||||
JMenuItem aboutItem = new JMenuItem("About");
|
||||
aboutItem.addActionListener(e -> {
|
||||
|
@ -55,36 +84,6 @@ public class MainFrame extends JFrame {
|
|||
return menuBar;
|
||||
}
|
||||
|
||||
private Container buildContentPane() {
|
||||
JPanel mainPanel = new JPanel(new BorderLayout());
|
||||
|
||||
JPanel doublePanel = new JPanel(new GridLayout(1, 2));
|
||||
BookPreviewPanel bookPreviewPanel = new BookPreviewPanel();
|
||||
doublePanel.add(bookPreviewPanel);
|
||||
SourceTextPanel sourceTextPanel = new SourceTextPanel(bookPreviewPanel);
|
||||
doublePanel.add(sourceTextPanel);
|
||||
mainPanel.add(doublePanel, BorderLayout.CENTER);
|
||||
|
||||
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||
JButton exportButton = new JButton("Export to Book");
|
||||
JButton cancelExportButton = new JButton("Cancel Export");
|
||||
cancelExportButton.setEnabled(false);
|
||||
exportButton.addActionListener(e -> {
|
||||
final Book book = bookPreviewPanel.getBook();
|
||||
if (book == null || book.getPageCount() == 0) {
|
||||
JOptionPane.showMessageDialog(this, "Cannot export an empty book.", "Empty Book", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
ExportToBookDialog dialog = new ExportToBookDialog(this, bookPreviewPanel.getBook());
|
||||
dialog.setupAndShow();
|
||||
});
|
||||
bottomPanel.add(exportButton);
|
||||
bottomPanel.add(cancelExportButton);
|
||||
mainPanel.add(bottomPanel, BorderLayout.SOUTH);
|
||||
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
package nl.andrewlalis.blockbookbinder.view;
|
||||
|
||||
import nl.andrewlalis.blockbookbinder.control.CleanSourceActionListener;
|
||||
import nl.andrewlalis.blockbookbinder.control.ConvertToBookActionListener;
|
||||
import nl.andrewlalis.blockbookbinder.view.book.BookPreviewPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.*;
|
||||
|
@ -15,7 +11,7 @@ import java.awt.*;
|
|||
public class SourceTextPanel extends JPanel {
|
||||
private final JTextArea textArea;
|
||||
|
||||
public SourceTextPanel(BookPreviewPanel bookPreviewPanel) {
|
||||
public SourceTextPanel() {
|
||||
super(new BorderLayout());
|
||||
|
||||
this.add(new JLabel("Source Text"), BorderLayout.NORTH);
|
||||
|
@ -26,17 +22,6 @@ public class SourceTextPanel extends JPanel {
|
|||
this.textArea.setLineWrap(true);
|
||||
JScrollPane scrollWrappedMainTextArea = new JScrollPane(this.textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
this.add(scrollWrappedMainTextArea, BorderLayout.CENTER);
|
||||
|
||||
JPanel rightPanelButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||
this.add(rightPanelButtonPanel, BorderLayout.SOUTH);
|
||||
|
||||
JButton convertButton = new JButton("Convert to Book");
|
||||
convertButton.addActionListener(new ConvertToBookActionListener(this, bookPreviewPanel));
|
||||
rightPanelButtonPanel.add(convertButton);
|
||||
|
||||
JButton cleanButton = new JButton("Clean");
|
||||
cleanButton.addActionListener(new CleanSourceActionListener(this));
|
||||
rightPanelButtonPanel.add(cleanButton);
|
||||
}
|
||||
|
||||
public String getSourceText() {
|
||||
|
|
|
@ -31,8 +31,8 @@ public class ExportToBookDialog extends JDialog {
|
|||
private Thread exporterThread;
|
||||
private BookExporter exporterRunnable;
|
||||
|
||||
public ExportToBookDialog(Frame owner, Book book) {
|
||||
super(owner, "Export to Book", true);
|
||||
public ExportToBookDialog(Window owner, Book book) {
|
||||
super(owner, "Export to Book");
|
||||
this.book = book;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
version=1.2.0
|
||||
|
||||
# Settings for the application's GUI.
|
||||
frame.title=Block Book Binder
|
||||
frame.default_width=800
|
||||
|
|
Loading…
Reference in New Issue