ooo-build r12783 - trunk/patches/dev300



Author: jiaojh
Date: Wed Jun  4 07:21:15 2008
New Revision: 12783
URL: http://svn.gnome.org/viewvc/ooo-build?rev=12783&view=rev

Log:
replace miss file


Modified:
   trunk/patches/dev300/form-control-visibility.diff

Modified: trunk/patches/dev300/form-control-visibility.diff
==============================================================================
--- trunk/patches/dev300/form-control-visibility.diff	(original)
+++ trunk/patches/dev300/form-control-visibility.diff	Wed Jun  4 07:21:15 2008
@@ -1,3440 +1,67 @@
---- xmloff/source/forms/strings.hxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ xmloff/source/forms/strings.hxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,283 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: strings.hxx,v $
-+ * $Revision: 1.18 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _XMLOFF_FORMS_STRINGS_HXX_
-+#define _XMLOFF_FORMS_STRINGS_HXX_
-+
-+#include <sal/types.h>
-+#include <rtl/ustring.hxx>
-+
-+//.........................................................................
-+namespace xmloff
-+{
-+//.........................................................................
-+
-+	//============================================================
-+	//= a helper for static ascii pseudo-unicode strings
-+	//============================================================
-+	struct ConstAsciiString
-+	{
-+		const sal_Char*	ascii;
-+		sal_Int32		length;
-+
-+		inline const ::rtl::OUString* operator& () const;
-+		inline	operator const ::rtl::OUString& () const { return *(&(*this)); }
-+		inline	operator const sal_Char* () const { return ascii; }
-+
-+		inline ConstAsciiString(const sal_Char* _pAsciiZeroTerminated, const sal_Int32 _nLength);
-+		inline ~ConstAsciiString();
-+
-+	private:
-+		mutable ::rtl::OUString*	m_pString;
-+
-+	private:
-+		ConstAsciiString();	// never implemented
-+	};
-+
-+	//------------------------------------------------------------
-+	inline ConstAsciiString::ConstAsciiString(const sal_Char* _pAsciiZeroTerminated, const sal_Int32 _nLength)
-+		:ascii( _pAsciiZeroTerminated )
-+		,length( _nLength )
-+		,m_pString( NULL )
-+	{
-+	}
-+
-+	//------------------------------------------------------------
-+	inline ConstAsciiString::~ConstAsciiString()
-+	{
-+		if ( m_pString )
-+		{
-+			delete m_pString;
-+			m_pString = NULL;
-+		}
-+	}
-+
-+	//------------------------------------------------------------
-+	inline const ::rtl::OUString* ConstAsciiString::operator& () const
-+	{
-+		if ( !m_pString )
-+			m_pString = new ::rtl::OUString( ascii, length, RTL_TEXTENCODING_ASCII_US );
-+		return m_pString;
-+	}
-+
-+#ifndef XMLFORM_IMPLEMENT_STRINGS
-+	#define XMLFORM_CONSTASCII_STRING(ident, string) extern const ConstAsciiString ident
-+#else
-+	#define XMLFORM_CONSTASCII_STRING(ident, string) extern const ConstAsciiString ident(string, sizeof(string)-1)
-+#endif
-+
-+	//============================================================
-+	//= string constants
-+	//============================================================
-+
-+	// properties
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_CLASSID,			"ClassId" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ECHOCHAR,			"EchoChar" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_MULTILINE,			"MultiLine" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_NAME,				"Name" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_IMAGEURL,			"ImageURL" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_LABEL,				"Label" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TARGETFRAME,		"TargetFrame" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TARGETURL,			"TargetURL" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TITLE,				"Tag" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DROPDOWN,			"Dropdown" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_PRINTABLE,			"Printable" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_READONLY,			"ReadOnly" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_STATE,		"DefaultState" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TABSTOP,			"Tabstop" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_STATE,				"State" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ENABLED,			"Enabled" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ENABLEVISIBLE,		"EnableVisible" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_MAXTEXTLENGTH,		"MaxTextLen" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_LINECOUNT,			"LineCount" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TABINDEX,			"TabIndex" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_COMMAND,			"Command" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATASOURCENAME,		"DataSourceName" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_FILTER,				"Filter" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ORDER,				"Order" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ALLOWDELETES,		"AllowDeletes" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ALLOWINSERTS,		"AllowInserts" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ALLOWUPDATES,		"AllowUpdates" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_APPLYFILTER,		"ApplyFilter" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ESCAPEPROCESSING,	"EscapeProcessing" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_IGNORERESULT,		"IgnoreResult" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SUBMIT_ENCODING,	"SubmitEncoding" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SUBMIT_METHOD,		"SubmitMethod" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_COMMAND_TYPE,		"CommandType" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_NAVIGATION,			"NavigationBarMode" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_CYCLE,				"Cycle" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_BUTTONTYPE,			"ButtonType" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATAFIELD,			"DataField" );
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_BOUNDCOLUMN,		"BoundColumn");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_EMPTY_IS_NULL,		"ConvertEmptyToNull");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_LISTSOURCE,			"ListSource");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_LISTSOURCETYPE,		"ListSourceType");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ECHO_CHAR,			"EchoChar");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_STRICTFORMAT,		"StrictFormat");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_AUTOCOMPLETE,		"Autocomplete");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_MULTISELECTION,		"MultiSelection");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULTBUTTON,		"DefaultButton");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TRISTATE,			"TriState");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_CONTROLLABEL,		"LabelControl");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_STRING_ITEM_LIST,	"StringItemList");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_VALUE_SEQ,			"ValueItemList");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_SELECT_SEQ, "DefaultSelection");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SELECT_SEQ,			"SelectedItems");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATE_MIN,			"DateMin");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATE_MAX,			"DateMax");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TIME_MIN,			"TimeMin");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TIME_MAX,			"TimeMax");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_VALUE_MIN,			"ValueMin");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_VALUE_MAX,			"ValueMax");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_EFFECTIVE_MIN,		"EffectiveMin");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_EFFECTIVE_MAX,		"EffectiveMax");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_DATE,		"DefaultDate");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATE,				"Date");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_TIME,		"DefaultTime");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TIME,				"Time");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_VALUE,		"DefaultValue");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_VALUE,				"Value");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_HIDDEN_VALUE,		"HiddenValue");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_TEXT,		"DefaultText");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TEXT,				"Text");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_EFFECTIVE_VALUE,	"EffectiveValue");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_EFFECTIVE_DEFAULT,	"EffectiveDefault");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_REFVALUE,			"RefValue");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_URL,				"URL");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_FONT,				"FontDescriptor");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_BACKGROUNDCOLOR,	"BackgroundColor");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_MASTERFIELDS,		"MasterFields");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DETAILFIELDS,		"DetailFields");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_COLUMNSERVICENAME,	"ColumnServiceName");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_FORMATKEY,			"FormatKey");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_ALIGN,				"Align");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_BORDER,				"Border");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_AUTOCONTROLFOCUS,	"AutomaticControlFocus");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_APPLYDESIGNMODE,	"ApplyFormDesignMode");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_FORMATSSUPPLIER,	"FormatsSupplier");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_LOCALE,				"Locale");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_FORMATSTRING,		"FormatString");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_DATEFORMAT,			"DateFormat");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_TIMEFORMAT,			"TimeFormat");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_PERSISTENCE_MAXTEXTLENGTH,	"PersistenceMaxTextLength");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_SCROLLVALUE_MIN,    "ScrollValueMin");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SCROLLVALUE_MAX,    "ScrollValueMax");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SCROLLVALUE,        "ScrollValue");
-+	XMLFORM_CONSTASCII_STRING( PROPERTY_SCROLLVALUE_DEFAULT,"DefaultScrollValue");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_LINE_INCREMENT,     "LineIncrement");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_BLOCK_INCREMENT,    "BlockIncrement");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_REPEAT_DELAY,       "RepeatDelay");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_SPINVALUE,          "SpinValue");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_SPINVALUE_MIN,      "SpinValueMin");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_SPINVALUE_MAX,      "SpinValueMax");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_DEFAULT_SPINVALUE,  "DefaultSpinValue");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_SPIN_INCREMENT,     "SpinIncrement");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_ORIENTATION,        "Orientation");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_TOGGLE,             "Toggle");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_FOCUS_ON_CLICK,     "FocusOnClick");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_VISUAL_EFFECT,      "VisualEffect");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_IMAGE_POSITION,     "ImagePosition");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_IMAGE_ALIGN,        "ImageAlign");
-+
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_BOUND_CELL,		    "BoundCell");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_LIST_CELL_RANGE,    "CellRange");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_ADDRESS,		    "Address");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_FILE_REPRESENTATION,"PersistentRepresentation");
-+    XMLFORM_CONSTASCII_STRING( PROPERTY_RICH_TEXT,          "RichText");
-+
-+	// services
-+	XMLFORM_CONSTASCII_STRING( SERVICE_FORMSCOLLECTION,			"com.sun.star.form.Forms" );
-+	XMLFORM_CONSTASCII_STRING( SERVICE_NUMBERFORMATSSUPPLIER,	"com.sun.star.util.NumberFormatsSupplier" );
-+    XMLFORM_CONSTASCII_STRING( SERVICE_SPREADSHEET_DOCUMENT,    "com.sun.star.sheet.SpreadsheetDocument");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_CELLVALUEBINDING,	    "com.sun.star.table.CellValueBinding" );
-+	XMLFORM_CONSTASCII_STRING( SERVICE_LISTINDEXCELLBINDING,    "com.sun.star.table.ListPositionCellBinding" );
-+	XMLFORM_CONSTASCII_STRING( SERVICE_CELLRANGELISTSOURCE,	    "com.sun.star.table.CellRangeListSource" );
-+    XMLFORM_CONSTASCII_STRING( SERVICE_ADDRESS_CONVERSION,      "com.sun.star.table.CellAddressConversion");
-+    XMLFORM_CONSTASCII_STRING( SERVICE_RANGEADDRESS_CONVERSION, "com.sun.star.table.CellRangeAddressConversion");
-+
-+	// old service names (compatibility)
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_FORM,			"stardiv.one.form.component.Form");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_EDIT,			"stardiv.one.form.component.Edit");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_LISTBOX,		"stardiv.one.form.component.ListBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_COMBOBOX,		"stardiv.one.form.component.ComboBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_RADIOBUTTON,	"stardiv.one.form.component.RadioButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_GROUPBOX,		"stardiv.one.form.component.GroupBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_FIXEDTEXT,		"stardiv.one.form.component.FixedText");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_COMMANDBUTTON,	"stardiv.one.form.component.CommandButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_CHECKBOX,		"stardiv.one.form.component.CheckBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_GRID,			"stardiv.one.form.component.Grid");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_IMAGEBUTTON,	"stardiv.one.form.component.ImageButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_FILECONTROL,	"stardiv.one.form.component.FileControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_TIMEFIELD,		"stardiv.one.form.component.TimeField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_DATEFIELD,		"stardiv.one.form.component.DateField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_NUMERICFIELD,	"stardiv.one.form.component.NumericField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_CURRENCYFIELD,	"stardiv.one.form.component.CurrencyField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_PATTERNFIELD,	"stardiv.one.form.component.PatternField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_HIDDENCONTROL,	"stardiv.one.form.component.Hidden");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_IMAGECONTROL,	"stardiv.one.form.component.ImageControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PERSISTENT_COMPONENT_FORMATTEDFIELD,	"stardiv.one.form.component.FormattedField");
-+
-+	// new service names, the old ones are translated into this new ones
-+	XMLFORM_CONSTASCII_STRING( SERVICE_FORM, 			"com.sun.star.form.component.Form");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_EDIT, 			"com.sun.star.form.component.TextField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_LISTBOX, 		"com.sun.star.form.component.ListBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_COMBOBOX, 		"com.sun.star.form.component.ComboBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_RADIOBUTTON, 	"com.sun.star.form.component.RadioButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_GROUPBOX, 		"com.sun.star.form.component.GroupBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_FIXEDTEXT, 		"com.sun.star.form.component.FixedText");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_COMMANDBUTTON, 	"com.sun.star.form.component.CommandButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_CHECKBOX, 		"com.sun.star.form.component.CheckBox");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_GRID, 			"com.sun.star.form.component.GridControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_IMAGEBUTTON, 	"com.sun.star.form.component.ImageButton");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_FILECONTROL, 	"com.sun.star.form.component.FileControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_TIMEFIELD, 		"com.sun.star.form.component.TimeField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_DATEFIELD, 		"com.sun.star.form.component.DateField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_NUMERICFIELD, 	"com.sun.star.form.component.NumericField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_CURRENCYFIELD, 	"com.sun.star.form.component.CurrencyField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_PATTERNFIELD, 	"com.sun.star.form.component.PatternField");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_HIDDENCONTROL, 	"com.sun.star.form.component.HiddenControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_IMAGECONTROL, 	"com.sun.star.form.component.DatabaseImageControl");
-+	XMLFORM_CONSTASCII_STRING( SERVICE_FORMATTEDFIELD,	"com.sun.star.form.component.FormattedField" );
-+
-+	// various strings
-+	XMLFORM_CONSTASCII_STRING( EVENT_NAME_SEPARATOR, "::" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_TYPE, "EventType" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_LIBRARY, "Library" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_LOCALMACRONAME, "MacroName" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_SCRIPTURL, "Script" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_STAROFFICE, "StarOffice" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_STARBASIC, "StarBasic" );
-+	XMLFORM_CONSTASCII_STRING( EVENT_APPLICATION, "application" );
-+
-+//.........................................................................
-+}	// namespace xmloff
-+//.........................................................................
-+
-+#endif // _XMLOFF_FORMS_STRINGS_HXX_
---- xmloff/source/forms/formattributes.hxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ xmloff/source/forms/formattributes.hxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,365 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: formattributes.hxx,v $
-+ * $Revision: 1.14 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _XMLOFF_FORMATTRIBUTES_HXX_
-+#define _XMLOFF_FORMATTRIBUTES_HXX_
-+
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <sal/types.h>
-+#include <vos/refernce.hxx>
-+#include <comphelper/stl_types.hxx>
-+
-+class SvXMLExport;
-+struct SvXMLEnumMapEntry;
-+
-+//.........................................................................
-+namespace xmloff
-+{
-+//.........................................................................
-+
-+	// flags for common control attributes
-+	#define CCA_NAME					0x00000001
-+	#define CCA_SERVICE_NAME			0x00000002
-+	#define CCA_BUTTON_TYPE				0x00000004
-+	#define CCA_CONTROL_ID				0x00000008
-+	#define CCA_CURRENT_SELECTED		0x00000010
-+	#define CCA_CURRENT_VALUE			0x00000020
-+	#define CCA_DISABLED				0x00000040
-+	#define CCA_DROPDOWN				0x00000080
-+	#define CCA_FOR						0x00000100
-+	#define CCA_IMAGE_DATA				0x00000200
-+	#define CCA_LABEL					0x00000400
-+	#define CCA_MAX_LENGTH				0x00000800
-+	#define CCA_PRINTABLE				0x00001000
-+	#define CCA_READONLY				0x00002000
-+	#define CCA_SELECTED				0x00004000
-+	#define CCA_SIZE					0x00008000
-+	#define CCA_TAB_INDEX				0x00010000
-+	#define CCA_TARGET_FRAME			0x00020000
-+	#define CCA_TARGET_LOCATION			0x00040000
-+	#define CCA_TAB_STOP				0x00080000
-+	#define CCA_TITLE					0x00100000
-+	#define CCA_VALUE					0x00200000
-+    #define CCA_ORIENTATION             0x00400000
-+    #define CCA_VISUAL_EFFECT           0x00800000
-+    #define CCA_ENABLEVISIBLE                 0x01000000
-+
-+	// flags for database control atttributes
-+	#define DA_BOUND_COLUMN				0x00000001
-+	#define DA_CONVERT_EMPTY			0x00000002
-+	#define DA_DATA_FIELD				0x00000004
-+	#define DA_LIST_SOURCE				0x00000008
-+	#define DA_LIST_SOURCE_TYPE			0x00000010
-+
-+    // flags for binding related control attributes
-+    #define BA_LINKED_CELL              0x00000001
-+    #define BA_LIST_LINKING_TYPE        0x00000002
-+    #define BA_LIST_CELL_RANGE          0x00000004
-+    #define BA_XFORMS_BIND              0x00000008
-+    #define BA_XFORMS_LISTBIND          0x00000010
-+    #define BA_XFORMS_SUBMISSION        0x00000020
-+
-+	// flags for event attributes
-+	#define EA_CONTROL_EVENTS			0x00000001
-+	#define EA_ON_CHANGE				0x00000002
-+	#define EA_ON_CLICK					0x00000004
-+	#define EA_ON_DBLCLICK				0x00000008
-+	#define EA_ON_SELECT				0x00000010
-+
-+	/// attributes in the xml tag representing a form
-+	enum FormAttributes
-+	{
-+		faName,
-+		faServiceName,
-+		faAction,
-+		faEnctype,
-+		faMethod,
-+		faTargetFrame,
-+		faAllowDeletes,
-+		faAllowInserts,
-+		faAllowUpdates,
-+		faApplyFilter,
-+		faCommand,
-+		faCommandType,
-+		faEscapeProcessing,
-+		faDatasource,
-+		faConnectionResource,
-+		faDetailFiels,
-+		faFilter,
-+		faIgnoreResult,
-+		faMasterFields,
-+		faNavigationMode,
-+		faOrder,
-+		faTabbingCycle
-+	};
-+
-+	// any other attributes, which are special to some control types
-+	#define SCA_ECHO_CHAR				0x00000001
-+	#define SCA_MAX_VALUE				0x00000002
-+	#define SCA_MIN_VALUE				0x00000004
-+	#define SCA_VALIDATION				0x00000008
-+	#define SCA_MULTI_LINE				0x00000020
-+	#define SCA_AUTOMATIC_COMPLETION	0x00000080
-+	#define SCA_MULTIPLE				0x00000100
-+	#define SCA_DEFAULT_BUTTON			0x00000200
-+	#define SCA_CURRENT_STATE			0x00000400
-+	#define SCA_IS_TRISTATE				0x00000800
-+	#define SCA_STATE					0x00001000
-+	#define SCA_COLUMN_STYLE_NAME		0x00002000
-+	#define SCA_STEP_SIZE               0x00004000
-+	#define SCA_PAGE_STEP_SIZE          0x00008000
-+	#define SCA_REPEAT_DELAY            0x00010000
-+    #define SCA_TOGGLE                  0x00020000
-+    #define SCA_FOCUS_ON_CLICK          0x00040000
-+    #define SCA_IMAGE_POSITION          0x00080000
-+
-+	// attributes of the office:forms element
-+	enum OfficeFormsAttributes
-+	{
-+		ofaAutomaticFocus,
-+		ofaApplyDesignMode
-+	};
-+
-+	//=====================================================================
-+	//= OAttributeMetaData
-+	//=====================================================================
-+	/** allows the translation of attribute ids into strings.
-+
-+		<p>This class does not allow to connect xml attributes to property names or
-+		something like that, it only deals with the xml side</p>
-+	*/
-+	class OAttributeMetaData
-+	{
-+	public:
-+		/** calculates the xml attribute representation of a common control attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the CCA_* constants.
-+		*/
-+		static const sal_Char* getCommonControlAttributeName(sal_Int32 _nId);
-+
-+		/** calculates the xml namespace key to use for a common control attribute
-+			@param _nId
-+				the id of the attribute. Has to be one of the CCA_* constants.
-+		*/
-+		static sal_uInt16 getCommonControlAttributeNamespace(sal_Int32 _nId);
-+
-+		/** retrieves the name of an attribute of a form xml representation
-+			@param	_eAttrib
-+				enum value specifying the attribute
-+		*/
-+		static const sal_Char* getFormAttributeName(FormAttributes _eAttrib);
-+
-+		/** calculates the xml namespace key to use for a attribute of a form xml representation
-+			@param	_eAttrib
-+				enum value specifying the attribute
-+		*/
-+		static sal_uInt16 getFormAttributeNamespace(FormAttributes _eAttrib);
-+
-+		/** calculates the xml attribute representation of a database attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the DA_* constants.
-+		*/
-+		static const sal_Char* getDatabaseAttributeName(sal_Int32 _nId);
-+
-+		/** calculates the xml namespace key to use for a database attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the DA_* constants.
-+		*/
-+		static sal_uInt16 getDatabaseAttributeNamespace(sal_Int32 _nId);
-+
-+		/** calculates the xml attribute representation of a special attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the SCA_* constants.
-+		*/
-+		static const sal_Char* getSpecialAttributeName(sal_Int32 _nId);
-+
-+		/** calculates the xml attribute representation of a binding attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the BA_* constants.
-+		*/
-+		static const sal_Char* getBindingAttributeName(sal_Int32 _nId);
-+
-+        /** calculates the xml namespace key to use for a binding attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the BA_* constants.
-+		*/
-+		static sal_uInt16 getBindingAttributeNamespace(sal_Int32 _nId);
-+
-+        /** calculates the xml namespace key to use for a special attribute.
-+			@param _nId
-+				the id of the attribute. Has to be one of the SCA_* constants.
-+		*/
-+		static sal_uInt16 getSpecialAttributeNamespace(sal_Int32 _nId);
-+
-+		/** calculates the xml attribute representation of a attribute of the office:forms element
-+			@param _nId
-+				the id of the attribute
-+		*/
-+		static const sal_Char* getOfficeFormsAttributeName(OfficeFormsAttributes _eAttrib);
-+
-+		/** calculates the xml namedspace key of a attribute of the office:forms element
-+			@param _nId
-+				the id of the attribute
-+		*/
-+		static sal_uInt16 getOfficeFormsAttributeNamespace(OfficeFormsAttributes _eAttrib);
-+	};
-+
-+	//=====================================================================
-+	//= OAttribute2Property
-+	//=====================================================================
-+	/** some kind of opposite to the OAttributeMetaData class. Able to translate
-+		attributes into property names/types
-+
-+		<p>The construction of this class is rather expensive (or at least it's initialization from outside),
-+		so it should be shared</p>
-+	*/
-+	class OAttribute2Property
-+	{
-+	public:
-+		// TODO: maybe the following struct should be used for exports, too. In this case we would not need to
-+		// store it's instances in a map, but in a vector for faster access.
-+		struct AttributeAssignment
-+		{
-+			::rtl::OUString					sAttributeName;			// the attribute name
-+			::rtl::OUString					sPropertyName;			// the property name
-+			::com::sun::star::uno::Type		aPropertyType;			// the property type
-+			::rtl::OUString					sAttributeDefault;		// the default if the attribute is not present
-+
-+			// entries which are special to some value types
-+			const SvXMLEnumMapEntry*		pEnumMap;				// the enum map, if appliable
-+			sal_Bool						bInverseSemantics;		// for booleanss: attribute and property value have the same or an inverse semantics?
-+
-+			AttributeAssignment() : pEnumMap(NULL), bInverseSemantics(sal_False) { }
-+		};
-+
-+	protected:
-+		DECLARE_STL_USTRINGACCESS_MAP( AttributeAssignment, AttributeAssignments );
-+		AttributeAssignments		m_aKnownProperties;
-+
-+	public:
-+		OAttribute2Property();
-+		virtual ~OAttribute2Property();
-+
-+		/** return the AttributeAssignment which corresponds to the given attribute
-+
-+			@param _rAttribName
-+				the name of the attrribute
-+			@return
-+				a pointer to the <type>AttributeAssignment</type> structure as requested, NULL if the attribute
-+				does not represent a property.
-+		*/
-+		const AttributeAssignment* getAttributeTranslation(
-+			const ::rtl::OUString& _rAttribName);
-+
-+		/** add a attribute assignment referring to a string property to the map
-+			@param _pAttributeName
-+				the name of the attrribute
-+			@param _rPropertyName
-+				the name of the property assigned to the attribute
-+			@param _pAttributeDefault
-+				the default value for the attribute, if any. May be NULL, in this case the default is assumed to be
-+				an empty string.
-+		*/
-+		void	addStringProperty(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_Char* _pAttributeDefault = NULL);
-+
-+		/** add a attribute assignment referring to a boolean property to the map
-+
-+			@param _pAttributeName
-+				the name of the attrribute
-+			@param _rPropertyName
-+				the name of the property assigned to the attribute
-+			@param _bAttributeDefault
-+				the default value for the attribute.
-+			@param _bInverseSemantics
-+				if <TRUE/>, a attribute value of <TRUE/> means a property value of <FALSE/> and vice verse.<br/>
-+				if <FALSE/>, the attribute value is used as property value directly
-+		*/
-+		void	addBooleanProperty(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_Bool _bAttributeDefault, const sal_Bool _bInverseSemantics = sal_False);
-+
-+		/** add a attribute assignment referring to an int16 property to the map
-+
-+			@param _pAttributeName
-+				the name of the attrribute
-+			@param _rPropertyName
-+				the name of the property assigned to the attribute
-+			@param _nAttributeDefault
-+				the default value for the attribute.
-+		*/
-+		void	addInt16Property(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_Int16 _nAttributeDefault);
-+
-+		/** add a attribute assignment referring to an int32 property to the map
-+
-+			@param _pAttributeName
-+				the name of the attrribute
-+			@param _rPropertyName
-+				the name of the property assigned to the attribute
-+			@param _nAttributeDefault
-+				the default value for the attribute.
-+		*/
-+		void	addInt32Property(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_Int32 _nAttributeDefault );
-+
-+		/** add a attribute assignment referring to an enum property to the map
-+
-+			@param _pAttributeName
-+				the name of the attrribute
-+			@param _rPropertyName
-+				the name of the property assigned to the attribute
-+			@param _nAttributeDefault
-+				the default value for the attribute, as (32bit) integer
-+			@param _pValueMap
-+				the map to translate strings into enum values
-+			@param _pType
-+				the type of the property. May be NULL, in this case 32bit integer is assumed.
-+		*/
-+		void	addEnumProperty(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_uInt16 _nAttributeDefault, const SvXMLEnumMapEntry* _pValueMap,
-+			const ::com::sun::star::uno::Type* _pType = NULL);
-+
-+	protected:
-+		/// some common code for the various add*Property methods
-+		AttributeAssignment& implAdd(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const ::com::sun::star::uno::Type& _rType, const ::rtl::OUString& _rDefaultString);
-+	};
-+//.........................................................................
-+}	// namespace xmloff
-+//.........................................................................
-+
-+#endif // _XMLOFF_FORMATTRIBUTES_HXX_
-+
---- xmloff/source/forms/formattributes.cxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ xmloff/source/forms/formattributes.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,343 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: formattributes.cxx,v $
-+ * $Revision: 1.21 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_xmloff.hxx"
-+#include "formattributes.hxx"
-+#include "xmlnmspe.hxx"
-+#include <xmloff/xmluconv.hxx>
-+#include <rtl/ustrbuf.hxx>
-+
-+//.........................................................................
-+namespace xmloff
-+{
-+//.........................................................................
-+
-+	using namespace ::com::sun::star::uno;
-+	using namespace ::com::sun::star::lang;
-+	using namespace ::com::sun::star::beans;
-+
-+
-+	//=====================================================================
-+	//= OAttributeMetaData
-+	//=====================================================================
-+	//---------------------------------------------------------------------
-+	const sal_Char* OAttributeMetaData::getCommonControlAttributeName(sal_Int32 _nId)
-+	{
-+		switch (_nId)
-+		{
-+			case CCA_NAME: 				return "name";
-+			case CCA_SERVICE_NAME: 		return "control-implementation";
-+			case CCA_BUTTON_TYPE: 		return "button-type";
-+			case CCA_CONTROL_ID: 		return "id";
-+			case CCA_CURRENT_SELECTED: 	return "current-selected";
-+			case CCA_CURRENT_VALUE: 	return "current-value";
-+			case CCA_DISABLED: 			return "disabled";
-+			case CCA_ENABLEVISIBLE: 	return "enablevisible";
-+			case CCA_DROPDOWN: 			return "dropdown";
-+			case CCA_FOR: 				return "for";
-+			case CCA_IMAGE_DATA: 		return "image-data";
-+			case CCA_LABEL: 			return "label";
-+			case CCA_MAX_LENGTH: 		return "max-length";
-+			case CCA_PRINTABLE: 		return "printable";
-+			case CCA_READONLY: 			return "readonly";
-+			case CCA_SELECTED: 			return "selected";
-+			case CCA_SIZE: 				return "size";
-+			case CCA_TAB_INDEX: 		return "tab-index";
-+			case CCA_TARGET_FRAME: 		return "target-frame";
-+			case CCA_TARGET_LOCATION: 	return "href";		// the only special thing here: TargetLocation is represented by an xlink:href attribute
-+			case CCA_TAB_STOP: 			return "tab-stop";
-+			case CCA_TITLE: 			return "title";
-+			case CCA_VALUE: 			return "value";
-+            case CCA_ORIENTATION:       return "orientation";
-+            case CCA_VISUAL_EFFECT:     return "visual-effect";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getCommonControlAttributeName: invalid id (maybe you or-ed two flags?)!");
-+		}
-+		return "";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getCommonControlAttributeNamespace(sal_Int32 _nId)
-+	{
-+		if (CCA_TARGET_LOCATION == _nId)
-+			return XML_NAMESPACE_XLINK;
-+
-+		if (CCA_TARGET_FRAME == _nId)
-+			return XML_NAMESPACE_OFFICE;
-+
-+		return XML_NAMESPACE_FORM;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OAttributeMetaData::getFormAttributeName(FormAttributes _eAttrib)
-+	{
-+		switch (_eAttrib)
-+		{
-+			case faName: 				return "name";
-+			case faServiceName: 		return "service-name";
-+			case faAction: 				return "href";		// the only special thing here: Action is represented by an xlink:href attribute
-+			case faEnctype: 			return "enctype";
-+			case faMethod: 				return "method";
-+			case faTargetFrame: 		return "target-frame";
-+			case faAllowDeletes:		return "allow-deletes";
-+			case faAllowInserts:		return "allow-inserts";
-+			case faAllowUpdates:		return "allow-updates";
-+			case faApplyFilter: 		return "apply-filter";
-+			case faCommand: 			return "command";
-+			case faCommandType: 		return "command-type";
-+			case faEscapeProcessing:	return "escape-processing";
-+			case faDatasource: 			return "datasource";
-+			case faConnectionResource: 	return "connection-resource";
-+			case faDetailFiels: 		return "detail-fields";
-+			case faFilter: 				return "filter";
-+			case faIgnoreResult: 		return "ignore-result";
-+			case faMasterFields: 		return "master-fields";
-+			case faNavigationMode:		return "navigation-mode";
-+			case faOrder: 				return "order";
-+			case faTabbingCycle: 		return "tab-cycle";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getFormAttributeName: invalid id!");
-+		}
-+		return "";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getFormAttributeNamespace(FormAttributes _eAttrib)
-+	{
-+		if (faAction == _eAttrib)
-+			return XML_NAMESPACE_XLINK;
-+
-+		if (faTargetFrame == _eAttrib)
-+			return XML_NAMESPACE_OFFICE;
-+
-+		return XML_NAMESPACE_FORM;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OAttributeMetaData::getDatabaseAttributeName(sal_Int32 _nId)
-+	{
-+		switch (_nId)
-+		{
-+			case DA_BOUND_COLUMN:		return "bound-column";
-+			case DA_CONVERT_EMPTY:		return "convert-empty-to-null";
-+			case DA_DATA_FIELD:			return "data-field";
-+			case DA_LIST_SOURCE:		return "list-source";
-+			case DA_LIST_SOURCE_TYPE:	return "list-source-type";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getDatabaseAttributeName: invalid id (maybe you or-ed two flags?)!");
-+		}
-+		return "";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getDatabaseAttributeNamespace(sal_Int32 /*_nId*/)
-+	{
-+		// nothing special here
-+		return XML_NAMESPACE_FORM;
-+	}
-+
-+	//---------------------------------------------------------------------
-+    const sal_Char* OAttributeMetaData::getBindingAttributeName(sal_Int32 _nId)
-+    {
-+		switch (_nId)
-+		{
-+			case BA_LINKED_CELL:       return "linked-cell";
-+            case BA_LIST_LINKING_TYPE: return "list-linkage-type";
-+			case BA_LIST_CELL_RANGE:   return "source-cell-range";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getBindingAttributeName: invalid id (maybe you or-ed two flags?)!");
-+		}
-+		return "";
-+    }
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getBindingAttributeNamespace(sal_Int32)
-+    {
-+		// nothing special here
-+		return XML_NAMESPACE_FORM;
-+    }
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OAttributeMetaData::getSpecialAttributeName(sal_Int32 _nId)
-+	{
-+		switch (_nId)
-+		{
-+			case SCA_ECHO_CHAR: 			return "echo-char";
-+			case SCA_MAX_VALUE:				return "max-value";
-+			case SCA_MIN_VALUE:				return "min-value";
-+			case SCA_VALIDATION:			return "validation";
-+			case SCA_MULTI_LINE:			return "multi-line";
-+			case SCA_AUTOMATIC_COMPLETION:	return "auto-complete";
-+			case SCA_MULTIPLE: 				return "multiple";
-+			case SCA_DEFAULT_BUTTON: 		return "default-button";
-+			case SCA_CURRENT_STATE: 		return "current-state";
-+			case SCA_IS_TRISTATE: 			return "is-tristate";
-+			case SCA_STATE: 				return "state";
-+			case SCA_COLUMN_STYLE_NAME:		return "text-style-name";
-+			case SCA_STEP_SIZE:		        return "step-size";
-+			case SCA_PAGE_STEP_SIZE:		return "page-step-size";
-+			case SCA_REPEAT_DELAY:		    return "delay-for-repeat";
-+            case SCA_TOGGLE:                return "toggle";
-+            case SCA_FOCUS_ON_CLICK:        return "focus-on-click";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getSpecialAttributeName: invalid id (maybe you or-ed two flags?)!");
-+		}
-+		return "";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getSpecialAttributeNamespace(sal_Int32 /*_nId*/)
-+	{
-+		// nothing special here
-+		return XML_NAMESPACE_FORM;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OAttributeMetaData::getOfficeFormsAttributeName(OfficeFormsAttributes _eAttrib)
-+	{
-+		switch (_eAttrib)
-+		{
-+			case ofaAutomaticFocus:		return "automatic-focus";
-+			case ofaApplyDesignMode:	return "apply-design-mode";
-+			default:
-+				OSL_ENSURE(sal_False, "OAttributeMetaData::getOfficeFormsAttributeName: invalid id!");
-+		}
-+		return "";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	sal_uInt16 OAttributeMetaData::getOfficeFormsAttributeNamespace(OfficeFormsAttributes /* _eAttrib */)
-+	{
-+		// nothing special here
-+		return XML_NAMESPACE_FORM;
-+	}
-+
-+	//=====================================================================
-+	//= OAttribute2Property
-+	//=====================================================================
-+	//---------------------------------------------------------------------
-+	OAttribute2Property::OAttribute2Property()
-+	{
-+	}
-+
-+	//---------------------------------------------------------------------
-+	OAttribute2Property::~OAttribute2Property()
-+	{
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const OAttribute2Property::AttributeAssignment* OAttribute2Property::getAttributeTranslation(
-+			const ::rtl::OUString& _rAttribName)
-+	{
-+		ConstAttributeAssignmentsIterator aPos = m_aKnownProperties.find(_rAttribName);
-+		if (m_aKnownProperties.end() != aPos)
-+			return &aPos->second;
-+		return NULL;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OAttribute2Property::addStringProperty(
-+		const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+		const sal_Char* _pAttributeDefault)
-+	{
-+		implAdd(_pAttributeName, _rPropertyName, ::getCppuType( static_cast< ::rtl::OUString* >(NULL) ),
-+			_pAttributeDefault ? ::rtl::OUString::createFromAscii(_pAttributeDefault) : ::rtl::OUString());
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OAttribute2Property::addBooleanProperty(
-+		const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+		const sal_Bool _bAttributeDefault, const sal_Bool _bInverseSemantics)
-+	{
-+		::rtl::OUStringBuffer aDefault;
-+		SvXMLUnitConverter::convertBool(aDefault, _bAttributeDefault);
-+		AttributeAssignment& aAssignment = implAdd(_pAttributeName, _rPropertyName, ::getBooleanCppuType(), aDefault.makeStringAndClear());
-+		aAssignment.bInverseSemantics = _bInverseSemantics;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OAttribute2Property::addInt16Property(
-+		const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+		const sal_Int16 _nAttributeDefault)
-+	{
-+		::rtl::OUStringBuffer aDefault;
-+		SvXMLUnitConverter::convertNumber(aDefault, (sal_Int32)_nAttributeDefault);
-+		implAdd(_pAttributeName, _rPropertyName, ::getCppuType( static_cast< sal_Int16* >(NULL) ), aDefault.makeStringAndClear());
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OAttribute2Property::addInt32Property(
-+		const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+		const sal_Int32 _nAttributeDefault)
-+	{
-+		::rtl::OUStringBuffer aDefault;
-+		SvXMLUnitConverter::convertNumber( aDefault, _nAttributeDefault );
-+		implAdd( _pAttributeName, _rPropertyName, ::getCppuType( static_cast< sal_Int32* >(NULL) ), aDefault.makeStringAndClear() );
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OAttribute2Property::addEnumProperty(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const sal_uInt16 _nAttributeDefault, const SvXMLEnumMapEntry* _pValueMap,
-+			const ::com::sun::star::uno::Type* _pType)
-+	{
-+		::rtl::OUStringBuffer aDefault;
-+		SvXMLUnitConverter::convertEnum(aDefault, _nAttributeDefault, _pValueMap);
-+		AttributeAssignment& aAssignment = implAdd(_pAttributeName, _rPropertyName,
-+			_pType ? *_pType : ::getCppuType( static_cast< sal_Int32* >(NULL) ),
-+				// this assumes that the setPropertyValue for enums can handle int32's ....
-+			aDefault.makeStringAndClear());
-+		aAssignment.pEnumMap = _pValueMap;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	OAttribute2Property::AttributeAssignment& OAttribute2Property::implAdd(
-+			const sal_Char* _pAttributeName, const ::rtl::OUString& _rPropertyName,
-+			const ::com::sun::star::uno::Type& _rType, const ::rtl::OUString& /*_rDefaultString*/)
-+	{
-+		OSL_ENSURE(m_aKnownProperties.end() == m_aKnownProperties.find(::rtl::OUString::createFromAscii(_pAttributeName)),
-+			"OAttribute2Property::implAdd: already have this attribute!");
-+
-+		::rtl::OUString sAttributeName = ::rtl::OUString::createFromAscii(_pAttributeName);
-+
-+		AttributeAssignment aAssignment;
-+		aAssignment.sAttributeName = sAttributeName;
-+		aAssignment.sPropertyName = _rPropertyName;
-+		aAssignment.aPropertyType = _rType;
-+
-+		// redundance, the accessor is stored in aAssignment.sAttributeName, too
-+		return m_aKnownProperties[sAttributeName] = aAssignment;
-+	}
-+
-+//.........................................................................
-+}	// namespace xmloff
-+//.........................................................................
-+
---- xmloff/source/forms/elementexport.cxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ xmloff/source/forms/elementexport.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,2155 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: elementexport.cxx,v $
-+ * $Revision: 1.48 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_xmloff.hxx"
-+
-+#include <stdio.h>
-+#include "elementexport.hxx"
-+#include "strings.hxx"
-+#include <xmloff/xmlexp.hxx>
-+#include <xmloff/nmspmap.hxx>
-+#include "xmlnmspe.hxx"
-+#include <xmloff/xmluconv.hxx>
-+#include <xmloff/xmltoken.hxx>
-+#include <tools/time.hxx>
-+#include <tools/diagnose_ex.h>
-+#include <comphelper/extract.hxx>
-+#include "eventexport.hxx"
-+#include "formenums.hxx"
-+#include <vcl/wintypes.hxx>		// for check states
-+#include <xmloff/XMLEventExport.hxx>
-+#include "formcellbinding.hxx"
-+
-+#include <algorithm>
-+
-+/** === begin UNO includes === **/
-+#include <com/sun/star/text/XText.hpp>
-+#include <com/sun/star/lang/XServiceInfo.hpp>
-+#include <com/sun/star/io/XPersistObject.hpp>
-+#include <com/sun/star/form/FormComponentType.hpp>
-+#include <com/sun/star/beans/PropertyAttribute.hpp>
-+#include <com/sun/star/form/FormSubmitEncoding.hpp>
-+#include <com/sun/star/form/FormSubmitMethod.hpp>
-+#include <com/sun/star/sdb/CommandType.hpp>
-+#include <com/sun/star/form/NavigationBarMode.hpp>
-+#include <com/sun/star/form/TabulatorCycle.hpp>
-+#include <com/sun/star/form/FormButtonType.hpp>
-+#include <com/sun/star/awt/ScrollBarOrientation.hpp>
-+#include <com/sun/star/awt/VisualEffect.hpp>
-+#include <com/sun/star/form/ListSourceType.hpp>
-+#include <com/sun/star/awt/ImagePosition.hpp>
-+/** === end UNO includes === **/
-+#include <vcl/wintypes.hxx>		// for check states
-+#include <xmloff/txtprmap.hxx>
-+#include "formcellbinding.hxx"
-+#include "xformsexport.hxx"
-+#include <com/sun/star/form/binding/XBindableValue.hpp>
-+#include <com/sun/star/form/binding/XListEntrySink.hpp>
-+#include <tools/urlobj.hxx>
-+#include <algorithm>
-+
-+
-+//.........................................................................
-+namespace xmloff
-+{
-+//.........................................................................
-+
-+    using namespace ::xmloff::token;
-+	using namespace ::com::sun::star::uno;
-+	using namespace ::com::sun::star::sdb;
-+	using namespace ::com::sun::star::awt;
-+	using namespace ::com::sun::star::form;
-+	using namespace ::com::sun::star::lang;
-+	using namespace ::com::sun::star::lang;
-+	using namespace ::com::sun::star::beans;
-+	using namespace ::com::sun::star::container;
-+	using namespace ::com::sun::star::script;
-+	using namespace ::com::sun::star::io;
-+	using namespace ::com::sun::star::table;
-+	using namespace ::com::sun::star::text;
-+    using namespace ::com::sun::star::form::binding;
-+
-+	//=====================================================================
-+	//= OElementExport
-+	//=====================================================================
-+	OElementExport::OElementExport(IFormsExportContext& _rContext, const Reference< XPropertySet >& _rxProps,
-+		const Sequence< ScriptEventDescriptor >& _rEvents)
-+		:OPropertyExport(_rContext, _rxProps)
-+		,m_aEvents(_rEvents)
-+		,m_pXMLElement(NULL)
-+	{
-+	}
-+
-+	//---------------------------------------------------------------------
-+	OElementExport::~OElementExport()
-+	{
-+		implEndElement();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::doExport()
-+	{
-+		// collect some general information about the element
-+		examine();
-+
-+		// first add the attributes necessary for the element
-+		m_rContext.getGlobalContext().ClearAttrList();
-+
-+		// add the attributes
-+		exportAttributes();
-+
-+		// start the XML element
-+		implStartElement(getXMLElementName());
-+
-+		// the sub elements (mostly control type dependent)
-+		exportSubTags();
-+
-+		implEndElement();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::examine()
-+	{
-+		// nothing to do here
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::exportAttributes()
-+	{
-+		// nothing to do here
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::exportSubTags()
-+	{
-+		// the properties which where not exported 'til now
-+		exportRemainingProperties();
-+
-+		// the script:events sub tags
-+		exportEvents();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::implStartElement(const sal_Char* _pName)
-+	{
-+		m_pXMLElement = new SvXMLElementExport(m_rContext.getGlobalContext(), XML_NAMESPACE_FORM, _pName, sal_True, sal_True);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::implEndElement()
-+	{
-+		delete m_pXMLElement;
-+		m_pXMLElement = NULL;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::exportServiceNameAttribute()
-+	{
-+		Reference< XPersistObject > xPersistence(m_xProps, UNO_QUERY);
-+		if (!xPersistence.is())
-+		{
-+			OSL_ENSURE(sal_False, "OElementExport::exportServiceNameAttribute: no XPersistObject!");
-+			return;
-+		}
-+
-+		::rtl::OUString sServiceName = xPersistence->getServiceName();
-+		// we don't want to write the old service name directly: it's a name used for compatibility reasons, but
-+		// as we start some kind of new file format here (with this xml export), we don't care about
-+		// compatibility ...
-+		// So we translate the old persistence service name into new ones, if possible
-+
-+		::rtl::OUString sToWriteServiceName = sServiceName;
-+#define CHECK_N_TRANSLATE( name )	\
-+		else if (0 == sServiceName.compareToAscii(SERVICE_PERSISTENT_COMPONENT_##name))	\
-+			sToWriteServiceName = SERVICE_##name
-+
-+		if (sal_False)
-+			;
-+		CHECK_N_TRANSLATE( FORM );
-+		CHECK_N_TRANSLATE( FORM );
-+		CHECK_N_TRANSLATE( LISTBOX );
-+		CHECK_N_TRANSLATE( COMBOBOX );
-+		CHECK_N_TRANSLATE( RADIOBUTTON );
-+		CHECK_N_TRANSLATE( GROUPBOX );
-+		CHECK_N_TRANSLATE( FIXEDTEXT );
-+		CHECK_N_TRANSLATE( COMMANDBUTTON );
-+		CHECK_N_TRANSLATE( CHECKBOX );
-+		CHECK_N_TRANSLATE( GRID );
-+		CHECK_N_TRANSLATE( IMAGEBUTTON );
-+		CHECK_N_TRANSLATE( FILECONTROL );
-+		CHECK_N_TRANSLATE( TIMEFIELD );
-+		CHECK_N_TRANSLATE( DATEFIELD );
-+		CHECK_N_TRANSLATE( NUMERICFIELD );
-+		CHECK_N_TRANSLATE( CURRENCYFIELD );
-+		CHECK_N_TRANSLATE( PATTERNFIELD );
-+		CHECK_N_TRANSLATE( HIDDENCONTROL );
-+		CHECK_N_TRANSLATE( IMAGECONTROL );
-+		CHECK_N_TRANSLATE( FORMATTEDFIELD );
-+		else if (0 == sServiceName.compareToAscii(SERVICE_PERSISTENT_COMPONENT_EDIT))
-+		{	// special handling for the edit field: we have two controls using this as persistence service name
-+			sToWriteServiceName = SERVICE_EDIT;
-+			Reference< XServiceInfo > xSI(m_xProps, UNO_QUERY);
-+			if (xSI.is() && xSI->supportsService(SERVICE_FORMATTEDFIELD))
-+				sToWriteServiceName = SERVICE_FORMATTEDFIELD;
-+		}
-+#if OSL_DEBUG_LEVEL > 0
-+		Reference< XServiceInfo > xSI(m_xProps, UNO_QUERY);
-+		OSL_ENSURE(xSI.is() && xSI->supportsService(sToWriteServiceName),
-+			"OElementExport::exportServiceNameAttribute: wrong service name translation!");
-+
-+#endif
-+		sToWriteServiceName =
-+			m_rContext.getGlobalContext().GetNamespaceMap().GetQNameByKey(
-+				XML_NAMESPACE_OOO, sToWriteServiceName );
-+
-+		// now write this
-+		AddAttribute(
-+			OAttributeMetaData::getCommonControlAttributeNamespace(CCA_SERVICE_NAME),
-+			OAttributeMetaData::getCommonControlAttributeName(CCA_SERVICE_NAME),
-+			sToWriteServiceName);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OElementExport::exportEvents()
-+	{
-+		if (!m_aEvents.getLength())
-+			// nothing to do
-+			return;
-+
-+		Reference< XNameReplace > xWrapper = new OEventDescriptorMapper(m_aEvents);
-+		m_rContext.getGlobalContext().GetEventExport().Export(xWrapper);
-+	}
-+
-+	//=====================================================================
-+	//= OControlExport
-+	//=====================================================================
-+	//---------------------------------------------------------------------
-+	OControlExport::OControlExport(IFormsExportContext& _rContext,  const Reference< XPropertySet >& _rxControl,
-+		const ::rtl::OUString& _rControlId, const ::rtl::OUString& _rReferringControls,
-+		const Sequence< ScriptEventDescriptor >& _rEvents)
-+		:OElementExport(_rContext, _rxControl, _rEvents)
-+		,m_sControlId(_rControlId)
-+		,m_sReferringControls(_rReferringControls)
-+        ,m_nClassId(FormComponentType::CONTROL)
-+        ,m_eType( UNKNOWN )
-+		,m_nIncludeCommon(0)
-+		,m_nIncludeDatabase(0)
-+		,m_nIncludeSpecial(0)
-+		,m_nIncludeEvents(0)
-+        ,m_nIncludeBindings(0)
-+		,m_pOuterElement(NULL)
-+	{
-+		OSL_ENSURE(m_xProps.is(), "OControlExport::OControlExport: invalid arguments!");
-+	}
-+
-+	//---------------------------------------------------------------------
-+	OControlExport::~OControlExport()
-+	{
-+		implEndElement();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportOuterAttributes()
-+	{
-+		// the control id
-+		if (CCA_NAME & m_nIncludeCommon)
-+		{
-+			exportStringPropertyAttribute(
-+				OAttributeMetaData::getCommonControlAttributeNamespace(CCA_NAME),
-+				OAttributeMetaData::getCommonControlAttributeName(CCA_NAME),
-+				PROPERTY_NAME
-+				);
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_NAME;
-+		#endif
-+		}
-+
-+		// the service name
-+		if (m_nIncludeCommon & CCA_SERVICE_NAME)
-+		{
-+			exportServiceNameAttribute();
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_SERVICE_NAME;
-+		#endif
-+		}
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportInnerAttributes()
-+	{
-+		// the control id
-+		if (CCA_CONTROL_ID & m_nIncludeCommon)
-+		{
-+			OSL_ENSURE(m_sControlId.getLength(), "OControlExport::exportOuterAttributes: have no control id for the control!");
-+			AddAttribute(
-+				OAttributeMetaData::getCommonControlAttributeNamespace(CCA_CONTROL_ID),
-+				OAttributeMetaData::getCommonControlAttributeName(CCA_CONTROL_ID),
-+				m_sControlId);
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_CONTROL_ID;
-+		#endif
-+		}
-+
-+        // common control attributes
-+		exportCommonControlAttributes();
-+
-+		// common database attributes
-+		exportDatabaseAttributes();
-+
-+        // attributes related to external bindings
-+        exportBindingAtributes();
-+
-+		// attributes special to the respective control type
-+		exportSpecialAttributes();
-+
-+		// add the style references to the attributes
-+		flagStyleProperties();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportAttributes()
-+	{
-+		exportOuterAttributes();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportSubTags() throw (Exception)
-+	{
-+		// for the upcoming exportRemainingProperties:
-+		// if a control has the LabelControl property, this is not stored with the control itself, but instead with
-+		// the control which is referenced by this property. As the base class' exportRemainingProperties doesn't
-+		// know anything about this, we need to prevent that it tries to export this property
-+		exportedProperty(PROPERTY_CONTROLLABEL);
-+
-+        // if it's a control supporting XText, then we need to declare all text-related properties
-+        // as "already exported". This prevents them from being exported as generic "form:property"-tags.
-+        // *If* we would export them this way, they would be completely superfluous, and sometimes even
-+        // disastrous, since they may, at import time, override paragraph properties which already have
-+        // been set before
-+        Reference< XText > xControlText( m_xProps, UNO_QUERY );
-+        if ( xControlText.is() )
-+        {
-+            const XMLPropertyMapEntry* pCharAttributeProperties = XMLTextPropertySetMapper::getPropertyMapForType( TEXT_PROP_MAP_TEXT );
-+            while ( pCharAttributeProperties->msApiName )
-+            {
-+                exportedProperty( ::rtl::OUString::createFromAscii( pCharAttributeProperties->msApiName ) );
-+                ++pCharAttributeProperties;
-+            }
-+
-+            const XMLPropertyMapEntry* pParaAttributeProperties = XMLTextPropertySetMapper::getPropertyMapForType( TEXT_PROP_MAP_SHAPE_PARA );
-+            while ( pParaAttributeProperties->msApiName )
-+            {
-+                exportedProperty( ::rtl::OUString::createFromAscii( pParaAttributeProperties->msApiName ) );
-+                ++pParaAttributeProperties;
-+            }
-+
-+            // the RichText property is not exported. The presence of the text:p element
-+            // will be used - upon reading - as indicator for the value of the RichText property
-+            exportedProperty( PROPERTY_RICH_TEXT );
-+
-+            // strange thing: paragraphs support both a CharStrikeout and a CharCrossedOut property
-+            // The former is a short/enum value, the latter a boolean. The former has a real meaning
-+            // (the strikeout type), the latter hasn't. But, when the CharCrossedOut is exported and
-+            // later on imported, it overwrites anything which has previously been imported for
-+            // CharStrikeout.
-+            // 2004-04-14 - #i27729# - fs openoffice org
-+            exportedProperty( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "CharCrossedOut" ) ) );
-+        }
-+
-+        if ( m_eType == LISTBOX )
-+        {
-+            // will be exported in exportListSourceAsElements:
-+            if ( controlHasUserSuppliedListEntries() )
-+                exportedProperty( PROPERTY_DEFAULT_SELECT_SEQ );
-+
-+            // will not be exported in a generic way. Either exportListSourceAsElements cares
-+            // for them, or we don't need them
-+            exportedProperty( PROPERTY_STRING_ITEM_LIST );
-+            exportedProperty( PROPERTY_VALUE_SEQ );
-+            exportedProperty( PROPERTY_SELECT_SEQ );
-+            exportedProperty( PROPERTY_LISTSOURCE );
-+        }
-+        if ( m_eType == COMBOBOX )
-+            exportedProperty( PROPERTY_STRING_ITEM_LIST );
-+
-+		// let the base class export the remaining properties and the events
-+		OElementExport::exportSubTags();
-+
-+		// special sub tags for some controls
-+		switch (m_eType)
-+		{
-+			case LISTBOX:
-+                // don't export the list entries if the are not provided by the user, but obtained implicitly
-+                // from other sources
-+                // #i26944# - 2004-05-17 - fs openoffice org
-+                if ( controlHasUserSuppliedListEntries() )
-+				    exportListSourceAsElements();
-+				break;
-+			case GRID:
-+			{	// a grid control requires us to store all columns as sub elements
-+				Reference< XIndexAccess > xColumnContainer(m_xProps, UNO_QUERY);
-+				OSL_ENSURE(xColumnContainer.is(), "OControlExport::exportSubTags: a grid control which is no IndexAccess?!!");
-+				if (xColumnContainer.is())
-+					m_rContext.exportCollectionElements(xColumnContainer);
-+			}
-+			break;
-+			case COMBOBOX:
-+			{	// a combox box description has sub elements: the items
-+				DBG_CHECK_PROPERTY( PROPERTY_STRING_ITEM_LIST, Sequence< ::rtl::OUString > );
-+
-+                // don't export the list entries if the are not provided by the user, but obtained implicitly
-+                // from other sources
-+                // #i26944# - 2004-05-17 - fs openoffice org
-+                if ( controlHasUserSuppliedListEntries() )
-+                {
-+				    // get the item list
-+				    Sequence< ::rtl::OUString > aListItems;
-+				    m_xProps->getPropertyValue(PROPERTY_STRING_ITEM_LIST) >>= aListItems;
-+				    // loop through it and write the sub elements
-+				    const ::rtl::OUString* pListItems = aListItems.getConstArray();
-+				    for (sal_Int32 i=0; i<aListItems.getLength(); ++i, ++pListItems)
-+				    {
-+					    m_rContext.getGlobalContext().ClearAttrList();
-+					    AddAttribute(
-+						    OAttributeMetaData::getCommonControlAttributeNamespace(CCA_LABEL),
-+						    OAttributeMetaData::getCommonControlAttributeName(CCA_LABEL),
-+						    *pListItems);
-+					    SvXMLElementExport aFormElement(m_rContext.getGlobalContext(), XML_NAMESPACE_FORM, "item", sal_True, sal_True);
-+				    }
-+                }
-+			}
-+			break;
-+
-+            case TEXT_AREA:
-+            {
-+                // if we act as rich text control, we need to export some text:p elements
-+                if ( xControlText.is() )
-+                {
-+                    sal_Bool bActingAsRichText = sal_False;
-+        			if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_RICH_TEXT ) )
-+                    {
-+                        OSL_VERIFY(m_xProps->getPropertyValue( PROPERTY_RICH_TEXT ) >>= bActingAsRichText );
-+                    }
-+
-+                    if ( bActingAsRichText )
-+                		m_rContext.getGlobalContext().GetTextParagraphExport()->exportText( xControlText );
-+                }
-+            }
-+            break;
-+            default:
-+                // nothing do to
-+                break;
-+		}
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportCommonControlAttributes()
-+	{
-+		size_t i=0;
-+
-+		// I decided to handle all the properties here with some static arrays describing the property-attribute
-+		// relations. This leads to somewhat ugly code :), but the only alternative I can think of right now
-+		// would require maps and O(log n) searches, which seems somewhat expensive as this code is used
-+		// very frequently.
-+
-+		// the extra indents for the respective blocks are to ensure that there is no copy'n'paste error, using
-+		// map identifiers from the wrong block
-+
-+		// --------------------------------------------------------------------
-+		// some string properties
-+		{
-+			// the attribute ids of all properties which are expected to be of type string
-+			static sal_Int32 nStringPropertyAttributeIds[] =
-+			{
-+				CCA_LABEL, CCA_TITLE
-+			};
-+			// the names of all properties which are expected to be of type string
-+			static ::rtl::OUString aStringPropertyNames[] =
-+			{
-+				PROPERTY_LABEL, PROPERTY_TITLE
-+			};
-+			OSL_ENSURE(	sizeof(aStringPropertyNames)/sizeof(aStringPropertyNames[0]) ==
-+						sizeof(nStringPropertyAttributeIds)/sizeof(nStringPropertyAttributeIds[0]),
-+						"OControlExport::exportCommonControlAttributes: somebody tampered with the maps (1)!");
-+
-+			for (i=0; i<sizeof(nStringPropertyAttributeIds)/sizeof(nStringPropertyAttributeIds[0]); ++i)
-+				if (nStringPropertyAttributeIds[i] & m_nIncludeCommon)
-+				{
-+					exportStringPropertyAttribute(
-+						OAttributeMetaData::getCommonControlAttributeNamespace(nStringPropertyAttributeIds[i]),
-+						OAttributeMetaData::getCommonControlAttributeName(nStringPropertyAttributeIds[i]),
-+						aStringPropertyNames[i]
-+						);
-+				#if OSL_DEBUG_LEVEL > 0
-+					//  reset the bit for later checking
-+					m_nIncludeCommon = m_nIncludeCommon & ~nStringPropertyAttributeIds[i];
-+				#endif
-+				}
-+		}
-+
-+		// --------------------------------------------------------------------
-+		// some boolean properties
-+		{
-+			static sal_Int32 nBooleanPropertyAttributeIds[] =
-+			{	// attribute flags
-+				CCA_CURRENT_SELECTED, CCA_DISABLED, CCA_DROPDOWN, CCA_PRINTABLE, CCA_READONLY, CCA_SELECTED, CCA_TAB_STOP, CCA_ENABLEVISIBLE
-+			};
-+			static const ::rtl::OUString* pBooleanPropertyNames[] =
-+			{	// property names
-+				&PROPERTY_STATE, &PROPERTY_ENABLED, &PROPERTY_DROPDOWN, &PROPERTY_PRINTABLE, &PROPERTY_READONLY, &PROPERTY_DEFAULT_STATE, &PROPERTY_TABSTOP, &PROPERTY_ENABLEVISIBLE
-+			};
-+			static sal_Bool nBooleanPropertyAttrFlags[] =
-+			{	// attribute defaults
-+				BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE | BOOLATTR_INVERSE_SEMANTICS, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_VOID, BOOLATTR_DEFAULT_FALSE
-+			};
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nIdCount = sizeof(nBooleanPropertyAttributeIds) / sizeof(nBooleanPropertyAttributeIds[0]);
-+			sal_Int32 nNameCount = sizeof(pBooleanPropertyNames) / sizeof(pBooleanPropertyNames[0]);
-+			sal_Int32 nFlagsCount = sizeof(nBooleanPropertyAttrFlags) / sizeof(nBooleanPropertyAttrFlags[0]);
-+			OSL_ENSURE((nIdCount == nNameCount) && (nNameCount == nFlagsCount),
-+				"OControlExport::exportCommonControlAttributes: somebody tampered with the maps (2)!");
-+		#endif
-+			for (i=0; i<sizeof(nBooleanPropertyAttributeIds)/sizeof(nBooleanPropertyAttributeIds[0]); ++i)
-+				if (nBooleanPropertyAttributeIds[i] & m_nIncludeCommon)
-+				{
-+					exportBooleanPropertyAttribute(
-+						OAttributeMetaData::getCommonControlAttributeNamespace(nBooleanPropertyAttributeIds[i]),
-+						OAttributeMetaData::getCommonControlAttributeName(nBooleanPropertyAttributeIds[i]),
-+						*(pBooleanPropertyNames[i]),
-+						nBooleanPropertyAttrFlags[i]);
-+		#if OSL_DEBUG_LEVEL > 0
-+					//  reset the bit for later checking
-+					m_nIncludeCommon = m_nIncludeCommon & ~nBooleanPropertyAttributeIds[i];
-+		#endif
-+				}
-+		}
-+
-+
-+		// --------------------------------------------------------------------
-+		// some integer properties
-+		{
-+			// now the common handling
-+			static sal_Int32 nIntegerPropertyAttributeIds[] =
-+			{	// attribute flags
-+				CCA_SIZE, CCA_TAB_INDEX
-+			};
-+			static const ::rtl::OUString* pIntegerPropertyNames[] =
-+			{	// property names
-+				&PROPERTY_LINECOUNT, &PROPERTY_TABINDEX
-+			};
-+			static const sal_Int16 nIntegerPropertyAttrDefaults[] =
-+			{	// attribute defaults
-+				5, 0
-+			};
-+
-+			if ( m_nIncludeCommon & CCA_MAX_LENGTH )
-+				exportedProperty(PROPERTY_MAXTEXTLENGTH);
-+
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nIdCount = sizeof(nIntegerPropertyAttributeIds) / sizeof(nIntegerPropertyAttributeIds[0]);
-+			sal_Int32 nNameCount = sizeof(pIntegerPropertyNames) / sizeof(pIntegerPropertyNames[0]);
-+			sal_Int32 nDefaultCount = sizeof(nIntegerPropertyAttrDefaults) / sizeof(nIntegerPropertyAttrDefaults[0]);
-+			OSL_ENSURE((nIdCount == nNameCount) && (nNameCount == nDefaultCount),
-+				"OControlExport::exportCommonControlAttributes: somebody tampered with the maps (3)!");
-+		#endif
-+			for (i=0; i<sizeof(nIntegerPropertyAttributeIds)/sizeof(nIntegerPropertyAttributeIds[0]); ++i)
-+				if (nIntegerPropertyAttributeIds[i] & m_nIncludeCommon)
-+				{
-+					exportInt16PropertyAttribute(
-+						OAttributeMetaData::getCommonControlAttributeNamespace(nIntegerPropertyAttributeIds[i]),
-+						OAttributeMetaData::getCommonControlAttributeName(nIntegerPropertyAttributeIds[i]),
-+						*(pIntegerPropertyNames[i]),
-+						nIntegerPropertyAttrDefaults[i]);
-+		#if OSL_DEBUG_LEVEL > 0
-+					//  reset the bit for later checking
-+					m_nIncludeCommon = m_nIncludeCommon & ~nIntegerPropertyAttributeIds[i];
-+		#endif
-+				}
-+
-+
-+		}
-+
-+		// --------------------------------------------------------------------
-+		// some enum properties
-+		{
-+			if (m_nIncludeCommon & CCA_BUTTON_TYPE)
-+			{
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_BUTTON_TYPE),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_BUTTON_TYPE),
-+					PROPERTY_BUTTONTYPE,
-+					OEnumMapper::getEnumMap(OEnumMapper::epButtonType),
-+					FormButtonType_PUSH);
-+		#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeCommon = m_nIncludeCommon & ~CCA_BUTTON_TYPE;
-+		#endif
-+			}
-+			if ( m_nIncludeCommon & CCA_ORIENTATION )
-+			{
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace( CCA_ORIENTATION ),
-+					OAttributeMetaData::getCommonControlAttributeName( CCA_ORIENTATION ),
-+					PROPERTY_ORIENTATION,
-+					OEnumMapper::getEnumMap( OEnumMapper::epOrientation ),
-+                    ScrollBarOrientation::HORIZONTAL
-+                );
-+		#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeCommon = m_nIncludeCommon & ~CCA_ORIENTATION;
-+		#endif
-+			}
-+
-+            if ( m_nIncludeCommon & CCA_VISUAL_EFFECT )
-+            {
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace( CCA_VISUAL_EFFECT ),
-+					OAttributeMetaData::getCommonControlAttributeName( CCA_VISUAL_EFFECT ),
-+					PROPERTY_VISUAL_EFFECT,
-+					OEnumMapper::getEnumMap( OEnumMapper::epVisualEffect ),
-+                    VisualEffect::LOOK3D
-+                );
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeCommon = m_nIncludeCommon & ~CCA_VISUAL_EFFECT;
-+			#endif
-+            }
-+		}
-+
-+		// --------------------------------------------------------------------
-+		// some properties which require a special handling
-+
-+		// the target frame
-+		if (m_nIncludeCommon & CCA_TARGET_FRAME)
-+		{
-+			exportTargetFrameAttribute();
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_TARGET_FRAME;
-+		#endif
-+		}
-+
-+		// max text length
-+		if ( m_nIncludeCommon & CCA_MAX_LENGTH )
-+		{
-+			// normally, the respective property would be "MaxTextLen"
-+			// However, if the model has a property "PersistenceMaxTextLength", then we prefer this
-+
-+			// determine the name of the property to export
-+			::rtl::OUString sTextLenPropertyName( PROPERTY_MAXTEXTLENGTH );
-+			if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_PERSISTENCE_MAXTEXTLENGTH ) )
-+				sTextLenPropertyName = PROPERTY_PERSISTENCE_MAXTEXTLENGTH;
-+
-+			// export it
-+			exportInt16PropertyAttribute(
-+				OAttributeMetaData::getCommonControlAttributeNamespace( CCA_MAX_LENGTH ),
-+				OAttributeMetaData::getCommonControlAttributeName( CCA_MAX_LENGTH ),
-+				sTextLenPropertyName,
-+				0
-+			);
-+
-+			// in either way, both properties count as "exported"
-+			exportedProperty( PROPERTY_MAXTEXTLENGTH );
-+			exportedProperty( PROPERTY_PERSISTENCE_MAXTEXTLENGTH );
-+
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_MAX_LENGTH;
-+		#endif
-+		}
-+
-+		if (m_nIncludeCommon & CCA_TARGET_LOCATION)
-+		{
-+			exportTargetLocationAttribute();
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_TARGET_LOCATION;
-+		#endif
-+		}
-+
-+		// OJ #99721#
-+		if (m_nIncludeCommon & CCA_IMAGE_DATA)
-+		{
-+			exportImageDataAttribute();
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_IMAGE_DATA;
-+		#endif
-+		}
-+
-+		// the for attribute
-+		// the target frame
-+		if (m_nIncludeCommon & CCA_FOR)
-+		{
-+			if (m_sReferringControls.getLength())
-+			{	// there is at least one control referring to the one we're handling currently
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_FOR),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_FOR),
-+					m_sReferringControls);
-+			}
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~CCA_FOR;
-+		#endif
-+		}
-+
-+		if ((CCA_CURRENT_VALUE | CCA_VALUE) & m_nIncludeCommon)
-+		{
-+			const sal_Char* pCurrentValuePropertyName = NULL;
-+			const sal_Char* pValuePropertyName = NULL;
-+
-+			// get the property names
-+			getValuePropertyNames(m_eType, m_nClassId, pCurrentValuePropertyName, pValuePropertyName);
-+
-+			static const sal_Char* pCurrentValueAttributeName = OAttributeMetaData::getCommonControlAttributeName(CCA_CURRENT_VALUE);
-+			static const sal_Char* pValueAttributeName = OAttributeMetaData::getCommonControlAttributeName(CCA_VALUE);
-+			static const sal_uInt16 nCurrentValueAttributeNamespaceKey = OAttributeMetaData::getCommonControlAttributeNamespace(CCA_CURRENT_VALUE);
-+			static const sal_uInt16 nValueAttributeNamespaceKey = OAttributeMetaData::getCommonControlAttributeNamespace(CCA_VALUE);
-+
-+			// add the atrtributes if necessary and possible
-+			if (pCurrentValuePropertyName && (CCA_CURRENT_VALUE & m_nIncludeCommon))
-+            {
-+                // don't export the current-value if this value originates from a data binding
-+                // #i26944# - 2004-05-17 - fs openoffice org
-+                if ( controlHasActiveDataBinding() )
-+                    exportedProperty( ::rtl::OUString::createFromAscii( pCurrentValuePropertyName ) );
-+                else
-+				    exportGenericPropertyAttribute(
-+					    nCurrentValueAttributeNamespaceKey,
-+					    pCurrentValueAttributeName,
-+					    pCurrentValuePropertyName
-+                    );
-+            }
-+
-+			if (pValuePropertyName && (CCA_VALUE & m_nIncludeCommon))
-+				exportGenericPropertyAttribute(
-+					nValueAttributeNamespaceKey,
-+					pValueAttributeName,
-+					pValuePropertyName);
-+
-+			OSL_ENSURE((NULL == pValuePropertyName) == (0 == (CCA_VALUE & m_nIncludeCommon)),
-+				"OControlExport::exportCommonControlAttributes: no property found for the value attribute!");
-+			OSL_ENSURE((NULL == pCurrentValuePropertyName ) == (0 == (CCA_CURRENT_VALUE & m_nIncludeCommon)),
-+				"OControlExport::exportCommonControlAttributes: no property found for the current-value attribute!");
-+
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeCommon = m_nIncludeCommon & ~(CCA_CURRENT_VALUE | CCA_VALUE);
-+		#endif
-+		}
-+
-+		OSL_ENSURE(0 == m_nIncludeCommon,
-+			"OControlExport::exportCommonControlAttributes: forgot some flags!");
-+			// in the dbg_util version, we should have removed every bit we handled from the mask, so it should
-+			// be 0 now ...
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportDatabaseAttributes()
-+	{
-+#if OSL_DEBUG_LEVEL > 0
-+		sal_Int32 nIncludeDatabase = m_nIncludeDatabase;
-+#endif
-+		// the only string property: DataField
-+		if (DA_DATA_FIELD & m_nIncludeDatabase)
-+		{
-+			exportStringPropertyAttribute(
-+				OAttributeMetaData::getDatabaseAttributeNamespace(DA_DATA_FIELD),
-+				OAttributeMetaData::getDatabaseAttributeName(DA_DATA_FIELD),
-+				PROPERTY_DATAFIELD);
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeDatabase = nIncludeDatabase & ~DA_DATA_FIELD;
-+		#endif
-+		}
-+
-+		// the only int16 property: BoundColumn
-+		if (DA_BOUND_COLUMN & m_nIncludeDatabase)
-+		{
-+			exportInt16PropertyAttribute(
-+				OAttributeMetaData::getDatabaseAttributeNamespace(DA_BOUND_COLUMN),
-+				OAttributeMetaData::getDatabaseAttributeName(DA_BOUND_COLUMN),
-+				PROPERTY_BOUNDCOLUMN,
-+				0);
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeDatabase = nIncludeDatabase & ~DA_BOUND_COLUMN;
-+		#endif
-+		}
-+
-+		// the only boolean property: ConvertEmptyToNull
-+		if (DA_CONVERT_EMPTY & m_nIncludeDatabase)
-+		{
-+			exportBooleanPropertyAttribute(
-+				OAttributeMetaData::getDatabaseAttributeNamespace(DA_CONVERT_EMPTY),
-+				OAttributeMetaData::getDatabaseAttributeName(DA_CONVERT_EMPTY),
-+				PROPERTY_EMPTY_IS_NULL,
-+				BOOLATTR_DEFAULT_FALSE
-+				);
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeDatabase = nIncludeDatabase & ~DA_CONVERT_EMPTY;
-+		#endif
-+		}
-+
-+		// the only enum property: ListSourceType
-+		if (DA_LIST_SOURCE_TYPE & m_nIncludeDatabase)
-+		{
-+			exportEnumPropertyAttribute(
-+				OAttributeMetaData::getDatabaseAttributeNamespace(DA_LIST_SOURCE_TYPE),
-+				OAttributeMetaData::getDatabaseAttributeName(DA_LIST_SOURCE_TYPE),
-+				PROPERTY_LISTSOURCETYPE,
-+				OEnumMapper::getEnumMap(OEnumMapper::epListSourceType),
-+				ListSourceType_VALUELIST
-+				);
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeDatabase = nIncludeDatabase & ~DA_LIST_SOURCE_TYPE;
-+		#endif
-+		}
-+
-+		if (m_nIncludeDatabase & DA_LIST_SOURCE)
-+		{
-+			exportListSourceAsAttribute();
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeDatabase = nIncludeDatabase & ~DA_LIST_SOURCE;
-+		#endif
-+		}
-+
-+#if OSL_DEBUG_LEVEL > 0
-+		OSL_ENSURE(0 == nIncludeDatabase,
-+			"OControlExport::exportDatabaseAttributes: forgot some flags!");
-+			// in the dbg_util version, we should have removed every bit we handled from the mask, so it should
-+			// be 0 now ...
-+#endif
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportBindingAtributes()
-+    {
-+#if OSL_DEBUG_LEVEL > 0
-+		sal_Int32 nIncludeBinding = m_nIncludeBindings;
-+#endif
-+
-+        // ....................................................
-+        if ( m_nIncludeBindings & BA_LINKED_CELL )
-+        {
-+            exportCellBindingAttributes( ( m_nIncludeBindings & BA_LIST_LINKING_TYPE ) != 0 );
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeBinding = nIncludeBinding & ~( BA_LINKED_CELL | BA_LIST_LINKING_TYPE );
-+		#endif
-+        }
-+
-+        // ....................................................
-+        if ( m_nIncludeBindings & BA_LIST_CELL_RANGE )
-+        {
-+            exportCellListSourceRange();
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeBinding = nIncludeBinding & ~BA_LIST_CELL_RANGE;
-+		#endif
-+        }
-+
-+        if ( m_nIncludeBindings & BA_XFORMS_BIND )
-+        {
-+            exportXFormsBindAttributes();
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeBinding = nIncludeBinding & ~BA_XFORMS_BIND;
-+		#endif
-+        }
-+
-+        if ( m_nIncludeBindings & BA_XFORMS_LISTBIND )
-+        {
-+            exportXFormsListAttributes();
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeBinding = nIncludeBinding & ~BA_XFORMS_LISTBIND;
-+		#endif
-+        }
-+
-+        if ( m_nIncludeBindings & BA_XFORMS_SUBMISSION )
-+        {
-+            exportXFormsSubmissionAttributes();
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			nIncludeBinding = nIncludeBinding & ~BA_XFORMS_SUBMISSION;
-+		#endif
-+        }
-+
-+        OSL_ENSURE( 0 == nIncludeBinding,
-+			"OControlExport::exportBindingAtributes: forgot some flags!");
-+			// in the debug version, we should have removed every bit we handled from the mask, so it should
-+			// be 0 now ...
-+    }
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportSpecialAttributes()
-+	{
-+		sal_Int32 i=0;
-+
-+		// ----------------------
-+		// the boolean properties
-+		{
-+			static const sal_Int32 nBooleanPropertyAttributeIds[] =
-+			{	// attribute flags
-+				SCA_VALIDATION, SCA_MULTI_LINE, SCA_AUTOMATIC_COMPLETION, SCA_MULTIPLE, SCA_DEFAULT_BUTTON, SCA_IS_TRISTATE,
-+                SCA_TOGGLE, SCA_FOCUS_ON_CLICK
-+			};
-+			static const ::rtl::OUString* pBooleanPropertyNames[] =
-+			{	// property names
-+				&PROPERTY_STRICTFORMAT, &PROPERTY_MULTILINE, &PROPERTY_AUTOCOMPLETE, &PROPERTY_MULTISELECTION, &PROPERTY_DEFAULTBUTTON, &PROPERTY_TRISTATE,
-+                &PROPERTY_TOGGLE, &PROPERTY_FOCUS_ON_CLICK
-+			};
-+			sal_Int32 nIdCount = sizeof(nBooleanPropertyAttributeIds) / sizeof(nBooleanPropertyAttributeIds[0]);
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nNameCount = sizeof(pBooleanPropertyNames) / sizeof(pBooleanPropertyNames[0]);
-+			OSL_ENSURE((nIdCount == nNameCount),
-+				"OControlExport::exportSpecialAttributes: somebody tampered with the maps (1)!");
-+		#endif
-+            const sal_Int32* pAttributeId = nBooleanPropertyAttributeIds;
-+            const ::rtl::OUString** pPropertyName = pBooleanPropertyNames;
-+			for ( i = 0; i < nIdCount; ++i, ++pAttributeId, ++pPropertyName )
-+            {
-+				if ( *pAttributeId& m_nIncludeSpecial)
-+				{
-+					exportBooleanPropertyAttribute(
-+						OAttributeMetaData::getSpecialAttributeNamespace( *pAttributeId ),
-+						OAttributeMetaData::getSpecialAttributeName( *pAttributeId ),
-+						*(*pPropertyName),
-+                        ( *pAttributeId == SCA_FOCUS_ON_CLICK ) ? BOOLATTR_DEFAULT_TRUE : BOOLATTR_DEFAULT_FALSE
-+					);
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~*pAttributeId;
-+			#endif
-+				}
-+            }
-+		}
-+
-+		// ----------------------
-+		// the integer properties
-+		{
-+			static sal_Int32 nIntegerPropertyAttributeIds[] =
-+			{	// attribute flags
-+				SCA_PAGE_STEP_SIZE
-+			};
-+			static const ::rtl::OUString* pIntegerPropertyNames[] =
-+			{	// property names
-+                &PROPERTY_BLOCK_INCREMENT
-+			};
-+			static const sal_Int32 nIntegerPropertyAttrDefaults[] =
-+			{	// attribute defaults (XML defaults, not runtime defaults!)
-+				10
-+			};
-+
-+            sal_Int32 nIdCount = sizeof( nIntegerPropertyAttributeIds ) / sizeof( nIntegerPropertyAttributeIds[0] );
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nNameCount = sizeof( pIntegerPropertyNames ) / sizeof( pIntegerPropertyNames[0] );
-+			OSL_ENSURE( ( nIdCount == nNameCount ),
-+				"OControlExport::exportSpecialAttributes: somebody tampered with the maps (2)!" );
-+            sal_Int32 nDefaultCount = sizeof( nIntegerPropertyAttrDefaults ) / sizeof( nIntegerPropertyAttrDefaults[0] );
-+			OSL_ENSURE( ( nIdCount == nDefaultCount ),
-+				"OControlExport::exportSpecialAttributes: somebody tampered with the maps (3)!" );
-+		#endif
-+			for ( i = 0; i < nIdCount; ++i )
-+				if ( nIntegerPropertyAttributeIds[i] & m_nIncludeSpecial )
-+				{
-+					exportInt32PropertyAttribute(
-+						OAttributeMetaData::getSpecialAttributeNamespace( nIntegerPropertyAttributeIds[i] ),
-+						OAttributeMetaData::getSpecialAttributeName( nIntegerPropertyAttributeIds[i] ),
-+						*( pIntegerPropertyNames[i] ),
-+						nIntegerPropertyAttrDefaults[i]
-+					);
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~nIntegerPropertyAttributeIds[i];
-+			#endif
-+				}
-+
-+            if ( SCA_STEP_SIZE & m_nIncludeSpecial )
-+            {
-+                ::rtl::OUString sPropertyName;
-+                if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_LINE_INCREMENT ) )
-+                    sPropertyName = PROPERTY_LINE_INCREMENT;
-+                else if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_SPIN_INCREMENT ) )
-+                    sPropertyName = PROPERTY_SPIN_INCREMENT;
-+                else
-+                    OSL_ENSURE( sal_False, "OControlExport::exportSpecialAttributes: not property which can be mapped to step-size attribute!" );
-+
-+                if ( sPropertyName.getLength() )
-+					exportInt32PropertyAttribute(
-+						OAttributeMetaData::getSpecialAttributeNamespace( SCA_STEP_SIZE ),
-+						OAttributeMetaData::getSpecialAttributeName( SCA_STEP_SIZE ),
-+						sPropertyName,
-+						1
-+					);
-+
-+            #if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_STEP_SIZE;
-+			#endif
-+            }
-+
-+        }
-+
-+		// -------------------
-+		// the enum properties
-+		{
-+			if (SCA_STATE & m_nIncludeSpecial)
-+			{
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getSpecialAttributeNamespace(SCA_STATE),
-+					OAttributeMetaData::getSpecialAttributeName(SCA_STATE),
-+					PROPERTY_DEFAULT_STATE,
-+					OEnumMapper::getEnumMap(OEnumMapper::epCheckState),
-+					STATE_NOCHECK);
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_STATE;
-+			#endif
-+			}
-+
-+			if (SCA_CURRENT_STATE & m_nIncludeSpecial)
-+			{
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getSpecialAttributeNamespace(SCA_CURRENT_STATE),
-+					OAttributeMetaData::getSpecialAttributeName(SCA_CURRENT_STATE),
-+					PROPERTY_STATE,
-+					OEnumMapper::getEnumMap(OEnumMapper::epCheckState),
-+					STATE_NOCHECK);
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_CURRENT_STATE;
-+			#endif
-+			}
-+		}
-+
-+		// --------------------------------------------------------------------
-+		// some properties which require a special handling
-+        // the repeat delay
-+        {
-+		    if ( m_nIncludeSpecial & SCA_REPEAT_DELAY )
-+		    {
-+		        DBG_CHECK_PROPERTY( PROPERTY_REPEAT_DELAY, sal_Int32 );
-+
-+                sal_Int32 nRepeatDelay = 0;
-+                m_xProps->getPropertyValue( PROPERTY_REPEAT_DELAY ) >>= nRepeatDelay;
-+                Time aTime;
-+                aTime.MakeTimeFromMS( nRepeatDelay );
-+
-+			    AddAttribute(OAttributeMetaData::getSpecialAttributeNamespace( SCA_REPEAT_DELAY )
-+						    ,OAttributeMetaData::getSpecialAttributeName( SCA_REPEAT_DELAY )
-+						    ,SvXMLUnitConverter::convertTimeDuration( aTime, nRepeatDelay % 1000 ) );
-+
-+		        exportedProperty( PROPERTY_REPEAT_DELAY );
-+
-+            #if OSL_DEBUG_LEVEL > 0
-+			    //  reset the bit for later checking
-+			    m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_REPEAT_DELAY;
-+		    #endif
-+		    }
-+        }
-+
-+		// ----------------------------------
-+		// the EchoChar property needs special handling, cause it's a Int16, but must be stored as one-character-string
-+		{
-+			if (SCA_ECHO_CHAR & m_nIncludeSpecial)
-+			{
-+				DBG_CHECK_PROPERTY( PROPERTY_ECHO_CHAR, sal_Int16 );
-+				sal_Int16 nValue(0);
-+				m_xProps->getPropertyValue(PROPERTY_ECHO_CHAR) >>= nValue;
-+				if (nValue)
-+				{
-+					::rtl::OUString sCharacter(reinterpret_cast<const sal_Unicode*>(&nValue), 1);
-+					AddAttribute(
-+						OAttributeMetaData::getSpecialAttributeNamespace(SCA_ECHO_CHAR),
-+						OAttributeMetaData::getSpecialAttributeName(SCA_ECHO_CHAR),
-+						sCharacter);
-+				}
-+				exportedProperty(PROPERTY_ECHO_CHAR);
-+			#if OSL_DEBUG_LEVEL > 0
-+				//  reset the bit for later checking
-+				m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_ECHO_CHAR;
-+			#endif
-+			}
-+		}
-+
-+		// ----------------------------------
-+		if ((SCA_MIN_VALUE | SCA_MAX_VALUE) & m_nIncludeSpecial)
-+		{
-+			// need to export the min value and the max value as attributes
-+			// It depends on the real type (FormComponentType) of the control, which properties hold these
-+			// values
-+			const sal_Char* pMinValuePropertyName = NULL;
-+			const sal_Char* pMaxValuePropertyName = NULL;
-+			getValueLimitPropertyNames(m_nClassId, pMinValuePropertyName, pMaxValuePropertyName);
-+
-+			OSL_ENSURE((NULL == pMinValuePropertyName) == (0 == (SCA_MIN_VALUE & m_nIncludeSpecial)),
-+				"OControlExport::exportCommonControlAttributes: no property found for the min value attribute!");
-+			OSL_ENSURE((NULL == pMaxValuePropertyName) == (0 == (SCA_MAX_VALUE & m_nIncludeSpecial)),
-+				"OControlExport::exportCommonControlAttributes: no property found for the max value attribute!");
-+
-+			// add the two attributes
-+			static const sal_Char* pMinValueAttributeName = OAttributeMetaData::getSpecialAttributeName(SCA_MIN_VALUE);
-+			static const sal_Char* pMaxValueAttributeName = OAttributeMetaData::getSpecialAttributeName(SCA_MAX_VALUE);
-+			static const sal_uInt16 nMinValueNamespaceKey = OAttributeMetaData::getSpecialAttributeNamespace(SCA_MIN_VALUE);
-+			static const sal_uInt16 nMaxValueNamespaceKey = OAttributeMetaData::getSpecialAttributeNamespace(SCA_MAX_VALUE);
-+
-+			if (pMinValuePropertyName && (SCA_MIN_VALUE & m_nIncludeSpecial))
-+				exportGenericPropertyAttribute(
-+					nMinValueNamespaceKey,
-+					pMinValueAttributeName,
-+					pMinValuePropertyName);
-+
-+			if (pMaxValuePropertyName && (SCA_MAX_VALUE & m_nIncludeSpecial))
-+				exportGenericPropertyAttribute(
-+					nMaxValueNamespaceKey,
-+					pMaxValueAttributeName,
-+					pMaxValuePropertyName);
-+		#if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeSpecial = m_nIncludeSpecial & ~(SCA_MIN_VALUE | SCA_MAX_VALUE);
-+		#endif
-+		}
-+
-+		// ----------------------------------
-+        if ( SCA_IMAGE_POSITION & m_nIncludeSpecial )
-+        {
-+            exportImagePositionAttributes();
-+
-+        #if OSL_DEBUG_LEVEL > 0
-+			//  reset the bit for later checking
-+			m_nIncludeSpecial = m_nIncludeSpecial & ~SCA_IMAGE_POSITION;
-+		#endif
-+        }
-+
-+		OSL_ENSURE(0 == m_nIncludeSpecial,
-+			"OControlExport::exportSpecialAttributes: forgot some flags!");
-+			// in the dbg_util version, we should have removed every bit we handled from the mask, so it should
-+			// be 0 now ...
-+	}
-+
-+	//---------------------------------------------------------------------
-+    ::rtl::OUString OControlExport::getScalarListSourceValue() const
-+    {
-+		::rtl::OUString sListSource;
-+		Any aListSource = m_xProps->getPropertyValue( PROPERTY_LISTSOURCE );
-+		if ( !( aListSource >>= sListSource ) )
-+		{
-+			Sequence< ::rtl::OUString > aListSourceSequence;
-+			aListSource >>= aListSourceSequence;
-+			if ( aListSourceSequence.getLength() )
-+				sListSource = aListSourceSequence[ 0 ];
-+		}
-+        return sListSource;
-+    }
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportListSourceAsAttribute()
-+	{
-+		// DA_LIST_SOURCE needs some special handling
-+		DBG_CHECK_PROPERTY_NO_TYPE( PROPERTY_LISTSOURCE );
-+
-+        ::rtl::OUString sListSource = getScalarListSourceValue();
-+		if ( sListSource.getLength() )
-+		{	// the ListSource property needs to be exported as attribute, and it is not empty
-+			AddAttribute(
-+				OAttributeMetaData::getDatabaseAttributeNamespace(DA_LIST_SOURCE),
-+				OAttributeMetaData::getDatabaseAttributeName(DA_LIST_SOURCE),
-+				sListSource);
-+		}
-+
-+        exportedProperty( PROPERTY_LISTSOURCE );
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::getSequenceInt16PropertyAsSet(const ::rtl::OUString& _rPropertyName, Int16Set& _rOut)
-+	{
-+		Sequence< sal_Int16 > aValueSequence;
-+		DBG_CHECK_PROPERTY(_rPropertyName, Sequence< sal_Int16 >);
-+		m_xProps->getPropertyValue(_rPropertyName) >>= aValueSequence;
-+
-+		const sal_Int16* pValues = aValueSequence.getConstArray();
-+		for (sal_Int32 i=0; i<aValueSequence.getLength(); ++i, ++pValues)
-+			_rOut.insert(*pValues);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::exportListSourceAsElements()
-+	{
-+		// the string lists
-+		Sequence< ::rtl::OUString > aItems, aValues;
-+		DBG_CHECK_PROPERTY( PROPERTY_STRING_ITEM_LIST, Sequence< ::rtl::OUString > );
-+		m_xProps->getPropertyValue(PROPERTY_STRING_ITEM_LIST) >>= aItems;
-+
-+		DBG_CHECK_PROPERTY( PROPERTY_LISTSOURCE, Sequence< ::rtl::OUString > );
-+		if ( 0 == ( m_nIncludeDatabase & DA_LIST_SOURCE ) )
-+			m_xProps->getPropertyValue(PROPERTY_LISTSOURCE) >>= aValues;
-+		// if we exported the list source as attribute, we do not repeat it as sub elements
-+
-+		// the selection lists
-+		Int16Set aSelection, aDefaultSelection;
-+		getSequenceInt16PropertyAsSet(PROPERTY_SELECT_SEQ, aSelection);
-+		getSequenceInt16PropertyAsSet(PROPERTY_DEFAULT_SELECT_SEQ, aDefaultSelection);
-+
-+		// the string for "true"
-+		::rtl::OUString sTrue;
-+		::rtl::OUStringBuffer sBuffer;
-+		m_rContext.getGlobalContext().GetMM100UnitConverter().convertBool(sBuffer, sal_True);
-+		sTrue = sBuffer.makeStringAndClear();
-+
-+		// loop through both lists ('til the maximum of both lengths)
-+		const ::rtl::OUString* pItems = aItems.getConstArray();
-+		const ::rtl::OUString* pValues = aValues.getConstArray();
-+
-+		sal_Int32 nItems = aItems.getLength();
-+		sal_Int32 nValues = aValues.getLength();
-+
-+		sal_Int16 nMaxLen = (sal_Int16)std::max(nItems, nValues);
-+
-+		for	(sal_Int16 i=0; i<nMaxLen; ++i )
-+		{
-+			m_rContext.getGlobalContext().ClearAttrList();
-+			if (i < nItems)
-+			{
-+				// there is an item at this position
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_LABEL),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_LABEL),
-+					*pItems);
-+				++pItems;
-+			}
-+			if (i < nValues)
-+			{
-+				// there is an value at this position
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_VALUE),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_VALUE),
-+					*pValues);
-+				++pValues;
-+			}
-+
-+			Int16SetIterator aSelectedPos = aSelection.find(i);
-+			if (aSelection.end() != aSelectedPos)
-+			{	// the item at this position is selected
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_CURRENT_SELECTED),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_CURRENT_SELECTED),
-+					sTrue
-+					);
-+				aSelection.erase(aSelectedPos);
-+			}
-+
-+			Int16SetIterator aDefaultSelectedPos = aDefaultSelection.find(i);
-+			if (aDefaultSelection.end() != aDefaultSelectedPos)
-+			{	// the item at this position is selected as default
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_SELECTED),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_SELECTED),
-+					sTrue
-+					);
-+				aDefaultSelection.erase(aDefaultSelectedPos);
-+			}
-+			SvXMLElementExport aFormElement(m_rContext.getGlobalContext(), XML_NAMESPACE_FORM, "option", sal_True, sal_True);
-+		}
-+
-+		// There may be more "selected" or "default-selected" items than there are in the lists in real,
-+		// so we need to store some additional "form:option" items which have no name and no label, but
-+		// one or both of the selected flags.
-+		// 21.05.2001 - 85388 - frank schoenheit germany sun com
-+
-+		if (aSelection.size() || aDefaultSelection.size())
-+		{
-+			sal_Int16 nLastSelected = -1;
-+			if (aSelection.size())
-+				nLastSelected = *(--aSelection.end());
-+
-+			sal_Int16 nLastDefaultSelected = -1;
-+			if (aDefaultSelection.size())
-+				nLastDefaultSelected = *(--aDefaultSelection.end());
-+
-+			// the maximum element in both sets
-+			sal_Int16 nLastReferredEntry = std::max(nLastSelected, nLastDefaultSelected);
-+			OSL_ENSURE(nLastReferredEntry >= nMaxLen, "OControlExport::exportListSourceAsElements: inconsistence!");
-+				// if the maximum (selected or default selected) entry number is less than the maximum item count
-+				// in both lists, the entry number should have been removed from the set
-+
-+			for (sal_Int16 i=nMaxLen; i<=nLastReferredEntry; ++i)
-+			{
-+				if (aSelection.end() != aSelection.find(i))
-+				{	// the (not existent) item at this position is selected
-+					AddAttribute(
-+						OAttributeMetaData::getCommonControlAttributeNamespace(CCA_CURRENT_SELECTED),
-+						OAttributeMetaData::getCommonControlAttributeName(CCA_CURRENT_SELECTED),
-+						sTrue
-+						);
-+				}
-+
-+				if (aDefaultSelection.end() != aDefaultSelection.find(i))
-+				{	// the (not existent) item at this position is selected as default
-+					AddAttribute(
-+						OAttributeMetaData::getCommonControlAttributeNamespace(CCA_SELECTED),
-+						OAttributeMetaData::getCommonControlAttributeName(CCA_SELECTED),
-+						sTrue
-+						);
-+				}
-+				SvXMLElementExport aFormElement(m_rContext.getGlobalContext(), XML_NAMESPACE_FORM, "option", sal_True, sal_True);
-+			}
-+		}
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::implStartElement(const sal_Char* _pName)
-+	{
-+		// before we let the base class start it's outer element, we add a wrapper element
-+		const sal_Char *pOuterElementName = getOuterXMLElementName();
-+		m_pOuterElement = pOuterElementName
-+		   					? new SvXMLElementExport(
-+										m_rContext.getGlobalContext(),
-+										XML_NAMESPACE_FORM,
-+										pOuterElementName, sal_True,
-+										sal_True)
-+							: 0;
-+
-+		// add the attributes for the inner element
-+		exportInnerAttributes();
-+
-+		// and start the inner element
-+		OElementExport::implStartElement(_pName);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::implEndElement()
-+	{
-+		// end the inner element
-+		OElementExport::implEndElement();
-+
-+		// end the outer element if it exists
-+		delete m_pOuterElement;
-+		m_pOuterElement = NULL;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OControlExport::getOuterXMLElementName() const
-+	{
-+		return 0;
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OControlExport::getXMLElementName() const
-+	{
-+		return getElementName(m_eType);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OControlExport::examine()
-+	{
-+        OSL_ENSURE( ( m_nIncludeCommon == 0 ) && ( m_nIncludeSpecial == 0 ) && ( m_nIncludeDatabase == 0 )
-+                 && ( m_nIncludeEvents == 0 ) && ( m_nIncludeBindings == 0),
-+                 "OControlExport::examine: called me twice? Not initialized?" );
-+
-+        // get the class id to decide which kind of element we need in the XML stream
-+		m_nClassId = FormComponentType::CONTROL;
-+		DBG_CHECK_PROPERTY( PROPERTY_CLASSID, sal_Int16 );
-+		m_xProps->getPropertyValue(PROPERTY_CLASSID) >>= m_nClassId;
-+		switch (m_nClassId)
-+		{
-+			case FormComponentType::DATEFIELD:
-+			case FormComponentType::TIMEFIELD:
-+			case FormComponentType::NUMERICFIELD:
-+			case FormComponentType::CURRENCYFIELD:
-+			case FormComponentType::PATTERNFIELD:
-+				m_eType = FORMATTED_TEXT;
-+				// NO BREAK
-+			case FormComponentType::TEXTFIELD:
-+			{	// it's some kind of edit. To know which type we need further investigation
-+
-+				if (FORMATTED_TEXT != m_eType)
-+				{	// not coming from the previous cases which had a class id .ne. TEXTFIELD
-+
-+					// check if it's a formatted field
-+					if (m_xPropertyInfo->hasPropertyByName(PROPERTY_FORMATKEY))
-+					{
-+						m_eType = FORMATTED_TEXT;
-+					}
-+					else
-+					{
-+						// all other controls are represented by an ordinary edit control, but which XML control type
-+						// it is depends on the current values of some properties
-+
-+						// if the EchoChar string is not empty, it is a password field
-+						sal_Int16 nEchoChar = 0;
-+						if (m_xPropertyInfo->hasPropertyByName(PROPERTY_ECHOCHAR))
-+							// grid columns do not have this property ....
-+							m_xProps->getPropertyValue(PROPERTY_ECHOCHAR) >>= nEchoChar;
-+						if (nEchoChar)
-+						{
-+							m_eType = PASSWORD;
-+							m_nIncludeSpecial |= SCA_ECHO_CHAR;
-+						}
-+						else
-+						{
-+							// if the MultiLine property is sal_True, it is a TextArea
-+							sal_Bool bMultiLine = sal_False;
-+							if (m_xPropertyInfo->hasPropertyByName(PROPERTY_MULTILINE))
-+								// grid columns do not have this property ....
-+								bMultiLine = ::cppu::any2bool(m_xProps->getPropertyValue(PROPERTY_MULTILINE));
-+
-+                            if ( bMultiLine )
-+								m_eType = TEXT_AREA;
-+							else
-+								// the only case left is represented by a Text element
-+								m_eType = TEXT;
-+						}
-+					}
-+				}
-+
-+				// attributes which are common to all the four types:
-+				// common attributes
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_VALUE |
-+					CCA_PRINTABLE | CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE;
-+
-+                // database attributes
-+				m_nIncludeDatabase = DA_DATA_FIELD;
-+
-+				// event attributes
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE | EA_ON_SELECT;
-+
-+				// only text and pattern fields have a ConvertEmptyToNull property
-+				if  (   ( m_nClassId == FormComponentType::TEXTFIELD )
-+                    ||  ( m_nClassId == FormComponentType::PATTERNFIELD )
-+                    )
-+					m_nIncludeDatabase |= DA_CONVERT_EMPTY;
-+
-+				// all controls but the file control fields have a readonly property
-+				if ( m_nClassId != FormComponentType::FILECONTROL )
-+					m_nIncludeCommon |= CCA_READONLY;
-+
-+				// a text field has a max text len
-+                if ( m_nClassId == FormComponentType::TEXTFIELD )
-+					m_nIncludeCommon |= CCA_MAX_LENGTH;
-+
-+				// max and min values and validation:
-+				if (FORMATTED_TEXT == m_eType)
-+				{	// in general all controls represented as formatted-text have these props
-+					if (FormComponentType::PATTERNFIELD != m_nClassId)
-+						// but the PatternField does not have value limits
-+						m_nIncludeSpecial |= SCA_MAX_VALUE | SCA_MIN_VALUE;
-+
-+					if (FormComponentType::TEXTFIELD != m_nClassId)
-+						// and the FormattedField does not have a validation flag
-+						m_nIncludeSpecial |= SCA_VALIDATION;
-+				}
-+
-+				// if it's not a password field or rich text control, the CurrentValue needs to be stored, too
-+				if ( PASSWORD != m_eType )
-+					m_nIncludeCommon |= CCA_CURRENT_VALUE;
-+			}
-+			break;
-+
-+			case FormComponentType::FILECONTROL:
-+				m_eType = FILE;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_CURRENT_VALUE | CCA_DISABLED |
-+					CCA_PRINTABLE | CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE |
-+					CCA_VALUE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE | EA_ON_SELECT;
-+				break;
-+
-+			case FormComponentType::FIXEDTEXT:
-+				m_eType = FIXED_TEXT;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_LABEL |
-+					CCA_PRINTABLE | CCA_TITLE | CCA_FOR;
-+				m_nIncludeSpecial = SCA_MULTI_LINE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+				break;
-+
-+			case FormComponentType::COMBOBOX:
-+				m_eType = COMBOBOX;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_CURRENT_VALUE |
-+					CCA_DISABLED | CCA_DROPDOWN | CCA_MAX_LENGTH | CCA_PRINTABLE | CCA_READONLY | CCA_SIZE |
-+					CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE | CCA_VALUE;
-+				m_nIncludeSpecial = SCA_AUTOMATIC_COMPLETION;
-+				m_nIncludeDatabase = DA_CONVERT_EMPTY | DA_DATA_FIELD | DA_LIST_SOURCE | DA_LIST_SOURCE_TYPE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE | EA_ON_SELECT;
-+				break;
-+
-+			case FormComponentType::LISTBOX:
-+				m_eType = LISTBOX;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_DROPDOWN |
-+					CCA_PRINTABLE | CCA_SIZE | CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE;
-+				m_nIncludeSpecial = SCA_MULTIPLE;
-+				m_nIncludeDatabase = DA_BOUND_COLUMN | DA_DATA_FIELD | DA_LIST_SOURCE_TYPE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE | EA_ON_CLICK | EA_ON_DBLCLICK;
-+				// check if we need to export the ListSource as attribute
-+				{
-+					// for a list box, if the ListSourceType is VALUE_LIST, no ListSource is stored, but instead
-+					// a sequence of pairs which is build from the StringItemList and the ValueList
-+					ListSourceType eListSourceType = ListSourceType_VALUELIST;
-+                #if OSL_DEBUG_LEVEL > 0
-+					sal_Bool bSuccess =
-+				#endif
-+					m_xProps->getPropertyValue(PROPERTY_LISTSOURCETYPE) >>= eListSourceType;
-+					OSL_ENSURE(bSuccess, "OControlExport::examineControl: could not retrieve the ListSourceType!");
-+					if (ListSourceType_VALUELIST != eListSourceType)
-+					{
-+						m_nIncludeDatabase |= DA_LIST_SOURCE;
-+					}
-+				}
-+
-+				break;
-+
-+			case FormComponentType::COMMANDBUTTON:
-+				m_eType = BUTTON;
-+				m_nIncludeCommon |= CCA_TAB_STOP | CCA_LABEL;
-+				m_nIncludeSpecial = SCA_DEFAULT_BUTTON | SCA_TOGGLE | SCA_FOCUS_ON_CLICK | SCA_IMAGE_POSITION | SCA_REPEAT_DELAY;
-+				// NO BREAK !
-+			case FormComponentType::IMAGEBUTTON:
-+				if (BUTTON != m_eType)
-+					// not coming from the previous case
-+					m_eType = IMAGE;
-+				m_nIncludeCommon |=
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_BUTTON_TYPE | CCA_DISABLED |
-+					CCA_IMAGE_DATA | CCA_PRINTABLE | CCA_TAB_INDEX | CCA_TARGET_FRAME |
-+					CCA_TARGET_LOCATION | CCA_TITLE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CLICK	| EA_ON_DBLCLICK;
-+				break;
-+
-+			case FormComponentType::CHECKBOX:
-+				m_eType = CHECKBOX;
-+				m_nIncludeSpecial = SCA_CURRENT_STATE | SCA_IS_TRISTATE | SCA_STATE;
-+				// NO BREAK !
-+			case FormComponentType::RADIOBUTTON:
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_LABEL | CCA_PRINTABLE |
-+                    CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE | CCA_VALUE | CCA_VISUAL_EFFECT;
-+				if (CHECKBOX != m_eType)
-+				{	// not coming from the previous case
-+					m_eType = RADIO;
-+					m_nIncludeCommon |= CCA_CURRENT_SELECTED | CCA_SELECTED;
-+				}
-+                if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_IMAGE_POSITION ) )
-+                    m_nIncludeSpecial |= SCA_IMAGE_POSITION;
-+				m_nIncludeDatabase = DA_DATA_FIELD;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE;
-+				break;
-+
-+			case FormComponentType::GROUPBOX:
-+				m_eType = FRAME;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_LABEL |
-+					CCA_PRINTABLE | CCA_TITLE | CCA_FOR;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+				break;
-+
-+			case FormComponentType::IMAGECONTROL:
-+				m_eType = IMAGE_FRAME;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_IMAGE_DATA |
-+					CCA_PRINTABLE | CCA_READONLY | CCA_TITLE;
-+				m_nIncludeDatabase = DA_DATA_FIELD;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+				break;
-+
-+			case FormComponentType::HIDDENCONTROL:
-+				m_eType = HIDDEN;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_VALUE;
-+				break;
-+
-+			case FormComponentType::GRIDCONTROL:
-+				m_eType = GRID;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_PRINTABLE |
-+					CCA_TAB_INDEX | CCA_TAB_STOP | CCA_TITLE;
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+				break;
-+
-+			case FormComponentType::SCROLLBAR:
-+			case FormComponentType::SPINBUTTON:
-+				m_eType = VALUERANGE;
-+				m_nIncludeCommon =
-+					CCA_NAME | CCA_SERVICE_NAME | CCA_DISABLED | CCA_PRINTABLE |
-+                    CCA_TITLE | CCA_CURRENT_VALUE | CCA_VALUE | CCA_ORIENTATION;
-+                m_nIncludeSpecial = SCA_MAX_VALUE | SCA_STEP_SIZE | SCA_MIN_VALUE | SCA_REPEAT_DELAY;
-+
-+                if ( m_nClassId == FormComponentType::SCROLLBAR )
-+                    m_nIncludeSpecial |= SCA_PAGE_STEP_SIZE ;
-+
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+                break;
-+
-+            default:
-+				OSL_ENSURE(sal_False, "OControlExport::examineControl: unknown control type (class id)!");
-+                // NO break!
-+
-+            case FormComponentType::NAVIGATIONBAR:
-+                // TODO: should we have an own file format for this?
-+                // NO break
-+
-+            case FormComponentType::CONTROL:
-+				m_eType = GENERIC_CONTROL;
-+				// unknown control type
-+				m_nIncludeCommon = CCA_NAME | CCA_SERVICE_NAME;
-+					// at least a name should be there, 'cause without a name the control could never have been
-+					// inserted into it's parent container
-+					// In addition, the service name is absolutely necessary to create the control upon reading.
-+				m_nIncludeEvents = EA_CONTROL_EVENTS;
-+					// we always should be able to export events - this is not control type dependent
-+				break;
-+		}
-+
-+		// in general, all control types need to export the control id
-+		m_nIncludeCommon |= CCA_CONTROL_ID;
-+
-+        // is is a control bound to a calc cell?
-+        if ( FormCellBindingHelper::livesInSpreadsheetDocument( m_xProps ) )
-+        {
-+            FormCellBindingHelper aHelper( m_xProps, NULL );
-+            {
-+                if ( aHelper.isCellBinding( aHelper.getCurrentBinding( ) ) )
-+                {
-+                    m_nIncludeBindings |= BA_LINKED_CELL;
-+                    if ( m_nClassId == FormComponentType::LISTBOX )
-+                        m_nIncludeBindings |= BA_LIST_LINKING_TYPE;
-+                }
-+            }
-+
-+            // is it a list-like control which uses a calc cell range as list source?
-+            {
-+                if ( aHelper.isCellRangeListSource( aHelper.getCurrentListSource( ) ) )
-+                    m_nIncludeBindings |= BA_LIST_CELL_RANGE;
-+            }
-+        }
-+
-+        // is control bound to XForms?
-+        if( getXFormsBindName( m_xProps ).getLength() > 0 )
-+        {
-+            m_nIncludeBindings |= BA_XFORMS_BIND;
-+        }
-+
-+        // is (list-)control bound to XForms list?
-+        if( getXFormsListBindName( m_xProps ).getLength() > 0 )
-+        {
-+            m_nIncludeBindings |= BA_XFORMS_LISTBIND;
-+        }
-+
-+        // does the control have an XForms submission?
-+        if( getXFormsSubmissionName( m_xProps ).getLength() > 0 )
-+        {
-+            m_nIncludeBindings |= BA_XFORMS_SUBMISSION;
-+        }
-+	}
-+
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportCellBindingAttributes( bool _bIncludeListLinkageType )
-+    {
-+        try
-+        {
-+            FormCellBindingHelper aHelper( m_xProps, NULL );
-+            Reference< XValueBinding > xBinding( aHelper.getCurrentBinding() );
-+            OSL_ENSURE( xBinding.is(), "OControlExport::exportCellBindingAttributes: invalid bindable or invalid binding!" );
-+            if ( xBinding.is() )
-+            {
-+                // ....................................................
-+    			AddAttribute(
-+                    OAttributeMetaData::getBindingAttributeNamespace( BA_LINKED_CELL ),
-+                    OAttributeMetaData::getBindingAttributeName( BA_LINKED_CELL ),
-+                    aHelper.getStringAddressFromCellBinding( xBinding )
-+                );
-+
-+                // ....................................................
-+                if ( _bIncludeListLinkageType )
-+                {
-+                    sal_Int16 nLinkageType = aHelper.isCellIntegerBinding( xBinding ) ? 1 : 0;
-+
-+                    ::rtl::OUStringBuffer sBuffer;
-+			        m_rContext.getGlobalContext().GetMM100UnitConverter().convertEnum(
-+                        sBuffer,
-+                        (sal_uInt16)nLinkageType,
-+                        OEnumMapper::getEnumMap( OEnumMapper::epListLinkageType )
-+                    );
-+
-+                    AddAttribute(
-+                        OAttributeMetaData::getBindingAttributeNamespace( BA_LIST_LINKING_TYPE ),
-+                        OAttributeMetaData::getBindingAttributeName( BA_LIST_LINKING_TYPE ),
-+                        sBuffer.makeStringAndClear()
-+                    );
-+                }
-+
-+            }
-+        }
-+        catch( const Exception& )
-+        {
-+            OSL_ENSURE( sal_False, "OControlExport::exportCellBindingAttributes: caught an exception!" );
-+        }
-+    }
-+
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportXFormsBindAttributes()
-+    {
-+        rtl::OUString sBindName = getXFormsBindName( m_xProps );
-+        AddAttribute( XML_NAMESPACE_XFORMS, XML_BIND, sBindName );
-+    }
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportXFormsListAttributes()
-+    {
-+        rtl::OUString sBindName = getXFormsListBindName( m_xProps );
-+        AddAttribute( XML_NAMESPACE_FORM, XML_XFORMS_LIST_SOURCE, sBindName );
-+    }
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportXFormsSubmissionAttributes()
-+    {
-+        rtl::OUString sSubmission = getXFormsSubmissionName( m_xProps );
-+        AddAttribute( XML_NAMESPACE_FORM, XML_XFORMS_SUBMISSION, sSubmission );
-+    }
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportCellListSourceRange( )
-+    {
-+        try
-+        {
-+            Reference< XListEntrySink > xSink( m_xProps, UNO_QUERY );
-+            Reference< XListEntrySource > xSource;
-+            if ( xSink.is() )
-+                xSource = xSource.query( xSink->getListEntrySource() );
-+            OSL_ENSURE( xSource.is(), "OControlExport::exportCellListSourceRange: list source or sink!" );
-+            if ( xSource.is() )
-+            {
-+                FormCellBindingHelper aHelper( m_xProps, NULL );
-+
-+    			AddAttribute(
-+                    OAttributeMetaData::getBindingAttributeNamespace( BA_LIST_CELL_RANGE ),
-+                    OAttributeMetaData::getBindingAttributeName( BA_LIST_CELL_RANGE ),
-+                    aHelper.getStringAddressFromCellListSource( xSource )
-+                );
-+            }
-+        }
-+        catch( const Exception& )
-+        {
-+            OSL_ENSURE( sal_False, "OControlExport::exportCellListSourceRange: caught an exception!" );
-+        }
-+    }
-+
-+	//---------------------------------------------------------------------
-+    void OControlExport::exportImagePositionAttributes()
-+    {
-+        try
-+        {
-+            sal_Int16 nImagePosition = ImagePosition::Centered;
-+            OSL_VERIFY( m_xProps->getPropertyValue( PROPERTY_IMAGE_POSITION ) >>= nImagePosition );
-+            OSL_ENSURE( ( nImagePosition >= ImagePosition::LeftTop ) && ( nImagePosition <= ImagePosition::Centered ),
-+                "OControlExport::exportImagePositionAttributes: don't know this image position!" );
-+
-+            if ( ( nImagePosition < ImagePosition::LeftTop ) || ( nImagePosition > ImagePosition::Centered ) )
-+                // this is important to prevent potential buffer overflows below, so don't optimize
-+                nImagePosition = ImagePosition::Centered;
-+
-+            if ( nImagePosition == ImagePosition::Centered )
-+            {
-+    		    AddAttribute( XML_NAMESPACE_FORM, GetXMLToken( XML_IMAGE_POSITION ), GetXMLToken( XML_CENTER ) );
-+            }
-+            else
-+            {
-+                XMLTokenEnum eXmlImagePositions[] =
-+                {
-+                    XML_START, XML_END, XML_TOP, XML_BOTTOM
-+                };
-+                XMLTokenEnum eXmlImageAligns[] =
-+                {
-+                    XML_START, XML_CENTER, XML_END
-+                };
-+
-+                XMLTokenEnum eXmlImagePosition = eXmlImagePositions[ nImagePosition / 3 ];
-+                XMLTokenEnum eXmlImageAlign    = eXmlImageAligns   [ nImagePosition % 3 ];
-+
-+    		    AddAttribute( XML_NAMESPACE_FORM, GetXMLToken( XML_IMAGE_POSITION ), GetXMLToken( eXmlImagePosition ) );
-+    		    AddAttribute( XML_NAMESPACE_FORM, GetXMLToken( XML_IMAGE_ALIGN    ), GetXMLToken( eXmlImageAlign    ) );
-+            }
-+
-+            exportedProperty( PROPERTY_IMAGE_POSITION );
-+            // some of the controls which have an ImagePosition also have an ImageAlign for compatibility
-+            // reasons. Since the ImageAlign values simply represent a sub set of the ImagePosition values,
-+            // we don't need to export ImageAlign anymore
-+            exportedProperty( PROPERTY_IMAGE_ALIGN );
-+        }
-+        catch( const Exception& )
-+        {
-+            DBG_UNHANDLED_EXCEPTION();
-+        }
-+    }
-+
-+	//---------------------------------------------------------------------
-+	bool OControlExport::controlHasActiveDataBinding() const
-+    {
-+        try
-+        {
-+            // currently exchanging the data with a database column?
-+            ::rtl::OUString sBoundFieldPropertyName( RTL_CONSTASCII_USTRINGPARAM( "BoundField" ) );
-+            if ( m_xPropertyInfo.is() && m_xPropertyInfo->hasPropertyByName( sBoundFieldPropertyName ) )
-+            {
-+                Reference< XPropertySet > xBoundField;
-+                m_xProps->getPropertyValue( sBoundFieldPropertyName ) >>= xBoundField;
-+                if ( xBoundField.is() )
-+                    return true;
-+            }
-+
-+            // currently exchanging data with an external binding?
-+            Reference< XBindableValue > xBindable( m_xProps, UNO_QUERY );
-+            if ( xBindable.is() && xBindable->getValueBinding().is() )
-+                return true;
-+        }
-+        catch( const Exception& )
-+        {
-+        	OSL_ENSURE( sal_False, "OColumnExport::controlHasActiveDataBinding: caught an exception!" );
-+        }
-+
-+        return false;
-+    }
-+
-+	//---------------------------------------------------------------------
-+	bool OControlExport::controlHasUserSuppliedListEntries() const
-+    {
-+        try
-+        {
-+            // an external list source?
-+            Reference< XListEntrySink > xEntrySink( m_xProps, UNO_QUERY );
-+            if ( xEntrySink.is() && xEntrySink->getListEntrySource().is() )
-+                return false;
-+
-+            if ( m_xPropertyInfo.is() && m_xPropertyInfo->hasPropertyByName( PROPERTY_LISTSOURCETYPE ) )
-+            {
-+                ListSourceType eListSourceType = ListSourceType_VALUELIST;
-+                OSL_VERIFY( m_xProps->getPropertyValue( PROPERTY_LISTSOURCETYPE ) >>= eListSourceType );
-+                if ( eListSourceType == ListSourceType_VALUELIST )
-+                    // for value lists, the list entries as entered by the user are used
-+                    return true;
-+
-+                // for every other type, the list entries are filled with some data obtained
-+                // from a database - if and only if the ListSource property is not empty
-+                return ( 0 == getScalarListSourceValue().getLength() );
-+            }
-+        }
-+        catch( const Exception& )
-+        {
-+        	OSL_ENSURE( sal_False, "OControlExport::controlHasUserSuppliedListEntries: caught an exception!" );
-+        }
-+
-+        OSL_ENSURE( sal_False, "OControlExport::controlHasUserSuppliedListEntries: unreachable code!" );
-+            // this method should be called for list and combo boxes only
-+        return true;
-+    }
-+
-+	//=====================================================================
-+	//= OColumnExport
-+	//=====================================================================
-+	//---------------------------------------------------------------------
-+	OColumnExport::OColumnExport(IFormsExportContext& _rContext, const Reference< XPropertySet >& _rxControl, const ::rtl::OUString& _rControlId,
-+		const Sequence< ScriptEventDescriptor >& _rEvents)
-+		:OControlExport(_rContext, _rxControl, _rControlId, ::rtl::OUString(), _rEvents)
-+	{
-+	}
-+
-+	//---------------------------------------------------------------------
-+	OColumnExport::~OColumnExport()
-+	{
-+		implEndElement();
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OColumnExport::exportServiceNameAttribute()
-+	{
-+		// the attribute "service name" (which has a slightly different meaning for columns
-+		DBG_CHECK_PROPERTY( PROPERTY_COLUMNSERVICENAME, ::rtl::OUString );
-+		::rtl::OUString sColumnServiceName;
-+		m_xProps->getPropertyValue(PROPERTY_COLUMNSERVICENAME) >>= sColumnServiceName;
-+		// the service name is a full qualified one (i.e. com.sun.star.form.TextField), but the
-+		// real service name for the column (for use with the XGridColumnFactory) is only the last
-+		// token of this complete name.
-+		sal_Int32 nLastSep = sColumnServiceName.lastIndexOf('.');
-+		OSL_ENSURE(-1 != nLastSep, "OColumnExport::startExportElement: invalid service name!");
-+		sColumnServiceName = sColumnServiceName.copy(nLastSep + 1);
-+		sColumnServiceName =
-+			m_rContext.getGlobalContext().GetNamespaceMap().GetQNameByKey(
-+				XML_NAMESPACE_OOO, sColumnServiceName );
-+		// add the attribute
-+		AddAttribute( OAttributeMetaData::getCommonControlAttributeNamespace(CCA_SERVICE_NAME)
-+					, OAttributeMetaData::getCommonControlAttributeName(CCA_SERVICE_NAME)
-+					, sColumnServiceName);
-+		// flag the property as "handled"
-+		exportedProperty(PROPERTY_COLUMNSERVICENAME);
-+
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OColumnExport::getOuterXMLElementName() const
-+	{
-+		return "column";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OColumnExport::exportAttributes()
-+	{
-+		OControlExport::exportAttributes();
-+
-+		// the attribute "label"
-+		exportStringPropertyAttribute(
-+			OAttributeMetaData::getCommonControlAttributeNamespace(CCA_LABEL),
-+			OAttributeMetaData::getCommonControlAttributeName(CCA_LABEL),
-+			PROPERTY_LABEL);
-+
-+		// the style attribute
-+		::rtl::OUString sStyleName = m_rContext.getObjectStyleName( m_xProps );
-+		if ( sStyleName.getLength() )
-+		{
-+			AddAttribute(
-+				OAttributeMetaData::getSpecialAttributeNamespace( SCA_COLUMN_STYLE_NAME ),
-+				OAttributeMetaData::getSpecialAttributeName( SCA_COLUMN_STYLE_NAME ),
-+				sStyleName
-+			);
-+		}
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OColumnExport::examine()
-+	{
-+		OControlExport::examine();
-+
-+		// grid columns miss some properties of the controls they're representing
-+		m_nIncludeCommon &= ~(CCA_FOR | CCA_PRINTABLE | CCA_TAB_INDEX | CCA_TAB_STOP | CCA_LABEL);
-+		m_nIncludeSpecial &= ~(SCA_ECHO_CHAR | SCA_AUTOMATIC_COMPLETION | SCA_MULTIPLE | SCA_MULTI_LINE | SCA_IS_TRISTATE);
-+
-+		if (FormComponentType::DATEFIELD != m_nClassId)
-+			// except date fields, no column has the DropDown property
-+			m_nIncludeCommon &= ~CCA_DROPDOWN;
-+	}
-+
-+	//=====================================================================
-+	//= OFormExport
-+	//=====================================================================
-+	//---------------------------------------------------------------------
-+	OFormExport::OFormExport(IFormsExportContext& _rContext, const Reference< XPropertySet >& _rxForm,
-+		const Sequence< ScriptEventDescriptor >& _rEvents)
-+		:OElementExport(_rContext, _rxForm, _rEvents)
-+		,m_bCreateConnectionResourceElement(sal_False)
-+	{
-+		OSL_ENSURE(m_xProps.is(), "OFormExport::OFormExport: invalid arguments!");
-+	}
-+
-+	//---------------------------------------------------------------------
-+	const sal_Char* OFormExport::getXMLElementName() const
-+	{
-+		return "form";
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OFormExport::exportSubTags()
-+	{
-+		if ( m_bCreateConnectionResourceElement && m_xProps.is() )
-+		{
-+			m_rContext.getGlobalContext().ClearAttrList();
-+			::rtl::OUString sPropValue;
-+			m_xProps->getPropertyValue( PROPERTY_DATASOURCENAME ) >>= sPropValue; // if set it is a file url
-+			if ( !sPropValue.getLength() )
-+				m_xProps->getPropertyValue( PROPERTY_URL ) >>= sPropValue;
-+			if ( sPropValue.getLength() )
-+				AddAttribute(
-+					OAttributeMetaData::getCommonControlAttributeNamespace(CCA_TARGET_LOCATION),
-+					OAttributeMetaData::getCommonControlAttributeName(CCA_TARGET_LOCATION),
-+					sPropValue);
-+			if ( m_rContext.getGlobalContext().GetAttrList().getLength() )
-+			{
-+				SvXMLElementExport aFormElement(m_rContext.getGlobalContext(), XML_NAMESPACE_FORM, xmloff::token::XML_CONNECTION_RESOURCE, sal_True, sal_True);
-+			}
-+		}
-+
-+		// let the base class export the remaining properties and the events
-+		OElementExport::exportSubTags();
-+		// loop through all children
-+		Reference< XIndexAccess > xCollection(m_xProps, UNO_QUERY);
-+		OSL_ENSURE(xCollection.is(), "OFormLayerXMLExport::implExportForm: a form which is not an index access? Suspicïous!");
-+
-+		if (xCollection.is())
-+			m_rContext.exportCollectionElements(xCollection);
-+	}
-+
-+	//---------------------------------------------------------------------
-+	void OFormExport::exportAttributes()
-+	{
-+		sal_Int32 i=0;
-+
-+		// ---------------------
-+		// the string properties
-+		{
-+			static FormAttributes eStringPropertyIds[] =
-+			{
-+				faName, /*faAction,*/ faCommand, faFilter, faOrder
-+			};
-+			static ::rtl::OUString aStringPropertyNames[] =
-+			{
-+				PROPERTY_NAME, /*PROPERTY_TARGETURL,*/ PROPERTY_COMMAND, PROPERTY_FILTER, PROPERTY_ORDER
-+			};
-+			sal_Int32 nIdCount = sizeof(eStringPropertyIds) / sizeof(eStringPropertyIds[0]);
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nNameCount = sizeof(aStringPropertyNames) / sizeof(aStringPropertyNames[0]);
-+			OSL_ENSURE((nIdCount == nNameCount),
-+				"OFormExport::exportAttributes: somebody tampered with the maps (1)!");
-+		#endif
-+			for (i=0; i<nIdCount; ++i)
-+				exportStringPropertyAttribute(
-+					OAttributeMetaData::getFormAttributeNamespace(eStringPropertyIds[i]),
-+					OAttributeMetaData::getFormAttributeName(eStringPropertyIds[i]),
-+					aStringPropertyNames[i]);
-+			// now export the data source name or databaselocation or connection resource
-+			::rtl::OUString sPropValue;
-+			m_xProps->getPropertyValue( PROPERTY_DATASOURCENAME ) >>= sPropValue;
-+            m_bCreateConnectionResourceElement = !sPropValue.getLength();
-+			if ( !m_bCreateConnectionResourceElement )
-+			{
-+				INetURLObject aURL(sPropValue);
-+                m_bCreateConnectionResourceElement = ( aURL.GetProtocol() == INET_PROT_FILE );
-+				if ( !m_bCreateConnectionResourceElement )
-+					exportStringPropertyAttribute(
-+						OAttributeMetaData::getFormAttributeNamespace(faDatasource),
-+						OAttributeMetaData::getFormAttributeName(faDatasource),
-+						PROPERTY_DATASOURCENAME);
-+			}
-+			else
-+				exportedProperty(PROPERTY_URL);
-+			if ( m_bCreateConnectionResourceElement )
-+				exportedProperty(PROPERTY_DATASOURCENAME);
-+		}
-+
-+		// ----------------------
-+		// the boolean properties
-+		{
-+			static FormAttributes eBooleanPropertyIds[] =
-+			{
-+				faAllowDeletes, faAllowInserts, faAllowUpdates, faApplyFilter, faEscapeProcessing, faIgnoreResult
-+			};
-+			static const ::rtl::OUString* pBooleanPropertyNames[] =
-+			{
-+				&PROPERTY_ALLOWDELETES, &PROPERTY_ALLOWINSERTS, &PROPERTY_ALLOWUPDATES, &PROPERTY_APPLYFILTER, &PROPERTY_ESCAPEPROCESSING, &PROPERTY_IGNORERESULT
-+			};
-+			static sal_Int8 nBooleanPropertyAttrFlags[] =
-+			{
-+				BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_FALSE
-+			};
-+			sal_Int32 nIdCount = sizeof(eBooleanPropertyIds) / sizeof(eBooleanPropertyIds[0]);
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nNameCount = sizeof(pBooleanPropertyNames) / sizeof(pBooleanPropertyNames[0]);
-+			sal_Int32 nFlagsCount = sizeof(nBooleanPropertyAttrFlags) / sizeof(nBooleanPropertyAttrFlags[0]);
-+			OSL_ENSURE((nIdCount == nNameCount) && (nNameCount == nFlagsCount),
-+				"OFormExport::exportAttributes: somebody tampered with the maps (2)!");
-+		#endif
-+			for (i=0; i<nIdCount; ++i)
-+				exportBooleanPropertyAttribute(
-+					OAttributeMetaData::getFormAttributeNamespace(eBooleanPropertyIds[i]),
-+					OAttributeMetaData::getFormAttributeName(eBooleanPropertyIds[i]),
-+					*(pBooleanPropertyNames[i]),
-+					nBooleanPropertyAttrFlags[i]
-+				);
-+		}
-+
-+		// -------------------
-+		// the enum properties
-+		{
-+			static FormAttributes eEnumPropertyIds[] =
-+			{
-+				faEnctype, faMethod, faCommandType, faNavigationMode, faTabbingCycle
-+			};
-+			static const sal_Char* pEnumPropertyNames[] =
-+			{
-+				PROPERTY_SUBMIT_ENCODING, PROPERTY_SUBMIT_METHOD, PROPERTY_COMMAND_TYPE, PROPERTY_NAVIGATION, PROPERTY_CYCLE
-+			};
-+			static OEnumMapper::EnumProperties eEnumPropertyMaps[] =
-+			{
-+				OEnumMapper::epSubmitEncoding, OEnumMapper::epSubmitMethod, OEnumMapper::epCommandType, OEnumMapper::epNavigationType, OEnumMapper::epTabCyle
-+			};
-+			static sal_Int32 nEnumPropertyAttrDefaults[] =
-+			{
-+				FormSubmitEncoding_URL, FormSubmitMethod_GET, CommandType::COMMAND, NavigationBarMode_CURRENT, TabulatorCycle_RECORDS
-+			};
-+			static sal_Bool nEnumPropertyAttrDefaultFlags[] =
-+			{
-+				sal_False, sal_False, sal_False, sal_False, sal_True
-+			};
-+			sal_Int32 nIdCount = sizeof(eEnumPropertyIds) / sizeof(eEnumPropertyIds[0]);
-+		#if OSL_DEBUG_LEVEL > 0
-+			sal_Int32 nNameCount = sizeof(pEnumPropertyNames) / sizeof(pEnumPropertyNames[0]);
-+			sal_Int32 nDefaultCount = sizeof(nEnumPropertyAttrDefaults) / sizeof(nEnumPropertyAttrDefaults[0]);
-+			sal_Int32 nDefaultFlagCount = sizeof(nEnumPropertyAttrDefaultFlags) / sizeof(nEnumPropertyAttrDefaultFlags[0]);
-+			sal_Int32 nMapCount = sizeof(eEnumPropertyMaps) / sizeof(eEnumPropertyMaps[0]);
-+			OSL_ENSURE((nIdCount == nNameCount) && (nNameCount == nDefaultCount) && (nDefaultCount == nDefaultFlagCount) && (nDefaultFlagCount == nMapCount),
-+				"OFormExport::exportAttributes: somebody tampered with the maps (3)!");
-+		#endif
-+			for (i=0; i<nIdCount; ++i)
-+				exportEnumPropertyAttribute(
-+					OAttributeMetaData::getFormAttributeNamespace(eEnumPropertyIds[i]),
-+					OAttributeMetaData::getFormAttributeName(eEnumPropertyIds[i]),
-+					pEnumPropertyNames[i],
-+					OEnumMapper::getEnumMap(eEnumPropertyMaps[i]),
-+					nEnumPropertyAttrDefaults[i],
-+					nEnumPropertyAttrDefaultFlags[i]
-+                );
-+		}
-+
-+		// the service name
-+		exportServiceNameAttribute();
-+		// the target frame
-+		exportTargetFrameAttribute();
-+		// the target URL
-+		exportTargetLocationAttribute();
-+
-+		// master fields
-+		exportStringSequenceAttribute(
-+			OAttributeMetaData::getFormAttributeNamespace(faMasterFields),
-+			OAttributeMetaData::getFormAttributeName(faMasterFields),
-+			PROPERTY_MASTERFIELDS);
-+		// detail fields
-+		exportStringSequenceAttribute(
-+			OAttributeMetaData::getFormAttributeNamespace(faDetailFiels),
-+			OAttributeMetaData::getFormAttributeName(faDetailFiels),
-+			PROPERTY_DETAILFIELDS);
-+	}
-+//.........................................................................
-+}	// namespace xmloff
-+//.........................................................................
---- toolkit/inc/toolkit/awt/vclxwindow.hxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ toolkit/inc/toolkit/awt/vclxwindow.hxx	2008-04-11 16:49:35.000000000 +0800
-@@ -0,0 +1,263 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: vclxwindow.hxx,v $
-+ * $Revision: 1.28 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _TOOLKIT_AWT_VCLXWINDOW_HXX_
-+#define _TOOLKIT_AWT_VCLXWINDOW_HXX_
-+
-+#include <toolkit/dllapi.h>
-+#include <com/sun/star/awt/XWindow.hpp>
-+#include <com/sun/star/awt/XWindow2.hpp>
-+#include <com/sun/star/awt/XVclWindowPeer.hpp>
-+#include <com/sun/star/awt/XLayoutConstrains.hpp>
-+#include <com/sun/star/awt/XView.hpp>
-+#include <com/sun/star/awt/XPointer.hpp>
-+#include <com/sun/star/awt/XGraphics.hpp>
-+#include <com/sun/star/beans/XPropertyChangeListener.hpp>
-+#include <com/sun/star/beans/XPropertySetInfo.hpp>
-+#include <com/sun/star/accessibility/XAccessible.hpp>
-+#include <com/sun/star/accessibility/XAccessibleContext.hpp>
-+#include <com/sun/star/awt/XDockableWindow.hpp>
-+#include <cppuhelper/weak.hxx>
-+#include <osl/mutex.hxx>
-+
-+#include <toolkit/awt/vclxdevice.hxx>
-+#include <toolkit/helper/listenermultiplexer.hxx>
-+
-+#include <tools/gen.hxx>	// Size
-+#include <tools/link.hxx>
-+
-+#include <stdarg.h>
-+#include <list>
-+
-+class Window;
-+class VclSimpleEvent;
-+class VclWindowEvent;
-+struct AccessibilityInfos;
-+struct SystemParentData;
-+
-+namespace toolkit
-+{
-+    class IAccessibleFactory;
-+}
-+
-+
-+//	----------------------------------------------------
-+//	class VCLXWINDOW
-+//	----------------------------------------------------
-+
-+class UnoPropertyArrayHelper;
-+class VCLXWindowImpl;
-+class TOOLKIT_DLLPUBLIC VCLXWindow :	public ::com::sun::star::awt::XWindow2,
-+					public ::com::sun::star::awt::XVclWindowPeer,
-+					public ::com::sun::star::awt::XLayoutConstrains,
-+					public ::com::sun::star::awt::XView,
-+					public ::com::sun::star::awt::XDockableWindow,
-+					public ::com::sun::star::accessibility::XAccessible,
-+					public ::com::sun::star::lang::XEventListener,
-+					public ::com::sun::star::beans::XPropertySetInfo,
-+					public VCLXDevice
-+{
-+private:
-+	EventListenerMultiplexer		maEventListeners;
-+	FocusListenerMultiplexer		maFocusListeners;
-+	WindowListenerMultiplexer		maWindowListeners;
-+	KeyListenerMultiplexer			maKeyListeners;
-+	MouseListenerMultiplexer		maMouseListeners;
-+	MouseMotionListenerMultiplexer	maMouseMotionListeners;
-+	PaintListenerMultiplexer		maPaintListeners;
-+	VclContainerListenerMultiplexer	maContainerListeners;
-+	TopWindowListenerMultiplexer	maTopWindowListeners;
-+
-+	::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer>	mxPointer;
-+	::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics>	mxViewGraphics;
-+
-+	::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > mxAccessibleContext;
-+	::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener> mxDockableWindowListener;
-+
-+	ULONG                           mnListenerLockLevel;
-+	ULONG                           nDummy2;
-+    VCLXWindowImpl*                 mpImpl;
-+    UnoPropertyArrayHelper         *mpPropHelper;
-+
-+
-+	sal_Bool						mbDisposing : 1;
-+	sal_Bool						mbDesignMode : 1;
-+	sal_Bool						mbSynthesizingVCLEvent : 1;
-+    sal_Bool                        mbWithDefaultProps : 1;
-+	sal_Bool						mbDrawingOntoParent;
-+
-+    UnoPropertyArrayHelper *GetPropHelper();
-+	
-+protected:
-+	Size			ImplCalcWindowSize( const Size& rOutSz ) const;
-+	DECL_LINK(      WindowEventListener, VclSimpleEvent* );
-+
-+	virtual void    ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent );
-+	virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >
-+					CreateAccessibleContext();
-+
-+    void            SetSynthesizingVCLEvent( sal_Bool b )   { mbSynthesizingVCLEvent = b; }
-+    BOOL            IsSynthesizingVCLEvent() const          { return mbSynthesizingVCLEvent; }
-+    void 	    SetSystemParent_Impl( const com::sun::star::uno::Any& rHandle );
-+
-+    ::toolkit::IAccessibleFactory&  getAccessibleFactory();
-+
-+    // helper ...
-+    static void     PushPropertyIds( std::list< sal_uInt16 > &aIds, int nFirstId, ...);
-+    // for use in controls/
-+    static void     ImplGetPropertyIds( std::list< sal_uInt16 > &aIds,
-+                                        bool bWithDefaults = false );
-+    virtual void    GetPropertyIds( std::list< sal_uInt16 > &aIds )
-+        { return ImplGetPropertyIds( aIds, mbWithDefaultProps ); }
-+
-+public:
-+	VCLXWindow( bool bWithDefaultProps = false );
-+	~VCLXWindow();
-+
-+	virtual void	SetWindow( Window* pWindow );
-+	Window*			GetWindow() const 									{ return (Window*)GetOutputDevice(); }
-+	::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics>	GetViewGraphics() const	{ return mxViewGraphics; }
-+
-+    void    suspendVclEventListening( );
-+    void    resumeVclEventListening( );
-+
-+	EventListenerMultiplexer&		GetEventListeners()		{ return maEventListeners; }
-+	FocusListenerMultiplexer&		GetFocusListeners()		{ return maFocusListeners; }
-+	WindowListenerMultiplexer&		GetWindowListeners() 	{ return maWindowListeners; }
-+	KeyListenerMultiplexer&			GetKeyListeners() 		{ return maKeyListeners; }
-+	MouseListenerMultiplexer&		GetMouseListeners() 	{ return maMouseListeners; }
-+	MouseMotionListenerMultiplexer&	GetMouseMotionListeners() { return maMouseMotionListeners; }
-+	PaintListenerMultiplexer&		GetPaintListeners() 	{ return maPaintListeners; }
-+	VclContainerListenerMultiplexer& GetContainerListeners() { return maContainerListeners; }
-+	TopWindowListenerMultiplexer&	GetTopWindowListeners()	{ return maTopWindowListeners; }
-+
-+	// ::com::sun::star::uno::XInterface
-+    ::com::sun::star::uno::Any	SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException);
-+	void						SAL_CALL acquire() throw()	{ OWeakObject::acquire(); }
-+	void						SAL_CALL release() throw()	{ OWeakObject::release(); }
-+
-+	// ::com::sun::star::lang::XUnoTunnel
-+	static const ::com::sun::star::uno::Sequence< sal_Int8 >&	GetUnoTunnelId() throw();
-+	static VCLXWindow*											GetImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rxIFace ) throw();
-+	sal_Int64													SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& rIdentifier ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::lang::XTypeProvider
-+	::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type >	SAL_CALL getTypes() throw(::com::sun::star::uno::RuntimeException);
-+	::com::sun::star::uno::Sequence< sal_Int8 >						SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException);
-+
-+
-+	// ::com::sun::star::lang::XEventListener
-+    virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::lang::XComponent
-+    void SAL_CALL dispose(  ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XWindow
-+	void SAL_CALL setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException);
-+	::com::sun::star::awt::Rectangle SAL_CALL getPosSize(  ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL setVisible( sal_Bool Visible ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL setEnable( sal_Bool Enable ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL setFocus(  ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+	void SAL_CALL removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rrxListener ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XWindowPeer
-+    ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > SAL_CALL getToolkit(  ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setPointer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer >& Pointer ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setBackground( sal_Int32 Color ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL invalidate( sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL invalidateRect( const ::com::sun::star::awt::Rectangle& Rect, sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XVclWindowPeer
-+    sal_Bool SAL_CALL isChild( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Peer ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setDesignMode( sal_Bool bOn ) throw(::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isDesignMode(  ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL enableClipSiblings( sal_Bool bClip ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setForeground( sal_Int32 Color ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setControlFont( const ::com::sun::star::awt::FontDescriptor& aFont ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL getStyles( sal_Int16 nType, ::com::sun::star::awt::FontDescriptor& Font, sal_Int32& ForegroundColor, sal_Int32& BackgroundColor ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setProperty( const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::uno::Any SAL_CALL getProperty( const ::rtl::OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XLayoutConstrains
-+    ::com::sun::star::awt::Size SAL_CALL getMinimumSize(  ) throw(::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::awt::Size SAL_CALL getPreferredSize(  ) throw(::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::awt::Size SAL_CALL calcAdjustedSize( const ::com::sun::star::awt::Size& aNewSize ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XView
-+    sal_Bool SAL_CALL setGraphics( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& aDevice ) throw(::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > SAL_CALL getGraphics(  ) throw(::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::awt::Size SAL_CALL getSize(  ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setZoom( float fZoomX, float fZoomY ) throw(::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::accessibility::XAccessible
-+    ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext(  ) throw (::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XDockableWindow
-+    void SAL_CALL addDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL removeDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL enableDocking( sal_Bool bEnable ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isFloating(  ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL setFloatingMode( sal_Bool bFloating ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL lock(  ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL unlock(  ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isLocked(  ) throw (::com::sun::star::uno::RuntimeException);
-+    void SAL_CALL startPopupMode( const ::com::sun::star::awt::Rectangle& WindowRect ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isInPopupMode(  ) throw (::com::sun::star::uno::RuntimeException);
-+
-+	// ::com::sun::star::awt::XWindow2
-+    void SAL_CALL setOutputSize( const ::com::sun::star::awt::Size& aSize ) throw (::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::awt::Size SAL_CALL getOutputSize(  ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isVisible(  ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isActive(  ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL isEnabled(  ) throw (::com::sun::star::uno::RuntimeException);
-+    sal_Bool SAL_CALL hasFocus(  ) throw (::com::sun::star::uno::RuntimeException);
-+
-+    // ::com::sun::star::beans::XPropertySetInfo
-+    ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL getProperties(  ) throw (::com::sun::star::uno::RuntimeException);
-+    ::com::sun::star::beans::Property SAL_CALL getPropertyByName( const ::rtl::OUString& aName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
-+    ::sal_Bool SAL_CALL hasPropertyByName( const ::rtl::OUString& Name ) throw (::com::sun::star::uno::RuntimeException);
-+};
-+
-+#endif // _TOOLKIT_AWT_VCLXWINDOW_HXX_
-+
---- toolkit/inc/toolkit/helper/property.hxx.orig	2008-05-20 22:32:24.000000000 +0800
-+++ toolkit/inc/toolkit/helper/property.hxx	2008-06-04 12:39:56.000000000 +0800
-@@ -188,6 +188,7 @@ namespace rtl {
- #define BASEPROPERTY_URL                            134  // ::rtl::OUString
- #define BASEPROPERTY_UNIT                           135  // ::awt::FieldUnit
- #define BASEPROPERTY_CUSTOMUNITTEXT                 136  // ::rtl::OUString
-+#define BASEPROPERTY_VISIBLE                        137  // sal_Bool
+--- xmloff/source/forms/strings.hxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ xmloff/source/forms/strings.hxx	2008-06-02 14:54:35.000000000 +0800
+@@ -114,6 +114,7 @@ namespace xmloff
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_TABSTOP,			"Tabstop" );
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_STATE,				"State" );
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_ENABLED,			"Enabled" );
++	XMLFORM_CONSTASCII_STRING( PROPERTY_ENABLEVISIBLE,		"EnableVisible" );
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_MAXTEXTLENGTH,		"MaxTextLen" );
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_LINECOUNT,			"LineCount" );
+ 	XMLFORM_CONSTASCII_STRING( PROPERTY_TABINDEX,			"TabIndex" );
+--- xmloff/source/forms/formattributes.hxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ xmloff/source/forms/formattributes.hxx	2008-06-02 14:54:35.000000000 +0800
+@@ -69,6 +69,7 @@ namespace xmloff
+ 	#define CCA_VALUE					0x00200000
+     #define CCA_ORIENTATION             0x00400000
+     #define CCA_VISUAL_EFFECT           0x00800000
++    #define CCA_ENABLEVISIBLE                 0x01000000
+ 
+ 	// flags for database control atttributes
+ 	#define DA_BOUND_COLUMN				0x00000001
+--- xmloff/source/forms/formattributes.cxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ xmloff/source/forms/formattributes.cxx	2008-06-02 16:07:23.000000000 +0800
+@@ -60,6 +60,7 @@ namespace xmloff
+ 			case CCA_CURRENT_SELECTED: 	return "current-selected";
+ 			case CCA_CURRENT_VALUE: 	return "current-value";
+ 			case CCA_DISABLED: 			return "disabled";
++			case CCA_ENABLEVISIBLE: 	return "enablevisible";
+ 			case CCA_DROPDOWN: 			return "dropdown";
+ 			case CCA_FOR: 				return "for";
+ 			case CCA_IMAGE_DATA: 		return "image-data";
+--- xmloff/source/forms/elementexport.cxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ xmloff/source/forms/elementexport.cxx	2008-06-02 14:54:35.000000000 +0800
+@@ -523,15 +523,15 @@ namespace xmloff
+ 		{
+ 			static sal_Int32 nBooleanPropertyAttributeIds[] =
+ 			{	// attribute flags
+-				CCA_CURRENT_SELECTED, CCA_DISABLED, CCA_DROPDOWN, CCA_PRINTABLE, CCA_READONLY, CCA_SELECTED, CCA_TAB_STOP
++				CCA_CURRENT_SELECTED, CCA_DISABLED, CCA_DROPDOWN, CCA_PRINTABLE, CCA_READONLY, CCA_SELECTED, CCA_TAB_STOP, CCA_ENABLEVISIBLE
+ 			};
+ 			static const ::rtl::OUString* pBooleanPropertyNames[] =
+ 			{	// property names
+-				&PROPERTY_STATE, &PROPERTY_ENABLED, &PROPERTY_DROPDOWN, &PROPERTY_PRINTABLE, &PROPERTY_READONLY, &PROPERTY_DEFAULT_STATE, &PROPERTY_TABSTOP
++				&PROPERTY_STATE, &PROPERTY_ENABLED, &PROPERTY_DROPDOWN, &PROPERTY_PRINTABLE, &PROPERTY_READONLY, &PROPERTY_DEFAULT_STATE, &PROPERTY_TABSTOP, &PROPERTY_ENABLEVISIBLE
+ 			};
+ 			static sal_Bool nBooleanPropertyAttrFlags[] =
+ 			{	// attribute defaults
+-				BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE | BOOLATTR_INVERSE_SEMANTICS, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_VOID
++				BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE | BOOLATTR_INVERSE_SEMANTICS, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_TRUE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_FALSE, BOOLATTR_DEFAULT_VOID, BOOLATTR_DEFAULT_FALSE
+ 			};
+ 		#if OSL_DEBUG_LEVEL > 0
+ 			sal_Int32 nIdCount = sizeof(nBooleanPropertyAttributeIds) / sizeof(nBooleanPropertyAttributeIds[0]);
+--- toolkit/inc/toolkit/helper/property.hxx.orig	2008-06-02 14:00:51.000000000 +0800
++++ toolkit/inc/toolkit/helper/property.hxx	2008-06-02 14:54:57.000000000 +0800
+@@ -191,6 +191,7 @@ namespace rtl {
+ #define BASEPROPERTY_DIALOGSOURCEURL				132
+ #define BASEPROPERTY_NOLABEL               133   // ::rtl::OUString  added for issue79712
+ #define BASEPROPERTY_URL                   134  // ::rtl::OUString
++#define BASEPROPERTY_ENABLEVISIBLE         137  // sal_Bool
+ #define BASEPROPERTY_GROUPNAME             136  // ::rtl::OUString
  
  // Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen.
- #define BASEPROPERTY_FONTDESCRIPTORPART_START			1000
---- toolkit/source/helper/property.cxx.orig	2008-04-11 17:36:59.000000000 +0800
-+++ toolkit/source/helper/property.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -269,7 +269,8 @@ ImplPropertyInfo* ImplGetPropertyInfos( 
+--- toolkit/source/helper/property.cxx.orig	2008-06-02 13:59:52.000000000 +0800
++++ toolkit/source/helper/property.cxx	2008-06-02 14:54:35.000000000 +0800
+@@ -270,7 +270,8 @@ ImplPropertyInfo* ImplGetPropertyInfos( 
  			DECL_PROP_3		( "RowHeight",				TREE_ROWHEIGHT,			sal_Int32,			BOUND, MAYBEDEFAULT, MAYBEVOID ),
  			DECL_PROP_2		( "InvokesStopNodeEditing",	TREE_INVOKESSTOPNODEEDITING, sal_Bool,		BOUND, MAYBEDEFAULT ),
              DECL_PROP_2     ( "DialogSourceURL",        DIALOGSOURCEURL,        ::rtl::OUString,    BOUND, MAYBEDEFAULT ),
@@ -3444,9 +71,9 @@
              };
  			pPropertyInfos = aImplPropertyInfos;
  			nElements = sizeof( aImplPropertyInfos ) / sizeof( ImplPropertyInfo );
---- toolkit/source/awt/vclxwindow.cxx.orig	2008-05-14 17:47:01.000000000 +0800
-+++ toolkit/source/awt/vclxwindow.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -207,6 +207,8 @@ private:
+--- toolkit/source/awt/vclxwindow.cxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ toolkit/source/awt/vclxwindow.cxx	2008-06-03 11:44:26.000000000 +0800
+@@ -208,6 +208,8 @@ private:
      ::vos::IMutex&                      mrMutex;
      ::toolkit::AccessibilityClient      maAccFactory;
      bool                                mbDisposed;
@@ -3455,7 +82,7 @@
      ::osl::Mutex                        maListenerContainerMutex;
      ::cppu::OInterfaceContainerHelper   maWindow2Listeners;
  
-@@ -228,6 +230,15 @@ public:
+@@ -229,6 +231,15 @@ public:
      */
      VCLXWindowImpl( VCLXWindow& _rAntiImpl, ::vos::IMutex& _rMutex );
  
@@ -3463,1406 +90,121 @@
 +    */
 +    void    setEnableVisible( sal_Bool bEnableVisible ) { mbEnableVisible = bEnableVisible; }
 +    sal_Bool    isEnableVisible() { return mbEnableVisible; }
-+    /** synchronously mbDirectVisible;
-+    */
-+    void    setDirectVisible( sal_Bool bDirectVisible ) { mbDirectVisible = bDirectVisible; }
-+    sal_Bool    isDirectVisible() { return mbDirectVisible; }
-+
-     /** asynchronously notifies a mouse event to the VCLXWindow's XMouseListeners
-     */
-     void    notifyMouseEvent( const awt::MouseEvent& _rMouseEvent, MouseEventType _nType );
-@@ -298,6 +309,8 @@ VCLXWindowImpl::VCLXWindowImpl( VCLXWind
-     ,mrAntiImpl( _rAntiImpl )
-     ,mrMutex( _rMutex )
-     ,mbDisposed( false )
-+    ,mbEnableVisible(sal_True)
-+    ,mbDirectVisible(sal_True)
-     ,maListenerContainerMutex( )
-     ,maWindow2Listeners( maListenerContainerMutex )
- #ifdef THREADED_NOTIFICATION
-@@ -600,7 +613,12 @@ void VCLXWindow::SetWindow( Window* pWin
-     SetOutputDevice( pWindow );
- 
-     if ( GetWindow() )
-+    {
-         GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
-+        sal_Bool bDirectVisible = pWindow ? pWindow->IsVisible() : sal_False;
-+        mpImpl->setDirectVisible( bDirectVisible );
-+    }
-+    
- }
- 
- void VCLXWindow::suspendVclEventListening( )
-@@ -1223,7 +1241,13 @@ void VCLXWindow::setVisible( sal_Bool bV
- 			}
- 		}
- */
--		pWindow->Show( bVisible );
-+        if( mpImpl->isEnableVisible() )
-+        {
-+            mpImpl->setDirectVisible( bVisible );
-+		    pWindow->Show( bVisible );
-+        }
-+        else
-+            pWindow->Show( sal_False );
- 	}
- }
- 
-@@ -1537,6 +1561,7 @@ void VCLXWindow::ImplGetPropertyIds( std
-                          BASEPROPERTY_HELPURL,
-                          BASEPROPERTY_TEXT,
-                          BASEPROPERTY_PRINTABLE,
-+                         BASEPROPERTY_ENABLEVISIBLE, // for visibility
-                          BASEPROPERTY_TABSTOP,
-                          0);
- 
-@@ -1610,6 +1635,23 @@ void VCLXWindow::setProperty( const ::rt
- 					setEnable( b );
- 			}
- 			break;
-+            case BASEPROPERTY_ENABLEVISIBLE:
-+            {
-+                sal_Bool b = sal_Bool();
-+                if ( Value >>= b )
-+                {
-+                    if( b != mpImpl->isEnableVisible() )
-+                    {
-+                        mpImpl->setEnableVisible( b );
-+                        // if mbEnableVisible change from false to true.
-+                        // it will ignore the mbDirectVisible, setVisilbe
-+                        // and set mbDirectVisible as true.
-+                        if( mpImpl->isDirectVisible() || b )
-+                            setVisible( b );
-+                    }
-+                }
-+            }
-+            break;
- 			case BASEPROPERTY_TEXT:
- 			case BASEPROPERTY_LABEL:
- 			case BASEPROPERTY_TITLE:
-@@ -2068,6 +2110,10 @@ void VCLXWindow::setProperty( const ::rt
- 				aProp <<= (sal_Bool) GetWindow()->IsEnabled();
- 			    break;
- 
-+			case BASEPROPERTY_ENABLEVISIBLE:
-+				aProp <<= (sal_Bool) GetWindow()->IsVisible();
-+			    break;
-+
- 			case BASEPROPERTY_TEXT:
- 			case BASEPROPERTY_LABEL:
- 			case BASEPROPERTY_TITLE:
-@@ -2374,8 +2420,8 @@ void VCLXWindow::draw( sal_Int32 nX, sal
- 	Window* pWindow = GetWindow();
-     if ( !pWindow )
-         return;
--
--	if ( pWindow )
-+    
-+	if ( pWindow && mpImpl->isEnableVisible() )
- 	{
- 		TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow );
-         if ( pTabPage )
---- toolkit/source/controls/unocontrolmodel.cxx.orig	2008-04-11 17:32:33.000000000 +0800
-+++ toolkit/source/controls/unocontrolmodel.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -338,6 +338,7 @@ void UnoControlModel::ImplPropertyChange
-             case BASEPROPERTY_SCALEIMAGE:
-             case BASEPROPERTY_ENABLED:
-             case BASEPROPERTY_PRINTABLE:
-+            case BASEPROPERTY_ENABLEVISIBLE:
-             case BASEPROPERTY_DECORATION:           aDefault <<= (sal_Bool) sal_True; break;
- 
-             case BASEPROPERTY_HELPTEXT:
---- toolkit/source/controls/unocontrol.cxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ toolkit/source/controls/unocontrol.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,1534 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: unocontrol.cxx,v $
-+ * $Revision: 1.54 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_toolkit.hxx"
-+#include <com/sun/star/awt/XControlContainer.hpp>
-+#include <com/sun/star/awt/WindowAttribute.hpp>
-+#include <com/sun/star/awt/VclWindowPeerAttribute.hpp>
-+#include <com/sun/star/awt/PosSize.hpp>
-+#ifndef _COM_SUN_STAR_LAN_XMULTISERVICEFACTORY_HPP_
-+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+#endif
-+#include <com/sun/star/beans/PropertyValue.hpp>
-+#include <com/sun/star/resource/XStringResourceResolver.hpp>
-+#include <toolkit/controls/unocontrol.hxx>
-+#include <toolkit/helper/vclunohelper.hxx>
-+#include <cppuhelper/typeprovider.hxx>
-+#include <rtl/memory.h>
-+#include <rtl/uuid.h>
-+#include <vos/mutex.hxx>
-+#include <tools/string.hxx>
-+#include <tools/table.hxx>
-+#include <tools/date.hxx>
-+#include <tools/time.hxx>
-+#include <tools/urlobj.hxx>
-+#include <tools/debug.hxx>
-+#include <vcl/svapp.hxx>
-+#include <vcl/wrkwin.hxx>
-+#include <comphelper/stl_types.hxx>
-+#include <toolkit/helper/property.hxx>
-+#include <toolkit/helper/servicenames.hxx>
-+#include <toolkit/helper/vclunohelper.hxx>
-+#include <toolkit/awt/vclxwindow.hxx>
-+#include <vcl/svapp.hxx>
-+#include <vos/mutex.hxx>
-+#include <toolkit/controls/accessiblecontrolcontext.hxx>
-+#include <comphelper/container.hxx>
-+
-+#include <algorithm>
-+#include <set>
-+
-+using namespace ::com::sun::star;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::awt;
-+using namespace ::com::sun::star::beans;
-+using namespace ::com::sun::star::lang;
-+using namespace ::com::sun::star::util;
-+
-+using ::com::sun::star::accessibility::XAccessibleContext;
-+using ::com::sun::star::accessibility::XAccessible;
-+
-+struct LanguageDependentProp
-+{
-+    const char* pPropName;
-+    sal_Int32   nPropNameLength;
-+};
-+
-+static const LanguageDependentProp aLanguageDependentProp[] =
-+{
-+    { "Text",            4 },
-+    { "Label",           5 },
-+    { "Title",           5 },
-+    { "HelpText",        8 },
-+    { "CurrencySymbol", 14 },
-+    { "StringItemList", 14 },
-+    { 0, 0                 }
-+};
-+
-+WorkWindow* lcl_GetDefaultWindow()
-+{
-+	static WorkWindow* pW = NULL;
-+	if ( !pW )
-+    {
-+		pW = new WorkWindow( NULL, 0 );
-+        pW->EnableChildTransparentMode();
-+    }
-+	return pW;
-+}
-+
-+static Sequence< ::rtl::OUString> lcl_ImplGetPropertyNames( const Reference< XMultiPropertySet > & rxModel )
-+{
-+	Sequence< ::rtl::OUString> aNames;
-+	Reference< XPropertySetInfo >  xPSInf = rxModel->getPropertySetInfo();
-+	DBG_ASSERT( xPSInf.is(), "UpdateFromModel: No PropertySetInfo!" );
-+	if ( xPSInf.is() ) 
-+	{	
-+		Sequence< Property> aProps = xPSInf->getProperties();
-+		sal_Int32 nLen = aProps.getLength();
-+		aNames = Sequence< ::rtl::OUString>( nLen );
-+		::rtl::OUString* pNames = aNames.getArray();
-+		const Property* pProps = aProps.getConstArray();
-+		for ( sal_Int32 n = 0; n < nLen; ++n, ++pProps, ++pNames)
-+			*pNames = pProps->Name;
-+	}
-+	return aNames;
-+}
-+
-+//	====================================================
-+class VclListenerLock
-+{
-+private:
-+    VCLXWindow*  m_pLockWindow;
-+
-+public:
-+    inline VclListenerLock( VCLXWindow* _pLockWindow )
-+        :m_pLockWindow( _pLockWindow )
-+    {
-+//        DBG_ASSERT( m_pLockWindow, "VclListenerLock::VclListenerLock: invalid window!" );
-+		if ( m_pLockWindow )
-+			m_pLockWindow->suspendVclEventListening( );
-+    }
-+    inline ~VclListenerLock( )
-+    {
-+		if ( m_pLockWindow )
-+			m_pLockWindow->resumeVclEventListening( );
-+    }
-+
-+private:
-+    VclListenerLock();                                          // never implemented
-+    VclListenerLock( const VclListenerLock& );              // never implemented
-+    VclListenerLock& operator=( const VclListenerLock& );   // never implemented
-+};
-+
-+struct UnoControl_Data
-+{
-+    ::std::set< ::rtl::OUString >   aPropertyNotificationFilter;
-+};
-+
-+//	----------------------------------------------------
-+//	class UnoControl
-+//	----------------------------------------------------
-+DBG_NAME( UnoControl )
-+UnoControl::UnoControl()
-+	: maDisposeListeners( *this )
-+	, maWindowListeners( *this )
-+	, maFocusListeners( *this )
-+	, maKeyListeners( *this )
-+	, maMouseListeners( *this )
-+	, maMouseMotionListeners( *this )
-+	, maPaintListeners( *this )
-+	, maModeChangeListeners( GetMutex() )
-+    , mpData( new UnoControl_Data )
-+{
-+    DBG_CTOR( UnoControl, NULL );
-+	mbDisposePeer = sal_True;
-+	mbRefeshingPeer = sal_False;
-+	mbCreatingPeer = sal_False;
-+	mbCreatingCompatiblePeer = sal_False;
-+	mbDesignMode = sal_False;
-+}
-+
-+UnoControl::~UnoControl()
-+{
-+    DELETEZ( mpData );
-+    DBG_DTOR( UnoControl, NULL );
-+}
-+
-+::rtl::OUString UnoControl::GetComponentServiceName()
-+{
-+	return ::rtl::OUString();
-+}
-+
-+Reference< XWindowPeer >	UnoControl::ImplGetCompatiblePeer( sal_Bool bAcceptExistingPeer )
-+{
-+	DBG_ASSERT( !mbCreatingCompatiblePeer, "ImplGetCompatiblePeer - rekursive?" );
-+
-+	mbCreatingCompatiblePeer = sal_True;
-+
-+	Reference< XWindowPeer > xCompatiblePeer;
-+
-+	if ( bAcceptExistingPeer )
-+		xCompatiblePeer = getPeer();
-+
-+	if ( !xCompatiblePeer.is() )
-+	{
-+		// Peer unsichtbar erzeugen...
-+		sal_Bool bVis = maComponentInfos.bVisible;
-+		if( bVis )
-+			maComponentInfos.bVisible = sal_False;
-+
-+		Reference< XWindowPeer >	xCurrentPeer = getPeer();
-+		setPeer( NULL );
-+
-+		// queryInterface ourself, to allow aggregation
-+		Reference< XControl > xMe;
-+		OWeakAggObject::queryInterface( ::getCppuType( &xMe ) ) >>= xMe;
-+
-+		WorkWindow* pWW;
-+		{
-+		    osl::Guard< vos::IMutex > aGuard( Application::GetSolarMutex() );
-+		    pWW = lcl_GetDefaultWindow();
-+		}
-+        try
-+        {
-+		    xMe->createPeer( NULL, pWW->GetComponentInterface( sal_True ) );
-+        }
-+        catch( const Exception& )
-+        {
-+	        mbCreatingCompatiblePeer = sal_False;
-+            throw;
-+        }
-+		xCompatiblePeer = getPeer();
-+		setPeer( xCurrentPeer );
-+
-+        if ( xCompatiblePeer.is() && mxGraphics.is() )
-+        {
-+            Reference< XView > xPeerView( xCompatiblePeer, UNO_QUERY );
-+            if ( xPeerView.is() )
-+                xPeerView->setGraphics( mxGraphics );
-+        }
-+
-+		if( bVis )
-+			maComponentInfos.bVisible = sal_True;
-+	}
-+
-+	mbCreatingCompatiblePeer = sal_False;
-+
-+	return xCompatiblePeer;
-+}
-+
-+bool UnoControl::ImplMapPlaceHolder( ::rtl::OUString& rPlaceHolder )
-+{
-+    rtl::OUString aMappedValue;
-+
-+	Reference< XPropertySet > xPropSet( mxModel, UNO_QUERY );
-+    if ( xPropSet.is() )
-+    {
-+        Any a;
-+        Reference< resource::XStringResourceResolver > xStringResourceResolver;
-+        a = xPropSet->getPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ResourceResolver" )));
-+        if ( a >>= xStringResourceResolver )
-+        {
-+            if ( xStringResourceResolver.is() )
-+            {
-+                try
-+                {
-+                    rPlaceHolder = xStringResourceResolver->resolveString( rPlaceHolder );
-+                    return true;
-+                }
-+                catch ( resource::MissingResourceException& )
-+                {
-+                    return false;
-+                }
-+            }
-+        }
-+    }
-+
-+    return false;
-+}
-+
-+void UnoControl::ImplSetPeerProperty( const ::rtl::OUString& rPropName, const Any& rVal )
-+{
-+    // since a change made in propertiesChange, we can't be sure that this is called with an valid getPeer(),
-+	// this assumption may be false in some (seldom) multi-threading scenarios (cause propertiesChange
-+	// releases our mutex before calling here in)
-+	// That's why this additional check
-+	
-+    if ( mxVclWindowPeer.is() )
-+    {
-+		Any aVal( rVal );
-+        
-+        // We now support a mapping for language dependent properties. This is the
-+        // central method to implement it.
-+        if (( rPropName.equalsAsciiL( "Text",            4 )) ||
-+            ( rPropName.equalsAsciiL( "Label",           5 )) ||
-+            ( rPropName.equalsAsciiL( "Title",           5 )) ||
-+            ( rPropName.equalsAsciiL( "HelpText",        8 )) ||
-+            ( rPropName.equalsAsciiL( "CurrencySymbol", 14 )) ||
-+            ( rPropName.equalsAsciiL( "StringItemList", 14 )) )
-+        {
-+            rtl::OUString aValue;
-+            uno::Sequence< rtl::OUString > aSeqValue;
-+
-+            if ( aVal >>= aValue )
-+            {
-+                // Map single string value
-+                if (( aValue.getLength() > 0 ) && 
-+                    ( aValue.compareToAscii( "&", 1 ) == 0 ))
-+                {
-+                    // Magic symbol '&' found at first place. Interpret as a place
-+                    // holder identifier. Now try to map it to the real value. The
-+                    // magic symbol must be removed.
-+                    rtl::OUString aKeyValue( aValue.copy( 1 ));
-+                    if ( ImplMapPlaceHolder( aKeyValue ))
-+                        aVal <<= aKeyValue;
-+                }
-+            }
-+            else if ( aVal >>= aSeqValue )
-+            {
-+                // Map sequence strings
-+                for ( sal_Int32 i = 0; i < aSeqValue.getLength(); i++ )
-+                {
-+                    aValue = aSeqValue[i];
-+                    if (( aValue.getLength() > 0 ) && 
-+                        ( aValue.compareToAscii( "&", 1 ) == 0 ))
-+                    {
-+                        // Magic symbol '&' found at first place. Interpret as a place
-+                        // holder identifier. Now try to map it to the real value. The
-+                        // magic symbol must be removed.
-+                        rtl::OUString aKeyValue( aValue.copy( 1 ));
-+                        if ( ImplMapPlaceHolder( aKeyValue ))
-+                            aSeqValue[i] = aKeyValue;
-+                    }
-+                }
-+                aVal <<= aSeqValue;
-+            }
-+        }
-+        
-+		mxVclWindowPeer->setProperty( rPropName, aVal );
-+    }
-+}
-+
-+void UnoControl::PrepareWindowDescriptor( WindowDescriptor& )
-+{
-+}
-+
-+Reference< XWindow >	UnoControl::getParentPeer() const
-+{
-+	Reference< XWindow > xPeer;
-+	if( mxContext.is() )
-+	{
-+		Reference< XControl > xContComp( mxContext, UNO_QUERY );
-+		if ( xContComp.is() )
-+		{
-+			Reference< XWindowPeer > xP = xContComp->getPeer();
-+			if ( xP.is() )
-+				xP->queryInterface( ::getCppuType((const Reference< XWindow >*)0) ) >>= xPeer;
-+		}
-+	}
-+	return xPeer;
-+}
-+
-+void UnoControl::updateFromModel()
-+{
-+	// Alle standard Properties werden ausgelesen und in das Peer uebertragen
-+	if( getPeer().is() )
-+	{
-+		Reference< XMultiPropertySet >	xPropSet( mxModel, UNO_QUERY );
-+        if( xPropSet.is() )
-+        {
-+	        Sequence< ::rtl::OUString> aNames = lcl_ImplGetPropertyNames( xPropSet );
-+	        xPropSet->firePropertiesChangeEvent( aNames, this );
-+        }
-+	}
-+}
-+
-+
-+// XTypeProvider
-+IMPL_IMPLEMENTATION_ID( UnoControl )
-+
-+void UnoControl::disposeAccessibleContext()
-+{
-+	Reference< XComponent > xContextComp( maAccessibleContext.get(), UNO_QUERY );
-+	if ( xContextComp.is() )
-+	{
-+		maAccessibleContext = NULL;
-+		try
-+		{
-+			xContextComp->removeEventListener( this );
-+			xContextComp->dispose();
-+		}
-+		catch( const Exception& )
-+		{
-+			DBG_ERROR( "UnoControl::disposeAccessibleContext: could not dispose my AccessibleContext!" );
-+		}
-+	}
-+}
-+
-+void UnoControl::dispose(  ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	if( getPeer().is() && mbDisposePeer )
-+	{
-+		getPeer()->dispose();
-+		setPeer( NULL);
-+	}
-+
-+	// dispose and release our AccessibleContext
-+	disposeAccessibleContext();
-+
-+	EventObject aDisposeEvent;
-+	aDisposeEvent.Source = static_cast< XAggregation* >( this );
-+
-+	maDisposeListeners.disposeAndClear( aDisposeEvent );
-+	maWindowListeners.disposeAndClear( aDisposeEvent );
-+	maFocusListeners.disposeAndClear( aDisposeEvent );
-+	maKeyListeners.disposeAndClear( aDisposeEvent );
-+	maMouseListeners.disposeAndClear( aDisposeEvent );
-+	maMouseMotionListeners.disposeAndClear( aDisposeEvent );
-+	maPaintListeners.disposeAndClear( aDisposeEvent );
-+	maModeChangeListeners.disposeAndClear( aDisposeEvent );
-+	
-+	// Model wieder freigeben
-+	setModel( Reference< XControlModel > () );
-+	setContext( Reference< XInterface > () );
-+}
-+
-+void UnoControl::addEventListener( const Reference< XEventListener >& rxListener ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	maDisposeListeners.addInterface( rxListener );
-+}
-+
-+void UnoControl::removeEventListener( const Reference< XEventListener >& rxListener ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	maDisposeListeners.removeInterface( rxListener );
-+}
-+
-+sal_Bool UnoControl::requiresNewPeer( const ::rtl::OUString& /* _rPropertyName */ ) const
-+{
-+    return sal_False;
-+}
-+
-+// XPropertiesChangeListener
-+void UnoControl::propertiesChange( const Sequence< PropertyChangeEvent >& rEvents ) throw(RuntimeException)
-+{
-+    Sequence< PropertyChangeEvent > aEvents( rEvents );
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+
-+        if ( !mpData->aPropertyNotificationFilter.empty() )
-+        {
-+            // strip the property which we are currently updating (somewhere up the stack)
-+            PropertyChangeEvent* pEvents = aEvents.getArray();
-+            PropertyChangeEvent* pEventsEnd = pEvents + aEvents.getLength();
-+            for ( ; pEvents < pEventsEnd; )
-+                if ( mpData->aPropertyNotificationFilter.find( pEvents->PropertyName ) != mpData->aPropertyNotificationFilter.end() )
-+                {
-+                    if ( pEvents != pEventsEnd )
-+                        ::std::copy( pEvents + 1, pEventsEnd, pEvents );
-+                    --pEventsEnd;
-+                }
-+                else
-+                    ++pEvents;
-+            aEvents.realloc( pEventsEnd - aEvents.getConstArray() );
-+
-+            if ( !aEvents.getLength() )
-+                return;
-+        }
-+    }
++    /** synchronously mbDirectVisible;
++    */
++    void    setDirectVisible( sal_Bool bDirectVisible ) { mbDirectVisible = bDirectVisible; }
++    sal_Bool    isDirectVisible() { return mbDirectVisible; }
 +
-+    ImplModelPropertiesChanged( aEvents );
-+}
-+	
-+void UnoControl::ImplLockPropertyChangeNotification( const ::rtl::OUString& rPropertyName, bool bLock )
-+{
-+    if ( bLock )
-+    {
-+        OSL_PRECOND( mpData->aPropertyNotificationFilter.find( rPropertyName ) == mpData->aPropertyNotificationFilter.end(),
-+            "UnoControl::ImplLockPropertyChangeNotification: already locked!" );
-+        mpData->aPropertyNotificationFilter.insert( rPropertyName );
-+    }
-+    else
+     /** asynchronously notifies a mouse event to the VCLXWindow's XMouseListeners
+     */
+     void    notifyMouseEvent( const awt::MouseEvent& _rMouseEvent, MouseEventType _nType );
+@@ -299,6 +310,8 @@ VCLXWindowImpl::VCLXWindowImpl( VCLXWind
+     ,mrAntiImpl( _rAntiImpl )
+     ,mrMutex( _rMutex )
+     ,mbDisposed( false )
++    ,mbEnableVisible(sal_True)
++    ,mbDirectVisible(sal_True)
+     ,maListenerContainerMutex( )
+     ,maWindow2Listeners( maListenerContainerMutex )
+ #ifdef THREADED_NOTIFICATION
+@@ -602,7 +615,12 @@ void VCLXWindow::SetWindow( Window* pWin
+     SetOutputDevice( pWindow );
+ 
+     if ( GetWindow() )
 +    {
-+        OSL_PRECOND( mpData->aPropertyNotificationFilter.find( rPropertyName ) != mpData->aPropertyNotificationFilter.end(),
-+            "UnoControl::ImplLockPropertyChangeNotification: not locked!" );
-+        mpData->aPropertyNotificationFilter.erase( rPropertyName );
+         GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
++        sal_Bool bDirectVisible = pWindow ? pWindow->IsVisible() : sal_False;
++        mpImpl->setDirectVisible( bDirectVisible );
 +    }
-+}
-+
-+void UnoControl::ImplLockPropertyChangeNotifications( const Sequence< ::rtl::OUString >& rPropertyNames, bool bLock )
-+{
-+    for (   const ::rtl::OUString* pPropertyName = rPropertyNames.getConstArray();
-+            pPropertyName != rPropertyNames.getConstArray() + rPropertyNames.getLength();
-+            ++pPropertyName
-+        )
-+        ImplLockPropertyChangeNotification( *pPropertyName, bLock );
-+}
-+
-+void UnoControl::ImplModelPropertiesChanged( const Sequence< PropertyChangeEvent >& rEvents )
-+{
-+	::osl::ClearableGuard< ::osl::Mutex > aGuard( GetMutex() );
-+
-+    if( getPeer().is() )
-+	{
-+		DECLARE_STL_VECTOR( PropertyValue, PropertyValueVector);
-+		PropertyValueVector 	aPeerPropertiesToSet;
-+		sal_Int32				nIndependentPos = 0;
-+        bool                    bResourceResolverSet( false );
-+			// position where to insert the independent properties into aPeerPropertiesToSet,
-+            // dependent ones are inserted at the end of the vector
-+
-+		sal_Bool bNeedNewPeer = sal_False;
-+			// some properties require a re-creation of the peer, 'cause they can't be changed on the fly
-+
-+		Reference< XControlModel > xOwnModel( getModel(), UNO_QUERY );
-+			// our own model for comparison
-+        Reference< XPropertySet > xPS( xOwnModel, UNO_QUERY );
-+        Reference< XPropertySetInfo > xPSI( xPS->getPropertySetInfo(), UNO_QUERY );
-+        OSL_ENSURE( xPSI.is(), "UnoControl::ImplModelPropertiesChanged: should have property set meta data!" );
-+
-+		const PropertyChangeEvent* pEvents = rEvents.getConstArray();
-+
-+		sal_Int32 nLen = rEvents.getLength();
-+		aPeerPropertiesToSet.reserve(nLen);
-+
-+		for( sal_Int32 i = 0; i < nLen; ++i, ++pEvents )
-+		{
-+			Reference< XControlModel > xModel( pEvents->Source, UNO_QUERY );
-+			sal_Bool bOwnModel = xModel.get() == xOwnModel.get();
-+			if ( !bOwnModel )
-+                continue;
-+
-+            // Detect changes on our resource resolver which invalidates
-+            // automatically some language dependent properties.
-+            if ( pEvents->PropertyName.equalsAsciiL( "ResourceResolver", 16 ))
-+            {
-+                Reference< resource::XStringResourceResolver > xStrResolver;
-+                if ( pEvents->NewValue >>= xStrResolver )
-+                    bResourceResolverSet = xStrResolver.is();
-+            }
-+            
-+            sal_uInt16 nPType = GetPropertyId( pEvents->PropertyName );
-+			if ( mbDesignMode && mbDisposePeer && !mbRefeshingPeer && !mbCreatingPeer )	 
-+            {
-+                // if we're in design mode, then some properties can change which
-+                // require creating a *new* peer (since these properties cannot
-+                // be switched at existing peers)
-+                if ( nPType )
-+                    bNeedNewPeer = ( nPType == BASEPROPERTY_BORDER )
-+                                || ( nPType == BASEPROPERTY_MULTILINE )
-+							    || ( nPType == BASEPROPERTY_DROPDOWN )
-+							    || ( nPType == BASEPROPERTY_HSCROLL )
-+							    || ( nPType == BASEPROPERTY_VSCROLL )
-+							    || ( nPType == BASEPROPERTY_AUTOHSCROLL )
-+							    || ( nPType == BASEPROPERTY_AUTOVSCROLL )
-+							    || ( nPType == BASEPROPERTY_ORIENTATION )
-+							    || ( nPType == BASEPROPERTY_SPIN )
-+							    || ( nPType == BASEPROPERTY_ALIGN )
-+							    || ( nPType == BASEPROPERTY_PAINTTRANSPARENT );
-+                else
-+                    bNeedNewPeer = requiresNewPeer( pEvents->PropertyName );
-+
-+                if ( bNeedNewPeer )
-+					break;
-+			}
-+
-+			if ( nPType && ( nLen > 1 ) && DoesDependOnOthers( nPType ) )
-+			{
-+				// Properties die von anderen abhaengen erst hinterher einstellen,
-+				// weil sie von anderen Properties abhaengig sind, die aber erst spaeter
-+				// eingestellt werden, z.B. VALUE nach VALUEMIN/MAX.
-+				aPeerPropertiesToSet.push_back(PropertyValue(pEvents->PropertyName, 0, pEvents->NewValue, PropertyState_DIRECT_VALUE));
-+			}
-+			else
-+			{
-+                if ( bResourceResolverSet )
-+                {
-+					// The resource resolver property change should be one of the first ones.
-+                    // All language dependent properties are dependent on this property.
-+                    // As BASEPROPERTY_NATIVE_WIDGET_LOOK is not dependent on resource
-+                    // resolver. We don't need to handle a special order for these two props.
-+                    aPeerPropertiesToSet.insert(
-+                        aPeerPropertiesToSet.begin(),
-+						PropertyValue( pEvents->PropertyName, 0, pEvents->NewValue, PropertyState_DIRECT_VALUE ) );
-+                    ++nIndependentPos;
-+                }
-+                else if ( nPType == BASEPROPERTY_NATIVE_WIDGET_LOOK )
-+                {
-+                    // since *a lot* of other properties might be overruled by this one, we need
-+                    // a special handling:
-+                    // NativeWidgetLook needs to be set first: If it is set to ON, all other
-+                    // properties describing the look (e.g. BackgroundColor) are ignored, anyway.
-+                    // If it is switched OFF, then we need to do it first because else it will
-+                    // overrule other look-related properties, and re-initialize them from system
-+                    // defaults.
-+                    aPeerPropertiesToSet.insert(
-+                        aPeerPropertiesToSet.begin(),
-+						PropertyValue( pEvents->PropertyName, 0, pEvents->NewValue, PropertyState_DIRECT_VALUE ) );
-+                    ++nIndependentPos;
-+                }
-+                else
-+                {
-+					aPeerPropertiesToSet.insert(aPeerPropertiesToSet.begin() + nIndependentPos,
-+						PropertyValue(pEvents->PropertyName, 0, pEvents->NewValue, PropertyState_DIRECT_VALUE));
-+					++nIndependentPos;
-+                }
-+			}
-+		}
-+
-+		Reference< XWindow >	xParent = getParentPeer();
-+		Reference< XControl > xThis( (XAggregation*)(::cppu::OWeakAggObject*)this, UNO_QUERY );
-+		// call createPeer via a interface got from queryInterface, so the aggregating class can intercept it
-+
-+		DBG_ASSERT( !bNeedNewPeer || xParent.is(), "Need new peer, but don't have a parent!" );
-+
-+        // Check if we have to update language dependent properties
-+        if ( !bNeedNewPeer && bResourceResolverSet )
++    
+ }
+ 
+ void VCLXWindow::suspendVclEventListening( )
+@@ -1225,7 +1243,13 @@ void VCLXWindow::setVisible( sal_Bool bV
+ 			}
+ 		}
+ */
+-		pWindow->Show( bVisible );
++        if( mpImpl->isEnableVisible() )
 +        {
-+            // Add language dependent properties into the peer property set.
-+            // Our resource resolver has been changed and we must be sure
-+            // that language dependent props use the new resolver.
-+            const LanguageDependentProp* pLangDepProp = aLanguageDependentProp;
-+            while ( pLangDepProp->pPropName != 0 )
++            mpImpl->setDirectVisible( bVisible );
++		    pWindow->Show( bVisible );
++        }
++        else
++            pWindow->Show( sal_False );
+ 	}
+ }
+ 
+@@ -1539,6 +1563,7 @@ void VCLXWindow::ImplGetPropertyIds( std
+                          BASEPROPERTY_HELPURL,
+                          BASEPROPERTY_TEXT,
+                          BASEPROPERTY_PRINTABLE,
++                         BASEPROPERTY_ENABLEVISIBLE, // for visibility
+                          BASEPROPERTY_TABSTOP,
+                          0);
+ 
+@@ -1612,6 +1637,23 @@ void VCLXWindow::setProperty( const ::rt
+ 					setEnable( b );
+ 			}
+ 			break;
++            case BASEPROPERTY_ENABLEVISIBLE:
 +            {
-+                bool bMustBeInserted( true );
-+                for ( sal_uInt32 i = 0; i < aPeerPropertiesToSet.size(); i++ )
-+                {
-+                    if ( aPeerPropertiesToSet[i].Name.equalsAsciiL( 
-+                            pLangDepProp->pPropName, pLangDepProp->nPropNameLength ))
-+                    {
-+                        bMustBeInserted = false;
-+                        break;
-+                    }
-+                }
-+                
-+                if ( bMustBeInserted )
++                sal_Bool b = sal_Bool();
++                if ( Value >>= b )
 +                {
-+                    // Add language dependent props at the end
-+                    ::rtl::OUString aPropName( ::rtl::OUString::createFromAscii( pLangDepProp->pPropName ));
-+                    if ( xPSI.is() && xPSI->hasPropertyByName( aPropName ) )
++                    if( b != mpImpl->isEnableVisible() )
 +                    {
-+                        aPeerPropertiesToSet.push_back(
-+                            PropertyValue( aPropName, 0, xPS->getPropertyValue( aPropName ), PropertyState_DIRECT_VALUE ) );
++                        mpImpl->setEnableVisible( b );
++                        // if mbEnableVisible change from false to true.
++                        // it will ignore the mbDirectVisible, setVisilbe
++                        // and set mbDirectVisible as true.
++                        if( mpImpl->isDirectVisible() || b )
++                            setVisible( b );
 +                    }
 +                }
-+                
-+                ++pLangDepProp;
-+            }
-+        }
-+        aGuard.clear();
-+		
-+        // clear the guard before creating a new peer - as usual, our peer implementations use the SolarMutex
-+		// #82300# - 2000-12-21 - fs openoffice org
-+		if (bNeedNewPeer && xParent.is())
-+		{
-+			NAMESPACE_VOS(OGuard) aVclGuard( Application::GetSolarMutex() );
-+				// and now this is the final withdrawal:
-+				// With 83561, I have no other idea than locking the SolarMutex here ....
-+				// I really hate the fact that VCL is not theadsafe ....
-+				// #83561# - 2001-03-01 - fs openoffice org
-+
-+			// Funktioniert beim Container nicht!
-+			getPeer()->dispose();
-+			mxPeer.clear();
-+			mxVclWindowPeer = NULL;
-+			mbRefeshingPeer = sal_True;
-+			Reference< XWindowPeer >	xP( xParent, UNO_QUERY );
-+			xThis->createPeer( Reference< XToolkit > (), xP );
-+			mbRefeshingPeer = sal_False;
-+			aPeerPropertiesToSet.clear();
-+		}
-+
-+        // lock the multiplexing of VCL events to our UNO listeners
-+        // this is for compatibility reasons: in OOo 1.0.x, changes which were done at the
-+        // model did not cause the listeners of the controls/peers to be called
-+        // Since the implementations for the listeners changed a lot towards 1.1, this
-+        // would not be the case anymore, if we would not do this listener-lock below
-+        // #i14703# - 2003-05-23 - fs openoffice org
-+        Window* pVclPeer = VCLUnoHelper::GetWindow( getPeer() );
-+        VCLXWindow* pPeer = pVclPeer ? pVclPeer->GetWindowPeer() : NULL;
-+        VclListenerLock aNoVclEventMultiplexing( pPeer );
-+
-+        // setting peer properties may result in an attemp to acquire the solar mutex, 'cause the peers
-+		// usually don't have an own mutex but use the SolarMutex instead.
-+		// To prevent deadlocks resulting from this, we do this without our own mutex locked
-+		// 2000-11-03 - fs openoffice org
-+		PropertyValueVectorIterator aEnd = aPeerPropertiesToSet.end();
-+		for (	PropertyValueVectorIterator aLoop = aPeerPropertiesToSet.begin();
-+				aLoop != aEnd;
-+				++aLoop
-+			)
-+		{
-+			ImplSetPeerProperty( aLoop->Name, aLoop->Value );
-+		}
-+	}
-+}
-+
-+void UnoControl::disposing( const EventObject& rEvt ) throw(RuntimeException)
-+{
-+	::osl::ClearableMutexGuard aGuard( GetMutex() );
-+	// bei "Multible Inheritance" nicht unterschiedliche Typen vergleichen.
-+
-+    if ( maAccessibleContext.get() == rEvt.Source )
-+    {
-+		// just in case the context is disposed, but not released - ensure that we do not re-use it in the future
-+		maAccessibleContext = NULL;
-+    }
-+	else if( mxModel.get() == Reference< XControlModel >(rEvt.Source,UNO_QUERY).get() )
-+	{
-+		// #62337# if the model dies, it does not make sense for us to live ...
-+		Reference< XControl >  xThis = this;
-+
-+        aGuard.clear();
-+        xThis->dispose();
-+
-+		DBG_ASSERT( !mxModel.is(), "UnoControl::disposing: invalid dispose behaviour!" );
-+		mxModel.clear();
-+	}
-+}
-+
-+
-+void SAL_CALL UnoControl::setOutputSize( const awt::Size& aSize ) throw (RuntimeException)
-+{
-+	Reference< XWindow2 > xPeerWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+		xPeerWindow = xPeerWindow.query( getPeer() );
-+	}
-+
-+    if ( xPeerWindow.is() )
-+		xPeerWindow->setOutputSize( aSize );
-+}
-+
-+namespace
-+{
-+    template < typename RETVALTYPE >
-+    RETVALTYPE lcl_askPeer( const uno::Reference< awt::XWindowPeer >& _rxPeer, RETVALTYPE (SAL_CALL XWindow2::*_pMethod)(), RETVALTYPE _aDefault )
-+    {
-+        RETVALTYPE aReturn( _aDefault );
-+
-+        Reference< XWindow2 > xPeerWindow( _rxPeer, UNO_QUERY );
-+        if ( xPeerWindow.is() )
-+            aReturn = (xPeerWindow.get()->*_pMethod)();
-+
-+        return aReturn;
-+    }
-+}
-+
-+awt::Size SAL_CALL UnoControl::getOutputSize(  ) throw (RuntimeException)
-+{
-+    return lcl_askPeer( getPeer(), &XWindow2::getOutputSize, awt::Size() );
-+}
-+
-+::sal_Bool SAL_CALL UnoControl::isVisible(  ) throw (RuntimeException)
-+{
-+    return lcl_askPeer( getPeer(), &XWindow2::isVisible, maComponentInfos.bVisible );
-+}
-+
-+::sal_Bool SAL_CALL UnoControl::isActive(  ) throw (RuntimeException)
-+{
-+    return lcl_askPeer( getPeer(), &XWindow2::isActive, sal_False );
-+}
-+
-+::sal_Bool SAL_CALL UnoControl::isEnabled(  ) throw (RuntimeException)
-+{
-+    return lcl_askPeer( getPeer(), &XWindow2::isEnabled, maComponentInfos.bEnable );
-+}
-+
-+::sal_Bool SAL_CALL UnoControl::hasFocus(  ) throw (RuntimeException)
-+{
-+    return lcl_askPeer( getPeer(), &XWindow2::hasFocus, sal_False );
-+}
-+
-+// XWindow
-+void UnoControl::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw(RuntimeException)
-+{
-+	Reference< XWindow > xWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+		
-+        if ( Flags & awt::PosSize::X )
-+		    maComponentInfos.nX = X; 
-+        if ( Flags & awt::PosSize::Y )
-+		    maComponentInfos.nY = Y; 
-+        if ( Flags & awt::PosSize::WIDTH )
-+		    maComponentInfos.nWidth = Width; 
-+        if ( Flags & awt::PosSize::HEIGHT )
-+		    maComponentInfos.nHeight = Height;
-+		maComponentInfos.nFlags |= Flags;
-+		
-+		xWindow = xWindow.query( getPeer() );
-+	}
-+
-+    if( xWindow.is() )
-+		xWindow->setPosSize( X, Y, Width, Height, Flags );
-+}
-+
-+awt::Rectangle UnoControl::getPosSize(  ) throw(RuntimeException)
-+{
-+    awt::Rectangle aRect( maComponentInfos.nX, maComponentInfos.nY, maComponentInfos.nWidth, maComponentInfos.nHeight);
-+    Reference< XWindow > xWindow;
-+
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+        xWindow = xWindow.query( getPeer() );
-+    }
-+
-+    if( xWindow.is() )
-+	    aRect = xWindow->getPosSize();
-+    return aRect;
-+}
-+
-+void UnoControl::setVisible( sal_Bool bVisible ) throw(RuntimeException)
-+{
-+	Reference< XWindow > xWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+	
-+		// Visible status ist Sache der View
-+		maComponentInfos.bVisible = bVisible;
-+		xWindow = xWindow.query( getPeer() );
-+	}
-+	if ( xWindow.is() )
-+		xWindow->setVisible( bVisible );
-+}
-+
-+void UnoControl::setEnable( sal_Bool bEnable ) throw(RuntimeException)
-+{
-+	Reference< XWindow > xWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+	
-+		// Enable status ist Sache der View
-+		maComponentInfos.bEnable = bEnable;
-+		xWindow = xWindow.query( getPeer() );
-+	}
-+	if ( xWindow.is() )
-+		xWindow->setEnable( bEnable );
-+}
-+
-+void UnoControl::setFocus(	) throw(RuntimeException)
-+{
-+	Reference< XWindow > xWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+		xWindow = xWindow.query( getPeer() );
-+	}
-+	if ( xWindow.is() )
-+		xWindow->setFocus();
-+}
-+
-+void UnoControl::addWindowListener( const Reference< XWindowListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maWindowListeners.addInterface( rxListener );
-+	    if ( maWindowListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->addWindowListener( &maWindowListeners );
-+}
-+
-+void UnoControl::removeWindowListener( const Reference< XWindowListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maWindowListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+        maWindowListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->removeWindowListener( &maWindowListeners );
-+}
-+
-+void UnoControl::addFocusListener( const Reference< XFocusListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maFocusListeners.addInterface( rxListener );
-+	    if ( maFocusListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->addFocusListener( &maFocusListeners );
-+}
-+
-+void UnoControl::removeFocusListener( const Reference< XFocusListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maFocusListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+        maFocusListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->removeFocusListener( &maFocusListeners );
-+}
-+
-+void UnoControl::addKeyListener( const Reference< XKeyListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maKeyListeners.addInterface( rxListener );
-+	    if ( maKeyListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+        xPeerWindow->addKeyListener( &maKeyListeners);
-+}
-+
-+void UnoControl::removeKeyListener( const Reference< XKeyListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maKeyListeners.getLength() == 1 )
-+            xPeerWindow = xPeerWindow.query( getPeer() );
-+        maKeyListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+		xPeerWindow->removeKeyListener( &maKeyListeners);
-+}
-+
-+void UnoControl::addMouseListener( const Reference< XMouseListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maMouseListeners.addInterface( rxListener );
-+	    if ( maMouseListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+        xPeerWindow->addMouseListener( &maMouseListeners);
-+}
-+
-+void UnoControl::removeMouseListener( const Reference< XMouseListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maMouseListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+        maMouseListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->removeMouseListener( &maMouseListeners );
-+}
-+
-+void UnoControl::addMouseMotionListener( const Reference< XMouseMotionListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maMouseMotionListeners.addInterface( rxListener );
-+	    if ( maMouseMotionListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+        xPeerWindow->addMouseMotionListener( &maMouseMotionListeners);
-+}
-+
-+void UnoControl::removeMouseMotionListener( const Reference< XMouseMotionListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maMouseMotionListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+        maMouseMotionListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->removeMouseMotionListener( &maMouseMotionListeners );
-+}
-+
-+void UnoControl::addPaintListener( const Reference< XPaintListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    maPaintListeners.addInterface( rxListener );
-+	    if ( maPaintListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+    }
-+    if ( xPeerWindow.is() )
-+        xPeerWindow->addPaintListener( &maPaintListeners);
-+}
-+
-+void UnoControl::removePaintListener( const Reference< XPaintListener >& rxListener ) throw(RuntimeException)
-+{
-+    Reference< XWindow > xPeerWindow;
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+	    if ( maPaintListeners.getLength() == 1 )
-+		    xPeerWindow = xPeerWindow.query( getPeer() );
-+        maPaintListeners.removeInterface( rxListener );
-+    }
-+    if ( xPeerWindow.is() )
-+	    xPeerWindow->removePaintListener( &maPaintListeners );
-+}
-+
-+// XView
-+sal_Bool UnoControl::setGraphics( const Reference< XGraphics >& rDevice ) throw(RuntimeException)
-+{
-+	Reference< XView > xView;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+	
-+		mxGraphics = rDevice;
-+		xView = xView.query( getPeer() );
-+	}
-+	return xView.is() ? xView->setGraphics( rDevice ) : sal_True;
-+}
-+
-+Reference< XGraphics > UnoControl::getGraphics(  ) throw(RuntimeException)
-+{
-+	return mxGraphics;
-+}
-+
-+awt::Size UnoControl::getSize(  ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	return awt::Size( maComponentInfos.nWidth, maComponentInfos.nHeight );
-+}
-+
-+void UnoControl::draw( sal_Int32 x, sal_Int32 y ) throw(RuntimeException)
-+{
-+    Reference< XWindowPeer > xDrawPeer;
-+    Reference< XView > xDrawPeerView;
-+
-+    bool bDisposeDrawPeer( false );
-+    {
-+	    ::osl::MutexGuard aGuard( GetMutex() );
-+
-+        xDrawPeer = ImplGetCompatiblePeer( sal_True );
-+        bDisposeDrawPeer = xDrawPeer.is() && ( xDrawPeer != getPeer() );
-+
-+        xDrawPeerView.set( xDrawPeer, UNO_QUERY );
-+        DBG_ASSERT( xDrawPeerView.is(), "UnoControl::draw: no peer!" );
-+    }
-+
-+    if ( xDrawPeerView.is() )
-+        xDrawPeerView->draw( x, y );
-+
-+    if ( bDisposeDrawPeer )
-+        xDrawPeer->dispose();
-+}
-+
-+void UnoControl::setZoom( float fZoomX, float fZoomY ) throw(RuntimeException)
-+{
-+	Reference< XView > xView;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+		
-+		maComponentInfos.nZoomX = fZoomX;
-+		maComponentInfos.nZoomY = fZoomY;
-+
-+		xView = xView.query( getPeer() );
-+	}
-+	if ( xView.is() )
-+		xView->setZoom( fZoomX, fZoomY );
-+}
-+
-+// XControl
-+void UnoControl::setContext( const Reference< XInterface >& rxContext ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	mxContext = rxContext;
-+}
-+
-+Reference< XInterface > UnoControl::getContext(  ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	return mxContext;
-+}
-+
-+void UnoControl::peerCreated()
-+{
-+    Reference< XWindow > xWindow( getPeer(), UNO_QUERY );
-+    if ( !xWindow.is() )
-+        return;
-+
-+    if ( maWindowListeners.getLength() )
-+	    xWindow->addWindowListener( &maWindowListeners );
-+
-+    if ( maFocusListeners.getLength() )
-+	    xWindow->addFocusListener( &maFocusListeners );
-+
-+    if ( maKeyListeners.getLength() )
-+	    xWindow->addKeyListener( &maKeyListeners );
-+
-+    if ( maMouseListeners.getLength() )
-+	    xWindow->addMouseListener( &maMouseListeners );
-+
-+    if ( maMouseMotionListeners.getLength() )
-+	    xWindow->addMouseMotionListener( &maMouseMotionListeners );
-+
-+    if ( maPaintListeners.getLength() )
-+	    xWindow->addPaintListener( &maPaintListeners );
-+}
-+
-+void UnoControl::createPeer( const Reference< XToolkit >& rxToolkit, const Reference< XWindowPeer >& rParentPeer ) throw(RuntimeException)
-+{
-+	::osl::ClearableMutexGuard aGuard( GetMutex() );
-+
-+	if ( !mxModel.is() )
-+	{
-+		RuntimeException aException;
-+		aException.Message = ::rtl::OUString::createFromAscii( "createPeer: no model!" );
-+		aException.Context = (XAggregation*)(::cppu::OWeakAggObject*)this;
-+		throw( aException );
-+	}
-+	
-+	if( !getPeer().is() )
-+	{
-+		mbCreatingPeer = sal_True;
-+
-+		WindowClass eType;
-+		Reference< XToolkit >  xToolkit = rxToolkit;
-+		if( rParentPeer.is() && mxContext.is() )
-+		{
-+			// kein TopWindow
-+			if ( !xToolkit.is() ) 
-+				xToolkit = rParentPeer->getToolkit();
-+			Any aAny = OWeakAggObject::queryInterface( ::getCppuType((const Reference< XControlContainer>*)0) );
-+			Reference< XControlContainer > xC;
-+			aAny >>= xC;
-+			if( xC.is() )
-+				// Es ist ein Container
-+				eType = WindowClass_CONTAINER;
-+			else
-+				eType = WindowClass_SIMPLE;
-+		}
-+		else
-+		{ // Nur richtig, wenn es sich um ein Top Window handelt
-+			if( rParentPeer.is() )
-+			{
-+				if ( !xToolkit.is() ) 
-+					xToolkit = rParentPeer->getToolkit();
-+				eType = WindowClass_CONTAINER;
-+			}
-+			else
-+			{
-+				if ( !xToolkit.is() ) 
-+					xToolkit = VCLUnoHelper::CreateToolkit();
-+				eType = WindowClass_TOP;
-+			}
-+		}
-+		WindowDescriptor aDescr;
-+		aDescr.Type = eType;
-+		aDescr.WindowServiceName = GetComponentServiceName();
-+		aDescr.Parent = rParentPeer;
-+		aDescr.Bounds = getPosSize();
-+		aDescr.WindowAttributes = 0;
-+
-+        // Border
-+		Reference< XPropertySet > xPSet( mxModel, UNO_QUERY );
-+		Reference< XPropertySetInfo >  xInfo = xPSet->getPropertySetInfo();
-+		
-+		Any aVal;
-+		::rtl::OUString aPropName = GetPropertyName( BASEPROPERTY_BORDER );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Int16 n = sal_Int16();
-+			if ( aVal >>= n )
-+			{
-+				if ( n )
-+					aDescr.WindowAttributes |= WindowAttribute::BORDER;
-+				else
-+					aDescr.WindowAttributes |= VclWindowPeerAttribute::NOBORDER;
-+			}
-+		}
-+
-+		// DESKTOP_AS_PARENT
-+        if ( aDescr.Type == WindowClass_TOP )
-+        {
-+            aPropName = GetPropertyName( BASEPROPERTY_DESKTOP_AS_PARENT );
-+            if ( xInfo->hasPropertyByName( aPropName ) )
-+            {
-+                aVal = xPSet->getPropertyValue( aPropName );
-+                sal_Bool b = sal_Bool();
-+                if ( ( aVal >>= b ) && b)
-+                    aDescr.ParentIndex = -1;
 +            }
-+        }
-+		// Moveable
-+		aPropName = GetPropertyName( BASEPROPERTY_MOVEABLE );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= WindowAttribute::MOVEABLE;
-+		}
-+
-+		// Closeable
-+		aPropName = GetPropertyName( BASEPROPERTY_CLOSEABLE );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= WindowAttribute::CLOSEABLE;
-+		}
-+
-+		// Dropdown
-+		aPropName = GetPropertyName( BASEPROPERTY_DROPDOWN );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::DROPDOWN;
-+		}
-+		
-+		// Spin
-+		aPropName = GetPropertyName( BASEPROPERTY_SPIN );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::SPIN;
-+		}
-+
-+		// HScroll
-+		aPropName = GetPropertyName( BASEPROPERTY_HSCROLL );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::HSCROLL;
-+		}
-+
-+		// VScroll
-+		aPropName = GetPropertyName( BASEPROPERTY_VSCROLL );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::VSCROLL;
-+		}
-+
-+		// AutoHScroll
-+		aPropName = GetPropertyName( BASEPROPERTY_AUTOHSCROLL );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::AUTOHSCROLL;
-+		}
-+
-+		// AutoVScroll
-+		aPropName = GetPropertyName( BASEPROPERTY_AUTOVSCROLL );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>= b ) && b)
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::AUTOVSCROLL;
-+		}
++            break;
+ 			case BASEPROPERTY_TEXT:
+ 			case BASEPROPERTY_LABEL:
+ 			case BASEPROPERTY_TITLE:
+@@ -2070,6 +2112,10 @@ void VCLXWindow::setProperty( const ::rt
+ 				aProp <<= (sal_Bool) GetWindow()->IsEnabled();
+ 			    break;
+ 
++			case BASEPROPERTY_ENABLEVISIBLE:
++				aProp <<= (sal_Bool) GetWindow()->IsVisible();
++			    break;
 +
-+		//added for issue79712
-+		//NoLabel 
-+		aPropName = GetPropertyName( BASEPROPERTY_NOLABEL );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Bool b = sal_Bool();
-+			if ( ( aVal >>=b ) && b )
-+				aDescr.WindowAttributes |= VclWindowPeerAttribute::NOLABEL;
-+		}
-+		//issue79712 ends
-+		
+ 			case BASEPROPERTY_TEXT:
+ 			case BASEPROPERTY_LABEL:
+ 			case BASEPROPERTY_TITLE:
+@@ -2363,8 +2409,8 @@ void VCLXWindow::draw( sal_Int32 nX, sal
+ 	Window* pWindow = GetWindow();
+     if ( !pWindow )
+         return;
+-
+-	if ( pWindow )
++    
++	if ( pWindow && mpImpl->isEnableVisible() )
+ 	{
+ 		TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow );
+         if ( pTabPage )
+--- toolkit/source/controls/unocontrolmodel.cxx.orig	2008-06-02 13:59:52.000000000 +0800
++++ toolkit/source/controls/unocontrolmodel.cxx	2008-06-02 14:54:35.000000000 +0800
+@@ -338,6 +338,7 @@ void UnoControlModel::ImplPropertyChange
+             case BASEPROPERTY_SCALEIMAGE:
+             case BASEPROPERTY_ENABLED:
+             case BASEPROPERTY_PRINTABLE:
++            case BASEPROPERTY_ENABLEVISIBLE:
+             case BASEPROPERTY_DECORATION:           aDefault <<= (sal_Bool) sal_True; break;
+ 
+             case BASEPROPERTY_GROUPNAME:
+--- toolkit/source/controls/unocontrol.cxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ toolkit/source/controls/unocontrol.cxx	2008-06-03 12:09:07.000000000 +0800
+@@ -1286,6 +1286,18 @@ void UnoControl::createPeer( const Refer
+ 		}
+ 		//issue79712 ends
+ 		
 +		// Visible
 +		aPropName = GetPropertyName( BASEPROPERTY_ENABLEVISIBLE );
 +		if ( xInfo->hasPropertyByName( aPropName ) )
@@ -4875,1170 +217,40 @@
 +            }
 +		}
 +
-+		// Align
-+		aPropName = GetPropertyName( BASEPROPERTY_ALIGN );
-+		if ( xInfo->hasPropertyByName( aPropName ) )
-+		{
-+			aVal = xPSet->getPropertyValue( aPropName );
-+			sal_Int16 n = sal_Int16();
-+			if ( aVal >>= n )
-+			{
-+				if ( n == PROPERTY_ALIGN_LEFT )
-+					aDescr.WindowAttributes |= VclWindowPeerAttribute::LEFT;
-+				else if ( n == PROPERTY_ALIGN_CENTER )
-+					aDescr.WindowAttributes |= VclWindowPeerAttribute::CENTER;
-+				else
-+					aDescr.WindowAttributes |= VclWindowPeerAttribute::RIGHT;
-+			}
-+		}
-+
-+        // Ableitungen die Moeglichkeit geben die Attribute zu manipulieren
-+		PrepareWindowDescriptor(aDescr);
-+
-+		// create the peer
-+		setPeer( xToolkit->createWindow( aDescr ) );
-+
-+		// release the mutex guard (and work with copies of our members)
-+		// this is necessary as our peer may lock the SolarMutex (actually, all currently known peers do), so calling
-+		// into the peer with our own mutex locked may cause deadlocks
-+		// (We _really_ need peers which do not use the SolarMutex. It's really pissing me off that from time to
-+		// time deadlocks pop up because the low-level components like our peers use a mutex which ususally
-+		// is locked at the top of the stack (it protects the global message looping). This is always dangerous, and
-+		// can not always be solved by tampering with other mutexes.
-+		// Unfortunately, the VCL used in the peers is not threadsafe, and by definition needs a locked SolarMutex.)
-+		// 82300 - 12/21/00 - FS
-+		UnoControlComponentInfos aComponentInfos(maComponentInfos);
-+		sal_Bool bDesignMode(mbDesignMode);
-+
-+        Reference< XGraphics >  xGraphics( mxGraphics           );
-+		Reference< XView >      xView    ( getPeer(), UNO_QUERY );
-+		Reference< XWindow >    xWindow  ( getPeer(), UNO_QUERY );
-+
-+		aGuard.clear();
-+
-+		// the updateFromModel is done without a locked mutex, too.
-+		// The reason is that the only thing this method does  is firing property changes, and this in general has
-+		// to be done without locked mutexes (as every notification to external listeners).
-+		// 82300 - 12/21/00 - FS
-+		updateFromModel();
-+
-+		xView->setZoom( aComponentInfos.nZoomX, aComponentInfos.nZoomY );
-+
-+        setPosSize( aComponentInfos.nX, aComponentInfos.nY, aComponentInfos.nWidth, aComponentInfos.nHeight, aComponentInfos.nFlags );
-+
-+		if( aComponentInfos.bVisible && !bDesignMode )
-+			// Erst nach dem setzen der Daten anzeigen
-+			xWindow->setVisible( aComponentInfos.bVisible );
-+
-+		if( !aComponentInfos.bEnable )
-+			xWindow->setEnable( aComponentInfos.bEnable );
-+
-+		xView->setGraphics( xGraphics );
-+
-+        peerCreated();
-+
-+		mbCreatingPeer = sal_False;
-+	}
-+}
-+
-+Reference< XWindowPeer > UnoControl::getPeer() throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	return mxPeer;
-+}
-+
-+sal_Bool UnoControl::setModel( const Reference< XControlModel >& rxModel ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	Reference< XMultiPropertySet > xPropSet( mxModel, UNO_QUERY );
-+
-+    // query for the XPropertiesChangeListener - our delegator is allowed to overwrite this interface
-+    Reference< XPropertiesChangeListener > xListener;
-+    queryInterface( ::getCppuType( &xListener ) ) >>= xListener;
-+
-+	if( xPropSet.is() )
-+		xPropSet->removePropertiesChangeListener( xListener );
-+	
-+	mxModel = rxModel;
-+	if( mxModel.is() )
-+	{
-+		xPropSet = Reference< XMultiPropertySet > ( mxModel, UNO_QUERY );
-+		if( xPropSet.is() )
-+		{
-+			Sequence< ::rtl::OUString> aNames = lcl_ImplGetPropertyNames( xPropSet );
-+			xPropSet->addPropertiesChangeListener( aNames, xListener );
-+		}
-+	}
-+	return mxModel.is();
-+}
-+
-+Reference< XControlModel > UnoControl::getModel(	) throw(RuntimeException)
-+{
-+	return mxModel;
-+}
-+
-+Reference< XView > UnoControl::getView(  ) throw(RuntimeException)
-+{
-+	return	static_cast< XView* >( this );
-+}
-+
-+void UnoControl::setDesignMode( sal_Bool bOn ) throw(RuntimeException)
-+{
-+	ModeChangeEvent aModeChangeEvent;
-+
-+	Reference< XWindow > xWindow;
-+	{
-+		::osl::MutexGuard aGuard( GetMutex() );
-+		if ( bOn == mbDesignMode )
-+			return;
-+
-+		// remember this
-+		mbDesignMode = bOn;
-+		xWindow = xWindow.query( getPeer() );
-+
-+		// dispose our current AccessibleContext, if we have one
-+		// (changing the design mode implies having a new implementation for this context,
-+		// so the old one must be declared DEFUNC)
-+		disposeAccessibleContext();
-+
-+		aModeChangeEvent.Source = *this;
-+		aModeChangeEvent.NewMode = ::rtl::OUString::createFromAscii( mbDesignMode ? "design" : "alive" );
-+	}
-+
-+	// ajust the visibility of our window
-+	if ( xWindow.is() )
-+		xWindow->setVisible( !bOn );
-+
-+	// and notify our mode listeners
-+    maModeChangeListeners.notifyEach( &XModeChangeListener::modeChanged, aModeChangeEvent );
-+}
-+
-+sal_Bool UnoControl::isDesignMode(	) throw(RuntimeException)
-+{
-+	return mbDesignMode;
-+}
-+
-+sal_Bool UnoControl::isTransparent(  ) throw(RuntimeException)
-+{
-+	return sal_False;
-+}
-+
-+// XServiceInfo
-+::rtl::OUString UnoControl::getImplementationName(	) throw(RuntimeException)
-+{
-+	DBG_ERROR( "This method should be overloaded!" );
-+	return ::rtl::OUString();
-+}
-+
-+sal_Bool UnoControl::supportsService( const ::rtl::OUString& rServiceName ) throw(RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	
-+	Sequence< ::rtl::OUString > aSNL = getSupportedServiceNames();
-+	const ::rtl::OUString* pArray = aSNL.getConstArray();
-+	const ::rtl::OUString* pArrayEnd = aSNL.getConstArray();
-+	for (; pArray != pArrayEnd; ++pArray )
-+		if( *pArray == rServiceName )
-+			break;
-+
-+	return pArray != pArrayEnd;
-+}
-+
-+Sequence< ::rtl::OUString > UnoControl::getSupportedServiceNames(  ) throw(RuntimeException)
-+{
-+	::rtl::OUString sName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControl" ) );
-+	return Sequence< ::rtl::OUString >( &sName, 1 );
-+}
-+
-+// ------------------------------------------------------------------------
-+Reference< XAccessibleContext > SAL_CALL UnoControl::getAccessibleContext(  ) throw (RuntimeException)
-+{
-+    // creation of the context will certainly require the SolarMutex ...
-+    ::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
-+	::osl::MutexGuard aGuard( GetMutex() );
-+
-+	Reference< XAccessibleContext > xCurrentContext( maAccessibleContext.get(), UNO_QUERY );
-+	if ( !xCurrentContext.is() )
-+	{
-+		if ( !mbDesignMode )
-+		{	// in alive mode, use the AccessibleContext of the peer
-+			Reference< XAccessible > xPeerAcc( getPeer(), UNO_QUERY );
-+			if ( xPeerAcc.is() )
-+				xCurrentContext = xPeerAcc->getAccessibleContext( );
-+		}
-+		else
-+			// in design mode, use a fallback
-+			xCurrentContext = ::toolkit::OAccessibleControlContext::create( this );
-+
-+		DBG_ASSERT( xCurrentContext.is(), "UnoControl::getAccessibleContext: invalid context (invalid peer?)!" );
-+		maAccessibleContext = xCurrentContext;
-+
-+		// get notified when the context is disposed
-+		Reference< XComponent > xContextComp( xCurrentContext, UNO_QUERY );
-+		if ( xContextComp.is() )
-+			xContextComp->addEventListener( this );
-+		// In an ideal world, this is not necessary - there the object would be released as soon as it has been
-+		// disposed, and thus our weak reference would be empty, too.
-+		// But 'til this ideal world comes (means 'til we do never have any refcount/lifetime bugs anymore), we
-+		// need to listen for disposal and reset our weak reference then.
-+	}
-+
-+	return xCurrentContext;
-+}
-+
-+void SAL_CALL UnoControl::addModeChangeListener( const Reference< XModeChangeListener >& _rxListener ) throw (RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	maModeChangeListeners.addInterface( _rxListener );
-+}
-+
-+void SAL_CALL UnoControl::removeModeChangeListener( const Reference< XModeChangeListener >& _rxListener ) throw (RuntimeException)
-+{
-+	::osl::MutexGuard aGuard( GetMutex() );
-+	maModeChangeListeners.removeInterface( _rxListener );
-+}
-+
-+void SAL_CALL UnoControl::addModeChangeApproveListener( const Reference< XModeChangeApproveListener >& ) throw (NoSupportException, RuntimeException)
-+{
-+	throw NoSupportException( );
-+}
-+
-+void SAL_CALL UnoControl::removeModeChangeApproveListener( const Reference< XModeChangeApproveListener >&  ) throw (NoSupportException, RuntimeException)
-+{
-+	throw NoSupportException( );
-+}
-+
---- sc/source/filter/inc/xlescher.hxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ sc/source/filter/inc/xlescher.hxx	2008-04-11 04:52:34.000000000 +0800
-@@ -0,0 +1,288 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xlescher.hxx,v $
-+ * $Revision: 1.22 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XLESCHER_HXX
-+#define SC_XLESCHER_HXX
-+
-+#include <vcl/mapunit.hxx>
-+#include "fapihelper.hxx"
-+#include "xladdress.hxx"
-+
-+// Constants and Enumerations =================================================
-+
-+// misc -----------------------------------------------------------------------
-+
-+const long EXC_ESCHER_AUTOMARGIN            = 20000;    /// Automatic text margin.
-+
-+// (0x001C) NOTE --------------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_NOTE                = 0x001C;
-+const sal_uInt16 EXC_NOTE_VISIBLE           = 0x0002;
-+const sal_uInt16 EXC_NOTE5_MAXLEN           = 2048;
-+
-+// (0x005D) OBJ ---------------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_OBJ                 = 0x005D;
-+
-+const sal_uInt16 EXC_OBJ_INVALID_ID         = 0x0000;
-+
-+// sub records
-+const sal_uInt16 EXC_ID_OBJ_FTEND           = 0x0000;   /// End of OBJ.
-+const sal_uInt16 EXC_ID_OBJ_FTMACRO         = 0x0004;   /// Macro link.
-+const sal_uInt16 EXC_ID_OBJ_FTGMO           = 0x0006;   /// Group marker.
-+const sal_uInt16 EXC_ID_OBJ_FTCF            = 0x0007;   /// Clipboard format.
-+const sal_uInt16 EXC_ID_OBJ_FTPIOGRBIT      = 0x0008;   /// Option flags.
-+const sal_uInt16 EXC_ID_OBJ_FTPICTFMLA      = 0x0009;   /// OLE link formula.
-+const sal_uInt16 EXC_ID_OBJ_FTCBLS          = 0x000A;   /// Check box/radio button data.
-+const sal_uInt16 EXC_ID_OBJ_FTSBS           = 0x000C;   /// Scroll bar data.
-+const sal_uInt16 EXC_ID_OBJ_FTSBSFMLA       = 0x000E;   /// Scroll bar/list box/combo box cell link.
-+const sal_uInt16 EXC_ID_OBJ_FTGBODATA       = 0x000F;   /// Group box data.
-+const sal_uInt16 EXC_ID_OBJ_FTLBSDATA       = 0x0013;   /// List box/combo box data.
-+const sal_uInt16 EXC_ID_OBJ_FTCBLSFMLA      = 0x0014;   /// Check box/radio button cell link.
-+const sal_uInt16 EXC_ID_OBJ_FTCMO           = 0x0015;   /// Common object settings.
-+const sal_uInt16 EXC_ID_OBJ_FTUNKNOWN       = 0xFFFF;   /// For internal use only.
-+
-+// ftCmo: object types
-+const sal_uInt16 EXC_OBJ_CMO_GROUP          = 0x0000;
-+const sal_uInt16 EXC_OBJ_CMO_LINE           = 0x0001;
-+const sal_uInt16 EXC_OBJ_CMO_RECTANGLE      = 0x0002;
-+const sal_uInt16 EXC_OBJ_CMO_ELLIPSE        = 0x0003;
-+const sal_uInt16 EXC_OBJ_CMO_ARC            = 0x0004;
-+const sal_uInt16 EXC_OBJ_CMO_CHART          = 0x0005;
-+const sal_uInt16 EXC_OBJ_CMO_TEXT           = 0x0006;
-+const sal_uInt16 EXC_OBJ_CMO_BUTTON         = 0x0007;
-+const sal_uInt16 EXC_OBJ_CMO_PICTURE        = 0x0008;
-+const sal_uInt16 EXC_OBJ_CMO_POLYGON        = 0x0009;
-+const sal_uInt16 EXC_OBJ_CMO_CHECKBOX       = 0x000B;
-+const sal_uInt16 EXC_OBJ_CMO_OPTIONBUTTON   = 0x000C;
-+const sal_uInt16 EXC_OBJ_CMO_EDIT           = 0x000D;
-+const sal_uInt16 EXC_OBJ_CMO_LABEL          = 0x000E;
-+const sal_uInt16 EXC_OBJ_CMO_DIALOG         = 0x000F;
-+const sal_uInt16 EXC_OBJ_CMO_SPIN           = 0x0010;
-+const sal_uInt16 EXC_OBJ_CMO_SCROLLBAR      = 0x0011;
-+const sal_uInt16 EXC_OBJ_CMO_LISTBOX        = 0x0012;
-+const sal_uInt16 EXC_OBJ_CMO_GROUPBOX       = 0x0013;
-+const sal_uInt16 EXC_OBJ_CMO_COMBOBOX       = 0x0014;
-+const sal_uInt16 EXC_OBJ_CMO_NOTE           = 0x0019;
-+const sal_uInt16 EXC_OBJ_CMO_DRAWING        = 0x001E;
-+const sal_uInt16 EXC_OBJ_CMO_UNKNOWN        = 0xFFFF;   /// For internal use only.
-+
-+// ftCmo: flags
-+const sal_uInt16 EXC_OBJ_CMO_PRINTABLE      = 0x0010;   /// Object printable
-+
-+// ftPioGrbit: flags
-+const sal_uInt16 EXC_OBJ_PIO_MANUALSIZE     = 0x0001;
-+const sal_uInt16 EXC_OBJ_PIO_LINKED         = 0x0002;
-+const sal_uInt16 EXC_OBJ_PIO_SYMBOL         = 0x0008;
-+const sal_uInt16 EXC_OBJ_PIO_CONTROL        = 0x0010;   /// Form control.
-+const sal_uInt16 EXC_OBJ_PIO_CTLSSTREAM     = 0x0020;   /// Data in Ctls stream.
-+const sal_uInt16 EXC_OBJ_PIO_AUTOLOAD       = 0x0200;
-+
-+// ftCbls: Check box/radio button data
-+const sal_uInt16 EXC_OBJ_CBLS_STATEMASK     = 0x0003;
-+const sal_uInt16 EXC_OBJ_CBLS_STATE_UNCHECK = 0x0000;
-+const sal_uInt16 EXC_OBJ_CBLS_STATE_CHECK   = 0x0001;
-+const sal_uInt16 EXC_OBJ_CBLS_STATE_TRI     = 0x0002;
-+const sal_uInt16 EXC_OBJ_CBLS_FLAT          = 0x0001;
-+
-+// ftGboData: Group box data
-+const sal_uInt16 EXC_OBJ_GBO_FLAT           = 0x0001;
-+
-+// ftLbsData: List box data
-+const sal_uInt16 EXC_OBJ_LBS_SELMASK        = 0x0030;   /// Mask for selection type.
-+const sal_uInt16 EXC_OBJ_LBS_SEL_SIMPLE     = 0x0000;   /// Simple selection.
-+const sal_uInt16 EXC_OBJ_LBS_SEL_MULTI      = 0x0010;   /// Multi selection.
-+const sal_uInt16 EXC_OBJ_LBS_SEL_EXT        = 0x0020;   /// Extended selection.
-+const sal_uInt16 EXC_OBJ_LBS_FLAT           = 0x0008;
-+const sal_uInt16 EXC_OBJ_LBS_COMBOMASK      = 0x0003;   /// Mask for combobox style.
-+const sal_uInt16 EXC_OBJ_LBS_COMBO_STD      = 0x0000;   /// Standard combo box.
-+const sal_uInt16 EXC_OBJ_LBS_COMBO_SIMPLE   = 0x0002;   /// Simple dropdown without field.
-+const sal_uInt16 EXC_OBJ_LBS_FILTERED       = 0x0008;   /// Drowdown style: filtered.
-+
-+// ftSbs: Spin button/scrollbar data
-+const sal_uInt16 EXC_OBJ_SBS_HORIZONTAL     = 0x0001;
-+const sal_uInt16 EXC_OBJ_SBS_DEFAULTFLAGS   = 0x0001;
-+const sal_uInt16 EXC_OBJ_SBS_FLAT           = 0x0008;
-+const sal_Int16 EXC_OBJ_SBS_MINSCROLL       = 0;
-+const sal_Int16 EXC_OBJ_SBS_MAXSCROLL       = 30000;
-+
-+/** Value binding mode for cells linked to form controls. */
-+enum XclCtrlBindMode
-+{
-+    EXC_CTRL_BINDCONTENT,       /// Binds cell to content of control.
-+    EXC_CTRL_BINDPOSITION       /// Binds cell to position in control (e.g. listbox selection index).
-+};
-+
-+// (0x00EB) MSODRAWINGGROUP ---------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_MSODRAWINGGROUP     = 0x00EB;
-+
-+// (0x00EC) MSODRAWING --------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_MSODRAWING          = 0x00EC;
-+
-+// additional flags not extant in svx headers
-+const sal_uInt16 EXC_ESC_ANCHOR_POSLOCKED   = 0x0001;
-+const sal_uInt16 EXC_ESC_ANCHOR_SIZELOCKED  = 0x0002;
-+const sal_uInt16 EXC_ESC_ANCHOR_LOCKED      = EXC_ESC_ANCHOR_POSLOCKED|EXC_ESC_ANCHOR_SIZELOCKED;
-+
-+// (0x00ED) MSODRAWINGSELECTION -----------------------------------------------
-+
-+const sal_uInt16 EXC_ID_MSODRAWINGSEL       = 0x00ED;
-+
-+// (0x01B6) TXO ---------------------------------------------------------------
-+
-+const sal_uInt16 EXC_ID_TXO                 = 0x01B6;
-+
-+const sal_uInt8 EXC_TXO_HOR_LEFT            = 0x01;
-+const sal_uInt8 EXC_TXO_HOR_CENTER          = 0x02;
-+const sal_uInt8 EXC_TXO_HOR_RIGHT           = 0x03;
-+const sal_uInt8 EXC_TXO_HOR_JUSTIFY         = 0x04;
-+
-+const sal_uInt8 EXC_TXO_VER_TOP             = 0x01;
-+const sal_uInt8 EXC_TXO_VER_CENTER          = 0x02;
-+const sal_uInt8 EXC_TXO_VER_BOTTOM          = 0x03;
-+const sal_uInt8 EXC_TXO_VER_JUSTIFY         = 0x04;
-+
-+const sal_uInt16 EXC_TXO_TEXTROT_NONE       = 0x0000;
-+const sal_uInt16 EXC_TXO_TEXTROT_STACKED    = 0x0001;      /// Stacked top to bottom.
-+const sal_uInt16 EXC_TXO_TEXTROT_90_CCW     = 0x0002;      /// 90 degr. counterclockwise.
-+const sal_uInt16 EXC_TXO_TEXTROT_90_CW      = 0x0003;      /// 90 degr. clockwise.
-+
-+// Structs and classes ========================================================
-+
-+// Escher client anchor -------------------------------------------------------
-+
-+class Rectangle;
-+class ScDocument;
-+class SvStream;
-+class XclImpStream;
-+class XclExpStream;
-+
-+/** Represents the position (anchor) of an Escher object in a Calc document. */
-+struct XclEscherAnchor
-+{
-+    XclRange            maXclRange; /// Cell range address.
-+    SCTAB               mnScTab;    /// Calc sheet index.
-+    sal_uInt16          mnLX;       /// X offset in left column (1/1024 of column width).
-+    sal_uInt16          mnTY;       /// Y offset in top row (1/256 of row height).
-+    sal_uInt16          mnRX;       /// X offset in right column (1/1024 of column width).
-+    sal_uInt16          mnBY;       /// Y offset in bottom row (1/256 of row height).
-+
-+    explicit            XclEscherAnchor( SCTAB nScTab );
-+
-+    /** Calculates a rectangle from the contained coordinates. */
-+    Rectangle           GetRect( ScDocument& rDoc, MapUnit eMapUnit ) const;
-+    /** Initializes the anchor coordinates from a rectangle. */
-+    void                SetRect( ScDocument& rDoc, const Rectangle& rRect, MapUnit eMapUnit );
-+};
-+
-+SvStream& operator>>( SvStream& rStrm, XclEscherAnchor& rAnchor );
-+SvStream& operator<<( SvStream& rStrm, const XclEscherAnchor& rAnchor );
-+
-+XclImpStream& operator>>( XclImpStream& rStrm, XclEscherAnchor& rAnchor );
-+XclExpStream& operator<<( XclExpStream& rStrm, const XclEscherAnchor& rAnchor );
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Identifies an Escher object by sheet index and object identifier. */
-+struct XclObjId
-+{
-+    SCTAB               mnScTab;        /// Calc sheet index.
-+    sal_uInt16          mnObjId;        /// Excel object identifier.
-+
-+    explicit            XclObjId();
-+    explicit            XclObjId( SCTAB nScTab, sal_uInt16 nObjId );
-+};
-+
-+bool operator==( const XclObjId& rL, const XclObjId& rR );
-+bool operator<( const XclObjId& rL, const XclObjId& rR );
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Contains data of a TXO record for text boxes. */
-+struct XclTxoData
-+{
-+    sal_uInt16          mnFlags;        /// Option flags and alignment.
-+    sal_uInt16          mnOrient;       /// Text orientation.
-+    sal_uInt16          mnTextLen;      /// Length of the string.
-+    sal_uInt16          mnFormatSize;   /// Size of the format run buffer (bytes).
-+
-+    explicit            XclTxoData();
-+
-+    sal_uInt8           GetXclHorAlignment() const;
-+    void                SetXclHorAlignment( sal_uInt8 nXclAlign );
-+
-+    sal_uInt8           GetXclVerAlignment() const;
-+    void                SetXclVerAlignment( sal_uInt8 nXclAlign );
-+};
-+
-+XclImpStream& operator>>( XclImpStream& rStrm, XclTxoData& rData );
-+XclExpStream& operator<<( XclExpStream& rStrm, const XclTxoData& rData );
-+
-+// ----------------------------------------------------------------------------
-+
-+namespace com { namespace sun { namespace star {
-+    namespace drawing { class XShape; }
-+    namespace awt { class XControlModel; }
-+} } }
-+
-+class SdrObject;
-+
-+/** Provides static helper functions for form controls. */
-+class XclControlObjHelper
-+{
-+public:
-+    /** Returns the API control model from the passed API shape object. */
-+    static ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >
-+                        GetModelFromShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
-+
-+    /** Returns the component service name for the passed control type. */
-+    static ::rtl::OUString GetTbxServiceName( sal_uInt16 nCtrlType );
-+    /** Returns a default control name for the passed control type. */
-+    static ::rtl::OUString GetTbxControlName( sal_uInt16 nCtrlType );
-+
-+    /** Returns the listener type (interface name) for macro events for the passed control type. */
-+    static ::rtl::OUString GetTbxListenerType( sal_uInt16 nCtrlType );
-+    /** Returns the event method (function name) for macro events for the passed control type. */
-+    static ::rtl::OUString GetTbxEventMethod( sal_uInt16 nCtrlType );
-+    /** Returns the script type string needed for a script event descriptor. */
-+    static ::rtl::OUString GetTbxScriptType();
-+
-+    /** Returns the Calc macro name from an Excel macro name. */
-+    static ::rtl::OUString GetScMacroName( const String& rXclMacroName );
-+    /** Returns the Excel macro name from a Calc macro name. */
-+    static String       GetXclMacroName( const ::rtl::OUString& rScMacroName );
-+};
-+
-+// ============================================================================
-+
-+#endif
-+
---- sc/source/filter/inc/xiescher.hxx.orig	1970-01-01 08:00:00.000000000 +0800
-+++ sc/source/filter/inc/xiescher.hxx	2008-06-04 12:38:12.000000000 +0800
-@@ -0,0 +1,633 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ * 
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: xiescher.hxx,v $
-+ * $Revision: 1.28 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org.  If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SC_XIESCHER_HXX
-+#define SC_XIESCHER_HXX
-+
-+#include <vector>
-+#include <list>
-+#include <map>
-+#include <svx/msdffimp.hxx>
-+#include "xlescher.hxx"
-+#include "xiroot.hxx"
-+#include "xistring.hxx"
-+
-+namespace com { namespace sun { namespace star {
-+    namespace script { struct ScriptEventDescriptor; }
-+} } }
-+
-+class ScfProgressBar;
-+class ScfPropertySet;
-+
-+// Text box data ==============================================================
-+
-+class XclImpTxoData : protected XclImpRoot
-+{
-+public:
-+    explicit            XclImpTxoData( const XclImpRoot& rRoot );
-+
-+    /** Reads a TXO record and following CONTINUE records for string and formatting data. */
-+    void                ReadTxo( XclImpStream& rStrm );
-+
-+    /** Returns the text orientation. */
-+    inline sal_uInt16   GetOrientation() const { return maData.mnOrient; }
-+    /** Returns the string data, if there is any. */
-+    inline const XclImpString* GetString() const { return mxString.get(); }
-+
-+    /** Sets the text to the passed SdrObject, if it can take text. */
-+    void                ProcessSdrObject( SdrObject& rSdrObj ) const;
-+
-+private:
-+    XclTxoData          maData;         /// Data from the TXO record.
-+    XclImpStringRef     mxString;       /// Plain or rich string.
-+};
-+
-+typedef ScfRef< XclImpTxoData > XclImpTxoDataRef;
-+
-+// Escher objects =============================================================
-+
-+class XclImpDrawObjBase;
-+typedef ScfRef< XclImpDrawObjBase > XclImpDrawObjRef;
-+
-+/** Base class for drawing objects (OBJ records). */
-+class XclImpDrawObjBase : protected XclImpRoot, ScfNoCopy
-+{
-+public:
-+    explicit            XclImpDrawObjBase( const XclImpRoot& rRoot );
-+    virtual             ~XclImpDrawObjBase();
-+
-+    /** Reads the FTCMO subrecord (common object data) in an OBJ record, returns a new object. */
-+    static XclImpDrawObjRef ReadObjCmo( XclImpStream& rStrm );
-+    /** Reads the contents of the specified subrecord of an OBJ record from stream. */
-+    virtual void        ReadSubRecord( XclImpStream& rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize );
-+    /** Reads the client anchor from an msofbtClientAnchor Escher record. */
-+    void                ReadClientAnchor( SvStream& rEscherStrm, const DffRecordHeader& rHeader );
-+
-+    /** Sets common object data from FTCMO subrecord. */
-+    void                SetObjData( sal_uInt16 nObjType, sal_uInt16 nObjId, sal_uInt16 nObjFlags );
-+    /** Sets shape data from Escher stream. */
-+    void                SetShapeData( sal_uInt32 nShapeId, sal_uInt32 nShapeFlags, sal_uInt32 nShapeBlipId );
+ 		// Align
+ 		aPropName = GetPropertyName( BASEPROPERTY_ALIGN );
+ 		if ( xInfo->hasPropertyByName( aPropName ) )
+--- sc/source/filter/inc/xiescher.hxx.orig	2008-06-02 14:42:04.000000000 +0800
++++ sc/source/filter/inc/xiescher.hxx	2008-06-02 15:54:23.000000000 +0800
+@@ -94,6 +94,8 @@ public:
+     void                SetObjData( sal_uInt16 nObjType, sal_uInt16 nObjId, sal_uInt16 nObjFlags );
+     /** Sets shape data from Escher stream. */
+     void                SetShapeData( sal_uInt32 nShapeId, sal_uInt32 nShapeFlags, sal_uInt32 nShapeBlipId );
 +    /** Sets shape data from Escher stream. */
 +    inline void         SetVisible( const bool nObjVisible ) { mnObjVisible = nObjVisible; }
-+    /** Sets whether this is an area object (then its width and height must be greater than 0). */
-+    inline void         SetAreaObj( bool bAreaObj ) { mbAreaObj = bAreaObj; }
-+    /** Sets the object anchor explicitly. */
-+    void                SetClientAnchor( const XclEscherAnchor& rAnchor );
-+
-+    /** If set, the SdrObject will not be created, processed, or inserted into the draw page. */
-+    inline void         SetInvalid() { mbValid = false; }
-+    /** If set, the SdrObject will be created or processed, but not be inserted into the draw page. */
-+    inline void         SetSkipInsertSdr() { mbInsSdr = false; }
-+
-+    /** Returns the Calc sheet index of this object. */
-+    inline SCTAB        GetScTab() const { return maObjId.mnScTab; }
-+    /** Returns the sheet index and Excel object identifier from OBJ record. */
-+    inline const XclObjId& GetObjId() const { return maObjId; }
-+    /** Returns the Excel object type from OBJ record. */
-+    inline sal_uInt16   GetObjType() const { return mnObjType; }
-+    /** Returns associated macro name, if set, otherwise zero length string. */
-+    const String        GetMacroName() const { return maMacroName; }
-+
-+    /** Returns the shape identifier used in the Escher stream. */
-+    inline sal_uInt32   GetShapeId() const { return mnShapeId; }
-+    /** Returns the shape flags from the Escher stream. */
-+    inline sal_uInt32   GetShapeFlags() const { return mnShapeFlags; }
-+    /** Returns the BLIP identifier for the meta file. */
-+    inline sal_uInt32   GetShapeBlipId() const { return mnShapeBlipId; }
-+
-+    /** Returns true, if the object is valid and will be processed.. */
-+    inline bool         IsValid() const { return mbValid; }
-+    /** Returns true, if the SdrObject will be created or processed, but not be inserted into the draw page. */
-+    inline bool         IsInsertSdr() const { return mbInsSdr; }
-+    /** Returns true, if Escher object is printable. */
-+    inline bool         IsPrintable() const { return ::get_flag( mnObjFlags, EXC_OBJ_CMO_PRINTABLE ); }
+     /** Sets whether this is an area object (then its width and height must be greater than 0). */
+     inline void         SetAreaObj( bool bAreaObj ) { mbAreaObj = bAreaObj; }
+     /** Sets the object anchor explicitly. */
+@@ -126,6 +128,8 @@ public:
+     inline bool         IsInsertSdr() const { return mbInsSdr; }
+     /** Returns true, if Escher object is printable. */
+     inline bool         IsPrintable() const { return ::get_flag( mnObjFlags, EXC_OBJ_CMO_PRINTABLE ); }
 +    /** Returns true, if Escher objest is not hidden. */
 +    inline bool         IsVisible() const { return mnObjVisible; }
-+
-+    /** Returns true, if the passed size is valid for this object. */
-+    bool                IsValidSize( const Rectangle& rAnchorRect ) const;
-+    /** Returns the area in the sheet used by this object. */
-+    ScRange             GetUsedArea() const;
-+    /** Returns the area on the drawing layer for this object. */
-+    Rectangle           GetAnchorRect() const;
-+
-+    /** Returns the needed size on the progress bar (calls virtual DoGetProgressSize() function). */
-+    sal_Size            GetProgressSize() const;
-+    /** Additional processing for the passed SdrObject (calls virtual DoProcessSdrObj() function). */
-+    void                ProcessSdrObject( SdrObject& rSdrObj ) const;
-+
-+protected:
-+    /** Reads the contents of the ftMacro sub structure in an OBJ record. */
-+    void                ReadMacro( XclImpStream& rStrm );
-+
-+    /** Derived classes may return a progress bar size different from 1. */
-+    virtual sal_Size    DoGetProgressSize() const;
-+    /** Derived classes may perform additional processing for the passed SdrObject. */
-+    virtual void        DoProcessSdrObj( SdrObject& rSdrObj ) const;
-+
-+private:
-+    typedef ScfRef< XclEscherAnchor > XclEscherAnchorRef;
-+
-+    XclEscherAnchorRef  mxAnchor;       /// The position of the object in the containing sheet.
-+    XclObjId            maObjId;        /// Sheet index and object identifier.
-+    sal_uInt16          mnObjType;      /// The Excel object type from OBJ record.
-+    sal_uInt16          mnObjFlags;     /// Additional flags from OBJ record.
-+    sal_uInt32          mnShapeId;      /// Shape ID from Escher stream.
-+    sal_uInt32          mnShapeFlags;   /// Shape flags from Escher stream.
-+    sal_uInt32          mnShapeBlipId;  /// The BLIP identifier (meta file).
-+    String              maMacroName;    /// Name of an attached macro.
-+    bool                mbValid;        /// true = Object is valid, do processing and insertion.
-+    bool                mbAreaObj;      /// true = Width and height must be greater than 0.
-+    bool                mbInsSdr;       /// true = Insert the SdrObject into draw page.
+ 
+     /** Returns true, if the passed size is valid for this object. */
+     bool                IsValidSize( const Rectangle& rAnchorRect ) const;
+@@ -162,6 +166,7 @@ private:
+     bool                mbValid;        /// true = Object is valid, do processing and insertion.
+     bool                mbAreaObj;      /// true = Width and height must be greater than 0.
+     bool                mbInsSdr;       /// true = Insert the SdrObject into draw page.
 +    bool                mnObjVisible;   /// falgs for visibility
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A simple drawing object, e.g. line, rectangle, textbox, or bitmap. */
-+class XclImpDrawingObj : public XclImpDrawObjBase
-+{
-+public:
-+    /** @param bAreaObj  true = Width and height of the object must be greater than 0. */
-+    explicit            XclImpDrawingObj( const XclImpRoot& rRoot, bool bAreaObj );
-+
-+    /** Stores the passed textbox data from a TXO record. */
-+    inline void         SetTxoData( XclImpTxoDataRef xTxoData ) { mxTxoData = xTxoData; }
-+
-+    /** Returns the text orientation from the contained textbox data. */
-+    inline sal_uInt16   GetOrientation() const { return mxTxoData.is() ? mxTxoData->GetOrientation() : EXC_TXO_TEXTROT_NONE; }
-+    /** Returns the string from the contained textbox data. */
-+    inline const XclImpString* GetString() const { return mxTxoData.is() ? mxTxoData->GetString() : 0; }
-+
-+protected:
-+    /** Inserts the contained text data at the passed object. */
-+    virtual void        DoProcessSdrObj( SdrObject& rSdrObj ) const;
-+
-+private:
-+    XclImpTxoDataRef    mxTxoData;      /// Textbox data from TXO record.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A note object, which is a specialized text box objext. */
-+class XclImpNoteObj : public XclImpDrawingObj
-+{
-+public:
-+    explicit            XclImpNoteObj( const XclImpRoot& rRoot );
-+
-+    /** Sets note flags and the note position in the Calc sheet. */
-+    void                SetNoteData( const ScAddress& rScPos, sal_uInt16 nNoteFlags );
-+
-+protected:
-+    /** Inserts the note into the document, sets visibility. */
-+    virtual void        DoProcessSdrObj( SdrObject& rSdrObj ) const;
-+
-+private:
-+    ScAddress           maScPos;        /// Cell position of the note object.
-+    sal_uInt16          mnNoteFlags;    /// Flags from NOTE record.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** Helper class for form controils to manage spreadsheet links . */
-+class XclImpControlObjHelper
-+{
-+public:
-+    typedef ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > XControlModelRef;
-+
-+public:
-+    explicit            XclImpControlObjHelper( XclCtrlBindMode eBindMode );
-+    virtual             ~XclImpControlObjHelper();
-+
-+    /** Sets the control model from the created form control object. */
-+    inline void         SetControlModel( XControlModelRef xCtrlModel ) { mxCtrlModel = xCtrlModel; }
-+
-+protected:
-+    /** Reads the formula for the linked cell from the current position of the stream. */
-+    void                ReadCellLinkFormula( XclImpStream& rStrm );
-+    /** Reads the formula for the source range from the current position of the stream. */
-+    void                ReadSrcRangeFormula( XclImpStream& rStrm );
-+
-+    /** Returns true, if a linked cell address is present. */
-+    inline bool         HasCellLink() const { return mxCellLink.is(); }
-+    /** Returns true, if a linked source cell range is present. */
-+    inline bool         HasSourceRange() const { return mxSrcRange.is(); }
-+
-+    /** Returns the property set of the form control object. */
-+    ScfPropertySet      GetControlPropSet() const;
-+    /** Tries to set a spreadsheet cell link and source range link at the passed form control. */
-+    void                ConvertSheetLinks( const XclImpRoot& rRoot, SdrObject& rSdrObj ) const;
-+
-+private:
-+    XControlModelRef    mxCtrlModel;    /// Model of the created form control object.
-+    ScfRef< ScAddress > mxCellLink;     /// Linked cell in the Calc document.
-+    ScfRef< ScRange >   mxSrcRange;     /// Source data range in the Calc document.
-+    XclCtrlBindMode     meBindMode;     /// Value binding mode.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** An old form control object (does not use the OLE mechanism, but is a "simple" drawing object). */
-+class XclImpTbxControlObj : public XclImpDrawingObj, public XclImpControlObjHelper
-+{
-+public:
-+    explicit            XclImpTbxControlObj( const XclImpRoot& rRoot );
-+
-+    /** Reads the contents of the specified subrecord of an OBJ record from stream. */
-+    virtual void        ReadSubRecord( XclImpStream& rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize );
-+
-+    /** Returns the complete component service name for this control. */
-+    ::rtl::OUString     GetServiceName() const;
-+    /** Tries to fill the passed descriptor with imported macro data.
-+        @return  true = Control is associated with a macro, rEvent contains valid data. */
-+    bool                FillMacroDescriptor(
-+                            ::com::sun::star::script::ScriptEventDescriptor& rEvent ) const;
-+
-+protected:
-+    /** Overloaded to do additional processing on the SdrObject. */
-+    virtual void        DoProcessSdrObj( SdrObject& rSdrObj ) const;
-+
-+private:
-+    /** Reads the contents of the ftCbls sub structure in an OBJ record. */
-+    void                ReadCbls( XclImpStream& rStrm );
-+    /** Reads the contents of the ftCblsFmla sub structure in an OBJ record. */
-+    void                ReadCblsFmla( XclImpStream& rStrm );
-+    /** Reads the contents of the ftLbsData sub structure in an OBJ record. */
-+    void                ReadLbsData( XclImpStream& rStrm );
-+    /** Reads the contents of the ftSbs sub structure in an OBJ record. */
-+    void                ReadSbs( XclImpStream& rStrm );
-+    /** Reads the contents of the ftGboData sub structure in an OBJ record. */
-+    void                ReadGboData( XclImpStream& rStrm );
-+
-+private:
-+    ScfInt16Vec         maMultiSel;     /// Indexes of all selected entries in a multi selection.
-+    sal_uInt16          mnState;        /// Checked/unchecked state.
-+    sal_Int16           mnSelEntry;     /// Index of selected entry (1-based).
-+    sal_Int16           mnSelType;      /// Selection type.
-+    sal_Int16           mnLineCount;    /// Combobox dropdown line count.
-+    sal_Int16           mnScrollValue;  /// Scrollbar: Current value.
-+    sal_Int16           mnScrollMin;    /// Scrollbar: Minimum value.
-+    sal_Int16           mnScrollMax;    /// Scrollbar: Maximum value.
-+    sal_Int16           mnScrollStep;   /// Scrollbar: Single step.
-+    sal_Int16           mnScrollPage;   /// Scrollbar: Page step.
-+    bool                mbFlatButton;   /// False = 3D button style; True = Flat button style.
-+    bool                mbFlatBorder;   /// False = 3D border style; True = Flat border style.
-+    bool                mbScrollHor;    /// Scrollbar: true = horizontal.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+/** A common Escher OLE object, or an OLE form control. */
-+class XclImpOleObj : public XclImpDrawObjBase, public XclImpControlObjHelper
-+{
-+public:
-+    explicit            XclImpOleObj( const XclImpRoot& rRoot );
-+
-+    /** Reads the contents of the specified subrecord of an OBJ record from stream. */
-+    virtual void        ReadSubRecord( XclImpStream& rStrm, sal_uInt16 nSubRecId, sal_uInt16 nSubRecSize );
-+
-+    /** Allows to detect whether the object is iconified. */
-+    inline bool         IsIconified() const { return mbAsSymbol; }
-+    /** Returns true, if this object is a form control, and false, if it is a common OLE object. */
-+    inline bool         IsControl() const { return mbControl && mbUseCtlsStrm; }
-+
-+    /** Returns the OLE storage name used in the Excel document. */
-+    inline const String& GetStorageName() const { return maStorageName; }
-+    /** Returns the position in Ctrl stream for additional form control data. */
-+    inline sal_Size      GetCtlsStreamPos() const { return mnCtlsStrmPos; }
-+
-+protected:
-+    /** Overloaded to do additional processing on the SdrObject. */
-+    virtual void        DoProcessSdrObj( SdrObject& rSdrObj ) const;
-+
-+private:
-+    /** Reads the contents of the ftPioGrbit sub structure in an OBJ record. */
-+    void                ReadPioGrbit( XclImpStream& rStrm );
-+    /** Reads the contents of the ftPictFmla sub structure in an OBJ record. */
-+    void                ReadPictFmla( XclImpStream& rStrm, sal_uInt16 nRecSize );
-+
-+private:
-+    String              maStorageName;  /// Name of the OLE storage for this object.
-+    sal_Size            mnCtlsStrmPos;  /// Position in 'Ctls' stream for controls.
-+    bool                mbAsSymbol;     /// true = Show as symbol.
-+    bool                mbLinked;       /// true = Linked; false = Embedded.
-+    bool                mbControl;      /// true = Form control, false = OLE object.
-+    bool                mbUseCtlsStrm;  /// true = Form control data in 'Ctls' stream, false = Own storage.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+struct XclChLineFormat;
-+struct XclChAreaFormat;
-+class XclImpChart;
-+
-+/** A chart object. This is the drawing object wrapper for the chart data. */
-+class XclImpChartObj : public XclImpDrawObjBase
-+{
-+public:
-+    /** @param bOwnTab  True = chart is on an own sheet; false = chart is an embedded object. */
-+    explicit            XclImpChartObj( const XclImpRoot& rRoot, bool bOwnTab );
-+
-+    /** Reads remaining data from a BIFF5 OBJ record. */
-+    void                ReadObj5( XclImpStream& rStrm );
-+    /** Reads the complete chart substream (BOF/EOF block).
-+        @descr  The passed stream must be located in the BOF record of the chart substream. */
-+    void                ReadChartSubStream( XclImpStream& rStrm );
-+
-+    /** Creates and returns a new SdrObject that contains the chart. Caller takes ownership! */
-+    SdrObject*          CreateSdrObject( const Rectangle& rAnchorRect, ScfProgressBar& rProgress ) const;
-+
-+protected:
-+    /** Returns the needed size on the progress bar. */
-+    virtual sal_Size    DoGetProgressSize() const;
-+
-+private:
-+    /** Calculates the object anchor of a sheet chart (chart fills one page). */
-+    void                FinalizeTabChart();
-+
-+private:
-+    typedef ScfRef< XclImpChart >       XclImpChartRef;
-+    typedef ScfRef< XclChLineFormat >   XclChLineFmtRef;
-+    typedef ScfRef< XclChAreaFormat >   XclChAreaFmtRef;
-+
-+    XclImpChartRef      mxChart;        /// The chart itself (BOF/EOF substream data).
-+    XclChLineFmtRef     mxLineFmt;      /// Line formatting for chart frame (BIFF5).
-+    XclChAreaFmtRef     mxAreaFmt;      /// Area formatting for chart frame (BIFF5).
-+    bool                mbOwnTab;       /// true = own sheet; false = embedded object.
-+};
-+
-+// Escher stream conversion ===================================================
-+
-+/** The solver container collects all connector rules for connected objects. */
-+class XclImpSolverContainer : public SvxMSDffSolverContainer
-+{
-+public:
-+    /** Reads the entire solver container. Stream must point to begin of container header. */
-+    void                ReadSolverContainer( SvStream& rEscherStrm );
-+
-+    /** Inserts a new pointer to an SdrObject by the related shape ID. */
-+    void                InsertSdrObjectInfo( const XclImpDrawObjBase& rDrawObj, SdrObject* pSdrObj );
-+    /** Removes a pointer to an SdrObject by the related shape ID. */
-+    void                RemoveSdrObjectInfo( const XclImpDrawObjBase& rDrawObj );
-+
-+    /** Inserts the SdrObject pointers into all connector rules. */
-+    void                UpdateConnectorRules();
-+    /** Removes all contained connector rules. */
-+    void                RemoveConnectorRules();
-+
-+private:
-+    /** Returns the first connector rule from the internal list. */
-+    SvxMSDffConnectorRule* GetFirstRule();
-+    /** Returns the next connector rule from the internal list. */
-+    SvxMSDffConnectorRule* GetNextRule();
-+    /** Updates the data of a connected shape in a connector rule. */
-+    void                UpdateConnection( sal_uInt32 nShapeId, SdrObject*& rpSdrObj, sal_uInt32* pnShapeFlags = 0 );
-+
-+private:
-+    /** Stores data about an SdrObject processed during import. */
-+    struct XclImpSdrInfo
-+    {
-+        SdrObject*          mpSdrObj;       /// Pointer to an SdrObject.
-+        sal_uInt32          mnShapeFlags;   /// Shape flags from escher stream.
-+        inline explicit     XclImpSdrInfo() : mpSdrObj( 0 ), mnShapeFlags( 0 ) {}
-+        inline void         Set( SdrObject* pSdrObj, sal_uInt32 nShapeFlags )
-+                                { mpSdrObj = pSdrObj; mnShapeFlags = nShapeFlags; }
-+    };
-+    typedef ::std::map< sal_uInt32, XclImpSdrInfo > XclImpSdrInfoMap;
-+
-+    XclImpSdrInfoMap    maSdrInfoMap;   /// Maps shape IDs to SdrObjects.
-+};
-+
-+// ----------------------------------------------------------------------------
-+
-+class XclImpObjectManager;
-+class XclImpOcxConverter;
-+
-+/** Derived from SvxMSDffManager, contains core implementation of Escher stream import. */
-+class XclImpDffManager : public SvxMSDffManager, protected XclImpRoot
-+{
-+public:
-+    explicit            XclImpDffManager(
-+                            const XclImpRoot& rRoot,
-+                            XclImpObjectManager& rObjManager,
-+                            SvStream& rEscherStrm );
-+    virtual             ~XclImpDffManager();
-+
-+    /** Initializes the internal progress bar with the passed size and starts it. */
-+    void                StartProgressBar( sal_Size nProgressSize );
-+    /** Processes the leading drawing group container in the Escher stream. */
-+    void                ProcessDrawingGroup( SvStream& rEscherStrm );
-+    /** Processes a drawing container for a sheet in the Escher stream, converts all objects. */
-+    void                ProcessDrawing( SvStream& rEscherStrm, sal_Size nStrmPos );
-+    /** Processes a chart from an Excel chart sheet, converts it to a chart object. */
-+    void                ProcessTabChart( const XclImpChartObj& rChartObj );
-+
-+    /** Returns the used area in the sheet with the passed index. */
-+    ScRange             GetUsedArea( SCTAB nScTab ) const;
-+
-+protected:
-+    /** Reads the client anchor from the Escher stream and sets it at the correct Escher object. */
-+    virtual void        ProcessClientAnchor2(
-+                            SvStream& rEscherStrm,
-+                            DffRecordHeader& rHeader,
-+                            void* pClientData,
-+                            DffObjData& rObjData );
-+    /** Processes an Escher object, reads properties from Escher stream. */
-+    virtual SdrObject*  ProcessObj(
-+                            SvStream& rEscherStrm,
-+                            DffObjData& rObjData,
-+                            void* pClientData,
-+                            Rectangle& rTextRect,
-+                            SdrObject* pOldSdrObj = 0 );
-+    /** Returns the BLIP stream position, based on the passed Escher stream position. */
-+    virtual ULONG       Calc_nBLIPPos( ULONG nOrgVal, ULONG nStreamPos ) const;
-+    /** Returns a color from the Excel color palette. */
-+    virtual FASTBOOL    GetColorFromPalette( USHORT nIndex, Color& rColor ) const;
-+
-+private:
-+    /** Reads contents of a hyperlink property and returns the extracted URL. */
-+    ::rtl::OUString     ReadHlinkProperty( SvStream& rEscherStrm ) const;
-+
-+    /** Processes a drawing group container (global drawing data). */
-+    void                ProcessDggContainer( SvStream& rEscherStrm, const DffRecordHeader& rDggHeader );
-+    /** Processes a drawing container (all drawing data of a sheet). */
-+    void                ProcessDgContainer( SvStream& rEscherStrm, const DffRecordHeader& rDgHeader );
-+    /** Processes the global shape group container (all shapes of a sheet). */
-+    void                ProcessShGrContainer( SvStream& rEscherStrm, const DffRecordHeader& rShGrHeader );
-+    /** Processes the solver container (connectors of a sheet). */
-+    void                ProcessSolverContainer( SvStream& rEscherStrm, const DffRecordHeader& rSolverHeader );
-+    /** Processes a shape or shape group container (one top-level shape). */
-+    void                ProcessShContainer( SvStream& rEscherStrm, const DffRecordHeader& rShHeader );
-+
-+    /** Inserts the passed SdrObject into the document. This function takes ownership of pSdrObj! */
-+    void                InsertSdrObject( const XclImpDrawObjBase& rDrawObj, SdrObject* pSdrObj );
-+
-+    /** Tries to create a custom SdrObject for specific object types. */
-+    SdrObject*          CreateCustomSdrObject( XclImpDrawObjBase& rDrawObj, const Rectangle& rAnchorRect );
-+    /** Creates the SdrObject for the passed Excel OLE object. */
-+    SdrObject*          CreateSdrObject( XclImpOleObj& rOleObj, const Rectangle& rAnchorRect );
-+    /** Creates the SdrObject for the passed Excel textbox control object. */
-+    SdrObject*          CreateSdrObject( XclImpTbxControlObj& rTbxCtrlObj, const Rectangle& rAnchorRect );
-+    /** Creates the SdrObject for the passed Excel chart object. */
-+    SdrObject*          CreateSdrObject( const XclImpChartObj& rChartObj, const Rectangle& rAnchorRect );
-+
-+    /** Updates the used area of a sheet with the position and size of the passed object. */
-+    void                UpdateUsedArea( const XclImpDrawObjBase& rDrawObj );
-+
-+private:
-+    typedef ::std::map< SCTAB, ScRange >    ScRangeMap;
-+    typedef ScfRef< ScfProgressBar >        ScfProgressBarRef;
-+    typedef ScfRef< XclImpOcxConverter >    XclImpOcxConvRef;
-+
-+    XclImpObjectManager& mrObjManager;      /// The Excel object manager.
-+    XclImpSolverContainer maSolverCont;     /// The solver container for connector rules.
-+    ScRangeMap          maUsedAreaMap;      /// Used ranges for all sheets.
-+    ScfProgressBarRef   mxProgress;         /// The progress bar used in ProcessObj().
-+    XclImpOcxConvRef    mxOcxConverter;     /// The form controls converter.
-+    sal_uInt32          mnOleImpFlags;      /// Application OLE import settings.
-+};
-+
-+// The object manager =========================================================
-+
-+/** Stores all drawing and OLE objects and additional data related to these objects. */
-+class XclImpObjectManager : protected XclImpRoot
-+{
-+public:
-+    explicit            XclImpObjectManager( const XclImpRoot& rRoot );
-+    virtual             ~XclImpObjectManager();
-+
-+    // *** Read Excel records *** ---------------------------------------------
-+
-+    /** Reads the OBJ record (BIFF5 only). */
-+    void                ReadObj5( XclImpStream& rStrm );
-+
-+    /** Reads the MSODRAWINGGROUP record. */
-+    void                ReadMsoDrawingGroup( XclImpStream& rStrm );
-+    /** Reads the MSODRAWING or MSODRAWINGSELECTION record. */
-+    void                ReadMsoDrawing( XclImpStream& rStrm );
-+    /** Reads the NOTE record. */
-+    void                ReadNote( XclImpStream& rStrm );
-+
-+    /** Inserts a new chart object and reads the chart substream (BOF/EOF block).
-+        @descr  Used to import chart sheets, which do not have a corresponding OBJ record. */
-+    void                ReadTabChart( XclImpStream& rStrm );
-+
-+    // *** Drawing objects *** ------------------------------------------------
-+
-+    /** Finds the OBJ record data related to the Escher shape at the passed position. */
-+    XclImpDrawObjRef    FindDrawObj( const DffRecordHeader& rHeader ) const;
-+    /** Finds the OBJ record data specified by the passed object identifier. */
-+    XclImpDrawObjRef    FindDrawObj( const XclObjId& rObjId ) const;
-+    /** Finds the TXO record data related to the Escher shape at the passed position. */
-+    XclImpTxoDataRef    FindTxoData( const DffRecordHeader& rHeader ) const;
-+
-+    /** Sets the object with the passed identification to be ignored on import. */
-+    void                SetInvalidObj( SCTAB nScTab, sal_uInt16 nObjId );
-+
-+    // *** Drawing object conversion *** --------------------------------------
-+
-+    /** Returns the DFF manager (Escher stream converter). Don't call before the Escher stream is read. */
-+    XclImpDffManager&   GetDffManager();
-+    /** Inserts all objects into the Calc document. */
-+    void                ConvertObjects();
-+
-+    /** Returns the used area in the sheet with the passed index. */
-+    ScRange             GetUsedArea( SCTAB nScTab ) const;
-+
-+    // ------------------------------------------------------------------------
-+private:
-+    /** Reads contents of an Escher record and append data to internal Escher stream. */
-+    void                ReadEscherRecord( XclImpStream& rStrm );
-+    /** Reads a BIFF8 OBJ record following an MSODRAWING record. */
-+    void                ReadObj8( XclImpStream& rStrm );
-+    /** Reads the TXO record. */
-+    void                ReadTxo( XclImpStream& rStrm );
-+
-+    /** Tries to start a complete chart substream by checking if next record is a BOF. */
-+    bool                StartChartSubStream( XclImpStream& rStrm );
-+
-+    /** Returns the size of the progress bar shown while processing all objects. */
-+    sal_Size            GetProgressSize() const;
-+
-+    // ------------------------------------------------------------------------
-+private:
-+    typedef ::std::vector< sal_Size >                   StreamPosVec;
-+    typedef ::std::map< sal_Size, XclImpDrawObjRef >    XclImpObjMap;
-+    typedef ::std::map< XclObjId, XclImpDrawObjRef >    XclImpObjMapById;
-+    typedef ::std::map< sal_Size, XclImpTxoDataRef >    XclImpTxoMap;
-+    typedef ScfRef< XclImpChartObj >                    XclImpChartObjRef;
-+    typedef ::std::list< XclImpChartObjRef >            XclImpChartObjList;
-+    typedef ScfRef< XclImpDffManager >                  XclImpDffMgrRef;
-+    typedef ::std::vector< XclObjId >                   XclObjIdVec;
-+
-+    SvMemoryStream      maEscherStrm;       /// Copy of Escher stream in memory.
-+    StreamPosVec        maTabStrmPos;       /// Start positions of Escher data for sheets.
-+    XclImpObjMap        maObjMap;           /// Maps drawing objects to Escher stream position.
-+    XclImpObjMapById    maObjMapId;         /// Maps drawing objects to sheet index and object ID.
-+    XclImpTxoMap        maTxoMap;           /// Maps TXO textbox data to sheet index and object ID.
-+    XclImpChartObjList  maTabCharts;        /// Charts imported from Excel chart sheets.
-+    XclImpDffMgrRef     mxDffManager;   /// The Escher stream converter.
-+    XclObjIdVec         maInvalidObjs;      /// All Escher objects to skip.
-+};
-+
-+// Escher property set helper =================================================
-+
-+/** This class reads an Escher property set (msofbtOPT record).
-+    @descr  It can return separate property values or an item set which contains
-+    items translated from these properties. */
-+class XclImpEscherPropSet : protected XclImpRoot
-+{
-+public:
-+    explicit            XclImpEscherPropSet( const XclImpRoot& rRoot );
-+
-+    /** Reads an Escher property set from the stream.
-+        @descr  The stream must point to the start of an Escher record containing properties. */
-+    void                Read( XclImpStream& rStrm );
-+
-+    /** Returns the specified property or the default value, if not extant. */
-+    sal_uInt32          GetPropertyValue( sal_uInt16 nPropId, sal_uInt32 nDefault = 0 ) const;
-+
-+    /** Translates the properties and fills the item set. */
-+    void                FillToItemSet( SfxItemSet& rItemSet ) const;
-+
-+private:
-+    typedef ::std::auto_ptr< SvMemoryStream > SvMemoryStreamPtr;
-+
-+    XclImpObjectManager maObjManager;   /// Local object manager, contains SVX DFF manager.
-+    XclImpDffManager&   mrDffManager;   /// Reference to DFF manager contained in object manager.
-+    SvMemoryStreamPtr   mxMemStrm;      /// Helper stream.
-+};
-+
-+XclImpStream& operator>>( XclImpStream& rStrm, XclImpEscherPropSet& rPropSet );
-+
-+// ============================================================================
-+
-+#endif
-+
---- sc/source/filter/excel/xiescher.cxx.orig	2008-04-11 04:16:07.000000000 +0800
-+++ sc/source/filter/excel/xiescher.cxx	2008-06-04 12:38:12.000000000 +0800
-@@ -296,7 +296,8 @@ XclImpDrawObjBase::XclImpDrawObjBase( co
+ };
+ 
+ // ----------------------------------------------------------------------------
+--- sc/source/filter/excel/xiescher.cxx.orig	2008-06-02 13:59:52.000000000 +0800
++++ sc/source/filter/excel/xiescher.cxx	2008-06-02 16:01:41.000000000 +0800
+@@ -297,7 +297,8 @@ XclImpDrawObjBase::XclImpDrawObjBase( co
      mnShapeBlipId( 0 ),
      mbValid( true ),
      mbAreaObj( false ),
@@ -6048,7 +260,7 @@
  {
  }
  
-@@ -790,6 +791,7 @@ void XclImpTbxControlObj::DoProcessSdrOb
+@@ -855,6 +856,7 @@ void XclImpTbxControlObj::DoProcessSdrOb
  
      // control printable?
      aPropSet.SetBoolProperty( CREATE_OUSTRING( "Printable" ), IsPrintable() );
@@ -6056,7 +268,7 @@
  
      // #118053# #i51348# set internal name of the control (use name from SdrObject, if extant)
      OUString aCtrlName = rSdrObj.GetName();
-@@ -1552,6 +1554,7 @@ SdrObject* XclImpDffManager::ProcessObj(
+@@ -1677,6 +1679,7 @@ SdrObject* XclImpDffManager::ProcessObj(
  
      // set shape information from Escher stream
      xDrawObj->SetShapeData( rObjData.nShapeId, rObjData.nSpFlags, GetPropertyValue( DFF_Prop_pib ) );



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]