X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FMainWindow.java;h=19982e9b254e9f72e19b82aa33c1be868107ea8e;hb=d3151d3ac5ded6fefa8e1c4927d4d30893bb5346;hp=0c46ad5f2a3798e1d6b1c47a65b094b7c3a60fdc;hpb=a650cbe18868a3db627f2410ce7441c29ceed253;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/MainWindow.java b/src/net/pterodactylus/jsite/gui/MainWindow.java index 0c46ad5..19982e9 100644 --- a/src/net/pterodactylus/jsite/gui/MainWindow.java +++ b/src/net/pterodactylus/jsite/gui/MainWindow.java @@ -20,13 +20,26 @@ package net.pterodactylus.jsite.gui; import java.awt.BorderLayout; +import java.awt.Container; import java.awt.Dimension; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; import javax.swing.JFrame; -import javax.swing.JMenu; import javax.swing.JMenuBar; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JToolBar; +import javax.swing.SwingConstants; +import javax.swing.border.EmptyBorder; import net.pterodactylus.jsite.i18n.I18n; +import net.pterodactylus.jsite.i18n.I18nable; +import net.pterodactylus.jsite.i18n.gui.I18nAction; +import net.pterodactylus.jsite.i18n.gui.I18nMenu; import net.pterodactylus.jsite.main.Version; import net.pterodactylus.util.swing.StatusBar; import net.pterodactylus.util.swing.SwingUtils; @@ -37,7 +50,7 @@ import net.pterodactylus.util.swing.SwingUtils; * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ -public class MainWindow extends JFrame { +public class MainWindow extends JFrame implements I18nable { /** The swing interface that receives all actions. */ private final SwingInterface swingInterface; @@ -45,6 +58,21 @@ public class MainWindow extends JFrame { /** The status bar. */ private StatusBar statusBar = new StatusBar(); + /** The content pane. */ + private JPanel contentPane = new JPanel(new BorderLayout(12, 12)); + + /** The jSite menu. */ + private I18nMenu jSiteMenu; + + /** The node menu. */ + private I18nMenu nodeMenu; + + /** The language menu. */ + private I18nMenu languageMenu; + + /** The about menu. */ + private I18nMenu aboutMenu; + /** * Creates a new main window that redirects all actions to the given swing * interface. @@ -59,6 +87,7 @@ public class MainWindow extends JFrame { setPreferredSize(new Dimension(480, 280)); pack(); SwingUtils.center(this); + I18n.registerI18nable(this); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @@ -86,16 +115,59 @@ public class MainWindow extends JFrame { private void initWindow() { JMenuBar menuBar = new JMenuBar(); - final JMenu nodeMenu = new JMenu(I18n.get("mainWindow.menu.node.name")); + jSiteMenu = new I18nMenu("mainWindow.menu.jSite"); + menuBar.add(jSiteMenu); + + jSiteMenu.add(new FixedJMenuItem(swingInterface.getConfigureAction())); + jSiteMenu.addSeparator(); + jSiteMenu.add(new FixedJMenuItem(swingInterface.getImportConfigAction())); + jSiteMenu.addSeparator(); + jSiteMenu.add(new FixedJMenuItem(swingInterface.getQuitAction())); + + nodeMenu = new I18nMenu("mainWindow.menu.node"); menuBar.add(nodeMenu); - nodeMenu.setMnemonic(I18n.get("mainWindow.menu.node.mnemonic").charAt(0)); - nodeMenu.add(swingInterface.getManageNodesAction()); + nodeMenu.add(new FixedJMenuItem(swingInterface.getManageNodesAction())); nodeMenu.addSeparator(); - nodeMenu.add(swingInterface.getNodeConnectAction()); - nodeMenu.add(swingInterface.getNodeDisconnectAction()); + nodeMenu.add(new FixedJMenuItem(swingInterface.getNodeConnectAction())); + nodeMenu.add(new FixedJMenuItem(swingInterface.getNodeDisconnectAction())); + + languageMenu = new I18nMenu("mainWindow.menu.language"); + menuBar.add(languageMenu); + + for (I18nAction languageAction: swingInterface.getLanguageActions()) { + languageMenu.add(languageAction); + } + + menuBar.add(new JPanel()); + aboutMenu = new I18nMenu("mainWindow.menu.help"); + menuBar.add(aboutMenu); + + aboutMenu.add(new FixedJMenuItem(swingInterface.getHelpAboutAction())); setJMenuBar(menuBar); + + JToolBar toolBar = new JToolBar(I18n.get("mainWindow.toolbar.name")); + toolBar.add(swingInterface.getManageNodesAction()); + toolBar.addSeparator(); + toolBar.add(swingInterface.getNodeConnectAction()); + toolBar.add(swingInterface.getNodeDisconnectAction()); + super.getContentPane().add(toolBar, BorderLayout.PAGE_START); + + super.getContentPane().add(contentPane, BorderLayout.CENTER); + + addWindowListener(new WindowAdapter() { + + /** + * {@inheritDoc} + */ + @SuppressWarnings("synthetic-access") + @Override + public void windowClosing(WindowEvent windowEvent) { + swingInterface.getQuitAction().actionPerformed(null); + } + }); + initComponents(); } @@ -103,7 +175,57 @@ public class MainWindow extends JFrame { * Initializes all components of this window. */ private void initComponents() { - getContentPane().add(statusBar, BorderLayout.PAGE_END); + super.getContentPane().add(statusBar, BorderLayout.PAGE_END); + + /* + * the main window consists of two panels which are vertically oriented. + * the upper panel contains of a tabbed pane, the lower panel consists + * of a table that lists the running requests. + */ + + JPanel upperPanel = new JPanel(new BorderLayout(12, 12)); + getContentPane().add(upperPanel, BorderLayout.PAGE_START); + contentPane.setBorder(new EmptyBorder(12, 12, 12, 12)); + + JTabbedPane tabbedPane = new JTabbedPane(SwingConstants.TOP, JTabbedPane.SCROLL_TAB_LAYOUT); + upperPanel.add(tabbedPane, BorderLayout.CENTER); + + Box projectOverviewPanel = new Box(BoxLayout.PAGE_AXIS); + tabbedPane.add(I18n.get("mainWindow.pane.overview.title"), projectOverviewPanel); + projectOverviewPanel.setBorder(new EmptyBorder(12, 12, 12, 12)); + projectOverviewPanel.add(Box.createVerticalGlue()); + JButton addProjectButton = new JButton(swingInterface.getAddProjectAction()); + addProjectButton.setAlignmentX(0.5f); + projectOverviewPanel.add(addProjectButton); + projectOverviewPanel.add(Box.createVerticalGlue()); + +// JPanel lowerPanel = new JPanel(new BorderLayout(12, 12)); +// getContentPane().add(lowerPanel, BorderLayout.CENTER); + } + + /** + * {@inheritDoc} + */ + @Override + public Container getContentPane() { + return contentPane; + } + + // + // INTERFACE I18nable + // + + /** + * {@inheritDoc} + */ + public void updateI18n() { + swingInterface.getManageNodesAction().updateI18n(); + swingInterface.getNodeConnectAction().updateI18n(); + swingInterface.getNodeDisconnectAction().updateI18n(); + nodeMenu.updateI18n(); + languageMenu.updateI18n(); + getJMenuBar().revalidate(); + SwingUtils.repackCentered(this); } }