merge the formfield patch from ooo-build
[ooovba.git] / vcl / unx / gtk / a11y / atkselection.cxx
blob9fe6568a02ffd8b7f721b49e757af3d5a2d5cc51
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: atkselection.cxx,v $
10 * $Revision: 1.4 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_vcl.hxx"
34 #include "atkwrapper.hxx"
36 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
38 #include <stdio.h>
40 using namespace ::com::sun::star;
42 static accessibility::XAccessibleSelection*
43 getSelection( AtkSelection *pSelection ) throw (uno::RuntimeException)
45 AtkObjectWrapper *pWrap = ATK_OBJECT_WRAPPER( pSelection );
46 if( pWrap )
48 if( !pWrap->mpSelection && pWrap->mpContext )
50 uno::Any any = pWrap->mpContext->queryInterface( accessibility::XAccessibleSelection::static_type(NULL) );
51 pWrap->mpSelection = reinterpret_cast< accessibility::XAccessibleSelection * > (any.pReserved);
52 pWrap->mpSelection->acquire();
55 return pWrap->mpSelection;
58 return NULL;
61 extern "C" {
63 static gboolean
64 selection_add_selection( AtkSelection *selection,
65 gint i )
67 try {
68 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
69 if( pSelection )
71 pSelection->selectAccessibleChild( i );
72 return TRUE;
75 catch(const uno::Exception& e) {
76 g_warning( "Exception in selectAccessibleChild()" );
79 return FALSE;
82 static gboolean
83 selection_clear_selection( AtkSelection *selection )
85 try {
86 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
87 if( pSelection )
89 pSelection->clearAccessibleSelection();
90 return TRUE;
93 catch(const uno::Exception& e) {
94 g_warning( "Exception in selectAccessibleChild()" );
97 return FALSE;
100 static AtkObject*
101 selection_ref_selection( AtkSelection *selection,
102 gint i )
104 try {
105 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
106 if( pSelection )
107 return atk_object_wrapper_ref( pSelection->getSelectedAccessibleChild( i ) );
109 catch(const uno::Exception& e) {
110 g_warning( "Exception in getSelectedAccessibleChild()" );
113 return NULL;
116 static gint
117 selection_get_selection_count( AtkSelection *selection)
119 try {
120 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
121 if( pSelection )
122 return pSelection->getSelectedAccessibleChildCount();
124 catch(const uno::Exception& e) {
125 g_warning( "Exception in getSelectedAccessibleChildCount()" );
128 return -1;
131 static gboolean
132 selection_is_child_selected( AtkSelection *selection,
133 gint i)
135 try {
136 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
137 if( pSelection )
138 return pSelection->isAccessibleChildSelected( i );
140 catch(const uno::Exception& e) {
141 g_warning( "Exception in getSelectedAccessibleChildCount()" );
144 return FALSE;
147 static gboolean
148 selection_remove_selection( AtkSelection *selection,
149 gint i )
151 try {
152 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
153 if( pSelection )
155 pSelection->deselectAccessibleChild( i );
156 return TRUE;
159 catch(const uno::Exception& e) {
160 g_warning( "Exception in getSelectedAccessibleChildCount()" );
163 return FALSE;
166 static gboolean
167 selection_select_all_selection( AtkSelection *selection)
169 try {
170 accessibility::XAccessibleSelection* pSelection = getSelection( selection );
171 if( pSelection )
173 pSelection->selectAllAccessibleChildren();
174 return TRUE;
177 catch(const uno::Exception& e) {
178 g_warning( "Exception in getSelectedAccessibleChildCount()" );
181 return FALSE;
184 } // extern "C"
186 void
187 selectionIfaceInit( AtkSelectionIface *iface)
189 g_return_if_fail (iface != NULL);
191 iface->add_selection = selection_add_selection;
192 iface->clear_selection = selection_clear_selection;
193 iface->ref_selection = selection_ref_selection;
194 iface->get_selection_count = selection_get_selection_count;
195 iface->is_child_selected = selection_is_child_selected;
196 iface->remove_selection = selection_remove_selection;
197 iface->select_all_selection = selection_select_all_selection;