blob: 9256a4e7dad5887658a19db8ae6544929a33e83e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Takashi ITOH - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.visualization.flash.ui.properties;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.actf.accservice.swtbridge.MSAA;
import org.eclipse.actf.model.flash.FlashNode;
import org.eclipse.actf.util.as.ASObject;
import org.eclipse.actf.visualization.gui.flash.FlashFinder;
import org.eclipse.actf.visualization.gui.msaa.properties.AttributePropertySource;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.PropertyDescriptor;
public class FlashNodePropertySource implements IPropertySource {
private FlashNode flashNode;
private boolean isAccImpl;
public static final String
PID_OBJECTNAME = "OBJECTNAME", //$NON-NLS-1$
PID_TYPE = "TYPE", //$NON-NLS-1$
PID_VALUE = "VALUE", //$NON-NLS-1$
PID_TARGET = "TARGET", //$NON-NLS-1$
PID_DEPTH = "depth", //$NON-NLS-1$
PID_CURRENTFRAME = "currentFrame", //$NON-NLS-1$
PID_CLASSNAME = "CLASSNAME", //$NON-NLS-1$
PID_TEXT = "TEXT", //$NON-NLS-1$
PID_TITLE = "TITLE", //$NON-NLS-1$
PID_UICOMPONENT = "isUIComponent", //$NON-NLS-1$
PID_OPAQUE_OBJECT = "isOpaqueObject", //$NON-NLS-1$
PID_INPUTABLE = "isInputable", //$NON-NLS-1$
PID_LOCATION = "LOCATION", //$NON-NLS-1$
PID_ACC_ROLE = "ACC_ROLE", //$NON-NLS-1$
PID_ACC_NAME = "ACC_NAME", //$NON-NLS-1$
PID_ACC_STATE = "ACC_STATE", //$NON-NLS-1$
PID_ACC_ACTION = "ACC_ACTION", //$NON-NLS-1$
PID_ACC_INFO = "ACC_INFO", //$NON-NLS-1$
PID_TABINDEX = "tabIndex", //$NON-NLS-1$
PID_WMODE = "WMODE"; //$NON-NLS-1$
private static final IPropertyDescriptor[] DESCRIPTORS = new IPropertyDescriptor[]
{
new PropertyDescriptor(PID_OBJECTNAME,"objectName"), // 0 //$NON-NLS-1$
new PropertyDescriptor(PID_TYPE,"type"), // 1 //$NON-NLS-1$
new PropertyDescriptor(PID_VALUE,"value"), // 2 //$NON-NLS-1$
new PropertyDescriptor(PID_TARGET,"target"), // 3 //$NON-NLS-1$
new PropertyDescriptor(PID_DEPTH,PID_DEPTH),
new PropertyDescriptor(PID_CURRENTFRAME,PID_CURRENTFRAME),
new PropertyDescriptor(PID_CLASSNAME,"className"), // 6 //$NON-NLS-1$
new PropertyDescriptor(PID_TEXT,"text"), // 7 //$NON-NLS-1$
new PropertyDescriptor(PID_TITLE,"title"), // 8 //$NON-NLS-1$
new PropertyDescriptor(PID_LOCATION,"Location"), // 10 //$NON-NLS-1$
new PropertyDescriptor(PID_TABINDEX,PID_TABINDEX),
new PropertyDescriptor(PID_ACC_INFO,"accInfo"), // 11 //$NON-NLS-1$
new PropertyDescriptor(PID_ACC_ROLE,"accRole"), // 11 //$NON-NLS-1$
new PropertyDescriptor(PID_ACC_NAME,"accName"), // 12 //$NON-NLS-1$
new PropertyDescriptor(PID_ACC_STATE,"accState"), // 13 //$NON-NLS-1$
new PropertyDescriptor(PID_ACC_ACTION,"accDefaultAction"), // 14 //$NON-NLS-1$
new PropertyDescriptor(PID_UICOMPONENT,PID_UICOMPONENT),
new PropertyDescriptor(PID_OPAQUE_OBJECT,PID_OPAQUE_OBJECT),
new PropertyDescriptor(PID_INPUTABLE,PID_INPUTABLE),
new PropertyDescriptor(PID_WMODE,"wmode") // 15 //$NON-NLS-1$
};
public FlashNodePropertySource(FlashNode flashNode) {
this.flashNode = flashNode;
this.isAccImpl = "_accImpl".equals(flashNode.getObjectName()); //$NON-NLS-1$
}
public Object getEditableValue() {
return null;
}
public IPropertyDescriptor[] getPropertyDescriptors() {
List<IPropertyDescriptor> result = new ArrayList<IPropertyDescriptor>();
for( int i=0; i<DESCRIPTORS.length; i++ ) {
if( null != getPropertyValue(DESCRIPTORS[i].getId()) ) {
result.add(DESCRIPTORS[i]);
}
}
if( FlashFinder.debugMode ) {
Set keySet = flashNode.getKeys();
if( null != keySet ) {
for( Iterator it = keySet.iterator(); it.hasNext(); ) {
Object key = it.next();
result.add(new PropertyDescriptor(key,"["+key.toString()+"]")); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
return result.toArray(new IPropertyDescriptor[result.size()]);
}
public Object getPropertyValue(Object id) {
String strValue = null;
if( PID_OBJECTNAME.equals(id) ) {
strValue = flashNode.getObjectName();
}
else if( PID_TYPE.equals(id) ) {
strValue = flashNode.getType();
}
else if( PID_VALUE.equals(id) ) {
strValue = flashNode.getValue();
}
else if( PID_TARGET.equals(id) ) {
strValue = flashNode.getTarget();
// strValue += ", mName="+flashNode.getString("mName") + ", mTarget="+flashNode.getString("mTarget") + ", parentTarget="+flashNode.getString("parentTarget") + ", targetIsString="+flashNode.getString("targetIsString") + ", targetModified="+flashNode.getString("targetModified");
}
else if( PID_CLASSNAME.equals(id) ) {
strValue = flashNode.getClassName();
}
else if( PID_TEXT.equals(id) ) {
strValue = flashNode.getText(false);
}
else if( PID_TITLE.equals(id) ) {
strValue = flashNode.getTitle();
}
// else if( PID_DEPTH.equals(id) ) {
// strValue = flashNode.getString("depth"); //$NON-NLS-1$
// }
// else if( PID_CURRENTFRAME.equals(id) ) {
// strValue = flashNode.getString("currentFrame"); //$NON-NLS-1$
// }
// else if( PID_UICOMPONENT.equals(id) ) {
// strValue = flashNode.getString("isUIComponent"); //$NON-NLS-1$
// }
else if( PID_LOCATION.equals(id) ) {
try {
int x = Float.valueOf(flashNode.getString("x")).intValue(); //$NON-NLS-1$
int y = Float.valueOf(flashNode.getString("y")).intValue(); //$NON-NLS-1$
int w = Float.valueOf(flashNode.getString("w")).intValue(); //$NON-NLS-1$
int h = Float.valueOf(flashNode.getString("h")).intValue(); //$NON-NLS-1$
strValue = x + ", " + y + ", " + (x + w) + ", " + (y + h) + " (width="+w+", height="+h+")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
}
catch(Exception e) {
}
}
else if( PID_WMODE.equals(id) ) {
if( null == flashNode.getParent() ) {
strValue = flashNode.getPlayer().getWMode();
}
}
else if( PID_ACC_INFO.equals(id) ) {
Object accInfo = flashNode.getObject("accInfo"); //$NON-NLS-1$
if( accInfo instanceof ASObject ) {
ASObject accInfoObject = ((ASObject)accInfo);
Set accInfoSet = accInfoObject.getKeys();
if( null != accInfoSet ) {
AttributePropertySource attrSource = new AttributePropertySource(null,accInfoObject.toString());
for( Iterator it = accInfoSet.iterator(); it.hasNext(); ) {
Object key = it.next();
String keyName = key.toString();
Object keyValue = accInfoObject.get(keyName);
if( keyValue instanceof Integer ) {
int intValue = ((Integer)keyValue).intValue();
if( "role".equals(keyName) ) { //$NON-NLS-1$
keyValue = MSAA.getRoleText(intValue);
}
else if( "state".equals(keyName) ) { //$NON-NLS-1$
keyValue = MSAA.getStateText(intValue);
}
}
attrSource.put(keyName, keyValue);
}
return attrSource;
}
}
}
else if( isAccImpl ) {
String methodName = null;
if( PID_ACC_ROLE.equals(id) ) {
methodName = "get_accRole"; //$NON-NLS-1$
}
else if( PID_ACC_NAME.equals(id) ) {
methodName = "get_accName"; //$NON-NLS-1$
}
else if( PID_ACC_STATE.equals(id) ) {
methodName = "get_accState"; //$NON-NLS-1$
}
else if( PID_ACC_ACTION.equals(id) ) {
methodName = "get_accDefaultAction"; //$NON-NLS-1$
}
if( null != methodName ) {
Variant value = flashNode.getPlayer().callMethod(flashNode.getTarget(),methodName,new Variant(0)); //$NON-NLS-1$
if( null != value ) {
switch( value.getType() ) {
case OLE.VT_BSTR:
strValue = value.getString();
break;
case OLE.VT_I4:
int intValue = value.getInt();
if( PID_ACC_ROLE.equals(id) ) {
strValue = MSAA.getRoleText(intValue);
}
else if( PID_ACC_STATE.equals(id) ) {
strValue = MSAA.getStateText(intValue);
}
break;
}
}
}
}
if( null==strValue ) {
strValue = flashNode.getString(id.toString());
}
return strValue;
}
public boolean isPropertySet(Object id) {
return false;
}
public void resetPropertyValue(Object id) {
}
public void setPropertyValue(Object id, Object value) {
}
}