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,494 @@
/*
* Copyright (c) 2003,2009 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.view.swt;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import com.common.thread.IRunnable;
import com.common.util.optimized.IntArray;
import com.foundation.event.*;
import com.foundation.view.JefImage;
import com.foundation.view.MultiAssociationContainer;
import com.foundation.view.MultiResourceAssociation;
import com.foundation.view.ResourceAssociation;
/**
* Very similar to the list box control except that only one value can be selected at a time and the list only appears when the user requests to change the value.
* The combo may also allow for custom user selections that are not in the list.
*/
public class ComboBox extends IndexedCollectionComponent implements IEventListener, SelectionListener, ModifyListener {
//Styles//
public static final int STYLE_DROP_DOWN = SWT.DROP_DOWN;
public static final int STYLE_READ_ONLY = SWT.READ_ONLY;
public static final int STYLE_SIMPLE = SWT.SIMPLE;
/** Converts the collection item to a string used to show the item to the user. */
protected MultiResourceAssociation itemText = new MultiResourceAssociation(this, this, getViewContext(), ResourceAssociation.TYPE_TEXT, false, null);
/** Converts the collection item to an image used to show the item to the user. */
protected MultiResourceAssociation itemImage = new MultiResourceAssociation(this, this, getViewContext(), ResourceAssociation.TYPE_IMAGE, false, null);
/** Used to stop selection events from being handled while the items are being changed. */
private boolean suspendSelectionEvents = false;
/**
* ComboBox constructor.
* @param parent A composite control which will be the parent of the new instance (cannot be null).
* @param name The unique component name.
* @param style The style of control to construct.
* @see #STYLE_DROP_DOWN
* @see #STYLE_READ_ONLY
* @see #STYLE_SIMPLE
*/
public ComboBox(Container parent, String name, int style) {
super(parent, name, style);
setAllowUserItems(!((style & STYLE_READ_ONLY) > 0));
}//ComboBox()//
/* (non-Javadoc)
* @see com.foundation.view.swt.AbstractComponent#initializeControl(int)
*/
protected void initializeControl(int style, Object data) {
setSwtWidget(new org.eclipse.swt.widgets.Combo(((Container) getContainer()).getSwtParent(), style));
getSwtWidget().setData(this);
}//initializeControl()//
/**
* Gets the SWT combo that represents this combo box.
* @return The SWT combo providing visualization for this combo box.
*/
public org.eclipse.swt.widgets.Combo getSwtCombo() {
return (org.eclipse.swt.widgets.Combo) getSwtControl();
}//getSwtCombo()//
/**
* Sets the association container used to access the item text.
* @param container The item text association metadata.
*/
public void setItemTextAssociation(MultiAssociationContainer container) {
verifyThread();
this.itemText.setAssociations(container);
}//setItemTextAssociation()//
/**
* Sets the association container used to access the item image.
* @param container The item image association metadata.
*/
public void setItemImageAssociation(MultiAssociationContainer container) {
verifyThread();
this.itemImage.setAssociations(container);
}//setItemImageAssociation()//
/**
* Gets the component text size limit.
* @return The maximum number of characters allowed in the text.
*/
public Integer getTextLimit() {
verifyThread();
return new Integer(getSwtCombo().getTextLimit());
}//getTextLimit()//
/**
* Sets the component text size limit.
* @param textLimit The maximum number of characters allowed in the text.
*/
public void setTextLimit(Integer textLimit) {
verifyThread();
getSwtCombo().setTextLimit(textLimit.intValue());
}//setTextLimit()//
/* (non-Javadoc)
* @see com.foundation.view.swt.AbstractComponent#internalViewInitialize()
*/
protected void internalViewInitialize() {
getSwtCombo().addSelectionListener(this);
getSwtCombo().addModifyListener(this);
itemText.initialize();
itemImage.initialize();
super.internalViewInitialize();
}//internalViewInitialize()//
/* (non-Javadoc)
* @see com.foundation.view.swt.AbstractComponent#internalViewRelease()
*/
protected void internalViewRelease() {
if((getSwtCombo() != null) && (!getSwtCombo().isDisposed())) {
getSwtCombo().removeSelectionListener(this);
getSwtCombo().removeModifyListener(this);
}//if//
super.internalViewRelease();
itemText.release();
itemImage.release();
}//internalViewRelease()//
/* (non-Javadoc)
* @see com.foundation.view.swt.AbstractComponent#internalOnValueChanged(com.foundation.view.MultiResourceAssociation, java.lang.Object)
*/
protected void internalOnValueChanged(MultiResourceAssociation resourceAssociation, Object alteredItem, Object data, boolean isUpdate) {
if(resourceAssociation == itemText) {
Object indexData = getItemIndexData(alteredItem);
//Set the new item text.//
if(indexData instanceof Integer) {
controlSetItem(((Integer) indexData).intValue(), itemToString(alteredItem));
}//if//
else if(indexData instanceof IntArray) {
IntArray array = (IntArray) indexData;
for(int index = 0; index < array.getSize(); index++) {
controlSetItem(array.get(index), itemToString(alteredItem));
}//for//
}//if//
}//if//
else if(resourceAssociation == itemImage) {
//TODO: Set the item image.
}//else if//
else {
super.internalOnValueChanged(resourceAssociation, alteredItem, data, isUpdate);
}//else//
}//internalOnValueChanged()//
/* (non-Javadoc)
* @see com.foundation.view.swt.IndexedCollectionComponent#getItemData(java.lang.Object)
*/
protected Object getItemData(Object item) {
return itemToString(item);
}//getItemData()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#itemAdded(java.lang.Object, int)
*/
protected void itemAdded(Object item, int index) {
registerItem(item);
super.itemAdded(item, index);
}//itemAdded()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#itemRemoved(java.lang.Object, int)
*/
protected void itemRemoved(Object item, int index) {
unregisterItem(item);
super.itemRemoved(item, index);
}//itemRemoved()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#itemAllRemoved()
*/
protected void itemAllRemoved() {
unregisterItems();
super.itemAllRemoved();
}//itemAllRemoved()//
/**
* Converts an item in the collection to a string that can be displayed.
* @param item The collection item to convert.
* @return The string that can be displayed.
*/
protected String itemToString(Object item) {
String result = null;
if(item instanceof JefImage) {
return "";
}//if//
else {
itemText.refresh(item);
result = (String) itemText.getValue(item);
if(result == null) {
result = item != null ? item.toString() : "";
}//if//
}//if//
return result;
}//itemToString()//
/**
* Converts an item in the collection to an image that can be displayed.
* @param item The collection item to convert.
* @return The image that can be displayed.
*/
protected JefImage itemToImage(Object item) {
JefImage result = null;
if(item instanceof JefImage) {
result = (JefImage) item;
}//if//
else {
itemImage.refresh(item);
result = (JefImage) itemImage.getValue(item);
}//else//
return result;
}//itemToImage()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#registerItem(java.lang.Object)
*/
protected void registerItem(Object item) {
itemText.registerItem(item, null);
itemImage.registerItem(item, null);
super.registerItem(item);
}//registerItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#unregisterItem(java.lang.Object)
*/
protected void unregisterItem(Object item) {
itemText.unregisterItem(item);
itemImage.unregisterItem(item);
super.unregisterItem(item);
}//unregisterItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#unregisterItems()
*/
protected void unregisterItems() {
itemText.unregisterAllItems();
itemImage.unregisterAllItems();
super.unregisterItems();
}//unregisterItems()//
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
}//widgetDefaultSelected()//
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
updateSelectionLinks();
if(getAutoSynchronizeSelection()) {
if(getAutoSynchronizeSelectionDelay() > 0) {
//Start a task to send the selection to the server after a short delay. This will reduce the overhead of auto synchronizing the selection.//
synchronized(this) {
if(autoSynchronizeSelectionTask != null) {
removeTask(autoSynchronizeSelectionTask);
}//if//
autoSynchronizeSelectionTask = new Task() {
public void execute() {
//Make sure that this task is still valid and is not being superceeded.//
synchronized(ComboBox.this) {
if(autoSynchronizeSelectionTask == this) {
//Cleanup after the task.//
autoSynchronizeSelectionTask = null;
getEventLoop().executeAsync(new IRunnable() {
public Object run() {
synchronizeSelection();
if(getAutoValidate()) {
postSynchronizeValidate();
}//if//
return null;
}//run()//
});
}//if//
}//synchronized//
}//run()//
};
addTask(autoSynchronizeSelectionTask, getAutoSynchronizeSelectionDelay());
}//synchronized//
}//if//
else {
synchronizeSelection();
if(getAutoValidate()) {
postSynchronizeValidate();
}//if//
}//else//
}//if//
}//widgetSelected()//
/* (non-Javadoc)
* @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
*/
public void modifyText(ModifyEvent event) {
if(!suspendSelectionEvents) {
if(controlGetSelection() == -1) {
widgetSelected(null);
}//if//
}//if//
}//modifyText()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlRemoveAll()
*/
protected void controlRemoveAll() {
getSwtCombo().removeAll();
}//controlRemoveAll()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlSetItems(String[])
*/
protected void controlSetItems(Object[] items) {
String[] itemTexts = new String[items.length];
for(int index = 0; index < itemTexts.length; index++) {
itemTexts[index] = items[index] == null ? "" : items[index].toString();
}//for//
suspendSelectionEvents = true;
try {
getSwtCombo().setItems(itemTexts);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlSetItems()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlSetItem(int, String)
*/
protected void controlSetItem(int index, Object itemData) {
suspendSelectionEvents = true;
try {
getSwtCombo().setItem(index, (String) itemData);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlSetItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlAddItem(String, int)
*/
protected void controlAddItem(Object itemData, int index) {
suspendSelectionEvents = true;
try {
getSwtCombo().add((String) itemData, index);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlAddItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlAddItem(String)
*/
protected void controlAddItem(Object itemData) {
suspendSelectionEvents = true;
try {
getSwtCombo().add((String) itemData);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlAddItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlRemoveItem(int)
*/
protected void controlRemoveItem(int index) {
suspendSelectionEvents = true;
try {
getSwtCombo().remove(index);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlRemoveItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlGetSelections()
*/
protected int[] controlGetSelections() {
//return getSwtCombo().getSelectionIndices();
throw new RuntimeException("Method not supported - controlGetSelections");
}//controlGetSelections()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlGetSelection()
*/
protected int controlGetSelection() {
return getSwtCombo().getSelectionIndex();
}//controlGetSelection()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlSetSelections()
*/
protected void controlSetSelections(int[] indices) {
//getSwtCombo().setSelection(indices);
throw new RuntimeException("Method not supported - controlSetSelections");
}//controlSetSelections()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlSetSelection()
*/
protected void controlSetSelection(int index) {
if(getSwtCombo().getSelectionIndex() != index) {
suspendSelectionEvents = true;
try {
if(index == -1) {
getSwtCombo().deselectAll();
}//if//
else {
getSwtCombo().select(index);
}//else//
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//if//
}//controlSetSelection()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlAddSelection()
*/
protected void controlAddSelection(int index) {
//getSwtCombo().select(index);
throw new RuntimeException("Method not supported - controlAddSelection");
}//controlAddSelection()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlRemoveSelection()
*/
protected void controlRemoveSelection(int index) {
suspendSelectionEvents = true;
try {
getSwtCombo().deselect(index);
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlRemoveSelection()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlRemoveAllSelections()
*/
protected void controlRemoveAllSelections() {
suspendSelectionEvents = true;
try {
getSwtCombo().deselectAll();
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlRemoveAllSelections()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlIsSelected()
*/
protected boolean controlIsSelected(int index) {
return getSwtCombo().getSelectionIndex() == index;
}//controlIsSelected()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlGetText()
*/
protected String controlGetText() {
return getSwtCombo().getText();
}//controlGetText()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlSetCustomItem(Object)
*/
protected void controlSetCustomItem(Object item) {
suspendSelectionEvents = true;
try {
if(item == null) {
getSwtCombo().deselectAll();
}//if//
else {
getSwtCombo().deselectAll();
getSwtCombo().setText(item.toString());
}//else//
}//try//
finally {
suspendSelectionEvents = false;
}//finally//
}//controlSetCustomItem()//
/* (non-Javadoc)
* @see com.foundation.view.swt.CollectionComponent#controlGetSelectionCount()
*/
protected int controlGetSelectionCount() {
return getSwtCombo().getText().length() > 0 ? 1 : 0;
}//controlGetSelectionCount()//
/**
* Forces the selection event handler to be called.
*/
protected void forceSelectionEvent() { //Should call widgetSelected implemented by the subclass. This name may need to change.//
widgetSelected(null);
}//forceSelectionEvent()//
}//ComboBox//