make the GUI update its texts when a new language is chosen
[jSite2.git] / src / net / pterodactylus / jsite / gui / MainWindow.java
1 /*
2  * jSite2 - MainWindow.java -
3  * Copyright © 2008 David Roden
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  */
19
20 package net.pterodactylus.jsite.gui;
21
22 import java.awt.BorderLayout;
23 import java.awt.Container;
24 import java.awt.Dimension;
25
26 import javax.swing.JFrame;
27 import javax.swing.JMenu;
28 import javax.swing.JMenuBar;
29 import javax.swing.JPanel;
30 import javax.swing.JToolBar;
31
32 import net.pterodactylus.jsite.i18n.I18n;
33 import net.pterodactylus.jsite.i18n.I18nable;
34 import net.pterodactylus.jsite.main.Version;
35 import net.pterodactylus.util.swing.StatusBar;
36 import net.pterodactylus.util.swing.SwingUtils;
37
38 /**
39  * Defines the main window of the application.
40  * 
41  * @author David ‘Bombe’ Roden <bombe@freenetproject.org>
42  * @version $Id$
43  */
44 public class MainWindow extends JFrame implements I18nable {
45
46         /** The swing interface that receives all actions. */
47         private final SwingInterface swingInterface;
48
49         /** The status bar. */
50         private StatusBar statusBar = new StatusBar();
51
52         /** The content pane. */
53         private JPanel contentPane = new JPanel();
54
55         /**
56          * Creates a new main window that redirects all actions to the given swing
57          * interface.
58          * 
59          * @param swingInterface
60          *            The swing interface to receive all actions
61          */
62         public MainWindow(SwingInterface swingInterface) {
63                 super("jSite " + Version.getVersion());
64                 this.swingInterface = swingInterface;
65                 initWindow();
66                 setPreferredSize(new Dimension(480, 280));
67                 pack();
68                 SwingUtils.center(this);
69                 I18n.registerI18nable(this);
70                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
71         }
72
73         //
74         // ACCESSORS
75         //
76
77         /**
78          * Sets the text of the status bar.
79          * 
80          * @param text
81          *            The text of the status bar
82          */
83         public void setStatusBarText(String text) {
84                 statusBar.setText(text);
85         }
86
87         //
88         // PRIVATE METHODS
89         //
90
91         /**
92          * Initializes the window by creating all its components.
93          */
94         private void initWindow() {
95                 JMenuBar menuBar = new JMenuBar();
96
97                 final JMenu nodeMenu = new JMenu(I18n.get("mainWindow.menu.node.name"));
98                 menuBar.add(nodeMenu);
99                 nodeMenu.setMnemonic(I18n.get("mainWindow.menu.node.mnemonic").charAt(0));
100
101                 nodeMenu.add(swingInterface.getManageNodesAction());
102                 nodeMenu.addSeparator();
103                 nodeMenu.add(swingInterface.getNodeConnectAction());
104                 nodeMenu.add(swingInterface.getNodeDisconnectAction());
105
106                 setJMenuBar(menuBar);
107
108                 JToolBar toolBar = new JToolBar(I18n.get("mainWindow.toolbar.name"));
109                 toolBar.add(swingInterface.getManageNodesAction());
110                 toolBar.addSeparator();
111                 toolBar.add(swingInterface.getNodeConnectAction());
112                 toolBar.add(swingInterface.getNodeDisconnectAction());
113                 super.getContentPane().add(toolBar, BorderLayout.PAGE_START);
114
115                 super.getContentPane().add(contentPane, BorderLayout.CENTER);
116                 initComponents();
117         }
118
119         /**
120          * Initializes all components of this window.
121          */
122         private void initComponents() {
123                 super.getContentPane().add(statusBar, BorderLayout.PAGE_END);
124         }
125
126         /**
127          * {@inheritDoc}
128          */
129         @Override
130         public Container getContentPane() {
131                 return contentPane;
132         }
133
134         //
135         // INTERFACE I18nable
136         //
137
138         /**
139          * {@inheritDoc}
140          */
141         public void updateI18n() {
142                 swingInterface.getManageNodesAction().updateI18n();
143                 swingInterface.getNodeConnectAction().updateI18n();
144                 swingInterface.getNodeDisconnectAction().updateI18n();
145                 SwingUtils.repackCentered(this);
146         }
147
148 }