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 #ifndef __FRAMEWORK_HELPER_TITLEBARUPDATE_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_HELPER_TITLEBARUPDATE_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski //	my own includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_THREADHELP_THREADHELPBASE_HXX_
32*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_MACROS_DEBUG_HXX_
36*b1cdbd2cSJim Jagielski #include <macros/debug.hxx>
37*b1cdbd2cSJim Jagielski #endif
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_MACROS_XINTERFACE_HXX_
40*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx>
41*b1cdbd2cSJim Jagielski #endif
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_
44*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx>
45*b1cdbd2cSJim Jagielski #endif
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_GENERAL_H_
48*b1cdbd2cSJim Jagielski #include <general.h>
49*b1cdbd2cSJim Jagielski #endif
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
52*b1cdbd2cSJim Jagielski //	interface includes
53*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_
56*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
57*b1cdbd2cSJim Jagielski #endif
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
60*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp>
61*b1cdbd2cSJim Jagielski #endif
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_FRAME_XFRAME_HPP_
64*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrame.hpp>
65*b1cdbd2cSJim Jagielski #endif
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_FRAME_XTITLE_HPP_
68*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitle.hpp>
69*b1cdbd2cSJim Jagielski #endif
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_FRAME_XFRAMEACTIONLISTENER_HPP_
72*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFrameActionListener.hpp>
73*b1cdbd2cSJim Jagielski #endif
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_FRAME_XTITLECHANGELISTENER_HPP_
76*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XTitleChangeListener.hpp>
77*b1cdbd2cSJim Jagielski #endif
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_LANG_XEVENTLISTENER_HPP_
80*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XEventListener.hpp>
81*b1cdbd2cSJim Jagielski #endif
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
84*b1cdbd2cSJim Jagielski //	other includes
85*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski #ifndef INCLUDED_SVTOOLS_MODULEOPTIONS_HXX
88*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
89*b1cdbd2cSJim Jagielski #endif
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski #ifndef _CPPUHELPER_WEAK_HXX_
92*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
93*b1cdbd2cSJim Jagielski #endif
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski #ifndef _RTL_USTRBUF_HXX_
96*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
97*b1cdbd2cSJim Jagielski #endif
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
100*b1cdbd2cSJim Jagielski //	const
101*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
104*b1cdbd2cSJim Jagielski //	namespace
105*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski namespace framework{
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
110*b1cdbd2cSJim Jagielski //	declarations
111*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski /*-************************************************************************************************************//**
114*b1cdbd2cSJim Jagielski     @short          helps our frame on setting title/icon on the titlebar (including updates)
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski     @devstatus      draft
117*b1cdbd2cSJim Jagielski     @threadsafe     yes
118*b1cdbd2cSJim Jagielski *//*-*************************************************************************************************************/
119*b1cdbd2cSJim Jagielski class TitleBarUpdate : // interfaces
120*b1cdbd2cSJim Jagielski                        public css::lang::XTypeProvider
121*b1cdbd2cSJim Jagielski                      , public css::lang::XInitialization
122*b1cdbd2cSJim Jagielski                      , public css::frame::XTitleChangeListener // => XEventListener
123*b1cdbd2cSJim Jagielski                      , public css::frame::XFrameActionListener // => XEventListener
124*b1cdbd2cSJim Jagielski                        // baseclasses (order neccessary for right initialization!)
125*b1cdbd2cSJim Jagielski                      , private ThreadHelpBase
126*b1cdbd2cSJim Jagielski                      , public  ::cppu::OWeakObject
127*b1cdbd2cSJim Jagielski {
128*b1cdbd2cSJim Jagielski     //________________________________
129*b1cdbd2cSJim Jagielski     // structs, types
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     private:
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski         struct TModuleInfo
134*b1cdbd2cSJim Jagielski         {
135*b1cdbd2cSJim Jagielski             /// internal id of this module
136*b1cdbd2cSJim Jagielski             ::rtl::OUString sID;
137*b1cdbd2cSJim Jagielski             /// localized name for this module
138*b1cdbd2cSJim Jagielski             ::rtl::OUString sUIName;
139*b1cdbd2cSJim Jagielski             /// configured icon for this module
140*b1cdbd2cSJim Jagielski             ::sal_Int32 nIcon;
141*b1cdbd2cSJim Jagielski         };
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski     //________________________________
144*b1cdbd2cSJim Jagielski     // member
145*b1cdbd2cSJim Jagielski 
146*b1cdbd2cSJim Jagielski 	private:
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         /// may we need an uno service manager to create own services
149*b1cdbd2cSJim Jagielski         css::uno::Reference< css::lang::XMultiServiceFactory > m_xSMGR;
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski         /// reference to the frame which was created by the office himself
152*b1cdbd2cSJim Jagielski         css::uno::WeakReference< css::frame::XFrame > m_xFrame;
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     //________________________________
155*b1cdbd2cSJim Jagielski     // interface
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 	public:
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski         //____________________________
160*b1cdbd2cSJim Jagielski         // ctor/dtor
161*b1cdbd2cSJim Jagielski                  TitleBarUpdate(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR);
162*b1cdbd2cSJim Jagielski         virtual ~TitleBarUpdate(                                                                   );
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski         //____________________________
165*b1cdbd2cSJim Jagielski         // XInterface, XTypeProvider
166*b1cdbd2cSJim Jagielski         FWK_DECLARE_XINTERFACE
167*b1cdbd2cSJim Jagielski         FWK_DECLARE_XTYPEPROVIDER
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski         //____________________________
170*b1cdbd2cSJim Jagielski         // XInitialization
171*b1cdbd2cSJim Jagielski         virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any >& lArguments)
172*b1cdbd2cSJim Jagielski             throw(css::uno::Exception       ,
173*b1cdbd2cSJim Jagielski                   css::uno::RuntimeException);
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski         //____________________________
176*b1cdbd2cSJim Jagielski         // XFrameActionListener
177*b1cdbd2cSJim Jagielski         virtual void SAL_CALL frameAction(const css::frame::FrameActionEvent& aEvent)
178*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski         //____________________________
181*b1cdbd2cSJim Jagielski         // XTitleChangeListener
182*b1cdbd2cSJim Jagielski         virtual void SAL_CALL titleChanged(const css::frame::TitleChangedEvent& aEvent)
183*b1cdbd2cSJim Jagielski             throw (css::uno::RuntimeException);
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski         //____________________________
186*b1cdbd2cSJim Jagielski         // XEventListener
187*b1cdbd2cSJim Jagielski         virtual void SAL_CALL disposing(const css::lang::EventObject& aEvent)
188*b1cdbd2cSJim Jagielski             throw(css::uno::RuntimeException);
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski     //________________________________
191*b1cdbd2cSJim Jagielski     // helper
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski     private:
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski         //____________________________
196*b1cdbd2cSJim Jagielski         /** @short  identify the application module, which  is used behind the component
197*b1cdbd2cSJim Jagielski                     of our frame.
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski             @param  xFrame
200*b1cdbd2cSJim Jagielski                     contains the component, wich must be identified.
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski             @param  rInfo
203*b1cdbd2cSJim Jagielski                     describe the module in its details.
204*b1cdbd2cSJim Jagielski                     Is set only if return value is true.
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski             @return [sal_Bool]
207*b1cdbd2cSJim Jagielski                     sal_True in casee module could be identified and all needed values could be read.
208*b1cdbd2cSJim Jagielski                     sal_False otherwise.
209*b1cdbd2cSJim Jagielski          */
210*b1cdbd2cSJim Jagielski         ::sal_Bool implst_getModuleInfo(const css::uno::Reference< css::frame::XFrame >& xFrame,
211*b1cdbd2cSJim Jagielski                                               TModuleInfo&                               rInfo );
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski         //____________________________
214*b1cdbd2cSJim Jagielski         /** @short  set a new icon and title on the title bar of our connected frame window.
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski             @descr  It does not check if an update is realy needed. That has to be done outside.
217*b1cdbd2cSJim Jagielski                     It retrieves all needed informations and update the title bar - nothing less -
218*b1cdbd2cSJim Jagielski                     nothing more.
219*b1cdbd2cSJim Jagielski          */
220*b1cdbd2cSJim Jagielski         void impl_forceUpdate();
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski         //____________________________
223*b1cdbd2cSJim Jagielski         /** @short  identify the current component (inside the connected frame)
224*b1cdbd2cSJim Jagielski                     and set the right module icon on the title bar.
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski             @param  xFrame
227*b1cdbd2cSJim Jagielski                     the frame which contains the component and where the icon must be set
228*b1cdbd2cSJim Jagielski                     on the window title bar.
229*b1cdbd2cSJim Jagielski          */
230*b1cdbd2cSJim Jagielski         void impl_updateIcon(const css::uno::Reference< css::frame::XFrame >& xFrame);
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski         //____________________________
233*b1cdbd2cSJim Jagielski         /** @short  gets the current title from the frame and set it on the window.
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski             @param  xFrame
236*b1cdbd2cSJim Jagielski                     the frame which contains the component and where the title must be set
237*b1cdbd2cSJim Jagielski                     on the window title bar.
238*b1cdbd2cSJim Jagielski          */
239*b1cdbd2cSJim Jagielski         void impl_updateTitle(const css::uno::Reference< css::frame::XFrame >& xFrame);
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski }; // class TitleBarUpdate
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski } // namespace framework
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski #endif // #ifndef __FRAMEWORK_HELPER_TITLEBARUPDATE_HXX_
246