Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <tools/config.hxx>
21 : #include <vcl/msgbox.hxx>
22 : #include <svl/intitem.hxx>
23 : #include <svl/stritem.hxx>
24 : #include <svl/eitem.hxx>
25 : #include <svl/slstitm.hxx>
26 : #include <sfx2/fcontnr.hxx>
27 : #include <sfx2/dispatch.hxx>
28 : #include <sfx2/docfilt.hxx>
29 : #include <sfx2/viewsh.hxx>
30 : #include <sfx2/sfxsids.hrc>
31 : #include <sfx2/filedlghelper.hxx>
32 : #include <svl/urihelper.hxx>
33 : #include <sfx2/app.hxx>
34 : #include <sfx2/objsh.hxx>
35 : #include <unotools/bootstrap.hxx>
36 : #include <vcl/help.hxx>
37 : #include <vcl/layout.hxx>
38 : #include <sfx2/viewfrm.hxx>
39 : #include <unotools/pathoptions.hxx>
40 : #include <unotools/securityoptions.hxx>
41 : #include <unotools/localfilehelper.hxx>
42 : #include <unotools/extendedsecurityoptions.hxx>
43 : #include <com/sun/star/uno/Sequence.hxx>
44 :
45 : #include <dialmgr.hxx>
46 : #include "optinet2.hxx"
47 : #include <svx/svxdlg.hxx>
48 : #include <cuires.hrc>
49 : #include "helpid.hrc"
50 : #include <svx/ofaitem.hxx>
51 : #include <sfx2/htmlmode.hxx>
52 : #include <svx/svxids.hrc>
53 :
54 : #include <com/sun/star/security/DocumentDigitalSignatures.hpp>
55 :
56 : #ifdef UNX
57 : #include <sys/stat.h>
58 : #include <unistd.h>
59 : #include <fcntl.h>
60 : #include <pwd.h>
61 : #include <sys/types.h>
62 : #include <string.h>
63 : #include <rtl/textenc.h>
64 : #include <rtl/locale.h>
65 : #include <osl/nlsupport.h>
66 : #endif
67 : #include <sal/types.h>
68 : #include <sal/macros.h>
69 : #include <rtl/ustring.hxx>
70 : #include <osl/file.hxx>
71 : #include <osl/process.h>
72 : #include <com/sun/star/configuration/theDefaultProvider.hpp>
73 : #include <com/sun/star/container/XNameReplace.hpp>
74 : #include <com/sun/star/container/XNameAccess.hpp>
75 : #include <com/sun/star/beans/NamedValue.hpp>
76 : #include <com/sun/star/beans/XPropertySet.hpp>
77 : #include <com/sun/star/beans/XPropertyState.hpp>
78 : #include <com/sun/star/util/XChangesBatch.hpp>
79 : #include <comphelper/processfactory.hxx>
80 : #include <comphelper/string.hxx>
81 :
82 : #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
83 : #include "com/sun/star/task/PasswordContainer.hpp"
84 : #include "com/sun/star/task/XPasswordContainer2.hpp"
85 : #include "securityoptions.hxx"
86 : #include "webconninfo.hxx"
87 : #include "certpath.hxx"
88 :
89 : using namespace ::com::sun::star;
90 : using namespace ::com::sun::star::uno;
91 : using namespace ::sfx2;
92 :
93 : // static ----------------------------------------------------------------
94 :
95 : #include <sal/config.h>
96 :
97 :
98 :
99 0 : extern "C" SAL_DLLPUBLIC_EXPORT vcl::Window* SAL_CALL makeSvxNoSpaceEdit(vcl::Window *pParent, VclBuilder::stringmap &)
100 : {
101 0 : return new SvxNoSpaceEdit(pParent, WB_LEFT|WB_VCENTER|WB_BORDER|WB_3DLOOK);
102 : }
103 :
104 0 : void SvxNoSpaceEdit::KeyInput( const KeyEvent& rKEvent )
105 : {
106 0 : bool bValid = rKEvent.GetKeyCode().GetCode() != KEY_SPACE;
107 0 : if (bValid && bOnlyNumeric)
108 : {
109 0 : const vcl::KeyCode& rKeyCode = rKEvent.GetKeyCode();
110 0 : sal_uInt16 nGroup = rKeyCode.GetGroup();
111 0 : sal_uInt16 nKey = rKeyCode.GetCode();
112 0 : bValid = ( KEYGROUP_NUM == nGroup || KEYGROUP_CURSOR == nGroup ||
113 0 : ( KEYGROUP_MISC == nGroup && ( nKey < KEY_ADD || nKey > KEY_EQUAL ) ) );
114 0 : if ( !bValid && ( rKeyCode.IsMod1() && (
115 0 : KEY_A == nKey || KEY_C == nKey || KEY_V == nKey || KEY_X == nKey || KEY_Z == nKey ) ) )
116 : // Erase, Copy, Paste, Select All und Undo soll funktionieren
117 0 : bValid = true;
118 : }
119 0 : if (bValid)
120 0 : Edit::KeyInput(rKEvent);
121 0 : }
122 :
123 :
124 :
125 0 : void SvxNoSpaceEdit::Modify()
126 : {
127 0 : Edit::Modify();
128 :
129 0 : if ( bOnlyNumeric )
130 : {
131 0 : OUString aValue = GetText();
132 :
133 0 : if ( !comphelper::string::isdigitAsciiString(aValue) || (long)aValue.toInt32() > USHRT_MAX )
134 : // the maximum value of a port number is USHRT_MAX
135 0 : MessageDialog( this, CUI_RES( RID_SVXSTR_OPT_PROXYPORTS ) ).Execute();
136 : }
137 0 : }
138 :
139 0 : bool SvxNoSpaceEdit::set_property(const OString &rKey, const OString &rValue)
140 : {
141 0 : if (rKey == "only-numeric")
142 0 : bOnlyNumeric = toBool(rValue);
143 : else
144 0 : return Edit::set_property(rKey, rValue);
145 0 : return true;
146 : }
147 :
148 :
149 : /********************************************************************/
150 : /* */
151 : /* SvxProxyTabPage */
152 : /* */
153 : /********************************************************************/
154 :
155 0 : SvxProxyTabPage::SvxProxyTabPage(vcl::Window* pParent, const SfxItemSet& rSet)
156 : : SfxTabPage(pParent, "OptProxyPage","cui/ui/optproxypage.ui", &rSet)
157 : , aProxyModePN("ooInetProxyType")
158 : , aHttpProxyPN("ooInetHTTPProxyName")
159 : , aHttpPortPN("ooInetHTTPProxyPort")
160 : , aHttpsProxyPN("ooInetHTTPSProxyName")
161 : , aHttpsPortPN("ooInetHTTPSProxyPort")
162 : , aFtpProxyPN("ooInetFTPProxyName")
163 : , aFtpPortPN("ooInetFTPProxyPort")
164 0 : , aNoProxyDescPN("ooInetNoProxy")
165 : {
166 0 : get(m_pProxyModeLB, "proxymode");
167 :
168 0 : get(m_pHttpProxyFT, "httpft");
169 0 : get(m_pHttpProxyED, "http");
170 0 : get(m_pHttpPortFT, "httpportft");
171 0 : get(m_pHttpPortED, "httpport");
172 :
173 0 : get(m_pHttpsProxyFT, "httpsft");
174 0 : get(m_pHttpsProxyED, "https");
175 0 : get(m_pHttpsPortFT, "httpsportft");
176 0 : get(m_pHttpsPortED, "httpsport");
177 :
178 0 : get(m_pFtpProxyFT, "ftpft");
179 0 : get(m_pFtpProxyED, "ftp");
180 0 : get(m_pFtpPortFT, "ftpportft");
181 0 : get(m_pFtpPortED, "ftpport");
182 :
183 0 : get(m_pNoProxyForFT, "noproxyft");
184 0 : get(m_pNoProxyForED, "noproxy");
185 0 : get(m_pNoProxyDescFT, "noproxydesc");
186 :
187 0 : Link aLink = LINK( this, SvxProxyTabPage, LoseFocusHdl_Impl );
188 0 : m_pHttpPortED->SetLoseFocusHdl( aLink );
189 0 : m_pHttpsPortED->SetLoseFocusHdl( aLink );
190 0 : m_pFtpPortED->SetLoseFocusHdl( aLink );
191 :
192 0 : m_pProxyModeLB->SetSelectHdl(LINK( this, SvxProxyTabPage, ProxyHdl_Impl ));
193 :
194 : Reference< com::sun::star::lang::XMultiServiceFactory >
195 : xConfigurationProvider(
196 : configuration::theDefaultProvider::get(
197 0 : comphelper::getProcessComponentContext() ) );
198 :
199 0 : OUString aConfigRoot( "org.openoffice.Inet/Settings" );
200 :
201 0 : beans::NamedValue aProperty;
202 0 : aProperty.Name = "nodepath";
203 0 : aProperty.Value = makeAny( aConfigRoot );
204 :
205 0 : Sequence< Any > aArgumentList( 1 );
206 0 : aArgumentList[0] = makeAny( aProperty );
207 :
208 0 : m_xConfigurationUpdateAccess = xConfigurationProvider->createInstanceWithArguments(
209 : OUString( "com.sun.star.configuration.ConfigurationUpdateAccess" ),
210 0 : aArgumentList );
211 0 : }
212 :
213 0 : SvxProxyTabPage::~SvxProxyTabPage()
214 : {
215 0 : }
216 :
217 0 : SfxTabPage* SvxProxyTabPage::Create(vcl::Window* pParent, const SfxItemSet* rAttrSet )
218 : {
219 0 : return new SvxProxyTabPage(pParent, *rAttrSet);
220 : }
221 :
222 0 : void SvxProxyTabPage::ReadConfigData_Impl()
223 : {
224 : try {
225 0 : Reference< container::XNameAccess > xNameAccess(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
226 :
227 0 : sal_Int32 nIntValue = 0;
228 0 : OUString aStringValue;
229 :
230 0 : if( xNameAccess->getByName(aProxyModePN) >>= nIntValue )
231 : {
232 0 : m_pProxyModeLB->SelectEntryPos( nIntValue );
233 : }
234 :
235 0 : if( xNameAccess->getByName(aHttpProxyPN) >>= aStringValue )
236 : {
237 0 : m_pHttpProxyED->SetText( aStringValue );
238 : }
239 :
240 0 : if( xNameAccess->getByName(aHttpPortPN) >>= nIntValue )
241 : {
242 0 : m_pHttpPortED->SetText( OUString::number( nIntValue ));
243 : }
244 :
245 0 : if( xNameAccess->getByName(aHttpsProxyPN) >>= aStringValue )
246 : {
247 0 : m_pHttpsProxyED->SetText( aStringValue );
248 : }
249 :
250 0 : if( xNameAccess->getByName(aHttpsPortPN) >>= nIntValue )
251 : {
252 0 : m_pHttpsPortED->SetText( OUString::number( nIntValue ));
253 : }
254 :
255 0 : if( xNameAccess->getByName(aFtpProxyPN) >>= aStringValue )
256 : {
257 0 : m_pFtpProxyED->SetText( aStringValue );
258 : }
259 :
260 0 : if( xNameAccess->getByName(aFtpPortPN) >>= nIntValue )
261 : {
262 0 : m_pFtpPortED->SetText( OUString::number( nIntValue ));
263 : }
264 :
265 0 : if( xNameAccess->getByName(aNoProxyDescPN) >>= aStringValue )
266 : {
267 0 : m_pNoProxyForED->SetText( aStringValue );
268 0 : }
269 : }
270 :
271 0 : catch (const container::NoSuchElementException&) {
272 : OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: NoSuchElementException caught" );
273 : }
274 :
275 0 : catch (const com::sun::star::lang::WrappedTargetException &) {
276 : OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: WrappedTargetException caught" );
277 : }
278 :
279 0 : catch (const RuntimeException &) {
280 : OSL_TRACE( "SvxProxyTabPage::ReadConfigData_Impl: RuntimeException caught" );
281 : }
282 :
283 0 : }
284 :
285 0 : void SvxProxyTabPage::ReadConfigDefaults_Impl()
286 : {
287 : try
288 : {
289 0 : Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
290 :
291 0 : sal_Int32 nIntValue = 0;
292 0 : OUString aStringValue;
293 :
294 0 : if( xPropertyState->getPropertyDefault(aHttpProxyPN) >>= aStringValue )
295 : {
296 0 : m_pHttpProxyED->SetText( aStringValue );
297 : }
298 :
299 0 : if( xPropertyState->getPropertyDefault(aHttpPortPN) >>= nIntValue )
300 : {
301 0 : m_pHttpPortED->SetText( OUString::number( nIntValue ));
302 : }
303 :
304 0 : if( xPropertyState->getPropertyDefault(aHttpsProxyPN) >>= aStringValue )
305 : {
306 0 : m_pHttpsProxyED->SetText( aStringValue );
307 : }
308 :
309 0 : if( xPropertyState->getPropertyDefault(aHttpsPortPN) >>= nIntValue )
310 : {
311 0 : m_pHttpsPortED->SetText( OUString::number( nIntValue ));
312 : }
313 :
314 0 : if( xPropertyState->getPropertyDefault(aFtpProxyPN) >>= aStringValue )
315 : {
316 0 : m_pFtpProxyED->SetText( aStringValue );
317 : }
318 :
319 0 : if( xPropertyState->getPropertyDefault(aFtpPortPN) >>= nIntValue )
320 : {
321 0 : m_pFtpPortED->SetText( OUString::number( nIntValue ));
322 : }
323 :
324 0 : if( xPropertyState->getPropertyDefault(aNoProxyDescPN) >>= aStringValue )
325 : {
326 0 : m_pNoProxyForED->SetText( aStringValue );
327 0 : }
328 : }
329 0 : catch (const beans::UnknownPropertyException &)
330 : {
331 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: UnknownPropertyException caught" );
332 : }
333 :
334 0 : catch (const com::sun::star::lang::WrappedTargetException &) {
335 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: WrappedTargetException caught" );
336 : }
337 :
338 0 : catch (const RuntimeException &)
339 : {
340 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: RuntimeException caught" );
341 : }
342 0 : }
343 :
344 0 : void SvxProxyTabPage::RestoreConfigDefaults_Impl()
345 : {
346 : try
347 : {
348 0 : Reference< beans::XPropertyState > xPropertyState(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
349 :
350 0 : xPropertyState->setPropertyToDefault(aProxyModePN);
351 0 : xPropertyState->setPropertyToDefault(aHttpProxyPN);
352 0 : xPropertyState->setPropertyToDefault(aHttpPortPN);
353 0 : xPropertyState->setPropertyToDefault(aHttpsProxyPN);
354 0 : xPropertyState->setPropertyToDefault(aHttpsPortPN);
355 0 : xPropertyState->setPropertyToDefault(aFtpProxyPN);
356 0 : xPropertyState->setPropertyToDefault(aFtpPortPN);
357 0 : xPropertyState->setPropertyToDefault(aNoProxyDescPN);
358 :
359 0 : Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
360 0 : xChangesBatch->commitChanges();
361 : }
362 :
363 0 : catch (const beans::UnknownPropertyException &)
364 : {
365 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: UnknownPropertyException caught" );
366 : }
367 :
368 0 : catch (const com::sun::star::lang::WrappedTargetException &) {
369 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: WrappedTargetException caught" );
370 : }
371 :
372 0 : catch (const RuntimeException &)
373 : {
374 : OSL_TRACE( "SvxProxyTabPage::RestoreConfigDefaults_Impl: RuntimeException caught" );
375 : }
376 0 : }
377 :
378 0 : void SvxProxyTabPage::Reset(const SfxItemSet*)
379 : {
380 0 : ReadConfigData_Impl();
381 :
382 0 : m_pProxyModeLB->SaveValue();
383 0 : m_pHttpProxyED->SaveValue();
384 0 : m_pHttpPortED->SaveValue();
385 0 : m_pHttpsProxyED->SaveValue();
386 0 : m_pHttpsPortED->SaveValue();
387 0 : m_pFtpProxyED->SaveValue();
388 0 : m_pFtpPortED->SaveValue();
389 0 : m_pNoProxyForED->SaveValue();
390 :
391 0 : EnableControls_Impl( m_pProxyModeLB->GetSelectEntryPos() == 2 );
392 0 : }
393 :
394 0 : bool SvxProxyTabPage::FillItemSet(SfxItemSet* )
395 : {
396 0 : bool bModified = false;
397 :
398 : try {
399 0 : Reference< beans::XPropertySet > xPropertySet(m_xConfigurationUpdateAccess, UNO_QUERY_THROW );
400 :
401 0 : sal_Int32 nSelPos = m_pProxyModeLB->GetSelectEntryPos();
402 0 : if(m_pProxyModeLB->IsValueChangedFromSaved())
403 : {
404 0 : if( nSelPos == 1 )
405 : {
406 0 : RestoreConfigDefaults_Impl();
407 0 : return true;
408 : }
409 :
410 0 : xPropertySet->setPropertyValue(aProxyModePN,
411 0 : makeAny((sal_Int32) nSelPos));
412 0 : bModified = true;
413 : }
414 :
415 0 : if(m_pHttpProxyED->IsValueChangedFromSaved())
416 : {
417 0 : xPropertySet->setPropertyValue( aHttpProxyPN, makeAny(m_pHttpProxyED->GetText()));
418 0 : bModified = true;
419 : }
420 :
421 0 : if ( m_pHttpPortED->IsValueChangedFromSaved())
422 : {
423 0 : xPropertySet->setPropertyValue( aHttpPortPN, makeAny(m_pHttpPortED->GetText().toInt32()));
424 0 : bModified = true;
425 : }
426 :
427 0 : if( m_pHttpsProxyED->IsValueChangedFromSaved() )
428 : {
429 0 : xPropertySet->setPropertyValue( aHttpsProxyPN, makeAny(m_pHttpsProxyED->GetText()) );
430 0 : bModified = true;
431 : }
432 :
433 0 : if ( m_pHttpsPortED->IsValueChangedFromSaved() )
434 : {
435 0 : xPropertySet->setPropertyValue( aHttpsPortPN, makeAny(m_pHttpsPortED->GetText().toInt32()) );
436 0 : bModified = true;
437 : }
438 :
439 0 : if( m_pFtpProxyED->IsValueChangedFromSaved())
440 : {
441 0 : xPropertySet->setPropertyValue( aFtpProxyPN, makeAny(m_pFtpProxyED->GetText()) );
442 0 : bModified = true;
443 : }
444 :
445 0 : if ( m_pFtpPortED->IsValueChangedFromSaved() )
446 : {
447 0 : xPropertySet->setPropertyValue( aFtpPortPN, makeAny(m_pFtpPortED->GetText().toInt32()));
448 0 : bModified = true;
449 : }
450 :
451 0 : if ( m_pNoProxyForED->IsValueChangedFromSaved() )
452 : {
453 0 : xPropertySet->setPropertyValue( aNoProxyDescPN, makeAny( m_pNoProxyForED->GetText()));
454 0 : bModified = true;
455 : }
456 :
457 0 : Reference< util::XChangesBatch > xChangesBatch(m_xConfigurationUpdateAccess, UNO_QUERY_THROW);
458 0 : xChangesBatch->commitChanges();
459 : }
460 :
461 0 : catch (const com::sun::star::lang::IllegalArgumentException &) {
462 : OSL_TRACE( "SvxProxyTabPage::FillItemSet: IllegalArgumentException caught" );
463 : }
464 :
465 0 : catch (const beans::UnknownPropertyException &) {
466 : OSL_TRACE( "SvxProxyTabPage::FillItemSet: UnknownPropertyException caught" );
467 : }
468 :
469 0 : catch (const beans::PropertyVetoException &) {
470 : OSL_TRACE( "SvxProxyTabPage::FillItemSet: PropertyVetoException caught" );
471 : }
472 :
473 0 : catch (const com::sun::star::lang::WrappedTargetException &) {
474 : OSL_TRACE( "SvxProxyTabPage::FillItemSet: WrappedTargetException caught" );
475 : }
476 :
477 0 : catch (const RuntimeException &) {
478 : OSL_TRACE( "SvxProxyTabPage::FillItemSet: RuntimeException caught" );
479 : }
480 :
481 0 : return bModified;
482 : }
483 :
484 0 : void SvxProxyTabPage::EnableControls_Impl(bool bEnable)
485 : {
486 0 : m_pHttpProxyFT->Enable(bEnable);
487 0 : m_pHttpProxyED->Enable(bEnable);
488 0 : m_pHttpPortFT->Enable(bEnable);
489 0 : m_pHttpPortED->Enable(bEnable);
490 :
491 0 : m_pHttpsProxyFT->Enable(bEnable);
492 0 : m_pHttpsProxyED->Enable(bEnable);
493 0 : m_pHttpsPortFT->Enable(bEnable);
494 0 : m_pHttpsPortED->Enable(bEnable);
495 :
496 0 : m_pFtpProxyFT->Enable(bEnable);
497 0 : m_pFtpProxyED->Enable(bEnable);
498 0 : m_pFtpPortFT->Enable(bEnable);
499 0 : m_pFtpPortED->Enable(bEnable);
500 :
501 0 : m_pNoProxyForFT->Enable(bEnable);
502 0 : m_pNoProxyForED->Enable(bEnable);
503 0 : m_pNoProxyDescFT->Enable(bEnable);
504 0 : }
505 :
506 :
507 :
508 0 : IMPL_LINK( SvxProxyTabPage, ProxyHdl_Impl, ListBox *, pBox )
509 : {
510 0 : sal_Int32 nPos = pBox->GetSelectEntryPos();
511 :
512 : // Restore original system values
513 0 : if( nPos == 1 )
514 : {
515 0 : ReadConfigDefaults_Impl();
516 : }
517 :
518 0 : EnableControls_Impl(nPos == 2);
519 0 : return 0;
520 : }
521 :
522 :
523 :
524 0 : IMPL_LINK( SvxProxyTabPage, LoseFocusHdl_Impl, Edit *, pEdit )
525 : {
526 0 : OUString aValue = pEdit->GetText();
527 :
528 0 : if ( !comphelper::string::isdigitAsciiString(aValue) || (long)aValue.toInt32() > USHRT_MAX )
529 0 : pEdit->SetText( OUString('0') );
530 0 : return 0;
531 : }
532 :
533 :
534 :
535 : //#98647#----------------------------------------------
536 0 : void SvxScriptExecListBox::RequestHelp( const HelpEvent& rHEvt )
537 : { // try to show tips just like as on toolbars
538 0 : sal_Int32 nPos=LISTBOX_ENTRY_NOTFOUND;
539 0 : sal_Int32 nTop = GetTopEntry();
540 0 : sal_uInt16 nCount = GetDisplayLineCount(); // Attention: Not GetLineCount()
541 0 : Point aPt = ScreenToOutputPixel( rHEvt.GetMousePosPixel() );
542 0 : Rectangle aItemRect;
543 0 : if( nCount > 0 ) // if there're some entries, find it.
544 0 : for( nPos = nTop ; nPos <= nTop+nCount-1 ; nPos++ ) {
545 0 : aItemRect = GetBoundingRectangle(nPos);
546 0 : if( aPt.Y() < aItemRect.Top() || aPt.Y() > aItemRect.Bottom() )
547 0 : continue;
548 : else
549 0 : break;
550 : }
551 : else // if not, nothing happens.
552 0 : return;
553 0 : OUString aHelpText;
554 0 : if( nPos <= nTop+nCount-1 ) // if find the matching entry, get its content.
555 0 : aHelpText = GetEntry(nPos);
556 0 : if( aHelpText.getLength() && GetTextWidth(aHelpText)<GetOutputSizePixel().Width() )
557 0 : aHelpText = ""; // if the entry is quite short, clear the helping tip content.
558 0 : aItemRect = Rectangle(Point(0,0),GetSizePixel());
559 0 : aPt = Point(OutputToScreenPixel( aItemRect.TopLeft() ));
560 0 : aItemRect.Left() = aPt.X();
561 0 : aItemRect.Top() = aPt.Y();
562 0 : aPt = OutputToScreenPixel( aItemRect.BottomRight() );
563 0 : aItemRect.Right() = aPt.X();
564 0 : aItemRect.Bottom() = aPt.Y();
565 0 : if( rHEvt.GetMode() == HELPMODE_BALLOON )
566 0 : Help::ShowBalloon( this, aItemRect.Center(), aItemRect, aHelpText);
567 : else
568 0 : Help::ShowQuickHelp( this, aItemRect, aHelpText );
569 : }
570 :
571 : /********************************************************************/
572 : /* */
573 : /* SvxSecurityTabPage */
574 : /* */
575 : /********************************************************************/
576 :
577 0 : SvxSecurityTabPage::SvxSecurityTabPage(vcl::Window* pParent, const SfxItemSet& rSet)
578 : : SfxTabPage(pParent, "OptSecurityPage", "cui/ui/optsecuritypage.ui", &rSet)
579 0 : , mpSecOptions(new SvtSecurityOptions)
580 : , mpSecOptDlg(NULL)
581 0 : , mpCertPathDlg(NULL)
582 : {
583 0 : get(m_pSecurityOptionsPB, "options");
584 0 : get(m_pSavePasswordsCB, "savepassword");
585 :
586 : //fdo#65595, we need height-for-width support here, but for now we can
587 : //bodge it
588 0 : Size aPrefSize(m_pSavePasswordsCB->get_preferred_size());
589 0 : Size aSize(m_pSavePasswordsCB->CalcMinimumSize(56*approximate_char_width()));
590 0 : if (aPrefSize.Width() > aSize.Width())
591 : {
592 0 : m_pSavePasswordsCB->set_width_request(aSize.Width());
593 0 : m_pSavePasswordsCB->set_height_request(aSize.Height());
594 : }
595 :
596 0 : get(m_pShowConnectionsPB, "connections");
597 0 : get(m_pMasterPasswordCB, "usemasterpassword");
598 0 : get(m_pMasterPasswordFT, "masterpasswordtext");
599 0 : get(m_pMasterPasswordPB, "masterpassword");
600 0 : get(m_pMacroSecFrame, "macrosecurity");
601 0 : get(m_pMacroSecPB, "macro");
602 0 : get(m_pCertFrame, "certificatepath");
603 0 : get(m_pCertPathPB, "cert");
604 0 : m_sPasswordStoringDeactivateStr = get<FixedText>("nopasswordsave")->GetText();
605 :
606 0 : InitControls();
607 :
608 0 : m_pSecurityOptionsPB->SetClickHdl( LINK( this, SvxSecurityTabPage, SecurityOptionsHdl ) );
609 0 : m_pSavePasswordsCB->SetClickHdl( LINK( this, SvxSecurityTabPage, SavePasswordHdl ) );
610 0 : m_pMasterPasswordPB->SetClickHdl( LINK( this, SvxSecurityTabPage, MasterPasswordHdl ) );
611 0 : m_pMasterPasswordCB->SetClickHdl( LINK( this, SvxSecurityTabPage, MasterPasswordCBHdl ) );
612 0 : m_pShowConnectionsPB->SetClickHdl( LINK( this, SvxSecurityTabPage, ShowPasswordsHdl ) );
613 0 : m_pMacroSecPB->SetClickHdl( LINK( this, SvxSecurityTabPage, MacroSecPBHdl ) );
614 0 : m_pCertPathPB->SetClickHdl( LINK( this, SvxSecurityTabPage, CertPathPBHdl ) );
615 :
616 0 : ActivatePage( rSet );
617 0 : }
618 :
619 0 : SvxSecurityTabPage::~SvxSecurityTabPage()
620 : {
621 0 : delete mpCertPathDlg;
622 :
623 0 : delete mpSecOptions;
624 0 : delete mpSecOptDlg;
625 0 : }
626 :
627 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, SecurityOptionsHdl)
628 : {
629 0 : if ( !mpSecOptDlg )
630 0 : mpSecOptDlg = new svx::SecurityOptionsDialog( this, mpSecOptions );
631 0 : mpSecOptDlg->Execute();
632 0 : return 0;
633 : }
634 :
635 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, SavePasswordHdl)
636 : {
637 : try
638 : {
639 : Reference< task::XPasswordContainer2 > xMasterPasswd(
640 0 : task::PasswordContainer::create(comphelper::getProcessComponentContext()));
641 :
642 0 : if ( m_pSavePasswordsCB->IsChecked() )
643 : {
644 0 : bool bOldValue = xMasterPasswd->allowPersistentStoring( sal_True );
645 0 : xMasterPasswd->removeMasterPassword();
646 0 : if ( xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() ) )
647 : {
648 0 : m_pMasterPasswordPB->Enable( true );
649 0 : m_pMasterPasswordCB->Check( true );
650 0 : m_pMasterPasswordCB->Enable( true );
651 0 : m_pMasterPasswordFT->Enable( true );
652 0 : m_pShowConnectionsPB->Enable( true );
653 : }
654 : else
655 : {
656 0 : xMasterPasswd->allowPersistentStoring( bOldValue );
657 0 : m_pSavePasswordsCB->Check( false );
658 : }
659 : }
660 : else
661 : {
662 0 : QueryBox aQuery( this, WB_YES_NO|WB_DEF_NO, m_sPasswordStoringDeactivateStr );
663 0 : sal_uInt16 nRet = aQuery.Execute();
664 :
665 0 : if( RET_YES == nRet )
666 : {
667 0 : xMasterPasswd->allowPersistentStoring( sal_False );
668 0 : m_pMasterPasswordCB->Check( true );
669 0 : m_pMasterPasswordPB->Enable( false );
670 0 : m_pMasterPasswordCB->Enable( false );
671 0 : m_pMasterPasswordFT->Enable( false );
672 0 : m_pShowConnectionsPB->Enable( false );
673 : }
674 : else
675 : {
676 0 : m_pSavePasswordsCB->Check( true );
677 0 : m_pMasterPasswordPB->Enable( true );
678 0 : m_pShowConnectionsPB->Enable( true );
679 0 : }
680 0 : }
681 : }
682 0 : catch (const Exception&)
683 : {
684 0 : m_pSavePasswordsCB->Check( !m_pSavePasswordsCB->IsChecked() );
685 : }
686 :
687 0 : return 0;
688 : }
689 :
690 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, MasterPasswordHdl)
691 : {
692 : try
693 : {
694 : Reference< task::XPasswordContainer2 > xMasterPasswd(
695 0 : task::PasswordContainer::create(comphelper::getProcessComponentContext()));
696 :
697 0 : if ( xMasterPasswd->isPersistentStoringAllowed() )
698 0 : xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() );
699 : }
700 0 : catch (const Exception&)
701 : {}
702 :
703 0 : return 0;
704 : }
705 :
706 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, MasterPasswordCBHdl)
707 : {
708 : try
709 : {
710 : Reference< task::XPasswordContainer2 > xMasterPasswd(
711 0 : task::PasswordContainer::create(comphelper::getProcessComponentContext()));
712 :
713 0 : if ( m_pMasterPasswordCB->IsChecked() )
714 : {
715 0 : if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->changeMasterPassword( Reference< task::XInteractionHandler >() ) )
716 : {
717 0 : m_pMasterPasswordPB->Enable( true );
718 0 : m_pMasterPasswordFT->Enable( true );
719 : }
720 : else
721 : {
722 0 : m_pMasterPasswordCB->Check( false );
723 0 : m_pMasterPasswordPB->Enable( true );
724 0 : m_pMasterPasswordFT->Enable( true );
725 : }
726 : }
727 : else
728 : {
729 0 : if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->useDefaultMasterPassword( Reference< task::XInteractionHandler >() ) )
730 : {
731 0 : m_pMasterPasswordPB->Enable( false );
732 0 : m_pMasterPasswordFT->Enable( false );
733 : }
734 : else
735 : {
736 0 : m_pMasterPasswordCB->Check( true );
737 0 : m_pMasterPasswordPB->Enable( true );
738 0 : m_pShowConnectionsPB->Enable( true );
739 : }
740 0 : }
741 : }
742 0 : catch (const Exception&)
743 : {
744 0 : m_pSavePasswordsCB->Check( !m_pSavePasswordsCB->IsChecked() );
745 : }
746 :
747 0 : return 0;
748 : }
749 :
750 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, ShowPasswordsHdl)
751 : {
752 : try
753 : {
754 : Reference< task::XPasswordContainer2 > xMasterPasswd(
755 0 : task::PasswordContainer::create(comphelper::getProcessComponentContext()));
756 :
757 0 : if ( xMasterPasswd->isPersistentStoringAllowed() && xMasterPasswd->authorizateWithMasterPassword( Reference< task::XInteractionHandler>() ) )
758 : {
759 0 : svx::WebConnectionInfoDialog aDlg( this );
760 0 : aDlg.Execute();
761 0 : }
762 : }
763 0 : catch (const Exception&)
764 : {}
765 0 : return 0;
766 : }
767 :
768 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, CertPathPBHdl)
769 : {
770 0 : if (!mpCertPathDlg)
771 0 : mpCertPathDlg = new CertPathDialog(this);
772 :
773 0 : OUString sOrig = mpCertPathDlg->getDirectory();
774 0 : short nRet = mpCertPathDlg->Execute();
775 :
776 0 : if (nRet == RET_OK && sOrig != mpCertPathDlg->getDirectory())
777 : {
778 0 : MessageDialog aWarnBox(this, CUI_RES(RID_SVXSTR_OPTIONS_RESTART), VCL_MESSAGE_INFO);
779 0 : aWarnBox.Execute();
780 : }
781 :
782 0 : return 0;
783 : }
784 :
785 0 : IMPL_LINK_NOARG(SvxSecurityTabPage, MacroSecPBHdl)
786 : {
787 : try
788 : {
789 : Reference< security::XDocumentDigitalSignatures > xD(
790 0 : security::DocumentDigitalSignatures::createDefault(comphelper::getProcessComponentContext() ) );
791 0 : xD->manageTrustedSources();
792 : }
793 0 : catch (const Exception& e)
794 : {
795 : OSL_FAIL(OUStringToOString(e.Message, osl_getThreadTextEncoding()).getStr());
796 : (void)e;
797 : }
798 0 : return 0;
799 : }
800 :
801 :
802 0 : void SvxSecurityTabPage::InitControls()
803 : {
804 : // Hide all controls which belong to the macro security button in case the macro
805 : // security settings managed by the macro security dialog opened via the button
806 : // are all readonly or if the macros are disabled in general.
807 : // @@@ Better would be to query the dialog whether it is 'useful' or not. Exposing
808 : // macro security dialog implementations here, which is bad.
809 0 : if ( mpSecOptions->IsMacroDisabled()
810 0 : || ( mpSecOptions->IsReadOnly( SvtSecurityOptions::E_MACRO_SECLEVEL )
811 0 : && mpSecOptions->IsReadOnly( SvtSecurityOptions::E_MACRO_TRUSTEDAUTHORS )
812 0 : && mpSecOptions->IsReadOnly( SvtSecurityOptions::E_SECUREURLS ) ) )
813 : {
814 : //Hide these
815 0 : m_pMacroSecFrame->Hide();
816 : }
817 :
818 : #ifndef UNX
819 : m_pCertFrame->Hide();
820 : #endif
821 :
822 0 : m_pMasterPasswordPB->Enable( false );
823 0 : m_pMasterPasswordCB->Enable( false );
824 0 : m_pMasterPasswordCB->Check( true );
825 0 : m_pMasterPasswordFT->Enable( false );
826 0 : m_pShowConnectionsPB->Enable( false );
827 :
828 : // initialize the password saving checkbox
829 : try
830 : {
831 : Reference< task::XPasswordContainer2 > xMasterPasswd(
832 0 : task::PasswordContainer::create(comphelper::getProcessComponentContext()));
833 :
834 0 : if ( xMasterPasswd->isPersistentStoringAllowed() )
835 : {
836 0 : m_pMasterPasswordCB->Enable( true );
837 0 : m_pShowConnectionsPB->Enable( true );
838 0 : m_pSavePasswordsCB->Check( true );
839 :
840 0 : if ( xMasterPasswd->isDefaultMasterPasswordUsed() )
841 0 : m_pMasterPasswordCB->Check( false );
842 : else
843 : {
844 0 : m_pMasterPasswordPB->Enable( true );
845 0 : m_pMasterPasswordCB->Check( true );
846 0 : m_pMasterPasswordFT->Enable( true );
847 : }
848 0 : }
849 : }
850 0 : catch (const Exception&)
851 : {
852 0 : m_pSavePasswordsCB->Enable( false );
853 : }
854 0 : }
855 :
856 0 : SfxTabPage* SvxSecurityTabPage::Create(vcl::Window* pParent, const SfxItemSet* rAttrSet )
857 : {
858 0 : return new SvxSecurityTabPage(pParent, *rAttrSet);
859 : }
860 :
861 0 : void SvxSecurityTabPage::ActivatePage( const SfxItemSet& )
862 : {
863 0 : }
864 :
865 0 : int SvxSecurityTabPage::DeactivatePage( SfxItemSet* _pSet )
866 : {
867 0 : if( _pSet )
868 0 : FillItemSet( _pSet );
869 0 : return LEAVE_PAGE;
870 : }
871 :
872 : namespace
873 : {
874 0 : bool CheckAndSave( SvtSecurityOptions& _rOpt, SvtSecurityOptions::EOption _eOpt, const bool _bIsChecked, bool& _rModfied )
875 : {
876 0 : bool bModified = false;
877 0 : if ( _rOpt.IsOptionEnabled( _eOpt ) )
878 : {
879 0 : bModified = _rOpt.IsOptionSet( _eOpt ) != _bIsChecked;
880 0 : if ( bModified )
881 : {
882 0 : _rOpt.SetOption( _eOpt, _bIsChecked );
883 0 : _rModfied = true;
884 : }
885 : }
886 :
887 0 : return bModified;
888 : }
889 : }
890 :
891 0 : bool SvxSecurityTabPage::FillItemSet( SfxItemSet* )
892 : {
893 0 : bool bModified = false;
894 :
895 0 : if ( mpSecOptDlg )
896 : {
897 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SAVEORSEND, mpSecOptDlg->IsSaveOrSendDocsChecked(), bModified );
898 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_SIGNING, mpSecOptDlg->IsSignDocsChecked(), bModified );
899 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_PRINT, mpSecOptDlg->IsPrintDocsChecked(), bModified );
900 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_CREATEPDF, mpSecOptDlg->IsCreatePdfChecked(), bModified );
901 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO, mpSecOptDlg->IsRemovePersInfoChecked(), bModified );
902 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD, mpSecOptDlg->IsRecommPasswdChecked(), bModified );
903 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_CTRLCLICK_HYPERLINK, mpSecOptDlg->IsCtrlHyperlinkChecked(), bModified );
904 0 : CheckAndSave( *mpSecOptions, SvtSecurityOptions::E_BLOCKUNTRUSTEDREFERERLINKS, mpSecOptDlg->IsBlockUntrustedRefererLinksChecked(), bModified );
905 : }
906 :
907 0 : return bModified;
908 : }
909 :
910 : /*--------------------------------------------------------------------*/
911 :
912 0 : void SvxSecurityTabPage::Reset( const SfxItemSet* )
913 : {
914 0 : }
915 :
916 : class MailerProgramCfg_Impl : public utl::ConfigItem
917 : {
918 : friend class SvxEMailTabPage;
919 : // variables
920 : OUString sProgram;
921 : // readonly states
922 : bool bROProgram;
923 :
924 : const Sequence<OUString> GetPropertyNames();
925 : public:
926 : MailerProgramCfg_Impl();
927 : virtual ~MailerProgramCfg_Impl();
928 :
929 : virtual void Commit() SAL_OVERRIDE;
930 : virtual void Notify( const com::sun::star::uno::Sequence< OUString >& _rPropertyNames) SAL_OVERRIDE;
931 : };
932 :
933 : /* -------------------------------------------------------------------------*/
934 :
935 0 : MailerProgramCfg_Impl::MailerProgramCfg_Impl() :
936 : utl::ConfigItem("Office.Common/ExternalMailer"),
937 0 : bROProgram(false)
938 : {
939 0 : const Sequence< OUString > aNames = GetPropertyNames();
940 0 : const Sequence< Any > aValues = GetProperties(aNames);
941 0 : const Sequence< sal_Bool > aROStates = GetReadOnlyStates(aNames);
942 0 : const Any* pValues = aValues.getConstArray();
943 0 : const sal_Bool* pROStates = aROStates.getConstArray();
944 0 : for(sal_Int32 nProp = 0; nProp < aValues.getLength(); nProp++)
945 : {
946 0 : if(pValues[nProp].hasValue())
947 : {
948 0 : switch(nProp)
949 : {
950 : case 0 :
951 : {
952 0 : pValues[nProp] >>= sProgram;
953 0 : bROProgram = pROStates[nProp];
954 : }
955 0 : break;
956 : }
957 : }
958 0 : }
959 0 : }
960 :
961 : /* -------------------------------------------------------------------------*/
962 :
963 0 : MailerProgramCfg_Impl::~MailerProgramCfg_Impl()
964 : {
965 0 : }
966 :
967 : /* -------------------------------------------------------------------------*/
968 :
969 0 : const Sequence<OUString> MailerProgramCfg_Impl::GetPropertyNames()
970 : {
971 0 : Sequence<OUString> aRet(1);
972 0 : OUString* pRet = aRet.getArray();
973 0 : pRet[0] = "Program";
974 0 : return aRet;
975 : }
976 :
977 : /* -------------------------------------------------------------------------*/
978 :
979 0 : void MailerProgramCfg_Impl::Commit()
980 : {
981 0 : const Sequence< OUString > aOrgNames = GetPropertyNames();
982 0 : sal_Int32 nOrgCount = aOrgNames.getLength();
983 :
984 0 : Sequence< OUString > aNames(nOrgCount);
985 0 : Sequence< Any > aValues(nOrgCount);
986 0 : sal_Int32 nRealCount = 0;
987 :
988 0 : for(int nProp = 0; nProp < nOrgCount; nProp++)
989 : {
990 0 : switch(nProp)
991 : {
992 : case 0:
993 : {
994 0 : if (!bROProgram)
995 : {
996 0 : aNames[nRealCount] = aOrgNames[nProp];
997 0 : aValues[nRealCount] <<= sProgram;
998 0 : ++nRealCount;
999 : }
1000 : }
1001 0 : break;
1002 : }
1003 : }
1004 :
1005 0 : aNames.realloc(nRealCount);
1006 0 : aValues.realloc(nRealCount);
1007 0 : PutProperties(aNames, aValues);
1008 0 : }
1009 :
1010 0 : void MailerProgramCfg_Impl::Notify( const com::sun::star::uno::Sequence< OUString >& )
1011 : {
1012 0 : }
1013 :
1014 : /* -------------------------------------------------------------------------*/
1015 :
1016 0 : struct SvxEMailTabPage_Impl
1017 : {
1018 : MailerProgramCfg_Impl aMailConfig;
1019 : };
1020 :
1021 0 : SvxEMailTabPage::SvxEMailTabPage(vcl::Window* pParent, const SfxItemSet& rSet)
1022 : : SfxTabPage( pParent, "OptEmailPage", "cui/ui/optemailpage.ui", &rSet)
1023 0 : , pImpl(new SvxEMailTabPage_Impl)
1024 : {
1025 0 : get(m_pMailContainer, "OptEmailPage");
1026 0 : get(m_pMailerURLFI, "lockemail");
1027 0 : get(m_pMailerURLED, "url");
1028 0 : get(m_pMailerURLPB, "browse");
1029 0 : m_sDefaultFilterName = get<FixedText>("browsetitle")->GetText();
1030 0 : m_pMailerURLPB->SetClickHdl( LINK( this, SvxEMailTabPage, FileDialogHdl_Impl ) );
1031 0 : }
1032 :
1033 : /* -------------------------------------------------------------------------*/
1034 :
1035 0 : SvxEMailTabPage::~SvxEMailTabPage()
1036 : {
1037 0 : delete pImpl;
1038 0 : }
1039 :
1040 : /* -------------------------------------------------------------------------*/
1041 :
1042 0 : SfxTabPage* SvxEMailTabPage::Create( vcl::Window* pParent, const SfxItemSet* rAttrSet )
1043 : {
1044 0 : return new SvxEMailTabPage(pParent, *rAttrSet);
1045 : }
1046 :
1047 : /* -------------------------------------------------------------------------*/
1048 :
1049 0 : bool SvxEMailTabPage::FillItemSet( SfxItemSet* )
1050 : {
1051 0 : bool bMailModified = false;
1052 0 : if(!pImpl->aMailConfig.bROProgram && m_pMailerURLED->IsValueChangedFromSaved())
1053 : {
1054 0 : pImpl->aMailConfig.sProgram = m_pMailerURLED->GetText();
1055 0 : bMailModified = true;
1056 : }
1057 0 : if ( bMailModified )
1058 0 : pImpl->aMailConfig.Commit();
1059 :
1060 0 : return false;
1061 : }
1062 :
1063 : /* -------------------------------------------------------------------------*/
1064 :
1065 0 : void SvxEMailTabPage::Reset( const SfxItemSet* )
1066 : {
1067 0 : m_pMailerURLED->Enable(true );
1068 0 : m_pMailerURLPB->Enable(true );
1069 :
1070 0 : if (pImpl->aMailConfig.bROProgram)
1071 0 : m_pMailerURLFI->Show();
1072 :
1073 0 : m_pMailerURLED->SetText(pImpl->aMailConfig.sProgram);
1074 0 : m_pMailerURLED->SaveValue();
1075 :
1076 0 : m_pMailContainer->Enable(!pImpl->aMailConfig.bROProgram);
1077 0 : }
1078 :
1079 : /* -------------------------------------------------------------------------*/
1080 :
1081 0 : IMPL_LINK( SvxEMailTabPage, FileDialogHdl_Impl, PushButton*, pButton )
1082 : {
1083 0 : if (m_pMailerURLPB == pButton && !pImpl->aMailConfig.bROProgram)
1084 : {
1085 : FileDialogHelper aHelper(
1086 : com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
1087 0 : 0 );
1088 0 : OUString sPath = m_pMailerURLED->GetText();
1089 0 : if ( sPath.isEmpty() )
1090 0 : sPath = "/usr/bin";
1091 :
1092 0 : OUString sUrl;
1093 0 : ::utl::LocalFileHelper::ConvertPhysicalNameToURL(sPath, sUrl);
1094 0 : aHelper.SetDisplayDirectory(sUrl);
1095 0 : aHelper.AddFilter( m_sDefaultFilterName, OUString("*"));
1096 :
1097 0 : if ( ERRCODE_NONE == aHelper.Execute() )
1098 : {
1099 0 : sUrl = aHelper.GetPath();
1100 0 : ::utl::LocalFileHelper::ConvertURLToPhysicalName(sUrl, sPath);
1101 0 : m_pMailerURLED->SetText(sPath);
1102 0 : }
1103 : }
1104 0 : return 0;
1105 0 : }
1106 :
1107 :
1108 :
1109 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|