view java/src/uk/ac/qmul/eecs/ccmi/gui/EditorTabbedPane.java @ 1:e3935c01cde2 tip

moved license of PdPersistenceManager to the beginning of the file
author Fiore Martin <f.martin@qmul.ac.uk>
date Tue, 08 Jul 2014 19:52:03 +0100
parents 78b7fc5391a2
children
line wrap: on
line source
/*  
 CCmI Editor - A Collaborative Cross-Modal Diagram Editing Tool
  
 Copyright (C) 2011  Queen Mary University of London (http://ccmi.eecs.qmul.ac.uk/)

 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 uk.ac.qmul.eecs.ccmi.gui;

import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;

import uk.ac.qmul.eecs.ccmi.speech.NarratorFactory;
import uk.ac.qmul.eecs.ccmi.speech.SpeechUtilities;

/**
 * 
 * The tabbed pane of the editor. On each tab a {@code DiagramPanel} is displayed. 
 *
 */
@SuppressWarnings("serial")
public class EditorTabbedPane extends JTabbedPane {
	/**
	 * Creates a new {@code EditorTabbedPane}
	 * 
	 * @param frame the frame when this tabbed pane will be placed
	 */
	public EditorTabbedPane(EditorFrame frame){
		setFocusTraversalKeysEnabled(false);
		
		SpeechUtilities.changeTabListener(this,frame);
		getAccessibleContext().setAccessibleName("tab ");
				
		/* shut up the narrator upon pressing ctrl */
		getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL,InputEvent.CTRL_DOWN_MASK),"ctrldown");
		getActionMap().put("ctrldown",new AbstractAction(){
			public void actionPerformed(ActionEvent evt){
				NarratorFactory.getInstance().shutUp();
			}
		});
	}

	/**
	 * Sets the title of the tab containing a component.
	 * 
	 * @param component the component in the tab whose title has to be set
	 * @param title the new title
	 */
	public void setComponentTabTitle(Component component, String title){
		int index = indexOfComponent(component); 
		if(index == -1)
			return;
		setTitleAt(index,title);
	}
	
	/**
	 * Returns the title of the tab containing a component. 
	 * 
	 * @param component the component contained by the tab
	 * @return the title of the tab containing {@code component}
	 */
	public String getComponentTabTitle(Component component){
		int index = indexOfComponent(component);
		if(index == -1)
			return null;
		return getTitleAt(index);
	}
	
	/**
	 * Repaints the title on a tab containing a component.
 	 * 
	 * @param component the component contained by the tab whose title will be repainted
	 */
	public void refreshComponentTabTitle(Component component){
		setComponentTabTitle(component,component.getName());
	}
	
	@Override
	public DiagramPanel getComponentAt(int n){
		return (DiagramPanel)super.getComponent(n);
	}

	/**
	 * The components in an {@code EditorTabbedPane} are all instances of {@code DiagramPanel}, which in turns
	 * holds an instance of {@code Diagram}. This utility methods retrieves the index of 
	 * the {@code DiagramPanel} whose diagram has the same name than the {@code String} passed as argument. 
	 * 
	 * @param diagramName the name of the diagram to look for 
	 * @return the index of the diagram named as {@code diagramName} or {@code -1} if
	 * such diagram doesn't exist
	 */
	public int getDiagramNameTabIndex(String diagramName){
		for(int i=0; i<getTabCount();i++){
			DiagramPanel dPanel = getComponentAt(i); 
			if(diagramName.equals(dPanel.getDiagram().getName())){
				return i;
			}
		}
		return -1;
	}
	
	/**
	 * The components in an {@code EditorTabbedPane} are all instances of {@code DiagramPanel}, which in turns
	 * hold an instance of {@code Diagram}. This method returns the index of the {@code DiagramPanel}
	 * whose diagram has been saved on the file system at the path specified as argument. 
	 * 
	 * @param path a path on the file system identifying the diagram
	 * @return the index of the {@code DiagramPanel} whose diagram has been saved on 
	 * the file system in {@code path}, or {@code -1} if such diagram doesn't exist
	 */
	public int getPathTabIndex(String path){
		for(int i=0; i<getTabCount();i++){
			DiagramPanel dPanel = getComponentAt(i); 
			if(path.equals(dPanel.getFilePath())){
				return i;
			}
		}
		return -1;
	}
}