xref: /trunk/main/accessibility/workben/org/openoffice/accessibility/awb/view/ComponentView.java (revision 3309286857f19787ae62bd793a98b5af4edd2ad3)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.accessibility.awb.view;
25 
26 import java.awt.Color;
27 import java.awt.Dimension;
28 
29 import java.awt.event.ActionListener;
30 import java.awt.event.ActionEvent;
31 
32 import javax.swing.JLabel;
33 
34 import com.sun.star.accessibility.AccessibleEventId;
35 import com.sun.star.accessibility.AccessibleEventObject;
36 import com.sun.star.accessibility.XAccessible;
37 import com.sun.star.accessibility.XAccessibleComponent;
38 import com.sun.star.accessibility.XAccessibleContext;
39 import com.sun.star.uno.UnoRuntime;
40 
41 import org.openoffice.accessibility.misc.NameProvider;
42 
43 /** The <type>ContextView</type> class displays information accessible over
44     the <type>XAccessibleContext</type> interface.  This includes name,
45     description, and role.
46 */
47 public class ComponentView
48     extends ObjectView
49 {
Create( ObjectViewContainer aContainer, XAccessibleContext xContext)50     static public ObjectView Create (
51         ObjectViewContainer aContainer,
52         XAccessibleContext xContext)
53     {
54         if (UnoRuntime.queryInterface(
55             XAccessibleComponent.class, xContext) != null)
56             return new ComponentView (aContainer);
57         else
58             return null;
59     }
60 
ComponentView(ObjectViewContainer aContainer)61     public ComponentView (ObjectViewContainer aContainer)
62     {
63         super (aContainer);
64 
65         ViewGridLayout aLayout = new ViewGridLayout (this);
66 
67         maRelativeLocationLabel = aLayout.AddLabeledEntry ("Relative Location: ");
68         maAbsoluteLocationLabel = aLayout.AddLabeledEntry ("Location on Screen: ");
69         maSizeLabel = aLayout.AddLabeledEntry ("Size");
70         maBoundingBoxLabel = aLayout.AddLabeledEntry ("Bounding Box: ");
71         maConsistencyLabel = aLayout.AddLabeledEntry ("Consistent: ");
72         maForegroundColorLabel = aLayout.AddLabeledEntry ("Foreground Color: ");
73         maBackgroundColorLabel = aLayout.AddLabeledEntry ("Background Color: ");
74     }
75 
76 
SetObject(XAccessibleContext xContext)77     public void SetObject (XAccessibleContext xContext)
78     {
79         mxComponent = (XAccessibleComponent)UnoRuntime.queryInterface(
80             XAccessibleComponent.class, xContext);
81         super.SetObject (xContext);
82     }
83 
Update()84     public void Update ()
85     {
86         if (mxContext == null)
87         {
88             maRelativeLocationLabel.setText ("<null object>");
89             maAbsoluteLocationLabel.setText ("<null object>");
90             maSizeLabel.setText ("<null object>");
91             maBoundingBoxLabel.setText ("<null object>");
92             maConsistencyLabel.setText ("<null object>");
93             maForegroundColorLabel.setText ("<null object>");
94             maBackgroundColorLabel.setText ("<null object>");
95         }
96         else
97         {
98             com.sun.star.awt.Point aLocation = mxComponent.getLocation();
99             maRelativeLocationLabel.setText (
100                 aLocation.X + ", " + aLocation.Y);
101             com.sun.star.awt.Point aLocationOnScreen =
102                 mxComponent.getLocationOnScreen();
103             maAbsoluteLocationLabel.setText (
104                 aLocationOnScreen.X + ", " + aLocationOnScreen.Y);
105             com.sun.star.awt.Size aSize = mxComponent.getSize();
106             maSizeLabel.setText (
107                 aSize.Width + ", " + aSize.Height);
108             com.sun.star.awt.Rectangle aBBox = mxComponent.getBounds();
109             maBoundingBoxLabel.setText (
110                 aBBox.X + ", " + aBBox.Y + ","
111                 + aBBox.Width + ", " + aBBox.Height);
112             int nColor = mxComponent.getForeground();
113             maForegroundColorLabel.setText (
114                 "R"+ (nColor>>16&0xff)
115                 + "G" + (nColor>>8&0xff)
116                 + "B" + (nColor>>0&0xff)
117                 + "A" + (nColor>>24&0xff));
118             nColor = mxComponent.getBackground();
119             maBackgroundColorLabel.setText (
120                 "R"+ (nColor>>16&0xff)
121                 + "G" + (nColor>>8&0xff)
122                 + "B" + (nColor>>0&0xff)
123                 + "A" + (nColor>>24&0xff));
124 
125             // Check consistency of coordinates.
126             String sConsistency = new String ();
127             if (aBBox.X!=aLocation.X || aBBox.Y!=aLocation.Y)
128                 sConsistency += (sConsistency.length()!=0?", ":"") +
129                     "Bounding box conflicts with relative location";
130             if (aBBox.Width!=aSize.Width || aBBox.Height!=aSize.Height)
131                 sConsistency += (sConsistency.length()!=0?", ":"") +
132                     "Bounding box conflicts with size";
133             XAccessible xParent = mxContext.getAccessibleParent();
134             XAccessibleComponent xParentComponent =
135                 (XAccessibleComponent)UnoRuntime.queryInterface(
136                     XAccessibleComponent.class, xParent);
137             if (xParentComponent == null)
138             {
139                 if (aLocation.X != aLocationOnScreen.X
140                     || aLocation.Y != aLocationOnScreen.Y)
141                     sConsistency += (sConsistency.length()!=0?", ":"") +
142                         "location on screen does not equal "
143                         + "relative location without parent";
144             }
145             else
146             {
147                 com.sun.star.awt.Point aParentLocationOnScreen =
148                     xParentComponent.getLocationOnScreen();
149                 if (aLocation.X+aParentLocationOnScreen.X
150                     != aLocationOnScreen.X
151                     || aLocation.Y+aParentLocationOnScreen.Y
152                     != aLocationOnScreen.Y)
153                     sConsistency += (sConsistency.length()!=0?", ":"") +
154                         "location on screen does not match "
155                         + "relative location";
156             }
157             if (sConsistency.length() == 0)
158                 sConsistency += "yes";
159             else
160                 maConsistencyLabel.setBackground (GetContainer().GetErrorColor());
161             maConsistencyLabel.setText (sConsistency);
162         }
163     }
164 
GetTitle()165     public String GetTitle ()
166     {
167         return ("Component");
168     }
169 
170     /** Listen for changes regarding displayed values.
171     */
notifyEvent(AccessibleEventObject aEvent)172     public void notifyEvent (AccessibleEventObject aEvent)
173     {
174         switch (aEvent.EventId)
175         {
176             case AccessibleEventId.BOUNDRECT_CHANGED :
177             case AccessibleEventId.VISIBLE_DATA_CHANGED :
178                 Update ();
179         }
180     }
181 
182     private XAccessibleComponent mxComponent;
183     private JLabel
184         maRelativeLocationLabel,
185         maAbsoluteLocationLabel,
186         maSizeLabel,
187         maBoundingBoxLabel,
188         maConsistencyLabel,
189         maForegroundColorLabel,
190         maBackgroundColorLabel;
191 }
192