diff options
Diffstat (limited to 'sw/source/ui/utlui/navipi.cxx')
-rw-r--r-- | sw/source/ui/utlui/navipi.cxx | 73 |
1 files changed, 25 insertions, 48 deletions
diff --git a/sw/source/ui/utlui/navipi.cxx b/sw/source/ui/utlui/navipi.cxx index 79555502034b..eb3500ea59c4 100644 --- a/sw/source/ui/utlui/navipi.cxx +++ b/sw/source/ui/utlui/navipi.cxx @@ -60,7 +60,7 @@ #include <docsh.hxx> #endif #include <actctrl.hxx> -#include <bookmrk.hxx> +#include <IMark.hxx> #include <navipi.hxx> #include <content.hxx> #include <workctrl.hxx> @@ -86,8 +86,6 @@ #include <unomid.h> -static const sal_Unicode cPrefix = '_'; - #define PAGE_CHANGE_TIMEOUT 1000 //Timeout fuer Seitenwechsel #define JUMP_TYPE_TBL 0 @@ -157,16 +155,6 @@ void SwNavigationPI::MoveOutline(USHORT nSource, USHORT nTarget, } } -/*------------------------------------------------------------------------ - Beschreibung: Erzeugen des automatischen Namens des unbenannten Merkers -------------------------------------------------------------------------*/ - -inline String &MakeAutoName(String &rToChange, USHORT i) -{ - rToChange = cPrefix; - rToChange += String::CreateFromInt32( i ); - return rToChange; -} /*------------------------------------------------------------------------ @@ -606,40 +594,30 @@ BOOL SwNavigationPI::Close() void SwNavigationPI::MakeMark() { SwView *pView = GetCreateView(); - if (!pView) - return; + if (!pView) return; SwWrtShell &rSh = pView->GetWrtShell(); - - const USHORT nBookCnt = rSh.GetBookmarkCnt(); - USHORT nMarkCount = 0; - USHORT nFirstFound = MAX_MARKS; - for (USHORT nCount = 0; nCount < nBookCnt; ++nCount) - { - SwBookmark& rBkmk = rSh.GetBookmark( nCount ); - if( rBkmk.IsMark() ) - { - String aBookmark( rBkmk.GetName() ); - aBookmark.Erase(0, 1); - nFirstFound = Min(nFirstFound, (USHORT)aBookmark.ToInt32()); - ++nMarkCount; - } - } - // maximale Anzahl Bookmarks vergeben - if (nAutoMarkIdx == MAX_MARKS) - nAutoMarkIdx = 1; - // erster freier neu vergeben - else if (nFirstFound != MAX_MARKS) - nAutoMarkIdx = Max(USHORT(1), USHORT(nFirstFound - 1)); - else - ++nAutoMarkIdx; - - String aMark; - MakeAutoName(aMark,nAutoMarkIdx); - if (nMarkCount >= MAX_MARKS) - rSh.DelBookmark( aMark ); - - rSh.SetBookmark(KeyCode(), aMark, aEmptyStr, IDocumentBookmarkAccess::MARK); - SwView::SetActMark( static_cast<BYTE>(nAutoMarkIdx) ); + IDocumentMarkAccess* const pMarkAccess = rSh.getIDocumentMarkAccess(); + + // collect and sort navigator reminder names + ::std::vector< ::rtl::OUString > vNavMarkNames; + for(IDocumentMarkAccess::const_iterator_t ppMark = pMarkAccess->getMarksBegin(); + ppMark != pMarkAccess->getMarksEnd(); + ppMark++) + if( IDocumentMarkAccess::GetType(**ppMark) == IDocumentMarkAccess::NAVIGATOR_REMINDER ) + vNavMarkNames.push_back(ppMark->get()->GetName()); + ::std::sort(vNavMarkNames.begin(), vNavMarkNames.end()); + + // we are maxed out and delete one + // nAutoMarkIdx rotates through the available MarkNames + // this assumes that IDocumentMarkAccess generates Names in ascending order + if(vNavMarkNames.size() == MAX_MARKS) + pMarkAccess->deleteMark(pMarkAccess->findMark(vNavMarkNames[nAutoMarkIdx])); + + rSh.SetBookmark(KeyCode(), ::rtl::OUString(), ::rtl::OUString(), IDocumentMarkAccess::NAVIGATOR_REMINDER); + SwView::SetActMark( nAutoMarkIdx ); + + if(++nAutoMarkIdx == MAX_MARKS) + nAutoMarkIdx = 0; } /*------------------------------------------------------------------------ @@ -806,8 +784,7 @@ SwNavigationPI::SwNavigationPI( SfxBindings* _pBindings, rBindings(*_pBindings), nWishWidth(0), - nActMark(0), - nAutoMarkIdx(0), + nAutoMarkIdx(1), nRegionMode(REGION_MODE_NONE), bSmallMode(FALSE), |