/* =========================================================== * TradeManager : a application to trade strategies for the Java(tm) platform * =========================================================== * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Project Info: org.trade * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. * * [Java is a trademark or registered trademark of Oracle, Inc. * in the United States and other countries.] * * (C) Copyright 2011-2011, by Simon Allen and Contributors. * * Original Author: Simon Allen; * Contributor(s): -; * * Changes * ------- * */ package org.trade.ui.base; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Insets; import java.util.Vector; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.trade.ui.widget.Clock; /** */ public abstract class TabbedAppPanel extends BasePanel implements ChangeListener { /** * */ private static final long serialVersionUID = 8405644422808736326L; private final static Logger _log = LoggerFactory.getLogger(TabbedAppPanel.class); private final JTabbedPane m_tabbedPane = new JTabbedPane(); public String m_title = null; private JPanel m_menuPanel = new JPanel(); private PrintController m_printJob = new PrintController(); private int currentTab = 0; private BasePanel currBasePanel = null; /** * Constructor for TabbedAppPanel. * * @param frame * Frame */ public TabbedAppPanel(Frame frame) { this.setLayout(new BorderLayout()); JPanel jPanel1 = new JPanel(new BorderLayout()); JPanel jPanelProgressBar = new JPanel(new FlowLayout(FlowLayout.RIGHT)); JProgressBar progressBar = new JProgressBar(0, 0); jPanelProgressBar.add(progressBar); JPanel jPanelClock = new JPanel(new FlowLayout(FlowLayout.LEFT)); Clock clock = new Clock(); jPanelClock.add(clock); JPanel jPanelStatus = new JPanel(new GridLayout()); JTextField jTextFieldStatus = new JTextField(); jTextFieldStatus.setRequestFocusEnabled(false); jTextFieldStatus.setMargin(new Insets(5, 5, 5, 5)); jTextFieldStatus.setBackground(Color.white); jTextFieldStatus.setBorder(BorderFactory.createLoweredBevelBorder()); jPanelStatus.add(jTextFieldStatus); JPanel jPanel3 = new JPanel(new BorderLayout()); jPanel3.add(jPanelClock, BorderLayout.WEST); jPanel3.add(jPanelProgressBar, BorderLayout.EAST); jPanel3.add(jPanelStatus, BorderLayout.CENTER); JPanel jPanel2 = new JPanel(new BorderLayout()); jPanel2.add(m_tabbedPane, BorderLayout.CENTER); jPanel1.add(jPanel2, BorderLayout.CENTER); jPanel1.add(jPanel3, BorderLayout.SOUTH); m_menuPanel.setLayout(new BorderLayout()); jPanel1.add(m_menuPanel, BorderLayout.NORTH); this.add(jPanel1, BorderLayout.CENTER); this.setStatusBar(jTextFieldStatus); this.setProgressBar(progressBar); m_tabbedPane.addChangeListener(this); } /** * Method setMenu. * * @param menu * BasePanelMenu */ public void setMenu(BasePanelMenu menu) { m_menuPanel.removeAll(); m_menuPanel.add(menu, BorderLayout.NORTH); super.setMenu(menu); } public void doWindowOpen() { } public void doWindowClose() { doExit(); } public void doWindowActivated() { } /** * Method doWindowDeActivated. * * @return boolean */ public boolean doWindowDeActivated() { return true; } /** * This method is fired when a different tab is selected. * * @param currBasePanel * BasePanel * @param newBasePanel * BasePanel */ public abstract void tabChanged(BasePanel currBasePanel, BasePanel newBasePanel); public void doLFMetal() { try { UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel()); SwingUtilities.updateComponentTreeUI(getFrame()); } catch (Exception eMetal) { _log.error("Could not load LookAndFeel: " + eMetal); } } public void doLFWindows() { try { // UIManager // .setLookAndFeel(new // com.sun.java.swing.plaf.windows.WindowsLookAndFeel()); SwingUtilities.updateComponentTreeUI(getFrame()); } catch (Exception eMetal) { _log.error("Could not load LookAndFeel: " + eMetal); } } public void doLFMotif() { try { // UIManager // .setLookAndFeel(new // com.sun.java.swing.plaf.motif.MotifLookAndFeel()); UIManager.put("swing.boldMetal", Boolean.FALSE); SwingUtilities.updateComponentTreeUI(getFrame()); } catch (Exception eMetal) { _log.error("Could not load LookAndFeel: " + eMetal); } } public void doExit() { for (int i = 0; i < m_tabbedPane.getTabCount(); i++) { currBasePanel = (BasePanel) m_tabbedPane.getComponent(i); currBasePanel.doWindowClose(); } System.exit(0); } public void doHelp() { } public void doPrint() { printComponent(this.getFrame()); } /** * Method printComponent. * * @param comp * Component */ protected void printComponent(Component comp) { m_printJob.printComponent(getFrame(), comp, null); } /** * Method addTab. * * @param title * String * @param panel * BasePanel */ protected void addTab(String title, final BasePanel panel) { m_tabbedPane.add(title, panel); SwingUtilities.invokeLater(new Runnable() { public void run() { panel.doWindowOpen(); } }); } /** * Method getSelectPanel. * * @return BasePanel */ public BasePanel getSelectPanel() { return this.currBasePanel; } /** * Method setSelectPanel. * * @param tabIndex * int * @param event * MessageEvent * @param parm * Vector<Object> */ public void setSelectPanel(int tabIndex, MessageEvent event, Vector<Object> parm) { setSelectPanel(tabIndex); this.currBasePanel.handleEvent(event, parm); } /** * Method setSelectPanel. * * @param tabIndex * int */ public void setSelectPanel(int tabIndex) { m_tabbedPane.setSelectedIndex(tabIndex); } /** * Method setSelectPanel. * * @param tabPanel * BasePanel */ public void setSelectPanel(BasePanel tabPanel) { for (int i = 0; i < m_tabbedPane.getTabCount(); i++) { BasePanel tabBasePanel = ((BasePanel) m_tabbedPane.getComponent(i)); if (tabBasePanel.equals(tabPanel)) { m_tabbedPane.setSelectedIndex(i); } } } /** * Method stateChanged. * * @param evt * ChangeEvent * @see javax.swing.event.ChangeListener#stateChanged(ChangeEvent) */ public void stateChanged(ChangeEvent evt) { if (evt.getSource() instanceof JTabbedPane) { JTabbedPane selectedTab = (JTabbedPane) evt.getSource(); BasePanel prevBasePanel = null; if (null == currBasePanel) { currBasePanel = (BasePanel) selectedTab.getSelectedComponent(); currBasePanel.setSelected(true); } if (selectedTab.isShowing()) { // switch current frame prevBasePanel = currBasePanel; if (!currBasePanel.doWindowDeActivated()) { setSelectPanel(currentTab); return; } ((BasePanel) selectedTab.getComponent(currentTab)).setSelected(false); currentTab = selectedTab.getSelectedIndex(); currBasePanel = (BasePanel) selectedTab.getComponent(currentTab); tabChanged(prevBasePanel, currBasePanel); currBasePanel.clearStatusBarMessage(); currBasePanel.setSelected(true); currBasePanel.doWindowActivated(); } } } }