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_extensions.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #include "defaulthelpprovider.hxx"
28*b1cdbd2cSJim Jagielski #include "pcrcommon.hxx"
29*b1cdbd2cSJim Jagielski #include "modulepcr.hxx"
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/
32*b1cdbd2cSJim Jagielski #include <com/sun/star/ucb/AlreadyInitializedException.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/XVclWindowPeer.hpp>
35*b1cdbd2cSJim Jagielski /** === end UNO includes === **/
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
38*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
39*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
40*b1cdbd2cSJim Jagielski
41*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
createRegistryInfo_DefaultHelpProvider()42*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL createRegistryInfo_DefaultHelpProvider()
43*b1cdbd2cSJim Jagielski {
44*b1cdbd2cSJim Jagielski ::pcr::OAutoRegistration< ::pcr::DefaultHelpProvider > aAutoRegistration;
45*b1cdbd2cSJim Jagielski }
46*b1cdbd2cSJim Jagielski
47*b1cdbd2cSJim Jagielski //........................................................................
48*b1cdbd2cSJim Jagielski namespace pcr
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski //........................................................................
51*b1cdbd2cSJim Jagielski
52*b1cdbd2cSJim Jagielski /** === begin UNO using === **/
53*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Reference;
54*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XComponentContext;
55*b1cdbd2cSJim Jagielski using ::com::sun::star::inspection::XPropertyControl;
56*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::RuntimeException;
57*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence;
58*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any;
59*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Exception;
60*b1cdbd2cSJim Jagielski using ::com::sun::star::inspection::XObjectInspectorUI;
61*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::XInterface;
62*b1cdbd2cSJim Jagielski using ::com::sun::star::ucb::AlreadyInitializedException;
63*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::IllegalArgumentException;
64*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY;
65*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::UNO_QUERY_THROW;
66*b1cdbd2cSJim Jagielski using ::com::sun::star::awt::XWindow;
67*b1cdbd2cSJim Jagielski using ::com::sun::star::awt::XVclWindowPeer;
68*b1cdbd2cSJim Jagielski /** === end UNO using === **/
69*b1cdbd2cSJim Jagielski
70*b1cdbd2cSJim Jagielski //====================================================================
71*b1cdbd2cSJim Jagielski //= DefaultHelpProvider
72*b1cdbd2cSJim Jagielski //====================================================================
73*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
DefaultHelpProvider(const Reference<XComponentContext> & _rxContext)74*b1cdbd2cSJim Jagielski DefaultHelpProvider::DefaultHelpProvider( const Reference< XComponentContext >& _rxContext )
75*b1cdbd2cSJim Jagielski :m_aContext( _rxContext )
76*b1cdbd2cSJim Jagielski ,m_bConstructed( false )
77*b1cdbd2cSJim Jagielski {
78*b1cdbd2cSJim Jagielski }
79*b1cdbd2cSJim Jagielski
80*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
~DefaultHelpProvider()81*b1cdbd2cSJim Jagielski DefaultHelpProvider::~DefaultHelpProvider()
82*b1cdbd2cSJim Jagielski {
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski
85*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
getImplementationName_static()86*b1cdbd2cSJim Jagielski ::rtl::OUString DefaultHelpProvider::getImplementationName_static( ) throw(RuntimeException)
87*b1cdbd2cSJim Jagielski {
88*b1cdbd2cSJim Jagielski return ::rtl::OUString::createFromAscii( "org.openoffice.comp.extensions.DefaultHelpProvider");
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski
91*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
getSupportedServiceNames_static()92*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > DefaultHelpProvider::getSupportedServiceNames_static( ) throw(RuntimeException)
93*b1cdbd2cSJim Jagielski {
94*b1cdbd2cSJim Jagielski Sequence< ::rtl::OUString > aSupported(1);
95*b1cdbd2cSJim Jagielski aSupported[0] = ::rtl::OUString::createFromAscii( "com.sun.star.inspection.DefaultHelpProvider" );
96*b1cdbd2cSJim Jagielski return aSupported;
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski
99*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
Create(const Reference<XComponentContext> & _rxContext)100*b1cdbd2cSJim Jagielski Reference< XInterface > SAL_CALL DefaultHelpProvider::Create( const Reference< XComponentContext >& _rxContext )
101*b1cdbd2cSJim Jagielski {
102*b1cdbd2cSJim Jagielski return *new DefaultHelpProvider( _rxContext );
103*b1cdbd2cSJim Jagielski }
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
focusGained(const Reference<XPropertyControl> & _Control)106*b1cdbd2cSJim Jagielski void SAL_CALL DefaultHelpProvider::focusGained( const Reference< XPropertyControl >& _Control ) throw (RuntimeException)
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski if ( !m_xInspectorUI.is() )
109*b1cdbd2cSJim Jagielski throw RuntimeException( ::rtl::OUString(), *this );
110*b1cdbd2cSJim Jagielski
111*b1cdbd2cSJim Jagielski try
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski m_xInspectorUI->setHelpSectionText( impl_getHelpText_nothrow( _Control ) );
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski catch( const Exception& )
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
118*b1cdbd2cSJim Jagielski }
119*b1cdbd2cSJim Jagielski }
120*b1cdbd2cSJim Jagielski
121*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
valueChanged(const Reference<XPropertyControl> &)122*b1cdbd2cSJim Jagielski void SAL_CALL DefaultHelpProvider::valueChanged( const Reference< XPropertyControl >& /*_Control*/ ) throw (RuntimeException)
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski // not interested in
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski
127*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
initialize(const Sequence<Any> & _arguments)128*b1cdbd2cSJim Jagielski void SAL_CALL DefaultHelpProvider::initialize( const Sequence< Any >& _arguments ) throw (Exception, RuntimeException)
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski if ( m_bConstructed )
131*b1cdbd2cSJim Jagielski throw AlreadyInitializedException();
132*b1cdbd2cSJim Jagielski
133*b1cdbd2cSJim Jagielski StlSyntaxSequence< Any > arguments( _arguments );
134*b1cdbd2cSJim Jagielski if ( arguments.size() == 1 )
135*b1cdbd2cSJim Jagielski { // constructor: "create( XObjectInspectorUI )"
136*b1cdbd2cSJim Jagielski Reference< XObjectInspectorUI > xUI( arguments[0], UNO_QUERY );
137*b1cdbd2cSJim Jagielski create( xUI );
138*b1cdbd2cSJim Jagielski return;
139*b1cdbd2cSJim Jagielski }
140*b1cdbd2cSJim Jagielski
141*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), *this, 0 );
142*b1cdbd2cSJim Jagielski }
143*b1cdbd2cSJim Jagielski
144*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
create(const Reference<XObjectInspectorUI> & _rxUI)145*b1cdbd2cSJim Jagielski void DefaultHelpProvider::create( const Reference< XObjectInspectorUI >& _rxUI )
146*b1cdbd2cSJim Jagielski {
147*b1cdbd2cSJim Jagielski if ( !_rxUI.is() )
148*b1cdbd2cSJim Jagielski throw IllegalArgumentException( ::rtl::OUString(), *this, 1 );
149*b1cdbd2cSJim Jagielski
150*b1cdbd2cSJim Jagielski try
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski m_xInspectorUI = _rxUI;
153*b1cdbd2cSJim Jagielski m_xInspectorUI->registerControlObserver( this );
154*b1cdbd2cSJim Jagielski }
155*b1cdbd2cSJim Jagielski catch( const Exception& )
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
158*b1cdbd2cSJim Jagielski }
159*b1cdbd2cSJim Jagielski
160*b1cdbd2cSJim Jagielski m_bConstructed = true;
161*b1cdbd2cSJim Jagielski }
162*b1cdbd2cSJim Jagielski
163*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
impl_getVclControlWindow_nothrow(const Reference<XPropertyControl> & _rxControl)164*b1cdbd2cSJim Jagielski Window* DefaultHelpProvider::impl_getVclControlWindow_nothrow( const Reference< XPropertyControl >& _rxControl )
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski Window* pControlWindow = NULL;
167*b1cdbd2cSJim Jagielski OSL_PRECOND( _rxControl.is(), "DefaultHelpProvider::impl_getVclControlWindow_nothrow: illegal control!" );
168*b1cdbd2cSJim Jagielski if ( !_rxControl.is() )
169*b1cdbd2cSJim Jagielski return pControlWindow;
170*b1cdbd2cSJim Jagielski
171*b1cdbd2cSJim Jagielski try
172*b1cdbd2cSJim Jagielski {
173*b1cdbd2cSJim Jagielski Reference< XWindow > xControlWindow( _rxControl->getControlWindow(), UNO_QUERY_THROW );
174*b1cdbd2cSJim Jagielski pControlWindow = VCLUnoHelper::GetWindow( xControlWindow );
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski catch( const Exception& )
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski DBG_UNHANDLED_EXCEPTION();
179*b1cdbd2cSJim Jagielski }
180*b1cdbd2cSJim Jagielski
181*b1cdbd2cSJim Jagielski return pControlWindow;
182*b1cdbd2cSJim Jagielski }
183*b1cdbd2cSJim Jagielski
184*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
impl_getHelpText_nothrow(const Reference<XPropertyControl> & _rxControl)185*b1cdbd2cSJim Jagielski ::rtl::OUString DefaultHelpProvider::impl_getHelpText_nothrow( const Reference< XPropertyControl >& _rxControl )
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski ::rtl::OUString sHelpText;
188*b1cdbd2cSJim Jagielski OSL_PRECOND( _rxControl.is(), "DefaultHelpProvider::impl_getHelpText_nothrow: illegal control!" );
189*b1cdbd2cSJim Jagielski if ( !_rxControl.is() )
190*b1cdbd2cSJim Jagielski return sHelpText;
191*b1cdbd2cSJim Jagielski
192*b1cdbd2cSJim Jagielski Window* pControlWindow( impl_getVclControlWindow_nothrow( _rxControl ) );
193*b1cdbd2cSJim Jagielski OSL_ENSURE( pControlWindow, "DefaultHelpProvider::impl_getHelpText_nothrow: could not determine the VCL window!" );
194*b1cdbd2cSJim Jagielski if ( !pControlWindow )
195*b1cdbd2cSJim Jagielski return sHelpText;
196*b1cdbd2cSJim Jagielski
197*b1cdbd2cSJim Jagielski sHelpText = pControlWindow->GetHelpText();
198*b1cdbd2cSJim Jagielski return sHelpText;
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski //........................................................................
201*b1cdbd2cSJim Jagielski } // namespace pcr
202*b1cdbd2cSJim Jagielski //........................................................................
203