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