[Libreoffice-commits] .: 5 commits - svx/source

Michael Stahl mst at kemper.freedesktop.org
Thu Apr 19 04:25:21 PDT 2012


 svx/source/form/fmexpl.cxx        |    5 -
 svx/source/form/fmshimp.cxx       |   17 ++---
 svx/source/form/navigatortree.cxx |  122 +++++++++++++++++++++-----------------
 svx/source/inc/fmexpl.hxx         |   11 +--
 svx/source/inc/fmshimp.hxx        |    7 +-
 5 files changed, 85 insertions(+), 77 deletions(-)

New commits:
commit 59a51999c60127bc3ad6a36679f9ea7234bbfc8e
Author: Michael Stahl <mstahl at redhat.com>
Date:   Thu Apr 19 12:58:19 2012 +0200

    svx: fix debug warnings from STL conversion

diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index f76654a..648c857 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -2304,7 +2304,9 @@ IMPL_LINK(FmXFormShell, OnFoundData, FmFoundRecordInformation*, pfriWhere)
     LoopGrids(GA_FORCE_SYNC);
 
     // und zum Feld (dazu habe ich vor dem Start des Suchens die XVclComponent-Interfaces eingesammelt)
-    DBG_ASSERT(pfriWhere->nFieldPos < m_arrSearchedControls.Count(), "FmXFormShell::OnFoundData : ungueltige Daten uebergeben !");
+    SAL_WARN_IF(static_cast<size_t>(pfriWhere->nFieldPos) >=
+            m_arrSearchedControls.size(),
+        "svx.form", "FmXFormShell::OnFoundData : invalid index!");
     SdrObject* pObject = m_arrSearchedControls.at(pfriWhere->nFieldPos);
 
     m_pShell->GetFormView()->UnMarkAll(m_pShell->GetFormView()->GetSdrPageView());
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index c6d716f..bae1e49 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -1639,7 +1639,9 @@ namespace svxform
             return;
 
         CollectSelectionData(SDI_ALL);
-        DBG_ASSERT( m_nFormsSelected + m_nControlsSelected + (m_bRootSelected ? 1 : 0) == m_arrCurrentSelection.size(),
+        SAL_WARN_IF(static_cast<size_t>(m_nFormsSelected + m_nControlsSelected
+                + (m_bRootSelected ? 1 : 0)) != m_arrCurrentSelection.size(),
+            "svx.form",
             "NavigatorTree::ShowSelectionProperties : selection meta data invalid !");
 
 
commit f765f52c39e79b633bbc8f1a16567572b7bf7a1a
Author: Noel Grandin <noel at peralex.com>
Date:   Mon Apr 16 00:16:05 2012 +0200

    Convert SV_DECL_PTRARR_DEL to boost::ptr_vector

diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index dc33eb0..f76654a 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -4105,8 +4105,6 @@ sal_Bool SearchableControlIterator::ShouldStepInto(const Reference< XInterface>&
 //==============================================================================
 //==============================================================================
 
-SV_IMPL_PTRARR(StatusForwarderArray, SfxStatusForwarder*)
-
 SFX_IMPL_MENU_CONTROL(ControlConversionMenuController, SfxBoolItem);
 
 //------------------------------------------------------------------------------
@@ -4124,7 +4122,7 @@ ControlConversionMenuController::ControlConversionMenuController( sal_uInt16 _nI
         {
             _rBindings.Invalidate(m_pConversionMenu->GetItemId(i));
             SfxStatusForwarder* pForwarder = new SfxStatusForwarder(m_pConversionMenu->GetItemId(i), *this);
-            m_aStatusForwarders.C40_INSERT(SfxStatusForwarder, pForwarder, m_aStatusForwarders.Count());
+            m_aStatusForwarders.push_back(pForwarder);
         }
     }
 }
diff --git a/svx/source/inc/fmshimp.hxx b/svx/source/inc/fmshimp.hxx
index 26eb304..9664b4e 100644
--- a/svx/source/inc/fmshimp.hxx
+++ b/svx/source/inc/fmshimp.hxx
@@ -74,6 +74,7 @@
 #include <queue>
 #include <set>
 #include <vector>
+#include <boost/ptr_container/ptr_vector.hpp>
 
 typedef std::vector<SdrObject*> SdrObjArray;
 //  SV_DECL_OBJARR(FmFormArray, ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm>, 32, 16);
@@ -584,7 +585,7 @@ public:
 };
 
 // ========================================================================
