diff options
author | Aron Budea <baron@caesar.elte.hu> | 2016-04-25 04:04:24 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-04-26 09:40:56 +0000 |
commit | f91674bd4b5022a63dc5e6a89fe9a1b832d96798 (patch) | |
tree | 82587361a5c7deac5958ef2cd83ef28756afe09a | |
parent | 6046062719f30849cd97161c6a89d27a0b0d2a20 (diff) |
tdf#60418: improve perf of opening/closing odts with form tags
Opening/closing times using "Without Frame tags" attached file from
bug report changed as follows on my system (debug build):
open: 2:06 -> 1:32
close (doc unchanged): 1:52 -> 0:18
The performance fixes in the different CXX files are independent,
eventattachermgr.cxx is related to doc close, the others to doc open.
Change-Id: I24fc4558f79b9123494a3939c0a313fcd47a067f
Reviewed-on: https://gerrit.libreoffice.org/24359
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | comphelper/source/eventattachermgr/eventattachermgr.cxx | 12 | ||||
-rw-r--r-- | comphelper/source/property/propagg.cxx | 112 | ||||
-rw-r--r-- | forms/source/inc/property.hxx | 35 | ||||
-rw-r--r-- | forms/source/misc/property.cxx | 352 |
4 files changed, 215 insertions, 296 deletions
diff --git a/comphelper/source/eventattachermgr/eventattachermgr.cxx b/comphelper/source/eventattachermgr/eventattachermgr.cxx index 70fbe1c756b6..e4f0698509ce 100644 --- a/comphelper/source/eventattachermgr/eventattachermgr.cxx +++ b/comphelper/source/eventattachermgr/eventattachermgr.cxx @@ -394,18 +394,12 @@ Reference< XIdlReflection > ImplEventAttacherManager::getReflection() throw( Exc } -::std::deque<AttacherIndex_Impl>::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex ) +::std::deque< AttacherIndex_Impl >::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex ) { - if (_nIndex < 0) - throw IllegalArgumentException(); - - ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); - for ( sal_Int32 i = 0; (i < _nIndex) && (aIt != aIndex.end()); ++i, ++aIt ) - ; - - if( aIt == aIndex.end() ) + if ( (_nIndex < 0) || (static_cast<sal_uInt32>(_nIndex) >= aIndex.size()) ) throw IllegalArgumentException(); + ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin() + _nIndex; return aIt; } diff --git a/comphelper/source/property/propagg.cxx b/comphelper/source/property/propagg.cxx index 778021eea005..8f774b05600f 100644 --- a/comphelper/source/property/propagg.cxx +++ b/comphelper/source/property/propagg.cxx @@ -31,6 +31,7 @@ #include <algorithm> #include <set> +#include <unordered_set> #include <memory> @@ -61,86 +62,63 @@ namespace comphelper OPropertyArrayAggregationHelper::OPropertyArrayAggregationHelper( const Sequence< Property >& _rProperties, const Sequence< Property >& _rAggProperties, IPropertyInfoService* _pInfoService, sal_Int32 _nFirstAggregateId ) - :m_aProperties( comphelper::sequenceToContainer<std::vector<css::beans::Property>>(_rProperties) ) { - sal_Int32 nDelegatorProps = _rProperties.getLength(); - sal_Int32 nAggregateProps = _rAggProperties.getLength(); - - // make room for all properties - sal_Int32 nMergedProps = nDelegatorProps + nAggregateProps; - m_aProperties.resize( nMergedProps ); - - const Property* pAggregateProps = _rAggProperties.getConstArray(); - const Property* pDelegateProps = _rProperties.getConstArray(); - std::vector<css::beans::Property>::iterator pMergedProps = m_aProperties.begin(); - - // if properties are present both at the delegatee and the aggregate, then the former are supposed to win. - // So, we'll need an existence check. - ::std::set< OUString > aDelegatorProps; - - // create the map for the delegator properties - sal_Int32 nMPLoop = 0; - for ( ; nMPLoop < nDelegatorProps; ++nMPLoop, ++pDelegateProps ) + // if properties are present both at the delegatee and the aggregate, then the former are supposed to win + // merge and sort properties by name, delete duplicates (stable sort ensures delegator properties win) + m_aProperties.insert( m_aProperties.end(), _rProperties.begin(), _rProperties.end() ); + m_aProperties.insert( m_aProperties.end(), _rAggProperties.begin(), _rAggProperties.end() ); + ::std::stable_sort( m_aProperties.begin(), m_aProperties.end(), PropertyCompareByName() ); + m_aProperties.erase( ::std::unique(m_aProperties.begin(), m_aProperties.end(), + []( const css::beans::Property& x, const css::beans::Property& y ) -> bool { return x.Name == y.Name; } ), + m_aProperties.end() ); + m_aProperties.shrink_to_fit(); + + // fill aDelegatorProps with names from _rProperties for a fast existence check + // different kinds of properties are processed differently + ::std::unordered_set< OUString, OUStringHash > aDelegatorProps; + aDelegatorProps.reserve( _rProperties.getLength() ); + for( auto &delegateProp: _rProperties ) { - m_aPropertyAccessors[ pDelegateProps->Handle ] = OPropertyAccessor( -1, nMPLoop, false ); - OSL_ENSURE( aDelegatorProps.find( pDelegateProps->Name ) == aDelegatorProps.end(), + const auto inserted = aDelegatorProps.insert( delegateProp.Name ); + OSL_ENSURE( inserted.second == true, "OPropertyArrayAggregationHelper::OPropertyArrayAggregationHelper: duplicate delegatee property!" ); - aDelegatorProps.insert( pDelegateProps->Name ); } - // create the map for the aggregate properties + ::std::unordered_set< sal_Int32 > existingHandles; + existingHandles.reserve( m_aProperties.size() ); sal_Int32 nAggregateHandle = _nFirstAggregateId; - pMergedProps += nDelegatorProps; - for ( ; nMPLoop < nMergedProps; ++pAggregateProps ) + for ( sal_Int32 nMPLoop = 0; nMPLoop < static_cast< sal_Int32 >( m_aProperties.size() ); ++nMPLoop ) { - // if the aggregate property is present at the delegatee already, ignore it - if ( aDelegatorProps.find( pAggregateProps->Name ) != aDelegatorProps.end() ) + auto &prop = m_aProperties[ nMPLoop ]; + if ( aDelegatorProps.find( prop.Name ) != aDelegatorProps.end() ) { - --nMergedProps; - continue; + m_aPropertyAccessors[ prop.Handle ] = OPropertyAccessor( -1, nMPLoop, false ); + existingHandles.insert( prop.Handle ); } - - // next aggregate property - remember it - *pMergedProps = *pAggregateProps; - - // determine the handle for the property which we will expose to the outside world - sal_Int32 nHandle = -1; - // ask the info service first - if ( _pInfoService ) - nHandle = _pInfoService->getPreferredPropertyId( pMergedProps->Name ); - - if ( -1 == nHandle ) - // no handle from the info service -> default - nHandle = nAggregateHandle++; else - { // check if we alread have a property with the given handle - auto pPropsTilNow = m_aProperties.begin(); - for ( sal_Int32 nCheck = 0; nCheck < nMPLoop; ++nCheck, ++pPropsTilNow ) - if ( pPropsTilNow->Handle == nHandle ) - { // conflicts -> use another one (which we don't check anymore, assuming _nFirstAggregateId was large enough) - nHandle = nAggregateHandle++; - break; - } - } + { + // determine the handle for the property which we will expose to the outside world + sal_Int32 nHandle = -1; + // ask the info service first + if ( _pInfoService ) + nHandle = _pInfoService->getPreferredPropertyId( prop.Name ); - // remember the accessor for this property - m_aPropertyAccessors[ nHandle ] = OPropertyAccessor( pMergedProps->Handle, nMPLoop, true ); - pMergedProps->Handle = nHandle; + if ( ( -1 == nHandle ) || ( existingHandles.find( nHandle ) != existingHandles.end() ) ) + { + // 1. no handle from the info service -> default + // 2. conflicts -> use another one (which we don't check anymore, assuming _nFirstAggregateId was large enough) + nHandle = nAggregateHandle++; + } + else + { + existingHandles.insert( nHandle ); + } - ++nMPLoop; - ++pMergedProps; + // remember the accessor for this property + m_aPropertyAccessors[ nHandle ] = OPropertyAccessor( prop.Handle, nMPLoop, true ); + prop.Handle = nHandle; + } } - m_aProperties.resize( nMergedProps ); - pMergedProps = m_aProperties.begin(); // reset, needed again below - - // sort the properties by name - ::std::sort( pMergedProps, pMergedProps+nMergedProps, PropertyCompareByName()); - - pMergedProps = m_aProperties.begin(); - - // sync the map positions - for ( nMPLoop = 0; nMPLoop < nMergedProps; ++nMPLoop, ++pMergedProps ) - m_aPropertyAccessors[ pMergedProps->Handle ].nPos = nMPLoop; } diff --git a/forms/source/inc/property.hxx b/forms/source/inc/property.hxx index 0fe9750df5dd..daf86db81231 100644 --- a/forms/source/inc/property.hxx +++ b/forms/source/inc/property.hxx @@ -22,7 +22,7 @@ #include <sal/config.h> -#include <vector> +#include <unordered_map> #include <com/sun/star/uno/XAggregation.hpp> #include <com/sun/star/beans/XPropertyState.hpp> @@ -46,40 +46,9 @@ namespace frm class PropertyInfoService { - - struct PropertyAssignment - { - OUString sName; - sal_Int32 nHandle; - - PropertyAssignment() { nHandle = -1; } - PropertyAssignment(const PropertyAssignment& _rSource) - :sName(_rSource.sName), nHandle(_rSource.nHandle) { } - PropertyAssignment(const OUString& _rName, sal_Int32 _nHandle) - :sName(_rName), nHandle(_nHandle) { } - - }; - - typedef std::vector<PropertyAssignment> PropertyMap; + typedef std::unordered_map<OUString, sal_Int32, OUStringHash> PropertyMap; static PropertyMap s_AllKnownProperties; - - // comparing two PropertyAssignment's -public: - typedef PropertyAssignment PUBLIC_SOLARIS_COMPILER_HACK; - // did not get the following compiled under with SUNPRO 5 without this - // public typedef -private: - friend struct PropertyAssignmentNameCompareLess; - typedef ::std::binary_function< PUBLIC_SOLARIS_COMPILER_HACK, PUBLIC_SOLARIS_COMPILER_HACK, sal_Bool > PropertyAssignmentNameCompareLess_Base; - struct PropertyAssignmentNameCompareLess : public PropertyAssignmentNameCompareLess_Base - { - inline bool operator() (const PUBLIC_SOLARIS_COMPILER_HACK& _rL, const PUBLIC_SOLARIS_COMPILER_HACK& _rR) const - { - return (_rL.sName.compareTo(_rR.sName) < 0); - } - }; - public: PropertyInfoService() { } diff --git a/forms/source/misc/property.cxx b/forms/source/misc/property.cxx index 7e47c8cb601b..10f0caf31218 100644 --- a/forms/source/misc/property.cxx +++ b/forms/source/misc/property.cxx @@ -21,10 +21,6 @@ #include "property.hxx" #include "property.hrc" -#include <cppuhelper/queryinterface.hxx> -#include <com/sun/star/beans/PropertyAttribute.hpp> - -#include <algorithm> namespace frm { @@ -37,20 +33,10 @@ sal_Int32 PropertyInfoService::getPropertyId(const OUString& _rName) { initialize(); - PropertyAssignment aCompareName(_rName, -1); - - ::std::pair<PropertyMap::iterator,PropertyMap::iterator> aPair = ::std::equal_range( - s_AllKnownProperties.begin(), - s_AllKnownProperties.end(), - aCompareName, - PropertyAssignmentNameCompareLess()); - sal_Int32 nHandle = -1; - if (aPair.first != aPair.second) - { // we found something _and_ we have an identity - nHandle = aPair.first->nHandle; - } - + const auto foundProperty = s_AllKnownProperties.find(_rName); + if (foundProperty != s_AllKnownProperties.end()) + nHandle = foundProperty->second; return nHandle; } @@ -61,182 +47,174 @@ sal_Int32 ConcreteInfoService::getPreferredPropertyId(const OUString& _rName) } -#define ADD_PROP_ASSIGNMENT(varname) \ - s_AllKnownProperties.push_back(PropertyAssignment(PROPERTY_##varname, PROPERTY_ID_##varname)) +#define EXPAND_PROP_INIT(varname) \ + { PROPERTY_##varname, PROPERTY_ID_##varname } void PropertyInfoService::initialize() { if (!s_AllKnownProperties.empty()) return; - s_AllKnownProperties.reserve(220); - - ADD_PROP_ASSIGNMENT(NAME); - ADD_PROP_ASSIGNMENT(TAG); - ADD_PROP_ASSIGNMENT(TABINDEX); - ADD_PROP_ASSIGNMENT(CLASSID); - ADD_PROP_ASSIGNMENT(ALIGN); - ADD_PROP_ASSIGNMENT(FETCHSIZE); - ADD_PROP_ASSIGNMENT(VALUE); - ADD_PROP_ASSIGNMENT(VALUEMIN); - ADD_PROP_ASSIGNMENT(VALUEMAX); - ADD_PROP_ASSIGNMENT(VALUESTEP); - ADD_PROP_ASSIGNMENT(TEXT); - ADD_PROP_ASSIGNMENT(LABEL); - ADD_PROP_ASSIGNMENT(NAVIGATION); - ADD_PROP_ASSIGNMENT(CYCLE); - ADD_PROP_ASSIGNMENT(CONTROLSOURCE); - ADD_PROP_ASSIGNMENT(ENABLED); - ADD_PROP_ASSIGNMENT(ENABLEVISIBLE); - ADD_PROP_ASSIGNMENT(SPIN); - ADD_PROP_ASSIGNMENT(READONLY); - ADD_PROP_ASSIGNMENT(FILTER); - ADD_PROP_ASSIGNMENT(WIDTH); - ADD_PROP_ASSIGNMENT(SEARCHABLE); - ADD_PROP_ASSIGNMENT(MULTILINE); - ADD_PROP_ASSIGNMENT(TARGET_URL); - ADD_PROP_ASSIGNMENT(DEFAULTCONTROL); - ADD_PROP_ASSIGNMENT(MAXTEXTLEN); - ADD_PROP_ASSIGNMENT(SIZE); - ADD_PROP_ASSIGNMENT(DATE); - ADD_PROP_ASSIGNMENT(TIME); - ADD_PROP_ASSIGNMENT(STATE); - ADD_PROP_ASSIGNMENT(TRISTATE); - ADD_PROP_ASSIGNMENT(HIDDEN_VALUE); - ADD_PROP_ASSIGNMENT(TARGET_FRAME); - ADD_PROP_ASSIGNMENT(BUTTONTYPE); - ADD_PROP_ASSIGNMENT(STRINGITEMLIST); - ADD_PROP_ASSIGNMENT(DEFAULT_TEXT); - ADD_PROP_ASSIGNMENT(DEFAULT_STATE); - ADD_PROP_ASSIGNMENT(DEFAULT_DATE); - ADD_PROP_ASSIGNMENT(DEFAULT_TIME); - ADD_PROP_ASSIGNMENT(DEFAULT_VALUE); - ADD_PROP_ASSIGNMENT(FORMATKEY); - ADD_PROP_ASSIGNMENT(FORMATSSUPPLIER); - ADD_PROP_ASSIGNMENT(SUBMIT_ACTION); - ADD_PROP_ASSIGNMENT(SUBMIT_TARGET); - ADD_PROP_ASSIGNMENT(SUBMIT_METHOD); - ADD_PROP_ASSIGNMENT(SUBMIT_ENCODING); - ADD_PROP_ASSIGNMENT(IMAGE_URL); - ADD_PROP_ASSIGNMENT(GRAPHIC); - ADD_PROP_ASSIGNMENT(EMPTY_IS_NULL); - ADD_PROP_ASSIGNMENT(LISTSOURCETYPE); - ADD_PROP_ASSIGNMENT(LISTSOURCE); - ADD_PROP_ASSIGNMENT(SELECT_SEQ); - ADD_PROP_ASSIGNMENT(VALUE_SEQ); - ADD_PROP_ASSIGNMENT(SELECT_VALUE); - ADD_PROP_ASSIGNMENT(SELECT_VALUE_SEQ); - ADD_PROP_ASSIGNMENT(DEFAULT_SELECT_SEQ); - ADD_PROP_ASSIGNMENT(MULTISELECTION); - ADD_PROP_ASSIGNMENT(DECIMAL_ACCURACY); - ADD_PROP_ASSIGNMENT(EDITMASK); - ADD_PROP_ASSIGNMENT(ISREADONLY); - ADD_PROP_ASSIGNMENT(FIELDTYPE); - ADD_PROP_ASSIGNMENT(DECIMALS); - ADD_PROP_ASSIGNMENT(REFVALUE); - ADD_PROP_ASSIGNMENT(STRICTFORMAT); - ADD_PROP_ASSIGNMENT(DATASOURCE); - ADD_PROP_ASSIGNMENT(ALLOWADDITIONS); - ADD_PROP_ASSIGNMENT(ALLOWEDITS); - ADD_PROP_ASSIGNMENT(ALLOWDELETIONS); - ADD_PROP_ASSIGNMENT(MASTERFIELDS); - ADD_PROP_ASSIGNMENT(ISPASSTHROUGH); - ADD_PROP_ASSIGNMENT(QUERY); - ADD_PROP_ASSIGNMENT(LITERALMASK); - ADD_PROP_ASSIGNMENT(SHOWTHOUSANDSEP); - ADD_PROP_ASSIGNMENT(CURRENCYSYMBOL); - ADD_PROP_ASSIGNMENT(DATEFORMAT); - ADD_PROP_ASSIGNMENT(DATEMIN); - ADD_PROP_ASSIGNMENT(DATEMAX); - ADD_PROP_ASSIGNMENT(DATE_SHOW_CENTURY); - ADD_PROP_ASSIGNMENT(TIMEFORMAT); - ADD_PROP_ASSIGNMENT(TIMEMIN); - ADD_PROP_ASSIGNMENT(TIMEMAX); - ADD_PROP_ASSIGNMENT(LINECOUNT); - ADD_PROP_ASSIGNMENT(BOUNDCOLUMN); - ADD_PROP_ASSIGNMENT(HASNAVIGATION); - ADD_PROP_ASSIGNMENT(FONT); - ADD_PROP_ASSIGNMENT(BACKGROUNDCOLOR); - ADD_PROP_ASSIGNMENT(FILLCOLOR); - ADD_PROP_ASSIGNMENT(TEXTCOLOR); - ADD_PROP_ASSIGNMENT(LINECOLOR); - ADD_PROP_ASSIGNMENT(BORDER); - ADD_PROP_ASSIGNMENT(DROPDOWN); - ADD_PROP_ASSIGNMENT(HSCROLL); - ADD_PROP_ASSIGNMENT(VSCROLL); - ADD_PROP_ASSIGNMENT(TABSTOP); - ADD_PROP_ASSIGNMENT(AUTOCOMPLETE); - ADD_PROP_ASSIGNMENT(HARDLINEBREAKS); - ADD_PROP_ASSIGNMENT(PRINTABLE); - ADD_PROP_ASSIGNMENT(ECHO_CHAR); - ADD_PROP_ASSIGNMENT(ROWHEIGHT); - ADD_PROP_ASSIGNMENT(HELPTEXT); - ADD_PROP_ASSIGNMENT(FONT_NAME); - ADD_PROP_ASSIGNMENT(FONT_STYLENAME); - ADD_PROP_ASSIGNMENT(FONT_FAMILY); - ADD_PROP_ASSIGNMENT(FONT_CHARSET); - ADD_PROP_ASSIGNMENT(FONT_HEIGHT); - ADD_PROP_ASSIGNMENT(FONT_WEIGHT); - ADD_PROP_ASSIGNMENT(FONT_SLANT); - ADD_PROP_ASSIGNMENT(FONT_UNDERLINE); - ADD_PROP_ASSIGNMENT(FONT_WORDLINEMODE); - ADD_PROP_ASSIGNMENT(FONT_STRIKEOUT); - ADD_PROP_ASSIGNMENT(TEXTLINECOLOR); - ADD_PROP_ASSIGNMENT(FONTEMPHASISMARK); - ADD_PROP_ASSIGNMENT(FONTRELIEF); - ADD_PROP_ASSIGNMENT(HELPURL); - ADD_PROP_ASSIGNMENT(RECORDMARKER); - ADD_PROP_ASSIGNMENT(BOUNDFIELD); - ADD_PROP_ASSIGNMENT(INPUT_REQUIRED); - ADD_PROP_ASSIGNMENT(TREATASNUMERIC); - ADD_PROP_ASSIGNMENT(EFFECTIVE_VALUE); - ADD_PROP_ASSIGNMENT(EFFECTIVE_DEFAULT); - ADD_PROP_ASSIGNMENT(EFFECTIVE_MIN); - ADD_PROP_ASSIGNMENT(EFFECTIVE_MAX); - ADD_PROP_ASSIGNMENT(HIDDEN); - ADD_PROP_ASSIGNMENT(FILTERPROPOSAL); - ADD_PROP_ASSIGNMENT(FIELDSOURCE); - ADD_PROP_ASSIGNMENT(TABLENAME); - ADD_PROP_ASSIGNMENT(CONTROLLABEL); - ADD_PROP_ASSIGNMENT(CURRSYM_POSITION); - ADD_PROP_ASSIGNMENT(CURSORCOLOR); - ADD_PROP_ASSIGNMENT(ALWAYSSHOWCURSOR); - ADD_PROP_ASSIGNMENT(DISPLAYSYNCHRON); - ADD_PROP_ASSIGNMENT(ISMODIFIED); - ADD_PROP_ASSIGNMENT(ISNEW); - ADD_PROP_ASSIGNMENT(PRIVILEGES); - ADD_PROP_ASSIGNMENT(DETAILFIELDS); - ADD_PROP_ASSIGNMENT(COMMAND); - ADD_PROP_ASSIGNMENT(COMMANDTYPE); - ADD_PROP_ASSIGNMENT(RESULTSET_CONCURRENCY); - ADD_PROP_ASSIGNMENT(INSERTONLY); - ADD_PROP_ASSIGNMENT(RESULTSET_TYPE); - ADD_PROP_ASSIGNMENT(ESCAPE_PROCESSING); - ADD_PROP_ASSIGNMENT(APPLYFILTER); - ADD_PROP_ASSIGNMENT(ISNULLABLE); - ADD_PROP_ASSIGNMENT(ACTIVECOMMAND); - ADD_PROP_ASSIGNMENT(ISCURRENCY); - ADD_PROP_ASSIGNMENT(URL); - ADD_PROP_ASSIGNMENT(TITLE); - ADD_PROP_ASSIGNMENT(ACTIVE_CONNECTION); - ADD_PROP_ASSIGNMENT(SCALE); - ADD_PROP_ASSIGNMENT(SORT); - ADD_PROP_ASSIGNMENT(PERSISTENCE_MAXTEXTLENGTH); - ADD_PROP_ASSIGNMENT(SCROLL_VALUE); - ADD_PROP_ASSIGNMENT(SPIN_VALUE); - ADD_PROP_ASSIGNMENT(DEFAULT_SCROLL_VALUE); - ADD_PROP_ASSIGNMENT(DEFAULT_SPIN_VALUE); - ADD_PROP_ASSIGNMENT( WRITING_MODE ); - ADD_PROP_ASSIGNMENT( CONTEXT_WRITING_MODE ); - ADD_PROP_ASSIGNMENT( GENERATEVBAEVENTS ); - - // now sort the array by name - - std::sort( - s_AllKnownProperties.begin(), - s_AllKnownProperties.end(), - PropertyAssignmentNameCompareLess() - ); + s_AllKnownProperties.insert({ + EXPAND_PROP_INIT(NAME), + EXPAND_PROP_INIT(TAG), + EXPAND_PROP_INIT(TABINDEX), + EXPAND_PROP_INIT(CLASSID), + EXPAND_PROP_INIT(ALIGN), + EXPAND_PROP_INIT(FETCHSIZE), + EXPAND_PROP_INIT(VALUE), + EXPAND_PROP_INIT(VALUEMIN), + EXPAND_PROP_INIT(VALUEMAX), + EXPAND_PROP_INIT(VALUESTEP), + EXPAND_PROP_INIT(TEXT), + EXPAND_PROP_INIT(LABEL), + EXPAND_PROP_INIT(NAVIGATION), + EXPAND_PROP_INIT(CYCLE), + EXPAND_PROP_INIT(CONTROLSOURCE), + EXPAND_PROP_INIT(ENABLED), + EXPAND_PROP_INIT(ENABLEVISIBLE), + EXPAND_PROP_INIT(SPIN), + EXPAND_PROP_INIT(READONLY), + EXPAND_PROP_INIT(FILTER), + EXPAND_PROP_INIT(WIDTH), + EXPAND_PROP_INIT(SEARCHABLE), + EXPAND_PROP_INIT(MULTILINE), + EXPAND_PROP_INIT(TARGET_URL), + EXPAND_PROP_INIT(DEFAULTCONTROL), + EXPAND_PROP_INIT(MAXTEXTLEN), + EXPAND_PROP_INIT(SIZE), + EXPAND_PROP_INIT(DATE), + EXPAND_PROP_INIT(TIME), + EXPAND_PROP_INIT(STATE), + EXPAND_PROP_INIT(TRISTATE), + EXPAND_PROP_INIT(HIDDEN_VALUE), + EXPAND_PROP_INIT(TARGET_FRAME), + EXPAND_PROP_INIT(BUTTONTYPE), + EXPAND_PROP_INIT(STRINGITEMLIST), + EXPAND_PROP_INIT(DEFAULT_TEXT), + EXPAND_PROP_INIT(DEFAULT_STATE), + EXPAND_PROP_INIT(DEFAULT_DATE), + EXPAND_PROP_INIT(DEFAULT_TIME), + EXPAND_PROP_INIT(DEFAULT_VALUE), + EXPAND_PROP_INIT(FORMATKEY), + EXPAND_PROP_INIT(FORMATSSUPPLIER), + EXPAND_PROP_INIT(SUBMIT_ACTION), + EXPAND_PROP_INIT(SUBMIT_TARGET), + EXPAND_PROP_INIT(SUBMIT_METHOD), + EXPAND_PROP_INIT(SUBMIT_ENCODING), + EXPAND_PROP_INIT(IMAGE_URL), + EXPAND_PROP_INIT(GRAPHIC), + EXPAND_PROP_INIT(EMPTY_IS_NULL), + EXPAND_PROP_INIT(LISTSOURCETYPE), + EXPAND_PROP_INIT(LISTSOURCE), + EXPAND_PROP_INIT(SELECT_SEQ), + EXPAND_PROP_INIT(VALUE_SEQ), + EXPAND_PROP_INIT(SELECT_VALUE), + EXPAND_PROP_INIT(SELECT_VALUE_SEQ), + EXPAND_PROP_INIT(DEFAULT_SELECT_SEQ), + EXPAND_PROP_INIT(MULTISELECTION), + EXPAND_PROP_INIT(DECIMAL_ACCURACY), + EXPAND_PROP_INIT(EDITMASK), + EXPAND_PROP_INIT(ISREADONLY), + EXPAND_PROP_INIT(FIELDTYPE), + EXPAND_PROP_INIT(DECIMALS), + EXPAND_PROP_INIT(REFVALUE), + EXPAND_PROP_INIT(STRICTFORMAT), + EXPAND_PROP_INIT(DATASOURCE), + EXPAND_PROP_INIT(ALLOWADDITIONS), + EXPAND_PROP_INIT(ALLOWEDITS), + EXPAND_PROP_INIT(ALLOWDELETIONS), + EXPAND_PROP_INIT(MASTERFIELDS), + EXPAND_PROP_INIT(ISPASSTHROUGH), + EXPAND_PROP_INIT(QUERY), + EXPAND_PROP_INIT(LITERALMASK), + EXPAND_PROP_INIT(SHOWTHOUSANDSEP), + EXPAND_PROP_INIT(CURRENCYSYMBOL), + EXPAND_PROP_INIT(DATEFORMAT), + EXPAND_PROP_INIT(DATEMIN), + EXPAND_PROP_INIT(DATEMAX), + EXPAND_PROP_INIT(DATE_SHOW_CENTURY), + EXPAND_PROP_INIT(TIMEFORMAT), + EXPAND_PROP_INIT(TIMEMIN), + EXPAND_PROP_INIT(TIMEMAX), + EXPAND_PROP_INIT(LINECOUNT), + EXPAND_PROP_INIT(BOUNDCOLUMN), + EXPAND_PROP_INIT(HASNAVIGATION), + EXPAND_PROP_INIT(FONT), + EXPAND_PROP_INIT(BACKGROUNDCOLOR), + EXPAND_PROP_INIT(FILLCOLOR), + EXPAND_PROP_INIT(TEXTCOLOR), + EXPAND_PROP_INIT(LINECOLOR), + EXPAND_PROP_INIT(BORDER), + EXPAND_PROP_INIT(DROPDOWN), + EXPAND_PROP_INIT(HSCROLL), + EXPAND_PROP_INIT(VSCROLL), + EXPAND_PROP_INIT(TABSTOP), + EXPAND_PROP_INIT(AUTOCOMPLETE), + EXPAND_PROP_INIT(HARDLINEBREAKS), + EXPAND_PROP_INIT(PRINTABLE), + EXPAND_PROP_INIT(ECHO_CHAR), + EXPAND_PROP_INIT(ROWHEIGHT), + EXPAND_PROP_INIT(HELPTEXT), + EXPAND_PROP_INIT(FONT_NAME), + EXPAND_PROP_INIT(FONT_STYLENAME), + EXPAND_PROP_INIT(FONT_FAMILY), + EXPAND_PROP_INIT(FONT_CHARSET), + EXPAND_PROP_INIT(FONT_HEIGHT), + EXPAND_PROP_INIT(FONT_WEIGHT), + EXPAND_PROP_INIT(FONT_SLANT), + EXPAND_PROP_INIT(FONT_UNDERLINE), + EXPAND_PROP_INIT(FONT_WORDLINEMODE), + EXPAND_PROP_INIT(FONT_STRIKEOUT), + EXPAND_PROP_INIT(TEXTLINECOLOR), + EXPAND_PROP_INIT(FONTEMPHASISMARK), + EXPAND_PROP_INIT(FONTRELIEF), + EXPAND_PROP_INIT(HELPURL), + EXPAND_PROP_INIT(RECORDMARKER), + EXPAND_PROP_INIT(BOUNDFIELD), + EXPAND_PROP_INIT(INPUT_REQUIRED), + EXPAND_PROP_INIT(TREATASNUMERIC), + EXPAND_PROP_INIT(EFFECTIVE_VALUE), + EXPAND_PROP_INIT(EFFECTIVE_DEFAULT), + EXPAND_PROP_INIT(EFFECTIVE_MIN), + EXPAND_PROP_INIT(EFFECTIVE_MAX), + EXPAND_PROP_INIT(HIDDEN), + EXPAND_PROP_INIT(FILTERPROPOSAL), + EXPAND_PROP_INIT(FIELDSOURCE), + EXPAND_PROP_INIT(TABLENAME), + EXPAND_PROP_INIT(CONTROLLABEL), + EXPAND_PROP_INIT(CURRSYM_POSITION), + EXPAND_PROP_INIT(CURSORCOLOR), + EXPAND_PROP_INIT(ALWAYSSHOWCURSOR), + EXPAND_PROP_INIT(DISPLAYSYNCHRON), + EXPAND_PROP_INIT(ISMODIFIED), + EXPAND_PROP_INIT(ISNEW), + EXPAND_PROP_INIT(PRIVILEGES), + EXPAND_PROP_INIT(DETAILFIELDS), + EXPAND_PROP_INIT(COMMAND), + EXPAND_PROP_INIT(COMMANDTYPE), + EXPAND_PROP_INIT(RESULTSET_CONCURRENCY), + EXPAND_PROP_INIT(INSERTONLY), + EXPAND_PROP_INIT(RESULTSET_TYPE), + EXPAND_PROP_INIT(ESCAPE_PROCESSING), + EXPAND_PROP_INIT(APPLYFILTER), + EXPAND_PROP_INIT(ISNULLABLE), + EXPAND_PROP_INIT(ACTIVECOMMAND), + EXPAND_PROP_INIT(ISCURRENCY), + EXPAND_PROP_INIT(URL), + EXPAND_PROP_INIT(TITLE), + EXPAND_PROP_INIT(ACTIVE_CONNECTION), + EXPAND_PROP_INIT(SCALE), + EXPAND_PROP_INIT(SORT), + EXPAND_PROP_INIT(PERSISTENCE_MAXTEXTLENGTH), + EXPAND_PROP_INIT(SCROLL_VALUE), + EXPAND_PROP_INIT(SPIN_VALUE), + EXPAND_PROP_INIT(DEFAULT_SCROLL_VALUE), + EXPAND_PROP_INIT(DEFAULT_SPIN_VALUE), + EXPAND_PROP_INIT( WRITING_MODE ), + EXPAND_PROP_INIT( CONTEXT_WRITING_MODE ), + EXPAND_PROP_INIT( GENERATEVBAEVENTS ) + }); } |