Attached is the current version of RadioButton Group Name support. As it happens, your hint about ORadioButtonModel::SetSiblingPropsTo() solves the problems I had last time. It now operates as expected in the "migration" scenario, changing an existing set of RadioButtons with the same name to two (or more) sets or RadioButtons by setting the GroupName property without changing the Name property.
There are only four things worth mentioning: 1. The GroupName property has not yet been brought to the ODF file format, and thus it currently relies on the default property support. 2. GroupName hasn't yet been hooked into any import filters, so Excel import won't start using GroupName yet. 3. I haven't written any new unit tests to for the GroupName support. I'll be working on fixing 1 through 3 next. 4. About those unit tests... :-) First of all, it helps to know that I need to run `dmake` within qadevOOo before `dmake` in forms/qa/integration/forms will work. Next, the tests work...inconsistently. Even against an *unmodified* OpenOffice.org 2.4.0 installation (as provided by the .tar.gz on the openoffice.org site), `dmake run_RadioButtons` fails the *first* time it's run within checkThreeGroups -- somehow changing the selected RadioButtons results in NO radio buttons being selected (bizarre!). This results in one window remaining open after the test. Run `dmake run_RadioButtons` a second time (while the remaining window from the first run is still open), and all tests work. Close the window "left behind" by the failing run and it will fail in the same spot again. Very odd. Doubly odd is that occasionally I get a NullPointerException: java.lang.NullPointerException LOG> at integration.forms.RadioButtons.checkRadio(RadioButtons.java:329) LOG> at integration.forms.RadioButtons.checkCalcPageSwitch(RadioButtons.java:251) LOG> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) LOG> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) LOG> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) LOG> at java.lang.reflect.Method.invoke(Method.java:585) LOG> at complexlib.MethodThread.run(Unknown Source) LOG> Finished null ***** State for integration.forms.RadioButtons ****** checkCalcPageSwitch - java.lang.NullPointerException Not sure what's going on there. Again, this happens against both an OpenOffice.org 2.4.0 install and against a build with my changes, so I don't think this is due to me. Questions: On Wed, 2008-02-06 at 16:48 +0100, Frank Schönheit - Sun Microsystems Germany wrote: > Some more things I noticed, which you should address at some stage (not > necessarily now): > - m_sGroupName must also be initialized in the "cloning" ctor of > ORadioButtonModel Is this "cloning" ctor the ORadioButtonModel(const ORadioButtonModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) constructor, or a different one? If it is, this has been fixed. > - don't rely on the GroupName property being present, check for > existence in every place where you use it This should be done now. > - ::propertyChange: when the Name changes, but the GroupName is not > empty, then nothing should be done at all ... shouldn't it? That sounds reasonable, and has been done in the attached patch. Thanks, - Jon
Index: extensions/inc/extensio.hrc =================================================================== RCS file: /cvs/util/extensions/inc/extensio.hrc,v retrieving revision 1.33 diff -u -p -r1.33 extensio.hrc --- extensions/inc/extensio.hrc 27 Nov 2007 11:51:34 -0000 1.33 +++ extensions/inc/extensio.hrc 29 Mar 2008 19:39:04 -0000 @@ -162,7 +162,7 @@ //----------------------------------------------------------------------- // FREE - // FREE +#define HID_PROP_GROUP_NAME (HID_FORMS_START + 1) #define HID_PROP_GROUPBOX (HID_FORMS_START + 2) #define HID_PROP_CONTROLSOURCE (HID_FORMS_START + 3) #define HID_PROP_NAME (HID_FORMS_START + 4) Index: extensions/source/propctrlr/formmetadata.hxx =================================================================== RCS file: /cvs/util/extensions/source/propctrlr/formmetadata.hxx,v retrieving revision 1.34 diff -u -p -r1.34 formmetadata.hxx --- extensions/source/propctrlr/formmetadata.hxx 27 Nov 2007 11:52:15 -0000 1.34 +++ extensions/source/propctrlr/formmetadata.hxx 29 Mar 2008 19:39:04 -0000 @@ -178,6 +178,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 Index: extensions/source/propctrlr/formmetadata.cxx =================================================================== RCS file: /cvs/util/extensions/source/propctrlr/formmetadata.cxx,v retrieving revision 1.47.18.1 diff -u -p -r1.47.18.1 formmetadata.cxx --- extensions/source/propctrlr/formmetadata.cxx 11 Jan 2008 08:23:04 -0000 1.47.18.1 +++ extensions/source/propctrlr/formmetadata.cxx 29 Mar 2008 19:39:04 -0000 @@ -154,6 +154,7 @@ namespace pcr DEF_INFO_?( propname and id, resoure id, help id, flags ), */ DEF_INFO_3( NAME, NAME, NAME, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ), + DEF_INFO_3( GROUP_NAME, GROUP_NAME, GROUP_NAME, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ), DEF_INFO_2( TITLE, TITLE, TITLE, FORM_VISIBLE, DIALOG_VISIBLE ), DEF_INFO_3( LABEL, LABEL, LABEL, FORM_VISIBLE, DIALOG_VISIBLE, COMPOSEABLE ), DEF_INFO_2( CONTROLLABEL, LABELCONTROL, CONTROLLABEL, FORM_VISIBLE, COMPOSEABLE ), Index: extensions/source/propctrlr/formstrings.hxx =================================================================== RCS file: /cvs/util/extensions/source/propctrlr/formstrings.hxx,v retrieving revision 1.38 diff -u -p -r1.38 formstrings.hxx --- extensions/source/propctrlr/formstrings.hxx 27 Nov 2007 11:53:16 -0000 1.38 +++ extensions/source/propctrlr/formstrings.hxx 29 Mar 2008 19:39:05 -0000 @@ -57,6 +57,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"); Index: extensions/source/propctrlr/formresid.hrc =================================================================== RCS file: /cvs/util/extensions/source/propctrlr/formresid.hrc,v retrieving revision 1.36 diff -u -p -r1.36 formresid.hrc --- extensions/source/propctrlr/formresid.hrc 27 Nov 2007 11:52:56 -0000 1.36 +++ extensions/source/propctrlr/formresid.hrc 29 Mar 2008 19:39:05 -0000 @@ -152,7 +152,7 @@ #define RID_STR_TAG ( RID_FORMBROWSER_START + 116 ) #define RID_STR_HELPTEXT ( RID_FORMBROWSER_START + 117 ) #define RID_STR_HELPURL ( RID_FORMBROWSER_START + 118 ) - // FREE +#define RID_STR_GROUP_NAME ( RID_FORMBROWSER_START + 119 ) #define RID_STR_UNCHECKEDREFVALUE ( RID_FORMBROWSER_START + 120 ) #define RID_STR_CURSOR_TYPE ( RID_FORMBROWSER_START + 121 ) // FREE Index: extensions/source/propctrlr/formres.src =================================================================== RCS file: /cvs/util/extensions/source/propctrlr/formres.src,v retrieving revision 1.81 diff -u -p -r1.81 formres.src --- extensions/source/propctrlr/formres.src 27 Nov 2007 11:52:35 -0000 1.81 +++ extensions/source/propctrlr/formres.src 29 Mar 2008 19:39:05 -0000 @@ -235,6 +235,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" ; Index: forms/source/component/GroupManager.hxx =================================================================== RCS file: /cvs/gsl/forms/source/component/GroupManager.hxx,v retrieving revision 1.11 diff -u -p -r1.11 GroupManager.hxx --- forms/source/component/GroupManager.hxx 12 Oct 2006 11:12:12 -0000 1.11 +++ forms/source/component/GroupManager.hxx 29 Mar 2008 19:39:05 -0000 @@ -248,6 +248,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 void GetGroupName( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent, ::rtl::OUString& sGroupName ); }; Index: forms/source/component/GroupManager.cxx =================================================================== RCS file: /cvs/gsl/forms/source/component/GroupManager.cxx,v retrieving revision 1.17 diff -u -p -r1.17 GroupManager.cxx --- forms/source/component/GroupManager.cxx 16 Sep 2006 23:51:13 -0000 1.17 +++ forms/source/component/GroupManager.cxx 29 Mar 2008 19:39:05 -0000 @@ -155,7 +155,7 @@ OGroupComp::OGroupComp(const Reference<X // 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; + OGroupManager::GetGroupName (m_xComponent, m_aName); } } @@ -342,7 +342,8 @@ void OGroupManager::removeFromGroupMap(c aFind->second.RemoveComponent( _xSet ); // Wenn Anzahl der Gruppenelemente == 1 ist, Gruppe deaktivieren - if ( aFind->second.Count() == 1 ) + int nCount = aFind->second.Count(); + if ( nCount == 1 || nCount == 0 ) { OActiveGroups::iterator aActiveFind = ::std::find( m_aActiveGroupMap.begin(), @@ -353,7 +354,7 @@ void OGroupManager::removeFromGroupMap(c { // 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 ); } } @@ -362,6 +363,8 @@ void OGroupManager::removeFromGroupMap(c // 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 ); } @@ -369,13 +372,25 @@ void OGroupManager::removeFromGroupMap(c void SAL_CALL OGroupManager::propertyChange(const PropertyChangeEvent& evt) throw ( ::com::sun::star::uno::RuntimeException) { Reference<XPropertySet> xSet(evt.Source, UNO_QUERY); - // 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; + GetGroupName (xSet, sGroupName); removeFromGroupMap(sGroupName,xSet); @@ -459,7 +474,7 @@ void OGroupManager::InsertElement( const // Component in Gruppe aufnehmen ::rtl::OUString sGroupName; - xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName; + GetGroupName (xSet, sGroupName); OGroupArr::iterator aFind = m_aGroupArr.find(sGroupName); @@ -497,6 +512,8 @@ void OGroupManager::InsertElement( const // 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)) @@ -514,11 +531,22 @@ void OGroupManager::RemoveElement( const // Component aus Gruppe entfernen ::rtl::OUString sGroupName; - xSet->getPropertyValue( PROPERTY_NAME ) >>= sGroupName; + GetGroupName (xSet, sGroupName); removeFromGroupMap(sGroupName,xSet); } +void OGroupManager::GetGroupName (::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> xComponent, ::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; +} + //......................................................................... } // namespace frm //......................................................................... Index: forms/source/component/RadioButton.hxx =================================================================== RCS file: /cvs/gsl/forms/source/component/RadioButton.hxx,v retrieving revision 1.11 diff -u -p -r1.11 RadioButton.hxx --- forms/source/component/RadioButton.hxx 9 Mar 2007 13:31:41 -0000 1.11 +++ forms/source/component/RadioButton.hxx 29 Mar 2008 19:39:05 -0000 @@ -49,6 +49,9 @@ namespace frm //================================================================== class ORadioButtonModel :public OReferenceValueComponent { +protected: + ::rtl::OUString m_sGroupName; + public: DECLARE_DEFAULT_LEAF_XTOR( ORadioButtonModel ); @@ -57,6 +60,10 @@ public: virtual StringSequence SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); // OPropertySetHelper + virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const; + virtual sal_Bool SAL_CALL convertFastPropertyValue( + ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) + throw (::com::sun::star::lang::IllegalArgumentException); virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw (::com::sun::star::uno::Exception); Index: forms/source/component/RadioButton.cxx =================================================================== RCS file: /cvs/gsl/forms/source/component/RadioButton.cxx,v retrieving revision 1.21 diff -u -p -r1.21 RadioButton.cxx --- forms/source/component/RadioButton.cxx 9 Mar 2007 13:31:25 -0000 1.21 +++ forms/source/component/RadioButton.cxx 29 Mar 2008 19:39:05 -0000 @@ -39,6 +39,9 @@ #ifndef _FORMS_RADIOBUTTON_HXX_ #include "RadioButton.hxx" #endif +#ifndef _FRM_GROUPMANAGER_HXX_ +#include "GroupManager.hxx" +#endif #ifndef _FRM_PROPERTY_HXX_ #include "property.hxx" #endif @@ -150,6 +153,7 @@ ORadioButtonModel::ORadioButtonModel(con //------------------------------------------------------------------ ORadioButtonModel::ORadioButtonModel( const ORadioButtonModel* _pOriginal, const Reference<XMultiServiceFactory>& _rxFactory ) :OReferenceValueComponent( _pOriginal, _rxFactory ) + ,m_sGroupName( _pOriginal->m_sGroupName ) { DBG_CTOR( ORadioButtonModel, NULL ); } @@ -192,7 +196,7 @@ StringSequence SAL_CALL ORadioButtonMode void ORadioButtonModel::SetSiblingPropsTo(const ::rtl::OUString& rPropName, const Any& rValue) { // mein Name - ::rtl::OUString sMyName(m_aName); + ::rtl::OUString sMyGroup( m_sGroupName.getLength() > 0 ? m_sGroupName : m_aName); // meine Siblings durchiterieren Reference<XIndexAccess> xIndexAccess(getParent(), UNO_QUERY); @@ -200,8 +204,9 @@ void ORadioButtonModel::SetSiblingPropsT { 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; + int nNumSiblings = xIndexAccess->getCount(); + for (sal_Int32 i=0; i<nNumSiblings; ++i) { Reference<XPropertySet> xSiblingProperties(*(InterfaceRef*)xIndexAccess->getByIndex(i).getValue(), UNO_QUERY); if (!xSiblingProperties.is()) @@ -218,34 +223,64 @@ void ORadioButtonModel::SetSiblingPropsT continue; // das 'zur selben Gruppe gehoeren' wird am Namen festgemacht - xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sCurrentName; - if (sCurrentName == sMyName) + OGroupManager::GetGroupName( xSiblingProperties, sCurrentGroup ); + if (sCurrentGroup == sMyGroup) xSiblingProperties->setPropertyValue(rPropName, rValue); } } } //------------------------------------------------------------------------------ -void ORadioButtonModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw (Exception) +void ORadioButtonModel::getFastPropertyValue(Any& rValue, sal_Int32 nHandle) const { - OReferenceValueComponent::setFastPropertyValue_NoBroadcast( nHandle, rValue ); + switch (nHandle) + { + case PROPERTY_ID_GROUP_NAME: + rValue <<= m_sGroupName; + break; + default: + OReferenceValueComponent::getFastPropertyValue(rValue, nHandle); + break; + } +} - // if the label control changed ... - if (nHandle == PROPERTY_ID_CONTROLLABEL) - { // ... forward this to our siblings - SetSiblingPropsTo(PROPERTY_CONTROLLABEL, rValue); +sal_Bool ORadioButtonModel::convertFastPropertyValue( + Any& _rConvertedValue, Any& _rOldValue, + sal_Int32 _nHandle, + const Any& _rValue) + throw (com::sun::star::lang::IllegalArgumentException) +{ + sal_Bool bModified(sal_False); + switch (_nHandle) + { + case PROPERTY_ID_GROUP_NAME: + bModified = tryPropertyValue(_rConvertedValue, _rOldValue, _rValue, m_sGroupName); + break; + default: + bModified = OReferenceValueComponent::convertFastPropertyValue(_rConvertedValue, _rOldValue, _nHandle, _rValue); + break; } + return bModified; +} +void ORadioButtonModel::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const Any& rValue) throw (Exception) +{ + if (nHandle != PROPERTY_ID_GROUP_NAME) + OReferenceValueComponent::setFastPropertyValue_NoBroadcast( nHandle, rValue ); + switch (nHandle) { + case PROPERTY_ID_CONTROLLABEL: + SetSiblingPropsTo(PROPERTY_CONTROLLABEL, rValue); + break; // wenn sich die ControlSource-Eigenschaft geaendert hat ... - if (nHandle == PROPERTY_ID_CONTROLSOURCE) - { // ... muss ich allen meinen Siblings, die in der selben RadioButton-Gruppe sind wie ich, auch die + case PROPERTY_ID_CONTROLSOURCE: + // ... muss ich allen meinen Siblings, die in der selben RadioButton-Gruppe sind wie ich, auch die // neue ControlSource mitgeben SetSiblingPropsTo(PROPERTY_CONTROLSOURCE, rValue); - } - + break; // die andere Richtung : wenn sich mein Name aendert ... - if (nHandle == PROPERTY_ID_NAME) - { + case PROPERTY_ID_GROUP_NAME: + rValue >>= m_sGroupName; + case 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()) @@ -271,7 +306,7 @@ void ORadioButtonModel::setFastPropertyV // nur Radio-Buttons continue; - xSiblingProperties->getPropertyValue(PROPERTY_NAME) >>= sName; + xSiblingProperties->getPropertyValue(nHandle == PROPERTY_ID_NAME ? PROPERTY_NAME : PROPERTY_GROUP_NAME) >>= sName; // Control, das zur gleichen Gruppe gehoert ? if (rValue == sName) { @@ -280,10 +315,9 @@ void ORadioButtonModel::setFastPropertyV } } } + break; } - - if (nHandle == PROPERTY_ID_DEFAULTCHECKED) - { + case PROPERTY_ID_DEFAULTCHECKED: { sal_Int16 nValue; rValue >>= nValue; if (1 == nValue) @@ -294,14 +328,20 @@ void ORadioButtonModel::setFastPropertyV aZero <<= nValue; SetSiblingPropsTo(PROPERTY_DEFAULTCHECKED, aZero); } + break; + } + default: + // OReferenceValueComponent::setFastPropertyValue_NoBroadcast( nHandle, rValue ); + break; } } //------------------------------------------------------------------------------ void ORadioButtonModel::describeFixedProperties( Sequence< Property >& _rProps ) const { - BEGIN_DESCRIBE_PROPERTIES( 1, OReferenceValueComponent ) + BEGIN_DESCRIBE_PROPERTIES( 2, OReferenceValueComponent ) DECL_PROP1(TABINDEX, sal_Int16, BOUND); + DECL_PROP1(GROUP_NAME, ::rtl::OUString, BOUND); END_DESCRIBE_PROPERTIES(); } Index: forms/source/inc/frm_strings.hxx =================================================================== RCS file: /cvs/gsl/forms/source/inc/frm_strings.hxx,v retrieving revision 1.15.14.1 diff -u -p -r1.15.14.1 frm_strings.hxx --- forms/source/inc/frm_strings.hxx 18 Jan 2008 15:11:23 -0000 1.15.14.1 +++ forms/source/inc/frm_strings.hxx 29 Mar 2008 19:39:05 -0000 @@ -109,6 +109,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" ); Index: forms/source/inc/property.hrc =================================================================== RCS file: /cvs/gsl/forms/source/inc/property.hrc,v retrieving revision 1.20 diff -u -p -r1.20 property.hrc --- forms/source/inc/property.hrc 31 Jan 2006 18:36:51 -0000 1.20 +++ forms/source/inc/property.hrc 29 Mar 2008 19:39:05 -0000 @@ -65,7 +65,7 @@ namespace frm #define PROPERTY_ID_ALLOWEDITS (PROPERTY_ID_START + 16) #define PROPERTY_ID_ALLOWDELETIONS (PROPERTY_ID_START + 17) #define PROPERTY_ID_NATIVE_LOOK (PROPERTY_ID_START + 18) - // free +#define PROPERTY_ID_GROUP_NAME (PROPERTY_ID_START + 19) // free // free // free
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]