Added starting application.
This commit is contained in:
parent
c36a5126cb
commit
238c6b44db
|
@ -9,3 +9,7 @@ buildNumber.properties
|
|||
.mvn/timing.properties
|
||||
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
||||
.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
# IntelliJ Configuration Files
|
||||
.idea/
|
||||
*.iml
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>nl.andrewlalis</groupId>
|
||||
<artifactId>BlockBookBinder</artifactId>
|
||||
<version>0.0.1</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>12</maven.compiler.source>
|
||||
<maven.compiler.target>12</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.14</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,17 @@
|
|||
package nl.andrewlalis.blockbookbinder;
|
||||
|
||||
import nl.andrewlalis.blockbookbinder.view.MainFrame;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* The main class for the application.
|
||||
*/
|
||||
public class BlockBookBinder {
|
||||
public static void main(String[] args) {
|
||||
SwingUtilities.invokeLater(() -> {
|
||||
var mainFrame = new MainFrame();
|
||||
mainFrame.setupAndShow();
|
||||
});
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
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,15 @@
|
|||
package nl.andrewlalis.blockbookbinder.model;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BookContents {
|
||||
@Getter
|
||||
private final List<BookPage> pages;
|
||||
|
||||
public BookContents() {
|
||||
this.pages = new ArrayList<>();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
package nl.andrewlalis.blockbookbinder.model;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
public class BookPage {
|
||||
@Getter
|
||||
@Setter
|
||||
private String content;
|
||||
|
||||
public BookPage() {
|
||||
this.content = "";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
package nl.andrewlalis.blockbookbinder.util;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Singleton class which handles the properties defined in an external
|
||||
* properties file.
|
||||
*/
|
||||
public class ApplicationProperties {
|
||||
private static ApplicationProperties instance;
|
||||
@Getter
|
||||
private final Properties properties;
|
||||
|
||||
public static ApplicationProperties getInstance() {
|
||||
if (instance == null) {
|
||||
try {
|
||||
instance = new ApplicationProperties();
|
||||
} catch (IOException e) {
|
||||
System.err.println("Could not load properties!");
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shortcut for getting a property.
|
||||
* @param key The property's key.
|
||||
* @return The value for that property.
|
||||
*/
|
||||
public static String getProp(String key) {
|
||||
return getInstance().getProperties().getProperty(key);
|
||||
}
|
||||
|
||||
private ApplicationProperties() throws IOException {
|
||||
this.properties = new Properties();
|
||||
this.properties.load(this.getClass().getClassLoader().getResourceAsStream("application.properties"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package nl.andrewlalis.blockbookbinder.view;
|
||||
|
||||
import nl.andrewlalis.blockbookbinder.control.ImportAction;
|
||||
import nl.andrewlalis.blockbookbinder.util.ApplicationProperties;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.StringSelection;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* The main window of the application.
|
||||
*/
|
||||
public class MainFrame extends JFrame {
|
||||
private Action importAction;
|
||||
|
||||
public void setupAndShow() {
|
||||
final int width = Integer.parseInt(ApplicationProperties.getProp("frame.default_width"));
|
||||
final int height = Integer.parseInt(ApplicationProperties.getProp("frame.default_height"));
|
||||
this.setPreferredSize(new Dimension(width, height));
|
||||
this.setTitle(ApplicationProperties.getProp("frame.title"));
|
||||
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
final URL iconUrl = this.getClass().getClassLoader().getResource("images/book_and_quill.png");
|
||||
if (iconUrl != null) {
|
||||
this.setIconImage(new ImageIcon(iconUrl).getImage());
|
||||
}
|
||||
|
||||
this.initActions();
|
||||
this.setContentPane(this.buildContentPane());
|
||||
this.setJMenuBar(this.buildMenuBar());
|
||||
|
||||
this.pack();
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setVisible(true);
|
||||
}
|
||||
|
||||
private void initActions() {
|
||||
this.importAction = new ImportAction("Import");
|
||||
}
|
||||
|
||||
private JMenuBar buildMenuBar() {
|
||||
JMenuBar menuBar = new JMenuBar();
|
||||
|
||||
JMenu fileMenu = new JMenu("File");
|
||||
fileMenu.add(new JMenuItem(this.importAction));
|
||||
menuBar.add(fileMenu);
|
||||
|
||||
JMenu helpMenu = new JMenu("Help");
|
||||
JMenuItem aboutItem = new JMenuItem("About");
|
||||
helpMenu.add(aboutItem);
|
||||
menuBar.add(helpMenu);
|
||||
|
||||
return menuBar;
|
||||
}
|
||||
|
||||
private Container buildContentPane() {
|
||||
JPanel mainPanel = new JPanel(new BorderLayout());
|
||||
|
||||
JPanel doublePanel = new JPanel(new GridLayout(1, 2));
|
||||
mainPanel.add(doublePanel, BorderLayout.CENTER);
|
||||
final Insets innerPanelInsets = new Insets(5, 5, 5, 5);
|
||||
|
||||
|
||||
JPanel leftPanel = new JPanel(new BorderLayout());
|
||||
doublePanel.add(leftPanel);
|
||||
leftPanel.add(new JLabel("Book Preview"), BorderLayout.NORTH);
|
||||
leftPanel.setBorder(new EmptyBorder(innerPanelInsets));
|
||||
|
||||
JTextArea previewPageTextArea = new JTextArea();
|
||||
JScrollPane previewPageScrollPane = new JScrollPane(previewPageTextArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
leftPanel.add(previewPageScrollPane, BorderLayout.CENTER);
|
||||
|
||||
JPanel previewButtonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
|
||||
previewButtonPanel.add(new JButton("<"));
|
||||
previewButtonPanel.add(new JButton(">"));
|
||||
leftPanel.add(previewButtonPanel, BorderLayout.SOUTH);
|
||||
|
||||
|
||||
JPanel rightPanel = new JPanel(new BorderLayout());
|
||||
doublePanel.add(rightPanel);
|
||||
rightPanel.add(new JLabel("Source Text"), BorderLayout.NORTH);
|
||||
rightPanel.setBorder(new EmptyBorder(innerPanelInsets));
|
||||
|
||||
JTextArea mainTextArea = new JTextArea();
|
||||
JScrollPane scrollWrappedMainTextArea = new JScrollPane(mainTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||
rightPanel.add(scrollWrappedMainTextArea, BorderLayout.CENTER);
|
||||
|
||||
JPanel rightPanelButtonPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||
rightPanel.add(rightPanelButtonPanel, BorderLayout.SOUTH);
|
||||
rightPanelButtonPanel.add(new JButton(this.importAction));
|
||||
|
||||
|
||||
JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||
JButton exportButton = new JButton("Export to Book");
|
||||
exportButton.addActionListener(e -> {
|
||||
System.out.println("Starting export.");
|
||||
final String fullText = mainTextArea.getText().trim();
|
||||
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(fullText.substring(0, 200)), null);
|
||||
});
|
||||
bottomPanel.add(exportButton);
|
||||
mainPanel.add(bottomPanel, BorderLayout.SOUTH);
|
||||
|
||||
return mainPanel;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
# Settings for the application's GUI.
|
||||
frame.title=Block Book Binder
|
||||
frame.default_width=800
|
||||
frame.default_height=600
|
||||
|
||||
# Settings for Minecraft book interaction.
|
||||
book.max_pages=100
|
||||
book.page_max_lines=14
|
||||
book.page_max_width=113
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 424 B |
Loading…
Reference in New Issue