/************************************************************** * * 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.awb.view; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JLabel; import com.sun.star.accessibility.AccessibleEventId; import com.sun.star.accessibility.AccessibleEventObject; import com.sun.star.accessibility.XAccessible; import com.sun.star.accessibility.XAccessibleComponent; import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.uno.UnoRuntime; import org.openoffice.accessibility.misc.NameProvider; /** The ContextView class displays information accessible over the XAccessibleContext interface. This includes name, description, and role. */ public class ComponentView extends ObjectView { static public ObjectView Create ( ObjectViewContainer aContainer, XAccessibleContext xContext) { if (UnoRuntime.queryInterface( XAccessibleComponent.class, xContext) != null) return new ComponentView (aContainer); else return null; } public ComponentView (ObjectViewContainer aContainer) { super (aContainer); ViewGridLayout aLayout = new ViewGridLayout (this); maRelativeLocationLabel = aLayout.AddLabeledEntry ("Relative Location: "); maAbsoluteLocationLabel = aLayout.AddLabeledEntry ("Location on Screen: "); maSizeLabel = aLayout.AddLabeledEntry ("Size"); maBoundingBoxLabel = aLayout.AddLabeledEntry ("Bounding Box: "); maConsistencyLabel = aLayout.AddLabeledEntry ("Consistent: "); maForegroundColorLabel = aLayout.AddLabeledEntry ("Foreground Color: "); maBackgroundColorLabel = aLayout.AddLabeledEntry ("Background Color: "); } public void SetObject (XAccessibleContext xContext) { mxComponent = (XAccessibleComponent)UnoRuntime.queryInterface( XAccessibleComponent.class, xContext); super.SetObject (xContext); } public void Update () { if (mxContext == null) { maRelativeLocationLabel.setText (""); maAbsoluteLocationLabel.setText (""); maSizeLabel.setText (""); maBoundingBoxLabel.setText (""); maConsistencyLabel.setText (""); maForegroundColorLabel.setText (""); maBackgroundColorLabel.setText (""); } else { com.sun.star.awt.Point aLocation = mxComponent.getLocation(); maRelativeLocationLabel.setText ( aLocation.X + ", " + aLocation.Y); com.sun.star.awt.Point aLocationOnScreen = mxComponent.getLocationOnScreen(); maAbsoluteLocationLabel.setText ( aLocationOnScreen.X + ", " + aLocationOnScreen.Y); com.sun.star.awt.Size aSize = mxComponent.getSize(); maSizeLabel.setText ( aSize.Width + ", " + aSize.Height); com.sun.star.awt.Rectangle aBBox = mxComponent.getBounds(); maBoundingBoxLabel.setText ( aBBox.X + ", " + aBBox.Y + "," + aBBox.Width + ", " + aBBox.Height); int nColor = mxComponent.getForeground(); maForegroundColorLabel.setText ( "R"+ (nColor>>16&0xff) + "G" + (nColor>>8&0xff) + "B" + (nColor>>0&0xff) + "A" + (nColor>>24&0xff)); nColor = mxComponent.getBackground(); maBackgroundColorLabel.setText ( "R"+ (nColor>>16&0xff) + "G" + (nColor>>8&0xff) + "B" + (nColor>>0&0xff) + "A" + (nColor>>24&0xff)); // Check consistency of coordinates. String sConsistency = new String (); if (aBBox.X!=aLocation.X || aBBox.Y!=aLocation.Y) sConsistency += (sConsistency.length()!=0?", ":"") + "Bounding box conflicts with relative location"; if (aBBox.Width!=aSize.Width || aBBox.Height!=aSize.Height) sConsistency += (sConsistency.length()!=0?", ":"") + "Bounding box conflicts with size"; XAccessible xParent = mxContext.getAccessibleParent(); XAccessibleComponent xParentComponent = (XAccessibleComponent)UnoRuntime.queryInterface( XAccessibleComponent.class, xParent); if (xParentComponent == null) { if (aLocation.X != aLocationOnScreen.X || aLocation.Y != aLocationOnScreen.Y) sConsistency += (sConsistency.length()!=0?", ":"") + "location on screen does not equal " + "relative location without parent"; } else { com.sun.star.awt.Point aParentLocationOnScreen = xParentComponent.getLocationOnScreen(); if (aLocation.X+aParentLocationOnScreen.X != aLocationOnScreen.X || aLocation.Y+aParentLocationOnScreen.Y != aLocationOnScreen.Y) sConsistency += (sConsistency.length()!=0?", ":"") + "location on screen does not match " + "relative location"; } if (sConsistency.length() == 0) sConsistency += "yes"; else maConsistencyLabel.setBackground (GetContainer().GetErrorColor()); maConsistencyLabel.setText (sConsistency); } } public String GetTitle () { return ("Component"); } /** Listen for changes regarding displayed values. */ public void notifyEvent (AccessibleEventObject aEvent) { switch (aEvent.EventId) { case AccessibleEventId.BOUNDRECT_CHANGED : case AccessibleEventId.VISIBLE_DATA_CHANGED : Update (); } } private XAccessibleComponent mxComponent; private JLabel maRelativeLocationLabel, maAbsoluteLocationLabel, maSizeLabel, maBoundingBoxLabel, maConsistencyLabel, maForegroundColorLabel, maBackgroundColorLabel; }