1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef __FRAMEWORK_LOGINDIALOG_LOGINDIALOG_HXX_
25 #define __FRAMEWORK_LOGINDIALOG_LOGINDIALOG_HXX_
26 
27 //_________________________________________________________________________________________________________________
28 //	my own includes
29 //_________________________________________________________________________________________________________________
30 
31 #ifndef __FRAMEWORK_THREADHELPER_THREADHELPBASE_HXX_
32 #include <threadhelp/threadhelpbase.hxx>
33 #endif
34 #include <macros/generic.hxx>
35 #include <macros/debug.hxx>
36 #include <macros/xinterface.hxx>
37 #include <macros/xtypeprovider.hxx>
38 #include <macros/xserviceinfo.hxx>
39 
40 #include <services/logindialog.hrc>
41 
42 //_________________________________________________________________________________________________________________
43 //	interface includes
44 //_________________________________________________________________________________________________________________
45 #include <com/sun/star/awt/XDialog.hpp>
46 #include <com/sun/star/lang/IllegalArgumentException.hpp>
47 #include <com/sun/star/beans/XPropertySetInfo.hpp>
48 #include <com/sun/star/beans/Property.hpp>
49 #include <com/sun/star/beans/PropertyValue.hpp>
50 #include <com/sun/star/lang/Locale.hpp>
51 #include <com/sun/star/util/XFlushable.hpp>
52 
53 //_________________________________________________________________________________________________________________
54 //	other includes
55 //_________________________________________________________________________________________________________________
56 #include <tools/config.hxx>
57 #include <cppuhelper/weak.hxx>
58 #include <cppuhelper/propshlp.hxx>
59 #include <vcl/dialog.hxx>
60 #include <vcl/fixed.hxx>
61 #include <vcl/edit.hxx>
62 #include <vcl/combobox.hxx>
63 
64 #ifndef _SV_BUTTON_HXX
65 #include <vcl/button.hxx>
66 #endif
67 
68 #ifndef _SV_BUTTON_HXX
69 #include <vcl/button.hxx>
70 #endif
71 #include <vcl/morebtn.hxx>
72 
73 //_________________________________________________________________________________________________________________
74 //	namespace
75 //_________________________________________________________________________________________________________________
76 
77 namespace framework{
78 
79 #define	ANY									::com::sun::star::uno::Any
80 #define	EXCEPTION							::com::sun::star::uno::Exception
81 #define	ILLEGALARGUMENTEXCEPTION			::com::sun::star::lang::IllegalArgumentException
82 #define	IPROPERTYARRAYHELPER				::cppu::IPropertyArrayHelper
83 #define	OBROADCASTHELPER					::cppu::OBroadcastHelper
84 #define	OPROPERTYSETHELPER					::cppu::OPropertySetHelper
85 #define	OUSTRING							::rtl::OUString
86 #define	OWEAKOBJECT							::cppu::OWeakObject
87 #define	PROPERTY							::com::sun::star::beans::Property
88 #define	REFERENCE							::com::sun::star::uno::Reference
89 #define	RUNTIMEEXCEPTION					::com::sun::star::uno::RuntimeException
90 #define	SEQUENCE							::com::sun::star::uno::Sequence
91 #define	XDIALOG								::com::sun::star::awt::XDialog
92 #define	XMULTISERVICEFACTORY				::com::sun::star::lang::XMultiServiceFactory
93 #define	XPROPERTYSETINFO					::com::sun::star::beans::XPropertySetInfo
94 #define	XSERVICEINFO						::com::sun::star::lang::XServiceInfo
95 #define	XTYPEPROVIDER						::com::sun::star::lang::XTypeProvider
96 #define	PROPERTYVALUE						::com::sun::star::beans::PropertyValue
97 #define	LOCALE								::com::sun::star::lang::Locale
98 #define XFLUSHABLE                          ::com::sun::star::util::XFlushable
99 #define XFLUSHLISTENER                      ::com::sun::star::util::XFlushListener
100 
101 //_________________________________________________________________________________________________________________
102 //	exported const
103 //_________________________________________________________________________________________________________________
104 
105 #ifdef WNT
106 	#define	ININAME								DECLARE_ASCII("login.ini")
107 #elif defined UNIX
108 	#define	ININAME								DECLARE_ASCII("loginrc")
109 #else
110 	#error "name of login profile unknown!"
111 #endif
112 
113 #define	UNCPATHSEPERATOR						sal_Unicode(0x002F)
114 #define	MAX_SERVERHISTORY						10
115 
116 //	Use follow keys in follow order.
117 //	[Global]
118 //	UserName=as
119 //	ActiveServer=2
120 //	ConnectionType=https
121 //	Language=en-US
122 //	UseProxy=[browser|custom|none]
123 //	SecurityProxy=so-webcache:3128
124 //	dialog=[big|small]
125 //
126 //	[DefaultPorts]
127 //	https=8445
128 //	http=8090
129 //
130 //	[ServerHistory]
131 //	Server_1=localhost
132 //	Server_2=munch:7202
133 //	Server_3=www.xxx.com:8000
134 
135 #define	SECTION_GLOBAL							"Global"
136 #define	SECTION_DEFAULTPORTS					"DefaultPorts"
137 #define	SECTION_SERVERHISTORY					"ServerHistory"
138 
139 #define	SECTION_USERNAME						SECTION_GLOBAL
140 #define	SECTION_ACTIVESERVER					SECTION_GLOBAL
141 #define	SECTION_CONNECTIONTYPE					SECTION_GLOBAL
142 #define	SECTION_LANGUAGE						SECTION_GLOBAL
143 #define SECTION_SECURITYPROXY					SECTION_GLOBAL
144 #define SECTION_DIALOG							SECTION_GLOBAL
145 #define SECTION_HTTP							SECTION_DEFAULTPORTS
146 #define SECTION_HTTPS							SECTION_DEFAULTPORTS
147 #define	SECTION_SERVER_X						SECTION_SERVERHISTORY
148 
149 #define	KEY_USERNAME							"UserName"
150 #define	KEY_ACTIVESERVER						"ActiveServer"
151 #define	KEY_CONNECTIONTYPE						"ConnectionType"
152 #define	KEY_LANGUAGE							"Language"
153 #define	KEY_SERVER_X							"Server_"
154 #define	KEY_SECURITYPROXY						"SecurityProxy"
155 #define KEY_USESECURITYPROXY					"UseProxy"
156 #define KEY_DIALOG								"dialog"
157 #define KEY_HTTP								"http"
158 #define KEY_HTTPS								"https"
159 
160 #define	PROPERTYNAME_CONNECTIONTYPE				DECLARE_ASCII("ConnectionType"					)
161 #define	PROPERTYNAME_LANGUAGE					DECLARE_ASCII("Language"						)
162 #define PROPERTYNAME_PARENTWINDOW               DECLARE_ASCII("ParentWindow"                    )
163 #define	PROPERTYNAME_PASSWORD					DECLARE_ASCII("Password"						)
164 #define PROPERTYNAME_SECURITYPROXY				DECLARE_ASCII("SecurityProxy"					)
165 #define	PROPERTYNAME_SERVER						DECLARE_ASCII("Server"							)
166 #define	PROPERTYNAME_SERVERHISTORY				DECLARE_ASCII("ServerHistory"					)
167 #define	PROPERTYNAME_USERNAME					DECLARE_ASCII("UserName"						)
168 #define PROPERTYNAME_USEPROXY					DECLARE_ASCII("UseProxy"						)
169 #define PROPERTYNAME_DIALOG						DECLARE_ASCII("Dialog"							)
170 #define PROPERTYNAME_HTTP						DECLARE_ASCII("http"							)
171 #define PROPERTYNAME_HTTPS						DECLARE_ASCII("https"							)
172 
173 #define	PROPERTYHANDLE_CONNECTIONTYPE			1
174 #define	PROPERTYHANDLE_LANGUAGE					2
175 #define PROPERTYHANDLE_PARENTWINDOW             3
176 #define PROPERTYHANDLE_PASSWORD                 4
177 #define PROPERTYHANDLE_SERVER                   5
178 #define PROPERTYHANDLE_SERVERHISTORY            6
179 #define PROPERTYHANDLE_USERNAME                 7
180 #define PROPERTYHANDLE_SECURITYPROXY            8
181 #define PROPERTYHANDLE_USEPROXY		            9
182 #define PROPERTYHANDLE_DIALOG		            10
183 #define PROPERTYHANDLE_HTTP						11
184 #define PROPERTYHANDLE_HTTPS					12
185 
186 #define PROPERTYCOUNT                           12
187 
188 //_________________________________________________________________________________________________________________
189 //	exported definitions
190 //_________________________________________________________________________________________________________________
191 
192 struct tIMPL_DialogData
193 {
194 	OUSTRING				sUserName				;
195 	OUSTRING				sPassword				;
196 	SEQUENCE< OUSTRING >	seqServerList			;
197 	sal_Int32				nActiveServer			;
198 	OUSTRING				sConnectionType			;
199 	LOCALE					aLanguage				;
200 	sal_Int32				nPortHttp				;
201 	sal_Int32				nPortHttps				;
202     ANY                     aParentWindow           ;
203 	OUSTRING				sSecurityProxy			;
204 	OUSTRING				sUseProxy				;
205 	OUSTRING				sDialog					;
206 	sal_Bool				bProxyChanged			;
207 
208 	// default ctor to initialize empty structure.
209 	tIMPL_DialogData()
210 		:	sUserName				( OUSTRING()							)
211 		,	sPassword				( OUSTRING()							)
212 		,	seqServerList			( SEQUENCE< OUSTRING >()				)
213 		,	nActiveServer			( 1										)
214 		,	sConnectionType			( OUSTRING()							)
215 		,	aLanguage				( OUSTRING(), OUSTRING(), OUSTRING()	)
216 		,	nPortHttp				( 0										)
217 		,	nPortHttps				( 0										)
218         ,   aParentWindow           (                                       )
219 		,	sSecurityProxy			( OUSTRING()							)
220 		,	sUseProxy				( OUSTRING()							)
221 		,	sDialog					( OUSTRING()							)
222 		,	bProxyChanged			( sal_False								)
223 	{
224 	}
225 
226 	// copy ctor to initialize structure with values from another one.
227 	tIMPL_DialogData( const tIMPL_DialogData& aCopyDataSet )
228 		:	sUserName				( aCopyDataSet.sUserName				)
229 		,	sPassword				( aCopyDataSet.sPassword				)
230 		,	seqServerList			( aCopyDataSet.seqServerList			)
231 		,	nActiveServer			( aCopyDataSet.nActiveServer			)
232 		,	sConnectionType			( aCopyDataSet.sConnectionType			)
233 		,	aLanguage				( aCopyDataSet.aLanguage				)
234 		,	nPortHttp				( aCopyDataSet.nPortHttp				)
235 		,	nPortHttps				( aCopyDataSet.nPortHttps				)
236         ,   aParentWindow           ( aCopyDataSet.aParentWindow            )
237 		,	sSecurityProxy			( aCopyDataSet.sSecurityProxy			)
238 		,	sUseProxy				( aCopyDataSet.sUseProxy				)
239 		,	sDialog					( aCopyDataSet.sDialog					)
240 		,	bProxyChanged			( aCopyDataSet.bProxyChanged			)
241 	{
242 	}
243 
244 	// assignment operator to cop values from another struct to this one.
245 	tIMPL_DialogData& operator=( const tIMPL_DialogData& aCopyDataSet )
246 	{
247 		sUserName				= aCopyDataSet.sUserName				;
248 		sPassword				= aCopyDataSet.sPassword				;
249 		seqServerList			= aCopyDataSet.seqServerList			;
250 		nActiveServer			= aCopyDataSet.nActiveServer			;
251 		sConnectionType			= aCopyDataSet.sConnectionType			;
252 		aLanguage				= aCopyDataSet.aLanguage				;
253 		nPortHttp				= aCopyDataSet.nPortHttp				;
254 		nPortHttps				= aCopyDataSet.nPortHttps				;
255         aParentWindow           = aCopyDataSet.aParentWindow            ;
256 		sSecurityProxy			= aCopyDataSet.sSecurityProxy           ;
257 		sUseProxy				= aCopyDataSet.sUseProxy				;
258 		sDialog					= aCopyDataSet.sDialog					;
259 		bProxyChanged			= aCopyDataSet.bProxyChanged            ;
260 		return *this;
261 	}
262 };
263 
264 /*-************************************************************************************************************//**
265 	@short		implements an "private inline" dialog class used by follow class LoginDialog to show the dialog
266 	@descr		This is a VCL- modal dialog and not threadsafe! We use it as private definition in the context of login dialog only!
267 
268 	@implements	-
269 
270 	@base		ModalDialog
271 *//*-*************************************************************************************************************/
272 
273 class cIMPL_Dialog	:	public ModalDialog
274 {
275 	//-------------------------------------------------------------------------------------------------------------
276 	//	public methods
277 	//-------------------------------------------------------------------------------------------------------------
278 
279 	public:
280 
281 		/*-****************************************************************************************************//**
282 			@short		default ctor
283 			@descr		This ctor initialize the dialog, load ressources but not set values on edits or check boxes!
284 						These is implemented by setValues() on the same class.
285 						You must give us a language identifier to describe which ressource should be used!
286 
287 			@seealso	method setValues()
288 
289             @param      "aLanguage" , identifier to describe ressource language
290             @param      "pParent"   , parent window handle for dialog! If is it NULL -> no parent exist ...
291 			@return		-
292 
293 			@onerror	-
294 		*//*-*****************************************************************************************************/
295 
296         cIMPL_Dialog( ::com::sun::star::lang::Locale aLocale, Window* pParent );
297 
298 		/*-****************************************************************************************************//**
299 			@short		default dtor
300 			@descr		This dtor deinitialize the dialog and free all used ressources.
301 						But you can't get the values of the dialog. Use getValues() to do this.
302 
303 			@seealso	method getValues()
304 
305 			@param		-
306 			@return		-
307 
308 			@onerror	-
309 		*//*-*****************************************************************************************************/
310 
311 		~cIMPL_Dialog();
312 
313 		/*-****************************************************************************************************//**
314 			@short		set new values on dialog to show
315 			@descr		Use this to initialize the dialg with new values for showing before execute.
316 
317 			@seealso	method getValues()
318 
319 			@param		"aDataSet"; struct of variables to set it on dialog controls
320 			@return		-
321 
322 			@onerror	-
323 		*//*-*****************************************************************************************************/
324 
325 		void setValues( const tIMPL_DialogData& aDataSet );
326 
327 		/*-****************************************************************************************************//**
328 			@short		get current values from dialog controls
329 			@descr		Use this if you will get all values of dialog after execute.
330 
331 			@seealso	method setValues()
332 
333 			@param		"aDataSet"; struct of variables filled by dialog
334 			@return		-
335 
336 			@onerror	-
337 		*//*-*****************************************************************************************************/
338 
339 		tIMPL_DialogData getValues();
340 
341 		/*-****************************************************************************************************/
342 		/* handler
343 		*/
344 
345 		DECL_LINK( ClickHdl, void* );
346 
347 	//-------------------------------------------------------------------------------------------------------------
348 	//	private methods
349 	//-------------------------------------------------------------------------------------------------------------
350 
351 	private:
352 		void			setCustomSettings();
353 
354 		void			showDialogExpanded();
355 		void			showDialogCollapsed();
356 
357 		/*-****************************************************************************************************//**
358 			@short		get a host and port from a concated string form <host>:<port>
359 
360 			@param		"aProxyHostPort" ; a string with the following format <host>:<port>
361 			@param		"aHost"			 ; a host string
362 			@param		"aPort"			 ; a port string
363 			@return		-
364 
365 			@onerror	-
366 		*//*-*****************************************************************************************************/
367 
368 		void			getProxyHostPort( const OUSTRING& aProxyHostPort, OUSTRING& aHost, OUSTRING& aPort );
369 
370 		/*-****************************************************************************************************//**
371 			@short		get a ressource for given id from right ressource file
372 			@descr		This dialog need his own ressource. We can't use the global ressource manager!
373 						We must use our own.
374 						You must give us the ressource language. If no right ressource could be found -
375 						any  existing one is used automatically!
376 
377 			@seealso	method setValues()
378 
379 			@param		"nId"		; id to convert it in right ressource id
380 			@param		"aLanguage"	; type of ressource language
381 			@return		-
382 
383 			@onerror	-
384 		*//*-*****************************************************************************************************/
385 
386 		static ResId impl_getResId(	sal_uInt16		nId			,
387 									::com::sun::star::lang::Locale	aLocale	);
388 
389 	//-------------------------------------------------------------------------------------------------------------
390 	//	private member
391 	//-------------------------------------------------------------------------------------------------------------
392 
393 	private:
394 
395 		FixedImage			m_imageHeader				;
396 		FixedText			m_textLoginText				;
397 		FixedText       	m_textUserName				;
398 		Edit            	m_editUserName				;
399 		FixedText       	m_textPassword				;
400 		Edit            	m_editPassword				;
401 		FixedLine			m_fixedLineServer			;
402 		FixedText       	m_textServer				;
403 		ComboBox        	m_comboServer				;
404 		FixedLine			m_fixedLineProxySettings	;
405 		RadioButton			m_radioNoProxy				;
406 		RadioButton			m_radioBrowserProxy			;
407 		RadioButton			m_radioCustomProxy			;
408 		FixedText			m_textSecurityProxy			;
409 		FixedText			m_textSecurityProxyHost		;
410 		Edit				m_editSecurityProxyHost		;
411 		FixedText			m_textSecurityProxyPort		;
412 		Edit				m_editSecurityProxyPort		;
413 		FixedLine			m_fixedLineButtons			;
414 		OKButton        	m_buttonOK					;
415 		CancelButton    	m_buttonCancel				;
416 		PushButton			m_buttonAdditionalSettings	;
417 		Size				m_expandedDialogSize		;
418 		Size				m_collapsedDialogSize		;
419 		Point				m_expOKButtonPos			;
420 		Point				m_expCancelButtonPos		;
421 		Point				m_expAdditionalButtonPos	;
422 		Point				m_colOKButtonPos			;
423 		Point				m_colCancelButtonPos		;
424 		Point				m_colAdditionalButtonPos	;
425 		OUSTRING			m_colButtonAddText			;
426 		OUSTRING			m_expButtonAddText			;
427 		tIMPL_DialogData	m_aDataSet					;
428 };
429 
430 /*-************************************************************************************************************//**
431 	@short
432 
433 	@descr		-
434 
435 	@implements	XInterface
436 				XTypeProvider
437 				XServiceInfo
438 				XDialog
439 
440     @base       ThreadHelpBase
441 				OWeakObject
442 *//*-*************************************************************************************************************/
443 
444 class LoginDialog	:	public XTYPEPROVIDER				,
445 						public XSERVICEINFO					,
446 						public XDIALOG						,
447                         public XFLUSHABLE                   ,
448                         private ThreadHelpBase              ,   // Order of baseclasses is necessary for right initialization!
449 						public OBROADCASTHELPER				,
450 						public OPROPERTYSETHELPER			,
451 						public OWEAKOBJECT
452 {
453 	//-------------------------------------------------------------------------------------------------------------
454 	//	public methods
455 	//-------------------------------------------------------------------------------------------------------------
456 
457 	public:
458 
459 		//---------------------------------------------------------------------------------------------------------
460 		//	constructor / destructor
461 		//---------------------------------------------------------------------------------------------------------
462 
463 		/*-****************************************************************************************************//**
464 			@short		-
465 			@descr		-
466 
467 			@seealso	-
468 
469 			@param		-
470 			@return		-
471 
472 			@onerror	-
473 		*//*-*****************************************************************************************************/
474 
475 	 	LoginDialog( const REFERENCE< XMULTISERVICEFACTORY >& sFactory );
476 
477 		/*-****************************************************************************************************//**
478 			@short		-
479 			@descr		-
480 
481 			@seealso	-
482 
483 			@param		-
484 			@return		-
485 
486 			@onerror	-
487 		*//*-*****************************************************************************************************/
488 
489 		virtual	~LoginDialog();
490 
491 		//---------------------------------------------------------------------------------------------------------
492 		//	XInterface, XTypeProvider, XServiceInfo
493 		//---------------------------------------------------------------------------------------------------------
494 
495 		DECLARE_XINTERFACE
496 		DECLARE_XTYPEPROVIDER
497 		DECLARE_XSERVICEINFO
498 
499         //---------------------------------------------------------------------------------------------------------
500 		//	XFlushable
501 		//---------------------------------------------------------------------------------------------------------
502 
503         /*-****************************************************************************************************//**
504 			@short		write changed values to configuration
505 			@descr		Normally the dialog returns with an OK or ERROR value. If OK occur - we flush data
506 						automaticly. But otherwise we do nothing. If user of this service wish to use property set
507 						only without any UI(!) - he must call "flush()" explicitly to write data!
508 
509 			@seealso	-
510 
511 			@param		-
512 			@return		-
513 
514 			@onerror	-
515 		*//*-*****************************************************************************************************/
516 
517     	virtual void SAL_CALL flush() throw( RUNTIMEEXCEPTION );
518     	virtual void SAL_CALL addFlushListener( const REFERENCE< XFLUSHLISTENER >& xListener ) throw( RUNTIMEEXCEPTION );
519     	virtual void SAL_CALL removeFlushListener( const REFERENCE< XFLUSHLISTENER >& xListener ) throw( RUNTIMEEXCEPTION );
520 
521 		//---------------------------------------------------------------------------------------------------------
522 		//	XDialog
523 		//---------------------------------------------------------------------------------------------------------
524 
525 		/*-****************************************************************************************************//**
526 			@short		set new title of dialog
527 			@descr		-
528 
529 			@seealso	-
530 
531 			@param		-
532 			@return		-
533 
534 			@onerror	-
535 		*//*-*****************************************************************************************************/
536 
537     	virtual void SAL_CALL setTitle( const OUSTRING& sTitle ) throw( RUNTIMEEXCEPTION );
538 
539 		/*-****************************************************************************************************//**
540 			@short		return the current title of this dialog
541 			@descr		-
542 
543 			@seealso	-
544 
545 			@param		-
546 			@return		-
547 
548 			@onerror	-
549 		*//*-*****************************************************************************************************/
550 
551     	virtual OUSTRING SAL_CALL getTitle() throw( RUNTIMEEXCEPTION );
552 
553 		/*-****************************************************************************************************//**
554 			@short		show the dialog and return user reaction
555 			@descr		If user close dialog with OK we return 1 else
556 						user has cancelled this dialog and we return 0.
557 						You can use this return value directly as boolean.
558 
559 			@seealso	-
560 
561 			@param		-
562 			@return		1; if closed with OK
563 			@return		0; if cancelled
564 
565 			@onerror	We return 0(sal_False).
566 		*//*-*****************************************************************************************************/
567 
568     	virtual sal_Int16 SAL_CALL execute() throw( RUNTIMEEXCEPTION );
569 
570 		/*-****************************************************************************************************//**
571 			@short		not implemented yet!
572 			@descr		-
573 
574 			@seealso	-
575 
576 			@param		-
577 			@return		-
578 
579 			@onerror	-
580 		*//*-*****************************************************************************************************/
581 
582     	virtual void SAL_CALL endExecute() throw( RUNTIMEEXCEPTION );
583 
584 	//-------------------------------------------------------------------------------------------------------------
585 	//	protected methods
586 	//-------------------------------------------------------------------------------------------------------------
587 
588 	protected:
589 
590 		//---------------------------------------------------------------------------
591 		//	OPropertySetHelper
592 		//---------------------------------------------------------------------------
593 
594 		/*-****************************************************************************************************//**
595 			@short		try to convert a property value
596 			@descr		This method is calling from helperclass "OPropertySetHelper".
597 						Don't use this directly!
598 						You must try to convert the value of given propertyhandle and
599 						return results of this operation. This will be use to ask vetoable
600 						listener. If no listener have a veto, we will change value really!
601 						( in method setFastPropertyValue_NoBroadcast(...) )
602 
603 			@seealso	class OPropertySetHelper
604 			@seealso	method setFastPropertyValue_NoBroadcast()
605 			@seealso	method impl_tryToChangeProperty()
606 
607 			@param		"aConvertedValue"	new converted value of property
608 			@param		"aOldValue"			old value of property
609 			@param		"nHandle"			handle of property
610 			@param		"aValue"			new value of property
611 			@return		sal_True if value will be changed, sal_FALSE otherway
612 
613 			@onerror	IllegalArgumentException, if you call this with an invalid argument
614 		*//*-*****************************************************************************************************/
615 
616 		virtual sal_Bool SAL_CALL convertFastPropertyValue(			ANY&		aConvertedValue	,
617 								  									ANY&		aOldValue		,
618 																	sal_Int32	nHandle			,
619 															const	ANY&		aValue			) throw( ILLEGALARGUMENTEXCEPTION );
620 
621 		/*-****************************************************************************************************//**
622 			@short		set value of a transient property
623 			@descr		This method is calling from helperclass "OPropertySetHelper".
624 						Don't use this directly!
625 						Handle and value are valid everyway! You must set the new value only.
626 						After this, baseclass send messages to all listener automatically.
627 
628 			@seealso	OPropertySetHelper
629 
630 			@param      "nHandle"	handle of property to change
631 			@param      "aValue"	new value of property
632 			@return		-
633 
634 			@onerror	An exception is thrown.
635 		*//*-*****************************************************************************************************/
636 
637 		virtual void SAL_CALL setFastPropertyValue_NoBroadcast(			sal_Int32	nHandle	,
638 							  									const	ANY&		aValue	) throw( EXCEPTION );
639 
640 		/*-****************************************************************************************************//**
641 			@short		get value of a transient property
642 			@descr		This method is calling from helperclass "OPropertySetHelper".
643 						Don't use this directly!
644 
645 			@seealso	OPropertySetHelper
646 
647 			@param      "nHandle"	handle of property to change
648 			@param      "aValue"	current value of property
649 			@return		-
650 
651 			@onerror	-
652 		*//*-*****************************************************************************************************/
653 
654 		virtual void SAL_CALL getFastPropertyValue(	ANY&		aValue	,
655 							  						sal_Int32	nHandle	) const;
656 
657 		/*-****************************************************************************************************//**
658 			@short      return structure and information about transient properties
659 			@descr		This method is calling from helperclass "OPropertySetHelper".
660 						Don't use this directly!
661 
662 			@seealso	OPropertySetHelper
663 
664 			@param		-
665 			@return		structure with property-informations
666 
667 			@onerror	-
668 		*//*-*****************************************************************************************************/
669 
670 		virtual IPROPERTYARRAYHELPER& SAL_CALL getInfoHelper();
671 
672 		/*-****************************************************************************************************//**
673 			@short		return propertysetinfo
674 			@descr		You can call this method to get information about transient properties
675 						of this object.
676 
677 			@seealso	OPropertySetHelper
678 			@seealso	XPropertySet
679 			@seealso	XMultiPropertySet
680 
681 			@param		-
682 			@return		reference to object with information [XPropertySetInfo]
683 
684 			@onerror	-
685 		*//*-*****************************************************************************************************/
686 
687 		virtual REFERENCE< XPROPERTYSETINFO > SAL_CALL getPropertySetInfo() throw (::com::sun::star::uno::RuntimeException);
688 
689 	//-------------------------------------------------------------------------------------------------------------
690 	//	private methods
691 	//-------------------------------------------------------------------------------------------------------------
692 
693 	private:
694 
695 		/*-****************************************************************************************************//**
696 			@short		return table of all supported properties
697 			@descr		We need this table to initialize our helper baseclass OPropertySetHelper
698 
699 			@seealso	-
700 
701 			@param		-
702 			@return		-
703 
704 			@onerror	-
705 		*//*-*****************************************************************************************************/
706 
707 		const SEQUENCE< PROPERTY > impl_getStaticPropertyDescriptor();
708 
709 		/*-****************************************************************************************************//**
710 			@short		helper method to check if a property will change his value
711 			@descr		Is necessary for vetoable listener mechanism of OPropertySethelper.
712 
713 			@seealso	-
714 
715 			@param		-
716 			@return		-
717 
718 			@onerror	-
719 		*//*-*****************************************************************************************************/
720 
721 		sal_Bool impl_tryToChangeProperty(	const	OUSTRING&				sProperty		,
722 											const	ANY&					aValue			,
723 													ANY&					aOldValue		,
724 													ANY&					aConvertedValue	) throw( ILLEGALARGUMENTEXCEPTION );
725 
726 		sal_Bool impl_tryToChangeProperty(	const	SEQUENCE< OUSTRING >&	seqProperty		,
727 											const	ANY&					aValue			,
728 													ANY&					aOldValue		,
729 													ANY&					aConvertedValue	) throw( ILLEGALARGUMENTEXCEPTION );
730 
731 		sal_Bool impl_tryToChangeProperty(	const	sal_Int32&				nProperty		,
732 											const	ANY&					aValue			,
733 													ANY&					aOldValue		,
734 													ANY&					aConvertedValue	) throw( ILLEGALARGUMENTEXCEPTION );
735 
736 		sal_Bool impl_tryToChangeProperty(	const	LOCALE&					aProperty		,
737 											const	ANY&					aValue			,
738 													ANY&					aOldValue		,
739 													ANY&					aConvertedValue	) throw( ILLEGALARGUMENTEXCEPTION );
740 
741         sal_Bool impl_tryToChangeProperty(  const   ANY&                    aProperty       ,
742 											const	ANY&					aValue			,
743 													ANY&					aOldValue		,
744 													ANY&					aConvertedValue	) throw( ILLEGALARGUMENTEXCEPTION );
745 
746 		/*-****************************************************************************************************//**
747 			@short		search and open profile
748 			@descr		This method search and open the ini file. It initialize some member too.
749 
750 			@seealso	-
751 
752 			@param		-
753 			@return		-
754 
755 			@onerror	-
756 		*//*-*****************************************************************************************************/
757 
758 		void impl_openProfile();
759 
760 		/*-****************************************************************************************************//**
761 			@short		close profile and free some member
762 			@descr		This method close current opened ini file and deinitialize some member too.
763 
764 			@seealso	-
765 
766 			@param		-
767 			@return		-
768 
769 			@onerror	-
770 		*//*-*****************************************************************************************************/
771 
772 		void impl_closeProfile();
773 
774 		/*-****************************************************************************************************//**
775 			@short		write profile and free some member
776 			@descr		This method writes current settings and deinitialize some member too.
777 
778 			@seealso	-
779 
780 			@param		-
781 			@return		-
782 
783 			@onerror	-
784 		*//*-*****************************************************************************************************/
785 		void impl_writeProfile();
786 
787 		/*-****************************************************************************************************//**
788 			@short		check current server history
789 			@descr		Our current server history implementation can handle 10 elements as maximum.
790 						If more then 10 elements exist; old ones will be deleted.
791 
792 			@seealso	-
793 
794 			@param		"seqHistory"; current history
795 			@return		Sequence< OUString >; checked and repaired history
796 
797 			@onerror	-
798 		*//*-*****************************************************************************************************/
799 
800 		void impl_addServerToHistory(			SEQUENCE< OUSTRING >&	seqHistory		,
801 												sal_Int32&				nActiveServer	,
802 										const	OUSTRING&				sServer			);
803 
804 		/*-****************************************************************************************************//**
805 			@short		helper methods to read/write  properties from/to ini file
806 			@descr		Using of Config-Class isn't easy every time :-(
807 						Thats the reason for these helper. State of operation isn't really important ..
808 						but we assert impossible cases or occurred errors!
809 
810 			@seealso	-
811 
812 			@param		-
813 			@return		-
814 
815 			@onerror	Assertions are shown.
816 		*//*-*****************************************************************************************************/
817 
818 		void					impl_writeUserName				(	const	OUSTRING&				sUserName		);
819 		void					impl_writeActiveServer			(			sal_Int32				nActiveServer	);
820 		void					impl_writeServerHistory			(	const	SEQUENCE< OUSTRING >&	lHistory		);
821 		void					impl_writeConnectionType		(	const	OUSTRING&				sConnectionType	);
822 		void					impl_writeLanguage				(	const	LOCALE&					aLanguage		);
823 		void					impl_writePortHttp				(			sal_Int32				nPort			);
824 		void					impl_writePortHttps				(			sal_Int32				nPort			);
825 		void					impl_writeSecurityProxy			(	const	OUSTRING&				sSecurityProxy	);
826 		void					impl_writeUseProxy				(	const	OUSTRING&				sUseProxy		);
827 		void					impl_writeDialog				(	const	OUSTRING&				sDialog			);
828 
829 		OUSTRING				impl_readUserName				(													);
830 		sal_Int32				impl_readActiveServer			(													);
831 		SEQUENCE< OUSTRING >	impl_readServerHistory			(													);
832 		OUSTRING				impl_readConnectionType			(													);
833 		LOCALE					impl_readLanguage				(													);
834 		sal_Int32				impl_readPortHttp				(													);
835 		sal_Int32				impl_readPortHttps				(													);
836 		OUSTRING				impl_readSecurityProxy			(													);
837 		OUSTRING				impl_readUseProxy				(													);
838 		OUSTRING				impl_readDialog					(													);
839 
840 	//-------------------------------------------------------------------------------------------------------------
841 	//	debug methods
842 	//	(should be private everyway!)
843 	//-------------------------------------------------------------------------------------------------------------
844 
845 		/*-****************************************************************************************************//**
846 			@short		debug-method to check incoming parameter of some other mehods of this class
847 			@descr		The following methods are used to check parameters for other methods
848 						of this class. The return value is used directly for an ASSERT(...).
849 
850 			@seealso	ASSERTs in implementation!
851 
852 			@param		references to checking variables
853 			@return		sal_False on invalid parameter<BR>
854 						sal_True  otherway
855 
856 			@onerror	-
857 		*//*-*****************************************************************************************************/
858 
859 	#ifdef ENABLE_ASSERTIONS
860 
861 	private:
862 
863 		sal_Bool impldbg_checkParameter_LoginDialog	(	const	REFERENCE< XMULTISERVICEFACTORY >&	xFactory	);
864 		sal_Bool impldbg_checkParameter_setTitle	(	const	OUSTRING&							sTitle		);
865 
866 	#endif	// #ifdef ENABLE_ASSERTIONS
867 
868 	//-------------------------------------------------------------------------------------------------------------
869 	//	variables
870 	//	(should be private everyway!)
871 	//-------------------------------------------------------------------------------------------------------------
872 
873 	private:
874 
875 		REFERENCE< XMULTISERVICEFACTORY >		m_xFactory			;	/// reference to factory, which has created this instance
876 		OUSTRING								m_sININame			;	/// full qualified path to profile UNC-notation
877 		Config*									m_pINIManager		;	/// manager for full access to ini file
878 		sal_Bool								m_bInExecuteMode	;	/// protection against setting of properties during showing of dialog
879 		cIMPL_Dialog*							m_pDialog			;	/// VCL dialog
880 		tIMPL_DialogData						m_aPropertySet		;
881 
882 };		//	class LoginDialog
883 
884 }		//	namespace framework
885 
886 #endif	//	#ifndef __FRAMEWORK_LOGINDIALOG_LOGINDIALOG_HXX_
887