diff options
author | Armin Le Grand <alg@apache.org> | 2013-09-13 11:52:57 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2013-09-13 11:52:57 +0000 |
commit | dbd1dea45083d76235568f6b93e86a8ac15f2b97 (patch) | |
tree | 8d5141007b4db1400aa3ad8f42fdb2b0b5b3b83f | |
parent | ff6a9f07d740c9a15c4d498db4cec6b99b4c14b4 (diff) |
selection rework, fixes for virtual function warnings
50 files changed, 415 insertions, 337 deletions
diff --git a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx index b29f752cc689..b713e5320216 100644 --- a/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx +++ b/chart2/source/controller/drawinglayer/DrawViewWrapper.cxx @@ -220,17 +220,12 @@ SdrPageView* DrawViewWrapper::GetPageView() const }; //virtual -void DrawViewWrapper::SetMarkHandles() +void DrawViewWrapper::CreateMarkHandles(SdrHdlList& rTarget) { - // hack for chart: It creates ominous own handles, and that by directly manipulating - // the normally not accessible maViewHandleList. For now, allow access to it by casting - // it to non-const - const SdrHdlList& rHdlList = GetHdlList(); - - if( m_pMarkHandleProvider && m_pMarkHandleProvider->getMarkHandles( const_cast< SdrHdlList& >(rHdlList) ) ) + if( m_pMarkHandleProvider && m_pMarkHandleProvider->getMarkHandles( rTarget ) ) return; else - SdrView::SetMarkHandles(); + SdrView::CreateMarkHandles(rTarget); } SdrObject* DrawViewWrapper::getHitObject( const basegfx::B2DPoint& rPnt ) const diff --git a/chart2/source/controller/inc/DrawViewWrapper.hxx b/chart2/source/controller/inc/DrawViewWrapper.hxx index 3d1666df677f..5943004e4dd0 100644 --- a/chart2/source/controller/inc/DrawViewWrapper.hxx +++ b/chart2/source/controller/inc/DrawViewWrapper.hxx @@ -48,6 +48,10 @@ public: class DrawViewWrapper : public E3dView { +private: + //fill list of selection handles + virtual void CreateMarkHandles(SdrHdlList& rTarget); + public: DrawViewWrapper(SdrModel& rModel, OutputDevice* pOut, bool bPaintPageForEditMode); virtual ~DrawViewWrapper(); @@ -59,9 +63,6 @@ public: void attachParentReferenceDevice( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xChartModel ); - //fill list of selection handles 'maViewHandleList' - virtual void SetMarkHandles(); - SdrPageView* GetPageView() const; SdrObject* getHitObject( const basegfx::B2DPoint& rPnt ) const; diff --git a/chart2/source/controller/main/SelectionHelper.cxx b/chart2/source/controller/main/SelectionHelper.cxx index b24902929b2e..5133f210355a 100644 --- a/chart2/source/controller/main/SelectionHelper.cxx +++ b/chart2/source/controller/main/SelectionHelper.cxx @@ -622,7 +622,6 @@ bool SelectionHelper::getMarkHandles( SdrHdlList& rHdlList ) //that object should be used to create handles from if( m_pMarkObj && m_pMarkObj != m_pSelectedObj) { - rHdlList.Clear(); SdrPathObj* pSdrPathObj = dynamic_cast< SdrPathObj* >(m_pMarkObj); if( pSdrPathObj ) @@ -648,8 +647,6 @@ bool SelectionHelper::getMarkHandles( SdrHdlList& rHdlList ) //@todo: //add and document good marking defaults ... - rHdlList.Clear(); - SdrObject* pObj = m_pSelectedObj; if(!pObj) return false; diff --git a/reportdesign/inc/RptModel.hxx b/reportdesign/inc/RptModel.hxx index 72764cb4b2ea..34c5abc97b99 100644 --- a/reportdesign/inc/RptModel.hxx +++ b/reportdesign/inc/RptModel.hxx @@ -63,10 +63,10 @@ public: OReportModel(::reportdesign::OReportDefinition* _pReportDefinition); virtual ~OReportModel(); - virtual void SetChanged(sal_Bool bFlg = sal_True); + virtual void SetChanged(bool bFlg = true); virtual SdrPage* AllocPage(bool bMasterPage); virtual Window* GetCurDocViewWin(); - virtual SdrPage* RemovePage(sal_uInt16 nPgNum); + virtual SdrPage* RemovePage(sal_uInt32 nPgNum); /** returns the numbering type that is used to format page fields in drawing shapes */ virtual SvxNumType GetPageNumType() const; diff --git a/reportdesign/source/core/inc/ReportUndoFactory.hxx b/reportdesign/source/core/inc/ReportUndoFactory.hxx index bda2d7cb59d3..d1e8eafad1be 100644 --- a/reportdesign/source/core/inc/ReportUndoFactory.hxx +++ b/reportdesign/source/core/inc/ReportUndoFactory.hxx @@ -58,8 +58,8 @@ namespace rptui virtual SdrUndoAction* CreateUndoObjectSetText( SdrObject& rNewObj, sal_Int32 nText ); // layer - virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); - virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); + virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); + virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); // virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1); // page diff --git a/reportdesign/source/core/sdr/ReportUndoFactory.cxx b/reportdesign/source/core/sdr/ReportUndoFactory.cxx index 8d9fe28adc19..cd109e111268 100644 --- a/reportdesign/source/core/sdr/ReportUndoFactory.cxx +++ b/reportdesign/source/core/sdr/ReportUndoFactory.cxx @@ -124,12 +124,12 @@ SdrUndoAction* OReportUndoFactory::CreateUndoObjectSetText( SdrObject& rNewObj, } // layer -SdrUndoAction* OReportUndoFactory::CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) +SdrUndoAction* OReportUndoFactory::CreateUndoNewLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) { return m_pUndoFactory->CreateUndoNewLayer( nLayerNum, rNewLayerAdmin, rNewModel ); } -SdrUndoAction* OReportUndoFactory::CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) +SdrUndoAction* OReportUndoFactory::CreateUndoDeleteLayer(sal_uInt32 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) { return m_pUndoFactory->CreateUndoDeleteLayer( nLayerNum, rNewLayerAdmin, rNewModel ); } diff --git a/reportdesign/source/core/sdr/RptModel.cxx b/reportdesign/source/core/sdr/RptModel.cxx index 4996c1b7d450..80f631371e03 100644 --- a/reportdesign/source/core/sdr/RptModel.cxx +++ b/reportdesign/source/core/sdr/RptModel.cxx @@ -100,7 +100,7 @@ SdrPage* OReportModel::AllocPage(bool /*bMasterPage*/) //---------------------------------------------------------------------------- -void OReportModel::SetChanged( sal_Bool bChanged ) +void OReportModel::SetChanged( bool bChanged ) { SdrModel::SetChanged( bChanged ); SetModified( bChanged ); @@ -125,7 +125,7 @@ void OReportModel::SetModified(sal_Bool _bModified) m_pController->setModified(_bModified); } // ----------------------------------------------------------------------------- -SdrPage* OReportModel::RemovePage(sal_uInt16 nPgNum) +SdrPage* OReportModel::RemovePage(sal_uInt32 nPgNum) { OReportPage* pPage = dynamic_cast<OReportPage*>(SdrModel::RemovePage(nPgNum)); //if ( pPage ) diff --git a/reportdesign/source/ui/report/SectionView.cxx b/reportdesign/source/ui/report/SectionView.cxx index b61b7fe67432..dd27e0bdc083 100644 --- a/reportdesign/source/ui/report/SectionView.cxx +++ b/reportdesign/source/ui/report/SectionView.cxx @@ -157,13 +157,15 @@ void OSectionView::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { const SdrObject* pObj = pSdrHint->GetSdrHintObject(); const SdrHintKind eKind = pSdrHint->GetSdrHintKind(); - // check for change of selected object - if((HINT_OBJCHG_MOVE == eKind || HINT_OBJCHG_RESIZE == eKind || HINT_OBJCHG_ATTR == eKind) - && pObj && IsObjMarked(*pObj)) - { - SetMarkHandles(); - } - else if ( eKind == HINT_OBJREMOVED ) + // TTTT: Should be handled by Selection::Notify now + //// check for change of selected object + //if((HINT_OBJCHG_MOVE == eKind || HINT_OBJCHG_RESIZE == eKind || HINT_OBJCHG_ATTR == eKind) + // && pObj && IsObjMarked(*pObj)) + //{ + // RecreateAllMarkHandles(); + //} + //else + if ( eKind == HINT_OBJREMOVED ) { ObjectRemovedInAliveMode(pObj); } diff --git a/reportdesign/source/ui/report/ViewsWindow.cxx b/reportdesign/source/ui/report/ViewsWindow.cxx index f5c767827cf8..35f486d73ea2 100644 --- a/reportdesign/source/ui/report/ViewsWindow.cxx +++ b/reportdesign/source/ui/report/ViewsWindow.cxx @@ -953,7 +953,7 @@ void OViewsWindow::alignMarkedObjects(sal_Int32 _nControlModification,bool _bAli } } - pView->SetMarkHandles(); + pView->RecreateAllMarkHandles(); } } // ----------------------------------------------------------------------------- @@ -1788,7 +1788,7 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) } } - rView.SetMarkHandles(); + rView.RecreateAllMarkHandles(); } } } diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx index f1944167367f..bdae1555457b 100644 --- a/sc/source/ui/view/tabview5.cxx +++ b/sc/source/ui/view/tabview5.cxx @@ -485,7 +485,7 @@ void ScTabView::UpdateAnchorHandles() { if ( pDrawView ) { - pDrawView->SetMarkHandles(); + pDrawView->RecreateAllMarkHandles(); } } diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx index f0830dc0cc82..23487ac61c28 100644 --- a/sc/source/ui/view/tabvwshb.cxx +++ b/sc/source/ui/view/tabvwshb.cxx @@ -225,7 +225,8 @@ sal_Bool ScTabViewShell::ActivateObject( SdrOle2Obj* pObj, long nVerb ) // #i118524# refresh handles to suppress for activated OLE if(GetSdrView()) { - GetSdrView()->forceSelectionChange(); + // TTTT: Is this needed? Check for it... + GetSdrView()->handleSelectionChange(); } //! SetDocumentName sollte schon im Sfx passieren ??? //TODO/LATER: how "SetDocumentName"? diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx b/sd/source/ui/animations/CustomAnimationPane.cxx index 9bda84687d65..f1209f3aad46 100644 --- a/sd/source/ui/animations/CustomAnimationPane.cxx +++ b/sd/source/ui/animations/CustomAnimationPane.cxx @@ -1030,7 +1030,7 @@ void CustomAnimationPane::updateMotionPathTags() if( bChanges && pView ) { - pView->SetMarkHandles(); + pView->RecreateAllMarkHandles(); } } diff --git a/sd/source/ui/animations/motionpathtag.cxx b/sd/source/ui/animations/motionpathtag.cxx index f5346d3de622..0d84ee176a9f 100644 --- a/sd/source/ui/animations/motionpathtag.cxx +++ b/sd/source/ui/animations/motionpathtag.cxx @@ -459,7 +459,7 @@ void MotionPathTag::MovePath( double fDX, double fDY ) { mpPathObj->setSdrObjectTransformation(basegfx::tools::createTranslateB2DHomMatrix(fDX, fDY) * mpPathObj->getSdrObjectTransformation()); // sdr::legacy::MoveSdrObject(*mpPathObj, Size( nDX, nDY ) ); - mrView.SetMarkHandles(); // TTTT: Neded? + mrView.RecreateAllMarkHandles(); // TTTT: Neded? } } @@ -517,7 +517,7 @@ bool MotionPathTag::MouseButtonDown( const MouseEvent& rMEvt, SmartHdl& rHdl ) if(0xffffffff != nInsPointNum) { mrView.MarkPoints(0, true); // unmarkall - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); bool bRet = mrView.BegDragObj(aMDPos, mrView.GetHdlByIndex(nInsPointNum+1), 0.0, new PathDragObjOwn( mrView ) ); @@ -1023,7 +1023,7 @@ void MotionPathTag::disposing() { SdrPathObj* pPathObj = mpPathObj; mpPathObj = 0; - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); deleteSdrObjectSafeAndClearPointer(pPathObj); } @@ -1071,7 +1071,7 @@ void MotionPathTag::DeleteMarkedPoints() } mrView.MarkPoints(0, true); // unmarkall - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } } @@ -1120,7 +1120,7 @@ void MotionPathTag::SetMarkedSegmentsKind(SdrPathSegmentKind eKind) if(sdr::PolyPolygonEditor::SetSegmentsKind( aPolyPolygon, eKind, maSelectedPoints ) ) { mpPathObj->setB2DPolyPolygonInObjectCoordinates(aPolyPolygon); - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } } @@ -1172,7 +1172,7 @@ void MotionPathTag::SetMarkedPointsSmooth(SdrPathSmoothKind eKind) if(sdr::PolyPolygonEditor::SetPointsSmooth( aPolyPolygon, eFlags, maSelectedPoints ) ) { mpPathObj->setB2DPolyPolygonInObjectCoordinates(aPolyPolygon); - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } } @@ -1205,7 +1205,7 @@ void SAL_CALL MotionPathTag::changesOccurred( const ChangesEvent& /*Event*/ ) th mpEffect->updateSdrPathObjFromPath( *mpPathObj ); mbInUpdatePath = false; updatePathAttributes(); - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } diff --git a/sd/source/ui/annotations/annotationmanager.cxx b/sd/source/ui/annotations/annotationmanager.cxx index b969427341a1..2312fbe419e3 100644 --- a/sd/source/ui/annotations/annotationmanager.cxx +++ b/sd/source/ui/annotations/annotationmanager.cxx @@ -856,7 +856,7 @@ IMPL_LINK(AnnotationManagerImpl,UpdateTagsHdl, void *, EMPTYARG) CreateTags(); if( mrBase.GetDrawView() ) - static_cast< ::sd::View* >( mrBase.GetDrawView() )->SetMarkHandles(); + static_cast< ::sd::View* >( mrBase.GetDrawView() )->RecreateAllMarkHandles(); invalidateSlots(); diff --git a/sd/source/ui/annotations/annotationtag.cxx b/sd/source/ui/annotations/annotationtag.cxx index dad652385de5..30a5d4c41749 100644 --- a/sd/source/ui/annotations/annotationtag.cxx +++ b/sd/source/ui/annotations/annotationtag.cxx @@ -437,7 +437,7 @@ void AnnotationTag::Move( double fDX, double fDY ) if( mrManager.GetDoc()->IsUndoEnabled() ) mrManager.GetDoc()->EndUndo(); - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } diff --git a/sd/source/ui/func/fucopy.cxx b/sd/source/ui/func/fucopy.cxx index 25eaab3f35c7..312427301bc2 100644 --- a/sd/source/ui/func/fucopy.cxx +++ b/sd/source/ui/func/fucopy.cxx @@ -327,7 +327,7 @@ void FuCopy::DoExecute( SfxRequest& rReq ) } // adapt handles - mpView->SetMarkHandles(); + mpView->RecreateAllMarkHandles(); mpView->EndUndo(); } diff --git a/sd/source/ui/func/fusel.cxx b/sd/source/ui/func/fusel.cxx index 479e1b68cfb7..6b22c69631d1 100644 --- a/sd/source/ui/func/fusel.cxx +++ b/sd/source/ui/func/fusel.cxx @@ -403,12 +403,6 @@ bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt) } } - // refresh mbMoveAllowedOnSelection when selection has changed - if(mpView->isSelectionChangePending()) - { - mpView->forceSelectionChange(); - } - if( !bDeactivateOLE ) { if ( !bReadOnly && @@ -505,7 +499,7 @@ bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt) mpView->MarkPoints(0, true); // update all SdrHdl before getting one - mpView->forceSelectionChange(); + // mpView->forceSelectionChange(); TTTT: Should be done in PickHandle // get one pHdl = mpView->PickHandle(aMDPos); @@ -531,14 +525,14 @@ bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt) if ( ! rMEvt.IsRight()) { - if(mpView->isSelectionChangePending()) - { + //if(mpView->isSelectionChangePending()) + //{ // trigger evtl. outstanding selection change // to get a valid SdrHdl with the next call - mpView->forceSelectionChange(); + // mpView->forceSelectionChange(); TTTT: Should be done in PickHandle pHdl = mpView->PickHandle(aMDPos); - } + //} if(pHdl) { @@ -708,7 +702,7 @@ bool FuSelection::MouseButtonUp(const MouseEvent& rMEvt) // force trigger selection change to get bSelectionChanged // set in FuSelection::SelectionHasChanged() call eventually - mpView->forceSelectionChange(); + // mpView->forceSelectionChange(); TTTT: Should be done in HasMarkablePoints const double fHitLog(basegfx::B2DVector(mpWindow->GetInverseViewTransformation() * basegfx::B2DVector(HITPIX, 0.0)).getLength()); const double fDrgLog(basegfx::B2DVector(mpWindow->GetInverseViewTransformation() * basegfx::B2DVector(DRGPIX, 0.0)).getLength()); diff --git a/sd/source/ui/func/futext.cxx b/sd/source/ui/func/futext.cxx index ec81ee8f16ad..81b8b06fd33a 100644 --- a/sd/source/ui/func/futext.cxx +++ b/sd/source/ui/func/futext.cxx @@ -780,7 +780,7 @@ bool FuText::MouseButtonUp(const MouseEvent& rMEvt) ImpSetAttributesFitCommon(GetTextObj()); // adapt handles - mpView->SetMarkHandles(); + mpView->RecreateAllMarkHandles(); mpView->PickHandle(aLogicPos); SetInEditMode(rMEvt, false); } diff --git a/sd/source/ui/func/smarttag.cxx b/sd/source/ui/func/smarttag.cxx index 672b32bfd421..704e6183c163 100644 --- a/sd/source/ui/func/smarttag.cxx +++ b/sd/source/ui/func/smarttag.cxx @@ -220,7 +220,7 @@ void SmartTagSet::select( const SmartTagReference& xTag ) if( mrView.areSdrObjectsSelected() ) mrView.UnmarkAllObj(); else - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } @@ -233,7 +233,7 @@ void SmartTagSet::deselect() mxSelectedTag->deselect(); mxSelectedTag.clear(); mrView.SetPossibilitiesDirty(); - mrView.SetMarkHandles(); + mrView.RecreateAllMarkHandles(); } } diff --git a/sd/source/ui/table/tableobjectbar.cxx b/sd/source/ui/table/tableobjectbar.cxx index 35f9a1463817..b692ec05cf7d 100644 --- a/sd/source/ui/table/tableobjectbar.cxx +++ b/sd/source/ui/table/tableobjectbar.cxx @@ -199,7 +199,7 @@ void TableObjectBar::Execute( SfxRequest& rReq ) case SID_TABLE_INSERT_ROW: case SID_TABLE_INSERT_COL: { - pView->SetMarkHandles(); + pView->RecreateAllMarkHandles(); pBindings->Invalidate( SID_TABLE_DELETE_ROW ); pBindings->Invalidate( SID_TABLE_DELETE_COL ); pBindings->Invalidate( SID_FRAME_LINESTYLE ); diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 0fbeac648b4b..203e22fb31f2 100644 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -1586,7 +1586,7 @@ Reference< drawing::XShape > SAL_CALL SdGenericDrawPage::combine( const Referenc mpView->ShowSdrPage( *GetPage() ); _SelectObjectsInView( xShapes ); mpView->CombineMarkedObjects( sal_False ); - mpView->SetMarkHandles(); + mpView->RecreateAllMarkHandles(); SdrObject* pSelected = mpView->getSelectedIfSingle(); @@ -1636,7 +1636,7 @@ Reference< drawing::XShape > SAL_CALL SdGenericDrawPage::bind( const Reference< mpView->ShowSdrPage( *GetPage() ); _SelectObjectsInView( xShapes ); mpView->CombineMarkedObjects( sal_True ); - mpView->SetMarkHandles(); + mpView->RecreateAllMarkHandles(); SdrObject* pSelected = mpView->getSelectedIfSingle(); diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx index e66cfbac8384..6cc2cb1b2841 100644 --- a/sd/source/ui/view/drviews1.cxx +++ b/sd/source/ui/view/drviews1.cxx @@ -1233,7 +1233,7 @@ bool DrawViewShell::SwitchPage(sal_uInt32 nSelectedPage) rBindings.Invalidate(SID_INSERTPAGE,true,false); UpdatePreview( mpActualPage ); - mpDrawView->SetMarkHandles(); + mpDrawView->RecreateAllMarkHandles(); } return (bOK); diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx index 72511a8bccd8..8728e96d1736 100644 --- a/sd/source/ui/view/sdwindow.cxx +++ b/sd/source/ui/view/sdwindow.cxx @@ -990,7 +990,7 @@ void Window::DataChanged( const DataChangedEvent& rDCEvt ) // #101928# re-create handles to show new outfit if(dynamic_cast< DrawViewShell* >(mpViewShell)) { - mpViewShell->GetView()->SetMarkHandles(); + mpViewShell->GetView()->RecreateAllMarkHandles(); } } } diff --git a/sd/source/ui/view/viewoverlaymanager.cxx b/sd/source/ui/view/viewoverlaymanager.cxx index 3c188b7e116f..2d02ac6cba8d 100644 --- a/sd/source/ui/view/viewoverlaymanager.cxx +++ b/sd/source/ui/view/viewoverlaymanager.cxx @@ -510,7 +510,7 @@ IMPL_LINK(ViewOverlayManager,UpdateTagsHdl, void *, EMPTYARG) bChanges |= CreateTags(); if( bChanges && mrBase.GetDrawView() ) - static_cast< ::sd::View* >( mrBase.GetDrawView() )->SetMarkHandles(); + static_cast< ::sd::View* >( mrBase.GetDrawView() )->RecreateAllMarkHandles(); return 0; } diff --git a/svx/inc/svx/sdrselection.hxx b/svx/inc/svx/sdrselection.hxx index 4ca9d889b752..7a881e1167ac 100644 --- a/svx/inc/svx/sdrselection.hxx +++ b/svx/inc/svx/sdrselection.hxx @@ -63,7 +63,7 @@ namespace sdr typedef ::std::set< SdrObject*, SelectionComparator > SelectionSet; // basic selection calss with minimal interface - class SVX_DLLPUBLIC Selection : private boost::noncopyable, public SfxListener, public Timer + class SVX_DLLPUBLIC Selection : private boost::noncopyable, public SfxListener { private: // view this incarnation belongs to exclusively @@ -87,7 +87,6 @@ namespace sdr basegfx::B2DRange maSnapRange; // local tooling - void delayedSelectionChanged(); void createIndexDescription(bool bPoints); void checkPointIndexCorrection(); void checkGlueIndexCorrection(); @@ -98,20 +97,14 @@ namespace sdr // derived from SfxListener virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); - // derived from Timer - virtual void Timeout(); + // handle change + void handleChange(); public: /// constructor Selection(SdrView& rSdrView); virtual ~Selection(); - /// test if selection change is pending - bool isSelectionChangePending() const; - - /// force evtl. delayed SelectionChange to be broadcasted - void forceSelectionChange(); - /// const accesses const SdrObjectVector& getVector() const; SdrObject* getSingle() const; diff --git a/svx/inc/svx/svddrgv.hxx b/svx/inc/svx/svddrgv.hxx index bd82542fea72..47b163b59082 100644 --- a/svx/inc/svx/svddrgv.hxx +++ b/svx/inc/svx/svddrgv.hxx @@ -37,7 +37,6 @@ class ImpSdrDragViewExtraData; class SVX_DLLPUBLIC SdrDragView: public SdrExchangeView { -private: protected: SdrHdl* mpDragHdl; SdrDragMethod* mpCurrentSdrDragMethod; @@ -69,7 +68,7 @@ protected: virtual ~SdrDragView(); public: - virtual void SetMarkHandles(); + virtual void RecreateAllMarkHandles(); virtual bool IsAction() const; virtual void MovAction(const basegfx::B2DPoint& rPnt); diff --git a/svx/inc/svx/svdhdl.hxx b/svx/inc/svx/svdhdl.hxx index 1de173faaf56..9ebfdc153222 100644 --- a/svx/inc/svx/svdhdl.hxx +++ b/svx/inc/svx/svdhdl.hxx @@ -158,6 +158,8 @@ enum BitmapMarkerKind // SwSdrHdl // +typedef ::std::vector< SdrHdl* > SdrHdlContainerType; + class SVX_DLLPUBLIC SdrHdl : private boost::noncopyable { private: @@ -276,7 +278,6 @@ public: class SVX_DLLPUBLIC SdrHdlList : private boost::noncopyable { private: - typedef ::std::vector< SdrHdl* > SdrHdlContainerType; friend class SdrHdl; SVX_DLLPRIVATE bool operator==(const SdrHdlList&); diff --git a/svx/inc/svx/svdmrkv.hxx b/svx/inc/svx/svdmrkv.hxx index 77c4cce5ebc0..8af22f4f8241 100644 --- a/svx/inc/svx/svdmrkv.hxx +++ b/svx/inc/svx/svdmrkv.hxx @@ -99,7 +99,7 @@ void sortSdrObjectSelection(SdrObjectVector& rSdrObjectVector); //////////////////////////////////////////////////////////////////////////////////////////////////// -class SVX_DLLPUBLIC SdrMarkView : public SdrSnapView +class SVX_DLLPUBLIC SdrMarkView : public SdrSnapView, public Timer { private: ImplMarkingOverlay* mpMarkObjOverlay; @@ -115,13 +115,18 @@ protected: private: // make private; access should be limited since it is dependent of selection and thus from - // the selection to be up-to-date. Before using a call to isSelectionChangePending() and - // evtl. to forceSelectionChange() may be done which will potentially recreate all SdrHdl objects - SdrHdlList maViewHandleList; + // the selection to be up-to-date + SdrHdlList maViewSdrHandleList; // new selection abstraction. Private to guarantee isolation sdr::selection::Selection maSelection; + // stuff to save focus during SdrHdl recreation + sal_uInt32 mnSavePolyNum; + sal_uInt32 mnSavePointNum; + SdrHdlKind meSaveKind; + const SdrObject* mpSaveObj; + protected: basegfx::B2DRange maMarkedPointRange; basegfx::B2DRange maMarkedGluePointRange; @@ -135,8 +140,9 @@ protected: bool mbForceFrameHandles : 1; // Persistent - FrameDrag auch bei Einzelobjekten bool mbPlusHdlAlways : 1; // Persistent bool mbInsPolyPoint : 1; // z.Zt InsPolyPointDragging + bool mbSaveOldFocus : 1; - virtual void AddDragModeHdl(SdrDragMode eMode); + virtual void AddDragModeHdl(SdrHdlList& rTarget, SdrDragMode eMode); virtual bool MouseMove(const MouseEvent& rMEvt, Window* pWin); // add custom handles (used by other apps, e.g. AnchorPos) @@ -147,8 +153,8 @@ protected: virtual SdrObject* CheckSingleSdrObjectHit(const basegfx::B2DPoint& rPnt, double fTol, SdrObjList* pOL, sal_uInt32 nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj) const; bool ImpIsFrameHandles() const; - // Macht aus einer Winkelangabe in 1/100deg einen String inkl. Grad-Zeichen - bool ImpMarkPoint(SdrHdl* pHdl, bool bUnmark); + // select or deselect points associated with given SdrHdl vector + bool ImpMarkPoints(const SdrHdlContainerType& rHdls, bool bUnmark); void SetMoveOutside(bool bOn); bool IsMoveOutside() const; @@ -157,8 +163,20 @@ protected: SdrMarkView(SdrModel& rModel1, OutputDevice* pOut = 0); virtual ~SdrMarkView(); + // helper stuff for the complete RecreateAllMarkHandles implementation + void OnDemandCreate(SdrHdlList& rTarget); + void SaveMarkHandleFocus(const SdrHdlList& rTarget); + virtual void CreateMarkHandles(SdrHdlList& rTarget); + void RestoreMarkHandleFocus(SdrHdlList& rTarget); + public: - void SetMarkHandles(); + // completely recreate all SdrHdl based controller objects for all views + virtual void RecreateAllMarkHandles(); + + // from time derivation; used for automatic on-demand SdrHdl creation after + // RecreateAllMarkHandles calls; either triggered from timer or by hand from + // GetHdlList() to ensure a new, correct SdrHdl list + virtual void Timeout(); void MarkGluePoints(const basegfx::B2DRange* pRange, bool bUnmark); virtual void MarkPoints(const basegfx::B2DRange* pRange, bool bUnmark); @@ -212,10 +230,6 @@ public: //////////////////////////////////////////////////////////////////////////////////////////////////// // new interface to selection, a direct wrapper to sdr::selection::Selection - // validity of selection check and force - bool isSelectionChangePending() const { return maSelection.isSelectionChangePending(); } - void forceSelectionChange() { maSelection.forceSelectionChange(); } - // selection const accesses SdrObjectVector getSelectedSdrObjectVectorFromSdrMarkView() const { return maSelection.getVector(); } SdrObject* getSelectedIfSingle() const { return maSelection.getSingle(); } diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx index 6d47ebce80d6..588706e227b5 100644 --- a/svx/source/engine3d/view3d.cxx +++ b/svx/source/engine3d/view3d.cxx @@ -1539,7 +1539,7 @@ void E3dView::Start3DCreation() SetRef2(basegfx::B2DPoint(GetRef1().getX(), nY2)); // force re-creation of SdrHdls TTTT needed? - SetMarkHandles(); + RecreateAllMarkHandles(); // SpiegelPolygone SOFORT zeigen const SdrHdlList &aHdlList = GetHdlList(); diff --git a/svx/source/svdraw/sdrselection.cxx b/svx/source/svdraw/sdrselection.cxx index f987d1c147e0..7a6efe5d5256 100644 --- a/svx/source/svdraw/sdrselection.cxx +++ b/svx/source/svdraw/sdrselection.cxx @@ -156,31 +156,7 @@ namespace sdr } } - void Selection::delayedSelectionChanged() - { - // trigger a delayed selection change - if(!IsActive()) - { - SetTimeout(1); - Start(); - } - } - - bool Selection::isSelectionChangePending() const - { - return IsActive(); - } - - void Selection::forceSelectionChange() - { - if(IsActive()) - { - Stop(); - Timeout(); - } - } - - void Selection::Timeout() + void Selection::handleChange() { // check if marked points need to be corrected if(!maPointIndices.empty()) @@ -273,7 +249,6 @@ namespace sdr Selection::Selection(SdrView& rSdrView) : boost::noncopyable(), SfxListener(), - Timer(), mrSdrView(rSdrView), maSet(), maPointIndices(), @@ -287,7 +262,6 @@ namespace sdr Selection::~Selection() { - Stop(); } void Selection::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint) @@ -307,15 +281,12 @@ namespace sdr case HINT_OBJCHG_RESIZE: case HINT_OBJCHG_ATTR: { - // the BoundRange/SnapRange of a selected SdrObject - // may have changed. Since this may happen often and - // mainly based on the selection, do not trigger a - // selection change immediately, but start a timer - // to do so later - delayedSelectionChanged(); - // reset buffered SnapRange resetBufferedSelectionInformation(); + + // the BoundRange/SnapRange of a selected SdrObject + // may have changed + handleChange(); break; } case HINT_OBJINSERTED: @@ -330,7 +301,7 @@ namespace sdr { // a selected SdrObject was removed from SdrObjList, thus is no // longer active in the SdrModel. Remove from selection, too. - // This also triggers a delayedSelectionChanged() + // This also triggers handleChange() if(pSdrHint->GetSdrHintObject()) { removeSdrObject(*pSdrHint->GetSdrHintObject()); @@ -350,7 +321,7 @@ namespace sdr This should be avoided by managing the selection before calling changing methods (!)"); // remove the deleted SdrObject from the selection. This will trigger - // a delayedSelectionChanged to react. All selection + // handleChange() to react. All selection // users have to forget the deleted SdrObject ASAP removeSdrObject(*pSdrHint->GetSdrHintObject()); } @@ -452,7 +423,7 @@ namespace sdr } resetBufferedSelectionInformation(); - delayedSelectionChanged(); + handleChange(); } } } @@ -470,7 +441,7 @@ namespace sdr resetBufferedSelectionInformation(); resetBufferedPointInformation(); resetBufferedGlueInformation(); - delayedSelectionChanged(); + handleChange(); } } @@ -489,7 +460,7 @@ namespace sdr resetBufferedSelectionInformation(); resetBufferedPointInformation(); resetBufferedGlueInformation(); - delayedSelectionChanged(); + handleChange(); } } @@ -524,7 +495,7 @@ namespace sdr StartListening(const_cast< SdrObject& >(**aIter)); } - delayedSelectionChanged(); + handleChange(); } } } @@ -581,7 +552,7 @@ namespace sdr resetBufferedGlueInformation(); } - delayedSelectionChanged(); + handleChange(); } } else @@ -618,7 +589,7 @@ namespace sdr resetBufferedGlueInformation(); } - delayedSelectionChanged(); + handleChange(); } } } diff --git a/svx/source/svdraw/svddrgv.cxx b/svx/source/svdraw/svddrgv.cxx index 1d1ae57a8260..14acc7a77184 100644 --- a/svx/source/svdraw/svddrgv.cxx +++ b/svx/source/svdraw/svddrgv.cxx @@ -653,7 +653,8 @@ bool SdrDragView::EndDragObj(bool bCopy) if(mbInsPolyPoint) { - SetMarkHandles(); + RecreateAllMarkHandles(); + mbInsPolyPoint = false; if( bUndo ) @@ -691,7 +692,7 @@ void SdrDragView::BrkDragObj() mpInsPointUndo->Undo(); // Den eingefuegten Punkt wieder raus delete mpInsPointUndo; mpInsPointUndo = 0; - SetMarkHandles(); + RecreateAllMarkHandles(); mbInsPolyPoint = false; } @@ -767,7 +768,7 @@ bool SdrDragView::ImpBegInsObjPoint(bool bIdxZwang, sal_uInt32 /*nIdx*/, const b { mbInsPolyPoint = true; MarkPoints(0, true); // unmarkall - // SetMarkHandles(); TTTT should be triggered by GetHdlList() below + // RecreateAllMarkHandles(); TTTT should be triggered by GetHdlList() below bRetval = BegDragObj(rPnt, GetHdlList().GetHdlByIndex(mnInsPointNum), 0.0); @@ -980,14 +981,14 @@ bool SdrDragView::IsOrthoDesired() const //////////////////////////////////////////////////////////////////////////////////////////////////// -void SdrDragView::SetMarkHandles() +void SdrDragView::RecreateAllMarkHandles() { if(GetDragHdl()) { mpDragHdl = 0; } - SdrExchangeView::SetMarkHandles(); + SdrExchangeView::RecreateAllMarkHandles(); } bool SdrDragView::IsSolidDragging() const diff --git a/svx/source/svdraw/svdedxv.cxx b/svx/source/svdraw/svdedxv.cxx index 314cc9858f79..68f94acadbcf 100644 --- a/svx/source/svdraw/svdedxv.cxx +++ b/svx/source/svdraw/svdedxv.cxx @@ -809,7 +809,7 @@ bool SdrObjEditView::SdrBeginTextEdit( mpTextEditCursorMerker = pWin->GetCursor(); SetMoveOutside(true); - // SetMarkHandles(); TTTT: Should be triggered by SetMoveOutside directly + // RecreateAllMarkHandles(); TTTT: Should be triggered by SetMoveOutside directly mpTextEditOutlinerView = ImpMakeOutlinerView(pWin, !bEmpty, pGivenOutlinerView); @@ -1166,7 +1166,7 @@ SdrEndTextEditKind SdrObjEditView::SdrEndTextEdit(bool bDontDeleteReally) // #111096# // Switch on evtl. TextAnimation again after TextEdit pTEObj->SetTextAnimationAllowed(true); - SetMarkHandles(); + RecreateAllMarkHandles(); } // alle OutlinerViews loeschen diff --git a/svx/source/svdraw/svdglev.cxx b/svx/source/svdraw/svdglev.cxx index 832102fc277d..e71c36c5386d 100644 --- a/svx/source/svdraw/svdglev.cxx +++ b/svx/source/svdraw/svdglev.cxx @@ -501,7 +501,7 @@ void SdrGlueEditView::MoveMarkedGluePoints(const basegfx::B2DVector& rDelta, boo ImpTransformMarkedGluePoints(ImpMove, &rDelta); EndUndo(); - SetMarkHandles(); + RecreateAllMarkHandles(); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -532,7 +532,7 @@ void SdrGlueEditView::ResizeMarkedGluePoints(const basegfx::B2DPoint& rRef, cons ImpTransformMarkedGluePoints(ImpResize, &rRef, &rScale); EndUndo(); - SetMarkHandles(); + RecreateAllMarkHandles(); } //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -570,7 +570,7 @@ void SdrGlueEditView::RotateMarkedGluePoints(const basegfx::B2DPoint& rRef, doub ImpTransformMarkedGluePoints(ImpRotate, &rRef, &fAngle, &fSin, &fCos); EndUndo(); - SetMarkHandles(); + RecreateAllMarkHandles(); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/svx/source/svdraw/svdhdl.cxx b/svx/source/svdraw/svdhdl.cxx index b3ed65362a6a..3720ad23fa03 100644 --- a/svx/source/svdraw/svdhdl.cxx +++ b/svx/source/svdraw/svdhdl.cxx @@ -376,7 +376,7 @@ void SdrHdl::Touch() // force update of graphic representation, but only when not empty. When // it is empty, the finishing call to CreateVisualizations() is not yet // done but can be expected. If not empty, attributes are changed outside - // handle creation (SdrMarkView::SetMarkHandles()), e.g. blinking or MouseOver + // handle creation (SdrMarkView::RecreateAllMarkHandles()), e.g. blinking or MouseOver if(!getOverlayObjectList().isEmpty()) { CreateB2dIAObject(); diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx index 03999b7a9f3a..5b7561cd54b5 100644 --- a/svx/source/svdraw/svdmrkv.cxx +++ b/svx/source/svdraw/svdmrkv.cxx @@ -229,14 +229,19 @@ void sortSdrObjectSelection(SdrObjectVector& rSdrObjectVector) SdrMarkView::SdrMarkView(SdrModel& rModel1, OutputDevice* pOut) : SdrSnapView(rModel1, pOut), + Timer(), mpMarkObjOverlay(0), mpMarkPointsOverlay(0), mpMarkGluePointsOverlay(0), maRef1(), maRef2(), maLastCrookCenter(), - maViewHandleList(*this), + maViewSdrHandleList(*this), maSelection(*getAsSdrView()), + mnSavePolyNum(0), + mnSavePointNum(0), + meSaveKind(HDL_MOVE), + mpSaveObj(0), maMarkedPointRange(), maMarkedGluePointRange(), mnInsPointNum(0), @@ -245,13 +250,15 @@ SdrMarkView::SdrMarkView(SdrModel& rModel1, OutputDevice* pOut) mbDesignMode(false), mbForceFrameHandles(false), mbPlusHdlAlways(false), - mbInsPolyPoint(false) + mbInsPolyPoint(false), + mbSaveOldFocus(false) { BrkMarkObj(); BrkMarkPoints(); BrkMarkGluePoints(); StartListening(rModel1); + SetTimeout(1); } SdrMarkView::~SdrMarkView() @@ -400,30 +407,6 @@ void SdrMarkView::BrkMarkObj() //////////////////////////////////////////////////////////////////////////////////////////////////// -sal_uInt32 SdrMarkView::GetHdlNum(SdrHdl* pHdl) const -{ - return GetHdlList().GetHdlNum(pHdl); -} - -SdrHdl* SdrMarkView::GetHdlByIndex(sal_uInt32 nHdlNum) const -{ - const SdrHdlList& rHdlList = GetHdlList(); - - if(nHdlNum < rHdlList.GetHdlCount()) - { - return rHdlList.GetHdlByIndex(nHdlNum); - } - - return 0; -} - -const SdrHdlList& SdrMarkView::GetHdlList() const -{ - return maViewHandleList; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - bool SdrMarkView::BegMarkPoints(const basegfx::B2DPoint& rPnt, bool bUnmark) { if(HasMarkablePoints()) @@ -637,31 +620,119 @@ bool SdrMarkView::ImpIsFrameHandles() const return bFrmHdl; } -void SdrMarkView::SetMarkHandles() +//////////////////////////////////////////////////////////////////////////////////////////////////// + +sal_uInt32 SdrMarkView::GetHdlNum(SdrHdl* pHdl) const { - // #105722# remember old focus handle values to search for it again - const SdrHdl* pSaveOldFocusHdl = maViewHandleList.GetFocusHdl(); - bool bSaveOldFocus(false); - sal_uInt32 nSavePolyNum(0); - sal_uInt32 nSavePointNum(0); - SdrHdlKind eSaveKind(HDL_MOVE); - const SdrObject* pSaveObj = 0; + return maViewSdrHandleList.GetHdlNum(pHdl); +} - if(pSaveOldFocusHdl - && dynamic_cast< const SdrPathObj* >(pSaveOldFocusHdl->GetObj()) - && (HDL_POLY == pSaveOldFocusHdl->GetKind() || HDL_BWGT == pSaveOldFocusHdl->GetKind())) +SdrHdl* SdrMarkView::GetHdlByIndex(sal_uInt32 nHdlNum) const +{ + if(nHdlNum < maViewSdrHandleList.GetHdlCount()) + { + return maViewSdrHandleList.GetHdlByIndex(nHdlNum); + } + + return 0; +} + +const SdrHdlList& SdrMarkView::GetHdlList() const +{ + if(IsActive()) { - bSaveOldFocus = true; - nSavePolyNum = pSaveOldFocusHdl->GetPolyNum(); - nSavePointNum = pSaveOldFocusHdl->GetPointNum(); - pSaveObj = pSaveOldFocusHdl->GetObj(); - eSaveKind = pSaveOldFocusHdl->GetKind(); + const_cast< SdrMarkView* >(this)->Timeout(); } - // delete/clear all handles. This will always be done - maViewHandleList.Clear(); - maViewHandleList.SetRotateShear(SDRDRAG_ROTATE == GetDragMode()); - maViewHandleList.SetDistortShear(SDRDRAG_SHEAR == GetDragMode()); + return maViewSdrHandleList; +} + +void SdrMarkView::Timeout() +{ + Stop(); + + if(maViewSdrHandleList.GetHdlCount()) + { + SaveMarkHandleFocus(maViewSdrHandleList); + maViewSdrHandleList.Clear(); + } + + if(!maViewSdrHandleList.GetHdlCount()) + { + CreateMarkHandles(maViewSdrHandleList); + RestoreMarkHandleFocus(maViewSdrHandleList); + + if(maViewSdrHandleList.GetHdlCount()) + { + // create overlay objects + maViewSdrHandleList.CreateVisualizations(); + } + } +} + +void SdrMarkView::RecreateAllMarkHandles() +{ + if(!IsActive()) + { + SetTimeout(1); + Start(); + } +} + +void SdrMarkView::SaveMarkHandleFocus(const SdrHdlList& rTarget) +{ + mbSaveOldFocus = false; + + if(rTarget.GetHdlCount()) + { + // #105722# remember old focus handle values to search for it again + const SdrHdl* pSaveOldFocusHdl = rTarget.GetFocusHdl(); + + if(pSaveOldFocusHdl + && dynamic_cast< const SdrPathObj* >(pSaveOldFocusHdl->GetObj()) + && (HDL_POLY == pSaveOldFocusHdl->GetKind() || HDL_BWGT == pSaveOldFocusHdl->GetKind())) + { + mbSaveOldFocus = true; + mnSavePolyNum = pSaveOldFocusHdl->GetPolyNum(); + mnSavePointNum = pSaveOldFocusHdl->GetPointNum(); + mpSaveObj = pSaveOldFocusHdl->GetObj(); + meSaveKind = pSaveOldFocusHdl->GetKind(); + } + } +} + +void SdrMarkView::RestoreMarkHandleFocus(SdrHdlList& rTarget) +{ + // #105722# try to restore focus handle index from remembered values + if(mbSaveOldFocus) + { + for(sal_uInt32 a(0); a < rTarget.GetHdlCount(); a++) + { + SdrHdl* pCandidate = rTarget.GetHdlByIndex(a); + + if(pCandidate->GetObj() + && pCandidate->GetObj() == mpSaveObj + && pCandidate->GetKind() == meSaveKind + && pCandidate->GetPolyNum() == mnSavePolyNum + && pCandidate->GetPointNum() == mnSavePointNum) + { + rTarget.SetFocusHdl(pCandidate); + break; + } + } + } +} + +void SdrMarkView::CreateMarkHandles(SdrHdlList& rTarget) +{ + if(rTarget.GetHdlCount()) + { + OSL_ENSURE(false, "CreateMarkHandles should only be called when there are no SdrHdl yet, delete them before recreation (!)"); + return; + } + + rTarget.SetRotateShear(SDRDRAG_ROTATE == GetDragMode()); + rTarget.SetDistortShear(SDRDRAG_SHEAR == GetDragMode()); const SdrObjectVector aSelection(getSelectedSdrObjectVectorFromSdrMarkView()); const bool bStdDrag(SDRDRAG_MOVE == GetDragMode()); bool bFrmHdl(ImpIsFrameHandles()); @@ -694,13 +765,13 @@ void SdrMarkView::SetMarkHandles() { if(bSingleTextObjMark) { - const sal_uInt32 nSiz0(maViewHandleList.GetHdlCount()); - pSingleTextObj->AddToHdlList(maViewHandleList); - const sal_uInt32 nSiz1(maViewHandleList.GetHdlCount()); + const sal_uInt32 nSiz0(rTarget.GetHdlCount()); + pSingleTextObj->AddToHdlList(rTarget); + const sal_uInt32 nSiz1(rTarget.GetHdlCount()); for(sal_uInt32 i(nSiz0); i < nSiz1; i++) { - SdrHdl* pHdl = maViewHandleList.GetHdlByIndex(i); + SdrHdl* pHdl = rTarget.GetHdlByIndex(i); pHdl->SetObjHdlNum(i - nSiz0); } } @@ -740,7 +811,7 @@ void SdrMarkView::SetMarkHandles() const double fCropBottom(rCrop.GetBottom() * aCropScaleFactor.getY()); new SdrCropViewHdl( - maViewHandleList, + rTarget, *pSingleSelected, aMatrix, pSdrGrafObj->GetGraphicObject().GetGraphic(), @@ -754,14 +825,14 @@ void SdrMarkView::SetMarkHandles() const basegfx::B2DPoint aCenter(rSnapRange.getCenter()); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum()); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY())); - new SdrCropHdl(maViewHandleList, *pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum()); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum()); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY())); + new SdrCropHdl(rTarget, *pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum()); } else @@ -771,12 +842,12 @@ void SdrMarkView::SetMarkHandles() if (bNoWidth && bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); + new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); } else if (!bStdDrag && (bNoWidth || bNoHeight)) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); - new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true); + new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); + new SdrHdl(rTarget, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true); } else { @@ -784,42 +855,42 @@ void SdrMarkView::SetMarkHandles() if(!bNoWidth && !bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); + new SdrHdl(rTarget, pSingleSelected, HDL_UPLFT, rSnapRange.getMinimum(), true); } if(!bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_UPPER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMinY()), true); } if(!bNoWidth && !bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_UPRGT, basegfx::B2DTuple(rSnapRange.getMaxX(), rSnapRange.getMinY()), true); } if(!bNoWidth) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_LEFT, basegfx::B2DTuple(rSnapRange.getMinX(), aCenter.getY()), true); } if(!bNoWidth) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_RIGHT, basegfx::B2DTuple(rSnapRange.getMaxX(), aCenter.getY()), true); } if(!bNoWidth && !bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_LWLFT, basegfx::B2DTuple(rSnapRange.getMinX(), rSnapRange.getMaxY()), true); } if(!bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()), true); + new SdrHdl(rTarget, pSingleSelected, HDL_LOWER, basegfx::B2DTuple(aCenter.getX(), rSnapRange.getMaxY()), true); } if(!bNoWidth && !bNoHeight) { - new SdrHdl(maViewHandleList, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true); + new SdrHdl(rTarget, pSingleSelected, HDL_LWRGT, rSnapRange.getMaximum(), true); } } } @@ -830,15 +901,15 @@ void SdrMarkView::SetMarkHandles() for (sal_uInt32 nMarkNum(0); nMarkNum < aSelection.size(); nMarkNum++) { SdrObject* pObj = aSelection[nMarkNum]; - const sal_uInt32 nSiz0(maViewHandleList.GetHdlCount()); - pObj->AddToHdlList(maViewHandleList); - const sal_uInt32 nSiz1(maViewHandleList.GetHdlCount()); + const sal_uInt32 nSiz0(rTarget.GetHdlCount()); + pObj->AddToHdlList(rTarget); + const sal_uInt32 nSiz1(rTarget.GetHdlCount()); const bool bPoly(pObj->IsPolygonObject()); const sdr::selection::Indices aMarkedPoints(bPoly ? getSelectedPointsForSelectedSdrObject(*pObj) : sdr::selection::Indices()); for(sal_uInt32 i(nSiz0); i < nSiz1; i++) { - SdrHdl* pHdl = maViewHandleList.GetHdlByIndex(i); + SdrHdl* pHdl = rTarget.GetHdlByIndex(i); pHdl->SetObjHdlNum(i - nSiz0); if (bPoly) @@ -853,7 +924,7 @@ void SdrMarkView::SetMarkHandles() for(sal_uInt32 nPlusNum(0); nPlusNum < nPlusAnz; nPlusNum++) { - pObj->GetPlusHdl(maViewHandleList, *pObj, *pHdl, nPlusNum); + pObj->GetPlusHdl(rTarget, *pObj, *pHdl, nPlusNum); } } } @@ -885,7 +956,7 @@ void SdrMarkView::SetMarkHandles() { const SdrGluePoint& rGP=(*pGPL)[nNumGP]; basegfx::B2DPoint aPos(rGP.GetAbsolutePos(aObjSnapRange)); - SdrHdl* pGlueHdl = new SdrHdl(maViewHandleList, pObj, HDL_GLUE, aPos); + SdrHdl* pGlueHdl = new SdrHdl(rTarget, pObj, HDL_GLUE, aPos); pGlueHdl->SetObjHdlNum(nId); } } @@ -894,37 +965,17 @@ void SdrMarkView::SetMarkHandles() } // Drehpunkt/Spiegelachse - AddDragModeHdl(GetDragMode()); + AddDragModeHdl(rTarget, GetDragMode()); // add custom handles (used by other apps, e.g. AnchorPos) - AddCustomHdl(maViewHandleList); + AddCustomHdl(rTarget); // sort handles - maViewHandleList.Sort(); - - // #105722# try to restore focus handle index from remembered values - if(bSaveOldFocus) - { - for(sal_uInt32 a(0); a < maViewHandleList.GetHdlCount(); a++) - { - SdrHdl* pCandidate = maViewHandleList.GetHdlByIndex(a); - - if(pCandidate->GetObj() - && pCandidate->GetObj() == pSaveObj - && pCandidate->GetKind() == eSaveKind - && pCandidate->GetPolyNum() == nSavePolyNum - && pCandidate->GetPointNum() == nSavePointNum) - { - maViewHandleList.SetFocusHdl(pCandidate); - break; - } - } - } - - // create overlay objects - maViewHandleList.CreateVisualizations(); + rTarget.Sort(); } +//////////////////////////////////////////////////////////////////////////////////////////////////// + void SdrMarkView::AddCustomHdl(SdrHdlList& /*rTarget*/) { // add custom handles (used by other apps, e.g. AnchorPos) @@ -945,22 +996,22 @@ void SdrMarkView::SetDragMode(SdrDragMode eMode) } } -void SdrMarkView::AddDragModeHdl(SdrDragMode eMode) +void SdrMarkView::AddDragModeHdl(SdrHdlList& rTarget, SdrDragMode eMode) { switch(eMode) { case SDRDRAG_ROTATE: { // add rotation center - new SdrHdl(maViewHandleList, 0, HDL_REF1, GetRef1()); + new SdrHdl(rTarget, 0, HDL_REF1, GetRef1()); break; } case SDRDRAG_MIRROR: { // add mirror axis - SdrHdlLine* pHdl1 = new SdrHdlLine(maViewHandleList, HDL_MIRX); - SdrHdl* pHdl2 = new SdrHdl(maViewHandleList, 0, HDL_REF1, GetRef1()); - SdrHdl* pHdl3 = new SdrHdl(maViewHandleList, 0, HDL_REF2, GetRef2()); + SdrHdlLine* pHdl1 = new SdrHdlLine(rTarget, HDL_MIRX); + SdrHdl* pHdl2 = new SdrHdl(rTarget, 0, HDL_REF1, GetRef1()); + SdrHdl* pHdl3 = new SdrHdl(rTarget, 0, HDL_REF2, GetRef2()); pHdl1->SetHandles(pHdl2, pHdl3); pHdl1->SetObjHdlNum(1); @@ -1012,9 +1063,9 @@ void SdrMarkView::AddDragModeHdl(SdrDragMode eMode) aGradTransformer.GradToVec(aGradTransGradient, aGradTransVector, pSingleSelected); // build handles - SdrHdlColor* pColHdl1 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, SDR_HANDLE_COLOR_SIZE_NORMAL, true); - SdrHdlColor* pColHdl2 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, SDR_HANDLE_COLOR_SIZE_NORMAL, true); - SdrHdlGradient* pGradHdl = new SdrHdlGradient(maViewHandleList, *pSingleSelected, *pColHdl1, *pColHdl2, false); + SdrHdlColor* pColHdl1 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, SDR_HANDLE_COLOR_SIZE_NORMAL, true); + SdrHdlColor* pColHdl2 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, SDR_HANDLE_COLOR_SIZE_NORMAL, true); + SdrHdlGradient* pGradHdl = new SdrHdlGradient(rTarget, *pSingleSelected, *pColHdl1, *pColHdl2, false); // link them pColHdl1->SetColorChangeHdl(LINK(pGradHdl, SdrHdlGradient, ColorChangeHdl)); @@ -1044,9 +1095,9 @@ void SdrMarkView::AddDragModeHdl(SdrDragMode eMode) aGradTransformer.GradToVec(aGradTransGradient, aGradTransVector, pSingleSelected); // build handles - SdrHdlColor* pColHdl1 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, aHdlSize, false); - SdrHdlColor* pColHdl2 = new SdrHdlColor(maViewHandleList, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, aHdlSize, false); - SdrHdlGradient* pGradHdl = new SdrHdlGradient(maViewHandleList, *pSingleSelected, *pColHdl1, *pColHdl2, true); + SdrHdlColor* pColHdl1 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionA, aGradTransVector.aCol1, aHdlSize, false); + SdrHdlColor* pColHdl2 = new SdrHdlColor(rTarget, *pSingleSelected, aGradTransVector.maPositionB, aGradTransVector.aCol2, aHdlSize, false); + SdrHdlGradient* pGradHdl = new SdrHdlGradient(rTarget, *pSingleSelected, *pColHdl1, *pColHdl2, true); // link them pColHdl1->SetColorChangeHdl(LINK(pGradHdl, SdrHdlGradient, ColorChangeHdl)); @@ -1229,7 +1280,7 @@ void SdrMarkView::ForceRefToMarked() } // force recreation of SdrHdls TTTT needed? - SetMarkHandles(); + RecreateAllMarkHandles(); } void SdrMarkView::SetRef1(const basegfx::B2DPoint& rPt) @@ -1271,7 +1322,7 @@ void SdrMarkView::SetFrameHandles(bool bOn) if(bNew != bOld) { // force recreation of SdrHdls - SetMarkHandles(); + RecreateAllMarkHandles(); } } } @@ -1628,20 +1679,20 @@ bool SdrMarkView::IsObjMarked(const SdrObject& rObj) const sal_uInt16 SdrMarkView::GetMarkHdlSizePixel() const { - return maViewHandleList.GetHdlSize()*2+1; + return maViewSdrHandleList.GetHdlSize()*2+1; } bool SdrMarkView::IsSolidMarkHdl() const { - return maViewHandleList.IsFineHdl(); + return maViewSdrHandleList.IsFineHdl(); } void SdrMarkView::SetSolidMarkHdl(bool bOn) { - if(bOn != maViewHandleList.IsFineHdl()) + if(bOn != maViewSdrHandleList.IsFineHdl()) { - maViewHandleList.SetFineHdl(bOn); - SetMarkHandles(); + maViewSdrHandleList.SetFineHdl(bOn); + RecreateAllMarkHandles(); } } @@ -1649,10 +1700,10 @@ void SdrMarkView::SetMarkHdlSizePixel(sal_uInt16 nSiz) { if (nSiz<3) nSiz=3; nSiz/=2; - if (nSiz!=maViewHandleList.GetHdlSize()) + if (nSiz!=maViewSdrHandleList.GetHdlSize()) { - maViewHandleList.SetHdlSize(nSiz); - SetMarkHandles(); + maViewSdrHandleList.SetHdlSize(nSiz); + RecreateAllMarkHandles(); } } @@ -2176,18 +2227,18 @@ void SdrMarkView::handleSelectionChange() ImpSetGlueVisible4(0 != dynamic_cast< SdrEdgeObj* >(getSelectedIfSingle())); // visualize new selection - SetMarkHandles(); + RecreateAllMarkHandles(); } void SdrMarkView::SetMoveOutside(bool bOn) { - maViewHandleList.SetMoveOutside(bOn); - SetMarkHandles(); + maViewSdrHandleList.SetMoveOutside(bOn); + RecreateAllMarkHandles(); } bool SdrMarkView::IsMoveOutside() const { - return maViewHandleList.IsMoveOutside(); + return maViewSdrHandleList.IsMoveOutside(); } void SdrMarkView::SetDesignMode( bool _bOn ) diff --git a/svx/source/svdraw/svdmrkv1.cxx b/svx/source/svdraw/svdmrkv1.cxx index cd0e7a902186..bcc534c26a31 100644 --- a/svx/source/svdraw/svdmrkv1.cxx +++ b/svx/source/svdraw/svdmrkv1.cxx @@ -120,47 +120,91 @@ bool SdrMarkView::IsPointMarkable(const SdrHdl& rHdl) const bool SdrMarkView::MarkPointHelper(SdrHdl* pHdl, bool bUnmark) { - return ImpMarkPoint(pHdl, bUnmark); -} + SdrHdlContainerType aHdl; -bool SdrMarkView::ImpMarkPoint(SdrHdl* pHdl, bool bUnmark) -{ - if(!pHdl || pHdl->IsPlusHdl() || HDL_GLUE == pHdl->GetKind()) + if(pHdl) { - return false; + aHdl.push_back(pHdl); } - if(pHdl->IsSelected() != bUnmark) - { - return false; - } + return ImpMarkPoints(aHdl, bUnmark); +} - const SdrObject* pObj = pHdl->GetObj(); +bool SdrMarkView::ImpMarkPoints(const SdrHdlContainerType& rHdls, bool bUnmark) +{ + sdr::selection::Indices aMarkedPoints; + bool bRetval(true); + bool bChanged(false); + const SdrObject* pLastObj = 0; - if(!pObj || !pObj->IsPolygonObject()) + for(sal_uInt32 a(0); a < rHdls.size(); a++) { - return false; - } + const SdrHdl* pCandidate = rHdls[a]; - sdr::selection::Indices aMarkedPoints(getSelectedPointsForSelectedSdrObject(*pObj)); - const sal_uInt32 nHdlNum(pHdl->GetObjHdlNum()); + if(!pCandidate) + { + OSL_ENSURE(false, "OOps, null-ptr in SdhHdl list (!)"); + continue; + } - if (!bUnmark) - { - aMarkedPoints.insert(nHdlNum); - } - else - { - if(!aMarkedPoints.erase(nHdlNum)) + if(!pCandidate || pCandidate->IsPlusHdl() || HDL_GLUE == pCandidate->GetKind()) + { + continue; + } + + if(pCandidate->IsSelected() != bUnmark) + { + continue; + } + + const SdrObject* pObj = pCandidate->GetObj(); + + if(!pObj || !pObj->IsPolygonObject()) + { + continue; + } + + if(!pLastObj || pLastObj != pObj) { - return false; + if(pLastObj && bChanged) + { + setSelectedPointsForSelectedSdrObject(*pLastObj, aMarkedPoints); + } + + bChanged = false; + pLastObj = pObj; + aMarkedPoints = getSelectedPointsForSelectedSdrObject(*pObj); } + + const sal_uInt32 nHdlNum(pCandidate->GetObjHdlNum()); + + if (!bUnmark) + { + aMarkedPoints.insert(nHdlNum); + bChanged = true; + } + else + { + if(aMarkedPoints.erase(nHdlNum)) + { + bChanged = true; + } + else + { + bRetval = false; + } + } + + // TTTT: should not be needed, setSelectedPointsForSelectedSdrObject already triggers selection change and starts recreation + // pCandidate->SetSelected(!bUnmark); } - setSelectedPointsForSelectedSdrObject(*pObj, aMarkedPoints); - // pHdl->SetSelected(!bUnmark); TTTT: not needed, setSelectedPointsForSelectedSdrObject already triggers selection change and starts recreation + if(pLastObj && bChanged) + { + setSelectedPointsForSelectedSdrObject(*pLastObj, aMarkedPoints); + } - return true; + return bRetval; } @@ -168,6 +212,7 @@ bool SdrMarkView::MarkPoint(SdrHdl& rHdl, bool bUnmark) { if(!(&rHdl)) { + OSL_ENSURE(false, "OOps, a null-pointer to a SdrHdl as reference was handed over (!)"); return false; } @@ -179,7 +224,11 @@ bool SdrMarkView::MarkPoint(SdrHdl& rHdl, bool bUnmark) if(isSdrObjectSelected(*pObj)) { - if(ImpMarkPoint(&rHdl, bUnmark)) + SdrHdlContainerType aHdl; + + aHdl.push_back(&rHdl); + + if(ImpMarkPoints(aHdl, bUnmark)) { bRet = true; } @@ -194,22 +243,26 @@ void SdrMarkView::MarkPoints(const basegfx::B2DRange* pRange, bool bUnmark) const SdrObject* pObj0 = 0; const SdrHdlList& rHdlList = GetHdlList(); const sal_uInt32 nHdlAnz(rHdlList.GetHdlCount()); - - maViewHandleList.Sort(); + SdrHdlContainerType aHdl; for(sal_uInt32 nHdlNum(nHdlAnz); nHdlNum > 0;) { nHdlNum--; SdrHdl* pHdl = rHdlList.GetHdlByIndex(nHdlNum); - if(IsPointMarkable(*pHdl) && pHdl->IsSelected() == bUnmark) + if(pHdl && IsPointMarkable(*pHdl) && pHdl->IsSelected() == bUnmark) { if(!pRange || pRange->isInside(pHdl->getPosition())) { - ImpMarkPoint(pHdl, bUnmark); + aHdl.push_back(pHdl); } } } + + if(aHdl.size()) + { + ImpMarkPoints(aHdl, bUnmark); + } } const basegfx::B2DRange& SdrMarkView::getMarkedPointRange() const @@ -227,7 +280,7 @@ void SdrMarkView::SetPlusHandlesAlwaysVisible(bool bOn) if(bOn != IsPlusHandlesAlwaysVisible()) { mbPlusHdlAlways = bOn; - SetMarkHandles(); + RecreateAllMarkHandles(); } } diff --git a/svx/source/svdraw/svdpagv.cxx b/svx/source/svdraw/svdpagv.cxx index 63c905ba6047..43c3267c2153 100644 --- a/svx/source/svdraw/svdpagv.cxx +++ b/svx/source/svdraw/svdpagv.cxx @@ -680,7 +680,7 @@ void SdrPageView::DrawPageViewGrid(OutputDevice& rOut, const basegfx::B2DRange& void SdrPageView::AdjHdl() { - GetView().SetMarkHandles(); + GetView().RecreateAllMarkHandles(); } void SdrPageView::SetLayer(const XubString& rName, SetOfByte& rBS, bool bJa) @@ -959,7 +959,7 @@ bool SdrPageView::EnterGroup(SdrObject* pObj) } // build new handles - GetView().SetMarkHandles(); + GetView().RecreateAllMarkHandles(); // invalidate only when view wants to visualize group entering if(GetView().DoVisualizeEnteredGroup()) @@ -1013,7 +1013,7 @@ void SdrPageView::LeaveOneGroup() } } - GetView().SetMarkHandles(); + GetView().RecreateAllMarkHandles(); // invalidate only when view wants to visualize group entering if(GetView().DoVisualizeEnteredGroup()) @@ -1061,7 +1061,7 @@ void SdrPageView::LeaveAllGroup() } } - GetView().SetMarkHandles(); + GetView().RecreateAllMarkHandles(); // invalidate only when view wants to visualize group entering if(GetView().DoVisualizeEnteredGroup()) diff --git a/svx/source/svdraw/svdpoev.cxx b/svx/source/svdraw/svdpoev.cxx index c6d21f53d69e..fae45677f190 100644 --- a/svx/source/svdraw/svdpoev.cxx +++ b/svx/source/svdraw/svdpoev.cxx @@ -757,7 +757,7 @@ void SdrPolyEditView::TransformMarkedPoints( EndUndo(); } - SetMarkHandles(); + RecreateAllMarkHandles(); } } diff --git a/svx/source/toolbars/fontworkbar.cxx b/svx/source/toolbars/fontworkbar.cxx index 6a1614339ebb..839fefb86292 100644 --- a/svx/source/toolbars/fontworkbar.cxx +++ b/svx/source/toolbars/fontworkbar.cxx @@ -540,7 +540,7 @@ void FontworkBar::execute( SdrView* pSdrView, SfxRequest& rReq, SfxBindings& rBi if( bUndo ) pSdrView->EndUndo(); - pSdrView->SetMarkHandles(); + pSdrView->RecreateAllMarkHandles(); rBindings.Invalidate( SID_FONTWORK_SHAPE_TYPE ); } } diff --git a/svx/source/unodraw/unopage.cxx b/svx/source/unodraw/unopage.cxx index e66e5f085a60..03e4801f5be2 100644 --- a/svx/source/unodraw/unopage.cxx +++ b/svx/source/unodraw/unopage.cxx @@ -495,7 +495,7 @@ Reference< drawing::XShapeGroup > SAL_CALL SvxDrawPage::group( const Reference< mpView->ShowSdrPage( *mpPage ); _SelectObjectsInView( xShapes ); mpView->GroupMarked(); - mpView->SetMarkHandles(); + mpView->RecreateAllMarkHandles(); SdrObject* pObj = mpView->getSelectedIfSingle(); if( pObj ) diff --git a/sw/inc/dcontact.hxx b/sw/inc/dcontact.hxx index 10c2458c0e6b..2347dd48766d 100644 --- a/sw/inc/dcontact.hxx +++ b/sw/inc/dcontact.hxx @@ -329,7 +329,7 @@ public: // All overloaded methods which need to use the offset virtual ::basegfx::B2DPolyPolygon TakeXorPoly() const; virtual void AddToHdlList(SdrHdlList& rHdlList) const; - virtual void GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const; + virtual void GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const; virtual basegfx::B2DPoint GetSnapPoint(sal_uInt32 i) const; virtual basegfx::B2DPoint GetObjectPoint(sal_uInt32 i) const; virtual void SetObjectPoint(const basegfx::B2DPoint& rPnt, sal_uInt32 i); diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx index 5c0931969d75..c9897b43892d 100644 --- a/sw/source/core/draw/dcontact.cxx +++ b/sw/source/core/draw/dcontact.cxx @@ -2585,7 +2585,7 @@ basegfx::B2DPolyPolygon SwDrawVirtObj::TakeXorPoly() const return aRetval; } -void SwDrawVirtObj::GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const +void SwDrawVirtObj::GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const { rRefObj.GetPlusHdl(rHdlList, rSdrObject, rHdl, nPlNum); OSL_ENSURE(rHdlList.GetHdlCount(), "No PlusHdl added (!)"); diff --git a/sw/source/core/draw/dflyobj.cxx b/sw/source/core/draw/dflyobj.cxx index 07ccd1df04fc..ffa46a8efb68 100644 --- a/sw/source/core/draw/dflyobj.cxx +++ b/sw/source/core/draw/dflyobj.cxx @@ -971,7 +971,7 @@ sal_uInt32 SwVirtFlyDrawObj::GetPlusHdlCount(const SdrHdl& rHdl) const return rRefObj.GetPlusHdlCount(rHdl); } -void SwVirtFlyDrawObj::GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const +void SwVirtFlyDrawObj::GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const { rRefObj.GetPlusHdl(rHdlList, rSdrObject, rHdl, nPlNum); OSL_ENSURE(rHdlList.GetHdlCount(), "No PlusHdl added (!)"); diff --git a/sw/source/core/inc/dflyobj.hxx b/sw/source/core/inc/dflyobj.hxx index 9a662b6eb75b..a327f1c86224 100644 --- a/sw/source/core/inc/dflyobj.hxx +++ b/sw/source/core/inc/dflyobj.hxx @@ -149,7 +149,7 @@ public: virtual void TakeObjNameSingul(String& rName) const; virtual void TakeObjNamePlural(String& rName) const; virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const; - virtual void GetPlusHdl(SdrHdlList& rHdlList, SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const; + virtual void GetPlusHdl(SdrHdlList& rHdlList, const SdrObject& rSdrObject, const SdrHdl& rHdl, sal_uInt32 nPlNum) const; virtual void AddToHdlList(SdrHdlList& rHdlList) const; virtual bool hasSpecialDrag() const; virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; diff --git a/sw/source/filter/ww8/attributeoutputbase.hxx b/sw/source/filter/ww8/attributeoutputbase.hxx index 72e6f37aefde..a644371385ce 100644 --- a/sw/source/filter/ww8/attributeoutputbase.hxx +++ b/sw/source/filter/ww8/attributeoutputbase.hxx @@ -320,8 +320,8 @@ public: sal_Int16 nIndentAt, sal_Int16 nFirstLineIndex, sal_Int16 nListTabPos, - const String &rNumberingString , - const SvxBrushItem* pBrush = 0) = 0;//For i120928,to export graphic of bullet + const String &rNumberingString, + const SvxBrushItem* pBrush = 0) = 0;//For i120928,to export graphic of bullet protected: diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 1c29b32c12f9..b32be2097d21 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2086,7 +2086,8 @@ void DocxAttributeOutput::NumberingLevel( sal_uInt8 nLevel, sal_Int16 nIndentAt, sal_Int16 nFirstLineIndex, sal_Int16 /*nListTabPos*/, - const String &rNumberingString ) + const String &rNumberingString, + const SvxBrushItem* /*pBrush*/); //For i120928,to export graphic of bullet { m_pSerializer->startElementNS( XML_w, XML_lvl, FSNS( XML_w, XML_ilvl ), OString::valueOf( sal_Int32( nLevel ) ).getStr(), diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 05d6879541eb..7ec7c1e93f1e 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -259,7 +259,8 @@ public: sal_Int16 nIndentAt, sal_Int16 nFirstLineIndex, sal_Int16 nListTabPos, - const String &rNumberingString ); + const String &rNumberingString, + const SvxBrushItem* pBrush = 0) = 0;//For i120928,to export graphic of bullet void WriteField_Impl( const SwField* pFld, ww::eField eType, const String& rFldCmd, sal_uInt8 nMode ); diff --git a/sw/source/filter/ww8/rtfsdrexport.cxx b/sw/source/filter/ww8/rtfsdrexport.cxx index b756bae5271b..3617e4cd0f4e 100644 --- a/sw/source/filter/ww8/rtfsdrexport.cxx +++ b/sw/source/filter/ww8/rtfsdrexport.cxx @@ -168,7 +168,9 @@ inline sal_Int32 impl_GetPointComponent( const sal_uInt8* &pVal, sal_uInt16 nPoi return nRet; } -void RtfSdrExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect ) +void RtfSdrExport::Commit( + EscherPropertyContainer& rProps, + const basegfx::B2DRange& rObjectRange) { OSL_TRACE("%s", OSL_THIS_FUNC); @@ -176,9 +178,9 @@ void RtfSdrExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRe return; if ( m_nShapeType == ESCHER_ShpInst_Line ) - AddLineDimensions( rRect ); + AddLineDimensions(rObjectRange); else - AddRectangleDimensions( *m_pShapeStyle, rRect ); + AddRectangleDimensions(*m_pShapeStyle, rObjectRange); // properties const EscherProperties &rOpts = rProps.GetOpts(); @@ -393,7 +395,7 @@ void RtfSdrExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRe } } -void RtfSdrExport::AddLineDimensions( const Rectangle& rRectangle ) +void RtfSdrExport::AddLineDimensions(const basegfx::B2DRange& rObjectRange) { OSL_TRACE("%s", OSL_THIS_FUNC); @@ -415,23 +417,23 @@ void RtfSdrExport::AddLineDimensions( const Rectangle& rRectangle ) } // the actual dimensions - m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPLEFT).append(rRectangle.Left()); - m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPTOP).append(rRectangle.Top()); - m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPRIGHT).append(rRectangle.Right()); - m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPBOTTOM).append(rRectangle.Bottom()); + m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPLEFT).append(basegfx::fround(rObjectRange.getMinX())); + m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPTOP).append(basegfx::fround(rObjectRange.getMinY())); + m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPRIGHT).append(basegfx::fround(rObjectRange.getMaxX())); + m_pShapeStyle->append(OOO_STRING_SVTOOLS_RTF_SHPBOTTOM).append(basegfx::fround(rObjectRange.getMaxY())); } -void RtfSdrExport::AddRectangleDimensions( rtl::OStringBuffer& rBuffer, const Rectangle& rRectangle ) +void RtfSdrExport::AddRectangleDimensions(rtl::OStringBuffer& rBuffer, const basegfx::B2DRange& rObjectRange) { OSL_TRACE("%s", OSL_THIS_FUNC); // We get the position relative to (the current?) character m_aShapeProps.insert(std::pair<OString,OString>(OString("posrelh"), OString::valueOf(sal_Int32(3)))); - rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPLEFT).append(rRectangle.Left()); - rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPTOP).append(rRectangle.Top()); - rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPRIGHT).append(rRectangle.Right()); - rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPBOTTOM).append(rRectangle.Bottom()); + rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPLEFT).append(basegfx::fround(rObjectRange.getMinX())); + rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPTOP).append(basegfx::fround(rObjectRange.getMinY())); + rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPRIGHT).append(basegfx::fround(rObjectRange.getMaxX())); + rBuffer.append(OOO_STRING_SVTOOLS_RTF_SHPBOTTOM).append(basegfx::fround(rObjectRange.getMaxY())); } void RtfSdrExport::AddShapeAttribute( sal_Int32 /*nAttribute*/, const rtl::OString& /*rValue*/ ) diff --git a/sw/source/filter/ww8/rtfsdrexport.hxx b/sw/source/filter/ww8/rtfsdrexport.hxx index e4c058648a86..9454da6fcaf8 100644 --- a/sw/source/filter/ww8/rtfsdrexport.hxx +++ b/sw/source/filter/ww8/rtfsdrexport.hxx @@ -64,6 +64,10 @@ public: /// Call this when you need to export the object as Sdr in RTF. sal_uInt32 AddSdrObject( const SdrObject& rObj ); + virtual void Commit( + EscherPropertyContainer& rProps, + const basegfx::B2DRange& rObjectRange); + protected: /// Add an attribute to the generated shape element. /// @@ -83,8 +87,6 @@ protected: using EscherEx::EndShape; virtual void EndShape( sal_Int32 nShapeElement ); - virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect ); - private: virtual void OpenContainer( sal_uInt16 nEscherContainer, int nRecInstance = 0 ); @@ -98,10 +100,10 @@ private: private: /// Add starting and ending point of a line to the m_pShapeAttrList. - void AddLineDimensions( const Rectangle& rRectangle ); + void AddLineDimensions(const basegfx::B2DRange& rObjectRange); /// Add position and size to the OStringBuffer. - void AddRectangleDimensions( rtl::OStringBuffer& rBuffer, const Rectangle& rRectangle ); + void AddRectangleDimensions(rtl::OStringBuffer& rBuffer, const basegfx::B2DRange& rObjectRange); void WriteOutliner(const OutlinerParaObject& rParaObj); }; diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx index 6af14a6291fc..7302ef07def6 100644 --- a/sw/source/filter/ww8/wrtw8num.cxx +++ b/sw/source/filter/ww8/wrtw8num.cxx @@ -215,8 +215,7 @@ void WW8AttributeOutput::NumberingLevel( sal_uInt8 /*nLevel*/, sal_Int16 nFirstLineIndex, sal_Int16 nListTabPos, const String &rNumberingString, - const SvxBrushItem* pBrush //For i120928,to transfer graphic of bullet - ) + const SvxBrushItem* pBrush) //For i120928,to transfer graphic of bullet { // Start value SwWW8Writer::WriteLong( *m_rWW8Export.pTableStrm, nStart ); |