Initial commit from SVN.

This commit is contained in:
wcrisman
2014-05-30 10:31:51 -07:00
commit b45e56b890
1968 changed files with 370949 additions and 0 deletions

View File

@@ -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//