1*b1cdbd2cSJim Jagielski/************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski// MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski#include "precompiled_vcl.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski#include "aqua/salinst.h" 28*b1cdbd2cSJim Jagielski 29*b1cdbd2cSJim Jagielski#include "aqua11ywrappercombobox.h" 30*b1cdbd2cSJim Jagielski#include "aqua11yrolehelper.h" 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski#include <com/sun/star/accessibility/AccessibleStateType.hpp> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielskiusing namespace ::com::sun::star::accessibility; 35*b1cdbd2cSJim Jagielskiusing namespace ::com::sun::star::uno; 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski// Wrapper for AXCombobox role 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski@implementation AquaA11yWrapperComboBox : AquaA11yWrapper 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski#pragma mark - 42*b1cdbd2cSJim Jagielski#pragma mark Specialized Init Method 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski-(id)initWithAccessibleContext: (Reference < XAccessibleContext >) rxAccessibleContext { 45*b1cdbd2cSJim Jagielski self = [ super initWithAccessibleContext: rxAccessibleContext ]; 46*b1cdbd2cSJim Jagielski if ( self != nil ) 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski textArea = nil; 49*b1cdbd2cSJim Jagielski } 50*b1cdbd2cSJim Jagielski return self; 51*b1cdbd2cSJim Jagielski} 52*b1cdbd2cSJim Jagielski 53*b1cdbd2cSJim Jagielski#pragma mark - 54*b1cdbd2cSJim Jagielski#pragma mark Private Helper Method 55*b1cdbd2cSJim Jagielski 56*b1cdbd2cSJim Jagielski-(AquaA11yWrapper *)textArea { 57*b1cdbd2cSJim Jagielski // FIXME: May cause problems when stored. Then get dynamically each time (bad performance!) 58*b1cdbd2cSJim Jagielski if ( textArea == nil ) { 59*b1cdbd2cSJim Jagielski NSAutoreleasePool * pool = [ [ NSAutoreleasePool alloc ] init ]; 60*b1cdbd2cSJim Jagielski NSArray * elementChildren = [ super childrenAttribute ]; 61*b1cdbd2cSJim Jagielski if ( [ elementChildren count ] > 0 ) { 62*b1cdbd2cSJim Jagielski NSEnumerator * enumerator = [ elementChildren objectEnumerator ]; 63*b1cdbd2cSJim Jagielski id child; 64*b1cdbd2cSJim Jagielski while ( ( child = [ enumerator nextObject ] ) ) { 65*b1cdbd2cSJim Jagielski AquaA11yWrapper * element = ( AquaA11yWrapper * ) child; 66*b1cdbd2cSJim Jagielski if ( [ [ AquaA11yRoleHelper getNativeRoleFrom: [ element accessibleContext ] ] isEqualToString: NSAccessibilityTextAreaRole ] ) { 67*b1cdbd2cSJim Jagielski textArea = element; 68*b1cdbd2cSJim Jagielski break; 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski } 71*b1cdbd2cSJim Jagielski } 72*b1cdbd2cSJim Jagielski [ pool release ]; 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski return textArea; 75*b1cdbd2cSJim Jagielski} 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski#pragma mark - 78*b1cdbd2cSJim Jagielski#pragma mark Wrapped Attributes From Contained Text Area 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski-(id)valueAttribute { 81*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil ) { 82*b1cdbd2cSJim Jagielski return [ [ self textArea ] valueAttribute ]; 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski return @""; 85*b1cdbd2cSJim Jagielski} 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski-(id)numberOfCharactersAttribute { 88*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil ) { 89*b1cdbd2cSJim Jagielski return [ [ self textArea ] numberOfCharactersAttribute ]; 90*b1cdbd2cSJim Jagielski } 91*b1cdbd2cSJim Jagielski return [ NSNumber numberWithInt: 0 ]; 92*b1cdbd2cSJim Jagielski} 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski-(id)selectedTextAttribute { 95*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil ) { 96*b1cdbd2cSJim Jagielski return [ [ self textArea ] selectedTextAttribute ]; 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski return @""; 99*b1cdbd2cSJim Jagielski} 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski-(id)selectedTextRangeAttribute { 102*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil ) { 103*b1cdbd2cSJim Jagielski return [ [ self textArea ] selectedTextRangeAttribute ]; 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski return [ NSValue valueWithRange: NSMakeRange ( 0, 0 ) ]; 106*b1cdbd2cSJim Jagielski} 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski-(id)visibleCharacterRangeAttribute { 109*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil ) { 110*b1cdbd2cSJim Jagielski return [ [ self textArea ] visibleCharacterRangeAttribute ]; 111*b1cdbd2cSJim Jagielski } 112*b1cdbd2cSJim Jagielski return [ NSValue valueWithRange: NSMakeRange ( 0, 0 ) ]; 113*b1cdbd2cSJim Jagielski} 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski#pragma mark - 116*b1cdbd2cSJim Jagielski#pragma mark Accessibility Protocol 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski-(BOOL)accessibilityIsAttributeSettable:(NSString *)attribute { 119*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil && ( 120*b1cdbd2cSJim Jagielski [ attribute isEqualToString: NSAccessibilitySelectedTextAttribute ] 121*b1cdbd2cSJim Jagielski || [ attribute isEqualToString: NSAccessibilitySelectedTextRangeAttribute ] 122*b1cdbd2cSJim Jagielski || [ attribute isEqualToString: NSAccessibilityVisibleCharacterRangeAttribute ] ) ) { 123*b1cdbd2cSJim Jagielski return [ [ self textArea ] accessibilityIsAttributeSettable: attribute ]; 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski return [ super accessibilityIsAttributeSettable: attribute ]; 126*b1cdbd2cSJim Jagielski} 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski-(void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute { 129*b1cdbd2cSJim Jagielski if ( [ self textArea ] != nil && ( 130*b1cdbd2cSJim Jagielski [ attribute isEqualToString: NSAccessibilitySelectedTextAttribute ] 131*b1cdbd2cSJim Jagielski || [ attribute isEqualToString: NSAccessibilitySelectedTextRangeAttribute ] 132*b1cdbd2cSJim Jagielski || [ attribute isEqualToString: NSAccessibilityVisibleCharacterRangeAttribute ] ) ) { 133*b1cdbd2cSJim Jagielski return [ [ self textArea ] accessibilitySetValue: value forAttribute: attribute ]; 134*b1cdbd2cSJim Jagielski } 135*b1cdbd2cSJim Jagielski return [ super accessibilitySetValue: value forAttribute: attribute ]; 136*b1cdbd2cSJim Jagielski} 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski-(NSArray *)accessibilityAttributeNames { 139*b1cdbd2cSJim Jagielski // Default Attributes 140*b1cdbd2cSJim Jagielski NSMutableArray * attributeNames = [ NSMutableArray arrayWithArray: [ super accessibilityAttributeNames ] ]; 141*b1cdbd2cSJim Jagielski // Special Attributes and removing unwanted attributes depending on role 142*b1cdbd2cSJim Jagielski [ attributeNames removeObjectsInArray: [ NSArray arrayWithObjects: 143*b1cdbd2cSJim Jagielski NSAccessibilityTitleAttribute, 144*b1cdbd2cSJim Jagielski NSAccessibilityChildrenAttribute, 145*b1cdbd2cSJim Jagielski nil ] 146*b1cdbd2cSJim Jagielski ]; 147*b1cdbd2cSJim Jagielski [ attributeNames addObjectsFromArray: [ NSArray arrayWithObjects: 148*b1cdbd2cSJim Jagielski NSAccessibilityExpandedAttribute, 149*b1cdbd2cSJim Jagielski NSAccessibilityValueAttribute, 150*b1cdbd2cSJim Jagielski NSAccessibilityNumberOfCharactersAttribute, 151*b1cdbd2cSJim Jagielski NSAccessibilitySelectedTextAttribute, 152*b1cdbd2cSJim Jagielski NSAccessibilitySelectedTextRangeAttribute, 153*b1cdbd2cSJim Jagielski NSAccessibilityVisibleCharacterRangeAttribute, 154*b1cdbd2cSJim Jagielski nil ] 155*b1cdbd2cSJim Jagielski ]; 156*b1cdbd2cSJim Jagielski return attributeNames; 157*b1cdbd2cSJim Jagielski} 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski@end 160