X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fnet%2Fpterodactylus%2Fjsite%2Fgui%2FMainWindow.java;h=04c51d263d8e9e95bc3ac281ceeea86c3137ac39;hb=40aee755466b1d99bc6204112e923ed13201d89a;hp=3d61638e4d5e4980bcdd849e67d34944406353df;hpb=2bd90a148fe17a4f091d148586d67eb69f4122f6;p=jSite2.git diff --git a/src/net/pterodactylus/jsite/gui/MainWindow.java b/src/net/pterodactylus/jsite/gui/MainWindow.java index 3d61638..04c51d2 100644 --- a/src/net/pterodactylus/jsite/gui/MainWindow.java +++ b/src/net/pterodactylus/jsite/gui/MainWindow.java @@ -24,6 +24,9 @@ import java.awt.Container; import java.awt.Dimension; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.util.Timer; +import java.util.TimerTask; import javax.swing.Action; import javax.swing.Box; @@ -33,7 +36,9 @@ import javax.swing.JFrame; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; +import javax.swing.JScrollPane; import javax.swing.JTabbedPane; +import javax.swing.JTable; import javax.swing.JToolBar; import javax.swing.SwingConstants; import javax.swing.border.EmptyBorder; @@ -49,11 +54,11 @@ import net.pterodactylus.util.swing.SwingUtils; /** * Defines the main window of the application. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ -public class MainWindow extends JFrame implements I18nable { +public class MainWindow extends JFrame implements WindowListener, I18nable { /** The swing interface that receives all actions. */ private final SwingInterface swingInterface; @@ -61,6 +66,15 @@ public class MainWindow extends JFrame implements I18nable { /** The status bar. */ private StatusBar statusBar = new StatusBar(); + /** Timer for clearing the status bar. */ + private Timer statusBarClearTimer = new Timer("StatusBar Cleaner", true); + + /** Object for status bar clearing ticker event. */ + private TimerTask statusBarClearTimerTask; + + /** Delay (in seconds) after which to clear status bar. */ + private int statusBarClearDelay = 5000; + /** The content pane. */ private JPanel contentPane = new JPanel(new BorderLayout(12, 12)); @@ -94,10 +108,13 @@ public class MainWindow extends JFrame implements I18nable { /** The project overview panel. */ private Box projectOverviewPanel; + /** The request table. */ + private JTable requestTable; + /** * Creates a new main window that redirects all actions to the given swing * interface. - * + * * @param swingInterface * The swing interface to receive all actions */ @@ -109,7 +126,7 @@ public class MainWindow extends JFrame implements I18nable { pack(); SwingUtils.center(this); I18n.registerI18nable(this); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + addWindowListener(this); } // @@ -118,17 +135,51 @@ public class MainWindow extends JFrame implements I18nable { /** * Sets the text of the status bar. - * + * * @param text * The text of the status bar */ public void setStatusBarText(String text) { statusBar.setText(text); + synchronized (statusBar) { + if (statusBarClearTimerTask != null) { + statusBarClearTimerTask.cancel(); + } + statusBarClearTimerTask = new TimerTask() { + + @SuppressWarnings("synthetic-access") + @Override + public void run() { + statusBar.setText("\u00a0"); + } + + }; + statusBarClearTimer.schedule(statusBarClearTimerTask, statusBarClearDelay); + } + } + + /** + * Returns the status bar clear delay (in milliseconds). + * + * @return The status bar clear delay + */ + public int getStatusBarClearDelay() { + return statusBarClearDelay; + } + + /** + * Sets the status bar clear delay (in milliseconds). + * + * @param statusBarClearDelay + * The status bar clear delay + */ + public void setStatusBarClearDelay(int statusBarClearDelay) { + this.statusBarClearDelay = statusBarClearDelay; } /** * Sets whether the advanced mode is activated. - * + * * @param advancedMode * true if the advanced mode is activated, * false if the simple mode is activated @@ -150,7 +201,7 @@ public class MainWindow extends JFrame implements I18nable { /** * Returns the currently selected project. - * + * * @return The currently selected project */ public Project getSelectedProject() { @@ -169,10 +220,20 @@ public class MainWindow extends JFrame implements I18nable { for (Action nodeConnectAction: swingInterface.getNodeConnectActions()) { connectMenu.add(nodeConnectAction); } + if (connectMenu.getMenuComponentCount() == 0) { + JMenuItem noNodeAvailableItem = new JMenuItem(I18n.get("mainWindow.menu.connectNoNodeAvailable.name")); + noNodeAvailableItem.setEnabled(false); + connectMenu.add(noNodeAvailableItem); + } disconnectMenu.removeAll(); for (Action nodeDisconnectAction: swingInterface.getNodeDisconnectActions()) { disconnectMenu.add(nodeDisconnectAction); } + if (disconnectMenu.getMenuComponentCount() == 0) { + JMenuItem noNodeAvailableItem = new JMenuItem(I18n.get("mainWindow.menu.disconnectNoNodeAvailable.name")); + noNodeAvailableItem.setEnabled(false); + disconnectMenu.add(noNodeAvailableItem); + } } // @@ -206,6 +267,7 @@ public class MainWindow extends JFrame implements I18nable { nodeMenu.add(connectMenu); nodeMenu.add(disconnectMenuItem = new FixedJMenuItem(swingInterface.getNodeDisconnectAction())); nodeMenu.add(disconnectMenu); + refreshNodeMenuItems(); languageMenu = new I18nMenu("mainWindow.menu.language"); menuBar.add(languageMenu); @@ -278,6 +340,9 @@ public class MainWindow extends JFrame implements I18nable { projectOverviewPanel.add(addProjectButton); projectOverviewPanel.add(Box.createVerticalGlue()); + requestTable = new JTable(swingInterface.getRequestTableModel()); + getContentPane().add(new JScrollPane(requestTable), BorderLayout.CENTER); + // JPanel lowerPanel = new JPanel(new BorderLayout(12, 12)); // getContentPane().add(lowerPanel, BorderLayout.CENTER); } @@ -314,7 +379,61 @@ public class MainWindow extends JFrame implements I18nable { for (int componentIndex = 0; componentIndex < projectPane.getTabCount(); componentIndex++) { projectPane.setTitleAt(componentIndex, projectPane.getComponentAt(componentIndex).getName()); } + refreshNodeMenuItems(); SwingUtils.repackCentered(this); } + // + // INTERFACE WindowListener + // + + /** + * {@inheritDoc} + */ + public void windowActivated(WindowEvent e) { + /* do nothing. */ + } + + /** + * {@inheritDoc} + */ + public void windowClosed(WindowEvent e) { + /* do nothing. */ + } + + /** + * {@inheritDoc} + */ + public void windowClosing(WindowEvent e) { + swingInterface.getQuitAction().actionPerformed(null); + } + + /** + * {@inheritDoc} + */ + public void windowDeactivated(WindowEvent e) { + /* do nothing. */ + } + + /** + * {@inheritDoc} + */ + public void windowDeiconified(WindowEvent e) { + /* do nothing. */ + } + + /** + * {@inheritDoc} + */ + public void windowIconified(WindowEvent e) { + /* do nothing. */ + } + + /** + * {@inheritDoc} + */ + public void windowOpened(WindowEvent e) { + /* do nothing. */ + } + }