Initial commit from SVN.
This commit is contained in:
@@ -0,0 +1,205 @@
|
||||
/*
|
||||
* Copyright (c) 2005,2007 Declarative Engineering LLC.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Declarative Engineering LLC
|
||||
* verson 1 which accompanies this distribution, and is available at
|
||||
* http://declarativeengineering.com/legal/DE_Developer_License_v1.txt
|
||||
*/
|
||||
package com.foundation.tcv.swt.client;
|
||||
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.widgets.TabItem;
|
||||
|
||||
import com.common.util.LiteHashMap;
|
||||
import com.foundation.tcv.swt.ITabPanel;
|
||||
import com.foundation.tcv.view.ViewMessage;
|
||||
|
||||
public class TabPanel extends Container implements ITabPanel, Component.IComponentListener {
|
||||
/** A mapping of TabItem instances indexed by the Component displayed by the tab. */
|
||||
private LiteHashMap tabItemsByComponentMap = new LiteHashMap(15);
|
||||
/**
|
||||
* TabPanel constructor.
|
||||
*/
|
||||
public TabPanel() {
|
||||
super();
|
||||
}//TabPanel()//
|
||||
/**
|
||||
* Gets the SWT tab folder that represents this tab panel.
|
||||
* @return The SWT tab folder providing visualization for this tab panel.
|
||||
*/
|
||||
public org.eclipse.swt.widgets.TabFolder getSwtTabFolder() {
|
||||
return (org.eclipse.swt.widgets.TabFolder) getSwtWidget();
|
||||
}//getSwtTabFolder()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.AbstractComponent#internalViewInitialize()
|
||||
*/
|
||||
protected void internalViewInitialize() {
|
||||
super.internalViewInitialize();
|
||||
}//internalViewInitialize()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.AbstractComponent#internalViewRelease()
|
||||
*/
|
||||
protected void internalViewRelease() {
|
||||
super.internalViewRelease();
|
||||
}//internalViewRelease()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.AbstractComponent#internalViewSynchronize()
|
||||
*/
|
||||
protected void internalViewSynchronize() {
|
||||
super.internalViewSynchronize();
|
||||
}//internalViewSynchronize()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.AbstractComponent#internalProcessMessage(com.foundation.tcv.model.ViewMessage)
|
||||
*/
|
||||
public Object internalProcessMessage(ViewMessage viewMessage) {
|
||||
Object result = null;
|
||||
|
||||
switch(viewMessage.getMessageNumber()) {
|
||||
case MESSAGE_INITIALIZE: {
|
||||
if(getSwtControl() == null) {
|
||||
int[] data = (int[]) viewMessage.getMessageData();
|
||||
int style = data[1];
|
||||
|
||||
//Link to the parent container.//
|
||||
setContainer((Container) getComponent(data[0]));
|
||||
getContainer().addComponent(this);
|
||||
//Create the SWT widget.//
|
||||
setSwtWidget(new org.eclipse.swt.widgets.TabFolder(getContainer().getSwtParent(), style));
|
||||
getSwtWidget().setData(this);
|
||||
|
||||
//If the container has already been initialized then force the parent to re-layout so that this component will appear.//
|
||||
if(getContainer().isInitialized()) {
|
||||
getContainer().getSwtComposite().layout(true, true);
|
||||
}//if//
|
||||
}//if//
|
||||
break;
|
||||
}//case//
|
||||
case MESSAGE_ADD_TAB: {
|
||||
int componentNumber = ((int[]) viewMessage.getMessageData())[0];
|
||||
Component component = (Component) getComponent(componentNumber);
|
||||
String title = component.getContainerTitle();
|
||||
Image image = component.getContainerImage();
|
||||
String toolTipText = component.getToolTipText();
|
||||
TabItem tabItem = null;
|
||||
|
||||
if(((int[]) viewMessage.getMessageData()).length > 1) {
|
||||
tabItem = new TabItem(getSwtTabFolder(), 0, ((int[]) viewMessage.getMessageData())[1]);
|
||||
}//if//
|
||||
else {
|
||||
tabItem = new TabItem(getSwtTabFolder(), 0);
|
||||
}//else//
|
||||
|
||||
tabItem.setText(title == null ? "" : title);
|
||||
tabItem.setImage(image);
|
||||
tabItem.setToolTipText(toolTipText);
|
||||
tabItem.setData(component);
|
||||
tabItem.setControl(component.getSwtControl());
|
||||
tabItemsByComponentMap.put(component, tabItem);
|
||||
component.registerListener(this);
|
||||
break;
|
||||
}//case//
|
||||
case MESSAGE_REMOVE_TAB: {
|
||||
int componentNumber = ((Integer) viewMessage.getMessageData()).intValue();
|
||||
Component component = (Component) getComponent(componentNumber);
|
||||
|
||||
if(component != null) {
|
||||
TabItem tabItem = (TabItem) tabItemsByComponentMap.remove(component);
|
||||
|
||||
if(tabItem != null && !tabItem.isDisposed()) {
|
||||
//Note: Don't dispose of the image because it comes from the component's container-image property whose lifecycle is managed by the component.//
|
||||
tabItem.dispose();
|
||||
}//if//
|
||||
|
||||
component.unregisterListener(this);
|
||||
}//if//
|
||||
break;
|
||||
}//case//
|
||||
case MESSAGE_REPOSITION_TAB: {
|
||||
int componentNumber = ((int[]) viewMessage.getMessageData())[0];
|
||||
int newIndex = ((int[]) viewMessage.getMessageData())[1];
|
||||
Component component = (Component) getComponent(componentNumber);
|
||||
|
||||
if(component != null) {
|
||||
TabItem oldTabItem = (TabItem) tabItemsByComponentMap.remove(component);
|
||||
|
||||
if(oldTabItem != null && !oldTabItem.isDisposed()) {
|
||||
TabItem newTabItem = new TabItem(getSwtTabFolder(), 0, newIndex);
|
||||
|
||||
newTabItem.setText(oldTabItem.getText());
|
||||
newTabItem.setImage(oldTabItem.getImage());
|
||||
newTabItem.setToolTipText(oldTabItem.getToolTipText());
|
||||
newTabItem.setData(oldTabItem.getData());
|
||||
newTabItem.setControl(oldTabItem.getControl());
|
||||
oldTabItem.dispose();
|
||||
tabItemsByComponentMap.put(component, newTabItem);
|
||||
}//if//
|
||||
}//if//
|
||||
break;
|
||||
}//case//
|
||||
case MESSAGE_SORT_TABS: {
|
||||
int startIndex = ((Integer) ((Object[]) viewMessage.getMessageData())[0]).intValue();
|
||||
int[] mapping = (int[]) ((Object[]) viewMessage.getMessageData())[1];
|
||||
TabItem[] oldTabItems = new TabItem[mapping.length];
|
||||
int nextIndex = startIndex;
|
||||
|
||||
//Reorder the tab items by adding new tab items before the old ones.//
|
||||
for(int index = 0; index < mapping.length; index++) {
|
||||
int oldIndex = nextIndex + index + mapping[index];
|
||||
TabItem oldTabItem = getSwtTabFolder().getItem(oldIndex);
|
||||
TabItem tabItem = new org.eclipse.swt.widgets.TabItem(getSwtTabFolder(), 0, index);
|
||||
Component component = (Component) oldTabItem.getData();
|
||||
|
||||
tabItem.setText(oldTabItem.getText());
|
||||
tabItem.setImage(oldTabItem.getImage());
|
||||
tabItem.setToolTipText(oldTabItem.getToolTipText());
|
||||
tabItem.setControl(oldTabItem.getControl());
|
||||
tabItem.setData(oldTabItem.getData());
|
||||
oldTabItems[index] = oldTabItem;
|
||||
tabItemsByComponentMap.put(component, tabItem);
|
||||
nextIndex++;
|
||||
}//for//
|
||||
|
||||
//Remove the old tab items.//
|
||||
for(int index = 0; index < oldTabItems.length; index++) {
|
||||
oldTabItems[index].dispose();
|
||||
}//for//
|
||||
break;
|
||||
}//case//
|
||||
default: {
|
||||
result = super.internalProcessMessage(viewMessage);
|
||||
}//default//
|
||||
}//switch//
|
||||
|
||||
return result;
|
||||
}//internalProcessMessage()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.Component.IComponentListener#toolTipTextChanged(com.foundation.tcv.swt.client.Component, java.lang.String)
|
||||
*/
|
||||
public void toolTipTextChanged(Component component, String newToolTipText) {
|
||||
TabItem tabItem = (TabItem) tabItemsByComponentMap.get(component);
|
||||
|
||||
if(tabItem != null && !tabItem.isDisposed()) {
|
||||
tabItem.setToolTipText(newToolTipText);
|
||||
}//if//
|
||||
}//toolTipTextChanged()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.Component.IComponentListener#imageChanged(com.foundation.tcv.swt.client.Component, org.eclipse.swt.graphics.Image)
|
||||
*/
|
||||
public void imageChanged(Component component, Image image) {
|
||||
TabItem tabItem = (TabItem) tabItemsByComponentMap.get(component);
|
||||
|
||||
if(tabItem != null && !tabItem.isDisposed()) {
|
||||
tabItem.setImage(image);
|
||||
}//if//
|
||||
}//imageChanged()//
|
||||
/* (non-Javadoc)
|
||||
* @see com.foundation.tcv.swt.client.Component.IComponentListener#titleChanged(com.foundation.tcv.swt.client.Component, java.lang.String)
|
||||
*/
|
||||
public void titleChanged(Component component, String newTitle) {
|
||||
TabItem tabItem = (TabItem) tabItemsByComponentMap.get(component);
|
||||
|
||||
if(tabItem != null && !tabItem.isDisposed()) {
|
||||
tabItem.setText(newTitle);
|
||||
}//if//
|
||||
}//titleChanged()//
|
||||
}//TabPanel//
|
||||
Reference in New Issue
Block a user