summaryrefslogtreecommitdiff
path: root/sw/inc
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2024-12-27 15:48:45 +0200
committerNoel Grandin <noelgrandin@gmail.com>2024-12-27 17:07:59 +0100
commit3642472bea67c6e0c35bee1e6567e1fe9d560e1a (patch)
tree52da00c2392e03098305e376b3c590098c44a93c /sw/inc
parent8b492a1f3057d2b6c3daed7405000d0270ea3dd9 (diff)
merge SwSidebarItem and SwAnnotationItem classes
Because the separation is not doing useful. Which reveals that SwAnnotationWin::ChangeSidebarItem was doing some very dodgy object slicing when assigning to mrSidebarItem. Fix that by using a pointer in SwAnnotationWin instead. Change-Id: I516dfaac7066d8f1effe351ef388c03dd1127fd7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179445 Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk> Tested-by: Jenkins
Diffstat (limited to 'sw/inc')
-rw-r--r--sw/inc/AnnotationWin.hxx8
-rw-r--r--sw/inc/PostItMgr.hxx14
-rw-r--r--sw/inc/postithelper.hxx48
3 files changed, 24 insertions, 46 deletions
diff --git a/sw/inc/AnnotationWin.hxx b/sw/inc/AnnotationWin.hxx
index 0a91496bea86..9e5aaeba6aeb 100644
--- a/sw/inc/AnnotationWin.hxx
+++ b/sw/inc/AnnotationWin.hxx
@@ -61,7 +61,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow
public:
SwAnnotationWin( SwEditWin& rEditWin,
SwPostItMgr& aMgr,
- SwSidebarItem& rSidebarItem,
+ SwAnnotationItem& rSidebarItem,
SwFormatField* aField );
virtual ~SwAnnotationWin() override;
virtual void dispose() override;
@@ -105,7 +105,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow
void ResetAnchorRectChanged() { mbAnchorRectChanged = false; }
const std::vector<basegfx::B2DRange>& GetAnnotationTextRanges() const { return maAnnotationTextRanges; }
SwEditWin& EditWin();
- SwSidebarItem& GetSidebarItem() { return mrSidebarItem; }
+ SwAnnotationItem& GetSidebarItem() { return *mpSidebarItem; }
OutlinerView* GetOutlinerView() { return mpOutlinerView.get();}
const OutlinerView* GetOutlinerView() const { return mpOutlinerView.get();}
@@ -175,7 +175,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow
bool IsMouseOverSidebarWin() const { return mbMouseOver; }
- void ChangeSidebarItem( SwSidebarItem const & rSidebarItem );
+ void ChangeSidebarItem( SwAnnotationItem & rSidebarItem );
virtual css::uno::Reference< css::accessibility::XAccessible > CreateAccessible() override;
void DrawForPage(OutputDevice* pDev, const Point& rPos);
@@ -276,7 +276,7 @@ class SAL_DLLPUBLIC_RTTI SwAnnotationWin final : public InterimItemWindow
bool mbReadonly;
bool mbIsFollow;
- SwSidebarItem& mrSidebarItem;
+ SwAnnotationItem* mpSidebarItem;
const SwFrame* mpAnchorFrame;
SwFormatField* mpFormatField;
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 8c25f381641b..a7abeb9514f3 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -48,7 +48,7 @@ class SfxItemSet;
class SvxSearchItem;
namespace sw::annotation { class SwAnnotationWin; }
namespace sw::sidebarwindows { class SwFrameSidebarWinContainer; }
-class SwSidebarItem;
+class SwAnnotationItem;
class SwFrame;
namespace vcl { class Window; }
struct ImplSVEvent;
@@ -64,7 +64,7 @@ struct SwPostItPageItem
sw::sidebarwindows::SidebarPosition eSidebarPosition;
tools::Long lOffset;
SwRect mPageRect;
- std::vector<SwSidebarItem*> mvSidebarItems;
+ std::vector<SwAnnotationItem*> mvSidebarItems;
SwPostItPageItem(): bScrollbar(false), eSidebarPosition( sw::sidebarwindows::SidebarPosition::NONE ), lOffset(0)
{
}
@@ -87,7 +87,7 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener,
SwView* mpView;
SwWrtShell* mpWrtShell;
VclPtr<SwEditWin> mpEditWin;
- std::vector<std::unique_ptr<SwSidebarItem>> mvPostItFields;
+ std::vector<std::unique_ptr<SwAnnotationItem>> mvPostItFields;
std::vector<std::unique_ptr<SwPostItPageItem>> mPages;
ImplSVEvent * mnEventId;
bool mbWaitingForCalcRects;
@@ -128,19 +128,19 @@ class SAL_DLLPUBLIC_RTTI SwPostItMgr final : public SfxListener,
sw::annotation::SwAnnotationWin* GetSidebarWin(const SfxBroadcaster* pBroadcaster) const;
- SwSidebarItem* InsertItem( SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus);
+ SwAnnotationItem* InsertItem( SfxBroadcaster* pItem, bool bCheckExistence, bool bFocus);
void RemoveItem( SfxBroadcaster* pBroadcast );
- VclPtr<sw::annotation::SwAnnotationWin> GetOrCreateAnnotationWindow(SwSidebarItem& rItem);
+ VclPtr<sw::annotation::SwAnnotationWin> GetOrCreateAnnotationWindow(SwAnnotationItem& rItem);
public:
SwPostItMgr(SwView* aDoc);
virtual ~SwPostItMgr() override;
- typedef std::vector< std::unique_ptr<SwSidebarItem> >::const_iterator const_iterator;
+ typedef std::vector< std::unique_ptr<SwAnnotationItem> >::const_iterator const_iterator;
const_iterator begin() const { return mvPostItFields.begin(); }
const_iterator end() const { return mvPostItFields.end(); }
- const std::vector<std::unique_ptr<SwSidebarItem>>& GetPostItFields() { return mvPostItFields; }
+ const std::vector<std::unique_ptr<SwAnnotationItem>>& GetPostItFields() { return mvPostItFields; }
void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override;
diff --git a/sw/inc/postithelper.hxx b/sw/inc/postithelper.hxx
index 174e103231bd..30c9606a0d4d 100644
--- a/sw/inc/postithelper.hxx
+++ b/sw/inc/postithelper.hxx
@@ -94,63 +94,41 @@ namespace SwPostItHelper
void ImportHTML(Outliner& rOutliner, const OUString& rHtml);
}
-class SAL_DLLPUBLIC_RTTI SwSidebarItem
+class SwAnnotationItem final
{
public:
VclPtr<sw::annotation::SwAnnotationWin> mpPostIt;
bool mbShow;
bool mbFocus;
bool mbPendingLayout;
-
SwPostItHelper::SwLayoutStatus mLayoutStatus;
SwLayoutInfo maLayoutInfo;
- SwSidebarItem( const bool aFocus);
-
- virtual ~SwSidebarItem();
-
- SwSidebarItem(SwSidebarItem const &) = default;
- SwSidebarItem(SwSidebarItem &&) = default;
- SwSidebarItem & operator =(SwSidebarItem const &) = default;
- SwSidebarItem & operator =(SwSidebarItem &&) = default;
-
- virtual SwPosition GetAnchorPosition() const = 0;
- virtual bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&) = 0;
- virtual const SwFormatField& GetFormatField() const = 0;
- virtual SwFormatField& GetFormatField() = 0;
- virtual const SfxBroadcaster* GetBroadcaster() const = 0;
- virtual VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow( SwEditWin& rEditWin,
- SwPostItMgr& aMgr) = 0;
-};
-
-class SwAnnotationItem final : public SwSidebarItem
-{
-public:
SwAnnotationItem(
SwFormatField& rFormatField,
- const bool aFocus)
- : SwSidebarItem( aFocus )
- , mrFormatField( rFormatField )
- {
- }
+ const bool aFocus);
+ virtual ~SwAnnotationItem();
+
+ SwAnnotationItem(SwAnnotationItem const &) = default;
+ SwAnnotationItem(SwAnnotationItem &&) = default;
- virtual SwPosition GetAnchorPosition() const override;
- virtual bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&) override;
- virtual const SwFormatField& GetFormatField() const override
+ SwPosition GetAnchorPosition() const;
+ bool UseElement(SwRootFrame const&, IDocumentRedlineAccess const&);
+ const SwFormatField& GetFormatField() const
{
return mrFormatField;
}
- SwFormatField& GetFormatField() override
+ SwFormatField& GetFormatField()
{
return mrFormatField;
}
- virtual const SfxBroadcaster* GetBroadcaster() const override
+ const SfxBroadcaster* GetBroadcaster() const
{
return &mrFormatField;
}
- virtual VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow(
+ VclPtr<sw::annotation::SwAnnotationWin> GetSidebarWindow(
SwEditWin& rEditWin,
- SwPostItMgr& aMgr ) override;
+ SwPostItMgr& aMgr );
private:
SwFormatField& mrFormatField;