-/*\r
- * Copyright (C) 2015 Roland Haeder\r
- *\r
- * This program is free software: you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation, either version 3 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program. If not, see <http://www.gnu.org/licenses/>.\r
- */\r
-package org.mxchange.addressbook.client.gui;\r
-\r
-import javax.swing.JFrame;\r
-import org.mxchange.addressbook.BaseFrameworkSystem;\r
-import org.mxchange.addressbook.FrameAlreadyInitializedException;\r
-import org.mxchange.addressbook.application.AddressbookApplication;\r
-import org.mxchange.addressbook.client.Client;\r
-\r
-/**\r
- *\r
- * @author Roland Haeder\r
- */\r
-public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame {\r
-\r
- /**\r
- * Own instance\r
- */\r
- private static ClientFrame self;\r
-\r
- /**\r
- * Singelton getter for this frame instance.\r
- *\r
- * @param client Client instance\r
- * @return Returns a singelton instance of this frame\r
- */\r
- public static final ClientFrame getSelfInstance (final Client client) {\r
- // Is it set?\r
- if (!(self instanceof ClientFrame)) {\r
- // Create new instance\r
- self = new AddressbookFrame(client);\r
- }\r
- \r
- // Return instance\r
- return self;\r
- }\r
-\r
- /**\r
- * Frame instance\r
- */\r
- private final JFrame frame;\r
-\r
- /**\r
- * Whether this frame has been initialized\r
- */\r
- private boolean isInitialized;\r
-\r
- /**\r
- * Creates an instance of this frame with a client instance\r
- * @param client\r
- */\r
- private AddressbookFrame (final Client client) {\r
- // Debug line\r
- this.getLogger().debug("Initializing Swing frame ...");\r
-\r
- // Set frame instance\r
- this.frame = new JFrame(AddressbookApplication.printableTitle());\r
-\r
- // Set client here\r
- this.setClient(client);\r
- }\r
-\r
- @Override\r
- public void setVisible (final boolean visible) {\r
- throw new UnsupportedOperationException("Not supported yet.");\r
- }\r
-\r
- /**\r
- * Setups the frame\r
- * \r
- * @param client Client instance\r
- */\r
- @Override\r
- public void setupFrame (final Client client) {\r
- // Has the user entered own data?\r
- if (this.getClient().getContactManager().isOwnContactAdded()) {\r
- // Debug message\r
- this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");\r
-\r
- // Not entered yet, so enable menu\r
- //addOwnData.setEnabled(false);\r
- }\r
-\r
- // All done here\r
- //statusLabel.setText(bundle.getString("AddressbookFrame.status.done.text"));\r
- }\r
-\r
- /**\r
- * Initalizes this frame. Having initComponents() exposed (publicly\r
- * accessible) means that any other object can initialize components which\r
- * you may not want.\r
- * \r
- * @throws org.mxchange.addressbook.FrameAlreadyInitializedException If this method has been called twice\r
- */\r
- @Override\r
- public void initFrame () throws FrameAlreadyInitializedException {\r
- // Has this frame been initialized?\r
- if (this.isInitialized) {\r
- // Throw exception\r
- throw new FrameAlreadyInitializedException();\r
- }\r
-\r
- // Init components\r
- this.initComponents();\r
-\r
- // Set flag\r
- this.isInitialized = true;\r
- }\r
-\r
- /**\r
- * Initialize components\r
- */\r
- private void initComponents () {\r
- }\r
-\r
-}\r
+/*
+ * Copyright (C) 2015 Roland Haeder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.mxchange.addressbook.client.gui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.text.MessageFormat;
+import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import org.mxchange.addressbook.BaseFrameworkSystem;
+import org.mxchange.addressbook.FrameAlreadyInitializedException;
+import org.mxchange.addressbook.application.AddressbookApplication;
+import org.mxchange.addressbook.client.Client;
+
+/**
+ *
+ * @author Roland Haeder
+ */
+public class AddressbookFrame extends BaseFrameworkSystem implements ClientFrame {
+
+ /**
+ * Own instance
+ */
+ private static ClientFrame self;
+
+ /**
+ * Singelton getter for this frame instance.
+ *
+ * @param client Client instance
+ * @return Returns a singelton instance of this frame
+ */
+ public static final ClientFrame getSelfInstance (final Client client) {
+ // Is it set?
+ if (!(self instanceof ClientFrame)) {
+ // Create new instance
+ self = new AddressbookFrame(client);
+ }
+
+ // Return instance
+ return self;
+ }
+
+ /**
+ * Frame instance
+ */
+ private final JFrame frame;
+
+ /**
+ * Whether this frame has been initialized
+ */
+ private boolean isInitialized;
+
+ /**
+ * Status label needs to be updated
+ */
+ private JLabel statusLabel;
+
+ /**
+ * Creates an instance of this frame with a client instance
+ *
+ * @param client
+ */
+ private AddressbookFrame (final Client client) {
+ // Debug line
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+
+ // Set frame instance
+ this.frame = new JFrame(AddressbookApplication.printableTitle());
+
+ // Set client here
+ this.setClient(client);
+ }
+
+ /**
+ * Shutdown this frame
+ */
+ @Override
+ public void doShutdown () {
+ // First only show shutdown status
+ this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel.shutdown.text"));
+ }
+
+ /**
+ * Setups the frame, do not set isInitialized here
+ *
+ * @param client Client instance
+ */
+ @Override
+ public void setupFrame (final Client client) {
+ // Debug line
+ this.getLogger().trace(MessageFormat.format("client={0}: CALLED!", client));
+
+ // Has the user entered own data?
+ if (this.getClient().getContactManager().isOwnContactAdded()) {
+ // Debug message
+ this.getLogger().debug("Disabling menus: isOwnContactAdded()=false");
+
+ // Not entered yet, so enable menu
+ //addOwnData.setEnabled(false);
+ }
+
+ // Make the frame visible
+ this.frame.setVisible(true);
+
+ // All done here
+ this.statusLabel.setText(this.getBundle().getString("AddressbookFrame.statusLabel.done.text"));
+ }
+
+ /**
+ * Initalizes this frame. Having initComponents() exposed (publicly
+ * accessible) means that any other object can initialize components which
+ * you may not want.
+ *
+ * @throws org.mxchange.addressbook.FrameAlreadyInitializedException If this method has been called twice
+ */
+ @Override
+ public void initFrame () throws FrameAlreadyInitializedException {
+ // Debug line
+ this.getLogger().trace("CALLED!");
+
+ // Has this frame been initialized?
+ if (this.isInitialized()) {
+ // Throw exception
+ throw new FrameAlreadyInitializedException();
+ }
+
+ // Init components
+ this.initComponents();
+
+ // Set flag
+ this.isInitialized = true;
+ }
+
+ /**
+ * Returns field isInitialized. This flag indicates whether this frame has been initialized or not.
+ *
+ * @return Field isInitialized
+ */
+ @Override
+ public final boolean isInitialized () {
+ return this.isInitialized;
+ }
+
+ /**
+ * Initialize components
+ */
+ private void initComponents () {
+ // Debug line
+ this.getLogger().trace("CALLED!");
+
+ // Set default close operation
+ this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ // Register shutdown listener
+ this.frame.addWindowListener(new WindowAdapter() {
+ /**
+ * Invoked when a window has been closed.
+ */
+ @Override
+ public void windowClosed(final WindowEvent e) {
+ // Shutdown application cleanly
+ self.getClient().getApplication().doShutdown();
+ }
+
+ /**
+ * Invoked when a window is in the process of being closed.
+ * The close operation can be overridden at this point.
+ */
+ @Override
+ public void windowClosing(final WindowEvent e) {
+ // Also shutdown cleanly here
+ self.getClient().getApplication().doShutdown();
+ }
+ });
+
+ // Setup layout manager
+ this.frame.setLayout(new BorderLayout(2, 2));
+
+ // Set window size
+ this.frame.setSize(700, 400);
+
+ // Center window in middle of screen, instead of top-left corner
+ this.frame.setLocationRelativeTo(null);
+
+ // Init menu bar, menu and item instances
+ JMenuBar menuBar = new JMenuBar();
+ JMenu menu;
+ JMenuItem item;
+
+ // Init some menus:
+ // 1) File menu
+ menu = new JMenu(this.getBundle().getString("AddressbookFrame.menu.file.text"));
+
+ // Add menu items:
+ // 1.x) Exit program (should be last)
+ item = new JMenuItem(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.text"));
+ item.setToolTipText(this.getBundle().getString("AddressbookFrame.menuItem.exitProgram.toolTipText"));
+
+ // Add listener to exit menu
+ item.addActionListener(new ActionListener() {
+ /**
+ * If the user has performed this action
+ *
+ * @param e An instance of an ActionEvent class
+ */
+ @Override
+ public void actionPerformed (final ActionEvent e) {
+ self.getClient().getApplication().doShutdown();
+ }
+ });
+
+ // Add item -> menu
+ menu.add(item);
+
+ // Add menu -> menu bar
+ menuBar.add(menu);
+
+ // Add menu bar -> frame
+ this.frame.add(menuBar, BorderLayout.NORTH);
+
+ // Init status label (which needs to be updated
+ this.statusLabel = new JLabel(this.getBundle().getString("AddressbookFrame.statusLabel.initializing.text"));
+
+ // Init status bar in south
+ JPanel panel = new JPanel();
+ panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
+ panel.add(this.statusLabel);
+ panel.setBorder(BorderFactory.createEtchedBorder());
+
+ // Add panel to frame
+ this.frame.add(panel, BorderLayout.SOUTH);
+ }
+
+}