blob: 043070f513d7883b53da789e54cb6f5a164b0168 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.accessibility;
import org.openoffice.java.accessibility.*;
/**
*
*/
public class PopupWindow extends java.awt.Window {
javax.accessibility.AccessibleContext accessibleContext = null;
ContainerProxy layeredPane = new ContainerProxy(javax.accessibility.AccessibleRole.LAYERED_PANE);
ContainerProxy rootPane = new ContainerProxy(javax.accessibility.AccessibleRole.ROOT_PANE);
ContainerProxy popupLayer = new ContainerProxy(javax.accessibility.AccessibleRole.PANEL);
boolean opened = false;
boolean visible = false;
/** Creates a new instance of PopupWindow */
public PopupWindow(java.awt.Window owner) {
super(owner);
super.add(rootPane);
rootPane.add(layeredPane);
javax.accessibility.AccessibleContext ac = rootPane.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(this);
}
}
static PopupWindow create(
com.sun.star.accessibility.XAccessible xAccessible) {
java.awt.Window parent = java.awt.KeyboardFocusManager.getCurrentKeyboardFocusManager()
.getActiveWindow();
if (parent != null) {
PopupWindow w = new PopupWindow(parent);
w.setVisible(true);
AccessibleObjectFactory.invokeAndWait();
AccessibleObjectFactory.addChild(w, xAccessible);
return w;
}
return null;
}
public boolean isShowing() {
if (isVisible()) {
java.awt.Container parent = getParent();
return (parent == null) || parent.isShowing();
}
return false;
}
public void addNotify() {
}
public void removeNotify() {
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean b) {
if (visible != b) {
visible = b;
if (b) {
// If it is the first show, fire WINDOW_OPENED event
if (!opened) {
AccessibleObjectFactory.postWindowOpened(this);
opened = true;
}
}
}
}
public java.awt.Component add(java.awt.Component c) {
popupLayer.add(c);
layeredPane.add(popupLayer);
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.AccessibleContext ac = layeredPane.getAccessibleContext();
if (ac != null) {
ac.firePropertyChange(ac.ACCESSIBLE_CHILD_PROPERTY, null,
popupLayer.getAccessibleContext());
}
}
return c;
}
public void remove(java.awt.Component c) {
layeredPane.remove(popupLayer);
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.AccessibleContext ac = layeredPane.getAccessibleContext();
if (ac != null) {
ac.firePropertyChange(ac.ACCESSIBLE_CHILD_PROPERTY,
popupLayer.getAccessibleContext(), null);
}
}
popupLayer.remove(c);
}
public void dispose() {
setVisible(false);
AccessibleObjectFactory.postWindowClosed(this);
}
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessiblePopupWindow();
}
return accessibleContext;
}
protected class AccessiblePopupWindow
extends java.awt.Window.AccessibleAWTWindow {
AccessiblePopupWindow() {
}
}
protected class ContainerProxy extends java.awt.Container
implements javax.accessibility.Accessible {
javax.accessibility.AccessibleContext accessibleContext = null;
javax.accessibility.AccessibleRole role;
protected ContainerProxy(javax.accessibility.AccessibleRole role) {
this.role = role;
}
public java.awt.Component add(java.awt.Component c) {
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.Accessible a = (javax.accessibility.Accessible) c;
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(this);
}
}
return super.add(c);
}
public void remove(java.awt.Component c) {
if (c instanceof javax.accessibility.Accessible) {
javax.accessibility.Accessible a = (javax.accessibility.Accessible) c;
javax.accessibility.AccessibleContext ac = a.getAccessibleContext();
if (ac != null) {
ac.setAccessibleParent(null);
}
}
super.remove(c);
}
public javax.accessibility.AccessibleContext getAccessibleContext() {
if (accessibleContext == null) {
accessibleContext = new AccessibleContainerProxy();
}
return accessibleContext;
}
private class AccessibleContainerProxy
extends java.awt.Container.AccessibleAWTContainer {
AccessibleContainerProxy() {
}
public javax.accessibility.AccessibleRole getAccessibleRole() {
return ContainerProxy.this.role;
}
}
}
}