diff options
Diffstat (limited to 'patches/dev300/forms-radio-button-group-names.diff')
-rw-r--r-- | patches/dev300/forms-radio-button-group-names.diff | 897 |
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"); |