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_desktop.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "dp_gui.hrc"
28*b1cdbd2cSJim Jagielski #include "svtools/controldims.hrc"
29*b1cdbd2cSJim Jagielski #include "svtools/svtools.hrc"
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "dp_gui.h"
32*b1cdbd2cSJim Jagielski #include "dp_gui_dialog2.hxx"
33*b1cdbd2cSJim Jagielski #include "dp_gui_extlistbox.hxx"
34*b1cdbd2cSJim Jagielski #include "dp_gui_shared.hxx"
35*b1cdbd2cSJim Jagielski #include "dp_gui_theextmgr.hxx"
36*b1cdbd2cSJim Jagielski #include "dp_gui_extensioncmdqueue.hxx"
37*b1cdbd2cSJim Jagielski #include "dp_misc.h"
38*b1cdbd2cSJim Jagielski #include "dp_ucb.h"
39*b1cdbd2cSJim Jagielski #include "dp_update.hxx"
40*b1cdbd2cSJim Jagielski #include "dp_identifier.hxx"
41*b1cdbd2cSJim Jagielski #include "dp_descriptioninfoset.hxx"
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski #include "vcl/ctrl.hxx"
44*b1cdbd2cSJim Jagielski #include "vcl/menu.hxx"
45*b1cdbd2cSJim Jagielski #include "vcl/msgbox.hxx"
46*b1cdbd2cSJim Jagielski #include "vcl/scrbar.hxx"
47*b1cdbd2cSJim Jagielski #include "vcl/svapp.hxx"
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include "vos/mutex.hxx"
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski #include "svtools/extensionlistbox.hxx"
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski #include "sfx2/sfxdlg.hxx"
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #include "comphelper/anytostring.hxx"
56*b1cdbd2cSJim Jagielski #include "cppuhelper/exc_hlp.hxx"
57*b1cdbd2cSJim Jagielski #include "cppuhelper/bootstrap.hxx"
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski #include "comphelper/processfactory.hxx"
60*b1cdbd2cSJim Jagielski #include "ucbhelper/content.hxx"
61*b1cdbd2cSJim Jagielski #include "unotools/collatorwrapper.hxx"
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski #include "com/sun/star/beans/StringPair.hpp"
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski #include "com/sun/star/i18n/CollatorOptions.hpp"
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski #include "com/sun/star/system/SystemShellExecuteFlags.hpp"
68*b1cdbd2cSJim Jagielski #include "com/sun/star/system/SystemShellExecute.hpp"
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski #include "com/sun/star/ui/dialogs/ExecutableDialogResults.hpp"
71*b1cdbd2cSJim Jagielski #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
72*b1cdbd2cSJim Jagielski #include "com/sun/star/ui/dialogs/XFilePicker.hpp"
73*b1cdbd2cSJim Jagielski #include "com/sun/star/ui/dialogs/XFilterManager.hpp"
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Any.hxx"
76*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/XComponentContext.hpp"
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski #include <map>
79*b1cdbd2cSJim Jagielski #include <vector>
80*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski #define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
85*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::system;
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski using ::rtl::OUString;
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski namespace dp_gui {
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski #define TOP_OFFSET           5
93*b1cdbd2cSJim Jagielski #define LINE_SIZE            4
94*b1cdbd2cSJim Jagielski #define PROGRESS_WIDTH      60
95*b1cdbd2cSJim Jagielski #define PROGRESS_HEIGHT     14
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
98*b1cdbd2cSJim Jagielski struct StrAllFiles : public rtl::StaticWithInit< const OUString, StrAllFiles >
99*b1cdbd2cSJim Jagielski {
operator ()dp_gui::StrAllFiles100*b1cdbd2cSJim Jagielski     const OUString operator () () {
101*b1cdbd2cSJim Jagielski         const ::vos::OGuard guard( Application::GetSolarMutex() );
102*b1cdbd2cSJim Jagielski         ::std::auto_ptr< ResMgr > const resmgr( ResMgr::CreateResMgr( "fps_office" ) );
103*b1cdbd2cSJim Jagielski         OSL_ASSERT( resmgr.get() != 0 );
104*b1cdbd2cSJim Jagielski         String ret( ResId( STR_FILTERNAME_ALL, *resmgr.get() ) );
105*b1cdbd2cSJim Jagielski         return ret;
106*b1cdbd2cSJim Jagielski     }
107*b1cdbd2cSJim Jagielski };
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
110*b1cdbd2cSJim Jagielski //                            ExtBoxWithBtns_Impl
111*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski enum MENU_COMMAND
114*b1cdbd2cSJim Jagielski {
115*b1cdbd2cSJim Jagielski     CMD_NONE    = 0,
116*b1cdbd2cSJim Jagielski     CMD_REMOVE  = 1,
117*b1cdbd2cSJim Jagielski     CMD_ENABLE,
118*b1cdbd2cSJim Jagielski     CMD_DISABLE,
119*b1cdbd2cSJim Jagielski     CMD_UPDATE,
120*b1cdbd2cSJim Jagielski     CMD_SHOW_LICENSE
121*b1cdbd2cSJim Jagielski };
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski class ExtBoxWithBtns_Impl : public ExtensionBox_Impl
124*b1cdbd2cSJim Jagielski {
125*b1cdbd2cSJim Jagielski     Size            m_aOutputSize;
126*b1cdbd2cSJim Jagielski     bool            m_bInterfaceLocked;
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     PushButton     *m_pOptionsBtn;
129*b1cdbd2cSJim Jagielski     PushButton     *m_pEnableBtn;
130*b1cdbd2cSJim Jagielski     PushButton     *m_pRemoveBtn;
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski     ExtMgrDialog   *m_pParent;
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski     void            SetButtonPos( const Rectangle& rRect );
135*b1cdbd2cSJim Jagielski     void            SetButtonStatus( const TEntry_Impl pEntry );
136*b1cdbd2cSJim Jagielski     bool            HandleTabKey( bool bReverse );
137*b1cdbd2cSJim Jagielski     MENU_COMMAND    ShowPopupMenu( const Point &rPos, const long nPos );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski     //-----------------
140*b1cdbd2cSJim Jagielski     DECL_DLLPRIVATE_LINK( ScrollHdl, ScrollBar * );
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski     DECL_DLLPRIVATE_LINK( HandleOptionsBtn, void * );
143*b1cdbd2cSJim Jagielski     DECL_DLLPRIVATE_LINK( HandleEnableBtn, void * );
144*b1cdbd2cSJim Jagielski     DECL_DLLPRIVATE_LINK( HandleRemoveBtn, void * );
145*b1cdbd2cSJim Jagielski     DECL_DLLPRIVATE_LINK( HandleHyperlink, svt::FixedHyperlink * );
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski public:
148*b1cdbd2cSJim Jagielski                     ExtBoxWithBtns_Impl( ExtMgrDialog* pParent, TheExtensionManager *pManager );
149*b1cdbd2cSJim Jagielski                    ~ExtBoxWithBtns_Impl();
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     virtual void    MouseButtonDown( const MouseEvent& rMEvt );
152*b1cdbd2cSJim Jagielski     virtual long    Notify( NotifyEvent& rNEvt );
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski     const Size      GetMinOutputSizePixel() const;
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski     virtual void    RecalcAll();
157*b1cdbd2cSJim Jagielski     virtual void    selectEntry( const long nPos );
158*b1cdbd2cSJim Jagielski     //-----------------
159*b1cdbd2cSJim Jagielski     void            enableButtons( bool bEnable );
160*b1cdbd2cSJim Jagielski };
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
ExtBoxWithBtns_Impl(ExtMgrDialog * pParent,TheExtensionManager * pManager)163*b1cdbd2cSJim Jagielski ExtBoxWithBtns_Impl::ExtBoxWithBtns_Impl( ExtMgrDialog* pParent, TheExtensionManager *pManager ) :
164*b1cdbd2cSJim Jagielski     ExtensionBox_Impl( pParent, pManager ),
165*b1cdbd2cSJim Jagielski     m_bInterfaceLocked( false ),
166*b1cdbd2cSJim Jagielski     m_pOptionsBtn( NULL ),
167*b1cdbd2cSJim Jagielski     m_pEnableBtn( NULL ),
168*b1cdbd2cSJim Jagielski     m_pRemoveBtn( NULL ),
169*b1cdbd2cSJim Jagielski     m_pParent( pParent )
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski     m_pOptionsBtn = new PushButton( this, WB_TABSTOP );
172*b1cdbd2cSJim Jagielski     m_pEnableBtn = new PushButton( this, WB_TABSTOP );
173*b1cdbd2cSJim Jagielski     m_pRemoveBtn = new PushButton( this, WB_TABSTOP );
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski     SetHelpId( HID_EXTENSION_MANAGER_LISTBOX );
176*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_OPTIONS );
177*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_DISABLE );
178*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_REMOVE );
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetClickHdl( LINK( this, ExtBoxWithBtns_Impl, HandleOptionsBtn ) );
181*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetClickHdl( LINK( this, ExtBoxWithBtns_Impl, HandleEnableBtn ) );
182*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetClickHdl( LINK( this, ExtBoxWithBtns_Impl, HandleRemoveBtn ) );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_OPTIONS ) );
185*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
186*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) );
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski     Size aSize = LogicToPixel( Size( RSC_CD_PUSHBUTTON_WIDTH, RSC_CD_PUSHBUTTON_HEIGHT ),
189*b1cdbd2cSJim Jagielski                                MapMode( MAP_APPFONT ) );
190*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetSizePixel( aSize );
191*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetSizePixel( aSize );
192*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetSizePixel( aSize );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski     SetExtraSize( aSize.Height() + 2 * TOP_OFFSET );
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski     SetScrollHdl( LINK( this, ExtBoxWithBtns_Impl, ScrollHdl ) );
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~ExtBoxWithBtns_Impl()200*b1cdbd2cSJim Jagielski ExtBoxWithBtns_Impl::~ExtBoxWithBtns_Impl()
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski     delete m_pOptionsBtn;
203*b1cdbd2cSJim Jagielski     delete m_pEnableBtn;
204*b1cdbd2cSJim Jagielski     delete m_pRemoveBtn;
205*b1cdbd2cSJim Jagielski }
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
209*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
GetMinOutputSizePixel() const210*b1cdbd2cSJim Jagielski const Size ExtBoxWithBtns_Impl::GetMinOutputSizePixel() const
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski     Size aMinSize( ExtensionBox_Impl::GetMinOutputSizePixel() );
213*b1cdbd2cSJim Jagielski     long nHeight = aMinSize.Height();
214*b1cdbd2cSJim Jagielski     nHeight += m_pOptionsBtn->GetSizePixel().Height();
215*b1cdbd2cSJim Jagielski     nHeight +=  2 * TOP_OFFSET;
216*b1cdbd2cSJim Jagielski     long nWidth = m_pOptionsBtn->GetSizePixel().Width();
217*b1cdbd2cSJim Jagielski     nWidth *= 3;
218*b1cdbd2cSJim Jagielski     nWidth += 5*TOP_OFFSET + 20;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski     return Size( nWidth, nHeight );
221*b1cdbd2cSJim Jagielski }
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
RecalcAll()224*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::RecalcAll()
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     const sal_Int32 nActive = getSelIndex();
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski     if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
229*b1cdbd2cSJim Jagielski     {
230*b1cdbd2cSJim Jagielski         SetButtonStatus( GetEntryData( nActive) );
231*b1cdbd2cSJim Jagielski     }
232*b1cdbd2cSJim Jagielski     else
233*b1cdbd2cSJim Jagielski     {
234*b1cdbd2cSJim Jagielski         m_pOptionsBtn->Hide();
235*b1cdbd2cSJim Jagielski         m_pEnableBtn->Hide();
236*b1cdbd2cSJim Jagielski         m_pRemoveBtn->Hide();
237*b1cdbd2cSJim Jagielski     }
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski     ExtensionBox_Impl::RecalcAll();
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski     if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
242*b1cdbd2cSJim Jagielski         SetButtonPos( GetEntryRect( nActive ) );
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
247*b1cdbd2cSJim Jagielski //This function may be called with nPos < 0
selectEntry(const long nPos)248*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::selectEntry( const long nPos )
249*b1cdbd2cSJim Jagielski {
250*b1cdbd2cSJim Jagielski     if ( HasActive() && ( nPos == getSelIndex() ) )
251*b1cdbd2cSJim Jagielski         return;
252*b1cdbd2cSJim Jagielski 
253*b1cdbd2cSJim Jagielski     ExtensionBox_Impl::selectEntry( nPos );
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetButtonPos(const Rectangle & rRect)257*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::SetButtonPos( const Rectangle& rRect )
258*b1cdbd2cSJim Jagielski {
259*b1cdbd2cSJim Jagielski     Size  aBtnSize( m_pOptionsBtn->GetSizePixel() );
260*b1cdbd2cSJim Jagielski     Point aBtnPos( rRect.Left() + ICON_OFFSET,
261*b1cdbd2cSJim Jagielski                    rRect.Bottom() - TOP_OFFSET - aBtnSize.Height() );
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetPosPixel( aBtnPos );
264*b1cdbd2cSJim Jagielski     aBtnPos.X() = rRect.Right() - TOP_OFFSET - aBtnSize.Width();
265*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetPosPixel( aBtnPos );
266*b1cdbd2cSJim Jagielski     aBtnPos.X() -= ( TOP_OFFSET + aBtnSize.Width() );
267*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetPosPixel( aBtnPos );
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
SetButtonStatus(const TEntry_Impl pEntry)271*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::SetButtonStatus( const TEntry_Impl pEntry )
272*b1cdbd2cSJim Jagielski {
273*b1cdbd2cSJim Jagielski     bool bShowOptionBtn = true;
274*b1cdbd2cSJim Jagielski 
275*b1cdbd2cSJim Jagielski     pEntry->m_bHasButtons = false;
276*b1cdbd2cSJim Jagielski     if ( ( pEntry->m_eState == REGISTERED ) || ( pEntry->m_eState == NOT_AVAILABLE ) )
277*b1cdbd2cSJim Jagielski     {
278*b1cdbd2cSJim Jagielski         m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
279*b1cdbd2cSJim Jagielski         m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_DISABLE );
280*b1cdbd2cSJim Jagielski     }
281*b1cdbd2cSJim Jagielski     else
282*b1cdbd2cSJim Jagielski     {
283*b1cdbd2cSJim Jagielski         m_pEnableBtn->SetText( DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
284*b1cdbd2cSJim Jagielski         m_pEnableBtn->SetHelpId( HID_EXTENSION_MANAGER_LISTBOX_ENABLE );
285*b1cdbd2cSJim Jagielski         bShowOptionBtn = false;
286*b1cdbd2cSJim Jagielski     }
287*b1cdbd2cSJim Jagielski 
288*b1cdbd2cSJim Jagielski     if ( ( !pEntry->m_bUser || ( pEntry->m_eState == NOT_AVAILABLE ) || pEntry->m_bMissingDeps )
289*b1cdbd2cSJim Jagielski          && !pEntry->m_bMissingLic )
290*b1cdbd2cSJim Jagielski         m_pEnableBtn->Hide();
291*b1cdbd2cSJim Jagielski     else
292*b1cdbd2cSJim Jagielski     {
293*b1cdbd2cSJim Jagielski         m_pEnableBtn->Enable( !pEntry->m_bLocked );
294*b1cdbd2cSJim Jagielski         m_pEnableBtn->Show();
295*b1cdbd2cSJim Jagielski         pEntry->m_bHasButtons = true;
296*b1cdbd2cSJim Jagielski     }
297*b1cdbd2cSJim Jagielski 
298*b1cdbd2cSJim Jagielski     if ( pEntry->m_bHasOptions && bShowOptionBtn )
299*b1cdbd2cSJim Jagielski     {
300*b1cdbd2cSJim Jagielski         m_pOptionsBtn->Enable( pEntry->m_bHasOptions );
301*b1cdbd2cSJim Jagielski         m_pOptionsBtn->Show();
302*b1cdbd2cSJim Jagielski         pEntry->m_bHasButtons = true;
303*b1cdbd2cSJim Jagielski     }
304*b1cdbd2cSJim Jagielski     else
305*b1cdbd2cSJim Jagielski         m_pOptionsBtn->Hide();
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski     if ( pEntry->m_bUser || pEntry->m_bShared )
308*b1cdbd2cSJim Jagielski     {
309*b1cdbd2cSJim Jagielski         m_pRemoveBtn->Enable( !pEntry->m_bLocked );
310*b1cdbd2cSJim Jagielski         m_pRemoveBtn->Show();
311*b1cdbd2cSJim Jagielski         pEntry->m_bHasButtons = true;
312*b1cdbd2cSJim Jagielski     }
313*b1cdbd2cSJim Jagielski     else
314*b1cdbd2cSJim Jagielski         m_pRemoveBtn->Hide();
315*b1cdbd2cSJim Jagielski }
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
HandleTabKey(bool bReverse)318*b1cdbd2cSJim Jagielski bool ExtBoxWithBtns_Impl::HandleTabKey( bool bReverse )
319*b1cdbd2cSJim Jagielski {
320*b1cdbd2cSJim Jagielski     sal_Int32 nIndex = getSelIndex();
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski     if ( nIndex == EXTENSION_LISTBOX_ENTRY_NOTFOUND )
323*b1cdbd2cSJim Jagielski         return false;
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     PushButton *pNext = NULL;
326*b1cdbd2cSJim Jagielski 
327*b1cdbd2cSJim Jagielski     if ( m_pOptionsBtn->HasFocus() ) {
328*b1cdbd2cSJim Jagielski         if ( !bReverse && !GetEntryData( nIndex )->m_bLocked )
329*b1cdbd2cSJim Jagielski             pNext = m_pEnableBtn;
330*b1cdbd2cSJim Jagielski     }
331*b1cdbd2cSJim Jagielski     else if ( m_pEnableBtn->HasFocus() ) {
332*b1cdbd2cSJim Jagielski         if ( !bReverse )
333*b1cdbd2cSJim Jagielski             pNext = m_pRemoveBtn;
334*b1cdbd2cSJim Jagielski         else if ( GetEntryData( nIndex )->m_bHasOptions )
335*b1cdbd2cSJim Jagielski             pNext = m_pOptionsBtn;
336*b1cdbd2cSJim Jagielski     }
337*b1cdbd2cSJim Jagielski     else if ( m_pRemoveBtn->HasFocus() ) {
338*b1cdbd2cSJim Jagielski         if ( bReverse )
339*b1cdbd2cSJim Jagielski             pNext = m_pEnableBtn;
340*b1cdbd2cSJim Jagielski     }
341*b1cdbd2cSJim Jagielski     else {
342*b1cdbd2cSJim Jagielski         if ( !bReverse ) {
343*b1cdbd2cSJim Jagielski             if ( GetEntryData( nIndex )->m_bHasOptions )
344*b1cdbd2cSJim Jagielski                 pNext = m_pOptionsBtn;
345*b1cdbd2cSJim Jagielski             else if ( ! GetEntryData( nIndex )->m_bLocked )
346*b1cdbd2cSJim Jagielski                 pNext = m_pEnableBtn;
347*b1cdbd2cSJim Jagielski         } else {
348*b1cdbd2cSJim Jagielski             if ( ! GetEntryData( nIndex )->m_bLocked )
349*b1cdbd2cSJim Jagielski                 pNext = m_pRemoveBtn;
350*b1cdbd2cSJim Jagielski             else if ( GetEntryData( nIndex )->m_bHasOptions )
351*b1cdbd2cSJim Jagielski                 pNext = m_pOptionsBtn;
352*b1cdbd2cSJim Jagielski         }
353*b1cdbd2cSJim Jagielski     }
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski     if ( pNext )
356*b1cdbd2cSJim Jagielski     {
357*b1cdbd2cSJim Jagielski         pNext->GrabFocus();
358*b1cdbd2cSJim Jagielski         return true;
359*b1cdbd2cSJim Jagielski     }
360*b1cdbd2cSJim Jagielski     else
361*b1cdbd2cSJim Jagielski         return false;
362*b1cdbd2cSJim Jagielski }
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
ShowPopupMenu(const Point & rPos,const long nPos)365*b1cdbd2cSJim Jagielski MENU_COMMAND ExtBoxWithBtns_Impl::ShowPopupMenu( const Point & rPos, const long nPos )
366*b1cdbd2cSJim Jagielski {
367*b1cdbd2cSJim Jagielski     if ( nPos >= (long) getItemCount() )
368*b1cdbd2cSJim Jagielski         return CMD_NONE;
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski     PopupMenu aPopup;
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski     aPopup.InsertItem( CMD_UPDATE, DialogHelper::getResourceString( RID_CTX_ITEM_CHECK_UPDATE ) );
373*b1cdbd2cSJim Jagielski 
374*b1cdbd2cSJim Jagielski     if ( ! GetEntryData( nPos )->m_bLocked )
375*b1cdbd2cSJim Jagielski     {
376*b1cdbd2cSJim Jagielski     	if ( GetEntryData( nPos )->m_bUser )
377*b1cdbd2cSJim Jagielski     	{
378*b1cdbd2cSJim Jagielski             if ( GetEntryData( nPos )->m_eState == REGISTERED )
379*b1cdbd2cSJim Jagielski                 aPopup.InsertItem( CMD_DISABLE, DialogHelper::getResourceString( RID_CTX_ITEM_DISABLE ) );
380*b1cdbd2cSJim Jagielski             else if ( GetEntryData( nPos )->m_eState != NOT_AVAILABLE )
381*b1cdbd2cSJim Jagielski                 aPopup.InsertItem( CMD_ENABLE, DialogHelper::getResourceString( RID_CTX_ITEM_ENABLE ) );
382*b1cdbd2cSJim Jagielski         }
383*b1cdbd2cSJim Jagielski         aPopup.InsertItem( CMD_REMOVE, DialogHelper::getResourceString( RID_CTX_ITEM_REMOVE ) );
384*b1cdbd2cSJim Jagielski     }
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski     if ( GetEntryData( nPos )->m_sLicenseText.Len() )
387*b1cdbd2cSJim Jagielski         aPopup.InsertItem( CMD_SHOW_LICENSE, DialogHelper::getResourceString( RID_STR_SHOW_LICENSE_CMD ) );
388*b1cdbd2cSJim Jagielski 
389*b1cdbd2cSJim Jagielski     return (MENU_COMMAND) aPopup.Execute( this, rPos );
390*b1cdbd2cSJim Jagielski }
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
MouseButtonDown(const MouseEvent & rMEvt)393*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::MouseButtonDown( const MouseEvent& rMEvt )
394*b1cdbd2cSJim Jagielski {
395*b1cdbd2cSJim Jagielski     if ( m_bInterfaceLocked )
396*b1cdbd2cSJim Jagielski         return;
397*b1cdbd2cSJim Jagielski 
398*b1cdbd2cSJim Jagielski     const Point aMousePos( rMEvt.GetPosPixel() );
399*b1cdbd2cSJim Jagielski     const long nPos = PointToPos( aMousePos );
400*b1cdbd2cSJim Jagielski 
401*b1cdbd2cSJim Jagielski     if ( rMEvt.IsRight() )
402*b1cdbd2cSJim Jagielski     {
403*b1cdbd2cSJim Jagielski         switch( ShowPopupMenu( aMousePos, nPos ) )
404*b1cdbd2cSJim Jagielski         {
405*b1cdbd2cSJim Jagielski             case CMD_NONE:      break;
406*b1cdbd2cSJim Jagielski             case CMD_ENABLE:    m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, true );
407*b1cdbd2cSJim Jagielski                                 break;
408*b1cdbd2cSJim Jagielski             case CMD_DISABLE:   m_pParent->enablePackage( GetEntryData( nPos )->m_xPackage, false );
409*b1cdbd2cSJim Jagielski                                 break;
410*b1cdbd2cSJim Jagielski             case CMD_UPDATE:    m_pParent->updatePackage( GetEntryData( nPos )->m_xPackage );
411*b1cdbd2cSJim Jagielski                                 break;
412*b1cdbd2cSJim Jagielski             case CMD_REMOVE:    m_pParent->removePackage( GetEntryData( nPos )->m_xPackage );
413*b1cdbd2cSJim Jagielski                                 break;
414*b1cdbd2cSJim Jagielski             case CMD_SHOW_LICENSE:
415*b1cdbd2cSJim Jagielski                 {
416*b1cdbd2cSJim Jagielski                     ShowLicenseDialog aLicenseDlg( m_pParent, GetEntryData( nPos )->m_xPackage );
417*b1cdbd2cSJim Jagielski                     aLicenseDlg.Execute();
418*b1cdbd2cSJim Jagielski                     break;
419*b1cdbd2cSJim Jagielski                 }
420*b1cdbd2cSJim Jagielski         }
421*b1cdbd2cSJim Jagielski     }
422*b1cdbd2cSJim Jagielski     else if ( rMEvt.IsLeft() )
423*b1cdbd2cSJim Jagielski     {
424*b1cdbd2cSJim Jagielski         if ( rMEvt.IsMod1() && HasActive() )
425*b1cdbd2cSJim Jagielski             selectEntry( EXTENSION_LISTBOX_ENTRY_NOTFOUND );   // Selecting an not existing entry will deselect the current one
426*b1cdbd2cSJim Jagielski         else
427*b1cdbd2cSJim Jagielski             selectEntry( nPos );
428*b1cdbd2cSJim Jagielski     }
429*b1cdbd2cSJim Jagielski }
430*b1cdbd2cSJim Jagielski 
431*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Notify(NotifyEvent & rNEvt)432*b1cdbd2cSJim Jagielski long ExtBoxWithBtns_Impl::Notify( NotifyEvent& rNEvt )
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski     bool bHandled = false;
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski     if ( rNEvt.GetType() == EVENT_KEYINPUT )
437*b1cdbd2cSJim Jagielski     {
438*b1cdbd2cSJim Jagielski         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
439*b1cdbd2cSJim Jagielski         KeyCode         aKeyCode = pKEvt->GetKeyCode();
440*b1cdbd2cSJim Jagielski         sal_uInt16          nKeyCode = aKeyCode.GetCode();
441*b1cdbd2cSJim Jagielski 
442*b1cdbd2cSJim Jagielski         if ( nKeyCode == KEY_TAB )
443*b1cdbd2cSJim Jagielski             bHandled = HandleTabKey( aKeyCode.IsShift() );
444*b1cdbd2cSJim Jagielski     }
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski     if ( !bHandled )
447*b1cdbd2cSJim Jagielski         return ExtensionBox_Impl::Notify( rNEvt );
448*b1cdbd2cSJim Jagielski     else
449*b1cdbd2cSJim Jagielski         return true;
450*b1cdbd2cSJim Jagielski }
451*b1cdbd2cSJim Jagielski 
452*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
enableButtons(bool bEnable)453*b1cdbd2cSJim Jagielski void ExtBoxWithBtns_Impl::enableButtons( bool bEnable )
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski     m_bInterfaceLocked = ! bEnable;
456*b1cdbd2cSJim Jagielski 
457*b1cdbd2cSJim Jagielski     if ( bEnable )
458*b1cdbd2cSJim Jagielski     {
459*b1cdbd2cSJim Jagielski         sal_Int32 nIndex = getSelIndex();
460*b1cdbd2cSJim Jagielski         if ( nIndex != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
461*b1cdbd2cSJim Jagielski             SetButtonStatus( GetEntryData( nIndex ) );
462*b1cdbd2cSJim Jagielski     }
463*b1cdbd2cSJim Jagielski     else
464*b1cdbd2cSJim Jagielski     {
465*b1cdbd2cSJim Jagielski         m_pOptionsBtn->Enable( false );
466*b1cdbd2cSJim Jagielski         m_pRemoveBtn->Enable( false );
467*b1cdbd2cSJim Jagielski         m_pEnableBtn->Enable( false );
468*b1cdbd2cSJim Jagielski     }
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtBoxWithBtns_Impl,ScrollHdl,ScrollBar *,pScrBar)472*b1cdbd2cSJim Jagielski IMPL_LINK( ExtBoxWithBtns_Impl, ScrollHdl, ScrollBar*, pScrBar )
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski     long nDelta = pScrBar->GetDelta();
475*b1cdbd2cSJim Jagielski 
476*b1cdbd2cSJim Jagielski     Point aNewOptPt( m_pOptionsBtn->GetPosPixel() - Point( 0, nDelta ) );
477*b1cdbd2cSJim Jagielski     Point aNewRemPt( m_pRemoveBtn->GetPosPixel() - Point( 0, nDelta ) );
478*b1cdbd2cSJim Jagielski     Point aNewEnPt( m_pEnableBtn->GetPosPixel() - Point( 0, nDelta ) );
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski     DoScroll( nDelta );
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski     m_pOptionsBtn->SetPosPixel( aNewOptPt );
483*b1cdbd2cSJim Jagielski     m_pRemoveBtn->SetPosPixel( aNewRemPt );
484*b1cdbd2cSJim Jagielski     m_pEnableBtn->SetPosPixel( aNewEnPt );
485*b1cdbd2cSJim Jagielski 
486*b1cdbd2cSJim Jagielski     return 1;
487*b1cdbd2cSJim Jagielski }
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtBoxWithBtns_Impl,HandleOptionsBtn,void *,EMPTYARG)490*b1cdbd2cSJim Jagielski IMPL_LINK( ExtBoxWithBtns_Impl, HandleOptionsBtn, void*, EMPTYARG )
491*b1cdbd2cSJim Jagielski {
492*b1cdbd2cSJim Jagielski     const sal_Int32 nActive = getSelIndex();
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski     if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
495*b1cdbd2cSJim Jagielski     {
496*b1cdbd2cSJim Jagielski         SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski         if ( pFact )
499*b1cdbd2cSJim Jagielski         {
500*b1cdbd2cSJim Jagielski             OUString sExtensionId = GetEntryData( nActive )->m_xPackage->getIdentifier().Value;
501*b1cdbd2cSJim Jagielski             VclAbstractDialog* pDlg = pFact->CreateOptionsDialog( this, sExtensionId, rtl::OUString() );
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski             pDlg->Execute();
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski             delete pDlg;
506*b1cdbd2cSJim Jagielski         }
507*b1cdbd2cSJim Jagielski     }
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski     return 1;
510*b1cdbd2cSJim Jagielski }
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtBoxWithBtns_Impl,HandleEnableBtn,void *,EMPTYARG)513*b1cdbd2cSJim Jagielski IMPL_LINK( ExtBoxWithBtns_Impl, HandleEnableBtn, void*, EMPTYARG )
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski     const sal_Int32 nActive = getSelIndex();
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski     if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
518*b1cdbd2cSJim Jagielski     {
519*b1cdbd2cSJim Jagielski         TEntry_Impl pEntry = GetEntryData( nActive );
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski         if ( pEntry->m_bMissingLic )
522*b1cdbd2cSJim Jagielski             m_pParent->acceptLicense( pEntry->m_xPackage );
523*b1cdbd2cSJim Jagielski         else
524*b1cdbd2cSJim Jagielski         {
525*b1cdbd2cSJim Jagielski             const bool bEnable( pEntry->m_eState != REGISTERED );
526*b1cdbd2cSJim Jagielski             m_pParent->enablePackage( pEntry->m_xPackage, bEnable );
527*b1cdbd2cSJim Jagielski         }
528*b1cdbd2cSJim Jagielski     }
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski     return 1;
531*b1cdbd2cSJim Jagielski }
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtBoxWithBtns_Impl,HandleRemoveBtn,void *,EMPTYARG)534*b1cdbd2cSJim Jagielski IMPL_LINK( ExtBoxWithBtns_Impl, HandleRemoveBtn, void*, EMPTYARG )
535*b1cdbd2cSJim Jagielski {
536*b1cdbd2cSJim Jagielski     const sal_Int32 nActive = getSelIndex();
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski     if ( nActive != EXTENSION_LISTBOX_ENTRY_NOTFOUND )
539*b1cdbd2cSJim Jagielski     {
540*b1cdbd2cSJim Jagielski         TEntry_Impl pEntry = GetEntryData( nActive );
541*b1cdbd2cSJim Jagielski         m_pParent->removePackage( pEntry->m_xPackage );
542*b1cdbd2cSJim Jagielski     }
543*b1cdbd2cSJim Jagielski 
544*b1cdbd2cSJim Jagielski     return 1;
545*b1cdbd2cSJim Jagielski }
546*b1cdbd2cSJim Jagielski 
547*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
548*b1cdbd2cSJim Jagielski //                             DialogHelper
549*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
DialogHelper(const uno::Reference<uno::XComponentContext> & xContext,Dialog * pWindow)550*b1cdbd2cSJim Jagielski DialogHelper::DialogHelper( const uno::Reference< uno::XComponentContext > &xContext,
551*b1cdbd2cSJim Jagielski                             Dialog *pWindow ) :
552*b1cdbd2cSJim Jagielski     m_pVCLWindow( pWindow ),
553*b1cdbd2cSJim Jagielski     m_nEventID(   0 ),
554*b1cdbd2cSJim Jagielski     m_bIsBusy(    false )
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski     m_xContext = xContext;
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~DialogHelper()560*b1cdbd2cSJim Jagielski DialogHelper::~DialogHelper()
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski     if ( m_nEventID )
563*b1cdbd2cSJim Jagielski         Application::RemoveUserEvent( m_nEventID );
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getResId(sal_uInt16 nId)567*b1cdbd2cSJim Jagielski ResId DialogHelper::getResId( sal_uInt16 nId )
568*b1cdbd2cSJim Jagielski {
569*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
570*b1cdbd2cSJim Jagielski     return ResId( nId, *DeploymentGuiResMgr::get() );
571*b1cdbd2cSJim Jagielski }
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
getResourceString(sal_uInt16 id)574*b1cdbd2cSJim Jagielski String DialogHelper::getResourceString( sal_uInt16 id )
575*b1cdbd2cSJim Jagielski {
576*b1cdbd2cSJim Jagielski     // init with non-acquired solar mutex:
577*b1cdbd2cSJim Jagielski     BrandName::get();
578*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
579*b1cdbd2cSJim Jagielski     String ret( ResId( id, *DeploymentGuiResMgr::get() ) );
580*b1cdbd2cSJim Jagielski     if (ret.SearchAscii( "%PRODUCTNAME" ) != STRING_NOTFOUND) {
581*b1cdbd2cSJim Jagielski         ret.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
582*b1cdbd2cSJim Jagielski     }
583*b1cdbd2cSJim Jagielski     return ret;
584*b1cdbd2cSJim Jagielski }
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IsSharedPkgMgr(const uno::Reference<deployment::XPackage> & xPackage)587*b1cdbd2cSJim Jagielski bool DialogHelper::IsSharedPkgMgr( const uno::Reference< deployment::XPackage > &xPackage )
588*b1cdbd2cSJim Jagielski {
589*b1cdbd2cSJim Jagielski     if ( xPackage->getRepositoryName().equals( OUSTR("shared") ) )
590*b1cdbd2cSJim Jagielski         return true;
591*b1cdbd2cSJim Jagielski     else
592*b1cdbd2cSJim Jagielski         return false;
593*b1cdbd2cSJim Jagielski }
594*b1cdbd2cSJim Jagielski 
595*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
continueOnSharedExtension(const uno::Reference<deployment::XPackage> & xPackage,Window * pParent,const sal_uInt16 nResID,bool & bHadWarning)596*b1cdbd2cSJim Jagielski bool DialogHelper::continueOnSharedExtension( const uno::Reference< deployment::XPackage > &xPackage,
597*b1cdbd2cSJim Jagielski                                               Window *pParent,
598*b1cdbd2cSJim Jagielski                                               const sal_uInt16 nResID,
599*b1cdbd2cSJim Jagielski                                               bool &bHadWarning )
600*b1cdbd2cSJim Jagielski {
601*b1cdbd2cSJim Jagielski     if ( !bHadWarning && IsSharedPkgMgr( xPackage ) )
602*b1cdbd2cSJim Jagielski     {
603*b1cdbd2cSJim Jagielski         const ::vos::OGuard guard( Application::GetSolarMutex() );
604*b1cdbd2cSJim Jagielski         WarningBox aInfoBox( pParent, getResId( nResID ) );
605*b1cdbd2cSJim Jagielski         String aMsgText = aInfoBox.GetMessText();
606*b1cdbd2cSJim Jagielski         aMsgText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
607*b1cdbd2cSJim Jagielski         aInfoBox.SetMessText( aMsgText );
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski         bHadWarning = true;
610*b1cdbd2cSJim Jagielski 
611*b1cdbd2cSJim Jagielski         if ( RET_OK == aInfoBox.Execute() )
612*b1cdbd2cSJim Jagielski             return true;
613*b1cdbd2cSJim Jagielski         else
614*b1cdbd2cSJim Jagielski             return false;
615*b1cdbd2cSJim Jagielski     }
616*b1cdbd2cSJim Jagielski     else
617*b1cdbd2cSJim Jagielski         return true;
618*b1cdbd2cSJim Jagielski }
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
openWebBrowser(const OUString & sURL,const OUString & sTitle) const621*b1cdbd2cSJim Jagielski void DialogHelper::openWebBrowser( const OUString & sURL, const OUString &sTitle ) const
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski     if ( ! sURL.getLength() ) // Nothing to do, when the URL is empty
624*b1cdbd2cSJim Jagielski         return;
625*b1cdbd2cSJim Jagielski 
626*b1cdbd2cSJim Jagielski     try
627*b1cdbd2cSJim Jagielski     {
628*b1cdbd2cSJim Jagielski         uno::Reference< XSystemShellExecute > xSystemShellExecute(
629*b1cdbd2cSJim Jagielski             com::sun::star::system::SystemShellExecute::create( m_xContext ) );
630*b1cdbd2cSJim Jagielski         //throws css::lang::IllegalArgumentException, css::system::SystemShellExecuteException
631*b1cdbd2cSJim Jagielski         xSystemShellExecute->execute( sURL, OUString(),  SystemShellExecuteFlags::DEFAULTS );
632*b1cdbd2cSJim Jagielski     }
633*b1cdbd2cSJim Jagielski     catch ( uno::Exception& )
634*b1cdbd2cSJim Jagielski     {
635*b1cdbd2cSJim Jagielski         uno::Any exc( ::cppu::getCaughtException() );
636*b1cdbd2cSJim Jagielski         OUString msg( ::comphelper::anyToString( exc ) );
637*b1cdbd2cSJim Jagielski         const ::vos::OGuard guard( Application::GetSolarMutex() );
638*b1cdbd2cSJim Jagielski         ErrorBox aErrorBox( NULL, WB_OK, msg );
639*b1cdbd2cSJim Jagielski         aErrorBox.SetText( sTitle );
640*b1cdbd2cSJim Jagielski         aErrorBox.Execute();
641*b1cdbd2cSJim Jagielski     }
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
installExtensionWarn(const OUString & rExtensionName) const645*b1cdbd2cSJim Jagielski bool DialogHelper::installExtensionWarn( const OUString &rExtensionName ) const
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
648*b1cdbd2cSJim Jagielski     WarningBox aInfo( m_pVCLWindow, getResId( RID_WARNINGBOX_INSTALL_EXTENSION ) );
649*b1cdbd2cSJim Jagielski 
650*b1cdbd2cSJim Jagielski     String sText( aInfo.GetMessText() );
651*b1cdbd2cSJim Jagielski     sText.SearchAndReplaceAllAscii( "%NAME", rExtensionName );
652*b1cdbd2cSJim Jagielski     aInfo.SetMessText( sText );
653*b1cdbd2cSJim Jagielski 
654*b1cdbd2cSJim Jagielski     return ( RET_OK == aInfo.Execute() );
655*b1cdbd2cSJim Jagielski }
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
installForAllUsers(bool & bInstallForAll) const658*b1cdbd2cSJim Jagielski bool DialogHelper::installForAllUsers( bool &bInstallForAll ) const
659*b1cdbd2cSJim Jagielski {
660*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
661*b1cdbd2cSJim Jagielski     QueryBox aQuery( m_pVCLWindow, getResId( RID_QUERYBOX_INSTALL_FOR_ALL ) );
662*b1cdbd2cSJim Jagielski 
663*b1cdbd2cSJim Jagielski     String sMsgText = aQuery.GetMessText();
664*b1cdbd2cSJim Jagielski     sMsgText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
665*b1cdbd2cSJim Jagielski     aQuery.SetMessText( sMsgText );
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski     sal_uInt16 nYesBtnID = aQuery.GetButtonId( 0 );
668*b1cdbd2cSJim Jagielski     sal_uInt16 nNoBtnID = aQuery.GetButtonId( 1 );
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski     if ( nYesBtnID != BUTTONDIALOG_BUTTON_NOTFOUND )
671*b1cdbd2cSJim Jagielski         aQuery.SetButtonText( nYesBtnID, getResourceString( RID_STR_INSTALL_FOR_ME ) );
672*b1cdbd2cSJim Jagielski     if ( nNoBtnID != BUTTONDIALOG_BUTTON_NOTFOUND )
673*b1cdbd2cSJim Jagielski         aQuery.SetButtonText( nNoBtnID, getResourceString( RID_STR_INSTALL_FOR_ALL ) );
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski     short nRet = aQuery.Execute();
676*b1cdbd2cSJim Jagielski 
677*b1cdbd2cSJim Jagielski     if ( nRet == RET_CANCEL )
678*b1cdbd2cSJim Jagielski         return false;
679*b1cdbd2cSJim Jagielski 
680*b1cdbd2cSJim Jagielski     bInstallForAll = ( nRet == RET_NO );
681*b1cdbd2cSJim Jagielski     return true;
682*b1cdbd2cSJim Jagielski }
683*b1cdbd2cSJim Jagielski 
684*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
PostUserEvent(const Link & rLink,void * pCaller)685*b1cdbd2cSJim Jagielski void DialogHelper::PostUserEvent( const Link& rLink, void* pCaller )
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski     if ( m_nEventID )
688*b1cdbd2cSJim Jagielski         Application::RemoveUserEvent( m_nEventID );
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski     m_nEventID = Application::PostUserEvent( rLink, pCaller );
691*b1cdbd2cSJim Jagielski }
692*b1cdbd2cSJim Jagielski 
693*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
694*b1cdbd2cSJim Jagielski //                             ExtMgrDialog
695*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
ExtMgrDialog(Window * pParent,TheExtensionManager * pManager)696*b1cdbd2cSJim Jagielski ExtMgrDialog::ExtMgrDialog( Window *pParent, TheExtensionManager *pManager ) :
697*b1cdbd2cSJim Jagielski     ModelessDialog( pParent, getResId( RID_DLG_EXTENSION_MANAGER ) ),
698*b1cdbd2cSJim Jagielski     DialogHelper( pManager->getContext(), (Dialog*) this ),
699*b1cdbd2cSJim Jagielski     m_aAddBtn( this,        getResId( RID_EM_BTN_ADD ) ),
700*b1cdbd2cSJim Jagielski     m_aUpdateBtn( this,     getResId( RID_EM_BTN_CHECK_UPDATES ) ),
701*b1cdbd2cSJim Jagielski     m_aCloseBtn( this,      getResId( RID_EM_BTN_CLOSE ) ),
702*b1cdbd2cSJim Jagielski     m_aHelpBtn( this,       getResId( RID_EM_BTN_HELP ) ),
703*b1cdbd2cSJim Jagielski     m_aDivider( this ),
704*b1cdbd2cSJim Jagielski     m_aGetExtensions( this, getResId( RID_EM_FT_GET_EXTENSIONS ) ),
705*b1cdbd2cSJim Jagielski     m_aProgressText( this,  getResId( RID_EM_FT_PROGRESS ) ),
706*b1cdbd2cSJim Jagielski     m_aProgressBar( this,   WB_BORDER + WB_3DLOOK ),
707*b1cdbd2cSJim Jagielski     m_aCancelBtn( this,     getResId( RID_EM_BTN_CANCEL ) ),
708*b1cdbd2cSJim Jagielski     m_sAddPackages(         getResourceString( RID_STR_ADD_PACKAGES ) ),
709*b1cdbd2cSJim Jagielski     m_bHasProgress(         false ),
710*b1cdbd2cSJim Jagielski     m_bProgressChanged(     false ),
711*b1cdbd2cSJim Jagielski     m_bStartProgress(       false ),
712*b1cdbd2cSJim Jagielski     m_bStopProgress(        false ),
713*b1cdbd2cSJim Jagielski     m_bUpdateWarning(       false ),
714*b1cdbd2cSJim Jagielski     m_bEnableWarning(       false ),
715*b1cdbd2cSJim Jagielski     m_bDisableWarning(      false ),
716*b1cdbd2cSJim Jagielski     m_bDeleteWarning(       false ),
717*b1cdbd2cSJim Jagielski     m_nProgress(            0 ),
718*b1cdbd2cSJim Jagielski     m_pManager( pManager )
719*b1cdbd2cSJim Jagielski {
720*b1cdbd2cSJim Jagielski     // free local resources (RID < 256):
721*b1cdbd2cSJim Jagielski     FreeResource();
722*b1cdbd2cSJim Jagielski 
723*b1cdbd2cSJim Jagielski     m_pExtensionBox = new ExtBoxWithBtns_Impl( this, pManager );
724*b1cdbd2cSJim Jagielski     m_pExtensionBox->SetHyperlinkHdl( LINK( this, ExtMgrDialog, HandleHyperlink ) );
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski     m_aAddBtn.SetClickHdl( LINK( this, ExtMgrDialog, HandleAddBtn ) );
727*b1cdbd2cSJim Jagielski     m_aUpdateBtn.SetClickHdl( LINK( this, ExtMgrDialog, HandleUpdateBtn ) );
728*b1cdbd2cSJim Jagielski     m_aGetExtensions.SetClickHdl( LINK( this, ExtMgrDialog, HandleHyperlink ) );
729*b1cdbd2cSJim Jagielski     m_aCancelBtn.SetClickHdl( LINK( this, ExtMgrDialog, HandleCancelBtn ) );
730*b1cdbd2cSJim Jagielski 
731*b1cdbd2cSJim Jagielski     // resize update button
732*b1cdbd2cSJim Jagielski     Size aBtnSize = m_aUpdateBtn.GetSizePixel();
733*b1cdbd2cSJim Jagielski     String sTitle = m_aUpdateBtn.GetText();
734*b1cdbd2cSJim Jagielski     long nWidth = m_aUpdateBtn.GetCtrlTextWidth( sTitle );
735*b1cdbd2cSJim Jagielski     nWidth += 2 * m_aUpdateBtn.GetTextHeight();
736*b1cdbd2cSJim Jagielski     if ( nWidth > aBtnSize.Width() )
737*b1cdbd2cSJim Jagielski         m_aUpdateBtn.SetSizePixel( Size( nWidth, aBtnSize.Height() ) );
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski     // minimum size:
740*b1cdbd2cSJim Jagielski     SetMinOutputSizePixel(
741*b1cdbd2cSJim Jagielski         Size( // width:
742*b1cdbd2cSJim Jagielski               (3 * m_aHelpBtn.GetSizePixel().Width()) +
743*b1cdbd2cSJim Jagielski                    m_aUpdateBtn.GetSizePixel().Width() +
744*b1cdbd2cSJim Jagielski               (5 * RSC_SP_DLG_INNERBORDER_LEFT ),
745*b1cdbd2cSJim Jagielski               // height:
746*b1cdbd2cSJim Jagielski               (1 * m_aHelpBtn.GetSizePixel().Height()) +
747*b1cdbd2cSJim Jagielski               (1 * m_aGetExtensions.GetSizePixel().Height()) +
748*b1cdbd2cSJim Jagielski               (1 * m_pExtensionBox->GetMinOutputSizePixel().Height()) +
749*b1cdbd2cSJim Jagielski               (3 * RSC_SP_DLG_INNERBORDER_LEFT) ) );
750*b1cdbd2cSJim Jagielski 
751*b1cdbd2cSJim Jagielski     m_aDivider.Show();
752*b1cdbd2cSJim Jagielski     m_aProgressBar.Hide();
753*b1cdbd2cSJim Jagielski 
754*b1cdbd2cSJim Jagielski     m_aUpdateBtn.Enable( false );
755*b1cdbd2cSJim Jagielski 
756*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.SetTimeout( 500 ); // mSec
757*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.SetTimeoutHdl( LINK( this, ExtMgrDialog, TimeOutHdl ) );
758*b1cdbd2cSJim Jagielski }
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~ExtMgrDialog()761*b1cdbd2cSJim Jagielski ExtMgrDialog::~ExtMgrDialog()
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.Stop();
764*b1cdbd2cSJim Jagielski     delete m_pExtensionBox;
765*b1cdbd2cSJim Jagielski }
766*b1cdbd2cSJim Jagielski 
767*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
setGetExtensionsURL(const::rtl::OUString & rURL)768*b1cdbd2cSJim Jagielski void ExtMgrDialog::setGetExtensionsURL( const ::rtl::OUString &rURL )
769*b1cdbd2cSJim Jagielski {
770*b1cdbd2cSJim Jagielski     m_aGetExtensions.SetURL( rURL );
771*b1cdbd2cSJim Jagielski }
772*b1cdbd2cSJim Jagielski 
773*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
addPackageToList(const uno::Reference<deployment::XPackage> & xPackage,bool bLicenseMissing)774*b1cdbd2cSJim Jagielski long ExtMgrDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
775*b1cdbd2cSJim Jagielski                                      bool bLicenseMissing )
776*b1cdbd2cSJim Jagielski {
777*b1cdbd2cSJim Jagielski     m_aUpdateBtn.Enable( true );
778*b1cdbd2cSJim Jagielski     return m_pExtensionBox->addEntry( xPackage, bLicenseMissing );
779*b1cdbd2cSJim Jagielski }
780*b1cdbd2cSJim Jagielski 
781*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
prepareChecking()782*b1cdbd2cSJim Jagielski void ExtMgrDialog::prepareChecking()
783*b1cdbd2cSJim Jagielski {
784*b1cdbd2cSJim Jagielski     m_pExtensionBox->prepareChecking();
785*b1cdbd2cSJim Jagielski }
786*b1cdbd2cSJim Jagielski 
787*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
checkEntries()788*b1cdbd2cSJim Jagielski void ExtMgrDialog::checkEntries()
789*b1cdbd2cSJim Jagielski {
790*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
791*b1cdbd2cSJim Jagielski     m_pExtensionBox->checkEntries();
792*b1cdbd2cSJim Jagielski }
793*b1cdbd2cSJim Jagielski 
794*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
removeExtensionWarn(const OUString & rExtensionName) const795*b1cdbd2cSJim Jagielski bool ExtMgrDialog::removeExtensionWarn( const OUString &rExtensionName ) const
796*b1cdbd2cSJim Jagielski {
797*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
798*b1cdbd2cSJim Jagielski     WarningBox aInfo( const_cast< ExtMgrDialog* >(this), getResId( RID_WARNINGBOX_REMOVE_EXTENSION ) );
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski     String sText( aInfo.GetMessText() );
801*b1cdbd2cSJim Jagielski     sText.SearchAndReplaceAllAscii( "%NAME", rExtensionName );
802*b1cdbd2cSJim Jagielski     aInfo.SetMessText( sText );
803*b1cdbd2cSJim Jagielski 
804*b1cdbd2cSJim Jagielski     return ( RET_OK == aInfo.Execute() );
805*b1cdbd2cSJim Jagielski }
806*b1cdbd2cSJim Jagielski 
807*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
enablePackage(const uno::Reference<deployment::XPackage> & xPackage,bool bEnable)808*b1cdbd2cSJim Jagielski bool ExtMgrDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
809*b1cdbd2cSJim Jagielski                                   bool bEnable )
810*b1cdbd2cSJim Jagielski {
811*b1cdbd2cSJim Jagielski     if ( !xPackage.is() )
812*b1cdbd2cSJim Jagielski         return false;
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski     if ( bEnable )
815*b1cdbd2cSJim Jagielski     {
816*b1cdbd2cSJim Jagielski         if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_ENABLE_SHARED_EXTENSION, m_bEnableWarning ) )
817*b1cdbd2cSJim Jagielski             return false;
818*b1cdbd2cSJim Jagielski     }
819*b1cdbd2cSJim Jagielski     else
820*b1cdbd2cSJim Jagielski     {
821*b1cdbd2cSJim Jagielski         if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_DISABLE_SHARED_EXTENSION, m_bDisableWarning ) )
822*b1cdbd2cSJim Jagielski             return false;
823*b1cdbd2cSJim Jagielski     }
824*b1cdbd2cSJim Jagielski 
825*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
826*b1cdbd2cSJim Jagielski 
827*b1cdbd2cSJim Jagielski     return true;
828*b1cdbd2cSJim Jagielski }
829*b1cdbd2cSJim Jagielski 
830*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
removePackage(const uno::Reference<deployment::XPackage> & xPackage)831*b1cdbd2cSJim Jagielski bool ExtMgrDialog::removePackage( const uno::Reference< deployment::XPackage > &xPackage )
832*b1cdbd2cSJim Jagielski {
833*b1cdbd2cSJim Jagielski     if ( !xPackage.is() )
834*b1cdbd2cSJim Jagielski         return false;
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski     if ( !IsSharedPkgMgr( xPackage ) || m_bDeleteWarning )
837*b1cdbd2cSJim Jagielski     {
838*b1cdbd2cSJim Jagielski         if ( ! removeExtensionWarn( xPackage->getDisplayName() ) )
839*b1cdbd2cSJim Jagielski             return false;
840*b1cdbd2cSJim Jagielski     }
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski     if ( ! continueOnSharedExtension( xPackage, this, RID_WARNINGBOX_REMOVE_SHARED_EXTENSION, m_bDeleteWarning ) )
843*b1cdbd2cSJim Jagielski         return false;
844*b1cdbd2cSJim Jagielski 
845*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->removeExtension( xPackage );
846*b1cdbd2cSJim Jagielski 
847*b1cdbd2cSJim Jagielski     return true;
848*b1cdbd2cSJim Jagielski }
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
updatePackage(const uno::Reference<deployment::XPackage> & xPackage)851*b1cdbd2cSJim Jagielski bool ExtMgrDialog::updatePackage( const uno::Reference< deployment::XPackage > &xPackage )
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski     if ( !xPackage.is() )
854*b1cdbd2cSJim Jagielski         return false;
855*b1cdbd2cSJim Jagielski 
856*b1cdbd2cSJim Jagielski 	// get the extension with highest version
857*b1cdbd2cSJim Jagielski 	uno::Sequence<uno::Reference<deployment::XPackage> > seqExtensions =
858*b1cdbd2cSJim Jagielski 	m_pManager->getExtensionManager()->getExtensionsWithSameIdentifier(
859*b1cdbd2cSJim Jagielski 		dp_misc::getIdentifier(xPackage), xPackage->getName(), uno::Reference<ucb::XCommandEnvironment>());
860*b1cdbd2cSJim Jagielski 	uno::Reference<deployment::XPackage> extension =
861*b1cdbd2cSJim Jagielski 		dp_misc::getExtensionWithHighestVersion(seqExtensions);
862*b1cdbd2cSJim Jagielski 	OSL_ASSERT(extension.is());
863*b1cdbd2cSJim Jagielski     std::vector< css::uno::Reference< css::deployment::XPackage > > vEntries;
864*b1cdbd2cSJim Jagielski     vEntries.push_back(extension);
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->checkForUpdates( vEntries );
867*b1cdbd2cSJim Jagielski 
868*b1cdbd2cSJim Jagielski     return true;
869*b1cdbd2cSJim Jagielski }
870*b1cdbd2cSJim Jagielski 
871*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
acceptLicense(const uno::Reference<deployment::XPackage> & xPackage)872*b1cdbd2cSJim Jagielski bool ExtMgrDialog::acceptLicense( const uno::Reference< deployment::XPackage > &xPackage )
873*b1cdbd2cSJim Jagielski {
874*b1cdbd2cSJim Jagielski     if ( !xPackage.is() )
875*b1cdbd2cSJim Jagielski         return false;
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->acceptLicense( xPackage );
878*b1cdbd2cSJim Jagielski 
879*b1cdbd2cSJim Jagielski     return true;
880*b1cdbd2cSJim Jagielski }
881*b1cdbd2cSJim Jagielski 
882*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
raiseAddPicker()883*b1cdbd2cSJim Jagielski uno::Sequence< OUString > ExtMgrDialog::raiseAddPicker()
884*b1cdbd2cSJim Jagielski {
885*b1cdbd2cSJim Jagielski     const uno::Any mode( static_cast< sal_Int16 >( ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE ) );
886*b1cdbd2cSJim Jagielski     const uno::Reference< uno::XComponentContext > xContext( m_pManager->getContext() );
887*b1cdbd2cSJim Jagielski     const uno::Reference< ui::dialogs::XFilePicker > xFilePicker(
888*b1cdbd2cSJim Jagielski         xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
889*b1cdbd2cSJim Jagielski             OUSTR("com.sun.star.ui.dialogs.FilePicker"),
890*b1cdbd2cSJim Jagielski             uno::Sequence< uno::Any >( &mode, 1 ), xContext ), uno::UNO_QUERY_THROW );
891*b1cdbd2cSJim Jagielski     xFilePicker->setTitle( m_sAddPackages );
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski     if ( m_sLastFolderURL.Len() )
894*b1cdbd2cSJim Jagielski         xFilePicker->setDisplayDirectory( m_sLastFolderURL );
895*b1cdbd2cSJim Jagielski 
896*b1cdbd2cSJim Jagielski     // collect and set filter list:
897*b1cdbd2cSJim Jagielski     typedef ::std::map< OUString, OUString > t_string2string;
898*b1cdbd2cSJim Jagielski     t_string2string title2filter;
899*b1cdbd2cSJim Jagielski     OUString sDefaultFilter( StrAllFiles::get() );
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski     const uno::Sequence< uno::Reference< deployment::XPackageTypeInfo > > packageTypes(
902*b1cdbd2cSJim Jagielski         m_pManager->getExtensionManager()->getSupportedPackageTypes() );
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski     for ( sal_Int32 pos = 0; pos < packageTypes.getLength(); ++pos )
905*b1cdbd2cSJim Jagielski     {
906*b1cdbd2cSJim Jagielski         uno::Reference< deployment::XPackageTypeInfo > const & xPackageType = packageTypes[ pos ];
907*b1cdbd2cSJim Jagielski         const OUString filter( xPackageType->getFileFilter() );
908*b1cdbd2cSJim Jagielski         if (filter.getLength() > 0)
909*b1cdbd2cSJim Jagielski         {
910*b1cdbd2cSJim Jagielski             const OUString title( xPackageType->getShortDescription() );
911*b1cdbd2cSJim Jagielski             const ::std::pair< t_string2string::iterator, bool > insertion(
912*b1cdbd2cSJim Jagielski                 title2filter.insert( t_string2string::value_type( title, filter ) ) );
913*b1cdbd2cSJim Jagielski             if ( ! insertion.second )
914*b1cdbd2cSJim Jagielski             { // already existing, append extensions:
915*b1cdbd2cSJim Jagielski                 ::rtl::OUStringBuffer buf;
916*b1cdbd2cSJim Jagielski                 buf.append( insertion.first->second );
917*b1cdbd2cSJim Jagielski                 buf.append( static_cast<sal_Unicode>(';') );
918*b1cdbd2cSJim Jagielski                 buf.append( filter );
919*b1cdbd2cSJim Jagielski                 insertion.first->second = buf.makeStringAndClear();
920*b1cdbd2cSJim Jagielski             }
921*b1cdbd2cSJim Jagielski             if ( xPackageType->getMediaType() == OUSTR( "application/vnd.sun.star.package-bundle" ) )
922*b1cdbd2cSJim Jagielski                 sDefaultFilter = title;
923*b1cdbd2cSJim Jagielski         }
924*b1cdbd2cSJim Jagielski     }
925*b1cdbd2cSJim Jagielski 
926*b1cdbd2cSJim Jagielski     const uno::Reference< ui::dialogs::XFilterManager > xFilterManager( xFilePicker, uno::UNO_QUERY_THROW );
927*b1cdbd2cSJim Jagielski     // All files at top:
928*b1cdbd2cSJim Jagielski     xFilterManager->appendFilter( StrAllFiles::get(), OUSTR("*.*") );
929*b1cdbd2cSJim Jagielski     // then supported ones:
930*b1cdbd2cSJim Jagielski     t_string2string::const_iterator iPos( title2filter.begin() );
931*b1cdbd2cSJim Jagielski     const t_string2string::const_iterator iEnd( title2filter.end() );
932*b1cdbd2cSJim Jagielski     for ( ; iPos != iEnd; ++iPos ) {
933*b1cdbd2cSJim Jagielski         try {
934*b1cdbd2cSJim Jagielski             xFilterManager->appendFilter( iPos->first, iPos->second );
935*b1cdbd2cSJim Jagielski         }
936*b1cdbd2cSJim Jagielski         catch (lang::IllegalArgumentException & exc) {
937*b1cdbd2cSJim Jagielski             OSL_ENSURE( 0, ::rtl::OUStringToOString(
938*b1cdbd2cSJim Jagielski                             exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
939*b1cdbd2cSJim Jagielski             (void) exc;
940*b1cdbd2cSJim Jagielski         }
941*b1cdbd2cSJim Jagielski     }
942*b1cdbd2cSJim Jagielski     xFilterManager->setCurrentFilter( sDefaultFilter );
943*b1cdbd2cSJim Jagielski 
944*b1cdbd2cSJim Jagielski     if ( xFilePicker->execute() != ui::dialogs::ExecutableDialogResults::OK )
945*b1cdbd2cSJim Jagielski         return uno::Sequence<OUString>(); // cancelled
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski     m_sLastFolderURL = xFilePicker->getDisplayDirectory();
948*b1cdbd2cSJim Jagielski     uno::Sequence< OUString > files( xFilePicker->getFiles() );
949*b1cdbd2cSJim Jagielski     OSL_ASSERT( files.getLength() > 0 );
950*b1cdbd2cSJim Jagielski     return files;
951*b1cdbd2cSJim Jagielski }
952*b1cdbd2cSJim Jagielski 
953*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,HandleCancelBtn,void *,EMPTYARG)954*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, HandleCancelBtn, void*, EMPTYARG )
955*b1cdbd2cSJim Jagielski {
956*b1cdbd2cSJim Jagielski     // m_dialog->m_cmdEnv->m_aborted = true;
957*b1cdbd2cSJim Jagielski     if ( m_xAbortChannel.is() )
958*b1cdbd2cSJim Jagielski     {
959*b1cdbd2cSJim Jagielski         try
960*b1cdbd2cSJim Jagielski         {
961*b1cdbd2cSJim Jagielski             m_xAbortChannel->sendAbort();
962*b1cdbd2cSJim Jagielski         }
963*b1cdbd2cSJim Jagielski         catch ( uno::RuntimeException & )
964*b1cdbd2cSJim Jagielski         {
965*b1cdbd2cSJim Jagielski             OSL_ENSURE( 0, "### unexpected RuntimeException!" );
966*b1cdbd2cSJim Jagielski         }
967*b1cdbd2cSJim Jagielski     }
968*b1cdbd2cSJim Jagielski     return 1;
969*b1cdbd2cSJim Jagielski }
970*b1cdbd2cSJim Jagielski 
971*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,startProgress,void *,_bLockInterface)972*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, startProgress, void*, _bLockInterface )
973*b1cdbd2cSJim Jagielski {
974*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
975*b1cdbd2cSJim Jagielski     bool bLockInterface = (bool) _bLockInterface;
976*b1cdbd2cSJim Jagielski 
977*b1cdbd2cSJim Jagielski     if ( m_bStartProgress && !m_bHasProgress )
978*b1cdbd2cSJim Jagielski         m_aTimeoutTimer.Start();
979*b1cdbd2cSJim Jagielski 
980*b1cdbd2cSJim Jagielski     if ( m_bStopProgress )
981*b1cdbd2cSJim Jagielski     {
982*b1cdbd2cSJim Jagielski 		if ( m_aProgressBar.IsVisible() )
983*b1cdbd2cSJim Jagielski 	        m_aProgressBar.SetValue( 100 );
984*b1cdbd2cSJim Jagielski         m_xAbortChannel.clear();
985*b1cdbd2cSJim Jagielski 
986*b1cdbd2cSJim Jagielski         OSL_TRACE( " startProgress handler: stop\n" );
987*b1cdbd2cSJim Jagielski     }
988*b1cdbd2cSJim Jagielski     else
989*b1cdbd2cSJim Jagielski     {
990*b1cdbd2cSJim Jagielski         OSL_TRACE( " startProgress handler: start\n" );
991*b1cdbd2cSJim Jagielski     }
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski     m_aCancelBtn.Enable( bLockInterface );
994*b1cdbd2cSJim Jagielski     m_aAddBtn.Enable( !bLockInterface );
995*b1cdbd2cSJim Jagielski     m_aUpdateBtn.Enable( !bLockInterface && m_pExtensionBox->getItemCount() );
996*b1cdbd2cSJim Jagielski     m_pExtensionBox->enableButtons( !bLockInterface );
997*b1cdbd2cSJim Jagielski 
998*b1cdbd2cSJim Jagielski     clearEventID();
999*b1cdbd2cSJim Jagielski 
1000*b1cdbd2cSJim Jagielski     return 0;
1001*b1cdbd2cSJim Jagielski }
1002*b1cdbd2cSJim Jagielski 
1003*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------------
showProgress(bool _bStart)1004*b1cdbd2cSJim Jagielski void ExtMgrDialog::showProgress( bool _bStart )
1005*b1cdbd2cSJim Jagielski {
1006*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski     bool bStart = _bStart;
1009*b1cdbd2cSJim Jagielski 
1010*b1cdbd2cSJim Jagielski     if ( bStart )
1011*b1cdbd2cSJim Jagielski     {
1012*b1cdbd2cSJim Jagielski         m_nProgress = 0;
1013*b1cdbd2cSJim Jagielski         m_bStartProgress = true;
1014*b1cdbd2cSJim Jagielski         OSL_TRACE( "showProgress start\n" );
1015*b1cdbd2cSJim Jagielski     }
1016*b1cdbd2cSJim Jagielski     else
1017*b1cdbd2cSJim Jagielski     {
1018*b1cdbd2cSJim Jagielski         m_nProgress = 100;
1019*b1cdbd2cSJim Jagielski         m_bStopProgress = true;
1020*b1cdbd2cSJim Jagielski         OSL_TRACE( "showProgress stop!\n" );
1021*b1cdbd2cSJim Jagielski     }
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski     DialogHelper::PostUserEvent( LINK( this, ExtMgrDialog, startProgress ), (void*) bStart );
1024*b1cdbd2cSJim Jagielski }
1025*b1cdbd2cSJim Jagielski 
1026*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
updateProgress(const long nProgress)1027*b1cdbd2cSJim Jagielski void ExtMgrDialog::updateProgress( const long nProgress )
1028*b1cdbd2cSJim Jagielski {
1029*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1030*b1cdbd2cSJim Jagielski 
1031*b1cdbd2cSJim Jagielski     m_nProgress = nProgress;
1032*b1cdbd2cSJim Jagielski }
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
updateProgress(const OUString & rText,const uno::Reference<task::XAbortChannel> & xAbortChannel)1035*b1cdbd2cSJim Jagielski void ExtMgrDialog::updateProgress( const OUString &rText,
1036*b1cdbd2cSJim Jagielski                                    const uno::Reference< task::XAbortChannel > &xAbortChannel)
1037*b1cdbd2cSJim Jagielski {
1038*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1039*b1cdbd2cSJim Jagielski 
1040*b1cdbd2cSJim Jagielski     m_xAbortChannel = xAbortChannel;
1041*b1cdbd2cSJim Jagielski     m_sProgressText = rText;
1042*b1cdbd2cSJim Jagielski     m_bProgressChanged = true;
1043*b1cdbd2cSJim Jagielski }
1044*b1cdbd2cSJim Jagielski 
1045*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
updatePackageInfo(const uno::Reference<deployment::XPackage> & xPackage)1046*b1cdbd2cSJim Jagielski void ExtMgrDialog::updatePackageInfo( const uno::Reference< deployment::XPackage > &xPackage )
1047*b1cdbd2cSJim Jagielski {
1048*b1cdbd2cSJim Jagielski     m_pExtensionBox->updateEntry( xPackage );
1049*b1cdbd2cSJim Jagielski }
1050*b1cdbd2cSJim Jagielski 
1051*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,HandleAddBtn,void *,EMPTYARG)1052*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, HandleAddBtn, void*, EMPTYARG )
1053*b1cdbd2cSJim Jagielski {
1054*b1cdbd2cSJim Jagielski     setBusy( true );
1055*b1cdbd2cSJim Jagielski 
1056*b1cdbd2cSJim Jagielski     uno::Sequence< OUString > aFileList = raiseAddPicker();
1057*b1cdbd2cSJim Jagielski 
1058*b1cdbd2cSJim Jagielski     if ( aFileList.getLength() )
1059*b1cdbd2cSJim Jagielski     {
1060*b1cdbd2cSJim Jagielski         m_pManager->installPackage( aFileList[0] );
1061*b1cdbd2cSJim Jagielski     }
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski     setBusy( false );
1064*b1cdbd2cSJim Jagielski     return 1;
1065*b1cdbd2cSJim Jagielski }
1066*b1cdbd2cSJim Jagielski 
1067*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,HandleUpdateBtn,void *,EMPTYARG)1068*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, HandleUpdateBtn, void*, EMPTYARG )
1069*b1cdbd2cSJim Jagielski {
1070*b1cdbd2cSJim Jagielski     m_pManager->checkUpdates( false, true );
1071*b1cdbd2cSJim Jagielski 
1072*b1cdbd2cSJim Jagielski     return 1;
1073*b1cdbd2cSJim Jagielski }
1074*b1cdbd2cSJim Jagielski 
1075*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,HandleHyperlink,svt::FixedHyperlink *,pHyperlink)1076*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, HandleHyperlink, svt::FixedHyperlink*, pHyperlink )
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski     openWebBrowser( pHyperlink->GetURL(), GetText() );
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski     return 1;
1081*b1cdbd2cSJim Jagielski }
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(ExtMgrDialog,TimeOutHdl,Timer *,EMPTYARG)1084*b1cdbd2cSJim Jagielski IMPL_LINK( ExtMgrDialog, TimeOutHdl, Timer*, EMPTYARG )
1085*b1cdbd2cSJim Jagielski {
1086*b1cdbd2cSJim Jagielski     if ( m_bStopProgress )
1087*b1cdbd2cSJim Jagielski     {
1088*b1cdbd2cSJim Jagielski         m_bHasProgress = false;
1089*b1cdbd2cSJim Jagielski         m_bStopProgress = false;
1090*b1cdbd2cSJim Jagielski         m_aProgressText.Hide();
1091*b1cdbd2cSJim Jagielski         m_aProgressBar.Hide();
1092*b1cdbd2cSJim Jagielski         m_aCancelBtn.Hide();
1093*b1cdbd2cSJim Jagielski     }
1094*b1cdbd2cSJim Jagielski     else
1095*b1cdbd2cSJim Jagielski     {
1096*b1cdbd2cSJim Jagielski         if ( m_bProgressChanged )
1097*b1cdbd2cSJim Jagielski         {
1098*b1cdbd2cSJim Jagielski             m_bProgressChanged = false;
1099*b1cdbd2cSJim Jagielski             m_aProgressText.SetText( m_sProgressText );
1100*b1cdbd2cSJim Jagielski         }
1101*b1cdbd2cSJim Jagielski 
1102*b1cdbd2cSJim Jagielski         if ( m_bStartProgress )
1103*b1cdbd2cSJim Jagielski         {
1104*b1cdbd2cSJim Jagielski             m_bStartProgress = false;
1105*b1cdbd2cSJim Jagielski             m_bHasProgress = true;
1106*b1cdbd2cSJim Jagielski             m_aProgressBar.Show();
1107*b1cdbd2cSJim Jagielski             m_aProgressText.Show();
1108*b1cdbd2cSJim Jagielski             m_aCancelBtn.Enable();
1109*b1cdbd2cSJim Jagielski             m_aCancelBtn.Show();
1110*b1cdbd2cSJim Jagielski         }
1111*b1cdbd2cSJim Jagielski 
1112*b1cdbd2cSJim Jagielski 		if ( m_aProgressBar.IsVisible() )
1113*b1cdbd2cSJim Jagielski 			m_aProgressBar.SetValue( (sal_uInt16) m_nProgress );
1114*b1cdbd2cSJim Jagielski 
1115*b1cdbd2cSJim Jagielski         m_aTimeoutTimer.Start();
1116*b1cdbd2cSJim Jagielski     }
1117*b1cdbd2cSJim Jagielski 
1118*b1cdbd2cSJim Jagielski 	return 1;
1119*b1cdbd2cSJim Jagielski }
1120*b1cdbd2cSJim Jagielski 
1121*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1122*b1cdbd2cSJim Jagielski // VCL::Window / Dialog
Resize()1123*b1cdbd2cSJim Jagielski void ExtMgrDialog::Resize()
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski     Size aTotalSize( GetOutputSizePixel() );
1126*b1cdbd2cSJim Jagielski     Size aBtnSize( m_aHelpBtn.GetSizePixel() );
1127*b1cdbd2cSJim Jagielski     Size aUpdBtnSize( m_aUpdateBtn.GetSizePixel() );
1128*b1cdbd2cSJim Jagielski 
1129*b1cdbd2cSJim Jagielski     Point aPos( RSC_SP_DLG_INNERBORDER_LEFT,
1130*b1cdbd2cSJim Jagielski                 aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_BOTTOM - aBtnSize.Height() );
1131*b1cdbd2cSJim Jagielski 
1132*b1cdbd2cSJim Jagielski     m_aHelpBtn.SetPosPixel( aPos );
1133*b1cdbd2cSJim Jagielski 
1134*b1cdbd2cSJim Jagielski     aPos.X() = aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_RIGHT - aBtnSize.Width();
1135*b1cdbd2cSJim Jagielski     m_aCloseBtn.SetPosPixel( aPos );
1136*b1cdbd2cSJim Jagielski 
1137*b1cdbd2cSJim Jagielski     aPos.X() -= ( RSC_SP_CTRL_X + aUpdBtnSize.Width() );
1138*b1cdbd2cSJim Jagielski     m_aUpdateBtn.SetPosPixel( aPos );
1139*b1cdbd2cSJim Jagielski 
1140*b1cdbd2cSJim Jagielski     aPos.X() -= ( RSC_SP_CTRL_GROUP_Y + aBtnSize.Width() );
1141*b1cdbd2cSJim Jagielski     m_aAddBtn.SetPosPixel( aPos );
1142*b1cdbd2cSJim Jagielski 
1143*b1cdbd2cSJim Jagielski     Size aDivSize( aTotalSize.Width(), LINE_SIZE );
1144*b1cdbd2cSJim Jagielski     aPos = Point( 0, aPos.Y() - LINE_SIZE - RSC_SP_DLG_INNERBORDER_BOTTOM );
1145*b1cdbd2cSJim Jagielski     m_aDivider.SetPosSizePixel( aPos, aDivSize );
1146*b1cdbd2cSJim Jagielski 
1147*b1cdbd2cSJim Jagielski     Size aFTSize( m_aGetExtensions.CalcMinimumSize() );
1148*b1cdbd2cSJim Jagielski     aPos = Point( RSC_SP_DLG_INNERBORDER_LEFT, aPos.Y() - RSC_CD_FIXEDTEXT_HEIGHT - 2*RSC_SP_DLG_INNERBORDER_BOTTOM );
1149*b1cdbd2cSJim Jagielski 
1150*b1cdbd2cSJim Jagielski     m_aGetExtensions.SetPosSizePixel( aPos, aFTSize );
1151*b1cdbd2cSJim Jagielski 
1152*b1cdbd2cSJim Jagielski     aPos.X() = aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_RIGHT - aBtnSize.Width();
1153*b1cdbd2cSJim Jagielski     m_aCancelBtn.SetPosPixel( Point( aPos.X(), aPos.Y() - ((aBtnSize.Height()-aFTSize.Height())/2) ) );
1154*b1cdbd2cSJim Jagielski 
1155*b1cdbd2cSJim Jagielski     // Calc progress height
1156*b1cdbd2cSJim Jagielski     long nProgressHeight = aFTSize.Height();
1157*b1cdbd2cSJim Jagielski 
1158*b1cdbd2cSJim Jagielski     if( IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) )
1159*b1cdbd2cSJim Jagielski     {
1160*b1cdbd2cSJim Jagielski         ImplControlValue aValue;
1161*b1cdbd2cSJim Jagielski         bool bNativeOK;
1162*b1cdbd2cSJim Jagielski         Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() );
1163*b1cdbd2cSJim Jagielski         Rectangle aNativeControlRegion, aNativeContentRegion;
1164*b1cdbd2cSJim Jagielski         if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
1165*b1cdbd2cSJim Jagielski                                                  CTRL_STATE_ENABLED, aValue, rtl::OUString(),
1166*b1cdbd2cSJim Jagielski                                                  aNativeControlRegion, aNativeContentRegion ) ) != sal_False )
1167*b1cdbd2cSJim Jagielski         {
1168*b1cdbd2cSJim Jagielski             nProgressHeight = aNativeControlRegion.GetHeight();
1169*b1cdbd2cSJim Jagielski         }
1170*b1cdbd2cSJim Jagielski     }
1171*b1cdbd2cSJim Jagielski 
1172*b1cdbd2cSJim Jagielski     if ( nProgressHeight < PROGRESS_HEIGHT )
1173*b1cdbd2cSJim Jagielski         nProgressHeight = PROGRESS_HEIGHT;
1174*b1cdbd2cSJim Jagielski 
1175*b1cdbd2cSJim Jagielski     aPos.X() -= ( RSC_SP_CTRL_GROUP_Y + PROGRESS_WIDTH );
1176*b1cdbd2cSJim Jagielski     m_aProgressBar.SetPosSizePixel( Point( aPos.X(), aPos.Y() - ((nProgressHeight-aFTSize.Height())/2) ),
1177*b1cdbd2cSJim Jagielski                                     Size( PROGRESS_WIDTH, nProgressHeight ) );
1178*b1cdbd2cSJim Jagielski 
1179*b1cdbd2cSJim Jagielski     Rectangle aRect1( m_aGetExtensions.GetPosPixel(), m_aGetExtensions.GetSizePixel() );
1180*b1cdbd2cSJim Jagielski     Rectangle aRect2( m_aProgressBar.GetPosPixel(), m_aProgressBar.GetSizePixel() );
1181*b1cdbd2cSJim Jagielski 
1182*b1cdbd2cSJim Jagielski     aFTSize.Width() = ( aRect2.Left() - aRect1.Right() ) - 2*RSC_SP_DLG_INNERBORDER_LEFT;
1183*b1cdbd2cSJim Jagielski     aPos.X() = aRect1.Right() + RSC_SP_DLG_INNERBORDER_LEFT;
1184*b1cdbd2cSJim Jagielski     m_aProgressText.SetPosSizePixel( aPos, aFTSize );
1185*b1cdbd2cSJim Jagielski 
1186*b1cdbd2cSJim Jagielski     Size aSize( aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_LEFT - RSC_SP_DLG_INNERBORDER_RIGHT,
1187*b1cdbd2cSJim Jagielski                 aTotalSize.Height() - 2*aBtnSize.Height() - LINE_SIZE -
1188*b1cdbd2cSJim Jagielski                 RSC_SP_DLG_INNERBORDER_TOP - 3*RSC_SP_DLG_INNERBORDER_BOTTOM );
1189*b1cdbd2cSJim Jagielski 
1190*b1cdbd2cSJim Jagielski     m_pExtensionBox->SetSizePixel( aSize );
1191*b1cdbd2cSJim Jagielski }
1192*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1193*b1cdbd2cSJim Jagielski // VCL::Window / Dialog
1194*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)1195*b1cdbd2cSJim Jagielski long ExtMgrDialog::Notify( NotifyEvent& rNEvt )
1196*b1cdbd2cSJim Jagielski {
1197*b1cdbd2cSJim Jagielski     bool bHandled = false;
1198*b1cdbd2cSJim Jagielski 
1199*b1cdbd2cSJim Jagielski     if ( rNEvt.GetType() == EVENT_KEYINPUT )
1200*b1cdbd2cSJim Jagielski     {
1201*b1cdbd2cSJim Jagielski         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
1202*b1cdbd2cSJim Jagielski         KeyCode         aKeyCode = pKEvt->GetKeyCode();
1203*b1cdbd2cSJim Jagielski         sal_uInt16          nKeyCode = aKeyCode.GetCode();
1204*b1cdbd2cSJim Jagielski 
1205*b1cdbd2cSJim Jagielski         if ( nKeyCode == KEY_TAB )
1206*b1cdbd2cSJim Jagielski         {
1207*b1cdbd2cSJim Jagielski             if ( aKeyCode.IsShift() ) {
1208*b1cdbd2cSJim Jagielski                 if ( m_aAddBtn.HasFocus() ) {
1209*b1cdbd2cSJim Jagielski                     m_pExtensionBox->GrabFocus();
1210*b1cdbd2cSJim Jagielski                     bHandled = true;
1211*b1cdbd2cSJim Jagielski                 }
1212*b1cdbd2cSJim Jagielski             } else {
1213*b1cdbd2cSJim Jagielski                 if ( m_aGetExtensions.HasFocus() ) {
1214*b1cdbd2cSJim Jagielski                     m_pExtensionBox->GrabFocus();
1215*b1cdbd2cSJim Jagielski                     bHandled = true;
1216*b1cdbd2cSJim Jagielski                 }
1217*b1cdbd2cSJim Jagielski             }
1218*b1cdbd2cSJim Jagielski         }
1219*b1cdbd2cSJim Jagielski         if ( aKeyCode.GetGroup() == KEYGROUP_CURSOR )
1220*b1cdbd2cSJim Jagielski             bHandled = m_pExtensionBox->Notify( rNEvt );
1221*b1cdbd2cSJim Jagielski     }
1222*b1cdbd2cSJim Jagielski // VCLEVENT_WINDOW_CLOSE
1223*b1cdbd2cSJim Jagielski     if ( !bHandled )
1224*b1cdbd2cSJim Jagielski         return ModelessDialog::Notify( rNEvt );
1225*b1cdbd2cSJim Jagielski     else
1226*b1cdbd2cSJim Jagielski         return true;
1227*b1cdbd2cSJim Jagielski }
1228*b1cdbd2cSJim Jagielski 
1229*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Close()1230*b1cdbd2cSJim Jagielski sal_Bool ExtMgrDialog::Close()
1231*b1cdbd2cSJim Jagielski {
1232*b1cdbd2cSJim Jagielski     bool bRet = m_pManager->queryTermination();
1233*b1cdbd2cSJim Jagielski     if ( bRet )
1234*b1cdbd2cSJim Jagielski     {
1235*b1cdbd2cSJim Jagielski         bRet = ModelessDialog::Close();
1236*b1cdbd2cSJim Jagielski         m_pManager->terminateDialog();
1237*b1cdbd2cSJim Jagielski     }
1238*b1cdbd2cSJim Jagielski     return bRet;
1239*b1cdbd2cSJim Jagielski }
1240*b1cdbd2cSJim Jagielski 
1241*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1242*b1cdbd2cSJim Jagielski //                             UpdateRequiredDialog
1243*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
UpdateRequiredDialog(Window * pParent,TheExtensionManager * pManager)1244*b1cdbd2cSJim Jagielski UpdateRequiredDialog::UpdateRequiredDialog( Window *pParent, TheExtensionManager *pManager ) :
1245*b1cdbd2cSJim Jagielski     ModalDialog( pParent,   getResId( RID_DLG_UPDATE_REQUIRED ) ),
1246*b1cdbd2cSJim Jagielski     DialogHelper( pManager->getContext(), (Dialog*) this ),
1247*b1cdbd2cSJim Jagielski     m_aUpdateNeeded( this,  getResId( RID_EM_FT_MSG ) ),
1248*b1cdbd2cSJim Jagielski     m_aUpdateBtn( this,     getResId( RID_EM_BTN_CHECK_UPDATES ) ),
1249*b1cdbd2cSJim Jagielski     m_aCloseBtn( this,      getResId( RID_EM_BTN_CLOSE ) ),
1250*b1cdbd2cSJim Jagielski     m_aHelpBtn( this,       getResId( RID_EM_BTN_HELP ) ),
1251*b1cdbd2cSJim Jagielski     m_aCancelBtn( this,     getResId( RID_EM_BTN_CANCEL ) ),
1252*b1cdbd2cSJim Jagielski     m_aDivider( this ),
1253*b1cdbd2cSJim Jagielski     m_aProgressText( this,  getResId( RID_EM_FT_PROGRESS ) ),
1254*b1cdbd2cSJim Jagielski     m_aProgressBar( this,   WB_BORDER + WB_3DLOOK ),
1255*b1cdbd2cSJim Jagielski     m_sAddPackages(         getResourceString( RID_STR_ADD_PACKAGES ) ),
1256*b1cdbd2cSJim Jagielski     m_sCloseText(           getResourceString( RID_STR_CLOSE_BTN ) ),
1257*b1cdbd2cSJim Jagielski     m_bHasProgress(         false ),
1258*b1cdbd2cSJim Jagielski     m_bProgressChanged(     false ),
1259*b1cdbd2cSJim Jagielski     m_bStartProgress(       false ),
1260*b1cdbd2cSJim Jagielski     m_bStopProgress(        false ),
1261*b1cdbd2cSJim Jagielski     m_bUpdateWarning(       false ),
1262*b1cdbd2cSJim Jagielski     m_bDisableWarning(      false ),
1263*b1cdbd2cSJim Jagielski     m_bHasLockedEntries(    false ),
1264*b1cdbd2cSJim Jagielski     m_nProgress(            0 ),
1265*b1cdbd2cSJim Jagielski     m_pManager( pManager )
1266*b1cdbd2cSJim Jagielski {
1267*b1cdbd2cSJim Jagielski     // free local resources (RID < 256):
1268*b1cdbd2cSJim Jagielski     FreeResource();
1269*b1cdbd2cSJim Jagielski 
1270*b1cdbd2cSJim Jagielski     m_pExtensionBox = new ExtensionBox_Impl( this, pManager );
1271*b1cdbd2cSJim Jagielski     m_pExtensionBox->SetHyperlinkHdl( LINK( this, UpdateRequiredDialog, HandleHyperlink ) );
1272*b1cdbd2cSJim Jagielski 
1273*b1cdbd2cSJim Jagielski     m_aUpdateBtn.SetClickHdl( LINK( this, UpdateRequiredDialog, HandleUpdateBtn ) );
1274*b1cdbd2cSJim Jagielski     m_aCloseBtn.SetClickHdl( LINK( this, UpdateRequiredDialog, HandleCloseBtn ) );
1275*b1cdbd2cSJim Jagielski     m_aCancelBtn.SetClickHdl( LINK( this, UpdateRequiredDialog, HandleCancelBtn ) );
1276*b1cdbd2cSJim Jagielski 
1277*b1cdbd2cSJim Jagielski     String aText = m_aUpdateNeeded.GetText();
1278*b1cdbd2cSJim Jagielski     aText.SearchAndReplaceAllAscii( "%PRODUCTNAME", BrandName::get() );
1279*b1cdbd2cSJim Jagielski     m_aUpdateNeeded.SetText( aText );
1280*b1cdbd2cSJim Jagielski 
1281*b1cdbd2cSJim Jagielski     // resize update button
1282*b1cdbd2cSJim Jagielski     Size aBtnSize = m_aUpdateBtn.GetSizePixel();
1283*b1cdbd2cSJim Jagielski     String sTitle = m_aUpdateBtn.GetText();
1284*b1cdbd2cSJim Jagielski     long nWidth = m_aUpdateBtn.GetCtrlTextWidth( sTitle );
1285*b1cdbd2cSJim Jagielski     nWidth += 2 * m_aUpdateBtn.GetTextHeight();
1286*b1cdbd2cSJim Jagielski     if ( nWidth > aBtnSize.Width() )
1287*b1cdbd2cSJim Jagielski         m_aUpdateBtn.SetSizePixel( Size( nWidth, aBtnSize.Height() ) );
1288*b1cdbd2cSJim Jagielski 
1289*b1cdbd2cSJim Jagielski     // resize update button
1290*b1cdbd2cSJim Jagielski     aBtnSize = m_aCloseBtn.GetSizePixel();
1291*b1cdbd2cSJim Jagielski     sTitle = m_aCloseBtn.GetText();
1292*b1cdbd2cSJim Jagielski     nWidth = m_aCloseBtn.GetCtrlTextWidth( sTitle );
1293*b1cdbd2cSJim Jagielski     nWidth += 2 * m_aCloseBtn.GetTextHeight();
1294*b1cdbd2cSJim Jagielski     if ( nWidth > aBtnSize.Width() )
1295*b1cdbd2cSJim Jagielski         m_aCloseBtn.SetSizePixel( Size( nWidth, aBtnSize.Height() ) );
1296*b1cdbd2cSJim Jagielski 
1297*b1cdbd2cSJim Jagielski     // minimum size:
1298*b1cdbd2cSJim Jagielski     SetMinOutputSizePixel(
1299*b1cdbd2cSJim Jagielski         Size( // width:
1300*b1cdbd2cSJim Jagielski               (5 * m_aHelpBtn.GetSizePixel().Width()) +
1301*b1cdbd2cSJim Jagielski               (5 * RSC_SP_DLG_INNERBORDER_LEFT ),
1302*b1cdbd2cSJim Jagielski               // height:
1303*b1cdbd2cSJim Jagielski               (1 * m_aHelpBtn.GetSizePixel().Height()) +
1304*b1cdbd2cSJim Jagielski               (1 * m_aUpdateNeeded.GetSizePixel().Height()) +
1305*b1cdbd2cSJim Jagielski               (1 * m_pExtensionBox->GetMinOutputSizePixel().Height()) +
1306*b1cdbd2cSJim Jagielski               (3 * RSC_SP_DLG_INNERBORDER_LEFT) ) );
1307*b1cdbd2cSJim Jagielski 
1308*b1cdbd2cSJim Jagielski     m_aDivider.Show();
1309*b1cdbd2cSJim Jagielski     m_aProgressBar.Hide();
1310*b1cdbd2cSJim Jagielski     m_aUpdateBtn.Enable( false );
1311*b1cdbd2cSJim Jagielski     m_aCloseBtn.GrabFocus();
1312*b1cdbd2cSJim Jagielski 
1313*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.SetTimeout( 50 ); // mSec
1314*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.SetTimeoutHdl( LINK( this, UpdateRequiredDialog, TimeOutHdl ) );
1315*b1cdbd2cSJim Jagielski }
1316*b1cdbd2cSJim Jagielski 
1317*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~UpdateRequiredDialog()1318*b1cdbd2cSJim Jagielski UpdateRequiredDialog::~UpdateRequiredDialog()
1319*b1cdbd2cSJim Jagielski {
1320*b1cdbd2cSJim Jagielski     m_aTimeoutTimer.Stop();
1321*b1cdbd2cSJim Jagielski 
1322*b1cdbd2cSJim Jagielski     delete m_pExtensionBox;
1323*b1cdbd2cSJim Jagielski }
1324*b1cdbd2cSJim Jagielski 
1325*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
addPackageToList(const uno::Reference<deployment::XPackage> & xPackage,bool bLicenseMissing)1326*b1cdbd2cSJim Jagielski long UpdateRequiredDialog::addPackageToList( const uno::Reference< deployment::XPackage > &xPackage,
1327*b1cdbd2cSJim Jagielski                                              bool bLicenseMissing )
1328*b1cdbd2cSJim Jagielski {
1329*b1cdbd2cSJim Jagielski     // We will only add entries to the list with unsatisfied dependencies
1330*b1cdbd2cSJim Jagielski     if ( !bLicenseMissing && !checkDependencies( xPackage ) )
1331*b1cdbd2cSJim Jagielski     {
1332*b1cdbd2cSJim Jagielski         m_bHasLockedEntries |= m_pManager->isReadOnly( xPackage );
1333*b1cdbd2cSJim Jagielski         m_aUpdateBtn.Enable( true );
1334*b1cdbd2cSJim Jagielski         return m_pExtensionBox->addEntry( xPackage );
1335*b1cdbd2cSJim Jagielski     }
1336*b1cdbd2cSJim Jagielski     return 0;
1337*b1cdbd2cSJim Jagielski }
1338*b1cdbd2cSJim Jagielski 
1339*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
prepareChecking()1340*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::prepareChecking()
1341*b1cdbd2cSJim Jagielski {
1342*b1cdbd2cSJim Jagielski     m_pExtensionBox->prepareChecking();
1343*b1cdbd2cSJim Jagielski }
1344*b1cdbd2cSJim Jagielski 
1345*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
checkEntries()1346*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::checkEntries()
1347*b1cdbd2cSJim Jagielski {
1348*b1cdbd2cSJim Jagielski     const ::vos::OGuard guard( Application::GetSolarMutex() );
1349*b1cdbd2cSJim Jagielski     m_pExtensionBox->checkEntries();
1350*b1cdbd2cSJim Jagielski 
1351*b1cdbd2cSJim Jagielski     if ( ! hasActiveEntries() )
1352*b1cdbd2cSJim Jagielski     {
1353*b1cdbd2cSJim Jagielski         m_aCloseBtn.SetText( m_sCloseText );
1354*b1cdbd2cSJim Jagielski         m_aCloseBtn.GrabFocus();
1355*b1cdbd2cSJim Jagielski     }
1356*b1cdbd2cSJim Jagielski }
1357*b1cdbd2cSJim Jagielski 
1358*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
enablePackage(const uno::Reference<deployment::XPackage> & xPackage,bool bEnable)1359*b1cdbd2cSJim Jagielski bool UpdateRequiredDialog::enablePackage( const uno::Reference< deployment::XPackage > &xPackage,
1360*b1cdbd2cSJim Jagielski                                           bool bEnable )
1361*b1cdbd2cSJim Jagielski {
1362*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->enableExtension( xPackage, bEnable );
1363*b1cdbd2cSJim Jagielski 
1364*b1cdbd2cSJim Jagielski     return true;
1365*b1cdbd2cSJim Jagielski }
1366*b1cdbd2cSJim Jagielski 
1367*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,HandleCancelBtn,void *,EMPTYARG)1368*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, HandleCancelBtn, void*, EMPTYARG )
1369*b1cdbd2cSJim Jagielski {
1370*b1cdbd2cSJim Jagielski     // m_dialog->m_cmdEnv->m_aborted = true;
1371*b1cdbd2cSJim Jagielski     if ( m_xAbortChannel.is() )
1372*b1cdbd2cSJim Jagielski     {
1373*b1cdbd2cSJim Jagielski         try
1374*b1cdbd2cSJim Jagielski         {
1375*b1cdbd2cSJim Jagielski             m_xAbortChannel->sendAbort();
1376*b1cdbd2cSJim Jagielski         }
1377*b1cdbd2cSJim Jagielski         catch ( uno::RuntimeException & )
1378*b1cdbd2cSJim Jagielski         {
1379*b1cdbd2cSJim Jagielski             OSL_ENSURE( 0, "### unexpected RuntimeException!" );
1380*b1cdbd2cSJim Jagielski         }
1381*b1cdbd2cSJim Jagielski     }
1382*b1cdbd2cSJim Jagielski     return 1;
1383*b1cdbd2cSJim Jagielski }
1384*b1cdbd2cSJim Jagielski 
1385*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,startProgress,void *,_bLockInterface)1386*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, startProgress, void*, _bLockInterface )
1387*b1cdbd2cSJim Jagielski {
1388*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1389*b1cdbd2cSJim Jagielski     bool bLockInterface = (bool) _bLockInterface;
1390*b1cdbd2cSJim Jagielski 
1391*b1cdbd2cSJim Jagielski     if ( m_bStartProgress && !m_bHasProgress )
1392*b1cdbd2cSJim Jagielski         m_aTimeoutTimer.Start();
1393*b1cdbd2cSJim Jagielski 
1394*b1cdbd2cSJim Jagielski     if ( m_bStopProgress )
1395*b1cdbd2cSJim Jagielski     {
1396*b1cdbd2cSJim Jagielski 		if ( m_aProgressBar.IsVisible() )
1397*b1cdbd2cSJim Jagielski 	        m_aProgressBar.SetValue( 100 );
1398*b1cdbd2cSJim Jagielski         m_xAbortChannel.clear();
1399*b1cdbd2cSJim Jagielski         OSL_TRACE( " startProgress handler: stop\n" );
1400*b1cdbd2cSJim Jagielski     }
1401*b1cdbd2cSJim Jagielski     else
1402*b1cdbd2cSJim Jagielski     {
1403*b1cdbd2cSJim Jagielski         OSL_TRACE( " startProgress handler: start\n" );
1404*b1cdbd2cSJim Jagielski     }
1405*b1cdbd2cSJim Jagielski 
1406*b1cdbd2cSJim Jagielski     m_aCancelBtn.Enable( bLockInterface );
1407*b1cdbd2cSJim Jagielski     m_aUpdateBtn.Enable( false );
1408*b1cdbd2cSJim Jagielski     clearEventID();
1409*b1cdbd2cSJim Jagielski 
1410*b1cdbd2cSJim Jagielski     return 0;
1411*b1cdbd2cSJim Jagielski }
1412*b1cdbd2cSJim Jagielski 
1413*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------------
showProgress(bool _bStart)1414*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::showProgress( bool _bStart )
1415*b1cdbd2cSJim Jagielski {
1416*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1417*b1cdbd2cSJim Jagielski 
1418*b1cdbd2cSJim Jagielski     bool bStart = _bStart;
1419*b1cdbd2cSJim Jagielski 
1420*b1cdbd2cSJim Jagielski     if ( bStart )
1421*b1cdbd2cSJim Jagielski     {
1422*b1cdbd2cSJim Jagielski         m_nProgress = 0;
1423*b1cdbd2cSJim Jagielski         m_bStartProgress = true;
1424*b1cdbd2cSJim Jagielski         OSL_TRACE( "showProgress start\n" );
1425*b1cdbd2cSJim Jagielski     }
1426*b1cdbd2cSJim Jagielski     else
1427*b1cdbd2cSJim Jagielski     {
1428*b1cdbd2cSJim Jagielski         m_nProgress = 100;
1429*b1cdbd2cSJim Jagielski         m_bStopProgress = true;
1430*b1cdbd2cSJim Jagielski         OSL_TRACE( "showProgress stop!\n" );
1431*b1cdbd2cSJim Jagielski     }
1432*b1cdbd2cSJim Jagielski 
1433*b1cdbd2cSJim Jagielski     DialogHelper::PostUserEvent( LINK( this, UpdateRequiredDialog, startProgress ), (void*) bStart );
1434*b1cdbd2cSJim Jagielski }
1435*b1cdbd2cSJim Jagielski 
1436*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
updateProgress(const long nProgress)1437*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::updateProgress( const long nProgress )
1438*b1cdbd2cSJim Jagielski {
1439*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1440*b1cdbd2cSJim Jagielski 
1441*b1cdbd2cSJim Jagielski     m_nProgress = nProgress;
1442*b1cdbd2cSJim Jagielski }
1443*b1cdbd2cSJim Jagielski 
1444*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
updateProgress(const OUString & rText,const uno::Reference<task::XAbortChannel> & xAbortChannel)1445*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::updateProgress( const OUString &rText,
1446*b1cdbd2cSJim Jagielski                                            const uno::Reference< task::XAbortChannel > &xAbortChannel)
1447*b1cdbd2cSJim Jagielski {
1448*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1449*b1cdbd2cSJim Jagielski 
1450*b1cdbd2cSJim Jagielski     m_xAbortChannel = xAbortChannel;
1451*b1cdbd2cSJim Jagielski     m_sProgressText = rText;
1452*b1cdbd2cSJim Jagielski     m_bProgressChanged = true;
1453*b1cdbd2cSJim Jagielski }
1454*b1cdbd2cSJim Jagielski 
1455*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
updatePackageInfo(const uno::Reference<deployment::XPackage> & xPackage)1456*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::updatePackageInfo( const uno::Reference< deployment::XPackage > &xPackage )
1457*b1cdbd2cSJim Jagielski {
1458*b1cdbd2cSJim Jagielski     // We will remove all updated packages with satisfied dependencies, but
1459*b1cdbd2cSJim Jagielski     // we will show all disabled entries so the user sees the result
1460*b1cdbd2cSJim Jagielski     // of the 'disable all' button
1461*b1cdbd2cSJim Jagielski     if ( isEnabled( xPackage ) && checkDependencies( xPackage ) )
1462*b1cdbd2cSJim Jagielski         m_pExtensionBox->removeEntry( xPackage );
1463*b1cdbd2cSJim Jagielski     else
1464*b1cdbd2cSJim Jagielski         m_pExtensionBox->updateEntry( xPackage );
1465*b1cdbd2cSJim Jagielski 
1466*b1cdbd2cSJim Jagielski     if ( ! hasActiveEntries() )
1467*b1cdbd2cSJim Jagielski     {
1468*b1cdbd2cSJim Jagielski         m_aCloseBtn.SetText( m_sCloseText );
1469*b1cdbd2cSJim Jagielski         m_aCloseBtn.GrabFocus();
1470*b1cdbd2cSJim Jagielski     }
1471*b1cdbd2cSJim Jagielski }
1472*b1cdbd2cSJim Jagielski 
1473*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,HandleUpdateBtn,void *,EMPTYARG)1474*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, HandleUpdateBtn, void*, EMPTYARG )
1475*b1cdbd2cSJim Jagielski {
1476*b1cdbd2cSJim Jagielski     ::osl::ClearableMutexGuard aGuard( m_aMutex );
1477*b1cdbd2cSJim Jagielski 
1478*b1cdbd2cSJim Jagielski     std::vector< uno::Reference< deployment::XPackage > > vUpdateEntries;
1479*b1cdbd2cSJim Jagielski     sal_Int32 nCount = m_pExtensionBox->GetEntryCount();
1480*b1cdbd2cSJim Jagielski 
1481*b1cdbd2cSJim Jagielski     for ( sal_Int32 i = 0; i < nCount; ++i )
1482*b1cdbd2cSJim Jagielski     {
1483*b1cdbd2cSJim Jagielski         TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( i );
1484*b1cdbd2cSJim Jagielski         vUpdateEntries.push_back( pEntry->m_xPackage );
1485*b1cdbd2cSJim Jagielski     }
1486*b1cdbd2cSJim Jagielski 
1487*b1cdbd2cSJim Jagielski     aGuard.clear();
1488*b1cdbd2cSJim Jagielski 
1489*b1cdbd2cSJim Jagielski     m_pManager->getCmdQueue()->checkForUpdates( vUpdateEntries );
1490*b1cdbd2cSJim Jagielski 
1491*b1cdbd2cSJim Jagielski     return 1;
1492*b1cdbd2cSJim Jagielski }
1493*b1cdbd2cSJim Jagielski 
1494*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,HandleCloseBtn,void *,EMPTYARG)1495*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, HandleCloseBtn, void*, EMPTYARG )
1496*b1cdbd2cSJim Jagielski {
1497*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1498*b1cdbd2cSJim Jagielski 
1499*b1cdbd2cSJim Jagielski     if ( !isBusy() )
1500*b1cdbd2cSJim Jagielski     {
1501*b1cdbd2cSJim Jagielski         if ( m_bHasLockedEntries )
1502*b1cdbd2cSJim Jagielski             EndDialog( -1 );
1503*b1cdbd2cSJim Jagielski         else if ( hasActiveEntries() )
1504*b1cdbd2cSJim Jagielski             disableAllEntries();
1505*b1cdbd2cSJim Jagielski         else
1506*b1cdbd2cSJim Jagielski             EndDialog( 0 );
1507*b1cdbd2cSJim Jagielski     }
1508*b1cdbd2cSJim Jagielski 
1509*b1cdbd2cSJim Jagielski     return 1;
1510*b1cdbd2cSJim Jagielski }
1511*b1cdbd2cSJim Jagielski 
1512*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,HandleHyperlink,svt::FixedHyperlink *,pHyperlink)1513*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, HandleHyperlink, svt::FixedHyperlink*, pHyperlink )
1514*b1cdbd2cSJim Jagielski {
1515*b1cdbd2cSJim Jagielski     openWebBrowser( pHyperlink->GetURL(), GetText() );
1516*b1cdbd2cSJim Jagielski 
1517*b1cdbd2cSJim Jagielski     return 1;
1518*b1cdbd2cSJim Jagielski }
1519*b1cdbd2cSJim Jagielski 
1520*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
IMPL_LINK(UpdateRequiredDialog,TimeOutHdl,Timer *,EMPTYARG)1521*b1cdbd2cSJim Jagielski IMPL_LINK( UpdateRequiredDialog, TimeOutHdl, Timer*, EMPTYARG )
1522*b1cdbd2cSJim Jagielski {
1523*b1cdbd2cSJim Jagielski     if ( m_bStopProgress )
1524*b1cdbd2cSJim Jagielski     {
1525*b1cdbd2cSJim Jagielski         m_bHasProgress = false;
1526*b1cdbd2cSJim Jagielski         m_bStopProgress = false;
1527*b1cdbd2cSJim Jagielski         m_aProgressText.Hide();
1528*b1cdbd2cSJim Jagielski         m_aProgressBar.Hide();
1529*b1cdbd2cSJim Jagielski         m_aCancelBtn.Hide();
1530*b1cdbd2cSJim Jagielski     }
1531*b1cdbd2cSJim Jagielski     else
1532*b1cdbd2cSJim Jagielski     {
1533*b1cdbd2cSJim Jagielski         if ( m_bProgressChanged )
1534*b1cdbd2cSJim Jagielski         {
1535*b1cdbd2cSJim Jagielski             m_bProgressChanged = false;
1536*b1cdbd2cSJim Jagielski             m_aProgressText.SetText( m_sProgressText );
1537*b1cdbd2cSJim Jagielski         }
1538*b1cdbd2cSJim Jagielski 
1539*b1cdbd2cSJim Jagielski         if ( m_bStartProgress )
1540*b1cdbd2cSJim Jagielski         {
1541*b1cdbd2cSJim Jagielski             m_bStartProgress = false;
1542*b1cdbd2cSJim Jagielski             m_bHasProgress = true;
1543*b1cdbd2cSJim Jagielski             m_aProgressBar.Show();
1544*b1cdbd2cSJim Jagielski             m_aProgressText.Show();
1545*b1cdbd2cSJim Jagielski             m_aCancelBtn.Enable();
1546*b1cdbd2cSJim Jagielski             m_aCancelBtn.Show();
1547*b1cdbd2cSJim Jagielski         }
1548*b1cdbd2cSJim Jagielski 
1549*b1cdbd2cSJim Jagielski 		if ( m_aProgressBar.IsVisible() )
1550*b1cdbd2cSJim Jagielski 			m_aProgressBar.SetValue( (sal_uInt16) m_nProgress );
1551*b1cdbd2cSJim Jagielski 
1552*b1cdbd2cSJim Jagielski         m_aTimeoutTimer.Start();
1553*b1cdbd2cSJim Jagielski     }
1554*b1cdbd2cSJim Jagielski 
1555*b1cdbd2cSJim Jagielski 	return 1;
1556*b1cdbd2cSJim Jagielski }
1557*b1cdbd2cSJim Jagielski 
1558*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1559*b1cdbd2cSJim Jagielski // VCL::Window / Dialog
Resize()1560*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::Resize()
1561*b1cdbd2cSJim Jagielski {
1562*b1cdbd2cSJim Jagielski     Size aTotalSize( GetOutputSizePixel() );
1563*b1cdbd2cSJim Jagielski     Size aBtnSize( m_aHelpBtn.GetSizePixel() );
1564*b1cdbd2cSJim Jagielski 
1565*b1cdbd2cSJim Jagielski     Point aPos( RSC_SP_DLG_INNERBORDER_LEFT,
1566*b1cdbd2cSJim Jagielski                 aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_BOTTOM - aBtnSize.Height() );
1567*b1cdbd2cSJim Jagielski 
1568*b1cdbd2cSJim Jagielski     m_aHelpBtn.SetPosPixel( aPos );
1569*b1cdbd2cSJim Jagielski 
1570*b1cdbd2cSJim Jagielski     aPos.X() = aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_RIGHT - m_aCloseBtn.GetSizePixel().Width();
1571*b1cdbd2cSJim Jagielski     m_aCloseBtn.SetPosPixel( aPos );
1572*b1cdbd2cSJim Jagielski 
1573*b1cdbd2cSJim Jagielski     aPos.X() -= ( RSC_SP_CTRL_X + m_aUpdateBtn.GetSizePixel().Width() );
1574*b1cdbd2cSJim Jagielski     m_aUpdateBtn.SetPosPixel( aPos );
1575*b1cdbd2cSJim Jagielski 
1576*b1cdbd2cSJim Jagielski     Size aDivSize( aTotalSize.Width(), LINE_SIZE );
1577*b1cdbd2cSJim Jagielski     aPos = Point( 0, aPos.Y() - LINE_SIZE - RSC_SP_DLG_INNERBORDER_BOTTOM );
1578*b1cdbd2cSJim Jagielski     m_aDivider.SetPosSizePixel( aPos, aDivSize );
1579*b1cdbd2cSJim Jagielski 
1580*b1cdbd2cSJim Jagielski     // Calc fixed text size
1581*b1cdbd2cSJim Jagielski     aPos = Point( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP );
1582*b1cdbd2cSJim Jagielski     Size aFTSize = m_aUpdateNeeded.CalcMinimumSize( aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_RIGHT - RSC_SP_DLG_INNERBORDER_LEFT );
1583*b1cdbd2cSJim Jagielski     m_aUpdateNeeded.SetPosSizePixel( aPos, aFTSize );
1584*b1cdbd2cSJim Jagielski 
1585*b1cdbd2cSJim Jagielski     // Calc list box size
1586*b1cdbd2cSJim Jagielski     Size aSize( aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_LEFT - RSC_SP_DLG_INNERBORDER_RIGHT,
1587*b1cdbd2cSJim Jagielski                 aTotalSize.Height() - 2*aBtnSize.Height() - LINE_SIZE -
1588*b1cdbd2cSJim Jagielski                 2*RSC_SP_DLG_INNERBORDER_TOP - 3*RSC_SP_DLG_INNERBORDER_BOTTOM - aFTSize.Height() );
1589*b1cdbd2cSJim Jagielski     aPos.Y() += aFTSize.Height()+RSC_SP_DLG_INNERBORDER_TOP;
1590*b1cdbd2cSJim Jagielski 
1591*b1cdbd2cSJim Jagielski     m_pExtensionBox->SetPosSizePixel( aPos, aSize );
1592*b1cdbd2cSJim Jagielski 
1593*b1cdbd2cSJim Jagielski     aPos.X() = aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_RIGHT - aBtnSize.Width();
1594*b1cdbd2cSJim Jagielski     aPos.Y() += aSize.Height()+RSC_SP_DLG_INNERBORDER_TOP;
1595*b1cdbd2cSJim Jagielski     m_aCancelBtn.SetPosPixel( aPos );
1596*b1cdbd2cSJim Jagielski 
1597*b1cdbd2cSJim Jagielski     // Calc progress height
1598*b1cdbd2cSJim Jagielski     aFTSize = m_aProgressText.GetSizePixel();
1599*b1cdbd2cSJim Jagielski     long nProgressHeight = aFTSize.Height();
1600*b1cdbd2cSJim Jagielski 
1601*b1cdbd2cSJim Jagielski     if( IsNativeControlSupported( CTRL_PROGRESS, PART_ENTIRE_CONTROL ) )
1602*b1cdbd2cSJim Jagielski     {
1603*b1cdbd2cSJim Jagielski         ImplControlValue aValue;
1604*b1cdbd2cSJim Jagielski         bool bNativeOK;
1605*b1cdbd2cSJim Jagielski         Rectangle aControlRegion( Point( 0, 0 ), m_aProgressBar.GetSizePixel() );
1606*b1cdbd2cSJim Jagielski         Rectangle aNativeControlRegion, aNativeContentRegion;
1607*b1cdbd2cSJim Jagielski         if( (bNativeOK = GetNativeControlRegion( CTRL_PROGRESS, PART_ENTIRE_CONTROL, aControlRegion,
1608*b1cdbd2cSJim Jagielski                                                  CTRL_STATE_ENABLED, aValue, rtl::OUString(),
1609*b1cdbd2cSJim Jagielski                                                  aNativeControlRegion, aNativeContentRegion ) ) != sal_False )
1610*b1cdbd2cSJim Jagielski         {
1611*b1cdbd2cSJim Jagielski             nProgressHeight = aNativeControlRegion.GetHeight();
1612*b1cdbd2cSJim Jagielski         }
1613*b1cdbd2cSJim Jagielski     }
1614*b1cdbd2cSJim Jagielski 
1615*b1cdbd2cSJim Jagielski     if ( nProgressHeight < PROGRESS_HEIGHT )
1616*b1cdbd2cSJim Jagielski         nProgressHeight = PROGRESS_HEIGHT;
1617*b1cdbd2cSJim Jagielski 
1618*b1cdbd2cSJim Jagielski     aPos.X() -= ( RSC_SP_CTRL_GROUP_Y + PROGRESS_WIDTH );
1619*b1cdbd2cSJim Jagielski     m_aProgressBar.SetPosSizePixel( Point( aPos.X(), aPos.Y() + ((aBtnSize.Height()-nProgressHeight)/2) ),
1620*b1cdbd2cSJim Jagielski                                     Size( PROGRESS_WIDTH, nProgressHeight ) );
1621*b1cdbd2cSJim Jagielski 
1622*b1cdbd2cSJim Jagielski     aFTSize.Width() = aPos.X() - 2*RSC_SP_DLG_INNERBORDER_LEFT;
1623*b1cdbd2cSJim Jagielski     aPos.X() = RSC_SP_DLG_INNERBORDER_LEFT;
1624*b1cdbd2cSJim Jagielski     aPos.Y() += ( aBtnSize.Height() - aFTSize.Height() - 1 ) / 2;
1625*b1cdbd2cSJim Jagielski     m_aProgressText.SetPosSizePixel( aPos, aFTSize );
1626*b1cdbd2cSJim Jagielski }
1627*b1cdbd2cSJim Jagielski 
1628*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1629*b1cdbd2cSJim Jagielski // VCL::Dialog
Execute()1630*b1cdbd2cSJim Jagielski short UpdateRequiredDialog::Execute()
1631*b1cdbd2cSJim Jagielski {
1632*b1cdbd2cSJim Jagielski     //ToDo
1633*b1cdbd2cSJim Jagielski     //I believe m_bHasLockedEntries was used to prevent showing extensions which cannot
1634*b1cdbd2cSJim Jagielski     //be disabled because they are in a read only repository. However, disabling extensions
1635*b1cdbd2cSJim Jagielski     //is now always possible because the registration data of all repositories
1636*b1cdbd2cSJim Jagielski     //are in the user installation.
1637*b1cdbd2cSJim Jagielski     //Therfore all extensions could be displayed and all the handling around m_bHasLockedEntries
1638*b1cdbd2cSJim Jagielski     //could be removed.
1639*b1cdbd2cSJim Jagielski     if ( m_bHasLockedEntries )
1640*b1cdbd2cSJim Jagielski     {
1641*b1cdbd2cSJim Jagielski         // Set other text, disable update btn, remove not shared entries from list;
1642*b1cdbd2cSJim Jagielski         m_aUpdateNeeded.SetText( DialogHelper::getResourceString( RID_STR_NO_ADMIN_PRIVILEGE ) );
1643*b1cdbd2cSJim Jagielski         m_aCloseBtn.SetText( DialogHelper::getResourceString( RID_STR_EXIT_BTN ) );
1644*b1cdbd2cSJim Jagielski         m_aUpdateBtn.Enable( false );
1645*b1cdbd2cSJim Jagielski         m_pExtensionBox->RemoveUnlocked();
1646*b1cdbd2cSJim Jagielski         Resize();
1647*b1cdbd2cSJim Jagielski     }
1648*b1cdbd2cSJim Jagielski 
1649*b1cdbd2cSJim Jagielski     return Dialog::Execute();
1650*b1cdbd2cSJim Jagielski }
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1653*b1cdbd2cSJim Jagielski // VCL::Dialog
Close()1654*b1cdbd2cSJim Jagielski sal_Bool UpdateRequiredDialog::Close()
1655*b1cdbd2cSJim Jagielski {
1656*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1657*b1cdbd2cSJim Jagielski 
1658*b1cdbd2cSJim Jagielski     if ( !isBusy() )
1659*b1cdbd2cSJim Jagielski     {
1660*b1cdbd2cSJim Jagielski         if ( m_bHasLockedEntries )
1661*b1cdbd2cSJim Jagielski             EndDialog( -1 );
1662*b1cdbd2cSJim Jagielski         else if ( hasActiveEntries() )
1663*b1cdbd2cSJim Jagielski             disableAllEntries();
1664*b1cdbd2cSJim Jagielski         else
1665*b1cdbd2cSJim Jagielski             EndDialog( 0 );
1666*b1cdbd2cSJim Jagielski     }
1667*b1cdbd2cSJim Jagielski 
1668*b1cdbd2cSJim Jagielski     return false;
1669*b1cdbd2cSJim Jagielski }
1670*b1cdbd2cSJim Jagielski 
1671*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1672*b1cdbd2cSJim Jagielski // Check dependencies of all packages
1673*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
isEnabled(const uno::Reference<deployment::XPackage> & xPackage) const1674*b1cdbd2cSJim Jagielski bool UpdateRequiredDialog::isEnabled( const uno::Reference< deployment::XPackage > &xPackage ) const
1675*b1cdbd2cSJim Jagielski {
1676*b1cdbd2cSJim Jagielski     bool bRegistered = false;
1677*b1cdbd2cSJim Jagielski     try {
1678*b1cdbd2cSJim Jagielski         beans::Optional< beans::Ambiguous< sal_Bool > > option( xPackage->isRegistered( uno::Reference< task::XAbortChannel >(),
1679*b1cdbd2cSJim Jagielski                                                                                         uno::Reference< ucb::XCommandEnvironment >() ) );
1680*b1cdbd2cSJim Jagielski         if ( option.IsPresent )
1681*b1cdbd2cSJim Jagielski         {
1682*b1cdbd2cSJim Jagielski             ::beans::Ambiguous< sal_Bool > const & reg = option.Value;
1683*b1cdbd2cSJim Jagielski             if ( reg.IsAmbiguous )
1684*b1cdbd2cSJim Jagielski                 bRegistered = false;
1685*b1cdbd2cSJim Jagielski             else
1686*b1cdbd2cSJim Jagielski                 bRegistered = reg.Value ? true : false;
1687*b1cdbd2cSJim Jagielski         }
1688*b1cdbd2cSJim Jagielski         else
1689*b1cdbd2cSJim Jagielski             bRegistered = false;
1690*b1cdbd2cSJim Jagielski     }
1691*b1cdbd2cSJim Jagielski     catch ( uno::RuntimeException & ) { throw; }
1692*b1cdbd2cSJim Jagielski     catch ( uno::Exception & exc) {
1693*b1cdbd2cSJim Jagielski         (void) exc;
1694*b1cdbd2cSJim Jagielski         OSL_ENSURE( 0, ::rtl::OUStringToOString( exc.Message, RTL_TEXTENCODING_UTF8 ).getStr() );
1695*b1cdbd2cSJim Jagielski         bRegistered = false;
1696*b1cdbd2cSJim Jagielski     }
1697*b1cdbd2cSJim Jagielski 
1698*b1cdbd2cSJim Jagielski     return bRegistered;
1699*b1cdbd2cSJim Jagielski }
1700*b1cdbd2cSJim Jagielski 
1701*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1702*b1cdbd2cSJim Jagielski //Checks the dependencies no matter if the extension is enabled or disabled!
checkDependencies(const uno::Reference<deployment::XPackage> & xPackage) const1703*b1cdbd2cSJim Jagielski bool UpdateRequiredDialog::checkDependencies( const uno::Reference< deployment::XPackage > &xPackage ) const
1704*b1cdbd2cSJim Jagielski {
1705*b1cdbd2cSJim Jagielski     bool bDependenciesValid = false;
1706*b1cdbd2cSJim Jagielski     try {
1707*b1cdbd2cSJim Jagielski         bDependenciesValid = xPackage->checkDependencies( uno::Reference< ucb::XCommandEnvironment >() );
1708*b1cdbd2cSJim Jagielski     }
1709*b1cdbd2cSJim Jagielski     catch ( deployment::DeploymentException & ) {}
1710*b1cdbd2cSJim Jagielski     return bDependenciesValid;
1711*b1cdbd2cSJim Jagielski }
1712*b1cdbd2cSJim Jagielski 
1713*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
hasActiveEntries()1714*b1cdbd2cSJim Jagielski bool UpdateRequiredDialog::hasActiveEntries()
1715*b1cdbd2cSJim Jagielski {
1716*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1717*b1cdbd2cSJim Jagielski 
1718*b1cdbd2cSJim Jagielski     bool bRet = false;
1719*b1cdbd2cSJim Jagielski     long nCount = m_pExtensionBox->GetEntryCount();
1720*b1cdbd2cSJim Jagielski     for ( long nIndex = 0; nIndex < nCount; nIndex++ )
1721*b1cdbd2cSJim Jagielski     {
1722*b1cdbd2cSJim Jagielski         TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex );
1723*b1cdbd2cSJim Jagielski 
1724*b1cdbd2cSJim Jagielski         if ( isEnabled(pEntry->m_xPackage) && !checkDependencies( pEntry->m_xPackage ) )
1725*b1cdbd2cSJim Jagielski         {
1726*b1cdbd2cSJim Jagielski             bRet = true;
1727*b1cdbd2cSJim Jagielski             break;
1728*b1cdbd2cSJim Jagielski         }
1729*b1cdbd2cSJim Jagielski     }
1730*b1cdbd2cSJim Jagielski 
1731*b1cdbd2cSJim Jagielski     return bRet;
1732*b1cdbd2cSJim Jagielski }
1733*b1cdbd2cSJim Jagielski 
1734*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
disableAllEntries()1735*b1cdbd2cSJim Jagielski void UpdateRequiredDialog::disableAllEntries()
1736*b1cdbd2cSJim Jagielski {
1737*b1cdbd2cSJim Jagielski     ::osl::MutexGuard aGuard( m_aMutex );
1738*b1cdbd2cSJim Jagielski 
1739*b1cdbd2cSJim Jagielski     setBusy( true );
1740*b1cdbd2cSJim Jagielski 
1741*b1cdbd2cSJim Jagielski     long nCount = m_pExtensionBox->GetEntryCount();
1742*b1cdbd2cSJim Jagielski     for ( long nIndex = 0; nIndex < nCount; nIndex++ )
1743*b1cdbd2cSJim Jagielski     {
1744*b1cdbd2cSJim Jagielski         TEntry_Impl pEntry = m_pExtensionBox->GetEntryData( nIndex );
1745*b1cdbd2cSJim Jagielski         enablePackage( pEntry->m_xPackage, false );
1746*b1cdbd2cSJim Jagielski     }
1747*b1cdbd2cSJim Jagielski 
1748*b1cdbd2cSJim Jagielski     setBusy( false );
1749*b1cdbd2cSJim Jagielski 
1750*b1cdbd2cSJim Jagielski     if ( ! hasActiveEntries() )
1751*b1cdbd2cSJim Jagielski         m_aCloseBtn.SetText( m_sCloseText );
1752*b1cdbd2cSJim Jagielski }
1753*b1cdbd2cSJim Jagielski 
1754*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1755*b1cdbd2cSJim Jagielski //                             ShowLicenseDialog
1756*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
ShowLicenseDialog(Window * pParent,const uno::Reference<deployment::XPackage> & xPackage)1757*b1cdbd2cSJim Jagielski ShowLicenseDialog::ShowLicenseDialog( Window * pParent,
1758*b1cdbd2cSJim Jagielski                                       const uno::Reference< deployment::XPackage > &xPackage ) :
1759*b1cdbd2cSJim Jagielski     ModalDialog( pParent, DialogHelper::getResId( RID_DLG_SHOW_LICENSE ) ),
1760*b1cdbd2cSJim Jagielski     m_aLicenseText( this, DialogHelper::getResId( ML_LICENSE ) ),
1761*b1cdbd2cSJim Jagielski     m_aCloseBtn( this,    DialogHelper::getResId( RID_EM_BTN_CLOSE ) )
1762*b1cdbd2cSJim Jagielski {
1763*b1cdbd2cSJim Jagielski     FreeResource();
1764*b1cdbd2cSJim Jagielski 
1765*b1cdbd2cSJim Jagielski     OUString aText = xPackage->getLicenseText();
1766*b1cdbd2cSJim Jagielski     m_aLicenseText.SetText( aText );
1767*b1cdbd2cSJim Jagielski }
1768*b1cdbd2cSJim Jagielski 
1769*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~ShowLicenseDialog()1770*b1cdbd2cSJim Jagielski ShowLicenseDialog::~ShowLicenseDialog()
1771*b1cdbd2cSJim Jagielski {}
1772*b1cdbd2cSJim Jagielski 
1773*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
Resize()1774*b1cdbd2cSJim Jagielski void ShowLicenseDialog::Resize()
1775*b1cdbd2cSJim Jagielski {
1776*b1cdbd2cSJim Jagielski     Size aTotalSize( GetOutputSizePixel() );
1777*b1cdbd2cSJim Jagielski     Size aTextSize( aTotalSize.Width() - RSC_SP_DLG_INNERBORDER_LEFT - RSC_SP_DLG_INNERBORDER_RIGHT,
1778*b1cdbd2cSJim Jagielski                     aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_TOP - 2*RSC_SP_DLG_INNERBORDER_BOTTOM
1779*b1cdbd2cSJim Jagielski                                         - m_aCloseBtn.GetSizePixel().Height() );
1780*b1cdbd2cSJim Jagielski 
1781*b1cdbd2cSJim Jagielski     m_aLicenseText.SetPosSizePixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP ),
1782*b1cdbd2cSJim Jagielski                                     aTextSize );
1783*b1cdbd2cSJim Jagielski 
1784*b1cdbd2cSJim Jagielski     Point aBtnPos( (aTotalSize.Width() - m_aCloseBtn.GetSizePixel().Width())/2,
1785*b1cdbd2cSJim Jagielski                     aTotalSize.Height() - RSC_SP_DLG_INNERBORDER_BOTTOM
1786*b1cdbd2cSJim Jagielski                                         - m_aCloseBtn.GetSizePixel().Height() );
1787*b1cdbd2cSJim Jagielski     m_aCloseBtn.SetPosPixel( aBtnPos );
1788*b1cdbd2cSJim Jagielski }
1789*b1cdbd2cSJim Jagielski 
1790*b1cdbd2cSJim Jagielski //=================================================================================
1791*b1cdbd2cSJim Jagielski // UpdateRequiredDialogService
1792*b1cdbd2cSJim Jagielski //=================================================================================
UpdateRequiredDialogService(uno::Sequence<uno::Any> const &,uno::Reference<uno::XComponentContext> const & xComponentContext)1793*b1cdbd2cSJim Jagielski UpdateRequiredDialogService::UpdateRequiredDialogService( uno::Sequence< uno::Any > const&,
1794*b1cdbd2cSJim Jagielski                                                           uno::Reference< uno::XComponentContext > const& xComponentContext )
1795*b1cdbd2cSJim Jagielski     : m_xComponentContext( xComponentContext )
1796*b1cdbd2cSJim Jagielski {
1797*b1cdbd2cSJim Jagielski }
1798*b1cdbd2cSJim Jagielski 
1799*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1800*b1cdbd2cSJim Jagielski // XExecutableDialog
1801*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
setTitle(OUString const &)1802*b1cdbd2cSJim Jagielski void UpdateRequiredDialogService::setTitle( OUString const & ) throw ( uno::RuntimeException )
1803*b1cdbd2cSJim Jagielski {
1804*b1cdbd2cSJim Jagielski }
1805*b1cdbd2cSJim Jagielski 
1806*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
execute()1807*b1cdbd2cSJim Jagielski sal_Int16 UpdateRequiredDialogService::execute() throw ( uno::RuntimeException )
1808*b1cdbd2cSJim Jagielski {
1809*b1cdbd2cSJim Jagielski     ::rtl::Reference< ::dp_gui::TheExtensionManager > xManager( TheExtensionManager::get(
1810*b1cdbd2cSJim Jagielski                                                               m_xComponentContext,
1811*b1cdbd2cSJim Jagielski                                                               uno::Reference< awt::XWindow >(),
1812*b1cdbd2cSJim Jagielski                                                               OUString() ) );
1813*b1cdbd2cSJim Jagielski     xManager->createDialog( true );
1814*b1cdbd2cSJim Jagielski     sal_Int16 nRet = xManager->execute();
1815*b1cdbd2cSJim Jagielski 
1816*b1cdbd2cSJim Jagielski     return nRet;
1817*b1cdbd2cSJim Jagielski }
1818*b1cdbd2cSJim Jagielski 
1819*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1820*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
1821*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
~SelectedPackage()1822*b1cdbd2cSJim Jagielski SelectedPackage::~SelectedPackage() {}
1823*b1cdbd2cSJim Jagielski 
1824*b1cdbd2cSJim Jagielski } //namespace dp_gui
1825*b1cdbd2cSJim Jagielski 
1826