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