X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FSwingInterface.java;h=d00ebe1a665e45bb98012927a2c4ce8ef4cc4770;hb=27134534d9035c73371a20eaedc3847a0a414545;hp=54dec0dfc54018223855f5f435065f2121e8e0b5;hpb=b8f8c23bed246d27c1ea0a53db92a1f33de1174c;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/SwingInterface.java b/src/net/pterodactylus/jsite/gui/SwingInterface.java index 54dec0d..d00ebe1 100644 --- a/src/net/pterodactylus/jsite/gui/SwingInterface.java +++ b/src/net/pterodactylus/jsite/gui/SwingInterface.java @@ -20,20 +20,27 @@ package net.pterodactylus.jsite.gui; import java.awt.event.ActionEvent; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Properties; import javax.swing.JOptionPane; import net.pterodactylus.jsite.core.Core; import net.pterodactylus.jsite.core.CoreListener; import net.pterodactylus.jsite.core.Node; +import net.pterodactylus.jsite.core.Project; import net.pterodactylus.jsite.i18n.I18n; import net.pterodactylus.jsite.i18n.gui.I18nAction; +import net.pterodactylus.util.io.Closer; /** - * TODO + * The Swing user interface. * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ @@ -43,6 +50,9 @@ public class SwingInterface implements CoreListener { /** The application core. */ private final Core core; + /** The configuration directory. */ + private final String configDirectory; + /** The main window. */ private MainWindow mainWindow; @@ -76,18 +86,46 @@ public class SwingInterface implements CoreListener { /** The “add project” action. */ private I18nAction addProjectAction; + /** The “clone project” action. */ + private I18nAction cloneProjectAction; + + /** The “delete project” action. */ + private I18nAction deleteProjectAction; + + /** The “about” dialog. */ + private AboutDialog aboutDialog; + + /** The configuration dialog. */ + private ConfigurationDialog configurationDialog; + /** The list of all defined nodes. */ private List nodeList; + // + // CONFIGURATION + // + + /** Whether to beautify the GUI. */ + private boolean beautify; + /** * Creates a new swing interface. * * @param core * The core to operate on + * @param configDirectory + * The directory the configuration is stored in */ - public SwingInterface(Core core) { + public SwingInterface(Core core, String configDirectory) { this.core = core; - I18n.setLocale(Locale.ENGLISH); /* TODO - load config */ + this.configDirectory = configDirectory; + I18n.setLocale(Locale.ENGLISH); + loadConfig(); + if (beautify) { + System.setProperty("swing.aatext", "true"); + System.setProperty("swing.plaf.metal.controlFont", "Tahoma"); + System.setProperty("swing.plaf.metal.userFont", "Tahoma"); + } initActions(); initDialogs(); } @@ -195,6 +233,24 @@ public class SwingInterface implements CoreListener { return addProjectAction; } + /** + * Returns the “clone project” action. + * + * @return The “clone project” action + */ + I18nAction getCloneProjectAction() { + return cloneProjectAction; + } + + /** + * Returns the “delete project” action. + * + * @return The “delete project” action + */ + I18nAction getDeleteProjectAction() { + return deleteProjectAction; + } + // // ACTIONS // @@ -215,6 +271,62 @@ public class SwingInterface implements CoreListener { // /** + * Loads the configuration of the interface. + */ + private void loadConfig() { + /* initialize default stuff. */ + beautify = false; + /* now read config. */ + File configFile = new File(configDirectory, "swing-interface.properties"); + if (!configFile.exists() || !configFile.canRead() || !configFile.isFile()) { + System.err.println("could not find “" + configFile.getAbsolutePath() + "”!"); + return; + } + Properties configProperties = new Properties(); + FileInputStream configInputStream = null; + try { + configInputStream = new FileInputStream(configFile); + configProperties.load(configInputStream); + } catch (IOException ioe1) { + System.err.println("could not load config, " + ioe1.getMessage()); + } finally { + Closer.close(configInputStream); + } + if (configProperties.containsKey("beautify")) { + beautify = Boolean.valueOf(configProperties.getProperty("beautify")); + } + } + + /** + * Saves the configuration. + */ + private void saveConfig() { + File configDirectory = new File(this.configDirectory); + if (!configDirectory.exists()) { + if (!configDirectory.mkdirs()) { + System.err.println("could not create “" + this.configDirectory + "”!"); + return; + } + } + if (!configDirectory.exists() || !configDirectory.isDirectory() || !configDirectory.canWrite()) { + System.err.println("can not access “" + this.configDirectory + "”!"); + return; + } + File configFile = new File(configDirectory, "swing-interface.properties"); + Properties configProperties = new Properties(); + configProperties.setProperty("beautify", String.valueOf(beautify)); + FileOutputStream configOutputStream = null; + try { + configOutputStream = new FileOutputStream(configFile); + configProperties.store(configOutputStream, "configuration of swing interface"); + } catch (IOException ioe1) { + System.err.println("could not save config, " + ioe1.getMessage()); + } finally { + Closer.close(configOutputStream); + } + } + + /** * Initializes all actions. */ private void initActions() { @@ -311,6 +423,26 @@ public class SwingInterface implements CoreListener { addProject(); } }; + cloneProjectAction = new I18nAction("mainWindow.button.cloneProject") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + cloneProject(); + } + }; + deleteProjectAction = new I18nAction("mainWindow.button.deleteProject") { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + public void actionPerformed(ActionEvent actionEvent) { + deleteProject(); + } + }; } /** @@ -318,6 +450,8 @@ public class SwingInterface implements CoreListener { */ private void initDialogs() { manageNodesDialog = new ManageNodesDialog(this); + aboutDialog = new AboutDialog(this); + configurationDialog = new ConfigurationDialog(this); } // @@ -328,6 +462,12 @@ public class SwingInterface implements CoreListener { * Shows the configuration dialog. */ private void configure() { + configurationDialog.setBeautify(beautify); + configurationDialog.setVisible(true); + if (!configurationDialog.wasCancelled()) { + beautify = configurationDialog.getBeautify(); + saveConfig(); + } } /** @@ -340,6 +480,7 @@ public class SwingInterface implements CoreListener { * Quits jSite. */ private void quit() { + saveConfig(); System.exit(0); } @@ -384,12 +525,28 @@ public class SwingInterface implements CoreListener { * Shows the “about” dialog. */ private void helpAbout() { + aboutDialog.setVisible(true); } /** * Adds a project. */ private void addProject() { + Project project = new Project(); + project.setName("New Project"); + project.setDescription(""); + } + + /** + * Clones a project. + */ + private void cloneProject() { + } + + /** + * Deletes a project. + */ + private void deleteProject() { } //