Return-Path: X-Original-To: apmail-openoffice-commits-archive@www.apache.org Delivered-To: apmail-openoffice-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5C7D6106A3 for ; Fri, 3 Jan 2014 14:47:05 +0000 (UTC) Received: (qmail 86850 invoked by uid 500); 3 Jan 2014 14:46:59 -0000 Delivered-To: apmail-openoffice-commits-archive@openoffice.apache.org Received: (qmail 86741 invoked by uid 500); 3 Jan 2014 14:46:52 -0000 Mailing-List: contact commits-help@openoffice.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openoffice.apache.org Delivered-To: mailing list commits@openoffice.apache.org Received: (qmail 86577 invoked by uid 99); 3 Jan 2014 14:46:51 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Jan 2014 14:46:51 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 03 Jan 2014 14:46:48 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 98FC92388C35; Fri, 3 Jan 2014 14:45:54 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1555112 [12/18] - in /openoffice/branches/rejuvenate01: ./ main/ main/autodoc/source/parser_i/idoc/ main/dbaccess/source/shared/ main/helpcontent2/source/text/shared/01/ main/offapi/com/sun/star/accessibility/ main/offapi/com/sun/star/anim... Date: Fri, 03 Jan 2014 14:45:04 -0000 To: commits@openoffice.apache.org From: hdu@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140103144554.98FC92388C35@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Modified: openoffice/branches/rejuvenate01/main/sw/Library_sw.mk URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/Library_sw.mk?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/Library_sw.mk (original) +++ openoffice/branches/rejuvenate01/main/sw/Library_sw.mk Fri Jan 3 14:44:44 2014 @@ -130,6 +130,7 @@ $(eval $(call gb_Library_add_exception_o sw/source/core/bastyp/swregion \ sw/source/core/bastyp/swtypes \ sw/source/core/bastyp/tabcol \ + sw/source/core/crsr/annotationmark \ sw/source/core/crsr/BlockCursor \ sw/source/core/crsr/bookmrk \ sw/source/core/crsr/callnk \ @@ -576,6 +577,7 @@ $(eval $(call gb_Library_add_exception_o sw/source/ui/docvw/AnchorOverlayObject \ sw/source/ui/docvw/AnnotationMenuButton \ sw/source/ui/docvw/AnnotationWin \ + sw/source/ui/docvw/OverlayRanges \ sw/source/ui/docvw/PostItMgr \ sw/source/ui/docvw/ShadowOverlayObject \ sw/source/ui/docvw/SidebarTxtControl \ Modified: openoffice/branches/rejuvenate01/main/sw/inc/IDocumentMarkAccess.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/IDocumentMarkAccess.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/IDocumentMarkAccess.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/IDocumentMarkAccess.hxx Fri Jan 3 14:44:44 2014 @@ -50,6 +50,7 @@ class IDocumentMarkAccess BOOKMARK, CROSSREF_HEADING_BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, + ANNOTATIONMARK, TEXT_FIELDMARK, CHECKBOX_FIELDMARK, NAVIGATOR_REMINDER @@ -86,6 +87,10 @@ class IDocumentMarkAccess const rtl::OUString& rName, const rtl::OUString& rType) = 0; + virtual sw::mark::IMark* makeAnnotationMark( + const SwPaM& rPaM, + const ::rtl::OUString& rName ) = 0; + /** Returns a mark in the document for a paragraph. If there is none, a mark will be created. @@ -159,6 +164,9 @@ class IDocumentMarkAccess const xub_StrLen nOffset) =0; /** Deletes marks in a range + + Note: navigator reminders are excluded + */ virtual void deleteMarks( const SwNodeIndex& rStt, @@ -187,15 +195,17 @@ class IDocumentMarkAccess /** returns a STL-like random access iterator to the begin of the sequence of marks. */ - virtual const_iterator_t getMarksBegin() const =0; + virtual const_iterator_t getAllMarksBegin() const =0; /** returns a STL-like random access iterator to the end of the sequence of marks. */ - virtual const_iterator_t getMarksEnd() const =0; + virtual const_iterator_t getAllMarksEnd() const =0; /** returns the number of marks. + + Note: annotation marks are excluded */ - virtual sal_Int32 getMarksCount() const =0; + virtual sal_Int32 getAllMarksCount() const =0; /** Finds a mark by name. @@ -203,12 +213,12 @@ class IDocumentMarkAccess [in] the name of the mark to find. @returns - an iterator pointing to the mark, or pointing to getMarksEnd() if nothing was found. + an iterator pointing to the mark, or pointing to getAllMarksEnd() if nothing was found. */ virtual const_iterator_t findMark(const ::rtl::OUString& rMark) const =0; - // interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, CROSSREF_HEADING_BOOKMARK) + // interface IBookmarks (BOOKMARK, CROSSREF_NUMITEM_BOOKMARK, CROSSREF_HEADING_BOOKMARK ) /** returns a STL-like random access iterator to the begin of the sequence the IBookmarks. */ @@ -238,6 +248,17 @@ class IDocumentMarkAccess virtual ::sw::mark::IFieldmark* getFieldmarkBefore(const SwPosition& pos) const =0; virtual ::sw::mark::IFieldmark* getFieldmarkAfter(const SwPosition& pos) const =0; + // Marks exclusive annotation marks + virtual const_iterator_t getCommonMarksBegin() const = 0; + virtual const_iterator_t getCommonMarksEnd() const = 0; + virtual sal_Int32 getCommonMarksCount() const = 0; + + // Annotation Marks + virtual const_iterator_t getAnnotationMarksBegin() const = 0; + virtual const_iterator_t getAnnotationMarksEnd() const = 0; + virtual sal_Int32 getAnnotationMarksCount() const = 0; + virtual const_iterator_t findAnnotationMark( const ::rtl::OUString& rName ) const = 0; + // Returns the MarkType used to create the mark static MarkType SAL_DLLPUBLIC_EXPORT GetType(const ::sw::mark::IMark& rMark); Modified: openoffice/branches/rejuvenate01/main/sw/inc/PostItMgr.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/PostItMgr.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/PostItMgr.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/PostItMgr.hxx Fri Jan 3 14:44:44 2014 @@ -268,9 +268,9 @@ class SwPostItMgr: public SfxListener void SetSpellChecking(); - Color GetColorDark(sal_uInt16 aAuthorIndex); - Color GetColorLight(sal_uInt16 aAuthorIndex); - Color GetColorAnchor(sal_uInt16 aAuthorIndex); + static Color GetColorDark(sal_uInt16 aAuthorIndex); + static Color GetColorLight(sal_uInt16 aAuthorIndex); + static Color GetColorAnchor(sal_uInt16 aAuthorIndex); void RegisterAnswer(OutlinerParaObject* pAnswer) { mpAnswer = pAnswer;} Modified: openoffice/branches/rejuvenate01/main/sw/inc/SidebarWin.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/SidebarWin.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/SidebarWin.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/SidebarWin.hxx Fri Jan 3 14:44:44 2014 @@ -46,9 +46,11 @@ class SwEditWin; class SwView; class Edit; class MenuButton; -//class SwRedline; class SwFrm; +namespace sw { namespace overlay { + class OverlayRanges; +}} namespace sw { namespace sidebarwindows { @@ -63,7 +65,7 @@ typedef sal_Int64 SwPostItBits; class SwSidebarWin : public Window { - public: + public: SwSidebarWin( SwEditWin& rEditWin, WinBits nBits, SwPostItMgr& aMgr, @@ -76,7 +78,7 @@ class SwSidebarWin : public Window long nY, long nWidth, long nHeight, - const SwRect &aRect, + const SwRect& aAnchorRect, const long PageBorder); void SetPosAndSize(); void TranslateTopPosition(const long aAmount); @@ -91,50 +93,57 @@ class SwSidebarWin : public Window inline ScrollBar* Scrollbar() { return mpVScrollbar; } inline ::sw::sidebarwindows::AnchorOverlayObject* Anchor() { return mpAnchor;} inline ::sw::sidebarwindows::ShadowOverlayObject* Shadow() { return mpShadow;} + inline ::sw::overlay::OverlayRanges* TextRange() { return mpTextRangeOverlay;} long GetPostItTextHeight(); - void SwitchToPostIt(sal_uInt16 aDirection); - virtual void SwitchToFieldPos(); + void SwitchToPostIt(sal_uInt16 aDirection); + virtual void SwitchToFieldPos(); virtual sal_uInt32 MoveCaret() = 0; - virtual void UpdateData() = 0; - virtual void SetPostItText() = 0; - virtual void Delete(); - virtual void GotoPos() = 0; + virtual void UpdateData() = 0; + virtual void SetPostItText() = 0; + virtual void Delete(); + virtual void GotoPos() = 0; virtual String GetAuthor() = 0; virtual Date GetDate() = 0; virtual Time GetTime() = 0; - void ExecuteCommand(sal_uInt16 nSlot); - void InitControls(); + void ExecuteCommand(sal_uInt16 nSlot); + void InitControls(); void HidePostIt(); void DoResize(); - void ResizeIfNeccessary(long aOldHeight, long aNewHeight); - void SetScrollbar(); + void ResizeIfNeccessary(long aOldHeight, long aNewHeight); + void SetScrollbar(); - void SetVirtualPosSize( const Point& aPoint, const Size& aSize); - const Point VirtualPos() { return mPosSize.TopLeft(); } - const Size VirtualSize() { return mPosSize.GetSize(); } + void SetVirtualPosSize( const Point& aPoint, const Size& aSize); + const Point VirtualPos() { return mPosSize.TopLeft(); } + const Size VirtualSize() { return mPosSize.GetSize(); } void ShowAnchorOnly(const Point &aPoint); void ShowNote(); void HideNote(); - void ResetAttributes(); + void ResetAttributes(); void SetSidebarPosition(sw::sidebarwindows::SidebarPosition eSidebarPosition); - void SetReadonly(sal_Bool bSet); - sal_Bool IsReadOnly() { return mbReadonly;} - bool IsPreview() { return nFlags & PB_Preview;} + void SetReadonly(sal_Bool bSet); + sal_Bool IsReadOnly() + { + return mbReadonly; + } + bool IsPreview() + { + return nFlags & PB_Preview; + } - void SetColor(Color aColorDark,Color aColorLight, Color aColorAnchor); + void SetColor(Color aColorDark,Color aColorLight, Color aColorAnchor); const Color& ColorAnchor() { return mColorAnchor; } const Color& ColorDark() { return mColorDark; } const Color& ColorLight() { return mColorLight; } - void Rescale(); + void Rescale(); void SetViewState(::sw::sidebarwindows::ViewState bViewState); @@ -142,28 +151,28 @@ class SwSidebarWin : public Window void SetFollow( bool bIsFollow) { mbIsFollow = bIsFollow; }; virtual bool CalcFollow() = 0; -#if 0 -#endif + sal_Int32 GetMetaHeight(); + sal_Int32 GetMinimumSizeWithMeta(); + sal_Int32 GetMinimumSizeWithoutMeta(); + sal_Int32 GetMetaButtonAreaWidth(); + sal_Int32 GetScrollbarWidth(); - sal_Int32 GetMetaHeight(); - sal_Int32 GetMinimumSizeWithMeta(); - sal_Int32 GetMinimumSizeWithoutMeta(); - sal_Int32 GetMetaButtonAreaWidth(); - sal_Int32 GetScrollbarWidth(); + void SetSpellChecking(); - void SetSpellChecking(); + void ToggleInsMode(); - void ToggleInsMode(); - - virtual void ActivatePostIt(); - virtual void DeactivatePostIt(); + virtual void ActivatePostIt(); + virtual void DeactivatePostIt(); void SetChangeTracking( const SwPostItHelper::SwLayoutStatus aStatus, const Color& aColor); SwPostItHelper::SwLayoutStatus GetLayoutStatus() { return mLayoutStatus; } Color GetChangeColor() { return mChangeColor; } - virtual bool IsProtected() {return mbReadonly;}; + virtual bool IsProtected() + { + return mbReadonly; + } DECL_LINK( WindowEventListener, VclSimpleEvent* ); inline bool IsMouseOverSidebarWin() const { return mbMouseOver; } @@ -213,6 +222,7 @@ class SwSidebarWin : public Window sw::sidebarwindows::AnchorOverlayObject* mpAnchor; sw::sidebarwindows::ShadowOverlayObject* mpShadow; + sw::overlay::OverlayRanges* mpTextRangeOverlay; Color mColorAnchor; Color mColorDark; Modified: openoffice/branches/rejuvenate01/main/sw/inc/doc.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/doc.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/doc.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/doc.hxx Fri Jan 3 14:44:44 2014 @@ -1108,12 +1108,14 @@ public: const SwSelBoxes* pSelBoxes = 0, SwFrmFmt *pParent = 0 ); - void CopyWithFlyInFly( const SwNodeRange& rRg, - const xub_StrLen nEndContentIndex, - const SwNodeIndex& rInsPos, - sal_Bool bMakeNewFrms = sal_True, - sal_Bool bDelRedlines = sal_True, - sal_Bool bCopyFlyAtFly = sal_False ) const; + void CopyWithFlyInFly( + const SwNodeRange& rRg, + const xub_StrLen nEndContentIndex, + const SwNodeIndex& rInsPos, + const SwPaM* pCopiedPaM = NULL, + const sal_Bool bMakeNewFrms = sal_True, + const sal_Bool bDelRedlines = sal_True, + const sal_Bool bCopyFlyAtFly = sal_False ) const; sal_Bool SetFlyFrmAttr( SwFrmFmt& rFlyFmt, SfxItemSet& rSet ); Modified: openoffice/branches/rejuvenate01/main/sw/inc/docufld.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/docufld.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/docufld.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/docufld.hxx Fri Jan 3 14:44:44 2014 @@ -500,53 +500,76 @@ public: class SwPostItFieldType : public SwFieldType { private: - SwDoc* mpDoc; + SwDoc* mpDoc; public: - SwPostItFieldType(SwDoc* pDoc); + SwPostItFieldType(SwDoc* pDoc); - virtual SwFieldType* Copy() const; - SwDoc* GetDoc() {return mpDoc;}; + virtual SwFieldType* Copy() const; + + SwDoc* GetDoc() const + { + return mpDoc; + }; }; -/*-------------------------------------------------------------------- - Beschreibung: PostIt - --------------------------------------------------------------------*/ +// representation for a comment/an annotation class SW_DLLPUBLIC SwPostItField : public SwField { - String sTxt; // die Anmerkung - String sAuthor; // der Author - DateTime aDateTime; // Datum und Zeit der Anmerkung - OutlinerParaObject* mpText; - SwTextAPIObject* m_pTextObject; - -public: - SwPostItField( SwPostItFieldType*, - const String& rAuthor, const String& rTxt, const DateTime& rDate); - ~SwPostItField(); - - virtual String Expand() const; - virtual SwField* Copy() const; + String msCommentContent; // content of the comment/annotation + String msAuthor; // author + String msAuthorInitials; // author's initials + String msName; // name (identifier) of the comment/annotation + DateTime maDateTime; // creation date and time + + OutlinerParaObject* mpText; + SwTextAPIObject* m_pTextObject; + +public: + SwPostItField( + SwPostItFieldType*, + const String& rCommentContent, + const String& rAuthor, + const String& rAuthorInitials, + const String& rName, + const DateTime& rDate); + ~SwPostItField(); + + virtual String Expand() const; + virtual SwField* Copy() const; + + inline const Date GetDate() const + { + return maDateTime.GetDate(); + } + inline const Time GetTime() const + { + return maDateTime.GetTime(); + } + + // Author + virtual const String& GetPar1() const; + virtual void SetPar1(const String& rStr); + + // Text + virtual String GetPar2() const; + virtual void SetPar2(const String& rStr); + inline const String& GetContent() const + { + return msCommentContent; + } + + // Name + void SetName(const String& rStr); + const String& GetName() const; - inline const Date GetDate() const { return aDateTime.GetDate(); } - inline const Time GetTime() const { return aDateTime.GetTime(); } - - // Author - virtual const String& GetPar1() const; - virtual void SetPar1(const String& rStr); - - // Text - virtual String GetPar2() const; - virtual void SetPar2(const String& rStr); - const String& GetTxt() const { return sTxt; } - - const OutlinerParaObject* GetTextObject() const; - void SetTextObject( OutlinerParaObject* pText ); + const OutlinerParaObject* GetTextObject() const; + void SetTextObject( OutlinerParaObject* pText ); sal_uInt32 GetNumberOfParagraphs() const; - virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; - virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); + virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; + virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); virtual String GetDescription() const; }; Modified: openoffice/branches/rejuvenate01/main/sw/inc/hintids.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/hintids.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/hintids.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/hintids.hxx Fri Jan 3 14:44:44 2014 @@ -141,7 +141,7 @@ RES_TXTATR_NOEND_BEGIN = RES_TXTATR_WITH RES_TXTATR_FIELD = RES_TXTATR_NOEND_BEGIN, // 53 RES_TXTATR_FLYCNT, // 54 RES_TXTATR_FTN, // 55 - RES_TXTATR_DUMMY4, // 56 + RES_TXTATR_ANNOTATION, // 56 RES_TXTATR_DUMMY3, // 57 RES_TXTATR_DUMMY1, // 58 RES_TXTATR_DUMMY2, // 59 Modified: openoffice/branches/rejuvenate01/main/sw/inc/ndhints.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/ndhints.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/ndhints.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/ndhints.hxx Fri Jan 3 14:44:44 2014 @@ -45,17 +45,24 @@ typedef enum { } CopyOrNew_t; // if COPY then pTxtNode must be given! -SW_DLLPRIVATE SwTxtAttr * -MakeTxtAttr( SwDoc & rDoc, SfxPoolItem & rNew, - xub_StrLen const nStt, xub_StrLen const nEnd, - CopyOrNew_t const bIsCopy = NEW, SwTxtNode *const pTxtNode = 0); -SW_DLLPRIVATE SwTxtAttr * -MakeTxtAttr( SwDoc & rDoc, const SfxItemSet & rSet, - xub_StrLen nStt, xub_StrLen nEnd ); +SW_DLLPRIVATE SwTxtAttr * MakeTxtAttr( + SwDoc & rDoc, + SfxPoolItem & rNew, + xub_StrLen const nStt, + xub_StrLen const nEnd, + CopyOrNew_t const bIsCopy = NEW, + SwTxtNode *const pTxtNode = 0 ); + +SW_DLLPRIVATE SwTxtAttr * MakeTxtAttr( + SwDoc & rDoc, + const SfxItemSet & rSet, + xub_StrLen nStt, + xub_StrLen nEnd ); // create redline dummy text hint that must not be inserted into hints array -SW_DLLPRIVATE SwTxtAttr* -MakeRedlineTxtAttr( SwDoc & rDoc, SfxPoolItem& rAttr ); +SW_DLLPRIVATE SwTxtAttr* MakeRedlineTxtAttr( + SwDoc & rDoc, + SfxPoolItem& rAttr ); /* Modified: openoffice/branches/rejuvenate01/main/sw/inc/postithelper.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/postithelper.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/postithelper.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/postithelper.hxx Fri Jan 3 14:44:44 2014 @@ -49,15 +49,24 @@ struct SwLayoutInfo { const SwFrm* mpAnchorFrm; SwRect mPosition; + + // optional start of the annotation + sal_uLong mnStartNodeIdx; + xub_StrLen mnStartContent; + SwRect mPageFrame; SwRect mPagePrtArea; unsigned long mnPageNumber; + sw::sidebarwindows::SidebarPosition meSidebarPosition; - sal_uInt16 mRedlineAuthor; + + sal_uInt16 mRedlineAuthor; SwLayoutInfo() : mpAnchorFrm(0) , mPosition() + , mnStartNodeIdx( 0 ) + , mnStartContent( STRING_NOTFOUND ) , mPageFrame() , mPagePrtArea() , mnPageNumber(1) @@ -73,7 +82,11 @@ namespace SwPostItHelper INVISIBLE, VISIBLE, INSERTED, DELETED, NONE, HIDDEN }; - SwLayoutStatus getLayoutInfos( std::vector< SwLayoutInfo >&, SwPosition& ); + SwLayoutStatus getLayoutInfos( + SwLayoutInfo& o_rInfo, + const SwPosition& rAnchorPos, + const SwPosition* pAnnotationStartPos = NULL ); + long getLayoutHeight( const SwRootFrm* pRoot ); void setSidebarChanged( SwRootFrm* pRoot, bool bBrowseMode ); unsigned long getPageInfo( SwRect& rPageFrm, const SwRootFrm* , const Point& ); @@ -96,12 +109,17 @@ public: , bFocus(aFocus) , mLayoutStatus( SwPostItHelper::INVISIBLE ) , maLayoutInfo() - {} - virtual ~SwSidebarItem(){} + { + } + + virtual ~SwSidebarItem() + { + } + virtual SwPosition GetAnchorPosition() const = 0; - virtual bool UseElement() = 0; - virtual SwFmtFld* GetFmtFld() const = 0; - virtual SfxBroadcaster* GetBroadCaster() const = 0; + virtual bool UseElement() = 0; + virtual const SwFmtFld& GetFmtFld() const = 0; + virtual const SfxBroadcaster* GetBroadCaster() const = 0; virtual sw::sidebarwindows::SwSidebarWin* GetSidebarWindow( SwEditWin& rEditWin, WinBits nBits, SwPostItMgr& aMgr, @@ -131,25 +149,38 @@ public: class SwAnnotationItem: public SwSidebarItem { - private: - SwFmtFld* pFmtFld; +public: + SwAnnotationItem( + SwFmtFld& rFmtFld, + const bool bShow, + const bool bFocus) + : SwSidebarItem( bShow, bFocus ) + , mrFmtFld( rFmtFld ) + { + } + + virtual ~SwAnnotationItem() + { + } - public: - SwAnnotationItem( SwFmtFld* p, - const bool aShow, - const bool aFocus) - : SwSidebarItem( aShow, aFocus ) - , pFmtFld(p) - {} - virtual ~SwAnnotationItem() {} virtual SwPosition GetAnchorPosition() const; - virtual bool UseElement(); - virtual SwFmtFld* GetFmtFld() const {return pFmtFld;} - virtual SfxBroadcaster* GetBroadCaster() const { return dynamic_cast (pFmtFld); } - virtual sw::sidebarwindows::SwSidebarWin* GetSidebarWindow( SwEditWin& rEditWin, - WinBits nBits, - SwPostItMgr& aMgr, - SwPostItBits aBits); + virtual bool UseElement(); + virtual const SwFmtFld& GetFmtFld() const + { + return mrFmtFld; + } + virtual const SfxBroadcaster* GetBroadCaster() const + { + return dynamic_cast (&mrFmtFld); + } + virtual sw::sidebarwindows::SwSidebarWin* GetSidebarWindow( + SwEditWin& rEditWin, + WinBits nBits, + SwPostItMgr& aMgr, + SwPostItBits aBits ); + +private: + SwFmtFld& mrFmtFld; }; #endif // _POSTITHELPER_HXX Modified: openoffice/branches/rejuvenate01/main/sw/inc/txatbase.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/txatbase.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/txatbase.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/txatbase.hxx Fri Jan 3 14:44:44 2014 @@ -187,6 +187,7 @@ inline const SwFmtFld& SwTxtAttr::GetFmt { ASSERT( m_pAttr && ( m_pAttr->Which() == RES_TXTATR_FIELD + || m_pAttr->Which() == RES_TXTATR_ANNOTATION || m_pAttr->Which() == RES_TXTATR_INPUTFIELD ), "Wrong attribute" ); return (const SwFmtFld&)(*m_pAttr); Modified: openoffice/branches/rejuvenate01/main/sw/inc/unobookmark.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/unobookmark.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/unobookmark.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/unobookmark.hxx Fri Jan 3 14:44:44 2014 @@ -81,13 +81,14 @@ protected: /// @param pDoc and pMark != 0, but not & because of ImplInheritanceHelper SwXBookmark(::sw::mark::IMark *const pMark, SwDoc *const pDoc); + void registerInMark( ::sw::mark::IMark *const pBkmk ); + public: /// descriptor SwXBookmark(); - static ::com::sun::star::uno::Reference< - ::com::sun::star::text::XTextContent> + static ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > CreateXBookmark(SwDoc & rDoc, ::sw::mark::IMark & rBookmark); /// @return IMark for this, but only if it lives in pDoc @@ -234,10 +235,21 @@ private: bool isReplacementObject; + SwXFieldmark( + bool _isReplacementObject, + ::sw::mark::IMark *const pMark, + SwDoc *const pDoc ); + public: - SwXFieldmark(bool isReplacementObject, - ::sw::mark::IMark* pBkm = 0, SwDoc* pDoc = 0); + // instance not attached to the document - property descriptor available + SwXFieldmark( bool isReplacementObject ); + + // (as the parent class) newly created instances for an existing instance needs to be registered in the Mark + static ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > + CreateXFieldmark( + SwDoc & rDoc, + ::sw::mark::IMark & rBookmark ); virtual void attachToRange( const ::com::sun::star::uno::Reference< Modified: openoffice/branches/rejuvenate01/main/sw/inc/unofield.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/unofield.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/unofield.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/unofield.hxx Fri Jan 3 14:44:44 2014 @@ -129,8 +129,8 @@ class SwXTextField : public cppu::WeakIm >, public SwClient { - SwEventListenerContainer aLstnrCntnr; - const SwFmtFld* pFmtFld; + SwEventListenerContainer m_aLstnrCntnr; + const SwFmtFld* m_pFmtFld; SwDoc* m_pDoc; SwTextAPIObject* m_pTextObject; @@ -197,12 +197,13 @@ public: void attachToRange(const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > & xTextRange)throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); const SwField* GetField() const; - const SwFmtFld* GetFldFmt(){return GetField() ? pFmtFld : 0; }; + const SwFmtFld* GetFldFmt(){return GetField() ? m_pFmtFld : 0; }; void Invalidate(); /// @return an SwXTextField, either an already existing one or a new one static SwXTextField* CreateSwXTextField(SwDoc & rDoc, SwFmtFld const& rFmt); + sal_uInt16 GetServiceId(); }; Modified: openoffice/branches/rejuvenate01/main/sw/inc/unoport.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/unoport.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/unoport.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/unoport.hxx Fri Jan 3 14:44:44 2014 @@ -81,7 +81,9 @@ enum SwTextPortionType PORTION_META, PORTION_FIELD_START, PORTION_FIELD_END, - PORTION_FIELD_START_END + PORTION_FIELD_START_END, + PORTION_ANNOTATION, + PORTION_ANNOTATION_END }; Modified: openoffice/branches/rejuvenate01/main/sw/inc/unoprnms.hxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/inc/unoprnms.hxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/inc/unoprnms.hxx (original) +++ openoffice/branches/rejuvenate01/main/sw/inc/unoprnms.hxx Fri Jan 3 14:44:44 2014 @@ -716,11 +716,8 @@ enum SwPropNameIds // <-- /* 0675 */ UNO_NAME_NUMBERING_IS_OUTLINE, ///* 0676 */ UNO_NAME_DEFAULT_OUTLINE_LEVEL, //#outline level, removed by zhaojianwei -// --> OD 2004-10-28 #i36248# /* 0677 */ UNO_NAME_STARTPOSITION_IN_HORI_L2R, /* 0678 */ UNO_NAME_ENDPOSITION_IN_HORI_L2R, -// <-- -// --> OS 2004-12-13 #30916# /* 0679 */ UNO_NAME_SUBJECT, /* 0680 */ UNO_NAME_ADDRESS_FROM_COLUMN, /* 0681 */ UNO_NAME_SEND_AS_HTML, @@ -735,71 +732,51 @@ enum SwPropNameIds /* 0690 */ UNO_NAME_BLIND_COPIES_TO, /* 0691 */ UNO_NAME_IN_SERVER_PASSWORD, /* 0692 */ UNO_NAME_OUT_SERVER_PASSWORD, -// <-- /* 0693 */ UNO_NAME_SAVE_FILTER_OPTIONS, /* 0694 */ UNO_NAME_SAVE_FILTER_DATA, /* 0695 */ UNO_NAME_LOCK_UPDATES, -// --> TL 2005-02-14 #i37766# /* 0696 */ UNO_NAME_PAGE_COUNT, /* 0697 */ UNO_NAME_LINE_COUNT, /* 0698 */ UNO_NAME_IS_CONSTANT_SPELLCHECK, /* 0699 */ UNO_NAME_IS_HIDE_SPELL_MARKS, // deprecated #i91949 -// <-- /* 0700 */ UNO_NAME_IS_FIELD_USED, /* 0701 */ UNO_NAME_IS_FIELD_DISPLAYED, /* 0702 */ UNO_NAME_BUILDID, /* 0703 */ UNO_NAME_PARA_STYLE_CONDITIONS, -// --> FME 2005-12-13 #b6354161# Print empty pages /* 0704 */ UNO_NAME_PRINT_EMPTY_PAGES, -// <-- -// --> BM 2006 New Chart (chart2) /* 0705 */ UNO_NAME_ROLE, -// <-- /* 0706 */ UNO_NAME_FIELD_CODE, /* 0707 */ UNO_NAME_HAS_VALID_SIGNATURES, -// --> AMA #i65476# automatic styles /* 0708 */ UNO_NAME_CHAR_AUTO_STYLE_NAME, /* 0709 */ UNO_NAME_PARA_AUTO_STYLE_NAME, -// --> OD 2006-03-21 #b6375613# /* 0710 */ UNO_NAME_APPLY_WORKAROUND_FOR_B6375613, /* 0711 */ UNO_NAME_LAYOUT_SIZE, -// --> HB #144146# /* 0712 */ UNO_NAME_HELP, /* 0713 */ UNO_NAME_TOOLTIP, -// --> #i73329# / 2007-01-11 / frank.schoenheit@sun.com /* 0714 */ UNO_NAME_DIALOG_LIBRARIES, /* 0715 */ UNO_NAME_HEADER_ROW_COUNT, /* 0716 */ UNO_NAME_INPUT, /* 0717 */ UNO_NAME_ROW_SPAN, -// --> OD 2008-01-15 #newlistlevelattrs# /* 0718 */ UNO_NAME_POSITION_AND_SPACE_MODE, /* 0719 */ UNO_NAME_LABEL_FOLLOWED_BY, /* 0720 */ UNO_NAME_LISTTAB_STOP_POSITION, /* 0721 */ UNO_NAME_FIRST_LINE_INDENT, /* 0722 */ UNO_NAME_INDENT_AT, -// --> #i52420# / 2008-02-07 / beppec56@openoffice.org /* 0723 */ UNO_NAME_CHAPTER_LEVEL, -// --> 2007-03-27 text grid enhancement for better CJK support /* 0724 */ UNO_NAME_GRID_BASE_WIDTH, /* 0725 */ UNO_NAME_GRID_SNAP_TO_CHARS, /* 0726 */ UNO_NAME_GRID_STANDARD_PAGE_MODE, /* 0727 */ UNO_NAME_TABLE_BORDER_DISTANCES, -// --> OD 2008-04-22 #refactorlists# /* 0728 */ UNO_NAME_LIST_ID, /* 0729 */ UNO_NAME_DEFAULT_LIST_ID, -// <-- /* 0730 */ UNO_NAME_STREAM_NAME, -// --> OD 2008-11-26 #158694# /* 0731 */ UNO_NAME_PARA_CONTINUEING_PREVIOUS_SUB_TREE, /* 0732 */ UNO_NAME_PARA_LIST_LABEL_STRING, -// <-- /* 0733 */ UNO_NAME_CHAR_OVERLINE, /* 0734 */ UNO_NAME_CHAR_OVERLINE_COLOR, /* 0735 */ UNO_NAME_CHAR_OVERLINE_HAS_COLOR, /* 0736 */ UNO_NAME_OUTLINE_LEVEL, //#outline level,add<-zhaojianwei outlinelevel -// --> OD 2009-07-13 #i73249# /* 0737 */ UNO_NAME_DESCRIPTION, -// <-- /* 0738 */ UNO_NAME_META, // #i91565# /* 0739 */ UNO_NAME_NESTED_TEXT_CONTENT, // #i109601# /* 0740 */ UNO_NAME_EMBEDDED_OBJECT, @@ -807,7 +784,9 @@ enum SwPropNameIds /* 0741 */ UNO_NAME_REPLACEMENT_GRAPHIC_URL, /* 0742 */ UNO_NAME_DEFAULT_PAGE_MODE, -/* 0743 */ SW_PROPNAME_END +/* 0743 */ UNO_NAME_INITIALS, + +/* 0744 */ SW_PROPNAME_END }; Modified: openoffice/branches/rejuvenate01/main/sw/source/core/access/accpara.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/access/accpara.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/access/accpara.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/access/accpara.cxx Fri Jan 3 14:44:44 2014 @@ -1650,12 +1650,16 @@ String SwAccessibleParagraph::GetFieldTy for( sal_uInt16 i = 0; i < nSize; ++i ) { const SwTxtAttr* pHt = (*pSwpHints)[i]; - if (pHt->Which() == RES_TXTATR_FIELD && (nFldIndex-- == 0)) + if ( ( pHt->Which() == RES_TXTATR_FIELD + || pHt->Which() == RES_TXTATR_ANNOTATION + || pHt->Which() == RES_TXTATR_INPUTFIELD ) + && (nFldIndex-- == 0)) { pTxtFld = (SwTxtFld *)pHt; break; } - else if (pHt->Which() == RES_TXTATR_REFMARK && (nFldIndex-- == 0)) + else if ( pHt->Which() == RES_TXTATR_REFMARK + && (nFldIndex-- == 0) ) strTypeName = String(OUString(RTL_CONSTASCII_USTRINGPARAM("set reference"))); } } Modified: openoffice/branches/rejuvenate01/main/sw/source/core/bastyp/init.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/bastyp/init.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/bastyp/init.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/bastyp/init.cxx Fri Jan 3 14:44:44 2014 @@ -320,7 +320,7 @@ SfxItemInfo __FAR_DATA aSlotTab[] = { 0, 0 }, // RES_TXTATR_FIELD { 0, 0 }, // RES_TXTATR_FLYCNT { 0, 0 }, // RES_TXTATR_FTN - { 0, SFX_ITEM_POOLABLE }, // RES_TXTATR_DUMMY4 + { 0, 0 }, // RES_TXTATR_ANNOTATION { 0, SFX_ITEM_POOLABLE }, // RES_TXTATR_DUMMY3 { 0, SFX_ITEM_POOLABLE }, // RES_TXTATR_DUMMY1 { 0, SFX_ITEM_POOLABLE }, // RES_TXTATR_DUMMY2 @@ -533,9 +533,9 @@ void _InitCore() aAttrTab[ RES_TXTATR_FIELD- POOLATTR_BEGIN ] = new SwFmtFld( RES_TXTATR_FIELD ); aAttrTab[ RES_TXTATR_FLYCNT - POOLATTR_BEGIN ] = new SwFmtFlyCnt( 0 ); aAttrTab[ RES_TXTATR_FTN - POOLATTR_BEGIN ] = new SwFmtFtn; + aAttrTab[ RES_TXTATR_ANNOTATION - POOLATTR_BEGIN ] = new SwFmtFld( RES_TXTATR_ANNOTATION ); // TextAttr - Dummies - aAttrTab[ RES_TXTATR_DUMMY4 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_TXTATR_DUMMY4 ); aAttrTab[ RES_TXTATR_DUMMY3 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_TXTATR_DUMMY3 ); aAttrTab[ RES_TXTATR_DUMMY1 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_TXTATR_DUMMY1 ); aAttrTab[ RES_TXTATR_DUMMY2 - POOLATTR_BEGIN ] = new SfxBoolItem( RES_TXTATR_DUMMY2 ); Modified: openoffice/branches/rejuvenate01/main/sw/source/core/crsr/bookmrk.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/crsr/bookmrk.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/crsr/bookmrk.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/crsr/bookmrk.cxx Fri Jan 3 14:44:44 2014 @@ -87,6 +87,7 @@ namespace if(ch_start != aStartMark) { io_pDoc->InsertString(aStartPaM, aStartMark); + rStart.nContent--; } if ( aEndMark && ( ch_end != aEndMark ) && ( rStart != rEnd ) ) { @@ -94,6 +95,37 @@ namespace } io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL); }; + + static void lcl_RemoveFieldMarks(Fieldmark* const pField, + SwDoc* const io_pDoc, + const sal_Unicode aStartMark, + const sal_Unicode aEndMark) + { + SwPosition& rStart = pField->GetMarkStart(); + SwPosition& rEnd = pField->GetMarkEnd(); + SwTxtNode const*const pStartTxtNode = rStart.nNode.GetNode().GetTxtNode(); + SwTxtNode const*const pEndTxtNode = rEnd.nNode.GetNode().GetTxtNode(); + const sal_Unicode ch_start=pStartTxtNode->GetTxt().GetChar(rStart.nContent.GetIndex()); + xub_StrLen nEndPos = ( rEnd == rStart || rEnd.nContent.GetIndex() == 0 ) ? + rEnd.nContent.GetIndex() : rEnd.nContent.GetIndex() - 1; + const sal_Unicode ch_end=pEndTxtNode->GetTxt().GetChar( nEndPos ); + SwPaM aStartPaM(rStart); + SwPaM aEndPaM(rEnd); + io_pDoc->GetIDocumentUndoRedo().StartUndo(UNDO_UI_REPLACE, NULL); + if( ch_start == aStartMark ) + { + SwPaM aStart(rStart, rStart); + aStart.End()->nContent++; + io_pDoc->DeleteRange(aStart); + } + if ( ch_end == aEndMark ) + { + SwPaM aEnd(rEnd, rEnd); + aEnd.Start()->nContent--; + io_pDoc->DeleteRange(aEnd); + } + io_pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_UI_REPLACE, NULL); + }; } namespace sw { namespace mark @@ -152,7 +184,6 @@ namespace sw { namespace mark if(nCount == SAL_MAX_INT32) { sal_Int32 nRandom; - ::rtl::OUStringBuffer sUniquePostfixBuffer; rtl_random_getBytes(aPool, &nRandom, sizeof(nRandom)); sUniquePostfix = ::rtl::OUStringBuffer(13).appendAscii("_").append(static_cast(abs(nRandom))).makeStringAndClear(); nCount = 0; @@ -317,6 +348,11 @@ namespace sw { namespace mark lcl_AssureFieldMarksSet(this, io_pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND); } + void TextFieldmark::ReleaseDoc(SwDoc* const pDoc) + { + lcl_RemoveFieldMarks(this, pDoc, CH_TXT_ATR_FIELDSTART, CH_TXT_ATR_FIELDEND); + } + CheckboxFieldmark::CheckboxFieldmark(const SwPaM& rPaM) : Fieldmark(rPaM) { } Modified: openoffice/branches/rejuvenate01/main/sw/source/core/crsr/findtxt.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/crsr/findtxt.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/crsr/findtxt.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/crsr/findtxt.cxx Fri Jan 3 14:44:44 2014 @@ -131,14 +131,16 @@ String& lcl_CleanStr( case RES_TXTATR_FLYCNT: case RES_TXTATR_FTN: case RES_TXTATR_FIELD: + case RES_TXTATR_ANNOTATION: case RES_TXTATR_REFMARK: case RES_TXTATR_TOXMARK: case RES_TXTATR_META: case RES_TXTATR_METAFIELD: { - sal_Bool bEmpty = RES_TXTATR_FIELD != pHt->Which() || - !(static_cast(pHt) - ->GetFmtFld().GetField()->ExpandField(true).Len()); + const bool bEmpty = + ( pHt->Which() != RES_TXTATR_FIELD + && pHt->Which() != RES_TXTATR_ANNOTATION ) + || !(static_cast(pHt)->GetFmtFld().GetField()->ExpandField(true).Len()); if ( bEmpty && nStart == nAkt ) { rArr.Insert( nAkt, rArr.Count() ); @@ -195,8 +197,7 @@ xub_StrLen GetPostIt(xub_StrLen aCount,c { aIndex++; const SwTxtAttr* pTxtAttr = (*pHts)[i]; - if ( (pTxtAttr->Which()==RES_TXTATR_FIELD) - && (pTxtAttr->GetFmtFld().GetField()->Which()==RES_POSTITFLD)) + if ( pTxtAttr->Which() == RES_TXTATR_ANNOTATION ) { aCount--; if (!aCount) @@ -208,8 +209,7 @@ xub_StrLen GetPostIt(xub_StrLen aCount,c for (xub_StrLen i = aIndex; i Count();i++) { const SwTxtAttr* pTxtAttr = (*pHts)[i]; - if ( (pTxtAttr->Which()==RES_TXTATR_FIELD) - && (pTxtAttr->GetFmtFld().GetField()->Which()==RES_POSTITFLD)) + if ( pTxtAttr->Which() == RES_TXTATR_ANNOTATION ) break; else aIndex++; @@ -303,8 +303,7 @@ sal_uInt8 SwPaM::Find( const SearchOptio { const xub_StrLen aPos = *(*pHts)[i]->GetStart(); const SwTxtAttr* pTxtAttr = (*pHts)[i]; - if ( (pTxtAttr->Which()==RES_TXTATR_FIELD) - && (pTxtAttr->GetFmtFld().GetField()->Which()==RES_POSTITFLD)) + if ( pTxtAttr->Which()==RES_TXTATR_ANNOTATION ) { if ( (aPos >= nStart) && (aPos <= nEnde) ) aNumberPostits++; Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/dbgoutsw.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/dbgoutsw.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/dbgoutsw.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/dbgoutsw.cxx Fri Jan 3 14:44:44 2014 @@ -178,7 +178,7 @@ map & G aItemWhichMap[RES_TXTATR_FIELD] = String("TXTATR_FIELD", RTL_TEXTENCODING_ASCII_US); aItemWhichMap[RES_TXTATR_FLYCNT] = String("TXTATR_FLYCNT", RTL_TEXTENCODING_ASCII_US); aItemWhichMap[RES_TXTATR_FTN] = String("TXTATR_FTN", RTL_TEXTENCODING_ASCII_US); - aItemWhichMap[RES_TXTATR_DUMMY4] = String("TXTATR_DUMMY4", RTL_TEXTENCODING_ASCII_US); + aItemWhichMap[RES_TXTATR_ANNOTATION] = String("TXTATR_ANNOTATION", RTL_TEXTENCODING_ASCII_US); aItemWhichMap[RES_TXTATR_DUMMY3] = String("TXTATR_DUMMY3", RTL_TEXTENCODING_ASCII_US); aItemWhichMap[RES_TXTATR_DUMMY1] = String("TXTATR_DUMMY1", RTL_TEXTENCODING_ASCII_US); aItemWhichMap[RES_TXTATR_DUMMY2] = String("TXTATR_DUMMY2", RTL_TEXTENCODING_ASCII_US); Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/docbm.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/docbm.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/docbm.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/docbm.cxx Fri Jan 3 14:44:44 2014 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -279,6 +280,8 @@ IDocumentMarkAccess::MarkType IDocumentM return CROSSREF_HEADING_BOOKMARK; else if(*pMarkTypeInfo == typeid(CrossRefNumItemBookmark)) return CROSSREF_NUMITEM_BOOKMARK; + else if(*pMarkTypeInfo == typeid(AnnotationMark)) + return ANNOTATIONMARK; else if(*pMarkTypeInfo == typeid(TextFieldmark)) return TEXT_FIELDMARK; else if(*pMarkTypeInfo == typeid(CheckboxFieldmark)) @@ -317,20 +320,15 @@ bool SAL_DLLPUBLIC_EXPORT IDocumentMarkA namespace sw { namespace mark { MarkManager::MarkManager(SwDoc& rDoc) - : m_pDoc(&rDoc) + : m_vAllMarks() + , m_vBookmarks() + , m_vFieldmarks() + , m_vAnnotationMarks() + , m_vCommonMarks() + , m_pDoc(&rDoc) { } -#if OSL_DEBUG_LEVEL > 1 - void MarkManager::dumpFieldmarks( ) const - { - const_iterator_t pIt = m_vFieldmarks.begin(); - for (; pIt != m_vFieldmarks.end( ); pIt++) - { - rtl::OUString str = (*pIt)->ToString(); - OSL_TRACE("%s\n", - ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr()); - } - } -#endif + + ::sw::mark::IMark* MarkManager::makeMark(const SwPaM& rPaM, const ::rtl::OUString& rName, const IDocumentMarkAccess::MarkType eType) @@ -351,7 +349,7 @@ namespace sw { namespace mark } #endif // see for example _SaveCntntIdx, Shells - OSL_PRECOND(m_vMarks.size() < USHRT_MAX, + OSL_PRECOND(m_vAllMarks.size() < USHRT_MAX, "MarkManager::makeMark(..)" " - more than USHRT_MAX marks are not supported correctly"); // There should only be one CrossRefBookmark per Textnode per Type @@ -389,6 +387,9 @@ namespace sw { namespace mark case IDocumentMarkAccess::UNO_BOOKMARK: pMarkBase = new UnoMark(rPaM); break; + case IDocumentMarkAccess::ANNOTATIONMARK: + pMarkBase = new AnnotationMark( rPaM, rName ); + break; } OSL_ENSURE( pMarkBase!=NULL, "MarkManager::makeMark(..)" @@ -399,35 +400,41 @@ namespace sw { namespace mark pMarkBase->Swap(); // for performance reasons, we trust UnoMarks to have a (generated) unique name - if(eType != IDocumentMarkAccess::UNO_BOOKMARK) - pMarkBase->SetName(getUniqueMarkName(pMarkBase->GetName())); + if ( eType != IDocumentMarkAccess::UNO_BOOKMARK ) + pMarkBase->SetName( getUniqueMarkName( pMarkBase->GetName() ) ); // register mark - lcl_InsertMarkSorted(m_vMarks, pMark); + lcl_InsertMarkSorted( m_vAllMarks, pMark ); switch(eType) { case IDocumentMarkAccess::BOOKMARK: case IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK: case IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK: - // if(dynamic_cast) + lcl_InsertMarkSorted(m_vCommonMarks, pMark); + // if(dynamic_cast) lcl_InsertMarkSorted(m_vBookmarks, pMark); break; case IDocumentMarkAccess::TEXT_FIELDMARK: case IDocumentMarkAccess::CHECKBOX_FIELDMARK: - // if(dynamic_cast + lcl_InsertMarkSorted(m_vCommonMarks, pMark); + // if(dynamic_cast lcl_InsertMarkSorted(m_vFieldmarks, pMark); break; + case IDocumentMarkAccess::ANNOTATIONMARK: + lcl_InsertMarkSorted( m_vAnnotationMarks, pMark ); + break; case IDocumentMarkAccess::NAVIGATOR_REMINDER: case IDocumentMarkAccess::DDE_BOOKMARK: case IDocumentMarkAccess::UNO_BOOKMARK: - // no special array for these + lcl_InsertMarkSorted(m_vCommonMarks, pMark); + // no special array for these break; } pMarkBase->InitDoc(m_pDoc); #if 0 OSL_TRACE("--- makeType ---"); OSL_TRACE("Marks"); - lcl_DebugMarks(m_vMarks); + lcl_DebugMarks(m_vAllMarks); OSL_TRACE("Bookmarks"); lcl_DebugMarks(m_vBookmarks); OSL_TRACE("Fieldmarks"); @@ -436,20 +443,24 @@ namespace sw { namespace mark return pMark.get(); } - ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark( const SwPaM& rPaM, + + ::sw::mark::IFieldmark* MarkManager::makeFieldBookmark( + const SwPaM& rPaM, const rtl::OUString& rName, const rtl::OUString& rType ) { - sw::mark::IMark* pMark = makeMark( rPaM, rName, - IDocumentMarkAccess::TEXT_FIELDMARK ); + sw::mark::IMark* pMark = + makeMark( rPaM, rName, IDocumentMarkAccess::TEXT_FIELDMARK ); sw::mark::IFieldmark* pFieldMark = dynamic_cast( pMark ); pFieldMark->SetFieldname( rType ); return pFieldMark; } - - ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark( const SwPaM& rPaM, - const rtl::OUString& rName, + + + ::sw::mark::IFieldmark* MarkManager::makeNoTextFieldBookmark( + const SwPaM& rPaM, + const rtl::OUString& rName, const rtl::OUString& rType) { sw::mark::IMark* pMark = makeMark( rPaM, rName, @@ -460,8 +471,10 @@ namespace sw { namespace mark return pFieldMark; } - ::sw::mark::IMark* MarkManager::getMarkForTxtNode(const SwTxtNode& rTxtNode, - const IDocumentMarkAccess::MarkType eType) + + ::sw::mark::IMark* MarkManager::getMarkForTxtNode( + const SwTxtNode& rTxtNode, + const IDocumentMarkAccess::MarkType eType ) { SwPosition aPos(rTxtNode); aPos.nContent.Assign(&(const_cast(rTxtNode)), 0); @@ -472,7 +485,16 @@ namespace sw { namespace mark return makeMark(aPaM, ::rtl::OUString(), eType); } - void MarkManager::repositionMark( ::sw::mark::IMark* const io_pMark, + + sw::mark::IMark* MarkManager::makeAnnotationMark( + const SwPaM& rPaM, + const ::rtl::OUString& rName ) + { + return makeMark( rPaM, rName, IDocumentMarkAccess::ANNOTATIONMARK ); + } + + void MarkManager::repositionMark( + ::sw::mark::IMark* const io_pMark, const SwPaM& rPaM) { OSL_PRECOND(io_pMark->GetMarkPos().GetDoc() == m_pDoc, @@ -491,37 +513,46 @@ namespace sw { namespace mark sortMarks(); } - bool MarkManager::renameMark(::sw::mark::IMark* io_pMark, const ::rtl::OUString& rNewName) + + bool MarkManager::renameMark( + ::sw::mark::IMark* io_pMark, + const ::rtl::OUString& rNewName ) { OSL_PRECOND(io_pMark->GetMarkPos().GetDoc() == m_pDoc, "" " - Mark is not in my doc."); - if(io_pMark->GetName() == rNewName) + if ( io_pMark->GetName() == rNewName ) return true; - if(findMark(rNewName) != getMarksEnd()) + if ( findMark(rNewName) != m_vAllMarks.end() ) return false; dynamic_cast< ::sw::mark::MarkBase* >(io_pMark)->SetName(rNewName); return true; } - void MarkManager::correctMarksAbsolute(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const xub_StrLen nOffset) + + void MarkManager::correctMarksAbsolute( + const SwNodeIndex& rOldNode, + const SwPosition& rNewPos, + const xub_StrLen nOffset) { const SwNode* const pOldNode = &rOldNode.GetNode(); SwPosition aNewPos(rNewPos); aNewPos.nContent += nOffset; bool isSortingNeeded = false; - for(iterator_t ppMark = m_vMarks.begin(); - ppMark != m_vMarks.end(); + + for(iterator_t ppMark = m_vAllMarks.begin(); + ppMark != m_vAllMarks.end(); ppMark++) { - // is on position ?? - bool bChangedPos = false, bChangedOPos = false; ::sw::mark::MarkBase* pMark = dynamic_cast< ::sw::mark::MarkBase* >(ppMark->get()); + // is on position ?? + bool bChangedPos = false; if(&pMark->GetMarkPos().nNode.GetNode() == pOldNode) { pMark->SetMarkPos(aNewPos); bChangedPos = true; } + bool bChangedOPos = false; if (pMark->IsExpanded() && &pMark->GetOtherMarkPos().nNode.GetNode() == pOldNode) { @@ -531,23 +562,26 @@ namespace sw { namespace mark // illegal selection? collapse the mark and restore sorting later isSortingNeeded |= lcl_FixCorrectedMark(bChangedPos, bChangedOPos, pMark); } + // restore sorting if needed if(isSortingNeeded) sortMarks(); #if 0 OSL_TRACE("correctMarksAbsolute"); - lcl_DebugMarks(m_vMarks); + lcl_DebugMarks(m_vAllMarks); #endif } + void MarkManager::correctMarksRelative(const SwNodeIndex& rOldNode, const SwPosition& rNewPos, const xub_StrLen nOffset) { const SwNode* const pOldNode = &rOldNode.GetNode(); SwPosition aNewPos(rNewPos); aNewPos.nContent += nOffset; bool isSortingNeeded = false; - for(iterator_t ppMark = m_vMarks.begin(); - ppMark != m_vMarks.end(); + + for(iterator_t ppMark = m_vAllMarks.begin(); + ppMark != m_vAllMarks.end(); ppMark++) { // is on position ?? @@ -571,15 +605,17 @@ namespace sw { namespace mark // illegal selection? collapse the mark and restore sorting later isSortingNeeded |= lcl_FixCorrectedMark(bChangedPos, bChangedOPos, pMark); } + // restore sorting if needed if(isSortingNeeded) sortMarks(); #if 0 OSL_TRACE("correctMarksRelative"); - lcl_DebugMarks(m_vMarks); + lcl_DebugMarks(m_vAllMarks); #endif } + void MarkManager::deleteMarks( const SwNodeIndex& rStt, const SwNodeIndex& rEnd, @@ -589,10 +625,11 @@ namespace sw { namespace mark { vector vMarksToDelete; bool isSortingNeeded = false; + // copy all bookmarks in the move area to a vector storing all position data as offset // reassignment is performed after the move - for(iterator_t ppMark = m_vMarks.begin(); - ppMark != m_vMarks.end(); + for(iterator_t ppMark = m_vAllMarks.begin(); + ppMark != m_vAllMarks.end(); ppMark++) { // navigator marks should not be moved @@ -620,18 +657,17 @@ namespace sw { namespace mark isPosInRange = true, isOtherPosInRange = true; } - if(isPosInRange && (isOtherPosInRange || !pMark->IsExpanded())) + if ( isPosInRange + && ( isOtherPosInRange + || !pMark->IsExpanded() ) ) { // completely in range - // --> OD 2009-08-07 #i92125# bool bKeepCrossRefBkmk( false ); { - if ( rStt == rEnd && - ( IDocumentMarkAccess::GetType(*pMark) == - IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK || - IDocumentMarkAccess::GetType(*pMark) == - IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK ) ) + if ( rStt == rEnd + && ( IDocumentMarkAccess::GetType(*pMark) == IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK + || IDocumentMarkAccess::GetType(*pMark) == IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK ) ) { bKeepCrossRefBkmk = true; } @@ -642,7 +678,6 @@ namespace sw { namespace mark pSaveBkmk->push_back(SaveBookmark(true, true, *pMark, rStt, pSttIdx)); vMarksToDelete.push_back(ppMark); } - // <-- } else if(isPosInRange ^ isOtherPosInRange) { @@ -681,7 +716,7 @@ namespace sw { namespace mark } // we just remembered the iterators to delete, so we do not need to search - // for the shared_ptr<> (the entry in m_vMarks) again + // for the shared_ptr<> (the entry in m_vAllMarks) again // reverse iteration, since erasing an entry invalidates iterators // behind it (the iterators in vMarksToDelete are sorted) for(vector::reverse_iterator pppMark = vMarksToDelete.rbegin(); @@ -694,43 +729,69 @@ namespace sw { namespace mark sortMarks(); #if 0 OSL_TRACE("deleteMarks"); - lcl_DebugMarks(m_vMarks); + lcl_DebugMarks(m_vAllMarks); #endif } + void MarkManager::deleteMark(const const_iterator_t ppMark) { - if(ppMark == m_vMarks.end()) return; + if(ppMark == m_vAllMarks.end()) return; switch(IDocumentMarkAccess::GetType(**ppMark)) { case IDocumentMarkAccess::BOOKMARK: case IDocumentMarkAccess::CROSSREF_HEADING_BOOKMARK: case IDocumentMarkAccess::CROSSREF_NUMITEM_BOOKMARK: - // if(dynamic_cast) - { - IDocumentMarkAccess::iterator_t ppBookmark = lcl_FindMark(m_vBookmarks, *ppMark); - OSL_ENSURE(ppBookmark != m_vBookmarks.end(), - "" - " - Bookmark not found."); - m_vBookmarks.erase(ppBookmark); + // if(dynamic_cast) + { + IDocumentMarkAccess::iterator_t ppBookmark = lcl_FindMark(m_vBookmarks, *ppMark); + OSL_ENSURE(ppBookmark != m_vBookmarks.end(), + "" + " - Bookmark not found."); + m_vBookmarks.erase(ppBookmark); + + ppBookmark = lcl_FindMark(m_vCommonMarks, *ppMark); + m_vCommonMarks.erase(ppBookmark); + } break; - } + case IDocumentMarkAccess::TEXT_FIELDMARK: case IDocumentMarkAccess::CHECKBOX_FIELDMARK: - // if(dynamic_cast - { - IDocumentMarkAccess::iterator_t ppFieldmark = lcl_FindMark(m_vFieldmarks, *ppMark); - OSL_ENSURE(ppFieldmark != m_vFieldmarks.end(), - "" - " - Bookmark not found."); - m_vFieldmarks.erase(ppFieldmark); + // if(dynamic_cast + { + IDocumentMarkAccess::iterator_t ppFieldmark = lcl_FindMark(m_vFieldmarks, *ppMark); + OSL_ENSURE(ppFieldmark != m_vFieldmarks.end(), + "" + " - Bookmark not found."); + m_vFieldmarks.erase(ppFieldmark); + + sw::mark::TextFieldmark* pTextFieldmark = dynamic_cast(ppMark->get()); + if ( pTextFieldmark ) + { + pTextFieldmark->ReleaseDoc(m_pDoc); + } + + ppFieldmark = lcl_FindMark(m_vCommonMarks, *ppMark); + m_vCommonMarks.erase(ppFieldmark); + } break; - } + + case IDocumentMarkAccess::ANNOTATIONMARK: + { + IDocumentMarkAccess::iterator_t ppAnnotationMark = lcl_FindMark(m_vAnnotationMarks, *ppMark); + OSL_ENSURE( ppAnnotationMark != m_vAnnotationMarks.end(), " - Annotation Mark not found." ); + m_vAnnotationMarks.erase(ppAnnotationMark); + } + break; + case IDocumentMarkAccess::NAVIGATOR_REMINDER: case IDocumentMarkAccess::DDE_BOOKMARK: case IDocumentMarkAccess::UNO_BOOKMARK: - // no special array for these + { + IDocumentMarkAccess::iterator_t ppOtherMark = lcl_FindMark(m_vCommonMarks, *ppMark); + m_vCommonMarks.erase(ppOtherMark); + } break; } DdeBookmark* const pDdeBookmark = dynamic_cast(ppMark->get()); @@ -743,9 +804,9 @@ namespace sw { namespace mark // the temporary hold instance assures that the mark is deleted after the // mark container has been updated. Thus, the mark could not be found anymore // in the mark container by other calls trying to recursively delete the mark. - iterator_t aToBeDeletedMarkIter = m_vMarks.begin() + (ppMark - m_vMarks.begin()); + iterator_t aToBeDeletedMarkIter = m_vAllMarks.begin() + (ppMark - m_vAllMarks.begin()); pMark_t pToBeDeletedMark = *aToBeDeletedMarkIter; - m_vMarks.erase( aToBeDeletedMarkIter ); + m_vAllMarks.erase( aToBeDeletedMarkIter ); } void MarkManager::deleteMark(const IMark* const pMark) @@ -755,22 +816,18 @@ namespace sw { namespace mark " - Mark is not in my doc."); // finds the last Mark that is starting before pMark // (pMarkLow < pMark) - iterator_t pMarkLow = lower_bound( - m_vMarks.begin(), m_vMarks.end(), - pMark->GetMarkStart(), - bind(&IMark::StartsBefore, _1, _2)); - // finds the first Mark that pMark is starting before - // (pMark < pMarkHigh) - //iterator_t pMarkHigh = upper_bound( - // pMarkLow, m_vMarks.end(), - // pMark->GetMarkStart(), - // bind(&IMark::StartsBefore, _2, _1)); - // since it should be rare that pMark isnt found at all - // we skip the bisect search on the upper bound - iterator_t pMarkHigh = m_vMarks.end(); - iterator_t pMarkFound = find_if( - pMarkLow, pMarkHigh, - bind(equal_to(), bind(&boost::shared_ptr::get, _1), pMark)); + iterator_t pMarkLow = + lower_bound( + m_vAllMarks.begin(), + m_vAllMarks.end(), + pMark->GetMarkStart(), + bind(&IMark::StartsBefore, _1, _2) ); + iterator_t pMarkHigh = m_vAllMarks.end(); + iterator_t pMarkFound = + find_if( + pMarkLow, + pMarkHigh, + bind(equal_to(), bind(&boost::shared_ptr::get, _1), pMark) ); if(pMarkFound != pMarkHigh) deleteMark(pMarkFound); } @@ -779,20 +836,24 @@ namespace sw { namespace mark { m_vFieldmarks.clear(); m_vBookmarks.clear(); + + m_vCommonMarks.clear(); + + m_vAnnotationMarks.clear(); + #ifdef DEBUG - for(iterator_t pBkmk = m_vMarks.begin(); - pBkmk != m_vMarks.end(); + for(iterator_t pBkmk = m_vAllMarks.begin(); + pBkmk != m_vAllMarks.end(); ++pBkmk) - OSL_ENSURE(pBkmk->unique(), - "" - " - a Bookmark is still in use."); + OSL_ENSURE( pBkmk->unique(), + " - a Bookmark is still in use."); #endif - m_vMarks.clear(); + m_vAllMarks.clear(); } IDocumentMarkAccess::const_iterator_t MarkManager::findMark(const ::rtl::OUString& rName) const { - return lcl_FindMarkByName(rName, m_vMarks.begin(), m_vMarks.end()); + return lcl_FindMarkByName(rName, m_vAllMarks.begin(), m_vAllMarks.end()); } IDocumentMarkAccess::const_iterator_t MarkManager::findBookmark(const ::rtl::OUString& rName) const @@ -800,14 +861,14 @@ namespace sw { namespace mark return lcl_FindMarkByName(rName, m_vBookmarks.begin(), m_vBookmarks.end()); } - IDocumentMarkAccess::const_iterator_t MarkManager::getMarksBegin() const - { return m_vMarks.begin(); } + IDocumentMarkAccess::const_iterator_t MarkManager::getAllMarksBegin() const + { return m_vAllMarks.begin(); } - IDocumentMarkAccess::const_iterator_t MarkManager::getMarksEnd() const - { return m_vMarks.end(); } + IDocumentMarkAccess::const_iterator_t MarkManager::getAllMarksEnd() const + { return m_vAllMarks.end(); } - sal_Int32 MarkManager::getMarksCount() const - { return m_vMarks.size(); } + sal_Int32 MarkManager::getAllMarksCount() const + { return m_vAllMarks.size(); } IDocumentMarkAccess::const_iterator_t MarkManager::getBookmarksBegin() const { return m_vBookmarks.begin(); } @@ -834,28 +895,87 @@ namespace sw { namespace mark IFieldmark* MarkManager::getFieldmarkBefore(const SwPosition& rPos) const { return dynamic_cast(lcl_getMarkBefore(m_vFieldmarks, rPos)); } + + IDocumentMarkAccess::const_iterator_t MarkManager::getCommonMarksBegin() const + { + return m_vCommonMarks.begin(); + } + + IDocumentMarkAccess::const_iterator_t MarkManager::getCommonMarksEnd() const + { + return m_vCommonMarks.end(); + } + + sal_Int32 MarkManager::getCommonMarksCount() const + { + return m_vCommonMarks.size(); + } + + + IDocumentMarkAccess::const_iterator_t MarkManager::getAnnotationMarksBegin() const + { + return m_vAnnotationMarks.begin(); + } + + IDocumentMarkAccess::const_iterator_t MarkManager::getAnnotationMarksEnd() const + { + return m_vAnnotationMarks.end(); + } + + sal_Int32 MarkManager::getAnnotationMarksCount() const + { + return m_vAnnotationMarks.size(); + } + + IDocumentMarkAccess::const_iterator_t MarkManager::findAnnotationMark( const ::rtl::OUString& rName ) const + { + return lcl_FindMarkByName( rName, m_vAnnotationMarks.begin(), m_vAnnotationMarks.end() ); + } + + ::rtl::OUString MarkManager::getUniqueMarkName(const ::rtl::OUString& rName) const { OSL_ENSURE(rName.getLength(), - "" - " - a name should be proposed"); - if(findMark(rName) == getMarksEnd()) return rName; + " - a name should be proposed"); + if ( findMark(rName) == getAllMarksEnd() ) + { + return rName; + } + ::rtl::OUStringBuffer sBuf; ::rtl::OUString sTmp; for(sal_Int32 nCnt = 1; nCnt < SAL_MAX_INT32; nCnt++) { sTmp = sBuf.append(rName).append(nCnt).makeStringAndClear(); - if(findMark(sTmp) == getMarksEnd()) break; + if ( findMark(sTmp) == getAllMarksEnd() ) + { + break; + } } return sTmp; } void MarkManager::sortMarks() { - sort(m_vMarks.begin(), m_vMarks.end(), &lcl_MarkOrderingByStart); + sort(m_vAllMarks.begin(), m_vAllMarks.end(), &lcl_MarkOrderingByStart); + sort(m_vCommonMarks.begin(), m_vCommonMarks.end(), &lcl_MarkOrderingByStart); sort(m_vBookmarks.begin(), m_vBookmarks.end(), &lcl_MarkOrderingByStart); sort(m_vFieldmarks.begin(), m_vFieldmarks.end(), &lcl_MarkOrderingByStart); + sort(m_vAnnotationMarks.begin(), m_vAnnotationMarks.end(), &lcl_MarkOrderingByStart); + } + +#if OSL_DEBUG_LEVEL > 1 + void MarkManager::dumpFieldmarks( ) const + { + const_iterator_t pIt = m_vFieldmarks.begin(); + for (; pIt != m_vFieldmarks.end( ); pIt++) + { + rtl::OUString str = (*pIt)->ToString(); + OSL_TRACE("%s\n", + ::rtl::OUStringToOString(str, RTL_TEXTENCODING_UTF8).getStr()); + } } +#endif }} // namespace ::sw::mark @@ -1237,41 +1357,36 @@ void _SaveCntntIdx(SwDoc* pDoc, aSave.SetTypeAndCount( 0x8000, 0 ); IDocumentMarkAccess* const pMarkAccess = pDoc->getIDocumentMarkAccess(); - const sal_Int32 nBkmks = pMarkAccess->getMarksCount(); - for(; aSave.GetCount() < nBkmks; aSave.IncCount()) + const sal_Int32 nMarksCount = pMarkAccess->getAllMarksCount(); + for ( ; aSave.GetCount() < nMarksCount; aSave.IncCount() ) { - bool bEqual = false; - bool bLower = false; - const ::sw::mark::IMark* pBkmk = (pMarkAccess->getMarksBegin() + aSave.GetCount())->get(); + bool bMarkPosEqual = false; + const ::sw::mark::IMark* pBkmk = (pMarkAccess->getAllMarksBegin() + aSave.GetCount())->get(); if(pBkmk->GetMarkPos().nNode.GetIndex() == nNode && pBkmk->GetMarkPos().nContent.GetIndex() <= nCntnt) { if(pBkmk->GetMarkPos().nContent.GetIndex() < nCntnt) { - bLower = true; // a hint for the other position... aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex()); aSave.Add(rSaveArr); } else // if a bookmark position is equal nCntnt, the other position - bEqual = true; // has to decide if it is added to the array + bMarkPosEqual = true; // has to decide if it is added to the array } if(pBkmk->IsExpanded() && pBkmk->GetOtherMarkPos().nNode.GetIndex() == nNode && pBkmk->GetOtherMarkPos().nContent.GetIndex() <= nCntnt) { - if(bLower || pBkmk->GetOtherMarkPos().nContent.GetIndex() < nCntnt) - { - if(bEqual) - { // the other position is before, the (main) position is equal - aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex()); - aSave.Add(rSaveArr); - } - aSave.SetContent(pBkmk->GetOtherMarkPos().nContent.GetIndex()); - aSave.IncType(); + if(bMarkPosEqual) + { // the other position is before, the (main) position is equal + aSave.SetContent(pBkmk->GetMarkPos().nContent.GetIndex()); aSave.Add(rSaveArr); - aSave.DecType(); } + aSave.SetContent(pBkmk->GetOtherMarkPos().nContent.GetIndex()); + aSave.IncType(); + aSave.Add(rSaveArr); + aSave.DecType(); } } @@ -1463,7 +1578,7 @@ void _RestoreCntntIdx(SwDoc* pDoc, { case 0x8000: { - MarkBase* pMark = dynamic_cast(pMarkAccess->getMarksBegin()[aSave.GetCount()].get()); + MarkBase* pMark = dynamic_cast(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get()); SwPosition aNewPos(pMark->GetMarkPos()); aNewPos.nNode = *pCNd; aNewPos.nContent.Assign(pCNd, aSave.GetContent() + nOffset); @@ -1472,7 +1587,7 @@ void _RestoreCntntIdx(SwDoc* pDoc, break; case 0x8001: { - MarkBase* pMark = dynamic_cast(pMarkAccess->getMarksBegin()[aSave.GetCount()].get()); + MarkBase* pMark = dynamic_cast(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get()); SwPosition aNewPos(pMark->GetOtherMarkPos()); aNewPos.nNode = *pCNd; aNewPos.nContent.Assign(pCNd, aSave.GetContent() + nOffset); @@ -1630,7 +1745,7 @@ void _RestoreCntntIdx(SvULongs& rSaveArr { case 0x8000: { - MarkBase* pMark = dynamic_cast(pMarkAccess->getMarksBegin()[aSave.GetCount()].get()); + MarkBase* pMark = dynamic_cast(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get()); SwPosition aNewPos(pMark->GetMarkPos()); aNewPos.nNode = rNd; aNewPos.nContent.Assign(pCNd, Min(aSave.GetContent(), nLen)); @@ -1639,7 +1754,7 @@ void _RestoreCntntIdx(SvULongs& rSaveArr break; case 0x8001: { - MarkBase* pMark = dynamic_cast(pMarkAccess->getMarksBegin()[aSave.GetCount()].get()); + MarkBase* pMark = dynamic_cast(pMarkAccess->getAllMarksBegin()[aSave.GetCount()].get()); SwPosition aNewPos(pMark->GetOtherMarkPos()); aNewPos.nNode = rNd; aNewPos.nContent.Assign(pCNd, Min(aSave.GetContent(), nLen)); Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccomp.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccomp.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccomp.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccomp.cxx Fri Jan 3 14:44:44 2014 @@ -1354,8 +1354,11 @@ void SwCompareData::ShowInsert( sal_uLon } -void SwCompareData::ShowDelete( const CompareData& rData, sal_uLong nStt, - sal_uLong nEnd, sal_uLong nInsPos ) +void SwCompareData::ShowDelete( + const CompareData& rData, + sal_uLong nStt, + sal_uLong nEnd, + sal_uLong nInsPos ) { SwNodeRange aRg( ((SwCompareLine*)rData.GetLine( nStt ))->GetNode(), 0, Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccorr.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccorr.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccorr.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/doccorr.cxx Fri Jan 3 14:44:44 2014 @@ -204,7 +204,9 @@ void SwDoc::CorrAbs(const SwNodeIndex& r aNewPos.nContent += nOffset; getIDocumentMarkAccess()->correctMarksAbsolute(rOldNode, rNewPos, nOffset); - { // fix redlines + + // fix redlines + { SwRedlineTbl& rTbl = *pRedlineTbl; for (sal_uInt16 n = 0; n < rTbl.Count(); ) { Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/docdde.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/docdde.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/docdde.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/docdde.cxx Fri Jan 3 14:44:44 2014 @@ -55,16 +55,20 @@ using namespace ::com::sun::star; namespace { - static ::sw::mark::DdeBookmark* lcl_FindDdeBookmark(const IDocumentMarkAccess& rMarkAccess, const String& rName, bool bCaseSensitive) + static ::sw::mark::DdeBookmark* lcl_FindDdeBookmark( + const IDocumentMarkAccess& rMarkAccess, + const String& rName, + const bool bCaseSensitive ) { //Iterating over all bookmarks, checking DdeBookmarks const ::rtl::OUString sNameLc = bCaseSensitive ? rName : GetAppCharClass().lower(rName); - for(IDocumentMarkAccess::const_iterator_t ppMark = rMarkAccess.getMarksBegin(); - ppMark != rMarkAccess.getMarksEnd(); + for(IDocumentMarkAccess::const_iterator_t ppMark = rMarkAccess.getCommonMarksBegin(); + ppMark != rMarkAccess.getCommonMarksEnd(); ppMark++) { - if (::sw::mark::DdeBookmark* const pBkmk = dynamic_cast< ::sw::mark::DdeBookmark*>(ppMark->get())) + if ( IDocumentMarkAccess::GetType( *(ppMark->get()) ) == IDocumentMarkAccess::DDE_BOOKMARK) { + ::sw::mark::DdeBookmark* const pBkmk = dynamic_cast< ::sw::mark::DdeBookmark*>(ppMark->get()); if ( (bCaseSensitive && (pBkmk->GetName() == sNameLc)) || (!bCaseSensitive && GetAppCharClass().lower(pBkmk->GetName()) == String(sNameLc)) Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/docedt.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/docedt.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/docedt.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/docedt.cxx Fri Jan 3 14:44:44 2014 @@ -72,6 +72,9 @@ #include #include "comcore.hrc" #include "editsh.hxx" +#include +#include +#include #include #include Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfld.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfld.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfld.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfld.cxx Fri Jan 3 14:44:44 2014 @@ -278,11 +278,11 @@ const SwFldTypes* SwDoc::GetFldTypes() c Beschreibung: Den ersten Typen mit ResId und Namen finden --------------------------------------------------------------------*/ -SwFieldType* SwDoc::GetFldType( sal_uInt16 nResId, const String& rName, - bool bDbFieldMatching // used in some UNO calls for RES_DBFLD - // to use different string matching code - // #i51815# - ) const +SwFieldType* SwDoc::GetFldType( + sal_uInt16 nResId, + const String& rName, + bool bDbFieldMatching // used in some UNO calls for RES_DBFLD to use different string matching code #i51815# + ) const { sal_uInt16 nSize = pFldTypes->Count(), i = 0; const ::utl::TransliterationWrapper& rSCmp = GetAppCmpStrIgnore(); @@ -2210,7 +2210,7 @@ bool SwDoc::SetFieldsDirty( bool b, cons n < nEnd; ++n ) { const SwTxtAttr* pAttr = pTNd->GetSwpHints()[ n ]; - if( RES_TXTATR_FIELD == pAttr->Which() ) + if ( pAttr->Which() == RES_TXTATR_FIELD ) { b = sal_True; break; Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfmt.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfmt.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfmt.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/docfmt.cxx Fri Jan 3 14:44:44 2014 @@ -719,7 +719,7 @@ static bool lcl_InsAttr( : pNode->Len(); SwRegHistory history( pNode, *pNode, pHistory ); bRet = history.InsertItems( aTxtSet, nInsCnt, nEnd, nFlags ) - || bRet; + || bRet; if (bRet && (pDoc->IsRedlineOn() || (!pDoc->IsIgnoreRedline() && pDoc->GetRedlineTbl().Count()))) @@ -733,8 +733,10 @@ static bool lcl_InsAttr( pUndo->SaveRedlineData( aPam, bTxtIns ); if( pDoc->IsRedlineOn() ) - pDoc->AppendRedline( new SwRedline( bTxtIns - ? nsRedlineType_t::REDLINE_INSERT : nsRedlineType_t::REDLINE_FORMAT, aPam ), true); + pDoc->AppendRedline( + new SwRedline( + bTxtIns ? nsRedlineType_t::REDLINE_INSERT : nsRedlineType_t::REDLINE_FORMAT, aPam ), + true); else if( bTxtIns ) pDoc->SplitRedline( aPam ); } Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/doclay.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/doclay.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/doclay.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/doclay.cxx Fri Jan 3 14:44:44 2014 @@ -389,9 +389,11 @@ void SwDoc::DelLayoutFmt( SwFrmFmt *pFmt |* |*************************************************************************/ -SwFrmFmt *SwDoc::CopyLayoutFmt( const SwFrmFmt& rSource, - const SwFmtAnchor& rNewAnchor, - bool bSetTxtFlyAtt, bool bMakeFrms ) +SwFrmFmt *SwDoc::CopyLayoutFmt( + const SwFrmFmt& rSource, + const SwFmtAnchor& rNewAnchor, + bool bSetTxtFlyAtt, + bool bMakeFrms ) { const bool bFly = RES_FLYFRMFMT == rSource.Which(); const bool bDraw = RES_DRAWFRMFMT == rSource.Which(); @@ -497,7 +499,7 @@ SwFrmFmt *SwDoc::CopyLayoutFmt( const Sw // sorge dafuer das auch Fly's in Fly's kopiert werden aIdx = *pSttNd->EndOfSectionNode(); - pSrcDoc->CopyWithFlyInFly( aRg, 0, aIdx, sal_False, sal_True, sal_True ); + pSrcDoc->CopyWithFlyInFly( aRg, 0, aIdx, NULL, sal_False, sal_True, sal_True ); } else { Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblcpy.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblcpy.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblcpy.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblcpy.cxx Fri Jan 3 14:44:44 2014 @@ -561,7 +561,7 @@ void lcl_CpyBox( const SwTable& rCpyTbl, SwNodeIndex aSavePos( aInsIdx, -1 ); if( pRg.get() ) - pCpyDoc->CopyWithFlyInFly( *pRg, 0, aInsIdx, sal_False ); + pCpyDoc->CopyWithFlyInFly( *pRg, 0, aInsIdx, NULL, sal_False ); else pDoc->GetNodes().MakeTxtNode( aInsIdx, (SwTxtFmtColl*)pDoc->GetDfltTxtFmtColl() ); aSavePos++; Modified: openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblrwcl.cxx URL: http://svn.apache.org/viewvc/openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblrwcl.cxx?rev=1555112&r1=1555111&r2=1555112&view=diff ============================================================================== --- openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblrwcl.cxx (original) +++ openoffice/branches/rejuvenate01/main/sw/source/core/doc/tblrwcl.cxx Fri Jan 3 14:44:44 2014 @@ -2098,7 +2098,7 @@ sal_Bool lcl_CopyBoxToDoc( const _FndBox *rpFndBox->GetBox()->GetSttNd()->EndOfSectionNode() ); SwNodeIndex aInsIdx( *pBox->GetSttNd(), 1 ); - pFromDoc->CopyWithFlyInFly( aCpyRg, 0, aInsIdx, sal_False ); + pFromDoc->CopyWithFlyInFly( aCpyRg, 0, aInsIdx, NULL, sal_False ); // den initialen TextNode loeschen pCpyPara->pDoc->GetNodes().Delete( aInsIdx, 1 ); }