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