summaryrefslogtreecommitdiff
path: root/patches/dev300/forms-radio-button-group-names.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/dev300/forms-radio-button-group-names.diff')
-rw-r--r--patches/dev300/forms-radio-button-group-names.diff897
1 files changed, 0 insertions, 897 deletions
diff --git a/patches/dev300/forms-radio-button-group-names.diff b/patches/dev300/forms-radio-button-group-names.diff
deleted file mode 100644
index b038bdb67..000000000
--- a/patches/dev300/forms-radio-button-group-names.diff
+++ /dev/null
@@ -1,897 +0,0 @@
-diff --git extensions/inc/extensio.hrc extensions/inc/extensio.hrc
-index fe70aa3..c3dbd20 100644
---- extensions/inc/extensio.hrc
-+++ extensions/inc/extensio.hrc
-@@ -458,9 +458,10 @@
- #define HID_PROP_NOLABEL (HID_FORMS_START + 340)
- #define HID_PROP_WRITING_MODE (HID_FORMS_START + 341)
- #define HID_PROP_ANCHOR_TYPE (HID_FORMS_START + 343)
-+#define HID_PROP_GROUP_NAME (HID_FORMS_START + 344)
- // please adjust HID_LAST_FORMS_ID if you add new ids here!
-
--#define HID_LAST_FORMS_ID HID_PROP_ANCHOR_TYPE
-+#define HID_LAST_FORMS_ID HID_PROP_GROUP_NAME
-
- #if HID_LAST_FORMS_ID > HID_FORMS_END
- #error id overflow
-diff --git extensions/source/propctrlr/formmetadata.cxx extensions/source/propctrlr/formmetadata.cxx
-index ae07c9a..1fe7db6 100644
---- extensions/source/propctrlr/formmetadata.cxx
-+++ extensions/source/propctrlr/formmetadata.cxx
-@@ -143,6 +143,7 @@ namespace pcr
- DEF_INFO_3( LABEL, LABEL, LABEL, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
- DEF_INFO_2( CONTROLLABEL, LABELCONTROL, CONTROLLABEL, FORM_VISIBLE, COMPOSEABLE ),
- DEF_INFO_3( WRITING_MODE, WRITING_MODE, WRITING_MODE, FORM_VISIBLE, ENUM, COMPOSEABLE ),
-+ DEF_INFO_3( GROUP_NAME, GROUP_NAME, GROUP_NAME, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
- DEF_INFO_2( TEXT, TEXT, TEXT, DIALOG_VISIBLE, COMPOSEABLE ),
- DEF_INFO_3( MAXTEXTLEN, MAXTEXTLEN, MAXTEXTLEN, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
- DEF_INFO_3( EDITMASK, EDITMASK, EDITMASK, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ),
-diff --git extensions/source/propctrlr/formmetadata.hxx extensions/source/propctrlr/formmetadata.hxx
-index 8ebacf4..ba9174f 100644
---- extensions/source/propctrlr/formmetadata.hxx
-+++ extensions/source/propctrlr/formmetadata.hxx
-@@ -166,6 +166,7 @@ namespace pcr
- #define PROPERTY_ID_ALLOWADDITIONS 20
- #define PROPERTY_ID_ALLOWEDITS 21
- #define PROPERTY_ID_ALLOWDELETIONS 22
-+ #define PROPERTY_ID_GROUP_NAME 23
- #define PROPERTY_ID_NAVIGATION 24
- #define PROPERTY_ID_CYCLE 25
- #define PROPERTY_ID_HIDDEN_VALUE 26
-diff --git extensions/source/propctrlr/formres.src extensions/source/propctrlr/formres.src
-index a52afa2..21a1288 100644
---- extensions/source/propctrlr/formres.src
-+++ extensions/source/propctrlr/formres.src
-@@ -230,6 +230,10 @@ String RID_STR_NAME
- {
- Text [ en-US ] = "Name" ;
- };
-+String RID_STR_GROUP_NAME
-+{
-+ Text [ en-US ] = "Group name" ;
-+};
- String RID_STR_TABINDEX
- {
- Text [ en-US ] = "Tab order" ;
-diff --git extensions/source/propctrlr/formresid.hrc extensions/source/propctrlr/formresid.hrc
-index a889086..aed2207 100644
---- extensions/source/propctrlr/formresid.hrc
-+++ extensions/source/propctrlr/formresid.hrc
-@@ -150,6 +150,7 @@
- #define RID_STR_CURSOR_TYPE ( RID_FORMBROWSER_START + 121 )
- #define RID_STR_ENABLE_VISIBLE ( RID_FORMBROWSER_START + 122 )
- #define RID_STR_WHEEL_BEHAVIOR ( RID_FORMBROWSER_START + 123 )
-+#define RID_STR_GROUP_NAME ( RID_FORMBROWSER_START + 124 )
- // FREE
- // FREE
- // FREE
-diff --git extensions/source/propctrlr/formstrings.hxx extensions/source/propctrlr/formstrings.hxx
-index 606184e..fad672d 100644
---- extensions/source/propctrlr/formstrings.hxx
-+++ extensions/source/propctrlr/formstrings.hxx
-@@ -50,6 +50,7 @@ namespace pcr
- PCR_CONSTASCII_STRING( PROPERTY_TABINDEX, "TabIndex");
- PCR_CONSTASCII_STRING( PROPERTY_TAG, "Tag");
- PCR_CONSTASCII_STRING( PROPERTY_NAME, "Name");
-+ PCR_CONSTASCII_STRING( PROPERTY_GROUP_NAME, "GroupName");
- PCR_CONSTASCII_STRING( PROPERTY_VALUE, "Value");
- PCR_CONSTASCII_STRING( PROPERTY_TEXT, "Text");
- PCR_CONSTASCII_STRING( PROPERTY_NAVIGATION, "NavigationBarMode");
---- extensions/util/hidother.src
-+++ extensions/util/hidother.src
-@@ -307,6 +307,7 @@ hidspecial HID_CHECK_FOR_UPD_DESCRIPTION { HelpId = HID_CHECK_FOR_UPD_DES
- hidspecial HID_PROP_FONT { HelpId = HID_PROP_FONT; }
- hidspecial HID_PROP_FORMATKEY { HelpId = HID_PROP_FORMATKEY; }
- hidspecial HID_PROP_GROUPBOX { HelpId = HID_PROP_GROUPBOX; }
-+hidspecial HID_PROP_GROUP_NAME { HelpId = HID_PROP_GROUP_NAME; }
- hidspecial HID_PROP_HEIGHT { HelpId = HID_PROP_HEIGHT; }
- hidspecial HID_PROP_HELPTEXT { HelpId = HID_PROP_HELPTEXT; }
- hidspecial HID_PROP_HELPURL { HelpId = HID_PROP_HELPURL; }
-diff --git forms/source/component/GroupManager.cxx forms/source/component/GroupManager.cxx
-index d831a82..f5a9ecb 100644
---- forms/source/component/GroupManager.cxx
-+++ forms/source/component/GroupManager.cxx
-@@ -127,14 +127,13 @@ OGroupComp::OGroupComp(const Reference<XPropertySet>& rxSet, sal_Int32 nInsertPo
- ,m_xControlModel(rxSet,UNO_QUERY)
- ,m_nPos( nInsertPos )
- ,m_nTabIndex(0)
-+ ,m_aName( OGroupManager::GetGroupName( rxSet ) )
- {
- if (m_xComponent.is())
- {
- if (hasProperty( PROPERTY_TABINDEX, m_xComponent ) )
- // Indices kleiner 0 werden wie 0 behandelt
- m_nTabIndex = Max(getINT16(m_xComponent->getPropertyValue( PROPERTY_TABINDEX )) , sal_Int16(0));
--
-- m_xComponent->getPropertyValue( PROPERTY_NAME ) >>= m_aName;
- }
- }
-
-@@ -321,7 +320,8 @@ void OGroupManager::removeFromGroupMap(const ::rtl::OUString& _sGroupName,const
- aFind->second.RemoveComponent( _xSet );
-
- // Wenn Anzahl der Gruppenelemente == 1 ist, Gruppe deaktivieren
-- if ( aFind->second.Count() == 1 )
-+ sal_Int32 nCount = aFind->second.Count();
-+ if ( nCount == 1 || nCount == 0 )
- {
- OActiveGroups::iterator aActiveFind = ::std::find(
- m_aActiveGroupMap.begin(),
-@@ -332,7 +332,7 @@ void OGroupManager::removeFromGroupMap(const ::rtl::OUString& _sGroupName,const
- {
- // the group is active. Deactivate it if the remaining component
- // is *no* radio button
-- if ( !isRadioButton( aFind->second.GetObject( 0 ) ) )
-+ if ( nCount == 0 || !isRadioButton( aFind->second.GetObject( 0 ) ) )
- m_aActiveGroupMap.erase( aActiveFind );
- }
- }
-@@ -341,6 +341,8 @@ void OGroupManager::removeFromGroupMap(const ::rtl::OUString& _sGroupName,const
-
- // Bei Component als PropertyChangeListener abmelden
- _xSet->removePropertyChangeListener( PROPERTY_NAME, this );
-+ if (hasProperty(PROPERTY_GROUP_NAME, _xSet))
-+ _xSet->removePropertyChangeListener( PROPERTY_GROUP_NAME, this );
- if (hasProperty(PROPERTY_TABINDEX, _xSet))
- _xSet->removePropertyChangeListener( PROPERTY_TABINDEX, this );
- }
-@@ -351,10 +353,23 @@ void SAL_CALL OGroupManager::propertyChange(const PropertyChangeEvent& evt) thro
-
- // Component aus Gruppe entfernen
- ::rtl::OUString sGroupName;
-- if (evt.PropertyName == PROPERTY_NAME)
-+ if (hasProperty( PROPERTY_GROUP_NAME, xSet ))
-+ xSet->getPropertyValue( PROPERTY_GROUP_NAME ) >>= sGroupName;
-+ if (evt.PropertyName == PROPERTY_NAME) {
-+ if (sGroupName.getLength() > 0)
-+ return; // group hasn't changed; ignore this name change.
-+ // no GroupName; use Name as GroupNme
-+ evt.OldValue >>= sGroupName;
-+ }
-+ else if (evt.PropertyName == PROPERTY_GROUP_NAME) {
- evt.OldValue >>= sGroupName;
-+ if (sGroupName.getLength() == 0) {
-+ // No prior GroupName; fallback to Nme
-+ xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ }
-+ }
- else
-- xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ sGroupName = GetGroupName( xSet );
-
- removeFromGroupMap(sGroupName,xSet);
-
-@@ -437,8 +452,7 @@ void OGroupManager::InsertElement( const Reference<XPropertySet>& xSet )
- m_pCompGroup->InsertComponent( xSet );
-
- // Component in Gruppe aufnehmen
-- ::rtl::OUString sGroupName;
-- xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ ::rtl::OUString sGroupName( GetGroupName( xSet ) );
-
- OGroupArr::iterator aFind = m_aGroupArr.find(sGroupName);
-
-@@ -476,6 +490,8 @@ void OGroupManager::InsertElement( const Reference<XPropertySet>& xSet )
-
- // Bei Component als PropertyChangeListener anmelden
- xSet->addPropertyChangeListener( PROPERTY_NAME, this );
-+ if (hasProperty(PROPERTY_GROUP_NAME, xSet))
-+ xSet->addPropertyChangeListener( PROPERTY_GROUP_NAME, this );
-
- // Tabindex muss nicht jeder unterstuetzen
- if (hasProperty(PROPERTY_TABINDEX, xSet))
-@@ -492,12 +508,26 @@ void OGroupManager::RemoveElement( const Reference<XPropertySet>& xSet )
- return;
-
- // Component aus Gruppe entfernen
-- ::rtl::OUString sGroupName;
-- xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ ::rtl::OUString sGroupName( GetGroupName( xSet ) );
-
- removeFromGroupMap(sGroupName,xSet);
- }
-
-+::rtl::OUString OGroupManager::GetGroupName( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent )
-+{
-+ if (!xComponent.is())
-+ return ::rtl::OUString();
-+ ::rtl::OUString sGroupName;
-+ if (hasProperty( PROPERTY_GROUP_NAME, xComponent )) {
-+ xComponent->getPropertyValue( PROPERTY_GROUP_NAME ) >>= sGroupName;
-+ if (sGroupName.getLength() == 0)
-+ xComponent->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ }
-+ else
-+ xComponent->getPropertyValue( PROPERTY_NAME ) >>= sGroupName;
-+ return sGroupName;
-+}
-+
- //.........................................................................
- } // namespace frm
- //.........................................................................
-diff --git forms/source/component/GroupManager.hxx forms/source/component/GroupManager.hxx
-index bc5a059..b139998 100644
---- forms/source/component/GroupManager.hxx
-+++ forms/source/component/GroupManager.hxx
-@@ -220,6 +220,8 @@ public:
- void getGroup(sal_Int32 nGroup, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> >& _rGroup, ::rtl::OUString& Name);
- void getGroupByName(const ::rtl::OUString& Name, ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> >& _rGroup);
- ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel> > getControlModels();
-+
-+ static ::rtl::OUString GetGroupName( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent );
- };
-
-
-diff --git forms/source/component/RadioButton.cxx forms/source/component/RadioButton.cxx
-index b77979b..d9674c5 100644
---- forms/source/component/RadioButton.cxx
-+++ forms/source/component/RadioButton.cxx
-@@ -31,6 +31,7 @@
- // MARKER(update_precomp.py): autogen include statement, do not remove
- #include "precompiled_forms.hxx"
- #include "RadioButton.hxx"
-+#include "GroupManager.hxx"
- #include "property.hxx"
- #ifndef _FRM_PROPERTY_HRC_
- #include "property.hrc"
-@@ -122,6 +123,7 @@ ORadioButtonModel::ORadioButtonModel(const Reference<XMultiServiceFactory>& _rxF
- m_nClassId = FormComponentType::RADIOBUTTON;
- m_aLabelServiceName = FRM_SUN_COMPONENT_GROUPBOX;
- initValueProperty( PROPERTY_STATE, PROPERTY_ID_STATE );
-+ startAggregatePropertyListening( PROPERTY_GROUP_NAME );
- }
-
- //------------------------------------------------------------------
-@@ -169,7 +171,11 @@ StringSequence SAL_CALL ORadioButtonModel::getSupportedServiceNames() throw(Runt
- void ORadioButtonModel::SetSiblingPropsTo(const ::rtl::OUString& rPropName, const Any& rValue)
- {
- // mein Name
-- ::rtl::OUString sMyName(m_aName);
-+ ::rtl::OUString sMyGroup;
-+ if (hasProperty(PROPERTY_GROUP_NAME, this))
-+ this->getPropertyValue(PROPERTY_GROUP_NAME) >>= sMyGroup;
-+ if (sMyGroup.getLength() == 0)
-+ sMyGroup = m_aName;
-
- // meine Siblings durchiterieren
- Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY);
-@@ -177,8 +183,9 @@ void ORadioButtonModel::SetSiblingPropsTo(const ::rtl::OUString& rPropName, cons
- {
- Reference<XPropertySet> xMyProps;
- query_interface(static_cast<XWeak*>(this), xMyProps);
-- ::rtl::OUString sCurrentName;
-- for (sal_Int32 i=0; i<xIndexAccess->getCount(); ++i)
-+ ::rtl::OUString sCurrentGroup;
-+ sal_Int32 nNumSiblings = xIndexAccess->getCount();
-+ for (sal_Int32 i=0; i<nNumSiblings; ++i)
- {
- Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY);
- if (!xSiblingProperties.is())
-@@ -195,8 +202,8 @@ void ORadioButtonModel::SetSiblingPropsTo(const ::rtl::OUString& rPropName, cons
- continue;
-
- // das 'zur selben Gruppe gehoeren' wird am Namen festgemacht
-- xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sCurrentName;
-- if (sCurrentName == sMyName)
-+ sCurrentGroup = OGroupManager::GetGroupName( xSiblingProperties );
-+ if (sCurrentGroup == sMyGroup)
- xSiblingProperties->setPropertyValue(rPropName, rValue);
- }
- }
-@@ -223,40 +230,7 @@ void ORadioButtonModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, cons
- // die andere Richtung : wenn sich mein Name aendert ...
- if (nHandle == PROPERTY_ID_NAME)
- {
-- // ... muss ich testen, ob ich Siblings mit dem selben Namen habe, damit ich deren ControlSource uebernehmen kann
-- Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY);
-- if (xIndexAccess.is())
-- {
-- ::rtl::OUString sName;
-- ::rtl::OUString sControlSource;
--
-- Reference<XPropertySet> xMyProps;
-- query_interface(static_cast<XWeak*>(this), xMyProps);
-- for (sal_Int32 i=0; i<xIndexAccess->getCount(); ++i)
-- {
-- Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY);
-- if (!xSiblingProperties.is())
-- continue;
--
-- if (xMyProps == xSiblingProperties)
-- // nur wenn ich nicht mich selber gefunden habe
-- continue;
--
-- sal_Int16 nType = 0;
-- xSiblingProperties->getPropertyValue(PROPERTY_CLASSID) >>= nType;
-- if (nType != FormComponentType::RADIOBUTTON)
-- // nur Radio-Buttons
-- continue;
--
-- xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sName;
-- // Control, das zur gleichen Gruppe gehoert ?
-- if (rValue == sName)
-- {
-- setPropertyValue(PROPERTY_CONTROLSOURCE, xSiblingProperties->getPropertyValue(PROPERTY_CONTROLSOURCE));
-- break;
-- }
-- }
-- }
-+ setControlSource();
- }
-
- if (nHandle == PROPERTY_ID_DEFAULTCHECKED)
-@@ -274,6 +248,52 @@ void ORadioButtonModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, cons
- }
- }
-
-+void ORadioButtonModel::setControlSource()
-+{
-+ Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY);
-+ if (xIndexAccess.is())
-+ {
-+ ::rtl::OUString sName, sGroupName;
-+
-+ if (hasProperty(PROPERTY_GROUP_NAME, this))
-+ this->getPropertyValue(PROPERTY_GROUP_NAME) >>= sGroupName;
-+ this->getPropertyValue(PROPERTY_NAME) >>= sName;
-+
-+ Reference<XPropertySet> xMyProps;
-+ query_interface(static_cast<XWeak*>(this), xMyProps);
-+ for (sal_Int32 i=0; i<xIndexAccess->getCount(); ++i)
-+ {
-+ Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY);
-+ if (!xSiblingProperties.is())
-+ continue;
-+
-+ if (xMyProps == xSiblingProperties)
-+ // nur wenn ich nicht mich selber gefunden habe
-+ continue;
-+
-+ sal_Int16 nType = 0;
-+ xSiblingProperties->getPropertyValue(PROPERTY_CLASSID) >>= nType;
-+ if (nType != FormComponentType::RADIOBUTTON)
-+ // nur Radio-Buttons
-+ continue;
-+
-+ ::rtl::OUString sSiblingName, sSiblingGroupName;
-+ if (hasProperty(PROPERTY_GROUP_NAME, xSiblingProperties))
-+ xSiblingProperties->getPropertyValue(PROPERTY_GROUP_NAME) >>= sSiblingGroupName;
-+ xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sSiblingName;
-+
-+ if ((sGroupName.getLength() == 0 && sSiblingGroupName.getLength() == 0 && // (no group name
-+ sName == sSiblingName) || // names match) or
-+ (sGroupName.getLength() != 0 && sSiblingGroupName.getLength() != 0 && // (have group name
-+ sGroupName == sSiblingGroupName)) // they match)
-+ {
-+ setPropertyValue(PROPERTY_CONTROLSOURCE, xSiblingProperties->getPropertyValue(PROPERTY_CONTROLSOURCE));
-+ break;
-+ }
-+ }
-+ }
-+}
-+
- //------------------------------------------------------------------------------
- void ORadioButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const
- {
-@@ -363,6 +383,13 @@ void ORadioButtonModel::_propertyChanged(const PropertyChangeEvent& _rEvent) thr
- SetSiblingPropsTo( PROPERTY_STATE, aZero );
- }
- }
-+ else if ( _rEvent.PropertyName.equals( PROPERTY_GROUP_NAME ) )
-+ {
-+ setControlSource();
-+ // Can't call OReferenceValueComponent::_propertyChanged(), as it
-+ // doesn't know what to do with the GroupName property.
-+ return;
-+ }
-
- OReferenceValueComponent::_propertyChanged( _rEvent );
- }
-diff --git forms/source/component/RadioButton.hxx forms/source/component/RadioButton.hxx
-index c193f8a..e1a7e7e 100644
---- forms/source/component/RadioButton.hxx
-+++ forms/source/component/RadioButton.hxx
-@@ -87,6 +87,8 @@ private:
- our mutex is aquired exactly once
- */
- void setNewAggregateState( const ::com::sun::star::uno::Any& _rValue );
-+
-+ void setControlSource();
- };
-
- //==================================================================
-diff --git forms/source/inc/frm_strings.hxx forms/source/inc/frm_strings.hxx
-index 864160f..4b2efb9 100644
---- forms/source/inc/frm_strings.hxx
-+++ forms/source/inc/frm_strings.hxx
-@@ -100,6 +100,7 @@ namespace frm
- FORMS_CONSTASCII_STRING( PROPERTY_TABINDEX, "TabIndex" );
- FORMS_CONSTASCII_STRING( PROPERTY_TAG, "Tag" );
- FORMS_CONSTASCII_STRING( PROPERTY_NAME, "Name" );
-+ FORMS_CONSTASCII_STRING( PROPERTY_GROUP_NAME, "GroupName" );
- FORMS_CONSTASCII_STRING( PROPERTY_CLASSID, "ClassId" );
- FORMS_CONSTASCII_STRING( PROPERTY_FETCHSIZE, "FetchSize" );
- FORMS_CONSTASCII_STRING( PROPERTY_VALUE, "Value" );
-diff --git forms/source/inc/property.hrc forms/source/inc/property.hrc
-index d5e2476..20bdaf7 100644
---- forms/source/inc/property.hrc
-+++ forms/source/inc/property.hrc
-@@ -63,7 +63,7 @@ namespace frm
- #define PROPERTY_ID_INPUT_REQUIRED (PROPERTY_ID_START + 19)
- #define PROPERTY_ID_WRITING_MODE (PROPERTY_ID_START + 20)
- #define PROPERTY_ID_CONTEXT_WRITING_MODE (PROPERTY_ID_START + 21)
-- // free
-+#define PROPERTY_ID_GROUP_NAME (PROPERTY_ID_START + 22)
- // free
- // free
- // free
-diff --git svx/source/msfilter/msocximex.cxx svx/source/msfilter/msocximex.cxx
-index fab7d46..37b720b 100644
---- svx/source/msfilter/msocximex.cxx
-+++ svx/source/msfilter/msocximex.cxx
-@@ -1709,6 +1709,12 @@ sal_Bool OCX_OptionButton::Import(com::sun::star::uno::Reference<
- aTmp <<= ::com::sun::star::style::VerticalAlignment_MIDDLE;
- rPropSet->setPropertyValue( WW8_ASCII2STR("VerticalAlign"), aTmp );
-
-+ if ( pGroupName )
-+ {
-+ aTmp <<= lclCreateOUString( pGroupName, nGroupNameLen );
-+ rPropSet->setPropertyValue( WW8_ASCII2STR("GroupName"), aTmp);
-+ }
-+
- aFontData.Import(rPropSet);
- return sal_True;
- }
-diff --git toolkit/inc/toolkit/controls/dialogcontrol.hxx toolkit/inc/toolkit/controls/dialogcontrol.hxx
-index 1e65e6f..1301975 100644
---- toolkit/inc/toolkit/controls/dialogcontrol.hxx
-+++ toolkit/inc/toolkit/controls/dialogcontrol.hxx
-@@ -51,6 +51,7 @@
- #include <cppuhelper/propshlp.hxx>
- #include <cppuhelper/basemutex.hxx>
- #include <list>
-+#include <map>
-
- // ----------------------------------------------------
- // class UnoControlDialogModel
-@@ -182,6 +183,14 @@ protected:
- void implNotifyTabModelChange( const ::rtl::OUString& _rAccessor );
-
- void implUpdateGroupStructure();
-+private:
-+ void AddRadioButtonToGroup (
-+ const ::com::sun::star::uno::Reference< XControlModel >& rControlModel,
-+ const ::rtl::OUString& rPropertyName,
-+ ::std::map< ::rtl::OUString, ModelGroup >& pNamedGroups,
-+ ModelGroup*& rpCurrentGroup );
-+ void AddRadioButtonGroup (
-+ ::std::map< ::rtl::OUString, ModelGroup >& pNamedGroups );
- };
-
- // ----------------------------------------------------
---- toolkit/inc/toolkit/helper/property.hxx
-+++ toolkit/inc/toolkit/helper/property.hxx
-@@ -192,6 +192,7 @@ namespace rtl {
- #define BASEPROPERTY_GRID_COLUMNMODEL 143
- #define BASEPROPERTY_GRID_SELECTIONMODE 144
- #define BASEPROPERTY_ENABLEVISIBLE 145 // sal_Bool
-+#define BASEPROPERTY_GROUPNAME 146 // ::rtl::OUString
-
-
- // Keine gebundenen Properties, werden immer aus der Property BASEPROPERTY_FONTDESCRIPTOR entnommen.
-diff --git toolkit/source/awt/vclxwindows.cxx toolkit/source/awt/vclxwindows.cxx
-index bfa828b..206280b 100644
---- toolkit/source/awt/vclxwindows.cxx
-+++ toolkit/source/awt/vclxwindows.cxx
-@@ -1105,6 +1105,7 @@ void VCLXRadioButton::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
- BASEPROPERTY_VERTICALALIGN,
- BASEPROPERTY_WRITING_MODE,
- BASEPROPERTY_CONTEXT_WRITING_MODE,
-+ BASEPROPERTY_GROUPNAME,
- 0);
- VCLXImageConsumer::ImplGetPropertyIds( rIds );
- }
-diff --git toolkit/source/controls/dialogcontrol.cxx toolkit/source/controls/dialogcontrol.cxx
-index 0aebfb8..3fd5723 100644
---- toolkit/source/controls/dialogcontrol.cxx
-+++ toolkit/source/controls/dialogcontrol.cxx
-@@ -142,6 +142,18 @@ namespace
- return xGraphic;
- }
-
-+ static ::rtl::OUString lcl_GetStringProperty( const ::rtl::OUString& sProperty, const Reference< XPropertySet >& xSet )
-+ {
-+ ::rtl::OUString sValue;
-+ Reference< XPropertySetInfo > xPSI;
-+ if (xSet.is() && (xPSI = xSet->getPropertySetInfo()).is() &&
-+ xPSI->hasPropertyByName( sProperty ) )
-+ {
-+ xSet->getPropertyValue( sProperty ) >>= sValue;
-+ }
-+ return sValue;
-+ }
-+
- }
-
- // ----------------------------------------------------------------------------
-@@ -897,6 +909,63 @@ void UnoControlDialogModel::implNotifyTabModelChange( const ::rtl::OUString& _rA
- }
- }
-
-+// ----------------------------------------------------------------------------
-+void UnoControlDialogModel::AddRadioButtonGroup (
-+ ::std::map< ::rtl::OUString, ModelGroup >& rNamedGroups )
-+{
-+ if ( rNamedGroups.size() == 0 )
-+ return;
-+
-+ size_t nGroups = maGroups.size();
-+ maGroups.reserve( nGroups + rNamedGroups.size() );
-+ ::std::map< ::rtl::OUString, ModelGroup >::const_iterator i = rNamedGroups.begin(), e = rNamedGroups.end();
-+ for( ; i != e; ++i)
-+ {
-+ maGroups.push_back( i->second );
-+ }
-+
-+ rNamedGroups.clear();
-+}
-+
-+void UnoControlDialogModel::AddRadioButtonToGroup (
-+ const Reference< XControlModel >& rControlModel,
-+ const ::rtl::OUString& rPropertyName,
-+ ::std::map< ::rtl::OUString, ModelGroup >& rNamedGroups,
-+ ModelGroup*& rpCurrentGroup )
-+{
-+ Reference< XPropertySet > xCurProps( rControlModel, UNO_QUERY );
-+ ::rtl::OUString sGroup = lcl_GetStringProperty( rPropertyName, xCurProps );
-+ const sal_Int32 nControlModelStep = lcl_getDialogStep( rControlModel );
-+
-+ if ( sGroup.getLength() == 0 )
-+ {
-+ // Create a new group if:
-+ if ( maGroups.size() == 0 || // no groups
-+ rpCurrentGroup == NULL || // previous group was closed
-+ (nControlModelStep != 0 && // control step matches current group
-+ maGroups.back().size() > 0 && // (group 0 == display everywhere)
-+ nControlModelStep != lcl_getDialogStep( maGroups.back().back() ) ) )
-+ {
-+ size_t nGroups = maGroups.size();
-+ maGroups.resize( nGroups + 1 );
-+ }
-+ rpCurrentGroup = &maGroups.back();
-+ }
-+ else
-+ {
-+ // Different steps get different sets of named groups
-+ if ( rNamedGroups.size() > 0 &&
-+ rNamedGroups.begin()->second.size() > 0 )
-+ {
-+ const sal_Int32 nPrevStep = lcl_getDialogStep( rNamedGroups.begin()->second.front() );
-+ if ( nControlModelStep != nPrevStep )
-+ AddRadioButtonGroup( rNamedGroups );
-+ }
-+
-+ rpCurrentGroup = &rNamedGroups[ sGroup ];
-+ }
-+ rpCurrentGroup->push_back( rControlModel );
-+}
-
- // ----------------------------------------------------------------------------
- void UnoControlDialogModel::implUpdateGroupStructure()
-@@ -921,10 +990,13 @@ void UnoControlDialogModel::implUpdateGroupStructure()
-
- GroupingMachineState eState = eLookingForGroup; // the current state of our machine
- Reference< XServiceInfo > xModelSI; // for checking for a radion button
-- AllGroups::iterator aCurrentGroup = maGroups.end(); // the group which we're currently building
-- sal_Int32 nCurrentGroupStep = -1; // the step which all controls of the current group belong to
-+ ModelGroup* aCurrentGroup = NULL; // the group which we're currently building
- sal_Bool bIsRadioButton; // is it a radio button?
-
-+ const ::rtl::OUString GROUP_NAME( RTL_CONSTASCII_USTRINGPARAM( "GroupName" ) );
-+
-+ ::std::map< ::rtl::OUString, ModelGroup > aNamedGroups;
-+
- #if OSL_DEBUG_LEVEL > 1
- ::std::vector< ::rtl::OUString > aCurrentGroupLabels;
- #endif
-@@ -945,14 +1017,8 @@ void UnoControlDialogModel::implUpdateGroupStructure()
- // the current model is a radio button
- // -> we found the beginning of a new group
- // create the place for this group
-- size_t nGroups = maGroups.size();
-- maGroups.resize( nGroups + 1 );
-- aCurrentGroup = maGroups.begin() + nGroups;
-- // and add the (only, til now) member
-- aCurrentGroup->push_back( *pControlModels );
--
-- // get the step which all controls of this group now have to belong to
-- nCurrentGroupStep = lcl_getDialogStep( *pControlModels );
-+ AddRadioButtonToGroup( *pControlModels, GROUP_NAME, aNamedGroups, aCurrentGroup );
-+
- // new state: looking for further members
- eState = eExpandingGroup;
-
-@@ -970,7 +1036,7 @@ void UnoControlDialogModel::implUpdateGroupStructure()
- {
- if ( !bIsRadioButton )
- { // no radio button -> the group is done
-- aCurrentGroup = maGroups.end();
-+ aCurrentGroup = NULL;
- eState = eLookingForGroup;
- #if OSL_DEBUG_LEVEL > 1
- aCurrentGroupLabels.clear();
-@@ -978,48 +1044,9 @@ void UnoControlDialogModel::implUpdateGroupStructure()
- continue;
- }
-
-- // it is a radio button - is it on the proper page?
-- const sal_Int32 nThisModelStep = lcl_getDialogStep( *pControlModels );
-- if ( ( nThisModelStep == nCurrentGroupStep ) // the current button is on the same dialog page
-- || ( 0 == nThisModelStep ) // the current button appears on all pages
-- )
-- {
-- // -> it belongs to the same group
-- aCurrentGroup->push_back( *pControlModels );
-- // state still is eExpandingGroup - we're looking for further elements
-- eState = eExpandingGroup;
-+ AddRadioButtonToGroup( *pControlModels, GROUP_NAME, aNamedGroups, aCurrentGroup );
-
- #if OSL_DEBUG_LEVEL > 1
-- Reference< XPropertySet > xModelProps( *pControlModels, UNO_QUERY );
-- ::rtl::OUString sLabel;
-- if ( xModelProps.is() && xModelProps->getPropertySetInfo().is() && xModelProps->getPropertySetInfo()->hasPropertyByName( ::rtl::OUString::createFromAscii( "Label" ) ) )
-- xModelProps->getPropertyValue( ::rtl::OUString::createFromAscii( "Label" ) ) >>= sLabel;
-- aCurrentGroupLabels.push_back( sLabel );
--#endif
-- continue;
-- }
--
-- // it's a radio button, but on a different page
-- // -> we open a new group for it
--
-- // close the old group
-- aCurrentGroup = maGroups.end();
--#if OSL_DEBUG_LEVEL > 1
-- aCurrentGroupLabels.clear();
--#endif
--
-- // open a new group
-- size_t nGroups = maGroups.size();
-- maGroups.resize( nGroups + 1 );
-- aCurrentGroup = maGroups.begin() + nGroups;
-- // and add the (only, til now) member
-- aCurrentGroup->push_back( *pControlModels );
--
-- nCurrentGroupStep = nThisModelStep;
--
-- // state is the same: we still are looking for further elements of the current group
-- eState = eExpandingGroup;
--#if OSL_DEBUG_LEVEL > 1
- Reference< XPropertySet > xModelProps( *pControlModels, UNO_QUERY );
- ::rtl::OUString sLabel;
- if ( xModelProps.is() && xModelProps->getPropertySetInfo().is() && xModelProps->getPropertySetInfo()->hasPropertyByName( ::rtl::OUString::createFromAscii( "Label" ) ) )
-@@ -1031,6 +1058,7 @@ void UnoControlDialogModel::implUpdateGroupStructure()
- }
- }
-
-+ AddRadioButtonGroup( aNamedGroups );
- mbGroupsUpToDate = sal_True;
- }
-
-diff --git toolkit/source/controls/unocontrolmodel.cxx toolkit/source/controls/unocontrolmodel.cxx
-index 33e7b7b..453be84 100644
---- toolkit/source/controls/unocontrolmodel.cxx
-+++ toolkit/source/controls/unocontrolmodel.cxx
-@@ -348,6 +348,7 @@ void UnoControlModel::ImplPropertyChanged( sal_uInt16 )
- case BASEPROPERTY_ENABLEVISIBLE:
- case BASEPROPERTY_DECORATION: aDefault <<= (sal_Bool) sal_True; break;
-
-+ case BASEPROPERTY_GROUPNAME:
- case BASEPROPERTY_HELPTEXT:
- case BASEPROPERTY_HELPURL:
- case BASEPROPERTY_IMAGEURL:
-diff --git toolkit/source/helper/property.cxx toolkit/source/helper/property.cxx
-index 0a26448..13102ff 100644
---- toolkit/source/helper/property.cxx
-+++ toolkit/source/helper/property.cxx
-@@ -180,6 +180,7 @@ ImplPropertyInfo* ImplGetPropertyInfos( sal_uInt16& rElementCount )
- DECL_PROP_3 ( "FormatsSupplier", FORMATSSUPPLIER, Reference< ::com::sun::star::util::XNumberFormatsSupplier >, BOUND, MAYBEVOID, TRANSIENT ),
-
- DECL_PROP_2 ( "Graphic", GRAPHIC, Reference< ::com::sun::star::graphic::XGraphic >, BOUND, TRANSIENT ),
-+ DECL_PROP_2 ( "GroupName", GROUPNAME, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
- DECL_PROP_2 ( "HelpText", HELPTEXT, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
- DECL_PROP_2 ( "HelpURL", HELPURL, ::rtl::OUString, BOUND, MAYBEDEFAULT ),
- DECL_PROP_2 ( "HideInactiveSelection", HIDEINACTIVESELECTION, bool, BOUND, MAYBEDEFAULT ),
-diff --git xmloff/inc/xmlnmspe.hxx xmloff/inc/xmlnmspe.hxx
-index 060a5a5..88516fe 100644
---- xmloff/inc/xmlnmspe.hxx
-+++ xmloff/inc/xmlnmspe.hxx
-@@ -95,6 +95,7 @@ XML_OLD_NAMESPACE( META, 6U )
-
- // experimental namespaces
- XML_NAMESPACE( FIELD, 100U )
-+XML_NAMESPACE( FORMX, 101U ) // form interop extensions
-
-
- #endif // _XMLOFF_XMLNMSPE_HXX
-diff --git xmloff/inc/xmloff/xmltoken.hxx xmloff/inc/xmloff/xmltoken.hxx
-index 11116de..e710a61 100644
---- xmloff/inc/xmloff/xmltoken.hxx
-+++ xmloff/inc/xmloff/xmltoken.hxx
-@@ -142,6 +142,10 @@ namespace xmloff { namespace token {
- XML_NP_GRDDL,
- XML_N_GRDDL,
-
-+ // jonp: 2008-09-24 Excel Interop
-+ XML_NP_FORMX,
-+ XML_N_FORMX,
-+
- // units
- XML_UNIT_MM,
- XML_UNIT_M,
-diff --git xmloff/source/core/xmlexp.cxx xmloff/source/core/xmlexp.cxx
-index 694df43..1dc010d 100644
---- xmloff/source/core/xmlexp.cxx
-+++ xmloff/source/core/xmlexp.cxx
-@@ -314,6 +314,7 @@ void SvXMLExport::_InitCtor()
- mpNamespaceMap->Add( GetXMLToken(XML_NP_XSD), GetXMLToken(XML_N_XSD), XML_NAMESPACE_XSD );
- mpNamespaceMap->Add( GetXMLToken(XML_NP_XSI), GetXMLToken(XML_N_XSI), XML_NAMESPACE_XSI );
- mpNamespaceMap->Add( GetXMLToken(XML_NP_FIELD), GetXMLToken(XML_N_FIELD), XML_NAMESPACE_FIELD );
-+ mpNamespaceMap->Add( GetXMLToken(XML_NP_FORMX), GetXMLToken(XML_N_FORMX), XML_NAMESPACE_FORMX );
- }
- // RDFa: needed for content and header/footer styles
- if( (getExportFlags() & (EXPORT_STYLES|EXPORT_AUTOSTYLES|EXPORT_MASTERSTYLES|EXPORT_CONTENT) ) != 0 )
-diff --git xmloff/source/core/xmlimp.cxx xmloff/source/core/xmlimp.cxx
-index e3b116c..a827e5b 100644
---- xmloff/source/core/xmlimp.cxx
-+++ xmloff/source/core/xmlimp.cxx
-@@ -108,6 +108,7 @@ sal_Char __READONLY_DATA sXML_np__script[] = "_script";
- sal_Char __READONLY_DATA sXML_np__config[] = "_config";
- sal_Char __READONLY_DATA sXML_np__db[] = "_db";
- sal_Char __READONLY_DATA sXML_np__xforms[] = "_xforms";
-+sal_Char __READONLY_DATA sXML_np__formx[] = "_formx";
- sal_Char __READONLY_DATA sXML_np__xsd[] = "_xsd";
- sal_Char __READONLY_DATA sXML_np__xsi[] = "_xsi";
- sal_Char __READONLY_DATA sXML_np__field[] = "_field";
-@@ -283,6 +284,9 @@ void SvXMLImport::_InitCtor()
- mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xforms) ),
- GetXMLToken(XML_N_XFORMS_1_0),
- XML_NAMESPACE_XFORMS );
-+ mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__formx) ),
-+ GetXMLToken( XML_N_FORMX ),
-+ XML_NAMESPACE_FORMX );
- mpNamespaceMap->Add( OUString( RTL_CONSTASCII_USTRINGPARAM ( sXML_np__xsd) ),
- GetXMLToken(XML_N_XSD),
- XML_NAMESPACE_XSD );
-diff --git xmloff/source/core/xmltoken.cxx xmloff/source/core/xmltoken.cxx
-index 8d66db2..24faf3d 100644
---- xmloff/source/core/xmltoken.cxx
-+++ xmloff/source/core/xmltoken.cxx
-@@ -150,6 +150,10 @@ namespace xmloff { namespace token {
- TOKEN( "grddl", XML_NP_GRDDL ),
- TOKEN( "http://www.w3.org/2003/g/data-view#", XML_N_GRDDL ),
-
-+ // jonp: 2008-09-24 Excel Interop
-+ TOKEN( "formx", XML_NP_FORMX ),
-+ TOKEN( "urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0", XML_N_FORMX ),
-+
- // units
- TOKEN( "mm", XML_UNIT_MM ),
- TOKEN( "m", XML_UNIT_M ),
-diff --git xmloff/source/forms/elementexport.cxx xmloff/source/forms/elementexport.cxx
-index 357b434..cb859fb 100644
---- xmloff/source/forms/elementexport.cxx
-+++ xmloff/source/forms/elementexport.cxx
-@@ -1113,6 +1113,39 @@ namespace xmloff
- }
-
- // ----------------------------------
-+ // the string properties
-+ {
-+ static sal_Int32 nStringPropertyAttributeIds[] =
-+ { // attribute flags
-+ SCA_GROUP_NAME
-+ };
-+ static const ::rtl::OUString* pStringPropertyNames[] =
-+ { // property names
-+ &PROPERTY_GROUP_NAME
-+ };
-+
-+ sal_Int32 nIdCount = sizeof( nStringPropertyAttributeIds ) / sizeof( nStringPropertyAttributeIds[0] );
-+ #if OSL_DEBUG_LEVEL > 0
-+ sal_Int32 nNameCount = sizeof( pStringPropertyNames ) / sizeof( pStringPropertyNames[0] );
-+ OSL_ENSURE( ( nIdCount == nNameCount ),
-+ "OControlExport::exportSpecialAttributes: somebody tampered with the maps (2)!" );
-+ #endif
-+ for ( i = 0; i < nIdCount; ++i )
-+ if ( nStringPropertyAttributeIds[i] & m_nIncludeSpecial )
-+ {
-+ exportStringPropertyAttribute(
-+ OAttributeMetaData::getSpecialAttributeNamespace( nStringPropertyAttributeIds[i] ),
-+ OAttributeMetaData::getSpecialAttributeName( nStringPropertyAttributeIds[i] ),
-+ *( pStringPropertyNames[i] )
-+ );
-+ #if OSL_DEBUG_LEVEL > 0
-+ // reset the bit for later checking
-+ m_nIncludeSpecial = m_nIncludeSpecial & ~nStringPropertyAttributeIds[i];
-+ #endif
-+ }
-+ }
-+
-+ // ----------------------------------
- if ((SCA_MIN_VALUE | SCA_MAX_VALUE) & m_nIncludeSpecial)
- {
- // need to export the min value and the max value as attributes
-@@ -1570,6 +1603,8 @@ namespace xmloff
- }
- if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_IMAGE_POSITION ) )
- m_nIncludeSpecial |= SCA_IMAGE_POSITION;
-+ if ( m_xPropertyInfo->hasPropertyByName( PROPERTY_GROUP_NAME ) )
-+ m_nIncludeSpecial |= SCA_GROUP_NAME;
- m_nIncludeDatabase = DA_DATA_FIELD | DA_INPUT_REQUIRED;
- m_nIncludeEvents = EA_CONTROL_EVENTS | EA_ON_CHANGE;
- break;
-diff --git xmloff/source/forms/formattributes.cxx xmloff/source/forms/formattributes.cxx
-index 4314711..5df31ed 100644
---- xmloff/source/forms/formattributes.cxx
-+++ xmloff/source/forms/formattributes.cxx
-@@ -195,6 +195,7 @@ namespace xmloff
- case SCA_MAX_VALUE: return "max-value";
- case SCA_MIN_VALUE: return "min-value";
- case SCA_VALIDATION: return "validation";
-+ case SCA_GROUP_NAME: return "group-name";
- case SCA_MULTI_LINE: return "multi-line";
- case SCA_AUTOMATIC_COMPLETION: return "auto-complete";
- case SCA_MULTIPLE: return "multiple";
-@@ -215,9 +216,12 @@ namespace xmloff
- }
-
- //---------------------------------------------------------------------
-- sal_uInt16 OAttributeMetaData::getSpecialAttributeNamespace(sal_Int32 /*_nId*/)
-+ sal_uInt16 OAttributeMetaData::getSpecialAttributeNamespace(sal_Int32 _nId)
- {
-- // nothing special here
-+ switch( _nId )
-+ {
-+ case SCA_GROUP_NAME: return XML_NAMESPACE_FORMX;
-+ }
- return XML_NAMESPACE_FORM;
- }
-
-diff --git xmloff/source/forms/formattributes.hxx xmloff/source/forms/formattributes.hxx
-index 50bad1b..ef6e7eb 100644
---- xmloff/source/forms/formattributes.hxx
-+++ xmloff/source/forms/formattributes.hxx
-@@ -126,6 +126,7 @@ namespace xmloff
- #define SCA_MAX_VALUE 0x00000002
- #define SCA_MIN_VALUE 0x00000004
- #define SCA_VALIDATION 0x00000008
-+ #define SCA_GROUP_NAME 0x00000010
- #define SCA_MULTI_LINE 0x00000020
- #define SCA_AUTOMATIC_COMPLETION 0x00000080
- #define SCA_MULTIPLE 0x00000100
-diff --git xmloff/source/forms/layerimport.cxx xmloff/source/forms/layerimport.cxx
-index 4381ddd..cf73233 100644
---- xmloff/source/forms/layerimport.cxx
-+++ xmloff/source/forms/layerimport.cxx
-@@ -97,6 +97,8 @@ namespace xmloff
- m_aAttributeMetaData.addStringProperty(
- OAttributeMetaData::getCommonControlAttributeName(CCA_NAME), PROPERTY_NAME);
- m_aAttributeMetaData.addStringProperty(
-+ OAttributeMetaData::getSpecialAttributeName(SCA_GROUP_NAME), PROPERTY_GROUP_NAME);
-+ m_aAttributeMetaData.addStringProperty(
- OAttributeMetaData::getCommonControlAttributeName(CCA_IMAGE_DATA), PROPERTY_IMAGEURL);
- m_aAttributeMetaData.addStringProperty(
- OAttributeMetaData::getCommonControlAttributeName(CCA_LABEL), PROPERTY_LABEL);
-diff --git xmloff/source/forms/strings.hxx xmloff/source/forms/strings.hxx
-index 5b992ef..b067c7b 100644
---- xmloff/source/forms/strings.hxx
-+++ xmloff/source/forms/strings.hxx
-@@ -207,6 +207,7 @@ namespace xmloff
- XMLFORM_CONSTASCII_STRING( PROPERTY_IMAGE_POSITION, "ImagePosition");
- XMLFORM_CONSTASCII_STRING( PROPERTY_IMAGE_ALIGN, "ImageAlign");
- XMLFORM_CONSTASCII_STRING( PROPERTY_SCALE_IMAGE, "ScaleImage");
-+ XMLFORM_CONSTASCII_STRING( PROPERTY_GROUP_NAME, "GroupName");
-
- XMLFORM_CONSTASCII_STRING( PROPERTY_BOUND_CELL, "BoundCell");
- XMLFORM_CONSTASCII_STRING( PROPERTY_LIST_CELL_RANGE, "CellRange");