blob: e1e71227df5151533a250b25b0c0d8fd69f31ec3 [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.gui.ui.views;
import org.eclipse.actf.accservice.swtbridge.AccessibleObject;
import org.eclipse.actf.accservice.swtbridge.AccessibleObjectFactory;
import org.eclipse.actf.util.win32.HighlightComposite;
import org.eclipse.actf.visualization.gui.common.TargetWindow;
import org.eclipse.actf.visualization.gui.msaa.checker.MSAAProblemsView;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IPartListener2;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.properties.PropertySheet;
public class MSAAViewRegistory {
// View IDs
public static final String MSAAOutlineView_ID = MSAAOutlineView.ID;
public static final String FlashDOMView_ID = "org.eclipse.actf.visualization.flash.ui.views.FlashDOMView"; //$NON-NLS-1$
public static final String MSAAProblemsView_ID = MSAAProblemsView.ID;
public static final String MSAAPropertiesView_ID = MSAAPropertiesView.ID;
public static final String MSAAListView_ID = MSAAListView.ID;
public static final String JAWSTextView_ID = JAWSTextView.ID;
public static final String MSAAEventView_ID = MSAAEventView.ID;
public static AccessibleObject rootObject = null;
public static AccessibleObject outlineObject = null;
private static int updateRef = 0;
private static final Display display = Display.getCurrent();
private static int hwndRoot = 0;
private static IPartListener2 partListener = new IPartListener2() {
public void partActivated(IWorkbenchPartReference partRef) {
if( partRef instanceof IEditorReference ) {
if( TargetWindow.isEmbeddedBrowser() ) {
final int hwnd = TargetWindow.getRootWindow();
if( hwnd != hwndRoot ) {
display.timerExec("Web Browser".equals(partRef.getPartName())?3000:0,new Runnable(){ //$NON-NLS-1$
public void run() {
if( !display.isDisposed() && hwnd != hwndRoot ) {
refreshRootObject();
}
}
});
}
}
}
}
public void partBroughtToTop(IWorkbenchPartReference partRef) {}
public void partClosed(IWorkbenchPartReference partRef) {}
public void partDeactivated(IWorkbenchPartReference partRef) {}
public void partHidden(IWorkbenchPartReference partRef) {}
public void partInputChanged(IWorkbenchPartReference partRef) {}
public void partOpened(IWorkbenchPartReference partRef) {}
public void partVisible(IWorkbenchPartReference partRef) {}
};
private static boolean partListening = false;
public static void outlineSelected(Object object ) {
addUpdateRef();
try {
object = adjustSelection(object);
if( object instanceof AccessibleObject ) {
outlineObject = (AccessibleObject)object;
showProperties(outlineObject);
IMSAAListView listView = (IMSAAListView)findView(MSAAListView_ID);
if( null != listView ) {
listView.setSelection(outlineObject);
}
IJAWSTextView jawsTextView = (IJAWSTextView)findView(JAWSTextView_ID);
if( null != jawsTextView ) {
jawsTextView.setSelection(outlineObject);
}
HighlightComposite.flashRectangle(outlineObject.getAccLocation());
}
}
finally {
releaseUpdateRef();
}
}
public static boolean showProperties(Object input) {
boolean rc = false;
IMSAAPropertiesView propertiesView = (IMSAAPropertiesView)findView(MSAAPropertiesView_ID);
if( null != propertiesView ) {
propertiesView.setInput(input);
rc = true;
}
IViewPart propertySheet = findView("org.eclipse.ui.views.PropertySheet"); //$NON-NLS-1$
if( propertySheet instanceof PropertySheet ) {
((PropertySheet)propertySheet).selectionChanged(null, new StructuredSelection(input));
rc = true;
}
return rc;
}
public static IViewReference findViewReference(String viewId) {
try {
IWorkbenchPage page = getActivePage();
if( null != page ) {
return page.findViewReference(viewId);
}
}
catch( Exception e ) {
e.printStackTrace();
}
return null;
}
public static IViewPart findView(String viewId) {
try {
IViewReference ref = findViewReference(viewId);
if( null != ref ) {
return ref.getView(false);
}
}
catch( Exception e ) {
e.printStackTrace();
}
return null;
}
public static IViewPart showView(String viewId, boolean activate) {
try {
IWorkbenchPage page = getActivePage();
if( null != page ) {
IViewPart part = page.findView(viewId);
if( null != part ) {
if( activate ) {
page.activate(part);
}
return part;
}
return page.showView(viewId,null,activate?IWorkbenchPage.VIEW_ACTIVATE:IWorkbenchPage.VIEW_CREATE);
}
}
catch( Exception e ) {
e.printStackTrace();
}
return null;
}
public static void hideView(String viewId) {
try {
IWorkbenchPage page = getActivePage();
if( null != page ) {
IViewPart part = page.findView(viewId);
if( null != part ) {
page.hideView(part);
}
}
}
catch( Exception e ) {
e.printStackTrace();
}
}
public static AccessibleObject getRootObject() {
if( null == rootObject &&
0 != (hwndRoot = TargetWindow.getRootWindow()) ) {
rootObject = AccessibleObjectFactory.getAccessibleObjectFromWindow(hwndRoot);
}
if( !partListening ) {
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addPartListener(partListener);
partListening = true;
}
catch( Exception e ) {
}
}
return rootObject;
}
public static void refreshRootObject() {
addUpdateRef();
HighlightComposite.updateSuppressCount(1);
try {
if( null != rootObject ) {
rootObject.reset();
rootObject = null;
}
IMSAAOutlineView outlineView = (IMSAAOutlineView)findView(MSAAOutlineView_ID);
if( null != outlineView ) {
outlineView.refresh();
}
IMSAAProblemsView problemsView = (IMSAAProblemsView)findView(MSAAProblemsView_ID);
if( null != problemsView ) {
problemsView.refresh();
}
IFlashDOMView flashDOMView = (IFlashDOMView)findView(FlashDOMView_ID);
if( null != flashDOMView ) {
flashDOMView.refresh();
}
IJAWSTextView jawsTextView = (IJAWSTextView)findView(JAWSTextView_ID);
if( null != jawsTextView ) {
jawsTextView.refresh();
}
outlineSelected(null);
}
finally {
HighlightComposite.updateSuppressCount(-1);
releaseUpdateRef();
}
}
public static AccessibleObject adjustSelection(Object selection) {
getRootObject();
if( selection instanceof AccessibleObject && selection != rootObject ) {
return (AccessibleObject)selection;
}
if( null != rootObject ) {
AccessibleObject rootChildlen[] = rootObject.getChildren();
if( null != rootChildlen && rootChildlen.length > 0 ) {
return rootChildlen[0];
}
}
return rootObject;
}
public static int addUpdateRef() {
return ++updateRef;
}
public static int releaseUpdateRef() {
return --updateRef;
}
public static int getUpdateRef() {
return updateRef;
}
private static IWorkbenchPage getActivePage() {
return PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
}
}