/************************************************************** * * 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.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import com.sun.star.accessibility.AccessibleEventObject; import com.sun.star.accessibility.AccessibleEventId; import com.sun.star.accessibility.AccessibleStateType; import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.accessibility.XAccessibleStateSet; import org.openoffice.accessibility.misc.NameProvider; public class StateSetView extends ObjectView { /** Create a FocusView when the given object supports the XAccessibleComponent interface. */ static public ObjectView Create ( ObjectViewContainer aContainer, XAccessibleContext xContext) { ObjectView aView = null; if (xContext != null) aView = new StateSetView (aContainer); return aView; } public StateSetView (ObjectViewContainer aContainer) { super (aContainer); setPreferredSize (new Dimension(300,110)); setMinimumSize (new Dimension(200,80)); } public String GetTitle () { return ("StateSet"); } public void notifyEvent (AccessibleEventObject aEvent) { if (aEvent.EventId == AccessibleEventId.STATE_CHANGED) Update(); } public void Update () { repaint (); } public void paintChildren (Graphics g) { if (g != null) synchronized (g) { super.paintChildren (g); // Calculcate the are inside the border. Insets aInsets = getInsets (); Dimension aSize = getSize(); Rectangle aWidgetArea = new Rectangle ( aInsets.left, aInsets.top, aSize.width-aInsets.left-aInsets.right, aSize.height-aInsets.top-aInsets.bottom); PaintAllStates ((Graphics2D)g, aWidgetArea); } } private void PaintAllStates (Graphics2D g, Rectangle aWidgetArea) { Color aTextColor = g.getColor(); g.setRenderingHint ( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); XAccessibleStateSet xStateSet = ( mxContext != null ) ? mxContext.getAccessibleStateSet() : null; if (xStateSet != null) { short aStates[] = xStateSet.getStates (); final int nMaxStateIndex = AccessibleStateType.VISIBLE;//MANAGES_DESCENDANTS; int nStateWidth = (aWidgetArea.width-12) / (nMaxStateIndex+1); AffineTransform aTransform = g.getTransform (); g.setColor (aTextColor); int y = aWidgetArea.y+aWidgetArea.height - 25; double nTextRotation = -0.9;//-java.lang.Math.PI/2; double nScale = 0.6; // Create a shape for the boxes. int nBoxWidth = 8; Rectangle aCheckBox = new Rectangle (-nBoxWidth/2,0,nBoxWidth,nBoxWidth); // For each state draw a box, fill it appropriately, and draw // thre states name. for (short i=0; i<=nMaxStateIndex; i++) { int x = nStateWidth + i * nStateWidth; String sStateName = NameProvider.getStateName (i); if (sStateName == null) sStateName = new String (""); boolean bStateSet = xStateSet.contains (i); g.setTransform (aTransform); g.translate (x,y); if (bStateSet) { switch (i) { case AccessibleStateType.INVALID: case AccessibleStateType.DEFUNC: g.setColor (saInvalidColor); break; case AccessibleStateType.FOCUSED: g.setColor (saFocusColor); break; case AccessibleStateType.SELECTED: g.setColor (saSelectionColor); break; case AccessibleStateType.EDITABLE: g.setColor (saEditColor); break; default: g.setColor (saDefaultColor); break; } g.fill (aCheckBox); g.setColor (aTextColor); } g.draw (aCheckBox); g.rotate (nTextRotation); g.scale (nScale, nScale); g.translate (2,-2); g.drawString (sStateName, 0,0); } // Draw string of set states. String sStates = new String (); for (int i=0; i 0) sStates = sStates + ", "; sStates = sStates + NameProvider.getStateName(aStates[i]); } g.setTransform (aTransform); g.translate (10,aWidgetArea.y+aWidgetArea.height-3); g.scale (0.9,0.9); g.drawString (sStates,0,0); } } static private Color saInvalidColor = new Color (255,0,255), saFocusColor = new Color (100,100,255), saSelectionColor = Color.GREEN, saDefaultColor = new Color (90,90,90), saEditColor = new Color (240,240,0); }