001/*
002 * Copyright (c) 2015 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: crawl $'
006 * '$Date: 2015-11-02 19:58:24 +0000 (Mon, 02 Nov 2015) $' 
007 * '$Revision: 34195 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029package org.kepler.profiling.gui;
030
031import java.awt.LayoutManager;
032import java.util.List;
033
034import javax.swing.JPanel;
035
036import org.kepler.gui.TabPane;
037import org.kepler.gui.ViewPane;
038import org.kepler.gui.state.StateChangeEvent;
039import org.kepler.gui.state.StateChangeListener;
040import org.kepler.gui.state.StateChangeMonitor;
041import org.kepler.gui.state.ViewStateChangeEvent;
042
043import ptolemy.actor.gui.TableauFrame;
044
045/** A tab pane that knows when its containing view is selected.
046 * 
047 *  @author Daniel Crawl
048 *  @version $Id: ViewWatchingTabPane.java 34195 2015-11-02 19:58:24Z crawl $
049 */
050public class ViewWatchingTabPane extends JPanel implements TabPane, StateChangeListener {
051
052    public ViewWatchingTabPane() {
053        super();
054    }
055    
056    public ViewWatchingTabPane(LayoutManager layout) {
057        super(layout);
058    }
059    
060    /** Get the parent frame. */
061    @Override
062    public TableauFrame getParentFrame() {
063        return _frame;
064    }
065
066    /** Get the tab name. */
067    @Override
068    public String getTabName() {
069        return _tabName;
070    }
071
072    /** Handle view change events. */
073    @Override
074    public void handleStateChange(StateChangeEvent event) {
075    
076        // see if the selected tab changed
077        /* TODO
078        else if(event.getChangedState().equals(StateChangeEvent.TAB_SELECTED)) {
079            Object source = event.getSource();
080            if(source == this) {
081                _tabIsSelected = true;
082            } else {
083                _tabIsSelected = false;
084            }
085            //System.out.println("tab selected " + _tabIsSelected);
086             *          
087        */
088        // see if the view changed
089        if(event.getChangedState().equals(ViewStateChangeEvent.SHOW_VIEW)) {
090            Object source = event.getSource();
091            try {
092                List<TabPane> panes = ((ViewPane)source).getTabPanes(_tabName);
093                if(panes.contains(this)) {
094                    _viewIsSelected = true;
095                } else {
096                    _viewIsSelected = false;
097                }
098                //System.out.println("view selected " + _viewIsSelected);
099            } catch (Exception e) {
100                // TODO Auto-generated catch block
101                e.printStackTrace();
102            }
103        }
104    }
105    
106    /** Initialize the contents of this tab pane. In this class, does nothing. */
107    @Override
108    public void initializeTab() throws Exception {
109
110    }
111    
112    /** Clean up resources since panel is being closed. */
113    @Override
114    public void removeNotify() {
115        super.removeNotify();
116        StateChangeMonitor.getInstance().removeStateChangeListener(ViewStateChangeEvent.SHOW_VIEW, this);
117    }
118
119    /** Set the parent frame and add listeners for the workflow
120     *  run manager, view changes, and tab changes.
121     */
122    @Override
123    public void setParentFrame(TableauFrame parent) {
124        _frame = parent;
125        // TODO
126        //StateChangeMonitor.getInstance().addStateChangeListener(StateChangeEvent.TAB_SELECTED, this);
127        StateChangeMonitor.getInstance().addStateChangeListener(ViewStateChangeEvent.SHOW_VIEW, this);
128    }
129
130    /** The parent frame. */
131    protected TableauFrame _frame;
132    
133    /** The tab name. */
134    protected String _tabName;
135
136    // TODO
137    //protected boolean _tabIsSelected = true;
138    
139    /** If true, the view containing this tab is selected. */
140    protected boolean _viewIsSelected = false;
141}