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