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