1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26
27 // include ---------------------------------------------------------------
28
29 #include "optjava.hxx"
30 #include <dialmgr.hxx>
31
32 #include "optjava.hrc"
33 #include <cuires.hrc>
34 #include "helpid.hrc"
35 #include <vcl/svapp.hxx>
36 #include <vcl/help.hxx>
37 #include <tools/urlobj.hxx>
38 #include <vcl/msgbox.hxx>
39 #include <vcl/waitobj.hxx>
40 #include <unotools/pathoptions.hxx>
41 #include <svtools/imagemgr.hxx>
42 #include <sfx2/filedlghelper.hxx>
43 #include <comphelper/processfactory.hxx>
44 #include <ucbhelper/contentbroker.hxx>
45 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
46 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
47 #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
48 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
49 #include <com/sun/star/ucb/XContentProvider.hpp>
50 #include <jvmfwk/framework.h>
51
52 // define ----------------------------------------------------------------
53
54 #define CLASSPATH_DELIMITER SAL_PATHSEPARATOR
55 #define STRIM( s ) s.EraseLeadingChars().EraseTrailingChars()
56 #define BUTTON_BORDER 2
57 #define RESET_TIMEOUT 300
58
59 using namespace ::com::sun::star::lang;
60 using namespace ::com::sun::star::ucb;
61 using namespace ::com::sun::star::ui::dialogs;
62 using namespace ::com::sun::star::uno;
63
64 // -----------------------------------------------------------------------
65
areListsEqual(const Sequence<::rtl::OUString> & rListA,const Sequence<::rtl::OUString> & rListB)66 bool areListsEqual( const Sequence< ::rtl::OUString >& rListA, const Sequence< ::rtl::OUString >& rListB )
67 {
68 bool bRet = true;
69 const sal_Int32 nLen = rListA.getLength();
70
71 if ( rListB.getLength() != nLen )
72 bRet = false;
73 else
74 {
75 const ::rtl::OUString* pStringA = rListA.getConstArray();
76 const ::rtl::OUString* pStringB = rListB.getConstArray();
77
78 for ( sal_Int32 i = 0; i < nLen; ++i )
79 {
80 if ( *pStringA++ != *pStringB++ )
81 {
82 bRet = false;
83 break;
84 }
85 }
86 }
87
88 return bRet;
89 }
90
91 // class SvxJavaOptionsPage ----------------------------------------------
92
SvxJavaOptionsPage(Window * pParent,const SfxItemSet & rSet)93 SvxJavaOptionsPage::SvxJavaOptionsPage( Window* pParent, const SfxItemSet& rSet ) :
94
95 SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_OPTIONS_JAVA ), rSet ),
96
97 m_aJavaLine ( this, CUI_RES( FL_JAVA ) ),
98 m_aJavaEnableCB ( this, CUI_RES( CB_JAVA_ENABLE ) ),
99 m_aJavaFoundLabel ( this, CUI_RES( FT_JAVA_FOUND ) ),
100 m_aJavaList ( this, CUI_RES( LB_JAVA ) ),
101 m_aJavaPathText ( this, CUI_RES( FT_JAVA_PATH ) ),
102 m_aAddBtn ( this, CUI_RES( PB_ADD ) ),
103 m_aParameterBtn ( this, CUI_RES( PB_PARAMETER ) ),
104 m_aClassPathBtn ( this, CUI_RES( PB_CLASSPATH ) ),
105
106 m_pParamDlg ( NULL ),
107 m_pPathDlg ( NULL ),
108 m_parJavaInfo ( NULL ),
109 m_parParameters ( NULL ),
110 m_pClassPath ( NULL ),
111 m_nInfoSize ( 0 ),
112 m_nParamSize ( 0 ),
113 m_sInstallText ( CUI_RES( STR_INSTALLED_IN ) ),
114 m_sAccessibilityText( CUI_RES( STR_ACCESSIBILITY ) ),
115 m_sAddDialogText ( CUI_RES( STR_ADDDLGTEXT ) ),
116
117 xDialogListener ( new ::svt::DialogClosedListener() )
118
119 {
120 m_aJavaEnableCB.SetClickHdl( LINK( this, SvxJavaOptionsPage, EnableHdl_Impl ) );
121 m_aJavaList.SetCheckButtonHdl( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) );
122 m_aJavaList.SetSelectHdl( LINK( this, SvxJavaOptionsPage, SelectHdl_Impl ) );
123 m_aAddBtn.SetClickHdl( LINK( this, SvxJavaOptionsPage, AddHdl_Impl ) );
124 m_aParameterBtn.SetClickHdl( LINK( this, SvxJavaOptionsPage, ParameterHdl_Impl ) );
125 m_aClassPathBtn.SetClickHdl( LINK( this, SvxJavaOptionsPage, ClassPathHdl_Impl ) );
126 m_aResetTimer.SetTimeoutHdl( LINK( this, SvxJavaOptionsPage, ResetHdl_Impl ) );
127 m_aResetTimer.SetTimeout( RESET_TIMEOUT );
128
129 //! m_aJavaList.EnableCheckButton( new SvLBoxButtonData( &m_aJavaList, true ) );
130
131 static long aStaticTabs[]=
132 {
133 5, 0, 15, 90, 130, 300
134 };
135
136 m_aJavaList.SvxSimpleTable::SetTabs( aStaticTabs );
137 String sHeader( '\t' );
138 sHeader += String( CUI_RES( STR_HEADER_VENDOR ) );
139 sHeader += '\t';
140 sHeader += String( CUI_RES( STR_HEADER_VERSION ) );
141 sHeader += '\t';
142 sHeader += String( CUI_RES( STR_HEADER_FEATURES ) );
143 sHeader += '\t';
144 m_aJavaList.InsertHeaderEntry( sHeader, HEADERBAR_APPEND, HIB_LEFT );
145
146 m_aJavaList.SetHelpId( HID_OPTIONS_JAVA_LIST );
147
148 FreeResource();
149
150 xDialogListener->SetDialogClosedLink( LINK( this, SvxJavaOptionsPage, DialogClosedHdl ) );
151
152 EnableHdl_Impl( &m_aJavaEnableCB );
153 jfw_lock();
154
155 //check if the text fits into the class path button
156 Size aButtonSize = m_aClassPathBtn.GetOutputSizePixel();
157 sal_Int32 nTextWidth = m_aClassPathBtn.GetTextWidth(m_aClassPathBtn.GetText());
158 //add some additional space
159 sal_Int32 nDiff = nTextWidth + 4 - aButtonSize.Width();
160 if( nDiff > 0)
161 {
162 Point aPos(m_aClassPathBtn.GetPosPixel());
163 aPos.X() -= nDiff;
164 aButtonSize.Width() += nDiff;
165 m_aClassPathBtn.SetPosSizePixel(aPos, aButtonSize);
166 aPos = m_aAddBtn.GetPosPixel();
167 aPos.X() -= nDiff;
168 m_aAddBtn.SetPosSizePixel(aPos, aButtonSize);
169 aPos = m_aParameterBtn.GetPosPixel();
170 aPos.X() -= nDiff;
171 m_aParameterBtn.SetPosSizePixel(aPos, aButtonSize);
172 Size aSize = m_aJavaList.GetSizePixel();
173 aSize.Width() -= nDiff;
174 m_aJavaList.SetSizePixel(aSize);
175 }
176 }
177
178 // -----------------------------------------------------------------------
179
~SvxJavaOptionsPage()180 SvxJavaOptionsPage::~SvxJavaOptionsPage()
181 {
182 delete m_pParamDlg;
183 delete m_pPathDlg;
184 ClearJavaInfo();
185 std::vector< JavaInfo* >::iterator pIter;
186 for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
187 {
188 JavaInfo* pInfo = *pIter;
189 jfw_freeJavaInfo( pInfo );
190 }
191 /*
192 rtl_uString** pParamArr = m_parParameters;
193 for ( sal_Int32 i = 0; i < m_nParamSize; ++i )
194 rtl_uString_release( *pParamArr++ );
195 rtl_freeMemory( m_parParameters );
196 rtl_uString_release( m_pClassPath );
197 */
198 jfw_unlock();
199 }
200
201 // -----------------------------------------------------------------------
202
IMPL_LINK(SvxJavaOptionsPage,EnableHdl_Impl,CheckBox *,EMPTYARG)203 IMPL_LINK( SvxJavaOptionsPage, EnableHdl_Impl, CheckBox *, EMPTYARG )
204 {
205 sal_Bool bEnable = m_aJavaEnableCB.IsChecked();
206 m_aJavaFoundLabel.Enable( bEnable );
207 m_aJavaPathText.Enable( bEnable );
208 m_aAddBtn.Enable( bEnable );
209 m_aParameterBtn.Enable( bEnable );
210 m_aClassPathBtn.Enable( bEnable );
211
212 bEnable ? m_aJavaList.EnableTable() : m_aJavaList.DisableTable();
213
214 return 0;
215 }
216
217 // -----------------------------------------------------------------------
218
IMPL_LINK(SvxJavaOptionsPage,CheckHdl_Impl,SvxSimpleTable *,pList)219 IMPL_LINK( SvxJavaOptionsPage, CheckHdl_Impl, SvxSimpleTable *, pList )
220 {
221 SvLBoxEntry* pEntry = pList ? m_aJavaList.GetEntry( m_aJavaList.GetCurMousePoint() )
222 : m_aJavaList.FirstSelected();
223 if ( pEntry )
224 m_aJavaList.HandleEntryChecked( pEntry );
225 return 0;
226 }
227
228 // -----------------------------------------------------------------------
229
IMPL_LINK(SvxJavaOptionsPage,SelectHdl_Impl,SvxSimpleTable *,EMPTYARG)230 IMPL_LINK( SvxJavaOptionsPage, SelectHdl_Impl, SvxSimpleTable *, EMPTYARG )
231 {
232 // set installation directory info
233 SvLBoxEntry* pEntry = m_aJavaList.FirstSelected();
234 DBG_ASSERT( pEntry, "SvxJavaOptionsPage::SelectHdl_Impl(): no entry" );
235 String* pLocation = static_cast< String* >( pEntry->GetUserData() );
236 DBG_ASSERT( pLocation, "invalid location string" );
237 String sInfo = m_sInstallText;
238 if ( pLocation )
239 sInfo += *pLocation;
240 m_aJavaPathText.SetText( sInfo );
241 return 0;
242 }
243
244 // -----------------------------------------------------------------------
245
IMPL_LINK(SvxJavaOptionsPage,AddHdl_Impl,PushButton *,EMPTYARG)246 IMPL_LINK( SvxJavaOptionsPage, AddHdl_Impl, PushButton *, EMPTYARG )
247 {
248 try
249 {
250 Reference < XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() );
251 xFolderPicker = Reference< XFolderPicker >(
252 xMgr->createInstance( ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.FolderPicker" ) ), UNO_QUERY );
253
254 String sWorkFolder = SvtPathOptions().GetWorkPath();
255 xFolderPicker->setDisplayDirectory( sWorkFolder );
256 xFolderPicker->setDescription( m_sAddDialogText );
257
258 Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
259 if ( xAsyncDlg.is() )
260 xAsyncDlg->startExecuteModal( xDialogListener.get() );
261 else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
262 AddFolder( xFolderPicker->getDirectory() );
263 }
264 catch ( Exception& )
265 {
266 #ifdef DBG_UTIL
267 DBG_ERRORFILE( "SvxJavaOptionsPage::AddHdl_Impl(): caught exception" );
268 #endif
269 }
270
271 return 0;
272 }
273
274 // -----------------------------------------------------------------------
275
IMPL_LINK(SvxJavaOptionsPage,ParameterHdl_Impl,PushButton *,EMPTYARG)276 IMPL_LINK( SvxJavaOptionsPage, ParameterHdl_Impl, PushButton *, EMPTYARG )
277 {
278 Sequence< ::rtl::OUString > aParameterList;
279 if ( !m_pParamDlg )
280 {
281 m_pParamDlg = new SvxJavaParameterDlg( this );
282 javaFrameworkError eErr = jfw_getVMParameters( &m_parParameters, &m_nParamSize );
283 if ( JFW_E_NONE == eErr && m_parParameters && m_nParamSize > 0 )
284 {
285 rtl_uString** pParamArr = m_parParameters;
286 aParameterList.realloc( m_nParamSize );
287 ::rtl::OUString* pParams = aParameterList.getArray();
288 for ( sal_Int32 i = 0; i < m_nParamSize; ++i )
289 {
290 rtl_uString* pParam = *pParamArr++;
291 pParams[i] = ::rtl::OUString( pParam );
292 }
293 m_pParamDlg->SetParameters( aParameterList );
294 }
295 }
296 else
297 aParameterList = m_pParamDlg->GetParameters();
298
299 if ( m_pParamDlg->Execute() == RET_OK )
300 {
301 if ( !areListsEqual( aParameterList, m_pParamDlg->GetParameters() ) )
302 {
303 aParameterList = m_pParamDlg->GetParameters();
304 sal_Bool bRunning = sal_False;
305 javaFrameworkError eErr = jfw_isVMRunning( &bRunning );
306 DBG_ASSERT( JFW_E_NONE == eErr,
307 "SvxJavaOptionsPage::ParameterHdl_Impl(): error in jfw_isVMRunning" );
308 (void)eErr;
309 if ( bRunning )
310 {
311 WarningBox aWarnBox( this, CUI_RES( RID_SVX_MSGBOX_JAVA_RESTART2 ) );
312 aWarnBox.Execute();
313 }
314 }
315 }
316 else
317 m_pParamDlg->SetParameters( aParameterList );
318
319 return 0;
320 }
321
322 // -----------------------------------------------------------------------
323
IMPL_LINK(SvxJavaOptionsPage,ClassPathHdl_Impl,PushButton *,EMPTYARG)324 IMPL_LINK( SvxJavaOptionsPage, ClassPathHdl_Impl, PushButton *, EMPTYARG )
325 {
326 String sClassPath;
327
328 if ( !m_pPathDlg )
329 {
330 m_pPathDlg = new SvxJavaClassPathDlg( this );
331 javaFrameworkError eErr = jfw_getUserClassPath( &m_pClassPath );
332 if ( JFW_E_NONE == eErr && m_pClassPath )
333 {
334 sClassPath = String( ::rtl::OUString( m_pClassPath ) );
335 m_pPathDlg->SetClassPath( sClassPath );
336 }
337 }
338 else
339 sClassPath = m_pPathDlg->GetClassPath();
340
341 m_pPathDlg->SetFocus();
342 if ( m_pPathDlg->Execute() == RET_OK )
343 {
344
345 if ( m_pPathDlg->GetClassPath() != sClassPath )
346 {
347 sClassPath = m_pPathDlg->GetClassPath();
348 sal_Bool bRunning = sal_False;
349 javaFrameworkError eErr = jfw_isVMRunning( &bRunning );
350 DBG_ASSERT( JFW_E_NONE == eErr,
351 "SvxJavaOptionsPage::ParameterHdl_Impl(): error in jfw_isVMRunning" );
352 (void)eErr;
353 if ( bRunning )
354 {
355 WarningBox aWarnBox( this, CUI_RES( RID_SVX_MSGBOX_JAVA_RESTART2 ) );
356 aWarnBox.Execute();
357 }
358 }
359 }
360 else
361 m_pPathDlg->SetClassPath( sClassPath );
362
363 return 0;
364 }
365
366 // -----------------------------------------------------------------------
367
IMPL_LINK(SvxJavaOptionsPage,ResetHdl_Impl,Timer *,EMPTYARG)368 IMPL_LINK( SvxJavaOptionsPage, ResetHdl_Impl, Timer *, EMPTYARG )
369 {
370 LoadJREs();
371 return 0;
372 }
373
374 // -----------------------------------------------------------------------
375
IMPL_LINK(SvxJavaOptionsPage,StartFolderPickerHdl,void *,EMPTYARG)376 IMPL_LINK( SvxJavaOptionsPage, StartFolderPickerHdl, void*, EMPTYARG )
377 {
378 try
379 {
380 Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
381 if ( xAsyncDlg.is() )
382 xAsyncDlg->startExecuteModal( xDialogListener.get() );
383 else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
384 AddFolder( xFolderPicker->getDirectory() );
385 }
386 catch ( Exception& )
387 {
388 #ifdef DBG_UTIL
389 DBG_ERRORFILE( "SvxJavaOptionsPage::StartFolderPickerHdl(): caught exception" );
390 #endif
391 }
392
393 return 0L;
394 }
395
396 // -----------------------------------------------------------------------
397
IMPL_LINK(SvxJavaOptionsPage,DialogClosedHdl,DialogClosedEvent *,pEvt)398 IMPL_LINK( SvxJavaOptionsPage, DialogClosedHdl, DialogClosedEvent*, pEvt )
399 {
400 if ( RET_OK == pEvt->DialogResult )
401 {
402 DBG_ASSERT( xFolderPicker.is() == sal_True, "SvxJavaOptionsPage::DialogClosedHdl(): no folder picker" );
403
404 AddFolder( xFolderPicker->getDirectory() );
405 }
406 return 0L;
407 }
408
409 // -----------------------------------------------------------------------
410
ClearJavaInfo()411 void SvxJavaOptionsPage::ClearJavaInfo()
412 {
413 if ( m_parJavaInfo )
414 {
415 JavaInfo** parInfo = m_parJavaInfo;
416 for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
417 {
418 JavaInfo* pInfo = *parInfo++;
419 jfw_freeJavaInfo( pInfo );
420 }
421
422 rtl_freeMemory( m_parJavaInfo );
423 m_parJavaInfo = NULL;
424 m_nInfoSize = 0;
425 }
426 }
427
428 // -----------------------------------------------------------------------
429
ClearJavaList()430 void SvxJavaOptionsPage::ClearJavaList()
431 {
432 SvLBoxEntry* pEntry = m_aJavaList.First();
433 while ( pEntry )
434 {
435 String* pLocation = static_cast< String* >( pEntry->GetUserData() );
436 delete pLocation;
437 pEntry = m_aJavaList.Next( pEntry );
438 }
439 m_aJavaList.Clear();
440 }
441
442 // -----------------------------------------------------------------------
443
LoadJREs()444 void SvxJavaOptionsPage::LoadJREs()
445 {
446 WaitObject aWaitObj( &m_aJavaList );
447 javaFrameworkError eErr = jfw_findAllJREs( &m_parJavaInfo, &m_nInfoSize );
448 if ( JFW_E_NONE == eErr && m_parJavaInfo )
449 {
450 JavaInfo** parInfo = m_parJavaInfo;
451 for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
452 {
453 JavaInfo* pInfo = *parInfo++;
454 AddJRE( pInfo );
455 }
456 }
457
458 std::vector< JavaInfo* >::iterator pIter;
459 for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
460 {
461 JavaInfo* pInfo = *pIter;
462 AddJRE( pInfo );
463 }
464
465 JavaInfo* pSelectedJava = NULL;
466 eErr = jfw_getSelectedJRE( &pSelectedJava );
467 if ( JFW_E_NONE == eErr && pSelectedJava )
468 {
469 JavaInfo** parInfo = m_parJavaInfo;
470 for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
471 {
472 JavaInfo* pCmpInfo = *parInfo++;
473 if ( jfw_areEqualJavaInfo( pCmpInfo, pSelectedJava ) )
474 {
475 SvLBoxEntry* pEntry = m_aJavaList.GetEntry(i);
476 if ( pEntry )
477 m_aJavaList.HandleEntryChecked( pEntry );
478 break;
479 }
480 }
481 }
482
483 jfw_freeJavaInfo( pSelectedJava );
484 }
485
486 // -----------------------------------------------------------------------
487
AddJRE(JavaInfo * _pInfo)488 void SvxJavaOptionsPage::AddJRE( JavaInfo* _pInfo )
489 {
490 String sEntry( '\t' );
491 sEntry += String( ::rtl::OUString( _pInfo->sVendor ) );
492 sEntry += '\t';
493 sEntry += String( ::rtl::OUString( _pInfo->sVersion ) );
494 sEntry += '\t';
495 if ( ( _pInfo->nFeatures & JFW_FEATURE_ACCESSBRIDGE ) == JFW_FEATURE_ACCESSBRIDGE )
496 sEntry += m_sAccessibilityText;
497 SvLBoxEntry* pEntry = m_aJavaList.InsertEntry( sEntry );
498 INetURLObject aLocObj( ::rtl::OUString( _pInfo->sLocation ) );
499 String* pLocation = new String( aLocObj.getFSysPath( INetURLObject::FSYS_DETECT ) );
500 pEntry->SetUserData( pLocation );
501 }
502
503 // -----------------------------------------------------------------------
504
HandleCheckEntry(SvLBoxEntry * _pEntry)505 void SvxJavaOptionsPage::HandleCheckEntry( SvLBoxEntry* _pEntry )
506 {
507 m_aJavaList.Select( _pEntry, sal_True );
508 SvButtonState eState = m_aJavaList.GetCheckButtonState( _pEntry );
509
510 if ( SV_BUTTON_CHECKED == eState )
511 {
512 // we have radio button behavior -> so uncheck the other entries
513 SvLBoxEntry* pEntry = m_aJavaList.First();
514 while ( pEntry )
515 {
516 if ( pEntry != _pEntry )
517 m_aJavaList.SetCheckButtonState( pEntry, SV_BUTTON_UNCHECKED );
518 pEntry = m_aJavaList.Next( pEntry );
519 }
520 }
521 else
522 m_aJavaList.SetCheckButtonState( _pEntry, SV_BUTTON_CHECKED );
523 }
524
525 // -----------------------------------------------------------------------
526
AddFolder(const::rtl::OUString & _rFolder)527 void SvxJavaOptionsPage::AddFolder( const ::rtl::OUString& _rFolder )
528 {
529 bool bStartAgain = true;
530 sal_Int32 nPos = 0;
531 JavaInfo* pInfo = NULL;
532 javaFrameworkError eErr = jfw_getJavaInfoByPath( _rFolder.pData, &pInfo );
533 if ( JFW_E_NONE == eErr && pInfo )
534 {
535 bool bFound = false;
536 JavaInfo** parInfo = m_parJavaInfo;
537 for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
538 {
539 JavaInfo* pCmpInfo = *parInfo++;
540 if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
541 {
542 bFound = true;
543 nPos = i;
544 break;
545 }
546 }
547
548 if ( !bFound )
549 {
550 std::vector< JavaInfo* >::iterator pIter;
551 for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
552 {
553 JavaInfo* pCmpInfo = *pIter;
554 if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
555 {
556 bFound = true;
557 break;
558 }
559 }
560 }
561
562 if ( !bFound )
563 {
564 jfw_addJRELocation( pInfo->sLocation );
565 AddJRE( pInfo );
566 m_aAddedInfos.push_back( pInfo );
567 nPos = m_aJavaList.GetEntryCount() - 1;
568 }
569 else
570 jfw_freeJavaInfo( pInfo );
571
572 SvLBoxEntry* pEntry = m_aJavaList.GetEntry( nPos );
573 m_aJavaList.Select( pEntry );
574 m_aJavaList.SetCheckButtonState( pEntry, SV_BUTTON_CHECKED );
575 HandleCheckEntry( pEntry );
576 bStartAgain = false;
577 }
578 else if ( JFW_E_NOT_RECOGNIZED == eErr )
579 {
580 ErrorBox aErrBox( this, CUI_RES( RID_SVXERR_JRE_NOT_RECOGNIZED ) );
581 aErrBox.Execute();
582 }
583 else if ( JFW_E_FAILED_VERSION == eErr )
584 {
585 ErrorBox aErrBox( this, CUI_RES( RID_SVXERR_JRE_FAILED_VERSION ) );
586 aErrBox.Execute();
587 }
588
589 if ( bStartAgain )
590 {
591 xFolderPicker->setDisplayDirectory( _rFolder );
592 Application::PostUserEvent( LINK( this, SvxJavaOptionsPage, StartFolderPickerHdl ) );
593 }
594 }
595
596 // -----------------------------------------------------------------------
597
Create(Window * pParent,const SfxItemSet & rAttrSet)598 SfxTabPage* SvxJavaOptionsPage::Create( Window* pParent, const SfxItemSet& rAttrSet )
599 {
600 return ( new SvxJavaOptionsPage( pParent, rAttrSet ) );
601 }
602
603 // -----------------------------------------------------------------------
604
FillItemSet(SfxItemSet &)605 sal_Bool SvxJavaOptionsPage::FillItemSet( SfxItemSet& /*rCoreSet*/ )
606 {
607 sal_Bool bModified = sal_False;
608 javaFrameworkError eErr = JFW_E_NONE;
609 if ( m_pParamDlg )
610 {
611 Sequence< ::rtl::OUString > aParamList = m_pParamDlg->GetParameters();
612 sal_Int32 i, nSize = aParamList.getLength();
613 rtl_uString** pParamArr = (rtl_uString**)rtl_allocateMemory( sizeof(rtl_uString*) * nSize );
614 rtl_uString** pParamArrIter = pParamArr;
615 const ::rtl::OUString* pList = aParamList.getConstArray();
616 for ( i = 0; i < nSize; ++i )
617 pParamArr[i] = pList[i].pData;
618 eErr = jfw_setVMParameters( pParamArrIter, nSize );
619 DBG_ASSERT( JFW_E_NONE == eErr,
620 "SvxJavaOptionsPage::FillItemSet(): error in jfw_setVMParameters" );
621 pParamArrIter = pParamArr;
622 rtl_freeMemory( pParamArr );
623 bModified = sal_True;
624 }
625
626 if ( m_pPathDlg )
627 {
628 ::rtl::OUString sPath( m_pPathDlg->GetClassPath() );
629 if ( m_pPathDlg->GetOldPath() != String( sPath ) )
630 {
631 eErr = jfw_setUserClassPath( sPath.pData );
632 DBG_ASSERT( JFW_E_NONE == eErr,
633 "SvxJavaOptionsPage::FillItemSet(): error in jfw_setUserClassPath" );
634 bModified = sal_True;
635 }
636 }
637
638 sal_uLong nCount = m_aJavaList.GetEntryCount();
639 for ( sal_uLong i = 0; i < nCount; ++i )
640 {
641 if ( m_aJavaList.GetCheckButtonState( m_aJavaList.GetEntry(i) ) == SV_BUTTON_CHECKED )
642 {
643 JavaInfo* pInfo = NULL;
644 if ( i < static_cast< sal_uLong >( m_nInfoSize ) )
645 pInfo = m_parJavaInfo[i];
646 else
647 pInfo = m_aAddedInfos[ i - m_nInfoSize ];
648
649 JavaInfo* pSelectedJava = NULL;
650 eErr = jfw_getSelectedJRE( &pSelectedJava );
651 if ( JFW_E_NONE == eErr || JFW_E_INVALID_SETTINGS == eErr )
652 {
653 if (pSelectedJava == NULL || !jfw_areEqualJavaInfo( pInfo, pSelectedJava ) )
654 {
655 sal_Bool bRunning = sal_False;
656 eErr = jfw_isVMRunning( &bRunning );
657 DBG_ASSERT( JFW_E_NONE == eErr,
658 "SvxJavaOptionsPage::FillItemSet(): error in jfw_isVMRunning" );
659 if ( bRunning ||
660 ( ( pInfo->nRequirements & JFW_REQUIRE_NEEDRESTART ) == JFW_REQUIRE_NEEDRESTART ) )
661 {
662 WarningBox aWarnBox( this, CUI_RES( RID_SVX_MSGBOX_JAVA_RESTART ) );
663 aWarnBox.Execute();
664 }
665
666 eErr = jfw_setSelectedJRE( pInfo );
667 DBG_ASSERT( JFW_E_NONE == eErr,
668 "SvxJavaOptionsPage::FillItemSet(): error in jfw_setSelectedJRE" );
669 bModified = sal_True;
670 }
671 }
672 jfw_freeJavaInfo( pSelectedJava );
673 break;
674 }
675 }
676
677 sal_Bool bEnabled = sal_False;
678 eErr = jfw_getEnabled( &bEnabled );
679 DBG_ASSERT( JFW_E_NONE == eErr,
680 "SvxJavaOptionsPage::FillItemSet(): error in jfw_getEnabled" );
681 if ( bEnabled != m_aJavaEnableCB.IsChecked() )
682 {
683 eErr = jfw_setEnabled( m_aJavaEnableCB.IsChecked() );
684 DBG_ASSERT( JFW_E_NONE == eErr,
685 "SvxJavaOptionsPage::FillItemSet(): error in jfw_setEnabled" );
686 bModified = sal_True;
687 }
688
689 return bModified;
690 }
691
692 // -----------------------------------------------------------------------
693
Reset(const SfxItemSet &)694 void SvxJavaOptionsPage::Reset( const SfxItemSet& /*rSet*/ )
695 {
696 ClearJavaInfo();
697 ClearJavaList();
698
699 sal_Bool bEnabled = sal_False;
700 javaFrameworkError eErr = jfw_getEnabled( &bEnabled );
701 if ( eErr != JFW_E_NONE )
702 bEnabled = sal_False;
703 m_aJavaEnableCB.Check( bEnabled );
704 EnableHdl_Impl( &m_aJavaEnableCB );
705
706 m_aResetTimer.Start();
707 }
708
709 // -----------------------------------------------------------------------
710
FillUserData()711 void SvxJavaOptionsPage::FillUserData()
712 {
713 String aUserData;
714 SetUserData( aUserData );
715 }
716
717 // class SvxJavaParameterDlg ---------------------------------------------
718
SvxJavaParameterDlg(Window * pParent)719 SvxJavaParameterDlg::SvxJavaParameterDlg( Window* pParent ) :
720
721 ModalDialog( pParent, CUI_RES( RID_SVXDLG_JAVA_PARAMETER ) ),
722
723 m_aParameterLabel ( this, CUI_RES( FT_PARAMETER ) ),
724 m_aParameterEdit ( this, CUI_RES( ED_PARAMETER ) ),
725 m_aAssignBtn ( this, CUI_RES( PB_ASSIGN ) ),
726 m_aAssignedLabel ( this, CUI_RES( FT_ASSIGNED ) ),
727 m_aAssignedList ( this, CUI_RES( LB_ASSIGNED ) ),
728 m_aExampleText ( this, CUI_RES( FT_EXAMPLE ) ),
729 m_aRemoveBtn ( this, CUI_RES( PB_REMOVE ) ),
730 m_aButtonsLine ( this, CUI_RES( FL_BUTTONS ) ),
731 m_aOKBtn ( this, CUI_RES( PB_PARAMETER_OK ) ),
732 m_aCancelBtn ( this, CUI_RES( PB_PARAMETER_ESC ) ),
733 m_aHelpBtn ( this, CUI_RES( PB_PARAMETER_HLP ) )
734
735 {
736 FreeResource();
737
738 m_aParameterEdit.SetModifyHdl( LINK( this, SvxJavaParameterDlg, ModifyHdl_Impl ) );
739 m_aAssignBtn.SetClickHdl( LINK( this, SvxJavaParameterDlg, AssignHdl_Impl ) );
740 m_aRemoveBtn.SetClickHdl( LINK( this, SvxJavaParameterDlg, RemoveHdl_Impl ) );
741 m_aAssignedList.SetSelectHdl( LINK( this, SvxJavaParameterDlg, SelectHdl_Impl ) );
742 m_aAssignedList.SetDoubleClickHdl( LINK( this, SvxJavaParameterDlg, DblClickHdl_Impl ) );
743
744 ModifyHdl_Impl( &m_aParameterEdit );
745 EnableRemoveButton();
746 }
747
748 // -----------------------------------------------------------------------
749
~SvxJavaParameterDlg()750 SvxJavaParameterDlg::~SvxJavaParameterDlg()
751 {
752 }
753
754 // -----------------------------------------------------------------------
755
IMPL_LINK(SvxJavaParameterDlg,ModifyHdl_Impl,Edit *,EMPTYARG)756 IMPL_LINK( SvxJavaParameterDlg, ModifyHdl_Impl, Edit *, EMPTYARG )
757 {
758 String sParam = STRIM( m_aParameterEdit.GetText() );
759 m_aAssignBtn.Enable( sParam.Len() > 0 );
760
761 return 0;
762 }
763
764 // -----------------------------------------------------------------------
765
IMPL_LINK(SvxJavaParameterDlg,AssignHdl_Impl,PushButton *,EMPTYARG)766 IMPL_LINK( SvxJavaParameterDlg, AssignHdl_Impl, PushButton *, EMPTYARG )
767 {
768 String sParam = STRIM( m_aParameterEdit.GetText() );
769 if ( sParam.Len() > 0 )
770 {
771 sal_uInt16 nPos = m_aAssignedList.GetEntryPos( sParam );
772 if ( LISTBOX_ENTRY_NOTFOUND == nPos )
773 nPos = m_aAssignedList.InsertEntry( sParam );
774 m_aAssignedList.SelectEntryPos( nPos );
775 m_aParameterEdit.SetText( String() );
776 ModifyHdl_Impl( &m_aParameterEdit );
777 EnableRemoveButton();
778 }
779
780 return 0;
781 }
782
783 // -----------------------------------------------------------------------
784
IMPL_LINK(SvxJavaParameterDlg,SelectHdl_Impl,ListBox *,EMPTYARG)785 IMPL_LINK( SvxJavaParameterDlg, SelectHdl_Impl, ListBox *, EMPTYARG )
786 {
787 EnableRemoveButton();
788 return 0;
789 }
790
791 // -----------------------------------------------------------------------
792
IMPL_LINK(SvxJavaParameterDlg,DblClickHdl_Impl,ListBox *,EMPTYARG)793 IMPL_LINK( SvxJavaParameterDlg, DblClickHdl_Impl, ListBox *, EMPTYARG )
794 {
795 sal_uInt16 nPos = m_aAssignedList.GetSelectEntryPos();
796 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
797 m_aParameterEdit.SetText( m_aAssignedList.GetEntry( nPos ) );
798 return 0;
799 }
800
801 // -----------------------------------------------------------------------
802
IMPL_LINK(SvxJavaParameterDlg,RemoveHdl_Impl,PushButton *,EMPTYARG)803 IMPL_LINK( SvxJavaParameterDlg, RemoveHdl_Impl, PushButton *, EMPTYARG )
804 {
805 sal_uInt16 nPos = m_aAssignedList.GetSelectEntryPos();
806 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
807 {
808 m_aAssignedList.RemoveEntry( nPos );
809 sal_uInt16 nCount = m_aAssignedList.GetEntryCount();
810 if ( nCount )
811 {
812 if ( nPos >= nCount )
813 nPos = ( nCount - 1 );
814 m_aAssignedList.SelectEntryPos( nPos );
815 }
816 }
817 EnableRemoveButton();
818
819 return 0;
820 }
821
822 // -----------------------------------------------------------------------
823
Execute()824 short SvxJavaParameterDlg::Execute()
825 {
826 m_aParameterEdit.GrabFocus();
827 m_aAssignedList.SetNoSelection();
828 return ModalDialog::Execute();
829 }
830
831 // -----------------------------------------------------------------------
832
GetParameters() const833 Sequence< ::rtl::OUString > SvxJavaParameterDlg::GetParameters() const
834 {
835 sal_uInt16 nCount = m_aAssignedList.GetEntryCount();
836 Sequence< ::rtl::OUString > aParamList( nCount );
837 ::rtl::OUString* pArray = aParamList.getArray();
838 for ( sal_uInt16 i = 0; i < nCount; ++i )
839 pArray[i] = ::rtl::OUString( m_aAssignedList.GetEntry(i) );
840 return aParamList;
841 }
842
843 // -----------------------------------------------------------------------
844
SetParameters(Sequence<::rtl::OUString> & rParams)845 void SvxJavaParameterDlg::SetParameters( Sequence< ::rtl::OUString >& rParams )
846 {
847 m_aAssignedList.Clear();
848 sal_uLong i, nCount = rParams.getLength();
849 const ::rtl::OUString* pArray = rParams.getConstArray();
850 for ( i = 0; i < nCount; ++i )
851 {
852 String sParam = String( *pArray++ );
853 m_aAssignedList.InsertEntry( sParam );
854 }
855 }
856
857 // class SvxJavaClassPathDlg ---------------------------------------------
858
SvxJavaClassPathDlg(Window * pParent)859 SvxJavaClassPathDlg::SvxJavaClassPathDlg( Window* pParent ) :
860
861 ModalDialog( pParent, CUI_RES( RID_SVXDLG_JAVA_CLASSPATH ) ),
862
863 m_aPathLabel ( this, CUI_RES( FT_PATH ) ),
864 m_aPathList ( this, CUI_RES( LB_PATH ) ),
865 m_aAddArchiveBtn ( this, CUI_RES( PB_ADDARCHIVE ) ),
866 m_aAddPathBtn ( this, CUI_RES( PB_ADDPATH ) ),
867 m_aRemoveBtn ( this, CUI_RES( PB_REMOVE_PATH ) ),
868 m_aButtonsLine ( this, CUI_RES( FL_PATH_BUTTONS ) ),
869 m_aOKBtn ( this, CUI_RES( PB_PATH_OK ) ),
870 m_aCancelBtn ( this, CUI_RES( PB_PATH_ESC ) ),
871 m_aHelpBtn ( this, CUI_RES( PB_PATH_HLP ) )
872
873 {
874 FreeResource();
875
876 m_aAddArchiveBtn.SetClickHdl( LINK( this, SvxJavaClassPathDlg, AddArchiveHdl_Impl ) );
877 m_aAddPathBtn.SetClickHdl( LINK( this, SvxJavaClassPathDlg, AddPathHdl_Impl ) );
878 m_aRemoveBtn.SetClickHdl( LINK( this, SvxJavaClassPathDlg, RemoveHdl_Impl ) );
879 m_aPathList.SetSelectHdl( LINK( this, SvxJavaClassPathDlg, SelectHdl_Impl ) );
880
881 // check if the buttons text are not too wide otherwise we have to stretch the buttons
882 // and shrink the listbox
883 long nTxtWidth1 = m_aAddArchiveBtn.GetTextWidth( m_aAddArchiveBtn.GetText() );
884 long nTxtWidth2 = m_aAddPathBtn.GetTextWidth( m_aAddPathBtn.GetText() );
885 Size aBtnSz = m_aAddArchiveBtn.GetSizePixel();
886 if ( nTxtWidth1 > aBtnSz.Width() || nTxtWidth2 > aBtnSz.Width() )
887 {
888 long nW = ( nTxtWidth1 > aBtnSz.Width() ) ? nTxtWidth1 : nTxtWidth2;
889 long nDelta = nW - aBtnSz.Width() + 2 * BUTTON_BORDER;
890 aBtnSz.Width() += nDelta;
891 Point aBtnPnt = m_aAddArchiveBtn.GetPosPixel();
892 aBtnPnt.X() -= nDelta;
893 m_aAddArchiveBtn.SetPosSizePixel( aBtnPnt, aBtnSz );
894 aBtnPnt = m_aAddPathBtn.GetPosPixel();
895 aBtnPnt.X() -= nDelta;
896 m_aAddPathBtn.SetPosSizePixel( aBtnPnt, aBtnSz );
897 aBtnPnt = m_aRemoveBtn.GetPosPixel();
898 aBtnPnt.X() -= nDelta;
899 m_aRemoveBtn.SetPosSizePixel( aBtnPnt, aBtnSz );
900 Size aBoxSz = m_aPathList.GetSizePixel();
901 aBoxSz.Width() -= nDelta;
902 m_aPathList.SetSizePixel( aBoxSz );
903 }
904
905 // set initial focus to path list
906 m_aPathList.GrabFocus();
907 }
908
909 // -----------------------------------------------------------------------
910
~SvxJavaClassPathDlg()911 SvxJavaClassPathDlg::~SvxJavaClassPathDlg()
912 {
913 sal_uInt16 i, nCount = m_aPathList.GetEntryCount();
914 for ( i = 0; i < nCount; ++i )
915 delete static_cast< String* >( m_aPathList.GetEntryData(i) );
916 }
917
918 // -----------------------------------------------------------------------
919
IMPL_LINK(SvxJavaClassPathDlg,AddArchiveHdl_Impl,PushButton *,EMPTYARG)920 IMPL_LINK( SvxJavaClassPathDlg, AddArchiveHdl_Impl, PushButton *, EMPTYARG )
921 {
922 sfx2::FileDialogHelper aDlg( TemplateDescription::FILEOPEN_SIMPLE, 0 );
923 aDlg.SetTitle( CUI_RES( RID_SVXSTR_ARCHIVE_TITLE ) );
924 aDlg.AddFilter( CUI_RES( RID_SVXSTR_ARCHIVE_HEADLINE ), String::CreateFromAscii("*.jar;*.zip") );
925 String sFolder;
926 if ( m_aPathList.GetSelectEntryCount() > 0 )
927 {
928 INetURLObject aObj( m_aPathList.GetSelectEntry(), INetURLObject::FSYS_DETECT );
929 sFolder = aObj.GetMainURL( INetURLObject::NO_DECODE );
930 }
931 else
932 sFolder = SvtPathOptions().GetWorkPath();
933 aDlg.SetDisplayDirectory( sFolder );
934 if ( aDlg.Execute() == ERRCODE_NONE )
935 {
936 String sURL = aDlg.GetPath();
937 INetURLObject aURL( sURL );
938 String sFile = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
939 if ( !IsPathDuplicate( sURL ) )
940 {
941 sal_uInt16 nPos = m_aPathList.InsertEntry( sFile, SvFileInformationManager::GetImage( aURL ) );
942 m_aPathList.SelectEntryPos( nPos );
943 }
944 else
945 {
946 String sMsg( CUI_RES( RID_SVXSTR_MULTIFILE_DBL_ERR ) );
947 sMsg.SearchAndReplaceAscii( "%1", sFile );
948 ErrorBox( this, WB_OK, sMsg ).Execute();
949 }
950 }
951 EnableRemoveButton();
952 return 0;
953 }
954
955 // -----------------------------------------------------------------------
956
IMPL_LINK(SvxJavaClassPathDlg,AddPathHdl_Impl,PushButton *,EMPTYARG)957 IMPL_LINK( SvxJavaClassPathDlg, AddPathHdl_Impl, PushButton *, EMPTYARG )
958 {
959 rtl::OUString sService( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FolderPicker" ) );
960 Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
961 Reference < XFolderPicker > xFolderPicker( xFactory->createInstance( sService ), UNO_QUERY );
962
963 String sOldFolder;
964 if ( m_aPathList.GetSelectEntryCount() > 0 )
965 {
966 INetURLObject aObj( m_aPathList.GetSelectEntry(), INetURLObject::FSYS_DETECT );
967 sOldFolder = aObj.GetMainURL( INetURLObject::NO_DECODE );
968 }
969 else
970 sOldFolder = SvtPathOptions().GetWorkPath();
971 xFolderPicker->setDisplayDirectory( sOldFolder );
972 if ( xFolderPicker->execute() == ExecutableDialogResults::OK )
973 {
974 String sFolderURL( xFolderPicker->getDirectory() );
975 INetURLObject aURL( sFolderURL );
976 String sNewFolder = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
977 if ( !IsPathDuplicate( sFolderURL ) )
978 {
979 sal_uInt16 nPos = m_aPathList.InsertEntry( sNewFolder, SvFileInformationManager::GetImage( aURL ) );
980 m_aPathList.SelectEntryPos( nPos );
981 }
982 else
983 {
984 String sMsg( CUI_RES( RID_SVXSTR_MULTIFILE_DBL_ERR ) );
985 sMsg.SearchAndReplaceAscii( "%1", sNewFolder );
986 ErrorBox( this, WB_OK, sMsg ).Execute();
987 }
988 }
989 EnableRemoveButton();
990 return 0;
991 }
992
993 // -----------------------------------------------------------------------
994
IMPL_LINK(SvxJavaClassPathDlg,RemoveHdl_Impl,PushButton *,EMPTYARG)995 IMPL_LINK( SvxJavaClassPathDlg, RemoveHdl_Impl, PushButton *, EMPTYARG )
996 {
997 sal_uInt16 nPos = m_aPathList.GetSelectEntryPos();
998 if ( nPos != LISTBOX_ENTRY_NOTFOUND )
999 {
1000 m_aPathList.RemoveEntry( nPos );
1001 sal_uInt16 nCount = m_aPathList.GetEntryCount();
1002 if ( nCount )
1003 {
1004 if ( nPos >= nCount )
1005 nPos = ( nCount - 1 );
1006 m_aPathList.SelectEntryPos( nPos );
1007 }
1008 }
1009
1010 EnableRemoveButton();
1011 return 0;
1012 }
1013
1014 // -----------------------------------------------------------------------
1015
IMPL_LINK(SvxJavaClassPathDlg,SelectHdl_Impl,ListBox *,EMPTYARG)1016 IMPL_LINK( SvxJavaClassPathDlg, SelectHdl_Impl, ListBox *, EMPTYARG )
1017 {
1018 EnableRemoveButton();
1019 return 0;
1020 }
1021
1022 // -----------------------------------------------------------------------
1023
IsPathDuplicate(const String & _rPath)1024 bool SvxJavaClassPathDlg::IsPathDuplicate( const String& _rPath )
1025 {
1026 bool bRet = false;
1027 INetURLObject aFileObj( _rPath );
1028 sal_uInt16 nCount = m_aPathList.GetEntryCount();
1029 for ( sal_uInt16 i = 0; i < nCount; ++i )
1030 {
1031 INetURLObject aOtherObj( m_aPathList.GetEntry(i), INetURLObject::FSYS_DETECT );
1032 if ( aOtherObj == aFileObj )
1033 {
1034 bRet = true;
1035 break;
1036 }
1037 }
1038
1039 return bRet;
1040 }
1041
1042 // -----------------------------------------------------------------------
1043
GetClassPath() const1044 String SvxJavaClassPathDlg::GetClassPath() const
1045 {
1046 String sPath;
1047 sal_uInt16 nCount = m_aPathList.GetEntryCount();
1048 for ( sal_uInt16 i = 0; i < nCount; ++i )
1049 {
1050 if ( sPath.Len() > 0 )
1051 sPath += CLASSPATH_DELIMITER;
1052 String* pFullPath = static_cast< String* >( m_aPathList.GetEntryData(i) );
1053 if ( pFullPath )
1054 sPath += *pFullPath;
1055 else
1056 sPath += m_aPathList.GetEntry(i);
1057 }
1058 return sPath;
1059 }
1060
1061 // -----------------------------------------------------------------------
1062
SetClassPath(const String & _rPath)1063 void SvxJavaClassPathDlg::SetClassPath( const String& _rPath )
1064 {
1065 if ( m_sOldPath.Len() == 0 )
1066 m_sOldPath = _rPath;
1067 m_aPathList.Clear();
1068 xub_StrLen i, nIdx = 0;
1069 xub_StrLen nCount = _rPath.GetTokenCount( CLASSPATH_DELIMITER );
1070 for ( i = 0; i < nCount; ++i )
1071 {
1072 String sToken = _rPath.GetToken( 0, CLASSPATH_DELIMITER, nIdx );
1073 INetURLObject aURL( sToken, INetURLObject::FSYS_DETECT );
1074 String sPath = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
1075 m_aPathList.InsertEntry( sPath, SvFileInformationManager::GetImage( aURL ) );
1076 }
1077 // select first entry
1078 m_aPathList.SelectEntryPos(0);
1079 SelectHdl_Impl( NULL );
1080 }
1081
1082