Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <config_features.h>
21 :
22 : #include "optaboutconfig.hxx"
23 : #include "optjava.hxx"
24 : #include <dialmgr.hxx>
25 :
26 : #include <officecfg/Office/Common.hxx>
27 : #include <svtools/miscopt.hxx>
28 :
29 : #include <cuires.hrc>
30 : #include "helpid.hrc"
31 : #include <vcl/svapp.hxx>
32 : #include <vcl/help.hxx>
33 : #include <tools/urlobj.hxx>
34 : #include <vcl/layout.hxx>
35 : #include <vcl/waitobj.hxx>
36 : #include <unotools/pathoptions.hxx>
37 : #include <svtools/imagemgr.hxx>
38 : #include "svtools/restartdialog.hxx"
39 : #include "svtools/treelistentry.hxx"
40 : #include <sfx2/filedlghelper.hxx>
41 : #include <comphelper/processfactory.hxx>
42 : #include <comphelper/string.hxx>
43 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
44 : #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
45 : #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
46 : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
47 : #include <com/sun/star/ui/dialogs/FolderPicker.hpp>
48 : #include <com/sun/star/ucb/XContentProvider.hpp>
49 : #if HAVE_FEATURE_JAVA
50 : #include <jvmfwk/framework.h>
51 : #endif
52 :
53 : // define ----------------------------------------------------------------
54 :
55 : #define CLASSPATH_DELIMITER SAL_PATHSEPARATOR
56 : #define RESET_TIMEOUT 300
57 :
58 : using namespace ::com::sun::star::lang;
59 : using namespace ::com::sun::star::ucb;
60 : using namespace ::com::sun::star::ui::dialogs;
61 : using namespace ::com::sun::star::uno;
62 :
63 : #if HAVE_FEATURE_JAVA
64 :
65 0 : static bool areListsEqual( const Sequence< OUString >& rListA, const Sequence< OUString >& rListB )
66 : {
67 0 : bool bRet = true;
68 0 : const sal_Int32 nLen = rListA.getLength();
69 :
70 0 : if ( rListB.getLength() != nLen )
71 0 : bRet = false;
72 : else
73 : {
74 0 : const OUString* pStringA = rListA.getConstArray();
75 0 : const OUString* pStringB = rListB.getConstArray();
76 :
77 0 : for ( sal_Int32 i = 0; i < nLen; ++i )
78 : {
79 0 : if ( *pStringA++ != *pStringB++ )
80 : {
81 0 : bRet = false;
82 0 : break;
83 : }
84 : }
85 : }
86 :
87 0 : return bRet;
88 : }
89 :
90 : #endif
91 :
92 0 : class SvxJavaListBox : public svx::SvxRadioButtonListBox
93 : {
94 : private:
95 : const OUString m_sAccessibilityText;
96 : public:
97 0 : SvxJavaListBox(SvSimpleTableContainer& rParent, const OUString &rAccessibilityText)
98 : : SvxRadioButtonListBox(rParent, 0)
99 0 : , m_sAccessibilityText(rAccessibilityText)
100 : {
101 0 : }
102 0 : void setColSizes()
103 : {
104 0 : HeaderBar &rBar = GetTheHeaderBar();
105 0 : if (rBar.GetItemCount() < 4)
106 0 : return;
107 0 : long nCheckWidth = std::max(GetControlColumnWidth() + 12,
108 0 : rBar.LogicToPixel(Size(15, 0), MAP_APPFONT).Width());
109 0 : long nVersionWidth = 12 +
110 0 : std::max(rBar.GetTextWidth(rBar.GetItemText(3)),
111 0 : GetTextWidth(OUString("0.0.0_00-icedtea")));
112 0 : long nFeatureWidth = 12 +
113 0 : std::max(rBar.GetTextWidth(rBar.GetItemText(4)),
114 0 : GetTextWidth(m_sAccessibilityText));
115 : long nVendorWidth =
116 0 : std::max(GetSizePixel().Width() - (nCheckWidth + nVersionWidth + nFeatureWidth),
117 0 : 6 + std::max(rBar.GetTextWidth(rBar.GetItemText(2)),
118 0 : GetTextWidth(OUString("Sun Microsystems Inc."))));
119 0 : long aStaticTabs[]= { 4, 0, 0, 0, 0, 0 };
120 0 : aStaticTabs[2] = nCheckWidth;
121 0 : aStaticTabs[3] = aStaticTabs[2] + nVendorWidth;
122 0 : aStaticTabs[4] = aStaticTabs[3] + nVersionWidth;
123 0 : SvSimpleTable::SetTabs(aStaticTabs, MAP_PIXEL);
124 : }
125 0 : virtual void Resize() SAL_OVERRIDE
126 : {
127 0 : svx::SvxRadioButtonListBox::Resize();
128 0 : setColSizes();
129 0 : }
130 : };
131 :
132 : // class SvxJavaOptionsPage ----------------------------------------------
133 :
134 0 : SvxJavaOptionsPage::SvxJavaOptionsPage( vcl::Window* pParent, const SfxItemSet& rSet )
135 : : SfxTabPage(pParent, "OptAdvancedPage", "cui/ui/optadvancedpage.ui", &rSet)
136 : , m_pParamDlg(NULL)
137 : , m_pPathDlg(NULL)
138 : #if HAVE_FEATURE_JAVA
139 : , m_parJavaInfo(NULL)
140 : , m_parParameters(NULL)
141 : , m_pClassPath(NULL)
142 : , m_nInfoSize(0)
143 : , m_nParamSize(0)
144 : #endif
145 0 : , xDialogListener(new ::svt::DialogClosedListener())
146 : {
147 0 : get(m_pJavaEnableCB, "javaenabled");
148 0 : get(m_pJavaBox, "javabox");
149 0 : get(m_pJavaPathText, "javapath");
150 0 : m_sInstallText = m_pJavaPathText->GetText();
151 0 : get(m_pAddBtn, "add");
152 0 : get(m_pParameterBtn, "parameters");
153 0 : get(m_pClassPathBtn, "classpath");
154 0 : get(m_pExperimentalCB, "experimental");
155 0 : get(m_pMacroCB, "macrorecording");
156 0 : get(m_pExpertConfigBtn, "expertconfig");
157 0 : m_sAccessibilityText = get<FixedText>("a11y")->GetText();
158 0 : m_sAddDialogText = get<FixedText>("selectruntime")->GetText();
159 :
160 0 : SvSimpleTableContainer *pJavaListContainer = get<SvSimpleTableContainer>("javas");
161 0 : Size aControlSize(177, 60);
162 0 : aControlSize = LogicToPixel(aControlSize, MAP_APPFONT);
163 0 : pJavaListContainer->set_width_request(aControlSize.Width());
164 0 : pJavaListContainer->set_height_request(aControlSize.Height());
165 0 : m_pJavaList = new SvxJavaListBox(*pJavaListContainer, m_sAccessibilityText);
166 :
167 0 : long aStaticTabs[]= { 4, 0, 0, 0, 0 };
168 :
169 0 : m_pJavaList->SvSimpleTable::SetTabs( aStaticTabs );
170 :
171 0 : OUStringBuffer sHeader;
172 0 : sHeader.append("\t").append(get<FixedText>("vendor")->GetText())
173 0 : .append("\t").append(get<FixedText>("version")->GetText())
174 0 : .append("\t").append(get<FixedText>("features")->GetText())
175 0 : .append("\t");
176 0 : m_pJavaList->InsertHeaderEntry(sHeader.makeStringAndClear(), HEADERBAR_APPEND, HIB_LEFT);
177 0 : m_pJavaList->setColSizes();
178 :
179 0 : m_pJavaEnableCB->SetClickHdl( LINK( this, SvxJavaOptionsPage, EnableHdl_Impl ) );
180 0 : m_pJavaList->SetCheckButtonHdl( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) );
181 0 : m_pJavaList->SetSelectHdl( LINK( this, SvxJavaOptionsPage, SelectHdl_Impl ) );
182 0 : m_pAddBtn->SetClickHdl( LINK( this, SvxJavaOptionsPage, AddHdl_Impl ) );
183 0 : m_pParameterBtn->SetClickHdl( LINK( this, SvxJavaOptionsPage, ParameterHdl_Impl ) );
184 0 : m_pClassPathBtn->SetClickHdl( LINK( this, SvxJavaOptionsPage, ClassPathHdl_Impl ) );
185 0 : m_aResetTimer.SetTimeoutHdl( LINK( this, SvxJavaOptionsPage, ResetHdl_Impl ) );
186 0 : m_aResetTimer.SetTimeout( RESET_TIMEOUT );
187 :
188 0 : m_pExpertConfigBtn->SetClickHdl( LINK( this, SvxJavaOptionsPage, ExpertConfigHdl_Impl) );
189 0 : if (!officecfg::Office::Common::Security::EnableExpertConfiguration::get())
190 0 : m_pExpertConfigBtn->Disable();
191 :
192 0 : xDialogListener->SetDialogClosedLink( LINK( this, SvxJavaOptionsPage, DialogClosedHdl ) );
193 :
194 0 : EnableHdl_Impl(m_pJavaEnableCB);
195 : #if HAVE_FEATURE_JAVA
196 0 : jfw_lock();
197 : #else
198 : get<vcl::Window>("javaframe")->Disable();
199 : #endif
200 0 : }
201 :
202 :
203 :
204 0 : SvxJavaOptionsPage::~SvxJavaOptionsPage()
205 : {
206 0 : delete m_pJavaList;
207 0 : delete m_pParamDlg;
208 0 : delete m_pPathDlg;
209 0 : ClearJavaInfo();
210 : #if HAVE_FEATURE_JAVA
211 0 : std::vector< JavaInfo* >::iterator pIter;
212 0 : for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
213 : {
214 0 : JavaInfo* pInfo = *pIter;
215 0 : jfw_freeJavaInfo( pInfo );
216 : }
217 :
218 0 : jfw_unlock();
219 : #endif
220 0 : }
221 :
222 :
223 :
224 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, EnableHdl_Impl)
225 : {
226 0 : bool bEnable = m_pJavaEnableCB->IsChecked();
227 0 : m_pJavaBox->Enable(bEnable);
228 0 : bEnable ? m_pJavaList->EnableTable() : m_pJavaList->DisableTable();
229 0 : return 0;
230 : }
231 :
232 :
233 :
234 0 : IMPL_LINK( SvxJavaOptionsPage, CheckHdl_Impl, SvSimpleTable *, pList )
235 : {
236 0 : SvTreeListEntry* pEntry = pList ? m_pJavaList->GetEntry( m_pJavaList->GetCurMousePoint() )
237 0 : : m_pJavaList->FirstSelected();
238 0 : if ( pEntry )
239 0 : m_pJavaList->HandleEntryChecked( pEntry );
240 0 : return 0;
241 : }
242 :
243 :
244 :
245 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, SelectHdl_Impl)
246 : {
247 : // set installation directory info
248 0 : SvTreeListEntry* pEntry = m_pJavaList->FirstSelected();
249 : DBG_ASSERT( pEntry, "SvxJavaOptionsPage::SelectHdl_Impl(): no entry" );
250 0 : OUString* pLocation = static_cast< OUString* >( pEntry->GetUserData() );
251 : DBG_ASSERT( pLocation, "invalid location string" );
252 0 : OUString sInfo = m_sInstallText;
253 0 : if ( pLocation )
254 0 : sInfo += *pLocation;
255 0 : m_pJavaPathText->SetText(sInfo);
256 0 : return 0;
257 : }
258 :
259 :
260 :
261 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, AddHdl_Impl)
262 : {
263 : try
264 : {
265 0 : Reference < XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
266 0 : xFolderPicker = FolderPicker::create(xContext);
267 :
268 0 : OUString sWorkFolder = SvtPathOptions().GetWorkPath();
269 0 : xFolderPicker->setDisplayDirectory( sWorkFolder );
270 0 : xFolderPicker->setDescription( m_sAddDialogText );
271 :
272 0 : Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
273 0 : if ( xAsyncDlg.is() )
274 0 : xAsyncDlg->startExecuteModal( xDialogListener.get() );
275 0 : else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
276 0 : AddFolder( xFolderPicker->getDirectory() );
277 : }
278 0 : catch (const Exception& e)
279 : {
280 : SAL_WARN( "cui.options", "SvxJavaOptionsPage::AddHdl_Impl(): caught exception: " << e.Message);
281 : }
282 :
283 0 : return 0;
284 : }
285 :
286 :
287 :
288 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, ParameterHdl_Impl)
289 : {
290 : #if HAVE_FEATURE_JAVA
291 0 : Sequence< OUString > aParameterList;
292 0 : if ( !m_pParamDlg )
293 : {
294 0 : m_pParamDlg = new SvxJavaParameterDlg( this );
295 0 : javaFrameworkError eErr = jfw_getVMParameters( &m_parParameters, &m_nParamSize );
296 0 : if ( JFW_E_NONE == eErr && m_parParameters && m_nParamSize > 0 )
297 : {
298 0 : rtl_uString** pParamArr = m_parParameters;
299 0 : aParameterList.realloc( m_nParamSize );
300 0 : OUString* pParams = aParameterList.getArray();
301 0 : for ( sal_Int32 i = 0; i < m_nParamSize; ++i )
302 : {
303 0 : rtl_uString* pParam = *pParamArr++;
304 0 : pParams[i] = OUString( pParam );
305 : }
306 0 : m_pParamDlg->SetParameters( aParameterList );
307 : }
308 : }
309 : else
310 0 : aParameterList = m_pParamDlg->GetParameters();
311 :
312 0 : if ( m_pParamDlg->Execute() == RET_OK )
313 : {
314 0 : if ( !areListsEqual( aParameterList, m_pParamDlg->GetParameters() ) )
315 : {
316 0 : aParameterList = m_pParamDlg->GetParameters();
317 0 : sal_Bool bRunning = sal_False;
318 0 : javaFrameworkError eErr = jfw_isVMRunning( &bRunning );
319 : DBG_ASSERT( JFW_E_NONE == eErr,
320 : "SvxJavaOptionsPage::ParameterHdl_Impl(): error in jfw_isVMRunning" );
321 : (void)eErr;
322 0 : if ( bRunning )
323 : {
324 0 : MessageDialog aWarnBox( this, CUI_RES( RID_SVXSTR_OPTIONS_RESTART ), VCL_MESSAGE_INFO );
325 0 : aWarnBox.Execute();
326 : }
327 : }
328 : }
329 : else
330 0 : m_pParamDlg->SetParameters( aParameterList );
331 : #endif
332 0 : return 0;
333 : }
334 :
335 :
336 :
337 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, ClassPathHdl_Impl)
338 : {
339 : #if HAVE_FEATURE_JAVA
340 0 : OUString sClassPath;
341 :
342 0 : if ( !m_pPathDlg )
343 : {
344 0 : m_pPathDlg = new SvxJavaClassPathDlg( this );
345 0 : javaFrameworkError eErr = jfw_getUserClassPath( &m_pClassPath );
346 0 : if ( JFW_E_NONE == eErr && m_pClassPath )
347 : {
348 0 : sClassPath = m_pClassPath;
349 0 : m_pPathDlg->SetClassPath( sClassPath );
350 : }
351 : }
352 : else
353 0 : sClassPath = m_pPathDlg->GetClassPath();
354 :
355 0 : m_pPathDlg->SetFocus();
356 0 : if ( m_pPathDlg->Execute() == RET_OK )
357 : {
358 :
359 0 : if ( m_pPathDlg->GetClassPath() != sClassPath )
360 : {
361 0 : sClassPath = m_pPathDlg->GetClassPath();
362 0 : sal_Bool bRunning = sal_False;
363 0 : javaFrameworkError eErr = jfw_isVMRunning( &bRunning );
364 : DBG_ASSERT( JFW_E_NONE == eErr,
365 : "SvxJavaOptionsPage::ParameterHdl_Impl(): error in jfw_isVMRunning" );
366 : (void)eErr;
367 0 : if ( bRunning )
368 : {
369 0 : MessageDialog aWarnBox( this, CUI_RES( RID_SVXSTR_OPTIONS_RESTART ), VCL_MESSAGE_INFO );
370 0 : aWarnBox.Execute();
371 : }
372 : }
373 : }
374 : else
375 0 : m_pPathDlg->SetClassPath( sClassPath );
376 : #endif
377 0 : return 0;
378 : }
379 :
380 :
381 :
382 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, ResetHdl_Impl)
383 : {
384 0 : LoadJREs();
385 0 : return 0;
386 : }
387 :
388 :
389 :
390 0 : IMPL_LINK_NOARG(SvxJavaOptionsPage, StartFolderPickerHdl)
391 : {
392 : try
393 : {
394 0 : Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
395 0 : if ( xAsyncDlg.is() )
396 0 : xAsyncDlg->startExecuteModal( xDialogListener.get() );
397 0 : else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
398 0 : AddFolder( xFolderPicker->getDirectory() );
399 : }
400 0 : catch ( Exception& )
401 : {
402 : SAL_WARN( "cui.options", "SvxJavaOptionsPage::StartFolderPickerHdl(): caught exception" );
403 : }
404 :
405 0 : return 0L;
406 : }
407 :
408 :
409 :
410 0 : IMPL_LINK( SvxJavaOptionsPage, DialogClosedHdl, DialogClosedEvent*, pEvt )
411 : {
412 0 : if ( RET_OK == pEvt->DialogResult )
413 : {
414 : DBG_ASSERT( xFolderPicker.is(), "SvxJavaOptionsPage::DialogClosedHdl(): no folder picker" );
415 :
416 0 : AddFolder( xFolderPicker->getDirectory() );
417 : }
418 0 : return 0L;
419 : }
420 :
421 :
422 :
423 0 : IMPL_LINK_NOARG( SvxJavaOptionsPage, ExpertConfigHdl_Impl )
424 : {
425 0 : CuiAboutConfigTabPage* m_pExpertConfigDlg = new CuiAboutConfigTabPage(this);
426 0 : m_pExpertConfigDlg->Reset();//initialize and reset function
427 :
428 0 : if( RET_OK == m_pExpertConfigDlg->Execute() )
429 : {
430 0 : m_pExpertConfigDlg->FillItemSet();//save changes if there are any
431 : }
432 :
433 0 : delete m_pExpertConfigDlg;
434 0 : return 0;
435 : }
436 :
437 :
438 :
439 0 : void SvxJavaOptionsPage::ClearJavaInfo()
440 : {
441 : #if HAVE_FEATURE_JAVA
442 0 : if ( m_parJavaInfo )
443 : {
444 0 : JavaInfo** parInfo = m_parJavaInfo;
445 0 : for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
446 : {
447 0 : JavaInfo* pInfo = *parInfo++;
448 0 : jfw_freeJavaInfo( pInfo );
449 : }
450 :
451 0 : rtl_freeMemory( m_parJavaInfo );
452 0 : m_parJavaInfo = NULL;
453 0 : m_nInfoSize = 0;
454 : }
455 : #endif
456 0 : }
457 :
458 :
459 :
460 0 : void SvxJavaOptionsPage::ClearJavaList()
461 : {
462 0 : SvTreeListEntry* pEntry = m_pJavaList->First();
463 0 : while ( pEntry )
464 : {
465 0 : OUString* pLocation = static_cast< OUString* >( pEntry->GetUserData() );
466 0 : delete pLocation;
467 0 : pEntry = m_pJavaList->Next( pEntry );
468 : }
469 0 : m_pJavaList->Clear();
470 0 : }
471 :
472 :
473 :
474 0 : void SvxJavaOptionsPage::LoadJREs()
475 : {
476 : #if HAVE_FEATURE_JAVA
477 0 : WaitObject aWaitObj(m_pJavaList);
478 0 : javaFrameworkError eErr = jfw_findAllJREs( &m_parJavaInfo, &m_nInfoSize );
479 0 : if ( JFW_E_NONE == eErr && m_parJavaInfo )
480 : {
481 0 : JavaInfo** parInfo = m_parJavaInfo;
482 0 : for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
483 : {
484 0 : JavaInfo* pInfo = *parInfo++;
485 0 : AddJRE( pInfo );
486 : }
487 : }
488 :
489 0 : std::vector< JavaInfo* >::iterator pIter;
490 0 : for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
491 : {
492 0 : JavaInfo* pInfo = *pIter;
493 0 : AddJRE( pInfo );
494 : }
495 :
496 0 : JavaInfo* pSelectedJava = NULL;
497 0 : eErr = jfw_getSelectedJRE( &pSelectedJava );
498 0 : if ( JFW_E_NONE == eErr && pSelectedJava )
499 : {
500 0 : JavaInfo** parInfo = m_parJavaInfo;
501 0 : for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
502 : {
503 0 : JavaInfo* pCmpInfo = *parInfo++;
504 0 : if ( jfw_areEqualJavaInfo( pCmpInfo, pSelectedJava ) )
505 : {
506 0 : SvTreeListEntry* pEntry = m_pJavaList->GetEntry(i);
507 0 : if ( pEntry )
508 0 : m_pJavaList->HandleEntryChecked( pEntry );
509 0 : break;
510 : }
511 : }
512 : }
513 :
514 0 : jfw_freeJavaInfo( pSelectedJava );
515 : #endif
516 0 : }
517 :
518 :
519 :
520 0 : void SvxJavaOptionsPage::AddJRE( JavaInfo* _pInfo )
521 : {
522 : #if HAVE_FEATURE_JAVA
523 0 : OUStringBuffer sEntry;
524 0 : sEntry.append('\t');
525 0 : sEntry.append(_pInfo->sVendor);
526 0 : sEntry.append('\t');
527 0 : sEntry.append(_pInfo->sVersion);
528 0 : sEntry.append('\t');
529 0 : if ( ( _pInfo->nFeatures & JFW_FEATURE_ACCESSBRIDGE ) == JFW_FEATURE_ACCESSBRIDGE )
530 0 : sEntry.append(m_sAccessibilityText);
531 0 : SvTreeListEntry* pEntry = m_pJavaList->InsertEntry(sEntry.makeStringAndClear());
532 0 : INetURLObject aLocObj( OUString( _pInfo->sLocation ) );
533 0 : OUString* pLocation = new OUString( aLocObj.getFSysPath( INetURLObject::FSYS_DETECT ) );
534 0 : pEntry->SetUserData( pLocation );
535 : #else
536 : (void)_pInfo;
537 : #endif
538 0 : }
539 :
540 :
541 :
542 0 : void SvxJavaOptionsPage::HandleCheckEntry( SvTreeListEntry* _pEntry )
543 : {
544 0 : m_pJavaList->Select( _pEntry, true );
545 0 : SvButtonState eState = m_pJavaList->GetCheckButtonState( _pEntry );
546 :
547 0 : if ( SV_BUTTON_CHECKED == eState )
548 : {
549 : // we have radio button behavior -> so uncheck the other entries
550 0 : SvTreeListEntry* pEntry = m_pJavaList->First();
551 0 : while ( pEntry )
552 : {
553 0 : if ( pEntry != _pEntry )
554 0 : m_pJavaList->SetCheckButtonState( pEntry, SV_BUTTON_UNCHECKED );
555 0 : pEntry = m_pJavaList->Next( pEntry );
556 : }
557 : }
558 : else
559 0 : m_pJavaList->SetCheckButtonState( _pEntry, SV_BUTTON_CHECKED );
560 0 : }
561 :
562 :
563 :
564 0 : void SvxJavaOptionsPage::AddFolder( const OUString& _rFolder )
565 : {
566 : #if HAVE_FEATURE_JAVA
567 0 : bool bStartAgain = true;
568 0 : JavaInfo* pInfo = NULL;
569 0 : javaFrameworkError eErr = jfw_getJavaInfoByPath( _rFolder.pData, &pInfo );
570 0 : if ( JFW_E_NONE == eErr && pInfo )
571 : {
572 0 : sal_Int32 nPos = 0;
573 0 : bool bFound = false;
574 0 : JavaInfo** parInfo = m_parJavaInfo;
575 0 : for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
576 : {
577 0 : JavaInfo* pCmpInfo = *parInfo++;
578 0 : if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
579 : {
580 0 : bFound = true;
581 0 : nPos = i;
582 0 : break;
583 : }
584 : }
585 :
586 0 : if ( !bFound )
587 : {
588 0 : std::vector< JavaInfo* >::iterator pIter;
589 0 : for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
590 : {
591 0 : JavaInfo* pCmpInfo = *pIter;
592 0 : if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
593 : {
594 0 : bFound = true;
595 0 : break;
596 : }
597 : }
598 : }
599 :
600 0 : if ( !bFound )
601 : {
602 0 : jfw_addJRELocation( pInfo->sLocation );
603 0 : AddJRE( pInfo );
604 0 : m_aAddedInfos.push_back( pInfo );
605 0 : nPos = m_pJavaList->GetEntryCount() - 1;
606 : }
607 : else
608 0 : jfw_freeJavaInfo( pInfo );
609 :
610 0 : SvTreeListEntry* pEntry = m_pJavaList->GetEntry( nPos );
611 0 : m_pJavaList->Select( pEntry );
612 0 : m_pJavaList->SetCheckButtonState( pEntry, SV_BUTTON_CHECKED );
613 0 : HandleCheckEntry( pEntry );
614 0 : bStartAgain = false;
615 : }
616 0 : else if ( JFW_E_NOT_RECOGNIZED == eErr )
617 : {
618 0 : MessageDialog aErrBox( this, CUI_RES( RID_SVXSTR_JRE_NOT_RECOGNIZED ) );
619 0 : aErrBox.Execute();
620 : }
621 0 : else if ( JFW_E_FAILED_VERSION == eErr )
622 : {
623 0 : MessageDialog aErrBox( this, CUI_RES( RID_SVXSTR_JRE_FAILED_VERSION ) );
624 0 : aErrBox.Execute();
625 : }
626 :
627 0 : if ( bStartAgain )
628 : {
629 0 : xFolderPicker->setDisplayDirectory( _rFolder );
630 0 : Application::PostUserEvent( LINK( this, SvxJavaOptionsPage, StartFolderPickerHdl ) );
631 : }
632 : #else
633 : (void)_rFolder;
634 : #endif
635 0 : }
636 :
637 :
638 :
639 0 : SfxTabPage* SvxJavaOptionsPage::Create( vcl::Window* pParent, const SfxItemSet* rAttrSet )
640 : {
641 0 : return ( new SvxJavaOptionsPage( pParent, *rAttrSet ) );
642 : }
643 :
644 :
645 :
646 0 : bool SvxJavaOptionsPage::FillItemSet( SfxItemSet* /*rCoreSet*/ )
647 : {
648 0 : bool bModified = false;
649 :
650 0 : if ( m_pExperimentalCB->IsValueChangedFromSaved() )
651 : {
652 0 : SvtMiscOptions aMiscOpt;
653 0 : aMiscOpt.SetExperimentalMode( m_pExperimentalCB->IsChecked() );
654 0 : bModified = true;
655 : }
656 :
657 0 : if ( m_pMacroCB->IsValueChangedFromSaved() )
658 : {
659 0 : SvtMiscOptions aMiscOpt;
660 0 : aMiscOpt.SetMacroRecorderMode( m_pMacroCB->IsChecked() );
661 0 : bModified = true;
662 : }
663 :
664 : #if HAVE_FEATURE_JAVA
665 0 : javaFrameworkError eErr = JFW_E_NONE;
666 0 : if ( m_pParamDlg )
667 : {
668 0 : Sequence< OUString > aParamList = m_pParamDlg->GetParameters();
669 0 : sal_Int32 i, nSize = aParamList.getLength();
670 0 : rtl_uString** pParamArr = (rtl_uString**)rtl_allocateMemory( sizeof(rtl_uString*) * nSize );
671 0 : rtl_uString** pParamArrIter = pParamArr;
672 0 : const OUString* pList = aParamList.getConstArray();
673 0 : for ( i = 0; i < nSize; ++i )
674 0 : pParamArr[i] = pList[i].pData;
675 0 : eErr = jfw_setVMParameters( pParamArrIter, nSize );
676 : SAL_WARN_IF(JFW_E_NONE != eErr, "cui.options", "SvxJavaOptionsPage::FillItemSet(): error in jfw_setVMParameters");
677 0 : pParamArrIter = pParamArr;
678 0 : rtl_freeMemory( pParamArr );
679 0 : bModified = true;
680 : }
681 :
682 0 : if ( m_pPathDlg )
683 : {
684 0 : OUString sPath( m_pPathDlg->GetClassPath() );
685 0 : if ( m_pPathDlg->GetOldPath() != sPath )
686 : {
687 0 : eErr = jfw_setUserClassPath( sPath.pData );
688 : SAL_WARN_IF(JFW_E_NONE != eErr, "cui.options", "SvxJavaOptionsPage::FillItemSet(): error in jfw_setUserClassPath");
689 0 : bModified = true;
690 0 : }
691 : }
692 :
693 0 : sal_uLong nCount = m_pJavaList->GetEntryCount();
694 0 : for ( sal_uLong i = 0; i < nCount; ++i )
695 : {
696 0 : if ( m_pJavaList->GetCheckButtonState( m_pJavaList->GetEntry(i) ) == SV_BUTTON_CHECKED )
697 : {
698 0 : JavaInfo* pInfo = NULL;
699 0 : if ( i < static_cast< sal_uLong >( m_nInfoSize ) )
700 0 : pInfo = m_parJavaInfo[i];
701 : else
702 0 : pInfo = m_aAddedInfos[ i - m_nInfoSize ];
703 :
704 0 : JavaInfo* pSelectedJava = NULL;
705 0 : eErr = jfw_getSelectedJRE( &pSelectedJava );
706 0 : if ( JFW_E_NONE == eErr || JFW_E_INVALID_SETTINGS == eErr )
707 : {
708 0 : if (pSelectedJava == NULL || !jfw_areEqualJavaInfo( pInfo, pSelectedJava ) )
709 : {
710 0 : sal_Bool bRunning = sal_False;
711 0 : eErr = jfw_isVMRunning( &bRunning );
712 : DBG_ASSERT( JFW_E_NONE == eErr,
713 : "SvxJavaOptionsPage::FillItemSet(): error in jfw_isVMRunning" );
714 0 : if ( bRunning ||
715 0 : ( ( pInfo->nRequirements & JFW_REQUIRE_NEEDRESTART ) == JFW_REQUIRE_NEEDRESTART ) )
716 : {
717 : svtools::executeRestartDialog(
718 : comphelper::getProcessComponentContext(), this,
719 0 : svtools::RESTART_REASON_JAVA);
720 : }
721 :
722 0 : eErr = jfw_setSelectedJRE( pInfo );
723 : SAL_WARN_IF(JFW_E_NONE != eErr, "cui.options", "SvxJavaOptionsPage::FillItemSet(): error in jfw_setSelectedJRE");
724 0 : bModified = true;
725 : }
726 : }
727 0 : jfw_freeJavaInfo( pSelectedJava );
728 0 : break;
729 : }
730 : }
731 :
732 0 : sal_Bool bEnabled = sal_False;
733 0 : eErr = jfw_getEnabled( &bEnabled );
734 : DBG_ASSERT( JFW_E_NONE == eErr,
735 : "SvxJavaOptionsPage::FillItemSet(): error in jfw_getEnabled" );
736 0 : if ( bool(bEnabled) != m_pJavaEnableCB->IsChecked() )
737 : {
738 0 : eErr = jfw_setEnabled( m_pJavaEnableCB->IsChecked() );
739 : DBG_ASSERT( JFW_E_NONE == eErr,
740 : "SvxJavaOptionsPage::FillItemSet(): error in jfw_setEnabled" );
741 0 : bModified = true;
742 : }
743 : #endif
744 :
745 0 : return bModified;
746 : }
747 :
748 :
749 :
750 0 : void SvxJavaOptionsPage::Reset( const SfxItemSet* /*rSet*/ )
751 : {
752 0 : ClearJavaInfo();
753 0 : ClearJavaList();
754 :
755 0 : SvtMiscOptions aMiscOpt;
756 :
757 : #if HAVE_FEATURE_JAVA
758 0 : sal_Bool bEnabled = sal_False;
759 0 : javaFrameworkError eErr = jfw_getEnabled( &bEnabled );
760 0 : if ( eErr != JFW_E_NONE )
761 0 : bEnabled = sal_False;
762 0 : m_pJavaEnableCB->Check( bEnabled );
763 0 : EnableHdl_Impl(m_pJavaEnableCB);
764 : #else
765 : m_pJavaEnableCB->Check( false );
766 : m_pJavaEnableCB->Disable();
767 : #endif
768 :
769 0 : m_pExperimentalCB->Check( aMiscOpt.IsExperimentalMode() );
770 0 : m_pExperimentalCB->SaveValue();
771 0 : m_pMacroCB->Check( aMiscOpt.IsMacroRecorderMode() );
772 0 : m_pMacroCB->SaveValue();
773 :
774 0 : m_aResetTimer.Start();
775 0 : }
776 :
777 :
778 :
779 0 : void SvxJavaOptionsPage::FillUserData()
780 : {
781 0 : OUString aUserData;
782 0 : SetUserData( aUserData );
783 0 : }
784 :
785 : // class SvxJavaParameterDlg ---------------------------------------------
786 :
787 0 : SvxJavaParameterDlg::SvxJavaParameterDlg( vcl::Window* pParent ) :
788 :
789 : ModalDialog( pParent, "JavaStartParameters",
790 0 : "cui/ui/javastartparametersdialog.ui" )
791 : {
792 0 : get( m_pParameterEdit, "parameterfield");
793 0 : get( m_pAssignBtn, "assignbtn");
794 0 : get( m_pAssignedList, "assignlist");
795 0 : m_pAssignedList->SetDropDownLineCount(6);
796 0 : m_pAssignedList->set_width_request(m_pAssignedList->approximate_char_width() * 54);
797 0 : get( m_pRemoveBtn, "removebtn");
798 :
799 0 : m_pParameterEdit->SetModifyHdl( LINK( this, SvxJavaParameterDlg, ModifyHdl_Impl ) );
800 0 : m_pAssignBtn->SetClickHdl( LINK( this, SvxJavaParameterDlg, AssignHdl_Impl ) );
801 0 : m_pRemoveBtn->SetClickHdl( LINK( this, SvxJavaParameterDlg, RemoveHdl_Impl ) );
802 0 : m_pAssignedList->SetSelectHdl( LINK( this, SvxJavaParameterDlg, SelectHdl_Impl ) );
803 0 : m_pAssignedList->SetDoubleClickHdl( LINK( this, SvxJavaParameterDlg, DblClickHdl_Impl ) );
804 :
805 0 : ModifyHdl_Impl( m_pParameterEdit );
806 0 : EnableRemoveButton();
807 0 : }
808 :
809 :
810 :
811 0 : SvxJavaParameterDlg::~SvxJavaParameterDlg()
812 : {
813 0 : }
814 :
815 :
816 :
817 0 : IMPL_LINK_NOARG(SvxJavaParameterDlg, ModifyHdl_Impl)
818 : {
819 0 : OUString sParam = comphelper::string::strip(m_pParameterEdit->GetText(), ' ');
820 0 : m_pAssignBtn->Enable(!sParam.isEmpty());
821 :
822 0 : return 0;
823 : }
824 :
825 :
826 :
827 0 : IMPL_LINK_NOARG(SvxJavaParameterDlg, AssignHdl_Impl)
828 : {
829 0 : OUString sParam = comphelper::string::strip(m_pParameterEdit->GetText(), ' ');
830 0 : if (!sParam.isEmpty())
831 : {
832 0 : sal_Int32 nPos = m_pAssignedList->GetEntryPos( sParam );
833 0 : if ( LISTBOX_ENTRY_NOTFOUND == nPos )
834 0 : nPos = m_pAssignedList->InsertEntry( sParam );
835 0 : m_pAssignedList->SelectEntryPos( nPos );
836 0 : m_pParameterEdit->SetText( OUString() );
837 0 : ModifyHdl_Impl( m_pParameterEdit );
838 0 : EnableRemoveButton();
839 : }
840 :
841 0 : return 0;
842 : }
843 :
844 :
845 :
846 0 : IMPL_LINK_NOARG(SvxJavaParameterDlg, SelectHdl_Impl)
847 : {
848 0 : EnableRemoveButton();
849 0 : return 0;
850 : }
851 :
852 :
853 :
854 0 : IMPL_LINK_NOARG(SvxJavaParameterDlg, DblClickHdl_Impl)
855 : {
856 0 : sal_Int32 nPos = m_pAssignedList->GetSelectEntryPos();
857 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND )
858 0 : m_pParameterEdit->SetText( m_pAssignedList->GetEntry( nPos ) );
859 0 : return 0;
860 : }
861 :
862 :
863 :
864 0 : IMPL_LINK_NOARG(SvxJavaParameterDlg, RemoveHdl_Impl)
865 : {
866 0 : sal_Int32 nPos = m_pAssignedList->GetSelectEntryPos();
867 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND )
868 : {
869 0 : m_pAssignedList->RemoveEntry( nPos );
870 0 : sal_Int32 nCount = m_pAssignedList->GetEntryCount();
871 0 : if ( nCount )
872 : {
873 0 : if ( nPos >= nCount )
874 0 : nPos = ( nCount - 1 );
875 0 : m_pAssignedList->SelectEntryPos( nPos );
876 : }
877 : }
878 0 : EnableRemoveButton();
879 :
880 0 : return 0;
881 : }
882 :
883 :
884 :
885 0 : short SvxJavaParameterDlg::Execute()
886 : {
887 0 : m_pParameterEdit->GrabFocus();
888 0 : m_pAssignedList->SetNoSelection();
889 0 : return ModalDialog::Execute();
890 : }
891 :
892 :
893 :
894 0 : Sequence< OUString > SvxJavaParameterDlg::GetParameters() const
895 : {
896 0 : sal_Int32 nCount = m_pAssignedList->GetEntryCount();
897 0 : Sequence< OUString > aParamList( nCount );
898 0 : OUString* pArray = aParamList.getArray();
899 0 : for ( sal_Int32 i = 0; i < nCount; ++i )
900 0 : pArray[i] = OUString( m_pAssignedList->GetEntry(i) );
901 0 : return aParamList;
902 : }
903 :
904 :
905 :
906 0 : void SvxJavaParameterDlg::SetParameters( Sequence< OUString >& rParams )
907 : {
908 0 : m_pAssignedList->Clear();
909 0 : sal_uLong i, nCount = rParams.getLength();
910 0 : const OUString* pArray = rParams.getConstArray();
911 0 : for ( i = 0; i < nCount; ++i )
912 : {
913 0 : OUString sParam = OUString( *pArray++ );
914 0 : m_pAssignedList->InsertEntry( sParam );
915 0 : }
916 0 : }
917 :
918 : // class SvxJavaClassPathDlg ---------------------------------------------
919 :
920 0 : SvxJavaClassPathDlg::SvxJavaClassPathDlg(vcl::Window* pParent)
921 0 : : ModalDialog(pParent, "JavaClassPath", "cui/ui/javaclasspathdialog.ui")
922 : {
923 0 : get( m_pPathList, "paths");
924 0 : m_pPathList->SetDropDownLineCount(8);
925 0 : m_pPathList->set_width_request(m_pPathList->approximate_char_width() * 54);
926 0 : get( m_pAddArchiveBtn, "archive");
927 0 : get( m_pAddPathBtn, "folder");
928 0 : get( m_pRemoveBtn, "remove");
929 :
930 0 : m_pAddArchiveBtn->SetClickHdl( LINK( this, SvxJavaClassPathDlg, AddArchiveHdl_Impl ) );
931 0 : m_pAddPathBtn->SetClickHdl( LINK( this, SvxJavaClassPathDlg, AddPathHdl_Impl ) );
932 0 : m_pRemoveBtn->SetClickHdl( LINK( this, SvxJavaClassPathDlg, RemoveHdl_Impl ) );
933 0 : m_pPathList->SetSelectHdl( LINK( this, SvxJavaClassPathDlg, SelectHdl_Impl ) );
934 :
935 : // set initial focus to path list
936 0 : m_pPathList->GrabFocus();
937 0 : }
938 :
939 :
940 :
941 0 : SvxJavaClassPathDlg::~SvxJavaClassPathDlg()
942 : {
943 0 : sal_Int32 i, nCount = m_pPathList->GetEntryCount();
944 0 : for ( i = 0; i < nCount; ++i )
945 0 : delete static_cast< OUString* >( m_pPathList->GetEntryData(i) );
946 0 : }
947 :
948 :
949 :
950 0 : IMPL_LINK_NOARG(SvxJavaClassPathDlg, AddArchiveHdl_Impl)
951 : {
952 0 : sfx2::FileDialogHelper aDlg( TemplateDescription::FILEOPEN_SIMPLE, 0 );
953 0 : aDlg.SetTitle( CUI_RES( RID_SVXSTR_ARCHIVE_TITLE ) );
954 0 : aDlg.AddFilter( CUI_RES( RID_SVXSTR_ARCHIVE_HEADLINE ), OUString("*.jar;*.zip") );
955 0 : OUString sFolder;
956 0 : if ( m_pPathList->GetSelectEntryCount() > 0 )
957 : {
958 0 : INetURLObject aObj( m_pPathList->GetSelectEntry(), INetURLObject::FSYS_DETECT );
959 0 : sFolder = aObj.GetMainURL( INetURLObject::NO_DECODE );
960 : }
961 : else
962 0 : sFolder = SvtPathOptions().GetWorkPath();
963 0 : aDlg.SetDisplayDirectory( sFolder );
964 0 : if ( aDlg.Execute() == ERRCODE_NONE )
965 : {
966 0 : OUString sURL = aDlg.GetPath();
967 0 : INetURLObject aURL( sURL );
968 0 : OUString sFile = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
969 0 : if ( !IsPathDuplicate( sURL ) )
970 : {
971 0 : sal_Int32 nPos = m_pPathList->InsertEntry( sFile, SvFileInformationManager::GetImage( aURL, false ) );
972 0 : m_pPathList->SelectEntryPos( nPos );
973 : }
974 : else
975 : {
976 0 : OUString sMsg( CUI_RES( RID_SVXSTR_MULTIFILE_DBL_ERR ) );
977 0 : sMsg = sMsg.replaceFirst( "%1", sFile );
978 0 : MessageDialog(this, sMsg).Execute();
979 0 : }
980 : }
981 0 : EnableRemoveButton();
982 0 : return 0;
983 : }
984 :
985 :
986 :
987 0 : IMPL_LINK_NOARG(SvxJavaClassPathDlg, AddPathHdl_Impl)
988 : {
989 0 : Reference < XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
990 0 : Reference < XFolderPicker2 > xFolderPicker = FolderPicker::create(xContext);;
991 :
992 0 : OUString sOldFolder;
993 0 : if ( m_pPathList->GetSelectEntryCount() > 0 )
994 : {
995 0 : INetURLObject aObj( m_pPathList->GetSelectEntry(), INetURLObject::FSYS_DETECT );
996 0 : sOldFolder = aObj.GetMainURL( INetURLObject::NO_DECODE );
997 : }
998 : else
999 0 : sOldFolder = SvtPathOptions().GetWorkPath();
1000 0 : xFolderPicker->setDisplayDirectory( sOldFolder );
1001 0 : if ( xFolderPicker->execute() == ExecutableDialogResults::OK )
1002 : {
1003 0 : OUString sFolderURL( xFolderPicker->getDirectory() );
1004 0 : INetURLObject aURL( sFolderURL );
1005 0 : OUString sNewFolder = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
1006 0 : if ( !IsPathDuplicate( sFolderURL ) )
1007 : {
1008 0 : sal_Int32 nPos = m_pPathList->InsertEntry( sNewFolder, SvFileInformationManager::GetImage( aURL, false ) );
1009 0 : m_pPathList->SelectEntryPos( nPos );
1010 : }
1011 : else
1012 : {
1013 0 : OUString sMsg( CUI_RES( RID_SVXSTR_MULTIFILE_DBL_ERR ) );
1014 0 : sMsg = sMsg.replaceFirst( "%1", sNewFolder );
1015 0 : MessageDialog(this, sMsg).Execute();
1016 0 : }
1017 : }
1018 0 : EnableRemoveButton();
1019 0 : return 0;
1020 : }
1021 :
1022 :
1023 :
1024 0 : IMPL_LINK_NOARG(SvxJavaClassPathDlg, RemoveHdl_Impl)
1025 : {
1026 0 : sal_Int32 nPos = m_pPathList->GetSelectEntryPos();
1027 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND )
1028 : {
1029 0 : m_pPathList->RemoveEntry( nPos );
1030 0 : sal_Int32 nCount = m_pPathList->GetEntryCount();
1031 0 : if ( nCount )
1032 : {
1033 0 : if ( nPos >= nCount )
1034 0 : nPos = ( nCount - 1 );
1035 0 : m_pPathList->SelectEntryPos( nPos );
1036 : }
1037 : }
1038 :
1039 0 : EnableRemoveButton();
1040 0 : return 0;
1041 : }
1042 :
1043 :
1044 :
1045 0 : IMPL_LINK_NOARG(SvxJavaClassPathDlg, SelectHdl_Impl)
1046 : {
1047 0 : EnableRemoveButton();
1048 0 : return 0;
1049 : }
1050 :
1051 :
1052 :
1053 0 : bool SvxJavaClassPathDlg::IsPathDuplicate( const OUString& _rPath )
1054 : {
1055 0 : bool bRet = false;
1056 0 : INetURLObject aFileObj( _rPath );
1057 0 : sal_Int32 nCount = m_pPathList->GetEntryCount();
1058 0 : for ( sal_Int32 i = 0; i < nCount; ++i )
1059 : {
1060 0 : INetURLObject aOtherObj( m_pPathList->GetEntry(i), INetURLObject::FSYS_DETECT );
1061 0 : if ( aOtherObj == aFileObj )
1062 : {
1063 0 : bRet = true;
1064 0 : break;
1065 : }
1066 0 : }
1067 :
1068 0 : return bRet;
1069 : }
1070 :
1071 :
1072 :
1073 0 : OUString SvxJavaClassPathDlg::GetClassPath() const
1074 : {
1075 0 : OUString sPath;
1076 0 : sal_Int32 nCount = m_pPathList->GetEntryCount();
1077 0 : for ( sal_Int32 i = 0; i < nCount; ++i )
1078 : {
1079 0 : if ( !sPath.isEmpty() )
1080 0 : sPath += OUString(CLASSPATH_DELIMITER);
1081 0 : OUString* pFullPath = static_cast< OUString* >( m_pPathList->GetEntryData(i) );
1082 0 : if ( pFullPath )
1083 0 : sPath += *pFullPath;
1084 : else
1085 0 : sPath += m_pPathList->GetEntry(i);
1086 : }
1087 0 : return sPath;
1088 : }
1089 :
1090 :
1091 :
1092 0 : void SvxJavaClassPathDlg::SetClassPath( const OUString& _rPath )
1093 : {
1094 0 : if ( m_sOldPath.isEmpty() )
1095 0 : m_sOldPath = _rPath;
1096 0 : m_pPathList->Clear();
1097 0 : sal_Int32 nIdx = 0;
1098 0 : sal_Int32 nCount = comphelper::string::getTokenCount(_rPath, CLASSPATH_DELIMITER);
1099 0 : for ( sal_Int32 i = 0; i < nCount; ++i )
1100 : {
1101 0 : OUString sToken = _rPath.getToken( 0, CLASSPATH_DELIMITER, nIdx );
1102 0 : INetURLObject aURL( sToken, INetURLObject::FSYS_DETECT );
1103 0 : OUString sPath = aURL.getFSysPath( INetURLObject::FSYS_DETECT );
1104 0 : m_pPathList->InsertEntry( sPath, SvFileInformationManager::GetImage( aURL, false ) );
1105 0 : }
1106 : // select first entry
1107 0 : m_pPathList->SelectEntryPos(0);
1108 0 : SelectHdl_Impl( NULL );
1109 0 : }
1110 :
1111 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
1112 :
1113 :
|