xref: /aoo4110/main/cui/source/options/optpath.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_cui.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // include ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
31*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
32*b1cdbd2cSJim Jagielski #include <sfx2/filedlghelper.hxx>
33*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
34*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
35*b1cdbd2cSJim Jagielski #include <svtools/svtabbx.hxx>
36*b1cdbd2cSJim Jagielski #include <svtools/filedlg.hxx>
37*b1cdbd2cSJim Jagielski #include <tools/config.hxx>
38*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
39*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
40*b1cdbd2cSJim Jagielski #include <unotools/defaultoptions.hxx>
41*b1cdbd2cSJim Jagielski #include <unotools/localfilehelper.hxx>
42*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
43*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
44*b1cdbd2cSJim Jagielski #include <unotools/viewoptions.hxx>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #define _SVX_OPTPATH_CXX
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #include "optpath.hxx"
49*b1cdbd2cSJim Jagielski #include <dialmgr.hxx>
50*b1cdbd2cSJim Jagielski #include "optpath.hrc"
51*b1cdbd2cSJim Jagielski #include <cuires.hrc>
52*b1cdbd2cSJim Jagielski #include "helpid.hrc"
53*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
54*b1cdbd2cSJim Jagielski #include <comphelper/configurationhelper.hxx>
55*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Exception.hpp>
56*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
57*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyAttribute.hpp>
58*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
59*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
60*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
61*b1cdbd2cSJim Jagielski #include "optHeaderTabListbox.hxx"
62*b1cdbd2cSJim Jagielski #include <readonlyimage.hxx>
63*b1cdbd2cSJim Jagielski #include <vcl/help.hxx>
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
66*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
67*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::ui::dialogs;
68*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
69*b1cdbd2cSJim Jagielski using namespace svx;
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski // define ----------------------------------------------------------------
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski #define TAB_WIDTH1		80
74*b1cdbd2cSJim Jagielski #define TAB_WIDTH_MIN   10
75*b1cdbd2cSJim Jagielski #define TAB_WIDTH2		1000
76*b1cdbd2cSJim Jagielski #define ITEMID_TYPE       1
77*b1cdbd2cSJim Jagielski #define ITEMID_PATH       2
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski #define POSTFIX_INTERNAL    String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "_internal" ) )
80*b1cdbd2cSJim Jagielski #define POSTFIX_USER        String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "_user" ) )
81*b1cdbd2cSJim Jagielski #define POSTFIX_WRITABLE    String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "_writable" ) )
82*b1cdbd2cSJim Jagielski #define POSTFIX_READONLY    String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "_readonly" ) )
83*b1cdbd2cSJim Jagielski #define VAR_ONE             String::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "%1" ) )
84*b1cdbd2cSJim Jagielski #define IODLG_CONFIGNAME	String(DEFINE_CONST_UNICODE("FilePicker_Save"))
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski // struct OptPath_Impl ---------------------------------------------------
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski struct OptPath_Impl
89*b1cdbd2cSJim Jagielski {
90*b1cdbd2cSJim Jagielski     SvtDefaultOptions           m_aDefOpt;
91*b1cdbd2cSJim Jagielski     Image                       m_aLockImage;
92*b1cdbd2cSJim Jagielski     Image                       m_aLockImageHC;
93*b1cdbd2cSJim Jagielski     String                      m_sMultiPathDlg;
94*b1cdbd2cSJim Jagielski     Reference< XPropertySet >   m_xPathSettings;
95*b1cdbd2cSJim Jagielski 
OptPath_ImplOptPath_Impl96*b1cdbd2cSJim Jagielski     OptPath_Impl(const ResId& rLockRes, const ResId& rLockResHC) :
97*b1cdbd2cSJim Jagielski         m_aLockImage(rLockRes),
98*b1cdbd2cSJim Jagielski         m_aLockImageHC(rLockResHC){}
99*b1cdbd2cSJim Jagielski };
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski // struct PathUserData_Impl ----------------------------------------------
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski struct PathUserData_Impl
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski     sal_uInt16          nRealId;
106*b1cdbd2cSJim Jagielski     SfxItemState    eState;
107*b1cdbd2cSJim Jagielski     String          sUserPath;
108*b1cdbd2cSJim Jagielski     String          sWritablePath;
109*b1cdbd2cSJim Jagielski 
PathUserData_ImplPathUserData_Impl110*b1cdbd2cSJim Jagielski     PathUserData_Impl( sal_uInt16 nId ) :
111*b1cdbd2cSJim Jagielski         nRealId( nId ), eState( SFX_ITEM_UNKNOWN ) {}
112*b1cdbd2cSJim Jagielski };
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski struct Handle2CfgNameMapping_Impl
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski     sal_uInt16      m_nHandle;
117*b1cdbd2cSJim Jagielski     const char* m_pCfgName;
118*b1cdbd2cSJim Jagielski };
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski static Handle2CfgNameMapping_Impl __READONLY_DATA Hdl2CfgMap_Impl[] =
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_AUTOCORRECT, "AutoCorrect" },
123*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_AUTOTEXT,    "AutoText" },
124*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_BACKUP,      "Backup" },
125*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_GALLERY,     "Gallery" },
126*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_GRAPHIC,     "Graphic" },
127*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_TEMP,        "Temp" },
128*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_TEMPLATE,    "Template" },
129*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_WORK,        "Work" },
130*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
131*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_LINGUISTIC,        "Linguistic" },
132*b1cdbd2cSJim Jagielski     { SvtPathOptions::PATH_DICTIONARY,        "Dictionary" },
133*b1cdbd2cSJim Jagielski #endif
134*b1cdbd2cSJim Jagielski     { USHRT_MAX, NULL }
135*b1cdbd2cSJim Jagielski };
136*b1cdbd2cSJim Jagielski 
getCfgName_Impl(sal_uInt16 _nHandle)137*b1cdbd2cSJim Jagielski static String getCfgName_Impl( sal_uInt16 _nHandle )
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski     String sCfgName;
140*b1cdbd2cSJim Jagielski     sal_uInt16 nIndex = 0;
141*b1cdbd2cSJim Jagielski     while ( Hdl2CfgMap_Impl[ nIndex ].m_nHandle != USHRT_MAX )
142*b1cdbd2cSJim Jagielski     {
143*b1cdbd2cSJim Jagielski         if ( Hdl2CfgMap_Impl[ nIndex ].m_nHandle == _nHandle )
144*b1cdbd2cSJim Jagielski         {
145*b1cdbd2cSJim Jagielski             // config name found
146*b1cdbd2cSJim Jagielski             sCfgName = String::CreateFromAscii( Hdl2CfgMap_Impl[ nIndex ].m_pCfgName );
147*b1cdbd2cSJim Jagielski             break;
148*b1cdbd2cSJim Jagielski         }
149*b1cdbd2cSJim Jagielski         ++nIndex;
150*b1cdbd2cSJim Jagielski     }
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski     return sCfgName;
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski #define MULTIPATH_DELIMITER     ';'
156*b1cdbd2cSJim Jagielski 
Convert_Impl(const String & rValue)157*b1cdbd2cSJim Jagielski String Convert_Impl( const String& rValue )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski 	char cDelim = MULTIPATH_DELIMITER;
160*b1cdbd2cSJim Jagielski     sal_uInt16 nCount = rValue.GetTokenCount( cDelim );
161*b1cdbd2cSJim Jagielski     String aReturn;
162*b1cdbd2cSJim Jagielski     for ( sal_uInt16 i=0; i<nCount ; ++i )
163*b1cdbd2cSJim Jagielski 	{
164*b1cdbd2cSJim Jagielski         String aValue = rValue.GetToken( i, cDelim );
165*b1cdbd2cSJim Jagielski         INetURLObject aObj( aValue );
166*b1cdbd2cSJim Jagielski         if ( aObj.GetProtocol() == INET_PROT_FILE )
167*b1cdbd2cSJim Jagielski             aReturn += String(aObj.PathToFileName());
168*b1cdbd2cSJim Jagielski         else if ( ::utl::LocalFileHelper::IsFileContent( aValue ) )
169*b1cdbd2cSJim Jagielski             aReturn += String(aObj.GetURLPath( INetURLObject::DECODE_WITH_CHARSET ));
170*b1cdbd2cSJim Jagielski         if ( i+1 < nCount)
171*b1cdbd2cSJim Jagielski             aReturn += MULTIPATH_DELIMITER;
172*b1cdbd2cSJim Jagielski     }
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski     return aReturn;
175*b1cdbd2cSJim Jagielski }
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski // class SvxControlFocusHelper ---------------------------------------------
178*b1cdbd2cSJim Jagielski 
Notify(NotifyEvent & rNEvt)179*b1cdbd2cSJim Jagielski long SvxControlFocusHelper::Notify( NotifyEvent& rNEvt )
180*b1cdbd2cSJim Jagielski {
181*b1cdbd2cSJim Jagielski 	long nRet = Control::Notify( rNEvt );
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 	if ( m_pFocusCtrl && rNEvt.GetWindow() != m_pFocusCtrl && rNEvt.GetType() == EVENT_GETFOCUS )
184*b1cdbd2cSJim Jagielski 		m_pFocusCtrl->GrabFocus();
185*b1cdbd2cSJim Jagielski 	return nRet;
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski // functions -------------------------------------------------------------
189*b1cdbd2cSJim Jagielski 
IsMultiPath_Impl(const sal_uInt16 nIndex)190*b1cdbd2cSJim Jagielski sal_Bool IsMultiPath_Impl( const sal_uInt16 nIndex )
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
193*b1cdbd2cSJim Jagielski 	return ( SvtPathOptions::PATH_AUTOCORRECT == nIndex ||
194*b1cdbd2cSJim Jagielski 			 SvtPathOptions::PATH_AUTOTEXT == nIndex ||
195*b1cdbd2cSJim Jagielski 			 SvtPathOptions::PATH_BASIC == nIndex ||
196*b1cdbd2cSJim Jagielski 			 SvtPathOptions::PATH_GALLERY == nIndex ||
197*b1cdbd2cSJim Jagielski 			 SvtPathOptions::PATH_TEMPLATE == nIndex );
198*b1cdbd2cSJim Jagielski #else
199*b1cdbd2cSJim Jagielski     return ( SvtPathOptions::PATH_AUTOCORRECT == nIndex ||
200*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_AUTOTEXT == nIndex ||
201*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_BASIC == nIndex ||
202*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_GALLERY == nIndex ||
203*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_TEMPLATE == nIndex ||
204*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_LINGUISTIC == nIndex ||
205*b1cdbd2cSJim Jagielski              SvtPathOptions::PATH_DICTIONARY == nIndex  );
206*b1cdbd2cSJim Jagielski #endif
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski // class SvxPathTabPage --------------------------------------------------
210*b1cdbd2cSJim Jagielski 
SvxPathTabPage(Window * pParent,const SfxItemSet & rSet)211*b1cdbd2cSJim Jagielski SvxPathTabPage::SvxPathTabPage( Window* pParent, const SfxItemSet& rSet ) :
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski 	SfxTabPage( pParent, CUI_RES( RID_SFXPAGE_PATH ), rSet ),
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	aStdBox			( this, CUI_RES( GB_STD ) ),
216*b1cdbd2cSJim Jagielski 	aTypeText		( this, CUI_RES( FT_TYPE ) ),
217*b1cdbd2cSJim Jagielski 	aPathText		( this, CUI_RES( FT_PATH ) ),
218*b1cdbd2cSJim Jagielski 	aPathCtrl		( this, CUI_RES( LB_PATH ) ),
219*b1cdbd2cSJim Jagielski 	aStandardBtn	( this, CUI_RES( BTN_STANDARD ) ),
220*b1cdbd2cSJim Jagielski 	aPathBtn		( this, CUI_RES( BTN_PATH ) ),
221*b1cdbd2cSJim Jagielski 	pHeaderBar		( NULL ),
222*b1cdbd2cSJim Jagielski 	pPathBox		( NULL ),
223*b1cdbd2cSJim Jagielski     pImpl           ( new OptPath_Impl( CUI_RES(IMG_LOCK), CUI_RES(IMG_LOCK_HC) ) ),
224*b1cdbd2cSJim Jagielski     xDialogListener ( new ::svt::DialogClosedListener() )
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski {
227*b1cdbd2cSJim Jagielski     pImpl->m_sMultiPathDlg = String( CUI_RES( STR_MULTIPATHDLG ) );
228*b1cdbd2cSJim Jagielski 	aStandardBtn.SetClickHdl( LINK( this, SvxPathTabPage, StandardHdl_Impl ) );
229*b1cdbd2cSJim Jagielski 	Link aLink = LINK( this, SvxPathTabPage, PathHdl_Impl );
230*b1cdbd2cSJim Jagielski 	aPathBtn.SetClickHdl( aLink );
231*b1cdbd2cSJim Jagielski 	Size aBoxSize = aPathCtrl.GetOutputSizePixel();
232*b1cdbd2cSJim Jagielski 	pHeaderBar = new HeaderBar( &aPathCtrl, WB_BUTTONSTYLE | WB_BOTTOMBORDER );
233*b1cdbd2cSJim Jagielski 	pHeaderBar->SetPosSizePixel( Point( 0, 0 ), Size( aBoxSize.Width(), 16 ) );
234*b1cdbd2cSJim Jagielski 	pHeaderBar->SetSelectHdl( LINK( this, SvxPathTabPage, HeaderSelect_Impl ) );
235*b1cdbd2cSJim Jagielski 	pHeaderBar->SetEndDragHdl( LINK( this, SvxPathTabPage, HeaderEndDrag_Impl ) );
236*b1cdbd2cSJim Jagielski 	Size aSz;
237*b1cdbd2cSJim Jagielski 	aSz.Width() = TAB_WIDTH1;
238*b1cdbd2cSJim Jagielski 	pHeaderBar->InsertItem( ITEMID_TYPE, aTypeText.GetText(),
239*b1cdbd2cSJim Jagielski 							LogicToPixel( aSz, MapMode( MAP_APPFONT ) ).Width(),
240*b1cdbd2cSJim Jagielski 							HIB_LEFT | HIB_VCENTER | HIB_CLICKABLE | HIB_UPARROW );
241*b1cdbd2cSJim Jagielski 	aSz.Width() = TAB_WIDTH2;
242*b1cdbd2cSJim Jagielski 	pHeaderBar->InsertItem( ITEMID_PATH, aPathText.GetText(),
243*b1cdbd2cSJim Jagielski 							LogicToPixel( aSz, MapMode( MAP_APPFONT ) ).Width(),
244*b1cdbd2cSJim Jagielski 							HIB_LEFT | HIB_VCENTER );
245*b1cdbd2cSJim Jagielski 
246*b1cdbd2cSJim Jagielski 	static long nTabs[] = {3, 0, TAB_WIDTH1, TAB_WIDTH1 + TAB_WIDTH2 };
247*b1cdbd2cSJim Jagielski 	Size aHeadSize = pHeaderBar->GetSizePixel();
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	WinBits nBits = WB_SORT | WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP;
250*b1cdbd2cSJim Jagielski 	pPathBox = new svx::OptHeaderTabListBox( &aPathCtrl, nBits );
251*b1cdbd2cSJim Jagielski 	aPathCtrl.SetFocusControl( pPathBox );
252*b1cdbd2cSJim Jagielski 	pPathBox->SetDoubleClickHdl( aLink );
253*b1cdbd2cSJim Jagielski 	pPathBox->SetSelectHdl( LINK( this, SvxPathTabPage, PathSelect_Impl ) );
254*b1cdbd2cSJim Jagielski 	pPathBox->SetSelectionMode( MULTIPLE_SELECTION );
255*b1cdbd2cSJim Jagielski 	pPathBox->SetPosSizePixel( Point( 0, aHeadSize.Height() ),
256*b1cdbd2cSJim Jagielski 							   Size( aBoxSize.Width(), aBoxSize.Height() - aHeadSize.Height() ) );
257*b1cdbd2cSJim Jagielski 	pPathBox->SetTabs( &nTabs[0], MAP_APPFONT );
258*b1cdbd2cSJim Jagielski 	pPathBox->InitHeaderBar( pHeaderBar );
259*b1cdbd2cSJim Jagielski 	pPathBox->SetHighlightRange();
260*b1cdbd2cSJim Jagielski 	pPathBox->SetHelpId( HID_OPTPATH_CTL_PATH );
261*b1cdbd2cSJim Jagielski 	pHeaderBar->SetHelpId( HID_OPTPATH_HEADERBAR );
262*b1cdbd2cSJim Jagielski 	pPathBox->Show();
263*b1cdbd2cSJim Jagielski 	pHeaderBar->Show();
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski 	FreeResource();
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski     xDialogListener->SetDialogClosedLink( LINK( this, SvxPathTabPage, DialogClosedHdl ) );
268*b1cdbd2cSJim Jagielski }
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
271*b1cdbd2cSJim Jagielski 
~SvxPathTabPage()272*b1cdbd2cSJim Jagielski SvxPathTabPage::~SvxPathTabPage()
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski     // #110603# do not grab focus to a destroyed window !!!
275*b1cdbd2cSJim Jagielski     aPathCtrl.SetFocusControl( NULL );
276*b1cdbd2cSJim Jagielski 
277*b1cdbd2cSJim Jagielski 	pHeaderBar->Hide();
278*b1cdbd2cSJim Jagielski 	for ( sal_uInt16 i = 0; i < pPathBox->GetEntryCount(); ++i )
279*b1cdbd2cSJim Jagielski 		delete (PathUserData_Impl*)pPathBox->GetEntry(i)->GetUserData();
280*b1cdbd2cSJim Jagielski 	delete pPathBox;
281*b1cdbd2cSJim Jagielski 	delete pHeaderBar;
282*b1cdbd2cSJim Jagielski 	delete pImpl;
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
286*b1cdbd2cSJim Jagielski 
Create(Window * pParent,const SfxItemSet & rAttrSet)287*b1cdbd2cSJim Jagielski SfxTabPage*	SvxPathTabPage::Create( Window* pParent,
288*b1cdbd2cSJim Jagielski 									const SfxItemSet& rAttrSet )
289*b1cdbd2cSJim Jagielski {
290*b1cdbd2cSJim Jagielski 	return ( new SvxPathTabPage( pParent, rAttrSet ) );
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
294*b1cdbd2cSJim Jagielski 
FillItemSet(SfxItemSet &)295*b1cdbd2cSJim Jagielski sal_Bool SvxPathTabPage::FillItemSet( SfxItemSet& )
296*b1cdbd2cSJim Jagielski {
297*b1cdbd2cSJim Jagielski     SvtPathOptions aPathOpt;
298*b1cdbd2cSJim Jagielski     for ( sal_uInt16 i = 0; i < pPathBox->GetEntryCount(); ++i )
299*b1cdbd2cSJim Jagielski     {
300*b1cdbd2cSJim Jagielski 		PathUserData_Impl* pPathImpl = (PathUserData_Impl*)pPathBox->GetEntry(i)->GetUserData();
301*b1cdbd2cSJim Jagielski 		sal_uInt16 nRealId = pPathImpl->nRealId;
302*b1cdbd2cSJim Jagielski         if ( pPathImpl->eState == SFX_ITEM_SET )
303*b1cdbd2cSJim Jagielski             SetPathList( nRealId, pPathImpl->sUserPath, pPathImpl->sWritablePath );
304*b1cdbd2cSJim Jagielski     }
305*b1cdbd2cSJim Jagielski 	return sal_True;
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
309*b1cdbd2cSJim Jagielski 
Reset(const SfxItemSet &)310*b1cdbd2cSJim Jagielski void SvxPathTabPage::Reset( const SfxItemSet& )
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski     pPathBox->Clear();
313*b1cdbd2cSJim Jagielski     SvtPathOptions aPathOpt; //! deprecated
314*b1cdbd2cSJim Jagielski 
315*b1cdbd2cSJim Jagielski     for( sal_uInt16 i = 0; i <= (sal_uInt16)SvtPathOptions::PATH_WORK; ++i )
316*b1cdbd2cSJim Jagielski     {
317*b1cdbd2cSJim Jagielski         // only writer uses autotext
318*b1cdbd2cSJim Jagielski         if ( i == SvtPathOptions::PATH_AUTOTEXT
319*b1cdbd2cSJim Jagielski             && !SvtModuleOptions().IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
320*b1cdbd2cSJim Jagielski             continue;
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski         switch (i)
323*b1cdbd2cSJim Jagielski         {
324*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_AUTOCORRECT:
325*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_AUTOTEXT:
326*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_BACKUP:
327*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_GALLERY:
328*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_GRAPHIC:
329*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_TEMP:
330*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_TEMPLATE:
331*b1cdbd2cSJim Jagielski #if OSL_DEBUG_LEVEL > 1
332*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_LINGUISTIC:
333*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_DICTIONARY:
334*b1cdbd2cSJim Jagielski #endif
335*b1cdbd2cSJim Jagielski             case SvtPathOptions::PATH_WORK:
336*b1cdbd2cSJim Jagielski             {
337*b1cdbd2cSJim Jagielski                 String aStr( CUI_RES( RID_SVXSTR_PATH_NAME_START + i ) );
338*b1cdbd2cSJim Jagielski                 String sInternal, sUser, sWritable;
339*b1cdbd2cSJim Jagielski                 sal_Bool bReadOnly = sal_False;
340*b1cdbd2cSJim Jagielski                 GetPathList( i, sInternal, sUser, sWritable, bReadOnly );
341*b1cdbd2cSJim Jagielski                 String sTmpPath = sUser;
342*b1cdbd2cSJim Jagielski                 if ( sTmpPath.Len() > 0 && sWritable.Len() > 0 )
343*b1cdbd2cSJim Jagielski                     sTmpPath += MULTIPATH_DELIMITER;
344*b1cdbd2cSJim Jagielski                 sTmpPath += sWritable;
345*b1cdbd2cSJim Jagielski                 String aValue( sTmpPath );
346*b1cdbd2cSJim Jagielski                 aStr += '\t';
347*b1cdbd2cSJim Jagielski                 aStr += Convert_Impl( aValue );
348*b1cdbd2cSJim Jagielski                 SvLBoxEntry* pEntry = pPathBox->InsertEntry( aStr );
349*b1cdbd2cSJim Jagielski                 if ( bReadOnly )
350*b1cdbd2cSJim Jagielski                 {
351*b1cdbd2cSJim Jagielski                     pPathBox->SetCollapsedEntryBmp( pEntry, pImpl->m_aLockImage, BMP_COLOR_NORMAL );
352*b1cdbd2cSJim Jagielski                     pPathBox->SetCollapsedEntryBmp( pEntry, pImpl->m_aLockImageHC, BMP_COLOR_HIGHCONTRAST );
353*b1cdbd2cSJim Jagielski                 }
354*b1cdbd2cSJim Jagielski                 PathUserData_Impl* pPathImpl = new PathUserData_Impl(i);
355*b1cdbd2cSJim Jagielski                 pPathImpl->sUserPath = sUser;
356*b1cdbd2cSJim Jagielski                 pPathImpl->sWritablePath = sWritable;
357*b1cdbd2cSJim Jagielski                 pEntry->SetUserData( pPathImpl );
358*b1cdbd2cSJim Jagielski             }
359*b1cdbd2cSJim Jagielski         }
360*b1cdbd2cSJim Jagielski     }
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski     String aUserData = GetUserData();
363*b1cdbd2cSJim Jagielski 	if ( aUserData.Len() )
364*b1cdbd2cSJim Jagielski 	{
365*b1cdbd2cSJim Jagielski 		// Spaltenbreite restaurieren
366*b1cdbd2cSJim Jagielski 		pHeaderBar->SetItemSize( ITEMID_TYPE, aUserData.GetToken(0).ToInt32() );
367*b1cdbd2cSJim Jagielski 		HeaderEndDrag_Impl( NULL );
368*b1cdbd2cSJim Jagielski 		// Sortierrichtung restaurieren
369*b1cdbd2cSJim Jagielski 		sal_Bool bUp = (sal_Bool)(sal_uInt16)aUserData.GetToken(1).ToInt32();
370*b1cdbd2cSJim Jagielski 		HeaderBarItemBits nBits	= pHeaderBar->GetItemBits(ITEMID_TYPE);
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski 		if ( bUp )
373*b1cdbd2cSJim Jagielski 		{
374*b1cdbd2cSJim Jagielski 			nBits &= ~HIB_UPARROW;
375*b1cdbd2cSJim Jagielski 			nBits |= HIB_DOWNARROW;
376*b1cdbd2cSJim Jagielski 		}
377*b1cdbd2cSJim Jagielski 		else
378*b1cdbd2cSJim Jagielski 		{
379*b1cdbd2cSJim Jagielski 			nBits &= ~HIB_DOWNARROW;
380*b1cdbd2cSJim Jagielski 			nBits |= HIB_UPARROW;
381*b1cdbd2cSJim Jagielski 		}
382*b1cdbd2cSJim Jagielski 		pHeaderBar->SetItemBits( ITEMID_TYPE, nBits );
383*b1cdbd2cSJim Jagielski 		HeaderSelect_Impl( NULL );
384*b1cdbd2cSJim Jagielski 	}
385*b1cdbd2cSJim Jagielski 	PathSelect_Impl( NULL );
386*b1cdbd2cSJim Jagielski }
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
389*b1cdbd2cSJim Jagielski 
FillUserData()390*b1cdbd2cSJim Jagielski void SvxPathTabPage::FillUserData()
391*b1cdbd2cSJim Jagielski {
392*b1cdbd2cSJim Jagielski 	String aUserData = String::CreateFromInt32( pHeaderBar->GetItemSize( ITEMID_TYPE ) );
393*b1cdbd2cSJim Jagielski 	aUserData += ';';
394*b1cdbd2cSJim Jagielski 	HeaderBarItemBits nBits	= pHeaderBar->GetItemBits( ITEMID_TYPE );
395*b1cdbd2cSJim Jagielski 	sal_Bool bUp = ( ( nBits & HIB_UPARROW ) == HIB_UPARROW );
396*b1cdbd2cSJim Jagielski 	aUserData += bUp ? '1' : '0';
397*b1cdbd2cSJim Jagielski 	SetUserData( aUserData );
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
401*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,PathSelect_Impl,svx::OptHeaderTabListBox *,EMPTYARG)402*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, PathSelect_Impl, svx::OptHeaderTabListBox *, EMPTYARG )
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski /*	[Beschreibung]
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski */
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski {
409*b1cdbd2cSJim Jagielski 	sal_uInt16 nSelCount = 0;
410*b1cdbd2cSJim Jagielski 	SvLBoxEntry* pEntry = pPathBox->FirstSelected();
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski     //the entry image indicates whether the path is write protected
413*b1cdbd2cSJim Jagielski     Image aEntryImage;
414*b1cdbd2cSJim Jagielski     if(pEntry)
415*b1cdbd2cSJim Jagielski         aEntryImage = pPathBox->GetCollapsedEntryBmp( pEntry );
416*b1cdbd2cSJim Jagielski     sal_Bool bEnable = !aEntryImage;
417*b1cdbd2cSJim Jagielski 	while ( pEntry && ( nSelCount < 2 ) )
418*b1cdbd2cSJim Jagielski 	{
419*b1cdbd2cSJim Jagielski 		nSelCount++;
420*b1cdbd2cSJim Jagielski 		pEntry = pPathBox->NextSelected( pEntry );
421*b1cdbd2cSJim Jagielski 	}
422*b1cdbd2cSJim Jagielski 
423*b1cdbd2cSJim Jagielski     aPathBtn.Enable( 1 == nSelCount && bEnable);
424*b1cdbd2cSJim Jagielski     aStandardBtn.Enable( nSelCount > 0 && bEnable);
425*b1cdbd2cSJim Jagielski 	return 0;
426*b1cdbd2cSJim Jagielski }
427*b1cdbd2cSJim Jagielski 
428*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
429*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,StandardHdl_Impl,PushButton *,EMPTYARG)430*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, StandardHdl_Impl, PushButton *, EMPTYARG )
431*b1cdbd2cSJim Jagielski {
432*b1cdbd2cSJim Jagielski 	SvLBoxEntry* pEntry = pPathBox->FirstSelected();
433*b1cdbd2cSJim Jagielski 	while ( pEntry )
434*b1cdbd2cSJim Jagielski 	{
435*b1cdbd2cSJim Jagielski 		PathUserData_Impl* pPathImpl = (PathUserData_Impl*)pEntry->GetUserData();
436*b1cdbd2cSJim Jagielski         String aOldPath = pImpl->m_aDefOpt.GetDefaultPath( pPathImpl->nRealId );
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski 		if ( aOldPath.Len() )
439*b1cdbd2cSJim Jagielski 		{
440*b1cdbd2cSJim Jagielski             String sInternal, sUser, sWritable, sTemp;
441*b1cdbd2cSJim Jagielski             sal_Bool bReadOnly = sal_False;
442*b1cdbd2cSJim Jagielski             GetPathList( pPathImpl->nRealId, sInternal, sUser, sWritable, bReadOnly );
443*b1cdbd2cSJim Jagielski 
444*b1cdbd2cSJim Jagielski             sal_uInt16 i;
445*b1cdbd2cSJim Jagielski             sal_uInt16 nOldCount = aOldPath.GetTokenCount( MULTIPATH_DELIMITER );
446*b1cdbd2cSJim Jagielski             sal_uInt16 nIntCount = sInternal.GetTokenCount( MULTIPATH_DELIMITER );
447*b1cdbd2cSJim Jagielski             for ( i = 0; i < nOldCount; ++i )
448*b1cdbd2cSJim Jagielski             {
449*b1cdbd2cSJim Jagielski                 bool bFound = false;
450*b1cdbd2cSJim Jagielski                 String sOnePath = aOldPath.GetToken( i, MULTIPATH_DELIMITER );
451*b1cdbd2cSJim Jagielski                 for ( sal_uInt16 j = 0; !bFound && j < nIntCount; ++j )
452*b1cdbd2cSJim Jagielski                 {
453*b1cdbd2cSJim Jagielski                     if ( sInternal.GetToken( i, MULTIPATH_DELIMITER ) == sOnePath )
454*b1cdbd2cSJim Jagielski                         bFound = true;
455*b1cdbd2cSJim Jagielski                 }
456*b1cdbd2cSJim Jagielski                 if ( !bFound )
457*b1cdbd2cSJim Jagielski                 {
458*b1cdbd2cSJim Jagielski                     if ( sTemp.Len() > 0 )
459*b1cdbd2cSJim Jagielski                         sTemp += MULTIPATH_DELIMITER;
460*b1cdbd2cSJim Jagielski                     sTemp += sOnePath;
461*b1cdbd2cSJim Jagielski                 }
462*b1cdbd2cSJim Jagielski             }
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski             String sUserPath, sWritablePath;
465*b1cdbd2cSJim Jagielski             nOldCount = sTemp.GetTokenCount( MULTIPATH_DELIMITER );
466*b1cdbd2cSJim Jagielski             for ( i = 0; nOldCount > 0 && i < nOldCount - 1; ++i )
467*b1cdbd2cSJim Jagielski             {
468*b1cdbd2cSJim Jagielski                 if ( sUserPath.Len() > 0 )
469*b1cdbd2cSJim Jagielski                     sUserPath += MULTIPATH_DELIMITER;
470*b1cdbd2cSJim Jagielski                 sUserPath += sTemp.GetToken( i, MULTIPATH_DELIMITER );
471*b1cdbd2cSJim Jagielski             }
472*b1cdbd2cSJim Jagielski             sWritablePath = sTemp.GetToken( nOldCount - 1, MULTIPATH_DELIMITER );
473*b1cdbd2cSJim Jagielski 
474*b1cdbd2cSJim Jagielski             pPathBox->SetEntryText( Convert_Impl( sTemp ), pEntry, 1 );
475*b1cdbd2cSJim Jagielski 			pPathImpl->eState = SFX_ITEM_SET;
476*b1cdbd2cSJim Jagielski             pPathImpl->sUserPath = sUserPath;
477*b1cdbd2cSJim Jagielski             pPathImpl->sWritablePath = sWritablePath;
478*b1cdbd2cSJim Jagielski 		}
479*b1cdbd2cSJim Jagielski 		pEntry = pPathBox->NextSelected( pEntry );
480*b1cdbd2cSJim Jagielski 	}
481*b1cdbd2cSJim Jagielski 	return 0;
482*b1cdbd2cSJim Jagielski }
483*b1cdbd2cSJim Jagielski 
484*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
485*b1cdbd2cSJim Jagielski 
ChangeCurrentEntry(const String & _rFolder)486*b1cdbd2cSJim Jagielski void SvxPathTabPage::ChangeCurrentEntry( const String& _rFolder )
487*b1cdbd2cSJim Jagielski {
488*b1cdbd2cSJim Jagielski     SvLBoxEntry* pEntry = pPathBox->GetCurEntry();
489*b1cdbd2cSJim Jagielski     if ( !pEntry )
490*b1cdbd2cSJim Jagielski     {
491*b1cdbd2cSJim Jagielski         DBG_ERRORFILE( "SvxPathTabPage::ChangeCurrentEntry(): no entry" );
492*b1cdbd2cSJim Jagielski         return;
493*b1cdbd2cSJim Jagielski     }
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski     String sInternal, sUser, sWritable;
496*b1cdbd2cSJim Jagielski     PathUserData_Impl* pPathImpl = (PathUserData_Impl*)pEntry->GetUserData();
497*b1cdbd2cSJim Jagielski     sal_Bool bReadOnly = sal_False;
498*b1cdbd2cSJim Jagielski     GetPathList( pPathImpl->nRealId, sInternal, sUser, sWritable, bReadOnly );
499*b1cdbd2cSJim Jagielski     sUser = pPathImpl->sUserPath;
500*b1cdbd2cSJim Jagielski     sWritable = pPathImpl->sWritablePath;
501*b1cdbd2cSJim Jagielski     sal_uInt16 nPos = pPathImpl->nRealId;
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski     // old path is an URL?
504*b1cdbd2cSJim Jagielski     INetURLObject aObj( sWritable );
505*b1cdbd2cSJim Jagielski     FASTBOOL bURL = ( aObj.GetProtocol() != INET_PROT_NOT_VALID );
506*b1cdbd2cSJim Jagielski     rtl::OUString aPathStr( _rFolder );
507*b1cdbd2cSJim Jagielski     INetURLObject aNewObj( aPathStr );
508*b1cdbd2cSJim Jagielski     aNewObj.removeFinalSlash();
509*b1cdbd2cSJim Jagielski 
510*b1cdbd2cSJim Jagielski     // then the new path also an URL else system path
511*b1cdbd2cSJim Jagielski     String sNewPathStr = bURL ? aPathStr : aNewObj.getFSysPath( INetURLObject::FSYS_DETECT );
512*b1cdbd2cSJim Jagielski 
513*b1cdbd2cSJim Jagielski     FASTBOOL bChanged =
514*b1cdbd2cSJim Jagielski #ifdef UNX
515*b1cdbd2cSJim Jagielski // Unix is case sensitive
516*b1cdbd2cSJim Jagielski         ( sNewPathStr != sWritable );
517*b1cdbd2cSJim Jagielski #else
518*b1cdbd2cSJim Jagielski         ( sNewPathStr.CompareIgnoreCaseToAscii( sWritable ) != COMPARE_EQUAL );
519*b1cdbd2cSJim Jagielski #endif
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski     if ( bChanged )
522*b1cdbd2cSJim Jagielski     {
523*b1cdbd2cSJim Jagielski         pPathBox->SetEntryText( Convert_Impl( sNewPathStr ), pEntry, 1 );
524*b1cdbd2cSJim Jagielski         nPos = (sal_uInt16)pPathBox->GetModel()->GetAbsPos( pEntry );
525*b1cdbd2cSJim Jagielski         pPathImpl = (PathUserData_Impl*)pPathBox->GetEntry(nPos)->GetUserData();
526*b1cdbd2cSJim Jagielski         pPathImpl->eState = SFX_ITEM_SET;
527*b1cdbd2cSJim Jagielski         pPathImpl->sWritablePath = sNewPathStr;
528*b1cdbd2cSJim Jagielski         if ( SvtPathOptions::PATH_WORK == pPathImpl->nRealId )
529*b1cdbd2cSJim Jagielski         {
530*b1cdbd2cSJim Jagielski             // Remove view options entry so the new work path
531*b1cdbd2cSJim Jagielski             // will be used for the next open dialog.
532*b1cdbd2cSJim Jagielski             SvtViewOptions aDlgOpt( E_DIALOG, IODLG_CONFIGNAME );
533*b1cdbd2cSJim Jagielski             aDlgOpt.Delete();
534*b1cdbd2cSJim Jagielski 		    // Reset also last used dir in the sfx application instance
535*b1cdbd2cSJim Jagielski             SfxApplication *pSfxApp = SFX_APP();
536*b1cdbd2cSJim Jagielski 		    pSfxApp->ResetLastDir();
537*b1cdbd2cSJim Jagielski 
538*b1cdbd2cSJim Jagielski     		// Set configuration flag to notify file picker that it's necessary
539*b1cdbd2cSJim Jagielski             // to take over the path provided.
540*b1cdbd2cSJim Jagielski             Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
541*b1cdbd2cSJim Jagielski             ::comphelper::ConfigurationHelper::writeDirectKey(xFactory,
542*b1cdbd2cSJim Jagielski                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Common/")),
543*b1cdbd2cSJim Jagielski                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Path/Info")),
544*b1cdbd2cSJim Jagielski                 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("WorkPathChanged")),
545*b1cdbd2cSJim Jagielski                 ::com::sun::star::uno::makeAny(true),
546*b1cdbd2cSJim Jagielski                 ::comphelper::ConfigurationHelper::E_STANDARD);
547*b1cdbd2cSJim Jagielski         }
548*b1cdbd2cSJim Jagielski     }
549*b1cdbd2cSJim Jagielski }
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
552*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,PathHdl_Impl,PushButton *,EMPTYARG)553*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, PathHdl_Impl, PushButton *, EMPTYARG )
554*b1cdbd2cSJim Jagielski {
555*b1cdbd2cSJim Jagielski 	SvLBoxEntry* pEntry = pPathBox->GetCurEntry();
556*b1cdbd2cSJim Jagielski 	sal_uInt16 nPos = ( pEntry != NULL ) ? ( (PathUserData_Impl*)pEntry->GetUserData() )->nRealId : 0;
557*b1cdbd2cSJim Jagielski     String sInternal, sUser, sWritable;
558*b1cdbd2cSJim Jagielski 	if ( pEntry )
559*b1cdbd2cSJim Jagielski 	{
560*b1cdbd2cSJim Jagielski 		PathUserData_Impl* pPathImpl = (PathUserData_Impl*)pEntry->GetUserData();
561*b1cdbd2cSJim Jagielski         sal_Bool bReadOnly = sal_False;
562*b1cdbd2cSJim Jagielski         GetPathList( pPathImpl->nRealId, sInternal, sUser, sWritable, bReadOnly );
563*b1cdbd2cSJim Jagielski         sUser = pPathImpl->sUserPath;
564*b1cdbd2cSJim Jagielski         sWritable = pPathImpl->sWritablePath;
565*b1cdbd2cSJim Jagielski 	}
566*b1cdbd2cSJim Jagielski 
567*b1cdbd2cSJim Jagielski     if(pEntry && !(!((OptHeaderTabListBox*)pPathBox)->GetCollapsedEntryBmp(pEntry)))
568*b1cdbd2cSJim Jagielski         return 0;
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski 	if ( IsMultiPath_Impl( nPos ) )
571*b1cdbd2cSJim Jagielski 	{
572*b1cdbd2cSJim Jagielski 		SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
573*b1cdbd2cSJim Jagielski         if ( pFact )
574*b1cdbd2cSJim Jagielski 		{
575*b1cdbd2cSJim Jagielski             AbstractSvxMultiPathDialog* pMultiDlg =
576*b1cdbd2cSJim Jagielski                 pFact->CreateSvxMultiPathDialog( this );
577*b1cdbd2cSJim Jagielski             DBG_ASSERT( pMultiDlg, "Dialogdiet fail!" );
578*b1cdbd2cSJim Jagielski             pMultiDlg->EnableRadioButtonMode();
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski             String sPath( sUser );
581*b1cdbd2cSJim Jagielski             if ( sPath.Len() > 0 )
582*b1cdbd2cSJim Jagielski                 sPath += MULTIPATH_DELIMITER;
583*b1cdbd2cSJim Jagielski             sPath += sWritable;
584*b1cdbd2cSJim Jagielski             pMultiDlg->SetPath( sPath );
585*b1cdbd2cSJim Jagielski 
586*b1cdbd2cSJim Jagielski             String sPathName = pPathBox->GetEntryText( pEntry, 0 );
587*b1cdbd2cSJim Jagielski             String sNewTitle( pImpl->m_sMultiPathDlg );
588*b1cdbd2cSJim Jagielski             sNewTitle.SearchAndReplace( VAR_ONE, sPathName );
589*b1cdbd2cSJim Jagielski             pMultiDlg->SetTitle( sNewTitle );
590*b1cdbd2cSJim Jagielski 
591*b1cdbd2cSJim Jagielski             if ( pMultiDlg->Execute() == RET_OK && pEntry )
592*b1cdbd2cSJim Jagielski 			{
593*b1cdbd2cSJim Jagielski                 sUser.Erase();
594*b1cdbd2cSJim Jagielski                 sWritable.Erase();
595*b1cdbd2cSJim Jagielski                 String sFullPath;
596*b1cdbd2cSJim Jagielski                 String sNewPath = pMultiDlg->GetPath();
597*b1cdbd2cSJim Jagielski                 char cDelim = MULTIPATH_DELIMITER;
598*b1cdbd2cSJim Jagielski                 sal_uInt16 nCount = sNewPath.GetTokenCount( cDelim );
599*b1cdbd2cSJim Jagielski                 if ( nCount > 0 )
600*b1cdbd2cSJim Jagielski                 {
601*b1cdbd2cSJim Jagielski                     sal_uInt16 i = 0;
602*b1cdbd2cSJim Jagielski                     for ( ; i < nCount - 1; ++i )
603*b1cdbd2cSJim Jagielski                     {
604*b1cdbd2cSJim Jagielski                         if ( sUser.Len() > 0 )
605*b1cdbd2cSJim Jagielski                             sUser += cDelim;
606*b1cdbd2cSJim Jagielski                         sUser += sNewPath.GetToken( i, cDelim );
607*b1cdbd2cSJim Jagielski                     }
608*b1cdbd2cSJim Jagielski                     if ( sFullPath.Len() > 0 )
609*b1cdbd2cSJim Jagielski                         sFullPath += cDelim;
610*b1cdbd2cSJim Jagielski                     sFullPath += sUser;
611*b1cdbd2cSJim Jagielski                     sWritable += sNewPath.GetToken( i, cDelim );
612*b1cdbd2cSJim Jagielski                     if ( sFullPath.Len() > 0 )
613*b1cdbd2cSJim Jagielski                         sFullPath += cDelim;
614*b1cdbd2cSJim Jagielski                     sFullPath += sWritable;
615*b1cdbd2cSJim Jagielski                 }
616*b1cdbd2cSJim Jagielski 
617*b1cdbd2cSJim Jagielski                 pPathBox->SetEntryText( Convert_Impl( sFullPath ), pEntry, 1 );
618*b1cdbd2cSJim Jagielski                 // save modified flag
619*b1cdbd2cSJim Jagielski                 PathUserData_Impl* pPathImpl = (PathUserData_Impl*)pEntry->GetUserData();
620*b1cdbd2cSJim Jagielski 				pPathImpl->eState = SFX_ITEM_SET;
621*b1cdbd2cSJim Jagielski                 pPathImpl->sUserPath = sUser;
622*b1cdbd2cSJim Jagielski                 pPathImpl->sWritablePath = sWritable;
623*b1cdbd2cSJim Jagielski             }
624*b1cdbd2cSJim Jagielski             delete pMultiDlg;
625*b1cdbd2cSJim Jagielski 		}
626*b1cdbd2cSJim Jagielski 	}
627*b1cdbd2cSJim Jagielski 	else if ( pEntry )
628*b1cdbd2cSJim Jagielski 	{
629*b1cdbd2cSJim Jagielski         try
630*b1cdbd2cSJim Jagielski         {
631*b1cdbd2cSJim Jagielski     		rtl::OUString aService( RTL_CONSTASCII_USTRINGPARAM( FOLDER_PICKER_SERVICE_NAME ) );
632*b1cdbd2cSJim Jagielski     		Reference < XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() );
633*b1cdbd2cSJim Jagielski             xFolderPicker = ::com::sun::star::uno::Reference< XFolderPicker >(
634*b1cdbd2cSJim Jagielski                 xFactory->createInstance( aService ), UNO_QUERY );
635*b1cdbd2cSJim Jagielski 
636*b1cdbd2cSJim Jagielski             INetURLObject aURL( sWritable, INET_PROT_FILE );
637*b1cdbd2cSJim Jagielski         	xFolderPicker->setDisplayDirectory( aURL.GetMainURL( INetURLObject::NO_DECODE ) );
638*b1cdbd2cSJim Jagielski 
639*b1cdbd2cSJim Jagielski             Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
640*b1cdbd2cSJim Jagielski             if ( xAsyncDlg.is() )
641*b1cdbd2cSJim Jagielski                 xAsyncDlg->startExecuteModal( xDialogListener.get() );
642*b1cdbd2cSJim Jagielski             else
643*b1cdbd2cSJim Jagielski             {
644*b1cdbd2cSJim Jagielski                 short nRet = xFolderPicker->execute();
645*b1cdbd2cSJim Jagielski                 if ( ExecutableDialogResults::OK != nRet )
646*b1cdbd2cSJim Jagielski                     return 0;
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski                 String sFolder( xFolderPicker->getDirectory() );
649*b1cdbd2cSJim Jagielski                 ChangeCurrentEntry( sFolder );
650*b1cdbd2cSJim Jagielski             }
651*b1cdbd2cSJim Jagielski 		}
652*b1cdbd2cSJim Jagielski         catch( Exception& )
653*b1cdbd2cSJim Jagielski         {
654*b1cdbd2cSJim Jagielski             DBG_ERRORFILE( "SvxPathTabPage::PathHdl_Impl: exception from folder picker" );
655*b1cdbd2cSJim Jagielski         }
656*b1cdbd2cSJim Jagielski 	}
657*b1cdbd2cSJim Jagielski 	return 0;
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
661*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,HeaderSelect_Impl,HeaderBar *,pBar)662*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, HeaderSelect_Impl, HeaderBar*, pBar )
663*b1cdbd2cSJim Jagielski {
664*b1cdbd2cSJim Jagielski 	if ( pBar && pBar->GetCurItemId() != ITEMID_TYPE )
665*b1cdbd2cSJim Jagielski 		return 0;
666*b1cdbd2cSJim Jagielski 
667*b1cdbd2cSJim Jagielski 	HeaderBarItemBits nBits	= pHeaderBar->GetItemBits(ITEMID_TYPE);
668*b1cdbd2cSJim Jagielski 	sal_Bool bUp = ( ( nBits & HIB_UPARROW ) == HIB_UPARROW );
669*b1cdbd2cSJim Jagielski 	SvSortMode eMode = SortAscending;
670*b1cdbd2cSJim Jagielski 
671*b1cdbd2cSJim Jagielski 	if ( bUp )
672*b1cdbd2cSJim Jagielski 	{
673*b1cdbd2cSJim Jagielski 		nBits &= ~HIB_UPARROW;
674*b1cdbd2cSJim Jagielski 		nBits |= HIB_DOWNARROW;
675*b1cdbd2cSJim Jagielski 		eMode = SortDescending;
676*b1cdbd2cSJim Jagielski 	}
677*b1cdbd2cSJim Jagielski 	else
678*b1cdbd2cSJim Jagielski 	{
679*b1cdbd2cSJim Jagielski 		nBits &= ~HIB_DOWNARROW;
680*b1cdbd2cSJim Jagielski 		nBits |= HIB_UPARROW;
681*b1cdbd2cSJim Jagielski 	}
682*b1cdbd2cSJim Jagielski 	pHeaderBar->SetItemBits( ITEMID_TYPE, nBits );
683*b1cdbd2cSJim Jagielski 	SvTreeList* pModel = pPathBox->GetModel();
684*b1cdbd2cSJim Jagielski 	pModel->SetSortMode( eMode );
685*b1cdbd2cSJim Jagielski 	pModel->Resort();
686*b1cdbd2cSJim Jagielski 	return 1;
687*b1cdbd2cSJim Jagielski }
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
690*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,HeaderEndDrag_Impl,HeaderBar *,pBar)691*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, HeaderEndDrag_Impl, HeaderBar*, pBar )
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski 	if ( pBar && !pBar->GetCurItemId() )
694*b1cdbd2cSJim Jagielski 		return 0;
695*b1cdbd2cSJim Jagielski 
696*b1cdbd2cSJim Jagielski 	if ( !pHeaderBar->IsItemMode() )
697*b1cdbd2cSJim Jagielski 	{
698*b1cdbd2cSJim Jagielski 		Size aSz;
699*b1cdbd2cSJim Jagielski 		sal_uInt16 nTabs = pHeaderBar->GetItemCount();
700*b1cdbd2cSJim Jagielski 		long nTmpSz = 0;
701*b1cdbd2cSJim Jagielski 		long nWidth = pHeaderBar->GetItemSize(ITEMID_TYPE);
702*b1cdbd2cSJim Jagielski 		long nBarWidth = pHeaderBar->GetSizePixel().Width();
703*b1cdbd2cSJim Jagielski 
704*b1cdbd2cSJim Jagielski         if(nWidth < TAB_WIDTH_MIN)
705*b1cdbd2cSJim Jagielski             pHeaderBar->SetItemSize( ITEMID_TYPE, TAB_WIDTH_MIN);
706*b1cdbd2cSJim Jagielski         else if ( ( nBarWidth - nWidth ) < TAB_WIDTH_MIN )
707*b1cdbd2cSJim Jagielski             pHeaderBar->SetItemSize( ITEMID_TYPE, nBarWidth - TAB_WIDTH_MIN );
708*b1cdbd2cSJim Jagielski 
709*b1cdbd2cSJim Jagielski 		for ( sal_uInt16 i = 1; i <= nTabs; ++i )
710*b1cdbd2cSJim Jagielski 		{
711*b1cdbd2cSJim Jagielski 			long _nWidth = pHeaderBar->GetItemSize(i);
712*b1cdbd2cSJim Jagielski 			aSz.Width() =  _nWidth + nTmpSz;
713*b1cdbd2cSJim Jagielski 			nTmpSz += _nWidth;
714*b1cdbd2cSJim Jagielski 			pPathBox->SetTab( i, PixelToLogic( aSz, MapMode(MAP_APPFONT) ).Width(), MAP_APPFONT );
715*b1cdbd2cSJim Jagielski 		}
716*b1cdbd2cSJim Jagielski 	}
717*b1cdbd2cSJim Jagielski 	return 1;
718*b1cdbd2cSJim Jagielski }
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
721*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxPathTabPage,DialogClosedHdl,DialogClosedEvent *,pEvt)722*b1cdbd2cSJim Jagielski IMPL_LINK( SvxPathTabPage, DialogClosedHdl, DialogClosedEvent*, pEvt )
723*b1cdbd2cSJim Jagielski {
724*b1cdbd2cSJim Jagielski     if ( RET_OK == pEvt->DialogResult )
725*b1cdbd2cSJim Jagielski     {
726*b1cdbd2cSJim Jagielski         DBG_ASSERT( xFolderPicker.is() == sal_True, "SvxPathTabPage::DialogClosedHdl(): no folder picker" );
727*b1cdbd2cSJim Jagielski 
728*b1cdbd2cSJim Jagielski         String sURL = String( xFolderPicker->getDirectory() );
729*b1cdbd2cSJim Jagielski         ChangeCurrentEntry( sURL );
730*b1cdbd2cSJim Jagielski     }
731*b1cdbd2cSJim Jagielski     return 0L;
732*b1cdbd2cSJim Jagielski }
733*b1cdbd2cSJim Jagielski 
734*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
735*b1cdbd2cSJim Jagielski 
GetPathList(sal_uInt16 _nPathHandle,String & _rInternalPath,String & _rUserPath,String & _rWritablePath,sal_Bool & _rReadOnly)736*b1cdbd2cSJim Jagielski void SvxPathTabPage::GetPathList(
737*b1cdbd2cSJim Jagielski     sal_uInt16 _nPathHandle, String& _rInternalPath,
738*b1cdbd2cSJim Jagielski     String& _rUserPath, String& _rWritablePath, sal_Bool& _rReadOnly )
739*b1cdbd2cSJim Jagielski {
740*b1cdbd2cSJim Jagielski     String sCfgName = getCfgName_Impl( _nPathHandle );
741*b1cdbd2cSJim Jagielski 
742*b1cdbd2cSJim Jagielski     // load PathSettings service if necessary
743*b1cdbd2cSJim Jagielski     if ( !pImpl->m_xPathSettings.is() )
744*b1cdbd2cSJim Jagielski     {
745*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > xSMgr = comphelper::getProcessServiceFactory();
746*b1cdbd2cSJim Jagielski         pImpl->m_xPathSettings = Reference< XPropertySet >( xSMgr->createInstance(
747*b1cdbd2cSJim Jagielski             rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
748*b1cdbd2cSJim Jagielski                 "com.sun.star.util.PathSettings") ) ), UNO_QUERY );
749*b1cdbd2cSJim Jagielski     }
750*b1cdbd2cSJim Jagielski 
751*b1cdbd2cSJim Jagielski     try
752*b1cdbd2cSJim Jagielski     {
753*b1cdbd2cSJim Jagielski         if ( pImpl->m_xPathSettings.is() )
754*b1cdbd2cSJim Jagielski         {
755*b1cdbd2cSJim Jagielski             // load internal paths
756*b1cdbd2cSJim Jagielski             String sProp( sCfgName );
757*b1cdbd2cSJim Jagielski             sProp = sCfgName;
758*b1cdbd2cSJim Jagielski             sProp += POSTFIX_INTERNAL;
759*b1cdbd2cSJim Jagielski             Any aAny = pImpl->m_xPathSettings->getPropertyValue( sProp );
760*b1cdbd2cSJim Jagielski             Sequence< ::rtl::OUString > aPathSeq;
761*b1cdbd2cSJim Jagielski             if ( aAny >>= aPathSeq )
762*b1cdbd2cSJim Jagielski             {
763*b1cdbd2cSJim Jagielski                 long i, nCount = aPathSeq.getLength();
764*b1cdbd2cSJim Jagielski                 const ::rtl::OUString* pPaths = aPathSeq.getConstArray();
765*b1cdbd2cSJim Jagielski 
766*b1cdbd2cSJim Jagielski                 for ( i = 0; i < nCount; ++i )
767*b1cdbd2cSJim Jagielski                 {
768*b1cdbd2cSJim Jagielski                     if ( _rInternalPath.Len() > 0 )
769*b1cdbd2cSJim Jagielski                         _rInternalPath += ';';
770*b1cdbd2cSJim Jagielski                     _rInternalPath += String( pPaths[i] );
771*b1cdbd2cSJim Jagielski                 }
772*b1cdbd2cSJim Jagielski             }
773*b1cdbd2cSJim Jagielski             // load user paths
774*b1cdbd2cSJim Jagielski             sProp = sCfgName;
775*b1cdbd2cSJim Jagielski             sProp += POSTFIX_USER;
776*b1cdbd2cSJim Jagielski             aAny = pImpl->m_xPathSettings->getPropertyValue( sProp );
777*b1cdbd2cSJim Jagielski             if ( aAny >>= aPathSeq )
778*b1cdbd2cSJim Jagielski             {
779*b1cdbd2cSJim Jagielski                 long i, nCount = aPathSeq.getLength();
780*b1cdbd2cSJim Jagielski                 const ::rtl::OUString* pPaths = aPathSeq.getConstArray();
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski                 for ( i = 0; i < nCount; ++i )
783*b1cdbd2cSJim Jagielski                 {
784*b1cdbd2cSJim Jagielski                     if ( _rUserPath.Len() > 0 )
785*b1cdbd2cSJim Jagielski                         _rUserPath += ';';
786*b1cdbd2cSJim Jagielski                     _rUserPath += String( pPaths[i] );
787*b1cdbd2cSJim Jagielski                 }
788*b1cdbd2cSJim Jagielski             }
789*b1cdbd2cSJim Jagielski             // then the writable path
790*b1cdbd2cSJim Jagielski             sProp = sCfgName;
791*b1cdbd2cSJim Jagielski             sProp += POSTFIX_WRITABLE;
792*b1cdbd2cSJim Jagielski             aAny = pImpl->m_xPathSettings->getPropertyValue( sProp );
793*b1cdbd2cSJim Jagielski             ::rtl::OUString sWritablePath;
794*b1cdbd2cSJim Jagielski             if ( aAny >>= sWritablePath )
795*b1cdbd2cSJim Jagielski                 _rWritablePath = String( sWritablePath );
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski             // and the readonly flag
798*b1cdbd2cSJim Jagielski             sProp = sCfgName;
799*b1cdbd2cSJim Jagielski             Reference< XPropertySetInfo > xInfo = pImpl->m_xPathSettings->getPropertySetInfo();
800*b1cdbd2cSJim Jagielski             Property aProp = xInfo->getPropertyByName( sProp );
801*b1cdbd2cSJim Jagielski             _rReadOnly = ( ( aProp.Attributes & PropertyAttribute::READONLY ) == PropertyAttribute::READONLY );
802*b1cdbd2cSJim Jagielski         }
803*b1cdbd2cSJim Jagielski     }
804*b1cdbd2cSJim Jagielski     catch( const Exception& )
805*b1cdbd2cSJim Jagielski     {
806*b1cdbd2cSJim Jagielski         OSL_ENSURE( sal_False, "SvxPathTabPage::GetPathList(): caught an exception!" );
807*b1cdbd2cSJim Jagielski     }
808*b1cdbd2cSJim Jagielski }
809*b1cdbd2cSJim Jagielski 
810*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
811*b1cdbd2cSJim Jagielski 
SetPathList(sal_uInt16 _nPathHandle,const String & _rUserPath,const String & _rWritablePath)812*b1cdbd2cSJim Jagielski void SvxPathTabPage::SetPathList(
813*b1cdbd2cSJim Jagielski     sal_uInt16 _nPathHandle, const String& _rUserPath, const String& _rWritablePath )
814*b1cdbd2cSJim Jagielski {
815*b1cdbd2cSJim Jagielski     String sCfgName = getCfgName_Impl( _nPathHandle );
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski     // load PathSettings service if necessary
818*b1cdbd2cSJim Jagielski     if ( !pImpl->m_xPathSettings.is() )
819*b1cdbd2cSJim Jagielski     {
820*b1cdbd2cSJim Jagielski         Reference< XMultiServiceFactory > xSMgr = comphelper::getProcessServiceFactory();
821*b1cdbd2cSJim Jagielski         pImpl->m_xPathSettings = Reference< XPropertySet >( xSMgr->createInstance(
822*b1cdbd2cSJim Jagielski             rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
823*b1cdbd2cSJim Jagielski                 "com.sun.star.util.PathSettings") ) ), UNO_QUERY );
824*b1cdbd2cSJim Jagielski     }
825*b1cdbd2cSJim Jagielski 
826*b1cdbd2cSJim Jagielski     try
827*b1cdbd2cSJim Jagielski     {
828*b1cdbd2cSJim Jagielski         if ( pImpl->m_xPathSettings.is() )
829*b1cdbd2cSJim Jagielski         {
830*b1cdbd2cSJim Jagielski             // save user paths
831*b1cdbd2cSJim Jagielski             char cDelim = MULTIPATH_DELIMITER;
832*b1cdbd2cSJim Jagielski             sal_uInt16 nCount = _rUserPath.GetTokenCount( cDelim );
833*b1cdbd2cSJim Jagielski             Sequence< ::rtl::OUString > aPathSeq( nCount );
834*b1cdbd2cSJim Jagielski             ::rtl::OUString* pArray = aPathSeq.getArray();
835*b1cdbd2cSJim Jagielski             for ( sal_uInt16 i = 0; i < nCount; ++i )
836*b1cdbd2cSJim Jagielski                 pArray[i] = ::rtl::OUString( _rUserPath.GetToken( i, cDelim ) );
837*b1cdbd2cSJim Jagielski             String sProp( sCfgName );
838*b1cdbd2cSJim Jagielski             sProp += POSTFIX_USER;
839*b1cdbd2cSJim Jagielski             Any aValue = makeAny( aPathSeq );
840*b1cdbd2cSJim Jagielski             pImpl->m_xPathSettings->setPropertyValue( sProp, aValue );
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski             // then the writable path
843*b1cdbd2cSJim Jagielski             aValue = makeAny( ::rtl::OUString( _rWritablePath ) );
844*b1cdbd2cSJim Jagielski             sProp = sCfgName;
845*b1cdbd2cSJim Jagielski             sProp += POSTFIX_WRITABLE;
846*b1cdbd2cSJim Jagielski             pImpl->m_xPathSettings->setPropertyValue( sProp, aValue );
847*b1cdbd2cSJim Jagielski         }
848*b1cdbd2cSJim Jagielski     }
849*b1cdbd2cSJim Jagielski     catch( const Exception& )
850*b1cdbd2cSJim Jagielski     {
851*b1cdbd2cSJim Jagielski         OSL_ENSURE( sal_False, "SvxPathTabPage::SetPathList(): caught an exception!" );
852*b1cdbd2cSJim Jagielski     }
853*b1cdbd2cSJim Jagielski }
854*b1cdbd2cSJim Jagielski 
855