xref: /aoo4110/main/sc/source/ui/view/drawview.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski // INCLUDE ---------------------------------------------------------------
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/EmbedStates.hpp>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <svx/svditer.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/svdograf.hxx>
33*b1cdbd2cSJim Jagielski #include <svx/svdomedia.hxx>
34*b1cdbd2cSJim Jagielski #include <svx/svdogrp.hxx>
35*b1cdbd2cSJim Jagielski #include <svx/svdoole2.hxx>
36*b1cdbd2cSJim Jagielski #include <svx/svdouno.hxx>
37*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx>
39*b1cdbd2cSJim Jagielski #include <svx/svdocapt.hxx>
40*b1cdbd2cSJim Jagielski #include <editeng/outlobj.hxx>
41*b1cdbd2cSJim Jagielski #include <editeng/writingmodeitem.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/sdrpaintwindow.hxx>
43*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
44*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/sdrundomanager.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/xbtmpit.hxx>
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski #include "drawview.hxx"
49*b1cdbd2cSJim Jagielski #include "global.hxx"
50*b1cdbd2cSJim Jagielski #include "viewdata.hxx"
51*b1cdbd2cSJim Jagielski #include "document.hxx"
52*b1cdbd2cSJim Jagielski #include "drawutil.hxx"
53*b1cdbd2cSJim Jagielski #include "futext.hxx"
54*b1cdbd2cSJim Jagielski #include "globstr.hrc"
55*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
56*b1cdbd2cSJim Jagielski #include "client.hxx"
57*b1cdbd2cSJim Jagielski #include "scmod.hxx"
58*b1cdbd2cSJim Jagielski #include "drwlayer.hxx"
59*b1cdbd2cSJim Jagielski #include "docsh.hxx"
60*b1cdbd2cSJim Jagielski #include "viewuno.hxx"
61*b1cdbd2cSJim Jagielski #include "userdat.hxx"
62*b1cdbd2cSJim Jagielski #include "postit.hxx"
63*b1cdbd2cSJim Jagielski #include "undocell.hxx"
64*b1cdbd2cSJim Jagielski #include "document.hxx"
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski #include "sc.hrc"
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski using namespace com::sun::star;
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski #define SC_HANDLESIZE_BIG		9
73*b1cdbd2cSJim Jagielski #define SC_HANDLESIZE_SMALL		7
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
78*b1cdbd2cSJim Jagielski #pragma optimize ( "", off )
79*b1cdbd2cSJim Jagielski #endif
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski 
Construct()82*b1cdbd2cSJim Jagielski void ScDrawView::Construct()
83*b1cdbd2cSJim Jagielski {
84*b1cdbd2cSJim Jagielski 	EnableExtendedKeyInputDispatcher(sal_False);
85*b1cdbd2cSJim Jagielski 	EnableExtendedMouseEventDispatcher(sal_False);
86*b1cdbd2cSJim Jagielski 	EnableExtendedCommandEventDispatcher(sal_False);
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski 	SetFrameDragSingles(sal_True);
89*b1cdbd2cSJim Jagielski //	SetSolidMarkHdl(sal_True);				// einstellbar -> UpdateUserViewOptions
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski 	SetMinMoveDistancePixel( 2 );
92*b1cdbd2cSJim Jagielski 	SetHitTolerancePixel( 2 );
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 	if (pViewData)
95*b1cdbd2cSJim Jagielski 	{
96*b1cdbd2cSJim Jagielski 		SCTAB nViewTab = pViewData->GetTabNo();
97*b1cdbd2cSJim Jagielski 		ShowSdrPage(GetModel()->GetPage(nViewTab));
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 		sal_Bool bEx = pViewData->GetViewShell()->IsDrawSelMode();
100*b1cdbd2cSJim Jagielski 		sal_Bool bProt = pDoc->IsTabProtected( nViewTab ) ||
101*b1cdbd2cSJim Jagielski 					 pViewData->GetSfxDocShell()->IsReadOnly();
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 		SdrLayer* pLayer;
104*b1cdbd2cSJim Jagielski 		SdrLayerAdmin& rAdmin = GetModel()->GetLayerAdmin();
105*b1cdbd2cSJim Jagielski 		pLayer = rAdmin.GetLayerPerID(SC_LAYER_BACK);
106*b1cdbd2cSJim Jagielski 		if (pLayer)
107*b1cdbd2cSJim Jagielski 			SetLayerLocked( pLayer->GetName(), bProt || !bEx );
108*b1cdbd2cSJim Jagielski 		pLayer = rAdmin.GetLayerPerID(SC_LAYER_INTERN);
109*b1cdbd2cSJim Jagielski 		if (pLayer)
110*b1cdbd2cSJim Jagielski 			SetLayerLocked( pLayer->GetName(), sal_True );
111*b1cdbd2cSJim Jagielski 		pLayer = rAdmin.GetLayerPerID(SC_LAYER_FRONT);
112*b1cdbd2cSJim Jagielski 		if (pLayer)
113*b1cdbd2cSJim Jagielski 		{
114*b1cdbd2cSJim Jagielski 			SetLayerLocked( pLayer->GetName(), bProt );
115*b1cdbd2cSJim Jagielski 			SetActiveLayer( pLayer->GetName() );		// FRONT als aktiven Layer setzen
116*b1cdbd2cSJim Jagielski 		}
117*b1cdbd2cSJim Jagielski 		pLayer = rAdmin.GetLayerPerID(SC_LAYER_CONTROLS);
118*b1cdbd2cSJim Jagielski 		if (pLayer)
119*b1cdbd2cSJim Jagielski 			SetLayerLocked( pLayer->GetName(), bProt );
120*b1cdbd2cSJim Jagielski         pLayer = rAdmin.GetLayerPerID(SC_LAYER_HIDDEN);
121*b1cdbd2cSJim Jagielski         if (pLayer)
122*b1cdbd2cSJim Jagielski         {
123*b1cdbd2cSJim Jagielski             SetLayerLocked( pLayer->GetName(), bProt );
124*b1cdbd2cSJim Jagielski             SetLayerVisible( pLayer->GetName(), sal_False);
125*b1cdbd2cSJim Jagielski         }
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski 		SetSwapAsynchron(sal_True);
128*b1cdbd2cSJim Jagielski 	}
129*b1cdbd2cSJim Jagielski 	else
130*b1cdbd2cSJim Jagielski 	{
131*b1cdbd2cSJim Jagielski 		ShowSdrPage(GetModel()->GetPage(nTab));
132*b1cdbd2cSJim Jagielski 	}
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 	UpdateUserViewOptions();
135*b1cdbd2cSJim Jagielski 	RecalcScale();
136*b1cdbd2cSJim Jagielski 	UpdateWorkArea();
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 	bInConstruct = sal_False;
139*b1cdbd2cSJim Jagielski }
140*b1cdbd2cSJim Jagielski 
ImplClearCalcDropMarker()141*b1cdbd2cSJim Jagielski void ScDrawView::ImplClearCalcDropMarker()
142*b1cdbd2cSJim Jagielski {
143*b1cdbd2cSJim Jagielski 	if(pDropMarker)
144*b1cdbd2cSJim Jagielski 	{
145*b1cdbd2cSJim Jagielski 		delete pDropMarker;
146*b1cdbd2cSJim Jagielski 		pDropMarker = 0L;
147*b1cdbd2cSJim Jagielski 	}
148*b1cdbd2cSJim Jagielski }
149*b1cdbd2cSJim Jagielski 
~ScDrawView()150*b1cdbd2cSJim Jagielski __EXPORT ScDrawView::~ScDrawView()
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski 	ImplClearCalcDropMarker();
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
AddCustomHdl()155*b1cdbd2cSJim Jagielski void ScDrawView::AddCustomHdl()
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski 	sal_Bool bNegativePage = pDoc->IsNegativePage( nTab );
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	const SdrMarkList &rMrkList = GetMarkedObjectList();
160*b1cdbd2cSJim Jagielski 	sal_uInt32 nCount = rMrkList.GetMarkCount();
161*b1cdbd2cSJim Jagielski 	for(sal_uInt32 nPos=0; nPos<nCount; nPos++ )
162*b1cdbd2cSJim Jagielski 	{
163*b1cdbd2cSJim Jagielski 		const SdrObject* pObj = rMrkList.GetMark(nPos)->GetMarkedSdrObj();
164*b1cdbd2cSJim Jagielski 		if(ScDrawLayer::GetAnchor(pObj) == SCA_CELL)
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski 			const sal_Int32 nDelta = 1;
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 			Rectangle aBoundRect = pObj->GetCurrentBoundRect();
169*b1cdbd2cSJim Jagielski 			Point aPos;
170*b1cdbd2cSJim Jagielski 			if (bNegativePage)
171*b1cdbd2cSJim Jagielski 			{
172*b1cdbd2cSJim Jagielski 				aPos = aBoundRect.TopRight();
173*b1cdbd2cSJim Jagielski 				aPos.X() = -aPos.X();			// so the loop below is the same
174*b1cdbd2cSJim Jagielski 			}
175*b1cdbd2cSJim Jagielski 			else
176*b1cdbd2cSJim Jagielski 				aPos = aBoundRect.TopLeft();
177*b1cdbd2cSJim Jagielski 			long nPosX = (long) (aPos.X() / HMM_PER_TWIPS) + nDelta;
178*b1cdbd2cSJim Jagielski 			long nPosY = (long) (aPos.Y() / HMM_PER_TWIPS) + nDelta;
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 			SCCOL nCol;
181*b1cdbd2cSJim Jagielski 			sal_Int32 nWidth = 0;
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 			for(nCol=0; nCol<=MAXCOL && nWidth<=nPosX; nCol++)
184*b1cdbd2cSJim Jagielski 				nWidth += pDoc->GetColWidth(nCol,nTab);
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 			if(nCol > 0)
187*b1cdbd2cSJim Jagielski 				--nCol;
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski             SCROW nRow = nPosY <= 0 ? 0 : pDoc->GetRowForHeight( nTab,
190*b1cdbd2cSJim Jagielski                     (sal_uLong) nPosY);
191*b1cdbd2cSJim Jagielski 			if(nRow > 0)
192*b1cdbd2cSJim Jagielski 				--nRow;
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 			ScTabView* pView = pViewData->GetView();
195*b1cdbd2cSJim Jagielski 			ScAddress aScAddress(nCol, nRow, nTab);
196*b1cdbd2cSJim Jagielski 			pView->CreateAnchorHandles(aHdl, aScAddress);
197*b1cdbd2cSJim Jagielski 		}
198*b1cdbd2cSJim Jagielski 	}
199*b1cdbd2cSJim Jagielski }
200*b1cdbd2cSJim Jagielski 
InvalidateAttribs()201*b1cdbd2cSJim Jagielski void ScDrawView::InvalidateAttribs()
202*b1cdbd2cSJim Jagielski {
203*b1cdbd2cSJim Jagielski 	if (!pViewData) return;
204*b1cdbd2cSJim Jagielski 	SfxBindings& rBindings = pViewData->GetBindings();
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 		// echte Statuswerte:
207*b1cdbd2cSJim Jagielski 	rBindings.InvalidateAll( sal_True );
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski 
InvalidateDrawTextAttrs()210*b1cdbd2cSJim Jagielski void ScDrawView::InvalidateDrawTextAttrs()
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski 	if (!pViewData) return;
213*b1cdbd2cSJim Jagielski 	SfxBindings& rBindings = pViewData->GetBindings();
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 	//	cjk/ctl font items have no configured slots,
216*b1cdbd2cSJim Jagielski 	//	need no invalidate
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_FONT );
219*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
220*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_WEIGHT );
221*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_POSTURE );
222*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_UNDERLINE );
223*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_NONE );
224*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_SINGLE );
225*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_DOUBLE );
226*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ULINE_VAL_DOTTED );
227*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_OVERLINE );
228*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_COLOR );
229*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_ADJUST_LEFT );
230*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_ADJUST_RIGHT );
231*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_ADJUST_BLOCK );
232*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_ADJUST_CENTER);
233*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ALIGNLEFT );
234*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ALIGNCENTERHOR );
235*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ALIGNRIGHT );
236*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ALIGNBLOCK );
237*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_10 );
238*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_15 );
239*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_LINESPACE_20 );
240*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_SET_SUPER_SCRIPT );
241*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_SET_SUB_SCRIPT );
242*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_KERNING );
243*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_STRIKEOUT );
244*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_CHAR_SHADOWED );
245*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_TEXTDIRECTION_LEFT_TO_RIGHT );
246*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_TEXTDIRECTION_TOP_TO_BOTTOM );
247*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_LEFT_TO_RIGHT );
248*b1cdbd2cSJim Jagielski 	rBindings.Invalidate( SID_ATTR_PARA_RIGHT_TO_LEFT );
249*b1cdbd2cSJim Jagielski     // pseudo slots for Format menu
250*b1cdbd2cSJim Jagielski     rBindings.Invalidate( SID_ALIGN_ANY_LEFT );
251*b1cdbd2cSJim Jagielski     rBindings.Invalidate( SID_ALIGN_ANY_HCENTER );
252*b1cdbd2cSJim Jagielski     rBindings.Invalidate( SID_ALIGN_ANY_RIGHT );
253*b1cdbd2cSJim Jagielski     rBindings.Invalidate( SID_ALIGN_ANY_JUSTIFIED );
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski //void ScDrawView::DrawMarks( OutputDevice* pOut ) const
257*b1cdbd2cSJim Jagielski //{
258*b1cdbd2cSJim Jagielski //	DBG_ASSERT(pOut, "ScDrawView::DrawMarks: No OutputDevice (!)");
259*b1cdbd2cSJim Jagielski //	SdrPaintWindow* pPaintWindow = FindPaintWindow(*pOut);
260*b1cdbd2cSJim Jagielski //
261*b1cdbd2cSJim Jagielski //	if(pPaintWindow)
262*b1cdbd2cSJim Jagielski //	{
263*b1cdbd2cSJim Jagielski //		if(pPaintWindow->isXorVisible())
264*b1cdbd2cSJim Jagielski //		{
265*b1cdbd2cSJim Jagielski //			ToggleShownXor(pOut, 0L);
266*b1cdbd2cSJim Jagielski //		}
267*b1cdbd2cSJim Jagielski //	}
268*b1cdbd2cSJim Jagielski //}
269*b1cdbd2cSJim Jagielski 
SetMarkedToLayer(sal_uInt8 nLayerNo)270*b1cdbd2cSJim Jagielski void ScDrawView::SetMarkedToLayer( sal_uInt8 nLayerNo )
271*b1cdbd2cSJim Jagielski {
272*b1cdbd2cSJim Jagielski 	if (AreObjectsMarked())
273*b1cdbd2cSJim Jagielski 	{
274*b1cdbd2cSJim Jagielski 		//	#i11702# use SdrUndoObjectLayerChange for undo
275*b1cdbd2cSJim Jagielski 		//	STR_UNDO_SELATTR is "Attributes" - should use a different text later
276*b1cdbd2cSJim Jagielski 		BegUndo( ScGlobal::GetRscString( STR_UNDO_SELATTR ) );
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 		const SdrMarkList& rMark = GetMarkedObjectList();
279*b1cdbd2cSJim Jagielski 		sal_uLong nCount = rMark.GetMarkCount();
280*b1cdbd2cSJim Jagielski 		for (sal_uLong i=0; i<nCount; i++)
281*b1cdbd2cSJim Jagielski 		{
282*b1cdbd2cSJim Jagielski 			SdrObject* pObj = rMark.GetMark(i)->GetMarkedSdrObj();
283*b1cdbd2cSJim Jagielski 			if ( !pObj->ISA(SdrUnoObj) && (pObj->GetLayer() != SC_LAYER_INTERN) )
284*b1cdbd2cSJim Jagielski 			{
285*b1cdbd2cSJim Jagielski 				AddUndo( new SdrUndoObjectLayerChange( *pObj, pObj->GetLayer(), (SdrLayerID)nLayerNo) );
286*b1cdbd2cSJim Jagielski 				pObj->SetLayer( nLayerNo );
287*b1cdbd2cSJim Jagielski 			}
288*b1cdbd2cSJim Jagielski 		}
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 		EndUndo();
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 		//	repaint is done in SetLayer
293*b1cdbd2cSJim Jagielski 
294*b1cdbd2cSJim Jagielski 		pViewData->GetDocShell()->SetDrawModified();
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 		//	#84073# check mark list now instead of later in a timer
297*b1cdbd2cSJim Jagielski 		CheckMarked();
298*b1cdbd2cSJim Jagielski 		MarkListHasChanged();
299*b1cdbd2cSJim Jagielski 	}
300*b1cdbd2cSJim Jagielski }
301*b1cdbd2cSJim Jagielski 
HasMarkedControl() const302*b1cdbd2cSJim Jagielski bool ScDrawView::HasMarkedControl() const
303*b1cdbd2cSJim Jagielski {
304*b1cdbd2cSJim Jagielski     SdrObjListIter aIter( GetMarkedObjectList() );
305*b1cdbd2cSJim Jagielski     for( SdrObject* pObj = aIter.Next(); pObj; pObj = aIter.Next() )
306*b1cdbd2cSJim Jagielski         if( pObj->ISA( SdrUnoObj ) )
307*b1cdbd2cSJim Jagielski             return true;
308*b1cdbd2cSJim Jagielski 	return false;
309*b1cdbd2cSJim Jagielski }
310*b1cdbd2cSJim Jagielski 
HasMarkedInternal() const311*b1cdbd2cSJim Jagielski bool ScDrawView::HasMarkedInternal() const
312*b1cdbd2cSJim Jagielski {
313*b1cdbd2cSJim Jagielski     // internal objects should not be inside a group, but who knows...
314*b1cdbd2cSJim Jagielski     SdrObjListIter aIter( GetMarkedObjectList() );
315*b1cdbd2cSJim Jagielski     for( SdrObject* pObj = aIter.Next(); pObj; pObj = aIter.Next() )
316*b1cdbd2cSJim Jagielski         if( pObj->GetLayer() == SC_LAYER_INTERN )
317*b1cdbd2cSJim Jagielski             return true;
318*b1cdbd2cSJim Jagielski 	return false;
319*b1cdbd2cSJim Jagielski }
320*b1cdbd2cSJim Jagielski 
UpdateWorkArea()321*b1cdbd2cSJim Jagielski void ScDrawView::UpdateWorkArea()
322*b1cdbd2cSJim Jagielski {
323*b1cdbd2cSJim Jagielski 	SdrPage* pPage = GetModel()->GetPage(static_cast<sal_uInt16>(nTab));
324*b1cdbd2cSJim Jagielski 	if (pPage)
325*b1cdbd2cSJim Jagielski 	{
326*b1cdbd2cSJim Jagielski 		Point aPos;
327*b1cdbd2cSJim Jagielski 		Size aPageSize( pPage->GetSize() );
328*b1cdbd2cSJim Jagielski 		Rectangle aNewArea( aPos, aPageSize );
329*b1cdbd2cSJim Jagielski 		if ( aPageSize.Width() < 0 )
330*b1cdbd2cSJim Jagielski 		{
331*b1cdbd2cSJim Jagielski 			//	RTL: from max.negative (left) to zero (right)
332*b1cdbd2cSJim Jagielski 			aNewArea.Right() = 0;
333*b1cdbd2cSJim Jagielski 			aNewArea.Left() = aPageSize.Width() + 1;
334*b1cdbd2cSJim Jagielski 		}
335*b1cdbd2cSJim Jagielski 		SetWorkArea( aNewArea );
336*b1cdbd2cSJim Jagielski 	}
337*b1cdbd2cSJim Jagielski 	else
338*b1cdbd2cSJim Jagielski 	{
339*b1cdbd2cSJim Jagielski 		DBG_ERROR("Page nicht gefunden");
340*b1cdbd2cSJim Jagielski 	}
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski 
DoCut()343*b1cdbd2cSJim Jagielski void ScDrawView::DoCut()
344*b1cdbd2cSJim Jagielski {
345*b1cdbd2cSJim Jagielski 	DoCopy();
346*b1cdbd2cSJim Jagielski 	BegUndo( ScGlobal::GetRscString( STR_UNDO_CUT ) );
347*b1cdbd2cSJim Jagielski 	DeleteMarked();		// auf dieser View - von der 505f Umstellung nicht betroffen
348*b1cdbd2cSJim Jagielski 	EndUndo();
349*b1cdbd2cSJim Jagielski }
350*b1cdbd2cSJim Jagielski 
GetScale(Fraction & rFractX,Fraction & rFractY) const351*b1cdbd2cSJim Jagielski void ScDrawView::GetScale( Fraction& rFractX, Fraction& rFractY ) const
352*b1cdbd2cSJim Jagielski {
353*b1cdbd2cSJim Jagielski 	rFractX = aScaleX;
354*b1cdbd2cSJim Jagielski 	rFractY = aScaleY;
355*b1cdbd2cSJim Jagielski }
356*b1cdbd2cSJim Jagielski 
RecalcScale()357*b1cdbd2cSJim Jagielski void ScDrawView::RecalcScale()
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski 	double nPPTX;
360*b1cdbd2cSJim Jagielski 	double nPPTY;
361*b1cdbd2cSJim Jagielski 	Fraction aZoomX(1,1);
362*b1cdbd2cSJim Jagielski 	Fraction aZoomY(1,1);
363*b1cdbd2cSJim Jagielski 
364*b1cdbd2cSJim Jagielski 	if (pViewData)
365*b1cdbd2cSJim Jagielski 	{
366*b1cdbd2cSJim Jagielski 		nTab = pViewData->GetTabNo();
367*b1cdbd2cSJim Jagielski 		nPPTX = pViewData->GetPPTX();
368*b1cdbd2cSJim Jagielski 		nPPTY = pViewData->GetPPTY();
369*b1cdbd2cSJim Jagielski 		aZoomX = pViewData->GetZoomX();
370*b1cdbd2cSJim Jagielski 		aZoomY = pViewData->GetZoomY();
371*b1cdbd2cSJim Jagielski 	}
372*b1cdbd2cSJim Jagielski 	else
373*b1cdbd2cSJim Jagielski 	{
374*b1cdbd2cSJim Jagielski 		Point aLogic = pDev->LogicToPixel( Point(1000,1000), MAP_TWIP );
375*b1cdbd2cSJim Jagielski 		nPPTX = aLogic.X() / 1000.0;
376*b1cdbd2cSJim Jagielski 		nPPTY = aLogic.Y() / 1000.0;
377*b1cdbd2cSJim Jagielski 											//! Zoom uebergeben ???
378*b1cdbd2cSJim Jagielski 	}
379*b1cdbd2cSJim Jagielski 
380*b1cdbd2cSJim Jagielski 	SCCOL nEndCol = 0;
381*b1cdbd2cSJim Jagielski 	SCROW nEndRow = 0;
382*b1cdbd2cSJim Jagielski 	pDoc->GetTableArea( nTab, nEndCol, nEndRow );
383*b1cdbd2cSJim Jagielski 	if (nEndCol<20)
384*b1cdbd2cSJim Jagielski 		nEndCol = 20;
385*b1cdbd2cSJim Jagielski 	if (nEndRow<20)
386*b1cdbd2cSJim Jagielski         nEndRow = 20;   // #i116848# instead of a large row number for an empty sheet, heights are multiplied in CalcScale
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 	ScDrawUtil::CalcScale( pDoc, nTab, 0,0, nEndCol,nEndRow, pDev,aZoomX,aZoomY,nPPTX,nPPTY,
389*b1cdbd2cSJim Jagielski 							aScaleX,aScaleY );
390*b1cdbd2cSJim Jagielski }
391*b1cdbd2cSJim Jagielski 
DoConnect(SdrOle2Obj * pOleObj)392*b1cdbd2cSJim Jagielski void ScDrawView::DoConnect(SdrOle2Obj* pOleObj)
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski     if ( pViewData )
395*b1cdbd2cSJim Jagielski         pViewData->GetViewShell()->ConnectObject( pOleObj );
396*b1cdbd2cSJim Jagielski }
397*b1cdbd2cSJim Jagielski 
MarkListHasChanged()398*b1cdbd2cSJim Jagielski void ScDrawView::MarkListHasChanged()
399*b1cdbd2cSJim Jagielski {
400*b1cdbd2cSJim Jagielski 	FmFormView::MarkListHasChanged();
401*b1cdbd2cSJim Jagielski 
402*b1cdbd2cSJim Jagielski 	UpdateBrowser();
403*b1cdbd2cSJim Jagielski 
404*b1cdbd2cSJim Jagielski 	ScTabViewShell* pViewSh = pViewData->GetViewShell();
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski     // #i110829# remove the cell selection only if drawing objects are selected
407*b1cdbd2cSJim Jagielski     if ( !bInConstruct && GetMarkedObjectList().GetMarkCount() )
408*b1cdbd2cSJim Jagielski 	{
409*b1cdbd2cSJim Jagielski         pViewSh->Unmark();      // remove cell selection
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 		//	#65379# end cell edit mode if drawing objects are selected
412*b1cdbd2cSJim Jagielski         SC_MOD()->InputEnterHandler();
413*b1cdbd2cSJim Jagielski 	}
414*b1cdbd2cSJim Jagielski 
415*b1cdbd2cSJim Jagielski 	//	IP deaktivieren
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski     ScModule* pScMod = SC_MOD();
418*b1cdbd2cSJim Jagielski     bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF;
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 	ScClient* pClient = (ScClient*) pViewSh->GetIPClient();
421*b1cdbd2cSJim Jagielski     if ( pClient && pClient->IsObjectInPlaceActive() && !bUnoRefDialog )
422*b1cdbd2cSJim Jagielski 	{
423*b1cdbd2cSJim Jagielski 		//	#41730# beim ViewShell::Activate aus dem Reset2Open nicht die Handles anzeigen
424*b1cdbd2cSJim Jagielski 		//HMHbDisableHdl = sal_True;
425*b1cdbd2cSJim Jagielski         pClient->DeactivateObject();
426*b1cdbd2cSJim Jagielski 		//HMHbDisableHdl = sal_False;
427*b1cdbd2cSJim Jagielski 		//	Image-Ole wieder durch Grafik ersetzen passiert jetzt in ScClient::UIActivate
428*b1cdbd2cSJim Jagielski 	}
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski 	//	Ole-Objekt selektiert?
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 	SdrOle2Obj* pOle2Obj = NULL;
433*b1cdbd2cSJim Jagielski 	SdrGrafObj* pGrafObj = NULL;
434*b1cdbd2cSJim Jagielski 	SdrMediaObj* pMediaObj = NULL;
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski 	const SdrMarkList& rMarkList = GetMarkedObjectList();
437*b1cdbd2cSJim Jagielski 	sal_uLong nMarkCount = rMarkList.GetMarkCount();
438*b1cdbd2cSJim Jagielski 
439*b1cdbd2cSJim Jagielski 	if ( nMarkCount == 0 && !pViewData->GetViewShell()->IsDrawSelMode() && !bInConstruct )
440*b1cdbd2cSJim Jagielski 	{
441*b1cdbd2cSJim Jagielski 		//	relock layers that may have been unlocked before
442*b1cdbd2cSJim Jagielski         LockBackgroundLayer();
443*b1cdbd2cSJim Jagielski         LockInternalLayer();
444*b1cdbd2cSJim Jagielski 	}
445*b1cdbd2cSJim Jagielski 
446*b1cdbd2cSJim Jagielski 	sal_Bool bSubShellSet = sal_False;
447*b1cdbd2cSJim Jagielski 	if (nMarkCount == 1)
448*b1cdbd2cSJim Jagielski 	{
449*b1cdbd2cSJim Jagielski 		SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
450*b1cdbd2cSJim Jagielski 		if (pObj->GetObjIdentifier() == OBJ_OLE2)
451*b1cdbd2cSJim Jagielski 		{
452*b1cdbd2cSJim Jagielski 			pOle2Obj = (SdrOle2Obj*) pObj;
453*b1cdbd2cSJim Jagielski 			if (!pDoc->IsChart(pObj) )
454*b1cdbd2cSJim Jagielski 				pViewSh->SetOleObjectShell(sal_True);
455*b1cdbd2cSJim Jagielski 			else
456*b1cdbd2cSJim Jagielski 				pViewSh->SetChartShell(sal_True);
457*b1cdbd2cSJim Jagielski 			bSubShellSet = sal_True;
458*b1cdbd2cSJim Jagielski 		}
459*b1cdbd2cSJim Jagielski 		else if (pObj->GetObjIdentifier() == OBJ_GRAF)
460*b1cdbd2cSJim Jagielski 		{
461*b1cdbd2cSJim Jagielski 			pGrafObj = (SdrGrafObj*) pObj;
462*b1cdbd2cSJim Jagielski 			pViewSh->SetGraphicShell(sal_True);
463*b1cdbd2cSJim Jagielski 			bSubShellSet = sal_True;
464*b1cdbd2cSJim Jagielski 		}
465*b1cdbd2cSJim Jagielski 		else if (pObj->GetObjIdentifier() == OBJ_MEDIA)
466*b1cdbd2cSJim Jagielski 		{
467*b1cdbd2cSJim Jagielski 			pMediaObj = (SdrMediaObj*) pObj;
468*b1cdbd2cSJim Jagielski 			pViewSh->SetMediaShell(sal_True);
469*b1cdbd2cSJim Jagielski 			bSubShellSet = sal_True;
470*b1cdbd2cSJim Jagielski 		}
471*b1cdbd2cSJim Jagielski 		else if (pObj->GetObjIdentifier() != OBJ_TEXT   // Verhindern, das beim Anlegen
472*b1cdbd2cSJim Jagielski 					|| !pViewSh->IsDrawTextShell())		// eines TextObjekts auf die
473*b1cdbd2cSJim Jagielski 		{												// DrawShell umgeschaltet wird.
474*b1cdbd2cSJim Jagielski 			pViewSh->SetDrawShell(sal_True);				//@#70206#
475*b1cdbd2cSJim Jagielski 		}
476*b1cdbd2cSJim Jagielski 	}
477*b1cdbd2cSJim Jagielski 
478*b1cdbd2cSJim Jagielski 	if ( nMarkCount && !bSubShellSet )
479*b1cdbd2cSJim Jagielski 	{
480*b1cdbd2cSJim Jagielski 		sal_Bool bOnlyControls = sal_True;
481*b1cdbd2cSJim Jagielski 		sal_Bool bOnlyGraf     = sal_True;
482*b1cdbd2cSJim Jagielski 		for (sal_uLong i=0; i<nMarkCount; i++)
483*b1cdbd2cSJim Jagielski 		{
484*b1cdbd2cSJim Jagielski 			SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
485*b1cdbd2cSJim Jagielski 			if ( pObj->ISA( SdrObjGroup ) )
486*b1cdbd2cSJim Jagielski 			{
487*b1cdbd2cSJim Jagielski 				const SdrObjList *pLst = ((SdrObjGroup*)pObj)->GetSubList();
488*b1cdbd2cSJim Jagielski 				sal_uLong nListCount = pLst->GetObjCount();
489*b1cdbd2cSJim Jagielski 				if ( nListCount == 0 )
490*b1cdbd2cSJim Jagielski 				{
491*b1cdbd2cSJim Jagielski 					//	#104156# An empty group (may occur during Undo) is no control or graphics object.
492*b1cdbd2cSJim Jagielski 					//	Creating the form shell during undo would lead to problems with the undo manager.
493*b1cdbd2cSJim Jagielski 					bOnlyControls = sal_False;
494*b1cdbd2cSJim Jagielski 					bOnlyGraf = sal_False;
495*b1cdbd2cSJim Jagielski 				}
496*b1cdbd2cSJim Jagielski 				for ( sal_uInt16 j = 0; j < nListCount; ++j )
497*b1cdbd2cSJim Jagielski 				{
498*b1cdbd2cSJim Jagielski 					SdrObject *pSubObj = pLst->GetObj( j );
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski 					if (!pSubObj->ISA(SdrUnoObj))
501*b1cdbd2cSJim Jagielski 						bOnlyControls = sal_False;
502*b1cdbd2cSJim Jagielski 					if (pSubObj->GetObjIdentifier() != OBJ_GRAF)
503*b1cdbd2cSJim Jagielski 						bOnlyGraf = sal_False;
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski 					if ( !bOnlyControls && !bOnlyGraf ) break;
506*b1cdbd2cSJim Jagielski 				}
507*b1cdbd2cSJim Jagielski 			}
508*b1cdbd2cSJim Jagielski 			else
509*b1cdbd2cSJim Jagielski 			{
510*b1cdbd2cSJim Jagielski 				if (!pObj->ISA(SdrUnoObj))
511*b1cdbd2cSJim Jagielski 					bOnlyControls = sal_False;
512*b1cdbd2cSJim Jagielski 				if (pObj->GetObjIdentifier() != OBJ_GRAF)
513*b1cdbd2cSJim Jagielski 					bOnlyGraf = sal_False;
514*b1cdbd2cSJim Jagielski 			}
515*b1cdbd2cSJim Jagielski 
516*b1cdbd2cSJim Jagielski 			if ( !bOnlyControls && !bOnlyGraf ) break;
517*b1cdbd2cSJim Jagielski 		}
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 		if(bOnlyControls)
520*b1cdbd2cSJim Jagielski 		{
521*b1cdbd2cSJim Jagielski 			pViewSh->SetDrawFormShell(sal_True);			// jetzt UNO-Controls
522*b1cdbd2cSJim Jagielski 		}
523*b1cdbd2cSJim Jagielski 		else if(bOnlyGraf)
524*b1cdbd2cSJim Jagielski 		{
525*b1cdbd2cSJim Jagielski 			pViewSh->SetGraphicShell(sal_True);
526*b1cdbd2cSJim Jagielski 		}
527*b1cdbd2cSJim Jagielski 		else if(nMarkCount>1)
528*b1cdbd2cSJim Jagielski 		{
529*b1cdbd2cSJim Jagielski 			pViewSh->SetDrawShell(sal_True);
530*b1cdbd2cSJim Jagielski 		}
531*b1cdbd2cSJim Jagielski 	}
532*b1cdbd2cSJim Jagielski 
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski 
535*b1cdbd2cSJim Jagielski 	//	Verben anpassen
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski 	SfxViewFrame* pViewFrame = pViewSh->GetViewFrame();
538*b1cdbd2cSJim Jagielski     sal_Bool bOle = pViewSh->GetViewFrame()->GetFrame().IsInPlace();
539*b1cdbd2cSJim Jagielski     uno::Sequence< embed::VerbDescriptor > aVerbs;
540*b1cdbd2cSJim Jagielski 	if ( pOle2Obj && !bOle )
541*b1cdbd2cSJim Jagielski 	{
542*b1cdbd2cSJim Jagielski         uno::Reference < embed::XEmbeddedObject > xObj = pOle2Obj->GetObjRef();
543*b1cdbd2cSJim Jagielski 		DBG_ASSERT( xObj.is(), "SdrOle2Obj ohne ObjRef" );
544*b1cdbd2cSJim Jagielski         if (xObj.is())
545*b1cdbd2cSJim Jagielski             aVerbs = xObj->getSupportedVerbs();
546*b1cdbd2cSJim Jagielski 	}
547*b1cdbd2cSJim Jagielski 	pViewSh->SetVerbs( aVerbs );
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski 	//	Image-Map Editor
550*b1cdbd2cSJim Jagielski 
551*b1cdbd2cSJim Jagielski 	if ( pOle2Obj )
552*b1cdbd2cSJim Jagielski 		UpdateIMap( pOle2Obj );
553*b1cdbd2cSJim Jagielski 	else if ( pGrafObj )
554*b1cdbd2cSJim Jagielski 		UpdateIMap( pGrafObj );
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski 	InvalidateAttribs();				// nach dem IMap-Editor Update
557*b1cdbd2cSJim Jagielski 	InvalidateDrawTextAttrs();
558*b1cdbd2cSJim Jagielski 
559*b1cdbd2cSJim Jagielski 	for(sal_uInt32 a(0L); a < PaintWindowCount(); a++)
560*b1cdbd2cSJim Jagielski 	{
561*b1cdbd2cSJim Jagielski 		SdrPaintWindow* pPaintWindow = GetPaintWindow(a);
562*b1cdbd2cSJim Jagielski 		OutputDevice& rOutDev = pPaintWindow->GetOutputDevice();
563*b1cdbd2cSJim Jagielski 
564*b1cdbd2cSJim Jagielski 		if(OUTDEV_WINDOW == rOutDev.GetOutDevType())
565*b1cdbd2cSJim Jagielski 		{
566*b1cdbd2cSJim Jagielski 			((Window&)rOutDev).Update();
567*b1cdbd2cSJim Jagielski 		}
568*b1cdbd2cSJim Jagielski 	}
569*b1cdbd2cSJim Jagielski 
570*b1cdbd2cSJim Jagielski 	//	uno object for view returns drawing objects as selection,
571*b1cdbd2cSJim Jagielski 	//	so it must notify its SelectionChangeListeners
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 	if (pViewFrame)
574*b1cdbd2cSJim Jagielski 	{
575*b1cdbd2cSJim Jagielski 		SfxFrame& rFrame = pViewFrame->GetFrame();
576*b1cdbd2cSJim Jagielski 		uno::Reference<frame::XController> xController = rFrame.GetController();
577*b1cdbd2cSJim Jagielski 		if (xController.is())
578*b1cdbd2cSJim Jagielski 		{
579*b1cdbd2cSJim Jagielski 			ScTabViewObj* pImp = ScTabViewObj::getImplementation( xController );
580*b1cdbd2cSJim Jagielski 			if (pImp)
581*b1cdbd2cSJim Jagielski 				pImp->SelectionChanged();
582*b1cdbd2cSJim Jagielski 		}
583*b1cdbd2cSJim Jagielski 	}
584*b1cdbd2cSJim Jagielski 
585*b1cdbd2cSJim Jagielski 	//	update selection transfer object
586*b1cdbd2cSJim Jagielski 
587*b1cdbd2cSJim Jagielski 	pViewSh->CheckSelectionTransfer();
588*b1cdbd2cSJim Jagielski 
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski 
SdrBeginTextEdit(SdrObject * pObj,SdrPageView * pPV,::Window * pWinL,sal_Bool bIsNewObj,SdrOutliner * pGivenOutliner,OutlinerView * pGivenOutlinerView,sal_Bool bDontDeleteOutliner,sal_Bool bOnlyOneView,sal_Bool bGrabFocus)591*b1cdbd2cSJim Jagielski sal_Bool ScDrawView::SdrBeginTextEdit(
592*b1cdbd2cSJim Jagielski     SdrObject* pObj,
593*b1cdbd2cSJim Jagielski     SdrPageView* pPV,
594*b1cdbd2cSJim Jagielski     ::Window* pWinL,
595*b1cdbd2cSJim Jagielski     sal_Bool bIsNewObj,
596*b1cdbd2cSJim Jagielski     SdrOutliner* pGivenOutliner,
597*b1cdbd2cSJim Jagielski     OutlinerView* pGivenOutlinerView,
598*b1cdbd2cSJim Jagielski     sal_Bool bDontDeleteOutliner,
599*b1cdbd2cSJim Jagielski     sal_Bool bOnlyOneView,
600*b1cdbd2cSJim Jagielski     sal_Bool bGrabFocus )
601*b1cdbd2cSJim Jagielski {
602*b1cdbd2cSJim Jagielski     const sal_Bool bRet = FmFormView::SdrBeginTextEdit(
603*b1cdbd2cSJim Jagielski         pObj, pPV, pWinL, bIsNewObj,
604*b1cdbd2cSJim Jagielski         pGivenOutliner, pGivenOutlinerView, bDontDeleteOutliner,
605*b1cdbd2cSJim Jagielski         bOnlyOneView, bGrabFocus );
606*b1cdbd2cSJim Jagielski 
607*b1cdbd2cSJim Jagielski     ScTabViewShell* pViewSh = pViewData->GetViewShell();
608*b1cdbd2cSJim Jagielski     if ( pViewSh->GetViewFrame() )
609*b1cdbd2cSJim Jagielski     {
610*b1cdbd2cSJim Jagielski         SfxFrame& rFrame = pViewSh->GetViewFrame()->GetFrame();
611*b1cdbd2cSJim Jagielski         uno::Reference< frame::XController > xController = rFrame.GetController();
612*b1cdbd2cSJim Jagielski         if (xController.is())
613*b1cdbd2cSJim Jagielski         {
614*b1cdbd2cSJim Jagielski             ScTabViewObj* pImp = ScTabViewObj::getImplementation( xController );
615*b1cdbd2cSJim Jagielski             if (pImp)
616*b1cdbd2cSJim Jagielski                 pImp->SelectionChanged();
617*b1cdbd2cSJim Jagielski         }
618*b1cdbd2cSJim Jagielski     }
619*b1cdbd2cSJim Jagielski 
620*b1cdbd2cSJim Jagielski     return bRet;
621*b1cdbd2cSJim Jagielski }
622*b1cdbd2cSJim Jagielski 
623*b1cdbd2cSJim Jagielski 
SdrEndTextEdit(sal_Bool bDontDeleteReally)624*b1cdbd2cSJim Jagielski SdrEndTextEditKind ScDrawView::SdrEndTextEdit( sal_Bool bDontDeleteReally )
625*b1cdbd2cSJim Jagielski {
626*b1cdbd2cSJim Jagielski     const SdrEndTextEditKind eRet = FmFormView::SdrEndTextEdit( bDontDeleteReally );
627*b1cdbd2cSJim Jagielski 
628*b1cdbd2cSJim Jagielski     ScTabViewShell* pViewSh = pViewData->GetViewShell();
629*b1cdbd2cSJim Jagielski     if ( pViewSh->GetViewFrame() )
630*b1cdbd2cSJim Jagielski     {
631*b1cdbd2cSJim Jagielski         SfxFrame& rFrame = pViewSh->GetViewFrame()->GetFrame();
632*b1cdbd2cSJim Jagielski         uno::Reference< frame::XController > xController = rFrame.GetController();
633*b1cdbd2cSJim Jagielski         if (xController.is())
634*b1cdbd2cSJim Jagielski         {
635*b1cdbd2cSJim Jagielski             ScTabViewObj* pImp = ScTabViewObj::getImplementation( xController );
636*b1cdbd2cSJim Jagielski             if (pImp)
637*b1cdbd2cSJim Jagielski                 pImp->SelectionChanged();
638*b1cdbd2cSJim Jagielski         }
639*b1cdbd2cSJim Jagielski     }
640*b1cdbd2cSJim Jagielski 
641*b1cdbd2cSJim Jagielski     return eRet;
642*b1cdbd2cSJim Jagielski }
643*b1cdbd2cSJim Jagielski 
644*b1cdbd2cSJim Jagielski 
ModelHasChanged()645*b1cdbd2cSJim Jagielski void __EXPORT ScDrawView::ModelHasChanged()
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski 	SdrObject* pEditObj = GetTextEditObject();
648*b1cdbd2cSJim Jagielski 	if ( pEditObj && !pEditObj->IsInserted() && pViewData )
649*b1cdbd2cSJim Jagielski 	{
650*b1cdbd2cSJim Jagielski 		//	#111700# SdrObjEditView::ModelHasChanged will end text edit in this case,
651*b1cdbd2cSJim Jagielski 		//	so make sure the EditEngine's undo manager is no longer used.
652*b1cdbd2cSJim Jagielski 		pViewData->GetViewShell()->SetDrawTextUndo(NULL);
653*b1cdbd2cSJim Jagielski 		SetCreateMode();	// don't leave FuText in a funny state
654*b1cdbd2cSJim Jagielski 	}
655*b1cdbd2cSJim Jagielski 
656*b1cdbd2cSJim Jagielski 	FmFormView::ModelHasChanged();
657*b1cdbd2cSJim Jagielski }
658*b1cdbd2cSJim Jagielski 
UpdateUserViewOptions()659*b1cdbd2cSJim Jagielski void __EXPORT ScDrawView::UpdateUserViewOptions()
660*b1cdbd2cSJim Jagielski {
661*b1cdbd2cSJim Jagielski 	if (pViewData)
662*b1cdbd2cSJim Jagielski 	{
663*b1cdbd2cSJim Jagielski 		const ScViewOptions&	rOpt = pViewData->GetOptions();
664*b1cdbd2cSJim Jagielski 		const ScGridOptions&	rGrid = rOpt.GetGridOptions();
665*b1cdbd2cSJim Jagielski 
666*b1cdbd2cSJim Jagielski 		sal_Bool bBigHdl = rOpt.GetOption( VOPT_BIGHANDLES );
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski 		SetDragStripes( rOpt.GetOption( VOPT_HELPLINES ) );
669*b1cdbd2cSJim Jagielski 		SetSolidMarkHdl( rOpt.GetOption( VOPT_SOLIDHANDLES ) );
670*b1cdbd2cSJim Jagielski 		SetMarkHdlSizePixel( bBigHdl ? SC_HANDLESIZE_BIG : SC_HANDLESIZE_SMALL );
671*b1cdbd2cSJim Jagielski 
672*b1cdbd2cSJim Jagielski 		SetGridVisible( rGrid.GetGridVisible() );
673*b1cdbd2cSJim Jagielski 		SetSnapEnabled( rGrid.GetUseGridSnap() );
674*b1cdbd2cSJim Jagielski 		SetGridSnap( rGrid.GetUseGridSnap() );
675*b1cdbd2cSJim Jagielski 
676*b1cdbd2cSJim Jagielski 		//	Snap from grid options is no longer used
677*b1cdbd2cSJim Jagielski //		SetSnapGrid( Size( rGrid.GetFldSnapX(), rGrid.GetFldSnapY() ) );
678*b1cdbd2cSJim Jagielski 
679*b1cdbd2cSJim Jagielski 		Fraction aFractX( rGrid.GetFldDrawX(), rGrid.GetFldDivisionX() + 1 );
680*b1cdbd2cSJim Jagielski 		Fraction aFractY( rGrid.GetFldDrawY(), rGrid.GetFldDivisionY() + 1 );
681*b1cdbd2cSJim Jagielski 		SetSnapGridWidth( aFractX, aFractY );
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski 		SetGridCoarse( Size( rGrid.GetFldDrawX(), rGrid.GetFldDrawY() ) );
684*b1cdbd2cSJim Jagielski 		SetGridFine( Size( rGrid.GetFldDrawX() / (rGrid.GetFldDivisionX() + 1),
685*b1cdbd2cSJim Jagielski 						   rGrid.GetFldDrawY() / (rGrid.GetFldDivisionY() + 1) ) );
686*b1cdbd2cSJim Jagielski 	}
687*b1cdbd2cSJim Jagielski }
688*b1cdbd2cSJim Jagielski 
689*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
690*b1cdbd2cSJim Jagielski #pragma optimize ( "", on )
691*b1cdbd2cSJim Jagielski #endif
692*b1cdbd2cSJim Jagielski 
GetObjectByName(const String & rName)693*b1cdbd2cSJim Jagielski SdrObject* ScDrawView::GetObjectByName(const String& rName)
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski 	SfxObjectShell*	pShell = pDoc->GetDocumentShell();
696*b1cdbd2cSJim Jagielski 	if (pShell)
697*b1cdbd2cSJim Jagielski 	{
698*b1cdbd2cSJim Jagielski 		SdrModel* pDrawLayer = GetModel();
699*b1cdbd2cSJim Jagielski 		sal_uInt16 nTabCount = pDoc->GetTableCount();
700*b1cdbd2cSJim Jagielski 		for (sal_uInt16 i=0; i<nTabCount; i++)
701*b1cdbd2cSJim Jagielski 		{
702*b1cdbd2cSJim Jagielski 			SdrPage* pPage = pDrawLayer->GetPage(i);
703*b1cdbd2cSJim Jagielski 			DBG_ASSERT(pPage,"Page ?");
704*b1cdbd2cSJim Jagielski 			if (pPage)
705*b1cdbd2cSJim Jagielski 			{
706*b1cdbd2cSJim Jagielski 				SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
707*b1cdbd2cSJim Jagielski 				SdrObject* pObject = aIter.Next();
708*b1cdbd2cSJim Jagielski 				while (pObject)
709*b1cdbd2cSJim Jagielski 				{
710*b1cdbd2cSJim Jagielski 					if ( ScDrawLayer::GetVisibleName( pObject ) == rName )
711*b1cdbd2cSJim Jagielski 					{
712*b1cdbd2cSJim Jagielski 						return pObject;
713*b1cdbd2cSJim Jagielski 					}
714*b1cdbd2cSJim Jagielski 					pObject = aIter.Next();
715*b1cdbd2cSJim Jagielski 				}
716*b1cdbd2cSJim Jagielski 			}
717*b1cdbd2cSJim Jagielski 		}
718*b1cdbd2cSJim Jagielski 	}
719*b1cdbd2cSJim Jagielski 	return 0;
720*b1cdbd2cSJim Jagielski }
721*b1cdbd2cSJim Jagielski //Solution: realize multi-selection of objects
722*b1cdbd2cSJim Jagielski //==================================================
SelectCurrentViewObject(const String & rName)723*b1cdbd2cSJim Jagielski sal_Bool ScDrawView::SelectCurrentViewObject( const String& rName )
724*b1cdbd2cSJim Jagielski {
725*b1cdbd2cSJim Jagielski 	sal_uInt16 nObjectTab = 0;
726*b1cdbd2cSJim Jagielski 	SdrObject* pFound = NULL;
727*b1cdbd2cSJim Jagielski        sal_Bool bUnMark=sal_False;
728*b1cdbd2cSJim Jagielski 	SfxObjectShell*	pShell = pDoc->GetDocumentShell();
729*b1cdbd2cSJim Jagielski 	if (pShell)
730*b1cdbd2cSJim Jagielski 	{
731*b1cdbd2cSJim Jagielski 		SdrModel* pDrawLayer = GetModel();
732*b1cdbd2cSJim Jagielski 		sal_uInt16 nTabCount = pDoc->GetTableCount();
733*b1cdbd2cSJim Jagielski 		for (sal_uInt16 i=0; i<nTabCount && !pFound; i++)
734*b1cdbd2cSJim Jagielski 		{
735*b1cdbd2cSJim Jagielski 			SdrPage* pPage = pDrawLayer->GetPage(i);
736*b1cdbd2cSJim Jagielski 			DBG_ASSERT(pPage,"Page ?");
737*b1cdbd2cSJim Jagielski 			if (pPage)
738*b1cdbd2cSJim Jagielski 			{
739*b1cdbd2cSJim Jagielski 				SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS );
740*b1cdbd2cSJim Jagielski 				SdrObject* pObject = aIter.Next();
741*b1cdbd2cSJim Jagielski 				while (pObject && !pFound)
742*b1cdbd2cSJim Jagielski 				{
743*b1cdbd2cSJim Jagielski 					if ( ScDrawLayer::GetVisibleName( pObject ) == rName )
744*b1cdbd2cSJim Jagielski 					{
745*b1cdbd2cSJim Jagielski 						pFound = pObject;
746*b1cdbd2cSJim Jagielski 						nObjectTab = i;
747*b1cdbd2cSJim Jagielski 					}
748*b1cdbd2cSJim Jagielski 					pObject = aIter.Next();
749*b1cdbd2cSJim Jagielski 				}
750*b1cdbd2cSJim Jagielski 			}
751*b1cdbd2cSJim Jagielski 		}
752*b1cdbd2cSJim Jagielski 	}
753*b1cdbd2cSJim Jagielski 	if ( pFound )
754*b1cdbd2cSJim Jagielski 	{
755*b1cdbd2cSJim Jagielski 		ScTabView* pView = pViewData->GetView();
756*b1cdbd2cSJim Jagielski 		if ( nObjectTab != nTab )								// Tabelle umschalten
757*b1cdbd2cSJim Jagielski 			pView->SetTabNo( nObjectTab );
758*b1cdbd2cSJim Jagielski 		DBG_ASSERT( nTab == nObjectTab, "Tabellen umschalten hat nicht geklappt" );
759*b1cdbd2cSJim Jagielski 		pView->ScrollToObject( pFound );
760*b1cdbd2cSJim Jagielski 		if ( pFound->GetLayer() == SC_LAYER_BACK &&
761*b1cdbd2cSJim Jagielski 				!pViewData->GetViewShell()->IsDrawSelMode() &&
762*b1cdbd2cSJim Jagielski 				!pDoc->IsTabProtected( nTab ) &&
763*b1cdbd2cSJim Jagielski 				!pViewData->GetSfxDocShell()->IsReadOnly() )
764*b1cdbd2cSJim Jagielski 		{
765*b1cdbd2cSJim Jagielski 			SdrLayer* pLayer = GetModel()->GetLayerAdmin().GetLayerPerID(SC_LAYER_BACK);
766*b1cdbd2cSJim Jagielski 			if (pLayer)
767*b1cdbd2cSJim Jagielski 				SetLayerLocked( pLayer->GetName(), sal_False );
768*b1cdbd2cSJim Jagielski 		}
769*b1cdbd2cSJim Jagielski 		SdrPageView* pPV = GetSdrPageView();
770*b1cdbd2cSJim Jagielski               bUnMark = IsObjMarked(pFound);
771*b1cdbd2cSJim Jagielski 	       MarkObj( pFound, pPV, bUnMark);
772*b1cdbd2cSJim Jagielski 	}
773*b1cdbd2cSJim Jagielski 	return ( bUnMark );
774*b1cdbd2cSJim Jagielski }
SelectObject(const String & rName)775*b1cdbd2cSJim Jagielski sal_Bool ScDrawView::SelectObject( const String& rName )
776*b1cdbd2cSJim Jagielski {
777*b1cdbd2cSJim Jagielski 	UnmarkAll();
778*b1cdbd2cSJim Jagielski 
779*b1cdbd2cSJim Jagielski 	SCTAB nObjectTab = 0;
780*b1cdbd2cSJim Jagielski 	SdrObject* pFound = NULL;
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski 	SfxObjectShell*	pShell = pDoc->GetDocumentShell();
783*b1cdbd2cSJim Jagielski 	if (pShell)
784*b1cdbd2cSJim Jagielski 	{
785*b1cdbd2cSJim Jagielski 		SdrModel* pDrawLayer = GetModel();
786*b1cdbd2cSJim Jagielski 		SCTAB nTabCount = pDoc->GetTableCount();
787*b1cdbd2cSJim Jagielski 		for (SCTAB i=0; i<nTabCount && !pFound; i++)
788*b1cdbd2cSJim Jagielski 		{
789*b1cdbd2cSJim Jagielski 			SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(i));
790*b1cdbd2cSJim Jagielski 			DBG_ASSERT(pPage,"Page ?");
791*b1cdbd2cSJim Jagielski 			if (pPage)
792*b1cdbd2cSJim Jagielski 			{
793*b1cdbd2cSJim Jagielski 				SdrObjListIter aIter( *pPage, IM_DEEPWITHGROUPS );
794*b1cdbd2cSJim Jagielski 				SdrObject* pObject = aIter.Next();
795*b1cdbd2cSJim Jagielski 				while (pObject && !pFound)
796*b1cdbd2cSJim Jagielski 				{
797*b1cdbd2cSJim Jagielski 					if ( ScDrawLayer::GetVisibleName( pObject ) == rName )
798*b1cdbd2cSJim Jagielski 					{
799*b1cdbd2cSJim Jagielski 						pFound = pObject;
800*b1cdbd2cSJim Jagielski 						nObjectTab = i;
801*b1cdbd2cSJim Jagielski 					}
802*b1cdbd2cSJim Jagielski 					pObject = aIter.Next();
803*b1cdbd2cSJim Jagielski 				}
804*b1cdbd2cSJim Jagielski 			}
805*b1cdbd2cSJim Jagielski 		}
806*b1cdbd2cSJim Jagielski 	}
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski 	if ( pFound )
809*b1cdbd2cSJim Jagielski 	{
810*b1cdbd2cSJim Jagielski 		ScTabView* pView = pViewData->GetView();
811*b1cdbd2cSJim Jagielski 		if ( nObjectTab != nTab )								// Tabelle umschalten
812*b1cdbd2cSJim Jagielski 			pView->SetTabNo( nObjectTab );
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski 		DBG_ASSERT( nTab == nObjectTab, "Tabellen umschalten hat nicht geklappt" );
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 		pView->ScrollToObject( pFound );
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski         /*  #61585# To select an object on the background layer, the layer has to
819*b1cdbd2cSJim Jagielski             be unlocked even if exclusive drawing selection mode is not active
820*b1cdbd2cSJim Jagielski             (this is reversed in MarkListHasChanged when nothing is selected) */
821*b1cdbd2cSJim Jagielski 		if ( pFound->GetLayer() == SC_LAYER_BACK &&
822*b1cdbd2cSJim Jagielski 				!pViewData->GetViewShell()->IsDrawSelMode() &&
823*b1cdbd2cSJim Jagielski 				!pDoc->IsTabProtected( nTab ) &&
824*b1cdbd2cSJim Jagielski 				!pViewData->GetSfxDocShell()->IsReadOnly() )
825*b1cdbd2cSJim Jagielski 		{
826*b1cdbd2cSJim Jagielski             UnlockBackgroundLayer();
827*b1cdbd2cSJim Jagielski 		}
828*b1cdbd2cSJim Jagielski 
829*b1cdbd2cSJim Jagielski 		SdrPageView* pPV = GetSdrPageView();
830*b1cdbd2cSJim Jagielski 		MarkObj( pFound, pPV );
831*b1cdbd2cSJim Jagielski 	}
832*b1cdbd2cSJim Jagielski 
833*b1cdbd2cSJim Jagielski 	return ( pFound != NULL );
834*b1cdbd2cSJim Jagielski }
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski //Solution: If  object  is marked , return true , else return false .
837*b1cdbd2cSJim Jagielski //==================================================
GetObjectIsMarked(SdrObject * pObject)838*b1cdbd2cSJim Jagielski sal_Bool ScDrawView::GetObjectIsMarked(  SdrObject* pObject  )
839*b1cdbd2cSJim Jagielski {
840*b1cdbd2cSJim Jagielski        sal_Bool bisMarked =false;
841*b1cdbd2cSJim Jagielski 	if (pObject )
842*b1cdbd2cSJim Jagielski 	{
843*b1cdbd2cSJim Jagielski 	      bisMarked = IsObjMarked(pObject);
844*b1cdbd2cSJim Jagielski 	}
845*b1cdbd2cSJim Jagielski 	return  bisMarked;
846*b1cdbd2cSJim Jagielski }
847*b1cdbd2cSJim Jagielski //UNUSED2008-05  String ScDrawView::GetSelectedChartName() const
848*b1cdbd2cSJim Jagielski //UNUSED2008-05  {
849*b1cdbd2cSJim Jagielski //UNUSED2008-05      //  used for modifying a chart's data area - PersistName must always be used
850*b1cdbd2cSJim Jagielski //UNUSED2008-05      //  (as in ScDocument::FindChartData and UpdateChartArea)
851*b1cdbd2cSJim Jagielski //UNUSED2008-05
852*b1cdbd2cSJim Jagielski //UNUSED2008-05      const SdrMarkList& rMarkList = GetMarkedObjectList();
853*b1cdbd2cSJim Jagielski //UNUSED2008-05      if (rMarkList.GetMarkCount() == 1)
854*b1cdbd2cSJim Jagielski //UNUSED2008-05      {
855*b1cdbd2cSJim Jagielski //UNUSED2008-05          SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
856*b1cdbd2cSJim Jagielski //UNUSED2008-05          if (pObj->GetObjIdentifier() == OBJ_OLE2)
857*b1cdbd2cSJim Jagielski //UNUSED2008-05              if ( pDoc->IsChart(pObj) )
858*b1cdbd2cSJim Jagielski //UNUSED2008-05                  return static_cast<SdrOle2Obj*>(pObj)->GetPersistName();
859*b1cdbd2cSJim Jagielski //UNUSED2008-05      }
860*b1cdbd2cSJim Jagielski //UNUSED2008-05
861*b1cdbd2cSJim Jagielski //UNUSED2008-05      return EMPTY_STRING;        // nichts gefunden
862*b1cdbd2cSJim Jagielski //UNUSED2008-05  }
863*b1cdbd2cSJim Jagielski 
InsertObjectSafe(SdrObject * pObj,SdrPageView & rPV,sal_uLong nOptions)864*b1cdbd2cSJim Jagielski FASTBOOL ScDrawView::InsertObjectSafe(SdrObject* pObj, SdrPageView& rPV, sal_uLong nOptions)
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski 	//	Markierung nicht aendern, wenn Ole-Objekt aktiv
867*b1cdbd2cSJim Jagielski 	//	(bei Drop aus Ole-Objekt wuerde sonst mitten im ExecuteDrag deaktiviert!)
868*b1cdbd2cSJim Jagielski 
869*b1cdbd2cSJim Jagielski 	if (pViewData)
870*b1cdbd2cSJim Jagielski 	{
871*b1cdbd2cSJim Jagielski 		SfxInPlaceClient* pClient = pViewData->GetViewShell()->GetIPClient();
872*b1cdbd2cSJim Jagielski         if ( pClient && pClient->IsObjectInPlaceActive() )
873*b1cdbd2cSJim Jagielski 			nOptions |= SDRINSERT_DONTMARK;
874*b1cdbd2cSJim Jagielski 	}
875*b1cdbd2cSJim Jagielski 
876*b1cdbd2cSJim Jagielski 	return InsertObjectAtView( pObj, rPV, nOptions );
877*b1cdbd2cSJim Jagielski }
878*b1cdbd2cSJim Jagielski 
GetMarkedNoteCaption(ScDrawObjData ** ppCaptData)879*b1cdbd2cSJim Jagielski SdrObject* ScDrawView::GetMarkedNoteCaption( ScDrawObjData** ppCaptData )
880*b1cdbd2cSJim Jagielski {
881*b1cdbd2cSJim Jagielski     const SdrMarkList& rMarkList = GetMarkedObjectList();
882*b1cdbd2cSJim Jagielski     if( pViewData && (rMarkList.GetMarkCount() == 1) )
883*b1cdbd2cSJim Jagielski     {
884*b1cdbd2cSJim Jagielski         SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
885*b1cdbd2cSJim Jagielski         if( ScDrawObjData* pCaptData = ScDrawLayer::GetNoteCaptionData( pObj, pViewData->GetTabNo() ) )
886*b1cdbd2cSJim Jagielski         {
887*b1cdbd2cSJim Jagielski             if( ppCaptData ) *ppCaptData = pCaptData;
888*b1cdbd2cSJim Jagielski             return pObj;
889*b1cdbd2cSJim Jagielski         }
890*b1cdbd2cSJim Jagielski     }
891*b1cdbd2cSJim Jagielski     return 0;
892*b1cdbd2cSJim Jagielski }
893*b1cdbd2cSJim Jagielski 
LockCalcLayer(SdrLayerID nLayer,bool bLock)894*b1cdbd2cSJim Jagielski void ScDrawView::LockCalcLayer( SdrLayerID nLayer, bool bLock )
895*b1cdbd2cSJim Jagielski {
896*b1cdbd2cSJim Jagielski     SdrLayer* pLockLayer = GetModel()->GetLayerAdmin().GetLayerPerID( nLayer );
897*b1cdbd2cSJim Jagielski     if( pLockLayer && (IsLayerLocked( pLockLayer->GetName() ) != bLock) )
898*b1cdbd2cSJim Jagielski         SetLayerLocked( pLockLayer->GetName(), bLock );
899*b1cdbd2cSJim Jagielski }
900*b1cdbd2cSJim Jagielski 
MakeVisible(const Rectangle & rRect,Window & rWin)901*b1cdbd2cSJim Jagielski void __EXPORT ScDrawView::MakeVisible( const Rectangle& rRect, Window& rWin )
902*b1cdbd2cSJim Jagielski {
903*b1cdbd2cSJim Jagielski 	//!	rWin richtig auswerten
904*b1cdbd2cSJim Jagielski 	//!	ggf Zoom aendern
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski 	if ( pViewData && pViewData->GetActiveWin() == &rWin )
907*b1cdbd2cSJim Jagielski 		pViewData->GetView()->MakeVisible( rRect );
908*b1cdbd2cSJim Jagielski }
909*b1cdbd2cSJim Jagielski 
DeleteMarked()910*b1cdbd2cSJim Jagielski void ScDrawView::DeleteMarked()
911*b1cdbd2cSJim Jagielski {
912*b1cdbd2cSJim Jagielski     // try to delete a note caption object with its cell note in the Calc document
913*b1cdbd2cSJim Jagielski     ScDrawObjData* pCaptData = 0;
914*b1cdbd2cSJim Jagielski     if( SdrObject* pCaptObj = GetMarkedNoteCaption( &pCaptData ) )
915*b1cdbd2cSJim Jagielski     {
916*b1cdbd2cSJim Jagielski         (void)pCaptObj; // prevent 'unused variable' compiler warning in pro builds
917*b1cdbd2cSJim Jagielski         ScDrawLayer* pDrawLayer = pDoc->GetDrawLayer();
918*b1cdbd2cSJim Jagielski         ScDocShell* pDocShell = pViewData ? pViewData->GetDocShell() : 0;
919*b1cdbd2cSJim Jagielski         ::svl::IUndoManager* pUndoMgr = pDocShell ? pDocShell->GetUndoManager() : 0;
920*b1cdbd2cSJim Jagielski         bool bUndo = pDrawLayer && pDocShell && pUndoMgr && pDoc->IsUndoEnabled();
921*b1cdbd2cSJim Jagielski 
922*b1cdbd2cSJim Jagielski         // remove the cell note from document, we are its owner now
923*b1cdbd2cSJim Jagielski         ScPostIt* pNote = pDoc->ReleaseNote( pCaptData->maStart );
924*b1cdbd2cSJim Jagielski         DBG_ASSERT( pNote, "ScDrawView::DeleteMarked - cell note missing in document" );
925*b1cdbd2cSJim Jagielski         if( pNote )
926*b1cdbd2cSJim Jagielski         {
927*b1cdbd2cSJim Jagielski             // rescue note data for undo (with pointer to caption object)
928*b1cdbd2cSJim Jagielski             ScNoteData aNoteData = pNote->GetNoteData();
929*b1cdbd2cSJim Jagielski             DBG_ASSERT( aNoteData.mpCaption == pCaptObj, "ScDrawView::DeleteMarked - caption object does not match" );
930*b1cdbd2cSJim Jagielski             // collect the drawing undo action created while deleting the note
931*b1cdbd2cSJim Jagielski             if( bUndo )
932*b1cdbd2cSJim Jagielski                 pDrawLayer->BeginCalcUndo(false);
933*b1cdbd2cSJim Jagielski             // delete the note (already removed from document above)
934*b1cdbd2cSJim Jagielski             delete pNote;
935*b1cdbd2cSJim Jagielski             // add the undo action for the note
936*b1cdbd2cSJim Jagielski             if( bUndo )
937*b1cdbd2cSJim Jagielski                 pUndoMgr->AddUndoAction( new ScUndoReplaceNote( *pDocShell, pCaptData->maStart, aNoteData, false, pDrawLayer->GetCalcUndo() ) );
938*b1cdbd2cSJim Jagielski             // repaint the cell to get rid of the note marker
939*b1cdbd2cSJim Jagielski             if( pDocShell )
940*b1cdbd2cSJim Jagielski                 pDocShell->PostPaintCell( pCaptData->maStart );
941*b1cdbd2cSJim Jagielski             // done, return now to skip call of FmFormView::DeleteMarked()
942*b1cdbd2cSJim Jagielski             return;
943*b1cdbd2cSJim Jagielski         }
944*b1cdbd2cSJim Jagielski     }
945*b1cdbd2cSJim Jagielski 
946*b1cdbd2cSJim Jagielski     FmFormView::DeleteMarked();
947*b1cdbd2cSJim Jagielski }
948*b1cdbd2cSJim Jagielski 
ScEndTextEdit()949*b1cdbd2cSJim Jagielski SdrEndTextEditKind ScDrawView::ScEndTextEdit()
950*b1cdbd2cSJim Jagielski {
951*b1cdbd2cSJim Jagielski 	sal_Bool bIsTextEdit = IsTextEdit();
952*b1cdbd2cSJim Jagielski 	SdrEndTextEditKind eKind = SdrEndTextEdit();
953*b1cdbd2cSJim Jagielski 
954*b1cdbd2cSJim Jagielski 	if ( bIsTextEdit && pViewData )
955*b1cdbd2cSJim Jagielski 		pViewData->GetViewShell()->SetDrawTextUndo(NULL);	// "normaler" Undo-Manager
956*b1cdbd2cSJim Jagielski 
957*b1cdbd2cSJim Jagielski 	return eKind;
958*b1cdbd2cSJim Jagielski }
959*b1cdbd2cSJim Jagielski 
MarkDropObj(SdrObject * pObj)960*b1cdbd2cSJim Jagielski void ScDrawView::MarkDropObj( SdrObject* pObj )
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski 	if ( pDropMarkObj != pObj )
963*b1cdbd2cSJim Jagielski 	{
964*b1cdbd2cSJim Jagielski 		pDropMarkObj = pObj;
965*b1cdbd2cSJim Jagielski 		ImplClearCalcDropMarker();
966*b1cdbd2cSJim Jagielski 
967*b1cdbd2cSJim Jagielski 		if(pDropMarkObj)
968*b1cdbd2cSJim Jagielski 		{
969*b1cdbd2cSJim Jagielski 			pDropMarker = new SdrDropMarkerOverlay(*this, *pDropMarkObj);
970*b1cdbd2cSJim Jagielski 		}
971*b1cdbd2cSJim Jagielski 	}
972*b1cdbd2cSJim Jagielski }
973*b1cdbd2cSJim Jagielski 
974*b1cdbd2cSJim Jagielski // support enhanced text edit for draw objects
getSdrUndoManagerForEnhancedTextEdit() const975*b1cdbd2cSJim Jagielski SdrUndoManager* ScDrawView::getSdrUndoManagerForEnhancedTextEdit() const
976*b1cdbd2cSJim Jagielski {
977*b1cdbd2cSJim Jagielski     return pDoc ? dynamic_cast< SdrUndoManager* >(pDoc->GetUndoManager()) : 0;
978*b1cdbd2cSJim Jagielski }
979*b1cdbd2cSJim Jagielski 
980*b1cdbd2cSJim Jagielski // #123922# helper to apply a Graphic to an existing SdrObject
ApplyGraphicToObject(SdrObject & rHitObject,const Graphic & rGraphic,const String & rBeginUndoText,const String & rFile,const String & rFilter)981*b1cdbd2cSJim Jagielski SdrObject* ScDrawView::ApplyGraphicToObject(
982*b1cdbd2cSJim Jagielski     SdrObject& rHitObject,
983*b1cdbd2cSJim Jagielski     const Graphic& rGraphic,
984*b1cdbd2cSJim Jagielski     const String& rBeginUndoText,
985*b1cdbd2cSJim Jagielski     const String& rFile,
986*b1cdbd2cSJim Jagielski     const String& rFilter)
987*b1cdbd2cSJim Jagielski {
988*b1cdbd2cSJim Jagielski     if(dynamic_cast< SdrGrafObj* >(&rHitObject))
989*b1cdbd2cSJim Jagielski     {
990*b1cdbd2cSJim Jagielski         SdrGrafObj* pNewGrafObj = (SdrGrafObj*)rHitObject.Clone();
991*b1cdbd2cSJim Jagielski 
992*b1cdbd2cSJim Jagielski         pNewGrafObj->SetGraphic(rGraphic);
993*b1cdbd2cSJim Jagielski         BegUndo(rBeginUndoText);
994*b1cdbd2cSJim Jagielski         ReplaceObjectAtView(&rHitObject, *GetSdrPageView(), pNewGrafObj);
995*b1cdbd2cSJim Jagielski 
996*b1cdbd2cSJim Jagielski         // set in all cases - the Clone() will have copied an existing link (!)
997*b1cdbd2cSJim Jagielski         pNewGrafObj->SetGraphicLink( rFile, rFilter );
998*b1cdbd2cSJim Jagielski 
999*b1cdbd2cSJim Jagielski         EndUndo();
1000*b1cdbd2cSJim Jagielski         return pNewGrafObj;
1001*b1cdbd2cSJim Jagielski     }
1002*b1cdbd2cSJim Jagielski     else if(rHitObject.IsClosedObj() && !dynamic_cast< SdrOle2Obj* >(&rHitObject))
1003*b1cdbd2cSJim Jagielski     {
1004*b1cdbd2cSJim Jagielski         AddUndo(new SdrUndoAttrObj(rHitObject));
1005*b1cdbd2cSJim Jagielski 
1006*b1cdbd2cSJim Jagielski         SfxItemSet aSet(GetModel()->GetItemPool(), XATTR_FILLSTYLE, XATTR_FILLBITMAP);
1007*b1cdbd2cSJim Jagielski 
1008*b1cdbd2cSJim Jagielski         aSet.Put(XFillStyleItem(XFILL_BITMAP));
1009*b1cdbd2cSJim Jagielski         aSet.Put(XFillBitmapItem(String(), rGraphic));
1010*b1cdbd2cSJim Jagielski         rHitObject.SetMergedItemSetAndBroadcast(aSet);
1011*b1cdbd2cSJim Jagielski         return &rHitObject;
1012*b1cdbd2cSJim Jagielski     }
1013*b1cdbd2cSJim Jagielski 
1014*b1cdbd2cSJim Jagielski     return NULL;
1015*b1cdbd2cSJim Jagielski }
1016*b1cdbd2cSJim Jagielski 
1017*b1cdbd2cSJim Jagielski // eof
1018