-SV_DECL_PTRARR_DEL(StatusForwarderArray, SfxStatusForwarder*, 16)
+typedef boost::ptr_vector<SfxStatusForwarder> StatusForwarderArray;
 class SVX_DLLPUBLIC ControlConversionMenuController : public SfxMenuControl
 {
 protected:
commit eb13c2c5b127910367ed2dac4fd2166a6d9c8a70
Author: Noel Grandin <noel at peralex.com>
Date:   Sun Apr 15 22:55:48 2012 +0200

    Convert SV_DECL_PTRARR to std::vector

diff --git a/svx/source/form/fmshimp.cxx b/svx/source/form/fmshimp.cxx
index 29a45c0..dc33eb0 100644
--- a/svx/source/form/fmshimp.cxx
+++ b/svx/source/form/fmshimp.cxx
@@ -2305,8 +2305,7 @@ IMPL_LINK(FmXFormShell, OnFoundData, FmFoundRecordInformation*, pfriWhere)
 
     // und zum Feld (dazu habe ich vor dem Start des Suchens die XVclComponent-Interfaces eingesammelt)
     DBG_ASSERT(pfriWhere->nFieldPos < m_arrSearchedControls.Count(), "FmXFormShell::OnFoundData : ungueltige Daten uebergeben !");
-    SdrObject* pObject = m_arrSearchedControls.GetObject(pfriWhere->nFieldPos);
-    DBG_ASSERT(pObject != NULL, "FmXFormShell::OnFoundData : unerwartet : ungueltiges VclControl-Interface");
+    SdrObject* pObject = m_arrSearchedControls.at(pfriWhere->nFieldPos);
 
     m_pShell->GetFormView()->UnMarkAll(m_pShell->GetFormView()->GetSdrPageView());
     m_pShell->GetFormView()->MarkObj(pObject, m_pShell->GetFormView()->GetSdrPageView());
@@ -2405,7 +2404,7 @@ IMPL_LINK(FmXFormShell, OnSearchContextRequest, FmSearchContext*, pfmscContextIn
     // --------------------------------------------------------------------------------------------
     // assemble the list of fields to involve (that is, the ControlSources of all fields that have such a property)
     UniString strFieldList, sFieldDisplayNames;
-    m_arrSearchedControls.Remove(0, m_arrSearchedControls.Count());
+    m_arrSearchedControls.clear();
     m_arrRelativeGridColumn.clear();
 
     // small problem: To mark found fields, I need SdrObjects. To determine which controls
@@ -2517,7 +2516,7 @@ IMPL_LINK(FmXFormShell, OnSearchContextRequest, FmSearchContext*, pfmscContextIn
                             pfmscContextInfo->arrFields.push_back(xCurrentColumn);
 
                             // and the SdrOject to the Field
-                            m_arrSearchedControls.C40_INSERT(SdrObject, pCurrent, m_arrSearchedControls.Count());
+                            m_arrSearchedControls.push_back(pCurrent);
                             // the number of the column
                             m_arrRelativeGridColumn.push_back(nViewPos);
                         }
@@ -2546,7 +2545,7 @@ IMPL_LINK(FmXFormShell, OnSearchContextRequest, FmSearchContext*, pfmscContextIn
                         sFieldDisplayNames += ';';
 
                         // mark the SdrObject (accelerates the treatment in OnFoundData)
-                        m_arrSearchedControls.C40_INSERT(SdrObject, pCurrent, m_arrSearchedControls.Count());
+                        m_arrSearchedControls.push_back(pCurrent);
 
                         // the number of the colum (here a dummy, since it is only interesting for GridControls)
                         m_arrRelativeGridColumn.push_back(-1);
diff --git a/svx/source/inc/fmshimp.hxx b/svx/source/inc/fmshimp.hxx
index e2313e2..26eb304 100644
--- a/svx/source/inc/fmshimp.hxx
+++ b/svx/source/inc/fmshimp.hxx
@@ -75,11 +75,11 @@
 #include <set>
 #include <vector>
 
-SV_DECL_PTRARR(SdrObjArray, SdrObject*, 32)
+typedef std::vector<SdrObject*> SdrObjArray;
 //  SV_DECL_OBJARR(FmFormArray, ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm>, 32, 16);
 DECLARE_STL_VECTOR( ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > ,FmFormArray);
 
-// catch databse exceptions if occur
+// catch database exceptions if they occur
 #define DO_SAFE(statement) try { statement; } catch( const Exception& ) { OSL_FAIL("unhandled exception (I tried to move a cursor (or something like that).)"); }
 
 #define GA_DISABLE_SYNC     1
commit 2de57801ed93ef15d8e4e941ff371d3bf703e273
Author: Noel Grandin <noel at peralex.com>
Date:   Sun Apr 15 22:34:44 2012 +0200

    Convert SV_DECL_PTRARR_SORT to std::set

diff --git a/svx/source/form/fmexpl.cxx b/svx/source/form/fmexpl.cxx
index 3c4dbaf..b55e6a4 100644
--- a/svx/source/form/fmexpl.cxx
+++ b/svx/source/form/fmexpl.cxx
@@ -84,10 +84,6 @@ using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::container;
 
 //========================================================================
-
-SV_IMPL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr )
-
-//========================================================================
 // class FmNavInsertedHint
 //========================================================================
 TYPEINIT1( FmNavInsertedHint, SfxHint );
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index 1bcfbe9..c6d716f 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -245,16 +245,17 @@ namespace svxform
 
         // die Informationen fuer das AcceptDrop und ExecuteDrop
         CollectSelectionData(SDI_ALL);
-        if (!m_arrCurrentSelection.Count())
+        if (m_arrCurrentSelection.empty())
             // nothing to do
             return sal_False;
 
         // testen, ob es sich vielleicht ausschliesslich um hidden controls handelt (dann koennte ich pCtrlExch noch ein
         // zusaetzliches Format geben)
         sal_Bool bHasNonHidden = sal_False;
-        for (sal_Int32 i=0; i<m_arrCurrentSelection.Count(); i++)
+        for ( SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+              it != m_arrCurrentSelection.end(); ++it )
         {
-            FmEntryData* pCurrent = static_cast< FmEntryData* >( m_arrCurrentSelection[(sal_uInt16)i]->GetUserData() );
+            FmEntryData* pCurrent = static_cast< FmEntryData* >( (*it)->GetUserData() );
             if ( IsHiddenControl( pCurrent ) )
                 continue;
             bHasNonHidden = sal_True;
@@ -275,7 +276,6 @@ namespace svxform
     sal_Bool NavigatorTree::implPrepareExchange( sal_Int8 _nAction )
     {
         RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "NavigatorTree::implPrepareExchange" );
-        sal_Int32 i;
 
         EndSelection();
 
@@ -286,8 +286,9 @@ namespace svxform
         m_aControlExchange.prepareDrag();
         m_aControlExchange->setFocusEntry( GetCurEntry() );
 
-        for ( i = 0; i < m_arrCurrentSelection.Count(); ++i )
-            m_aControlExchange->addSelectedEntry(m_arrCurrentSelection[(sal_uInt16)i]);
+        for ( SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+              it != m_arrCurrentSelection.end(); ++it )
+            m_aControlExchange->addSelectedEntry(*it);
 
         m_aControlExchange->setFormsRoot( GetNavModel()->GetFormPage()->GetForms() );
         m_aControlExchange->buildPathFormat( this, m_pRootEntry );
@@ -295,10 +296,11 @@ namespace svxform
         if (!bHasNonHidden)
         {
             // eine entsprechende Sequenz aufbauen
-            Sequence< Reference< XInterface > > seqIFaces(m_arrCurrentSelection.Count());
+            Sequence< Reference< XInterface > > seqIFaces(m_arrCurrentSelection.size());
             Reference< XInterface >* pArray = seqIFaces.getArray();
-            for (i=0; i<m_arrCurrentSelection.Count(); ++i, ++pArray)
-                *pArray = static_cast< FmEntryData* >( m_arrCurrentSelection[(sal_uInt16)i]->GetUserData() )->GetElement();
+            for ( SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+                  it != m_arrCurrentSelection.end(); ++it, ++pArray )
+                *pArray = static_cast< FmEntryData* >( (*it)->GetUserData() )->GetElement();
 
             // und das neue Format
             m_aControlExchange->addHiddenControlsFormat(seqIFaces);
@@ -348,7 +350,7 @@ namespace svxform
                 }
                 else
                 {
-                    if (m_arrCurrentSelection.Count() == 0) // kann nur bei Kontextmenue ueber Tastatur passieren
+                    if (m_arrCurrentSelection.empty()) // kann nur bei Kontextmenue ueber Tastatur passieren
                         break;
 
                     SvLBoxEntry* pCurrent = GetCurEntry();
@@ -362,15 +364,15 @@ namespace svxform
 
                 // wenn mindestens ein Nicht-Root-Eintrag selektiert ist und die Root auch, dann nehme ich letztere aus der Selektion
                 // fix wieder raus
-                if ( (m_arrCurrentSelection.Count() > 1) && m_bRootSelected )
+                if ( (m_arrCurrentSelection.size() > 1) && m_bRootSelected )
                 {
                     Select( m_pRootEntry, sal_False );
-                    SetCursor( m_arrCurrentSelection.GetObject(0), sal_True);
+                    SetCursor( *m_arrCurrentSelection.begin(), sal_True);
                 }
-                sal_Bool bSingleSelection = (m_arrCurrentSelection.Count() == 1);
+                sal_Bool bSingleSelection = (m_arrCurrentSelection.size() == 1);
 
 
-                DBG_ASSERT( (m_arrCurrentSelection.Count() > 0) || m_bRootSelected, "keine Eintraege selektiert" );
+                DBG_ASSERT( (m_arrCurrentSelection.size() > 0) || m_bRootSelected, "keine Eintraege selektiert" );
                     // solte nicht passieren, da ich oben bei der IsSelected-Abfrage auf jeden Fall einen selektiert haette,
                     // wenn das vorher nicht der Fall gewesen waere
 
@@ -432,7 +434,7 @@ namespace svxform
                     {
                         aContextMenu.SetPopupMenu( SID_FM_CHANGECONTROLTYPE, FmXFormShell::GetConversionMenu() );
 #if OSL_DEBUG_LEVEL > 0
-                        FmControlData* pCurrent = (FmControlData*)(m_arrCurrentSelection[0]->GetUserData());
+                        FmControlData* pCurrent = (FmControlData*)(*m_arrCurrentSelection.begin())->GetUserData();
                         OSL_ENSURE( pFormShell->GetImpl()->isSolelySelected( pCurrent->GetFormComponent() ),
                             "NavigatorTree::Command: inconsistency between the navigator selection, and the selection as the shell knows it!" );
 #endif
@@ -462,7 +464,7 @@ namespace svxform
                             pFormModel->BegUndo(aUndoStr);
                             // der Slot war nur verfuegbar, wenn es genau einen selektierten Eintrag gibt und dieser die Root
                             // oder ein Formular ist
-                            NewForm( m_arrCurrentSelection.GetObject(0) );
+                            NewForm( *m_arrCurrentSelection.begin() );
                             pFormModel->EndUndo();
 
                         }   break;
@@ -475,7 +477,7 @@ namespace svxform
                             pFormModel->BegUndo(aUndoStr);
                             // dieser Slot war guletig bei (genau) einem selektierten Formular
                             rtl::OUString fControlName = FM_COMPONENT_HIDDEN;
-                            NewControl( fControlName, m_arrCurrentSelection.GetObject(0) );
+                            NewControl( fControlName, *m_arrCurrentSelection.begin() );
                             pFormModel->EndUndo();
 
                         }   break;
@@ -500,7 +502,7 @@ namespace svxform
                         case SID_FM_TAB_DIALOG:
                         {
                             // dieser Slot galt bei genau einem selektierten Formular
-                            SvLBoxEntry* pSelectedForm = m_arrCurrentSelection.GetObject(0);
+                            SvLBoxEntry* pSelectedForm = *m_arrCurrentSelection.begin();
                             DBG_ASSERT( IsFormEntry(pSelectedForm), "NavigatorTree::Command: Dieser Eintrag muss ein FormEntry sein." );
 
                             FmFormData* pFormData = (FmFormData*)pSelectedForm->GetUserData();
@@ -521,7 +523,7 @@ namespace svxform
                         case SID_FM_RENAME_OBJECT:
                         {
                             // das war bei genau einem Nicht-Root-Eintrag erlaubt
-                            EditEntry( m_arrCurrentSelection.GetObject(0) );
+                            EditEntry( *m_arrCurrentSelection.begin() );
                         }
                         break;
                         case SID_FM_OPEN_READONLY:
@@ -539,7 +541,7 @@ namespace svxform
                         default:
                             if (pFormShell->GetImpl()->isControlConversionSlot(nSlotId))
                             {
-                                FmControlData* pCurrent = (FmControlData*)(m_arrCurrentSelection[0]->GetUserData());
+                                FmControlData* pCurrent = (FmControlData*)(*m_arrCurrentSelection.begin())->GetUserData();
                                 if ( pFormShell->GetImpl()->executeControlConversionSlot( pCurrent->GetFormComponent(), nSlotId ) )
                                     ShowSelectionProperties();
                             }
@@ -841,7 +843,7 @@ namespace svxform
         SvLBoxEntry* pLoop = _pTargetEntry;
         while (pLoop)
         {
-            arrDropAnchestors.Insert(pLoop);
+            arrDropAnchestors.insert(pLoop);
             pLoop = GetParent(pLoop);
         }
 
@@ -873,8 +875,7 @@ namespace svxform
             // test for 3)
             if ( IsFormEntry(pCurrent) )
             {
-                sal_uInt16 nPosition;
-                if ( arrDropAnchestors.Seek_Entry(pCurrent, &nPosition) )
+                if ( arrDropAnchestors.find(pCurrent) != arrDropAnchestors.end() )
                     return DND_ACTION_NONE;
             } else if ( IsFormComponentEntry(pCurrent) )
             {
@@ -1300,9 +1301,10 @@ namespace svxform
             m_bKeyboardCut = sal_True;
 
             // mark all the entries we just "cut" into the clipboard as "nearly moved"
-            for ( sal_Int32 i=0; i<m_arrCurrentSelection.Count(); ++i )
+            for ( SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+                  it != m_arrCurrentSelection.end(); ++it )
             {
-                SvLBoxEntry* pEntry = m_arrCurrentSelection[ (sal_uInt16)i ];
+                SvLBoxEntry* pEntry = *it;
                 if ( pEntry )
                 {
                     m_aCutEntries.insert( pEntry );
@@ -1637,7 +1639,7 @@ namespace svxform
             return;
 
         CollectSelectionData(SDI_ALL);
-        DBG_ASSERT( m_nFormsSelected + m_nControlsSelected + (m_bRootSelected ? 1 : 0) == m_arrCurrentSelection.Count(),
+        DBG_ASSERT( m_nFormsSelected + m_nControlsSelected + (m_bRootSelected ? 1 : 0) == m_arrCurrentSelection.size(),
             "NavigatorTree::ShowSelectionProperties : selection meta data invalid !");
 
 
@@ -1652,16 +1654,16 @@ namespace svxform
             ;                                   // mixed selection -> no properties
         else
         {   // either only forms, or only controls are selected
-            if (m_arrCurrentSelection.Count() == 1)
+            if (m_arrCurrentSelection.size() == 1)
             {
                 if (m_nFormsSelected > 0)
                 {   // es ist genau eine Form selektiert
-                    FmFormData* pFormData = (FmFormData*)m_arrCurrentSelection.GetObject(0)->GetUserData();
+                    FmFormData* pFormData = (FmFormData*)(*m_arrCurrentSelection.begin())->GetUserData();
                     aSelection.insert( Reference< XInterface >( pFormData->GetFormIface(), UNO_QUERY ) );
                 }
                 else
                 {   // es ist genau ein Control selektiert (egal ob hidden oder normal)
-                    FmEntryData* pEntryData = (FmEntryData*)m_arrCurrentSelection.GetObject(0)->GetUserData();
+                    FmEntryData* pEntryData = (FmEntryData*)(*m_arrCurrentSelection.begin())->GetUserData();
 
                     aSelection.insert( Reference< XInterface >( pEntryData->GetElement(), UNO_QUERY ) );
                 }
@@ -1671,20 +1673,24 @@ namespace svxform
                 if (m_nFormsSelected > 0)
                 {   // ... nur Forms
                     // erstmal die PropertySet-Interfaces der Forms einsammeln
+                   SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
                     for ( sal_Int32 i = 0; i < m_nFormsSelected; ++i )
                     {
-                        FmFormData* pFormData = (FmFormData*)m_arrCurrentSelection.GetObject((sal_uInt16)i)->GetUserData();
+                        FmFormData* pFormData = (FmFormData*)(*it)->GetUserData();
                         aSelection.insert( pFormData->GetPropertySet().get() );
+                        ++it;
                     }
                 }
                 else
                 {   // ... nur Controls
                     if (m_nHiddenControls == m_nControlsSelected)
                     {   // ein MultiSet fuer die Properties der hidden controls
+                        SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
                         for ( sal_Int32 i = 0; i < m_nHiddenControls; ++i )
                         {
-                            FmEntryData* pEntryData = (FmEntryData*)m_arrCurrentSelection.GetObject((sal_uInt16)i)->GetUserData();
+                            FmEntryData* pEntryData = (FmEntryData*)(*it)->GetUserData();
                             aSelection.insert( pEntryData->GetPropertySet().get() );
+                            ++it;
                         }
                     }
                     else if (m_nHiddenControls == 0)
@@ -1756,10 +1762,10 @@ namespace svxform
         // then go on to the strucure. This means I have to delete the forms *after* the normal controls, so
         // that during UNDO, they're restored in the proper order.
         pFormShell->GetImpl()->EnableTrackProperties(sal_False);
-        sal_uInt16 i;
-        for (i = m_arrCurrentSelection.Count(); i>0; --i)
+        for (SvLBoxEntrySortedArray::reverse_iterator it = m_arrCurrentSelection.rbegin();
+             it != m_arrCurrentSelection.rend(); )
         {
-            FmEntryData* pCurrent = (FmEntryData*)(m_arrCurrentSelection.GetObject(i - 1)->GetUserData());
+            FmEntryData* pCurrent = (FmEntryData*)((*it)->GetUserData());
 
             // eine Form ?
             sal_Bool bIsForm = pCurrent->ISA(FmFormData);
@@ -1785,12 +1791,16 @@ namespace svxform
                     // hidden layer (#i28502#), or something like this.
                     // In the first case, it will be deleted below, in the second case, we currently don't
                     // delete it, as there's no real (working!) API for this, neither in UNO nor in non-UNO.
-                    m_arrCurrentSelection.Remove( i - 1, 1 );
+                    m_arrCurrentSelection.erase( --(it.base()) );
                 }
+                else
+                   ++it;
                 // In case there is no shape for the current entry, we keep the entry in m_arrCurrentSelection,
-                // since then we can definately remove it.
+                // since then we can definitely remove it.
                 // #103597#
             }
+            else
+                ++it;
         }
         pFormShell->GetImpl()->EnableTrackProperties(sal_True);
 
@@ -1805,7 +1815,7 @@ namespace svxform
             // ---------------
             // initialize UNDO
             String aUndoStr;
-            if ( m_arrCurrentSelection.Count() == 1 )
+            if ( m_arrCurrentSelection.size() == 1 )
             {
                 aUndoStr = SVX_RES(RID_STR_UNDO_CONTAINER_REMOVE);
                 if (m_nFormsSelected)
@@ -1817,15 +1827,16 @@ namespace svxform
             else
             {
                 aUndoStr = SVX_RES(RID_STR_UNDO_CONTAINER_REMOVE_MULTIPLE);
-                aUndoStr.SearchAndReplaceAscii( "#", String::CreateFromInt32( m_arrCurrentSelection.Count() ) );
+                aUndoStr.SearchAndReplaceAscii( "#", String::CreateFromInt32( m_arrCurrentSelection.size() ) );
             }
             pFormModel->BegUndo(aUndoStr);
         }
 
         // remove remaining structure
-        for (i=0; i<m_arrCurrentSelection.Count(); ++i)
+        for (SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+             it != m_arrCurrentSelection.end(); ++it)
         {
-            FmEntryData* pCurrent = (FmEntryData*)(m_arrCurrentSelection.GetObject(i)->GetUserData());
+            FmEntryData* pCurrent = (FmEntryData*)((*it)->GetUserData());
 
             // if the entry still has children, we skipped deletion of one of those children.
             // This may for instance be because the shape is in a hidden layer, where we're unable
@@ -1854,7 +1865,7 @@ namespace svxform
         if (sdiHow == m_sdiState)
             return;
 
-        m_arrCurrentSelection.Remove((sal_uInt16)0, m_arrCurrentSelection.Count());
+        m_arrCurrentSelection.clear();
         m_nFormsSelected = m_nControlsSelected = m_nHiddenControls = 0;
         m_bRootSelected = sal_False;
 
@@ -1880,7 +1891,7 @@ namespace svxform
             {
                 // alles, was schon einen selektierten Vorfahr hat, nicht mitnehmen
                 if (pSelectionLoop == m_pRootEntry)
-                    m_arrCurrentSelection.Insert(pSelectionLoop);
+                    m_arrCurrentSelection.insert(pSelectionLoop);
                 else
                 {
                     SvLBoxEntry* pParentLoop = GetParent(pSelectionLoop);
@@ -1896,7 +1907,7 @@ namespace svxform
                             if (m_pRootEntry == pParentLoop)
                             {
                                 // bis (exclusive) zur Root gab es kein selektiertes Parent -> der Eintrag gehoert in die normalisierte Liste
-                                m_arrCurrentSelection.Insert(pSelectionLoop);
+                                m_arrCurrentSelection.insert(pSelectionLoop);
                                 break;
                             }
                             else
@@ -1909,10 +1920,10 @@ namespace svxform
             {
                 SvLBoxEntry* pParent = GetParent(pSelectionLoop);
                 if (!pParent || !IsSelected(pParent) || IsFormEntry(pSelectionLoop))
-                    m_arrCurrentSelection.Insert(pSelectionLoop);
+                    m_arrCurrentSelection.insert(pSelectionLoop);
             }
             else
-                m_arrCurrentSelection.Insert(pSelectionLoop);
+                m_arrCurrentSelection.insert(pSelectionLoop);
 
 
             pSelectionLoop = NextSelected(pSelectionLoop);
@@ -2014,9 +2025,10 @@ namespace svxform
 
         UnmarkAllViewObj();
 
-        for (sal_uInt32 i=0; i<m_arrCurrentSelection.Count(); ++i)
+        for (SvLBoxEntrySortedArray::const_iterator it = m_arrCurrentSelection.begin();
+             it != m_arrCurrentSelection.end(); ++it)
         {
-            SvLBoxEntry* pSelectionLoop = m_arrCurrentSelection.GetObject((sal_uInt16)i);
+            SvLBoxEntry* pSelectionLoop = *it;
             // Bei Formselektion alle Controls dieser Form markieren
             if (IsFormEntry(pSelectionLoop) && (pSelectionLoop != m_pRootEntry))
                 MarkViewObj((FmFormData*)pSelectionLoop->GetUserData(), sal_True, sal_False);
@@ -2055,7 +2067,7 @@ namespace svxform
         // wenn jetzt genau eine Form selektiert ist, sollte die Shell das als CurrentForm mitbekommen
         // (wenn SelectionHandling nicht locked ist, kuemmert sich die View eigentlich in MarkListHasChanged drum,
         // aber der Mechanismus greift zum Beispiel nicht, wenn die Form leer ist)
-        if ((m_arrCurrentSelection.Count() == 1) && (m_nFormsSelected == 1))
+        if ((m_arrCurrentSelection.size() == 1) && (m_nFormsSelected == 1))
         {
             FmFormData* pSingleSelectionData = PTR_CAST( FmFormData, static_cast< FmEntryData* >( FirstSelected()->GetUserData() ) );
             DBG_ASSERT( pSingleSelectionData, "NavigatorTree::SynchronizeMarkList: invalid selected form!" );
diff --git a/svx/source/inc/fmexpl.hxx b/svx/source/inc/fmexpl.hxx
index d4a6ce1..30ead6d 100644
--- a/svx/source/inc/fmexpl.hxx
+++ b/svx/source/inc/fmexpl.hxx
@@ -419,8 +419,7 @@ namespace svxform
     };
 
     //========================================================================
-    typedef SvLBoxEntry* SvLBoxEntryPtr;
-    SV_DECL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr, 16 )
+    typedef std::set<SvLBoxEntry*> SvLBoxEntrySortedArray;
 
     class NavigatorTree : public SvTreeListBox, public SfxListener
     {
commit cbacb45b1c697393fa2934bcab402c2f7172eeb5
Author: Noel Grandin <noel at peralex.com>
Date:   Sun Apr 15 21:22:53 2012 +0200

    Convert SV_DECL_PTRARR_SORT to std::set

diff --git a/svx/source/form/fmexpl.cxx b/svx/source/form/fmexpl.cxx
index 95ae0a8..3c4dbaf 100644
--- a/svx/source/form/fmexpl.cxx
+++ b/svx/source/form/fmexpl.cxx
@@ -85,7 +85,6 @@ using namespace ::com::sun::star::container;
 
 //========================================================================
 
-SV_IMPL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr )
 SV_IMPL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr )
 
 //========================================================================
diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx
index 2c66437..1bcfbe9 100644
--- a/svx/source/form/navigatortree.cxx
+++ b/svx/source/form/navigatortree.cxx
@@ -1926,7 +1926,7 @@ namespace svxform
     {
         RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen at sun.com", "NavigatorTree::SynchronizeSelection" );
         LockSelectionHandling();
-        if (arredToSelect.Count() == 0)
+        if (arredToSelect.empty())
         {
             SelectAll(sal_False);
         }
@@ -1939,11 +1939,11 @@ namespace svxform
                 FmEntryData* pCurrent = (FmEntryData*)pSelection->GetUserData();
                 if (pCurrent != NULL)
                 {
-                    sal_uInt16 nPosition;
-                    if ( arredToSelect.Seek_Entry(pCurrent, &nPosition) )
+                    FmEntryDataArray::iterator it = arredToSelect.find(pCurrent);
+                    if ( it != arredToSelect.end() )
                     {   // der Entry ist schon selektiert, steht aber auch in der SelectList -> er kann aus letzterer
                         // raus
-                        arredToSelect.Remove(nPosition, 1);
+                        arredToSelect.erase(it);
                     } else
                     {   // der Entry ist selektiert, aber steht nicht in der SelectList -> Selektion rausnehmen
                         Select(pSelection, sal_False);
@@ -1971,8 +1971,8 @@ namespace svxform
             while( pLoop )
             {
                 FmEntryData* pCurEntryData = (FmEntryData*)pLoop->GetUserData();
-                sal_uInt16 nPosition;
-                if ( arredToSelect.Seek_Entry(pCurEntryData, &nPosition) )
+                FmEntryDataArray::iterator it = arredToSelect.find(pCurEntryData);
+                if ( it != arredToSelect.end() )
                 {
                     Select(pLoop, sal_True);
                     MakeVisible(pLoop);
diff --git a/svx/source/inc/fmexpl.hxx b/svx/source/inc/fmexpl.hxx
index 7bbee53..d4a6ce1 100644
--- a/svx/source/inc/fmexpl.hxx
+++ b/svx/source/inc/fmexpl.hxx
@@ -61,6 +61,7 @@
 
 #include "fmexch.hxx"
 #include <vector>
+#include <set>
 
 class SdrObjListIter;
 class FmFormShell;
@@ -228,8 +229,7 @@ public:
 //========================================================================
 // FmNavRequestSelectHint - jemand teilt dem NavigatorTree mit, dass er bestimmte Eintraege selektieren soll
 
-typedef FmEntryData* FmEntryDataPtr;
-SV_DECL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr, 16 )
+typedef std::set<FmEntryData*> FmEntryDataArray;
 
 class FmNavRequestSelectHint : public SfxHint
 {
@@ -242,8 +242,8 @@ public:
 
     void SetMixedSelection(sal_Bool bMixedSelection) { m_bMixedSelection = bMixedSelection; }
     sal_Bool IsMixedSelection() { return m_bMixedSelection; }
-    void AddItem(FmEntryData* pEntry) { m_arredToSelect.Insert(pEntry); }
-    void ClearItems() { m_arredToSelect.Remove(sal_uInt16(0), m_arredToSelect.Count()); }
+    void AddItem(FmEntryData* pEntry) { m_arredToSelect.insert(pEntry); }
+    void ClearItems() { m_arredToSelect.clear(); }
     FmEntryDataArray& GetItems() { return m_arredToSelect; }
 };
 


More information about the Libreoffice-commits mailing list