LibreOffice Module toolkit (master) 1
treecontrol.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20
21#include "treecontrol.hxx"
22
23#include <com/sun/star/awt/tree/XTreeControl.hpp>
24#include <com/sun/star/awt/tree/XTreeDataModel.hpp>
25#include <com/sun/star/uno/XComponentContext.hpp>
26#include <com/sun/star/view/SelectionType.hpp>
28#include <helper/property.hxx>
29#include <osl/diagnose.h>
31
33
34using namespace ::com::sun::star;
35using namespace ::com::sun::star::uno;
36using namespace ::com::sun::star::awt;
37using namespace ::com::sun::star::awt::tree;
38using namespace ::com::sun::star::lang;
39using namespace ::com::sun::star::beans;
40using namespace ::com::sun::star::container;
41using namespace ::com::sun::star::view;
42
43namespace toolkit
44{
45
46
47UnoTreeModel::UnoTreeModel( const css::uno::Reference< css::uno::XComponentContext >& i_factory )
48 :UnoControlModel( i_factory )
49{
70}
71
73{
74 return new UnoTreeModel( *this );
75}
76
78{
79 return "com.sun.star.awt.tree.TreeControlModel";
80}
81
82Any UnoTreeModel::ImplGetDefaultValue( sal_uInt16 nPropId ) const
83{
84 switch( nPropId )
85 {
87 return Any( SelectionType_NONE );
89 return Any( sal_Int32( 0 ) );
91 return Any( Reference< XTreeDataModel >( nullptr ) );
94 return Any( false );
98 return Any( true );
100 return uno::Any( OUString( "com.sun.star.awt.tree.TreeControl" ) );
101 default:
102 return UnoControlModel::ImplGetDefaultValue( nPropId );
103 }
104}
105
107{
109 return aHelper;
110}
111
112// XMultiPropertySet
113Reference< XPropertySetInfo > UnoTreeModel::getPropertySetInfo( )
114{
115 static Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
116 return xInfo;
117}
118
119}
120
121namespace {
122
123typedef ::cppu::AggImplInheritanceHelper1< UnoControlBase, css::awt::tree::XTreeControl > UnoTreeControl_Base;
124class UnoTreeControl : public UnoTreeControl_Base
125{
126public:
127 UnoTreeControl();
128 OUString GetComponentServiceName() const override;
129
130 // css::lang::XComponent
131 void SAL_CALL dispose( ) override;
132
133 // css::awt::XControl
134 void SAL_CALL createPeer( const css::uno::Reference< css::awt::XToolkit >& Toolkit, const css::uno::Reference< css::awt::XWindowPeer >& Parent ) override;
135
136 // css::view::XSelectionSupplier
137 virtual sal_Bool SAL_CALL select( const css::uno::Any& xSelection ) override;
138 virtual css::uno::Any SAL_CALL getSelection( ) override;
139 virtual void SAL_CALL addSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override;
140 virtual void SAL_CALL removeSelectionChangeListener( const css::uno::Reference< css::view::XSelectionChangeListener >& xListener ) override;
141
142 // css::view::XMultiSelectionSupplier
143 virtual sal_Bool SAL_CALL addSelection( const css::uno::Any& Selection ) override;
144 virtual void SAL_CALL removeSelection( const css::uno::Any& Selection ) override;
145 virtual void SAL_CALL clearSelection( ) override;
146 virtual ::sal_Int32 SAL_CALL getSelectionCount( ) override;
147 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createSelectionEnumeration( ) override;
148 virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createReverseSelectionEnumeration( ) override;
149
150 // css::awt::XTreeControl
151 virtual OUString SAL_CALL getDefaultExpandedGraphicURL() override;
152 virtual void SAL_CALL setDefaultExpandedGraphicURL( const OUString& _defaultexpandedgraphicurl ) override;
153 virtual OUString SAL_CALL getDefaultCollapsedGraphicURL() override;
154 virtual void SAL_CALL setDefaultCollapsedGraphicURL( const OUString& _defaultcollapsedgraphicurl ) override;
155 virtual sal_Bool SAL_CALL isNodeExpanded( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
156 virtual sal_Bool SAL_CALL isNodeCollapsed( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
157 virtual void SAL_CALL makeNodeVisible( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
158 virtual sal_Bool SAL_CALL isNodeVisible( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
159 virtual void SAL_CALL expandNode( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
160 virtual void SAL_CALL collapseNode( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
161 virtual void SAL_CALL addTreeExpansionListener( const css::uno::Reference< css::awt::tree::XTreeExpansionListener >& Listener ) override;
162 virtual void SAL_CALL removeTreeExpansionListener( const css::uno::Reference< css::awt::tree::XTreeExpansionListener >& Listener ) override;
163 virtual css::uno::Reference< css::awt::tree::XTreeNode > SAL_CALL getNodeForLocation( ::sal_Int32 x, ::sal_Int32 y ) override;
164 virtual css::uno::Reference< css::awt::tree::XTreeNode > SAL_CALL getClosestNodeForLocation( ::sal_Int32 x, ::sal_Int32 y ) override;
165 virtual css::awt::Rectangle SAL_CALL getNodeRect( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
166 virtual sal_Bool SAL_CALL isEditing( ) override;
167 virtual sal_Bool SAL_CALL stopEditing( ) override;
168 virtual void SAL_CALL cancelEditing( ) override;
169 virtual void SAL_CALL startEditingAtNode( const css::uno::Reference< css::awt::tree::XTreeNode >& Node ) override;
170 virtual void SAL_CALL addTreeEditListener( const css::uno::Reference< css::awt::tree::XTreeEditListener >& Listener ) override;
171 virtual void SAL_CALL removeTreeEditListener( const css::uno::Reference< css::awt::tree::XTreeEditListener >& Listener ) override;
172
173 // css::lang::XServiceInfo
174 DECLIMPL_SERVICEINFO_DERIVED( UnoTreeControl, UnoControlBase, "com.sun.star.awt.tree.TreeControl" )
175
176 using UnoControl::getPeer;
177private:
178 TreeSelectionListenerMultiplexer maSelectionListeners;
179 TreeExpansionListenerMultiplexer maTreeExpansionListeners;
180 TreeEditListenerMultiplexer maTreeEditListeners;
181};
182
183UnoTreeControl::UnoTreeControl()
184: maSelectionListeners( *this )
185, maTreeExpansionListeners( *this )
186, maTreeEditListeners( *this )
187{
188}
189
190OUString UnoTreeControl::GetComponentServiceName() const
191{
192 return "Tree";
193}
194
195
196// css::view::XSelectionSupplier
197
198
199sal_Bool SAL_CALL UnoTreeControl::select( const Any& rSelection )
200{
201 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->select( rSelection );
202}
203
204
205Any SAL_CALL UnoTreeControl::getSelection()
206{
207 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getSelection();
208}
209
210
211void SAL_CALL UnoTreeControl::addSelectionChangeListener( const Reference< XSelectionChangeListener >& xListener )
212{
213 maSelectionListeners.addInterface( xListener );
214 if( getPeer().is() && (maSelectionListeners.getLength() == 1) )
215 {
216 // maSelectionListeners acts as a proxy,
217 // add it to the peer if this is the first listener added to that proxy
218 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->addSelectionChangeListener(&maSelectionListeners);
219 }
220}
221
222
223void SAL_CALL UnoTreeControl::removeSelectionChangeListener( const Reference< XSelectionChangeListener >& xListener )
224{
225 if( getPeer().is() && (maSelectionListeners.getLength() == 1) )
226 {
227 // maSelectionListeners acts as a proxy,
228 // remove it from the peer if this is the last listener removed from that proxy
229 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->removeSelectionChangeListener(&maSelectionListeners);
230 }
231 maSelectionListeners.removeInterface( xListener );
232}
233
234
235// css::view::XMultiSelectionSupplier
236
237
238sal_Bool SAL_CALL UnoTreeControl::addSelection( const Any& rSelection )
239{
240 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->addSelection(rSelection);
241}
242
243
244void SAL_CALL UnoTreeControl::removeSelection( const Any& rSelection )
245{
246 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->removeSelection(rSelection);
247}
248
249
250void SAL_CALL UnoTreeControl::clearSelection()
251{
252 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->clearSelection();
253}
254
255
256sal_Int32 SAL_CALL UnoTreeControl::getSelectionCount()
257{
258 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getSelectionCount();
259}
260
261
262Reference< XEnumeration > SAL_CALL UnoTreeControl::createSelectionEnumeration()
263{
264 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->createSelectionEnumeration();
265}
266
267
268Reference< XEnumeration > SAL_CALL UnoTreeControl::createReverseSelectionEnumeration()
269{
270 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->createReverseSelectionEnumeration();
271}
272
273
274// XTreeControl
275
276
277OUString SAL_CALL UnoTreeControl::getDefaultExpandedGraphicURL()
278{
279 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getDefaultExpandedGraphicURL();
280}
281
282
283void SAL_CALL UnoTreeControl::setDefaultExpandedGraphicURL( const OUString& _defaultexpansiongraphicurl )
284{
285 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->setDefaultExpandedGraphicURL(_defaultexpansiongraphicurl);
286}
287
288
289OUString SAL_CALL UnoTreeControl::getDefaultCollapsedGraphicURL()
290{
291 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getDefaultCollapsedGraphicURL();
292}
293
294
295void SAL_CALL UnoTreeControl::setDefaultCollapsedGraphicURL( const OUString& _defaultcollapsedgraphicurl )
296{
297 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->setDefaultCollapsedGraphicURL(_defaultcollapsedgraphicurl);
298}
299
300
301sal_Bool SAL_CALL UnoTreeControl::isNodeExpanded( const Reference< XTreeNode >& xNode )
302{
303 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->isNodeExpanded(xNode);
304}
305
306
307sal_Bool SAL_CALL UnoTreeControl::isNodeCollapsed( const Reference< XTreeNode >& xNode )
308{
309 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->isNodeCollapsed(xNode);
310}
311
312
313void SAL_CALL UnoTreeControl::makeNodeVisible( const Reference< XTreeNode >& xNode )
314{
315 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->makeNodeVisible(xNode);
316}
317
318
319sal_Bool SAL_CALL UnoTreeControl::isNodeVisible( const Reference< XTreeNode >& xNode )
320{
321 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->isNodeVisible(xNode);
322}
323
324
325void SAL_CALL UnoTreeControl::expandNode( const Reference< XTreeNode >& xNode )
326{
327 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->expandNode(xNode);
328}
329
330
331void SAL_CALL UnoTreeControl::collapseNode( const Reference< XTreeNode >& xNode )
332{
333 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->collapseNode(xNode);
334}
335
336
337void SAL_CALL UnoTreeControl::addTreeExpansionListener( const Reference< XTreeExpansionListener >& xListener )
338{
339 maTreeExpansionListeners.addInterface( xListener );
340 if( getPeer().is() && (maTreeExpansionListeners.getLength() == 1) )
341 {
342 // maSelectionListeners acts as a proxy,
343 // add it to the peer if this is the first listener added to that proxy
344 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->addTreeExpansionListener(&maTreeExpansionListeners);
345 }
346}
347
348
349void SAL_CALL UnoTreeControl::removeTreeExpansionListener( const Reference< XTreeExpansionListener >& xListener )
350{
351 if( getPeer().is() && (maTreeExpansionListeners.getLength() == 1) )
352 {
353 // maSelectionListeners acts as a proxy,
354 // remove it from the peer if this is the last listener removed from that proxy
355 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->removeTreeExpansionListener(&maTreeExpansionListeners);
356 }
357 maTreeExpansionListeners.removeInterface( xListener );
358}
359
360
361Reference< XTreeNode > SAL_CALL UnoTreeControl::getNodeForLocation( sal_Int32 x, sal_Int32 y )
362{
363 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getNodeForLocation(x,y);
364}
365
366
367Reference< XTreeNode > SAL_CALL UnoTreeControl::getClosestNodeForLocation( sal_Int32 x, sal_Int32 y )
368{
369 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getClosestNodeForLocation(x,y);
370}
371
372
373awt::Rectangle SAL_CALL UnoTreeControl::getNodeRect( const Reference< XTreeNode >& Node )
374{
375 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->getNodeRect( Node );
376}
377
378
379sal_Bool SAL_CALL UnoTreeControl::isEditing( )
380{
381 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->isEditing();
382}
383
384
385sal_Bool SAL_CALL UnoTreeControl::stopEditing()
386{
387 return Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->stopEditing();
388}
389
390
391void SAL_CALL UnoTreeControl::cancelEditing()
392{
393 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->cancelEditing();
394}
395
396
397void SAL_CALL UnoTreeControl::startEditingAtNode( const Reference< XTreeNode >& xNode )
398{
399 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->startEditingAtNode(xNode);
400}
401
402
403void SAL_CALL UnoTreeControl::addTreeEditListener( const Reference< XTreeEditListener >& xListener )
404{
405 maTreeEditListeners.addInterface( xListener );
406 if( getPeer().is() && (maTreeEditListeners.getLength() == 1) )
407 {
408 // maSelectionListeners acts as a proxy,
409 // add it to the peer if this is the first listener added to that proxy
410 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->addTreeEditListener(&maTreeEditListeners);
411 }
412}
413
414
415void SAL_CALL UnoTreeControl::removeTreeEditListener( const Reference< XTreeEditListener >& xListener )
416{
417 if( getPeer().is() && (maTreeEditListeners.getLength() == 1) )
418 {
419 // maSelectionListeners acts as a proxy,
420 // remove it from the peer if this is the last listener removed from that proxy
421 Reference< XTreeControl >( getPeer(), UNO_QUERY_THROW )->removeTreeEditListener(&maTreeEditListeners);
422 }
423 maTreeEditListeners.removeInterface( xListener );
424}
425
426
427// XComponent
428
429
430void SAL_CALL UnoTreeControl::dispose( )
431{
432 lang::EventObject aEvt;
433 aEvt.Source = static_cast< ::cppu::OWeakObject* >(this);
434 maSelectionListeners.disposeAndClear( aEvt );
435 maTreeExpansionListeners.disposeAndClear( aEvt );
437}
438
439void UnoTreeControl::createPeer( const uno::Reference< awt::XToolkit > & rxToolkit, const uno::Reference< awt::XWindowPeer > & rParentPeer )
440{
441 UnoControlBase::createPeer( rxToolkit, rParentPeer );
442
443 Reference< XTreeControl > xTree( getPeer(), UNO_QUERY_THROW );
444 if( maSelectionListeners.getLength() )
445 xTree->addSelectionChangeListener( &maSelectionListeners );
446 if( maTreeExpansionListeners.getLength() )
447 xTree->addTreeExpansionListener( &maTreeExpansionListeners );
448}
449
450}
451
452void SAL_CALL TreeEditListenerMultiplexer::nodeEditing( const Reference< XTreeNode >& Node )
453{
454 std::unique_lock g(m_aMutex);
455 ::comphelper::OInterfaceIteratorHelper4 aIt(g, maListeners);
456 g.unlock();
457 while( aIt.hasMoreElements() )
458 {
459 Reference<XTreeEditListener> xListener(aIt.next());
460 try
461 {
462 xListener->nodeEditing( Node );
463 }
464 catch( const DisposedException& e )
465 {
466 OSL_ENSURE( e.Context.is(), "caught DisposedException with empty Context field" );
467 if ( e.Context == xListener || !e.Context.is() )
468 {
469 std::unique_lock g2(m_aMutex);
470 aIt.remove(g2);
471 }
472 }
473 catch( const RuntimeException& )
474 {
475 DISPLAY_EXCEPTION( TreeEditListenerMultiplexer, nodeEditing )
476 }
477 }
478}
479
480void SAL_CALL TreeEditListenerMultiplexer::nodeEdited( const Reference< XTreeNode >& Node, const OUString& NewText )
481{
482 std::unique_lock g(m_aMutex);
483 ::comphelper::OInterfaceIteratorHelper4 aIt(g, maListeners);
484 g.unlock();
485 while( aIt.hasMoreElements() )
486 {
487 Reference<XTreeEditListener> xListener(aIt.next());
488 try
489 {
490 xListener->nodeEdited( Node, NewText );
491 }
492 catch( const DisposedException& e )
493 {
494 OSL_ENSURE( e.Context.is(), "caught DisposedException with empty Context field" );
495 if ( e.Context == xListener || !e.Context.is() )
496 {
497 std::unique_lock g2(m_aMutex);
498 aIt.remove(g2);
499 }
500 }
501 catch( const RuntimeException& )
502 {
503 DISPLAY_EXCEPTION( TreeEditListenerMultiplexer, nodeEdited )
504 }
505 }
506}
507
508extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
510 css::uno::XComponentContext *context,
511 css::uno::Sequence<css::uno::Any> const &)
512{
513 return cppu::acquire(new toolkit::UnoTreeModel(context));
514}
515
516extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
518 css::uno::XComponentContext *,
519 css::uno::Sequence<css::uno::Any> const &)
520{
521 return cppu::acquire(new UnoTreeControl());
522}
523
524/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
css::uno::Sequence< sal_Int32 > ImplGetPropertyIds() const
void ImplRegisterProperty(sal_uInt16 nPropType)
virtual css::uno::Any ImplGetDefaultValue(sal_uInt16 nPropId) const
void SAL_CALL dispose() override
Definition: unocontrol.cxx:346
void SAL_CALL createPeer(const css::uno::Reference< css::awt::XToolkit > &Toolkit, const css::uno::Reference< css::awt::XWindowPeer > &Parent) override
static css::uno::Reference< css::beans::XPropertySetInfo > createPropertySetInfo(cppu::IPropertyArrayHelper &rProperties)
::cppu::IPropertyArrayHelper & getInfoHelper() override
css::uno::Any ImplGetDefaultValue(sal_uInt16 nPropId) const override
Definition: treecontrol.cxx:82
css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
UnoTreeModel(const css::uno::Reference< css::uno::XComponentContext > &i_factory)
Definition: treecontrol.cxx:47
rtl::Reference< UnoControlModel > Clone() const override
Definition: treecontrol.cxx:72
OUString SAL_CALL getServiceName() override
Definition: treecontrol.cxx:77
Any aHelper
virtual void SAL_CALL nodeEdited(const css::uno::Reference< css::awt::tree::XTreeNode > &Node, const OUString &NewText) override
virtual DECL_LISTENERMULTIPLEXER_END void SAL_CALL nodeEditing(const css::uno::Reference< css::awt::tree::XTreeNode > &Node) override
#define DECLIMPL_SERVICEINFO_DERIVED(ImplName, BaseClass, ServiceName)
Definition: macros.hxx:154
#define DISPLAY_EXCEPTION(ClassName, MethodName)
Definition: macros.hxx:80
void dispose()
#define BASEPROPERTY_TREE_SHOWSROOTHANDLES
Definition: property.hxx:163
#define BASEPROPERTY_TREE_SHOWSHANDLES
Definition: property.hxx:162
#define BASEPROPERTY_TREE_DATAMODEL
Definition: property.hxx:160
#define BASEPROPERTY_BORDER
Definition: property.hxx:39
#define BASEPROPERTY_FILLCOLOR
Definition: property.hxx:36
#define BASEPROPERTY_HIDEINACTIVESELECTION
Definition: property.hxx:143
#define BASEPROPERTY_TREE_ROOTDISPLAYED
Definition: property.hxx:161
#define BASEPROPERTY_TREE_EDITABLE
Definition: property.hxx:159
#define BASEPROPERTY_TREE_INVOKESSTOPNODEEDITING
Definition: property.hxx:165
#define BASEPROPERTY_HELPURL
Definition: property.hxx:91
#define BASEPROPERTY_BACKGROUNDCOLOR
Definition: property.hxx:35
#define BASEPROPERTY_TABSTOP
Definition: property.hxx:47
#define BASEPROPERTY_ENABLED
Definition: property.hxx:77
#define BASEPROPERTY_DEFAULTCONTROL
Definition: property.hxx:52
#define BASEPROPERTY_BORDERCOLOR
Definition: property.hxx:145
#define BASEPROPERTY_ENABLEVISIBLE
Definition: property.hxx:180
#define BASEPROPERTY_HELPTEXT
Definition: property.hxx:106
#define BASEPROPERTY_ROW_HEIGHT
Definition: property.hxx:164
#define BASEPROPERTY_TREE_SELECTIONTYPE
Definition: property.hxx:158
#define BASEPROPERTY_PRINTABLE
Definition: property.hxx:78
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * stardiv_Toolkit_TreeControlModel_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * stardiv_Toolkit_TreeControl_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
unsigned char sal_Bool