summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2013-09-13 11:52:57 +0000
committerArmin Le Grand <alg@apache.org>2013-09-13 11:52:57 +0000
commitdbd1dea45083d76235568f6b93e86a8ac15f2b97 (patch)
tree8d5141007b4db1400aa3ad8f42fdb2b0b5b3b83f
parentff6a9f07d740c9a15c4d498db4cec6b99b4c14b4 (diff)
selection rework, fixes for virtual function warnings
-rw-r--r--chart2/source/controller/drawinglayer/DrawViewWrapper.cxx11
-rw-r--r--chart2/source/controller/inc/DrawViewWrapper.hxx7
-rw-r--r--chart2/source/controller/main/SelectionHelper.cxx3
-rw-r--r--reportdesign/inc/RptModel.hxx4
-rw-r--r--reportdesign/source/core/inc/ReportUndoFactory.hxx4
-rw-r--r--reportdesign/source/core/sdr/ReportUndoFactory.cxx4
-rw-r--r--reportdesign/source/core/sdr/RptModel.cxx4
-rw-r--r--reportdesign/source/ui/report/SectionView.cxx16
-rw-r--r--reportdesign/source/ui/report/ViewsWindow.cxx4
-rw-r--r--sc/source/ui/view/tabview5.cxx2
-rw-r--r--sc/source/ui/view/tabvwshb.cxx3
-rw-r--r--sd/source/ui/animations/CustomAnimationPane.cxx2
-rw-r--r--sd/source/ui/animations/motionpathtag.cxx14
-rw-r--r--sd/source/ui/annotations/annotationmanager.cxx2
-rw-r--r--sd/source/ui/annotations/annotationtag.cxx2
-rw-r--r--sd/source/ui/func/fucopy.cxx2
-rw-r--r--sd/source/ui/func/fusel.cxx18
-rw-r--r--sd/source/ui/func/futext.cxx2
-rw-r--r--sd/source/ui/func/smarttag.cxx4
-rw-r--r--sd/source/ui/table/tableobjectbar.cxx2
-rw-r--r--sd/source/ui/unoidl/unopage.cxx4
-rw-r--r--sd/source/ui/view/drviews1.cxx2
-rw-r--r--sd/source/ui/view/sdwindow.cxx2
-rw-r--r--sd/source/ui/view/viewoverlaymanager.cxx2
-rw-r--r--svx/inc/svx/sdrselection.hxx13
-rw-r--r--svx/inc/svx/svddrgv.hxx3
-rw-r--r--svx/inc/svx/svdhdl.hxx3
-rw-r--r--svx/inc/svx/svdmrkv.hxx38
-rw-r--r--svx/source/engine3d/view3d.cxx2
-rw-r--r--svx/source/svdraw/sdrselection.cxx55
-rw-r--r--svx/source/svdraw/svddrgv.cxx11
-rw-r--r--svx/source/svdraw/svdedxv.cxx4
-rw-r--r--svx/source/svdraw/svdglev.cxx6
-rw-r--r--svx/source/svdraw/svdhdl.cxx2
-rw-r--r--svx/source/svdraw/svdmrkv.cxx303
-rw-r--r--svx/source/svdraw/svdmrkv1.cxx119
-rw-r--r--svx/source/svdraw/svdpagv.cxx8
-rw-r--r--svx/source/svdraw/svdpoev.cxx2
-rw-r--r--svx/source/toolbars/fontworkbar.cxx2
-rw-r--r--svx/source/unodraw/unopage.cxx2
-rw-r--r--sw/inc/dcontact.hxx2
-rw-r--r--sw/source/core/draw/dcontact.cxx2
-rw-r--r--sw/source/core/draw/dflyobj.cxx2
-rw-r--r--sw/source/core/inc/dflyobj.hxx2
-rw-r--r--sw/source/filter/ww8/attributeoutputbase.hxx4
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx3
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.hxx3
-rw-r--r--sw/source/filter/ww8/rtfsdrexport.cxx28
-rw-r--r--sw/source/filter/ww8/rtfsdrexport.hxx10
-rw-r--r--sw/source/filter/ww8/wrtw8num.cxx3
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 );