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