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}