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
28*b1cdbd2cSJim Jagielski
29*b1cdbd2cSJim Jagielski // INCLUDE ---------------------------------------------------------------
30*b1cdbd2cSJim Jagielski
31*b1cdbd2cSJim Jagielski #ifdef _MSC_VER
32*b1cdbd2cSJim Jagielski #pragma optimize ("", off)
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski
35*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
36*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
37*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
38*b1cdbd2cSJim Jagielski #include <svl/whiter.hxx>
39*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
40*b1cdbd2cSJim Jagielski #include <svl/languageoptions.hxx>
41*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
42*b1cdbd2cSJim Jagielski
43*b1cdbd2cSJim Jagielski #include "tabvwsh.hxx"
44*b1cdbd2cSJim Jagielski #include "drawattr.hxx"
45*b1cdbd2cSJim Jagielski #include "drawsh.hxx"
46*b1cdbd2cSJim Jagielski #include "drawview.hxx"
47*b1cdbd2cSJim Jagielski #include "fupoor.hxx"
48*b1cdbd2cSJim Jagielski #include "fuconrec.hxx"
49*b1cdbd2cSJim Jagielski #include "fuconpol.hxx"
50*b1cdbd2cSJim Jagielski #include "fuconarc.hxx"
51*b1cdbd2cSJim Jagielski #include "fuconuno.hxx"
52*b1cdbd2cSJim Jagielski #include "fusel.hxx"
53*b1cdbd2cSJim Jagielski #include "futext.hxx"
54*b1cdbd2cSJim Jagielski #include "fumark.hxx"
55*b1cdbd2cSJim Jagielski #include "fuinsert.hxx"
56*b1cdbd2cSJim Jagielski #include "global.hxx"
57*b1cdbd2cSJim Jagielski #include "sc.hrc"
58*b1cdbd2cSJim Jagielski #include "scmod.hxx"
59*b1cdbd2cSJim Jagielski #include "appoptio.hxx"
60*b1cdbd2cSJim Jagielski
61*b1cdbd2cSJim Jagielski // #98185# Create default drawing objects via keyboard
62*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
63*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
64*b1cdbd2cSJim Jagielski #include <svx/svdpage.hxx>
65*b1cdbd2cSJim Jagielski #include <fuconcustomshape.hxx>
66*b1cdbd2cSJim Jagielski
67*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------
68*b1cdbd2cSJim Jagielski
GetDrawView() const69*b1cdbd2cSJim Jagielski SdrView* __EXPORT ScTabViewShell::GetDrawView() const
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski return ((ScTabViewShell*)this)->GetScDrawView(); // GetScDrawView ist nicht-const
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski
WindowChanged()74*b1cdbd2cSJim Jagielski void ScTabViewShell::WindowChanged()
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski Window* pWin = GetActiveWin();
77*b1cdbd2cSJim Jagielski
78*b1cdbd2cSJim Jagielski ScDrawView* pDrView = GetScDrawView();
79*b1cdbd2cSJim Jagielski if (pDrView)
80*b1cdbd2cSJim Jagielski pDrView->SetActualWin(pWin);
81*b1cdbd2cSJim Jagielski
82*b1cdbd2cSJim Jagielski FuPoor* pFunc = GetDrawFuncPtr();
83*b1cdbd2cSJim Jagielski if (pFunc)
84*b1cdbd2cSJim Jagielski pFunc->SetWindow(pWin);
85*b1cdbd2cSJim Jagielski
86*b1cdbd2cSJim Jagielski // when font from InputContext is used,
87*b1cdbd2cSJim Jagielski // this must be moved to change of cursor position:
88*b1cdbd2cSJim Jagielski UpdateInputContext();
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski
ExecDraw(SfxRequest & rReq)91*b1cdbd2cSJim Jagielski void ScTabViewShell::ExecDraw(SfxRequest& rReq)
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski SC_MOD()->InputEnterHandler();
94*b1cdbd2cSJim Jagielski UpdateInputHandler();
95*b1cdbd2cSJim Jagielski
96*b1cdbd2cSJim Jagielski MakeDrawLayer();
97*b1cdbd2cSJim Jagielski
98*b1cdbd2cSJim Jagielski ScTabView* pTabView = GetViewData()->GetView();
99*b1cdbd2cSJim Jagielski SfxBindings& rBindings = GetViewFrame()->GetBindings();
100*b1cdbd2cSJim Jagielski
101*b1cdbd2cSJim Jagielski Window* pWin = pTabView->GetActiveWin();
102*b1cdbd2cSJim Jagielski ScDrawView* pView = pTabView->GetScDrawView();
103*b1cdbd2cSJim Jagielski SdrModel* pDoc = pView->GetModel();
104*b1cdbd2cSJim Jagielski
105*b1cdbd2cSJim Jagielski const SfxItemSet *pArgs = rReq.GetArgs();
106*b1cdbd2cSJim Jagielski sal_uInt16 nNewId = rReq.GetSlot();
107*b1cdbd2cSJim Jagielski
108*b1cdbd2cSJim Jagielski if ( nNewId == SID_DRAW_CHART )
109*b1cdbd2cSJim Jagielski {
110*b1cdbd2cSJim Jagielski // #i71254# directly insert a chart instead of drawing its output rectangle
111*b1cdbd2cSJim Jagielski FuInsertChart(this, pWin, pView, pDoc, rReq);
112*b1cdbd2cSJim Jagielski return;
113*b1cdbd2cSJim Jagielski }
114*b1cdbd2cSJim Jagielski
115*b1cdbd2cSJim Jagielski //
116*b1cdbd2cSJim Jagielski // Pseudo-Slots von Draw-Toolbox auswerten
117*b1cdbd2cSJim Jagielski //! wird das ueberhaupt noch gebraucht ?????
118*b1cdbd2cSJim Jagielski //
119*b1cdbd2cSJim Jagielski
120*b1cdbd2cSJim Jagielski if (nNewId == SID_INSERT_DRAW && pArgs)
121*b1cdbd2cSJim Jagielski {
122*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
123*b1cdbd2cSJim Jagielski if ( pArgs->GetItemState( SID_INSERT_DRAW, sal_True, &pItem ) == SFX_ITEM_SET &&
124*b1cdbd2cSJim Jagielski pItem->ISA( SvxDrawToolItem ) )
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski SvxDrawToolEnum eSel = (SvxDrawToolEnum)((const SvxDrawToolItem*)pItem)->GetValue();
127*b1cdbd2cSJim Jagielski switch (eSel)
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_SELECT: nNewId = SID_OBJECT_SELECT; break;
130*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_LINE: nNewId = SID_DRAW_LINE; break;
131*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_RECT: nNewId = SID_DRAW_RECT; break;
132*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_ELLIPSE: nNewId = SID_DRAW_ELLIPSE; break;
133*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_POLYGON_NOFILL: nNewId = SID_DRAW_POLYGON_NOFILL; break;
134*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_BEZIER_NOFILL: nNewId = SID_DRAW_BEZIER_NOFILL; break;
135*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_FREELINE_NOFILL: nNewId = SID_DRAW_FREELINE_NOFILL; break;
136*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_ARC: nNewId = SID_DRAW_ARC; break;
137*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_PIE: nNewId = SID_DRAW_PIE; break;
138*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_CIRCLECUT: nNewId = SID_DRAW_CIRCLECUT; break;
139*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_TEXT: nNewId = SID_DRAW_TEXT; break;
140*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_TEXT_VERTICAL: nNewId = SID_DRAW_TEXT_VERTICAL; break;
141*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_TEXT_MARQUEE: nNewId = SID_DRAW_TEXT_MARQUEE; break;
142*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_CAPTION: nNewId = SID_DRAW_CAPTION; break;
143*b1cdbd2cSJim Jagielski case SVX_SNAP_DRAW_CAPTION_VERTICAL: nNewId = SID_DRAW_CAPTION_VERTICAL; break;
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski }
146*b1cdbd2cSJim Jagielski else // sal_uInt16-Item vom Controller
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski rReq.Done();
149*b1cdbd2cSJim Jagielski return;
150*b1cdbd2cSJim Jagielski }
151*b1cdbd2cSJim Jagielski }
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski if ( nNewId == SID_DRAW_SELECT )
154*b1cdbd2cSJim Jagielski nNewId = SID_OBJECT_SELECT;
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski sal_uInt16 nNewFormId = 0;
157*b1cdbd2cSJim Jagielski if ( nNewId == SID_FM_CREATE_CONTROL && pArgs )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
160*b1cdbd2cSJim Jagielski if ( pArgs->GetItemState( SID_FM_CONTROL_IDENTIFIER, sal_True, &pItem ) == SFX_ITEM_SET &&
161*b1cdbd2cSJim Jagielski pItem->ISA( SfxUInt16Item ) )
162*b1cdbd2cSJim Jagielski nNewFormId = ((const SfxUInt16Item*)pItem)->GetValue();
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski
165*b1cdbd2cSJim Jagielski String sStringItemValue;
166*b1cdbd2cSJim Jagielski if ( pArgs )
167*b1cdbd2cSJim Jagielski {
168*b1cdbd2cSJim Jagielski const SfxPoolItem* pItem;
169*b1cdbd2cSJim Jagielski if ( pArgs->GetItemState( nNewId, sal_True, &pItem ) == SFX_ITEM_SET && pItem->ISA( SfxStringItem ) )
170*b1cdbd2cSJim Jagielski sStringItemValue = static_cast<const SfxStringItem*>(pItem)->GetValue();
171*b1cdbd2cSJim Jagielski }
172*b1cdbd2cSJim Jagielski bool bSwitchCustom = ( sStringItemValue.Len() && sDrawCustom.Len() && sStringItemValue != sDrawCustom );
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski if (nNewId == SID_INSERT_FRAME) // vom Tbx-Button
175*b1cdbd2cSJim Jagielski nNewId = SID_DRAW_TEXT;
176*b1cdbd2cSJim Jagielski
177*b1cdbd2cSJim Jagielski // #97016# CTRL-SID_OBJECT_SELECT is used to select the first object,
178*b1cdbd2cSJim Jagielski // but not if SID_OBJECT_SELECT is the result of clicking a create function again,
179*b1cdbd2cSJim Jagielski // so this must be tested before changing nNewId below.
180*b1cdbd2cSJim Jagielski sal_Bool bSelectFirst = ( nNewId == SID_OBJECT_SELECT && (rReq.GetModifier() & KEY_MOD1) );
181*b1cdbd2cSJim Jagielski
182*b1cdbd2cSJim Jagielski sal_Bool bEx = IsDrawSelMode();
183*b1cdbd2cSJim Jagielski if ( rReq.GetModifier() & KEY_MOD1 )
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski // #97016# always allow keyboard selection also on background layer
186*b1cdbd2cSJim Jagielski // #98185# also allow creation of default objects if the same object type
187*b1cdbd2cSJim Jagielski // was already active
188*b1cdbd2cSJim Jagielski bEx = sal_True;
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski else if ( nNewId == nDrawSfxId && ( nNewId != SID_FM_CREATE_CONTROL ||
191*b1cdbd2cSJim Jagielski nNewFormId == nFormSfxId || nNewFormId == 0 ) && !bSwitchCustom )
192*b1cdbd2cSJim Jagielski {
193*b1cdbd2cSJim Jagielski // #i52871# if a different custom shape is selected, the slot id can be the same,
194*b1cdbd2cSJim Jagielski // so the custom shape type string has to be compared, too.
195*b1cdbd2cSJim Jagielski
196*b1cdbd2cSJim Jagielski // SID_FM_CREATE_CONTROL mit nNewFormId==0 (ohne Parameter) kommt beim Deaktivieren
197*b1cdbd2cSJim Jagielski // aus FuConstruct::SimpleMouseButtonUp
198*b1cdbd2cSJim Jagielski // #59280# Execute fuer die Form-Shell, um im Controller zu deselektieren
199*b1cdbd2cSJim Jagielski if ( nNewId == SID_FM_CREATE_CONTROL )
200*b1cdbd2cSJim Jagielski {
201*b1cdbd2cSJim Jagielski GetViewData()->GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
202*b1cdbd2cSJim Jagielski GetViewFrame()->GetBindings().InvalidateAll(sal_False);
203*b1cdbd2cSJim Jagielski //! was fuer einen Slot braucht der komische Controller wirklich, um das anzuzeigen????
204*b1cdbd2cSJim Jagielski }
205*b1cdbd2cSJim Jagielski
206*b1cdbd2cSJim Jagielski bEx = !bEx;
207*b1cdbd2cSJim Jagielski nNewId = SID_OBJECT_SELECT;
208*b1cdbd2cSJim Jagielski }
209*b1cdbd2cSJim Jagielski else
210*b1cdbd2cSJim Jagielski bEx = sal_True;
211*b1cdbd2cSJim Jagielski
212*b1cdbd2cSJim Jagielski if ( nDrawSfxId == SID_FM_CREATE_CONTROL && nNewId != nDrawSfxId )
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski // Wechsel von Control- zu Zeichenfunktion -> im Control-Controller deselektieren
215*b1cdbd2cSJim Jagielski GetViewData()->GetDispatcher().Execute(SID_FM_LEAVE_CREATE);
216*b1cdbd2cSJim Jagielski GetViewFrame()->GetBindings().InvalidateAll(sal_False);
217*b1cdbd2cSJim Jagielski //! was fuer einen Slot braucht der komische Controller wirklich, um das anzuzeigen????
218*b1cdbd2cSJim Jagielski }
219*b1cdbd2cSJim Jagielski
220*b1cdbd2cSJim Jagielski SetDrawSelMode(bEx);
221*b1cdbd2cSJim Jagielski
222*b1cdbd2cSJim Jagielski pView->LockBackgroundLayer( !bEx );
223*b1cdbd2cSJim Jagielski
224*b1cdbd2cSJim Jagielski if ( bSelectFirst )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski // #97016# select first draw object if none is selected yet
227*b1cdbd2cSJim Jagielski if(!pView->AreObjectsMarked())
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski // select first object
230*b1cdbd2cSJim Jagielski pView->UnmarkAllObj();
231*b1cdbd2cSJim Jagielski pView->MarkNextObj(sal_True);
232*b1cdbd2cSJim Jagielski
233*b1cdbd2cSJim Jagielski // ...and make it visible
234*b1cdbd2cSJim Jagielski if(pView->AreObjectsMarked())
235*b1cdbd2cSJim Jagielski pView->MakeVisible(pView->GetAllMarkedRect(), *pWin);
236*b1cdbd2cSJim Jagielski }
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski
239*b1cdbd2cSJim Jagielski nDrawSfxId = nNewId;
240*b1cdbd2cSJim Jagielski sDrawCustom.Erase(); // value is set below for custom shapes
241*b1cdbd2cSJim Jagielski
242*b1cdbd2cSJim Jagielski if ( nNewId != SID_DRAW_CHART ) // Chart nicht mit DrawShell
243*b1cdbd2cSJim Jagielski {
244*b1cdbd2cSJim Jagielski if ( nNewId == SID_DRAW_TEXT || nNewId == SID_DRAW_TEXT_VERTICAL ||
245*b1cdbd2cSJim Jagielski nNewId == SID_DRAW_TEXT_MARQUEE || nNewId == SID_DRAW_NOTEEDIT )
246*b1cdbd2cSJim Jagielski SetDrawTextShell( sal_True );
247*b1cdbd2cSJim Jagielski else
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski if ( bEx || pView->GetMarkedObjectList().GetMarkCount() != 0 )
250*b1cdbd2cSJim Jagielski SetDrawShellOrSub();
251*b1cdbd2cSJim Jagielski else
252*b1cdbd2cSJim Jagielski SetDrawShell( sal_False );
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski }
255*b1cdbd2cSJim Jagielski
256*b1cdbd2cSJim Jagielski if (pTabView->GetDrawFuncPtr())
257*b1cdbd2cSJim Jagielski {
258*b1cdbd2cSJim Jagielski if (pTabView->GetDrawFuncOldPtr() != pTabView->GetDrawFuncPtr())
259*b1cdbd2cSJim Jagielski delete pTabView->GetDrawFuncOldPtr();
260*b1cdbd2cSJim Jagielski
261*b1cdbd2cSJim Jagielski pTabView->GetDrawFuncPtr()->Deactivate();
262*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncOldPtr(pTabView->GetDrawFuncPtr());
263*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(NULL);
264*b1cdbd2cSJim Jagielski }
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski SfxRequest aNewReq(rReq);
267*b1cdbd2cSJim Jagielski aNewReq.SetSlot(nDrawSfxId);
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielski switch (nNewId)
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski case SID_OBJECT_SELECT:
272*b1cdbd2cSJim Jagielski //@#70206# Nicht immer zurueckschalten
273*b1cdbd2cSJim Jagielski if(pView->GetMarkedObjectList().GetMarkCount() == 0) SetDrawShell(bEx);
274*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuSelection(this, pWin, pView, pDoc, aNewReq));
275*b1cdbd2cSJim Jagielski break;
276*b1cdbd2cSJim Jagielski
277*b1cdbd2cSJim Jagielski case SID_DRAW_LINE:
278*b1cdbd2cSJim Jagielski case SID_DRAW_RECT:
279*b1cdbd2cSJim Jagielski case SID_DRAW_ELLIPSE:
280*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuConstRectangle(this, pWin, pView, pDoc, aNewReq));
281*b1cdbd2cSJim Jagielski break;
282*b1cdbd2cSJim Jagielski
283*b1cdbd2cSJim Jagielski case SID_DRAW_CAPTION:
284*b1cdbd2cSJim Jagielski case SID_DRAW_CAPTION_VERTICAL:
285*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuConstRectangle(this, pWin, pView, pDoc, aNewReq));
286*b1cdbd2cSJim Jagielski pView->SetFrameDragSingles( sal_False );
287*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_BEZIER_EDIT );
288*b1cdbd2cSJim Jagielski break;
289*b1cdbd2cSJim Jagielski
290*b1cdbd2cSJim Jagielski case SID_DRAW_POLYGON:
291*b1cdbd2cSJim Jagielski case SID_DRAW_POLYGON_NOFILL:
292*b1cdbd2cSJim Jagielski case SID_DRAW_BEZIER_NOFILL:
293*b1cdbd2cSJim Jagielski case SID_DRAW_FREELINE_NOFILL:
294*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuConstPolygon(this, pWin, pView, pDoc, aNewReq));
295*b1cdbd2cSJim Jagielski break;
296*b1cdbd2cSJim Jagielski
297*b1cdbd2cSJim Jagielski case SID_DRAW_ARC:
298*b1cdbd2cSJim Jagielski case SID_DRAW_PIE:
299*b1cdbd2cSJim Jagielski case SID_DRAW_CIRCLECUT:
300*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuConstArc(this, pWin, pView, pDoc, aNewReq));
301*b1cdbd2cSJim Jagielski break;
302*b1cdbd2cSJim Jagielski
303*b1cdbd2cSJim Jagielski case SID_DRAW_TEXT:
304*b1cdbd2cSJim Jagielski case SID_DRAW_TEXT_VERTICAL:
305*b1cdbd2cSJim Jagielski case SID_DRAW_TEXT_MARQUEE:
306*b1cdbd2cSJim Jagielski case SID_DRAW_NOTEEDIT:
307*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuText(this, pWin, pView, pDoc, aNewReq));
308*b1cdbd2cSJim Jagielski break;
309*b1cdbd2cSJim Jagielski
310*b1cdbd2cSJim Jagielski case SID_FM_CREATE_CONTROL:
311*b1cdbd2cSJim Jagielski SetDrawFormShell(sal_True);
312*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuConstUnoControl(this, pWin, pView, pDoc, aNewReq));
313*b1cdbd2cSJim Jagielski nFormSfxId = nNewFormId;
314*b1cdbd2cSJim Jagielski break;
315*b1cdbd2cSJim Jagielski
316*b1cdbd2cSJim Jagielski case SID_DRAW_CHART:
317*b1cdbd2cSJim Jagielski //UNUSED2008-05 bChartDlgIsEdit = sal_False;
318*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr(new FuMarkRect(this, pWin, pView, pDoc, aNewReq));
319*b1cdbd2cSJim Jagielski break;
320*b1cdbd2cSJim Jagielski
321*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_BASIC :
322*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_SYMBOL :
323*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_ARROW :
324*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_FLOWCHART :
325*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_CALLOUT :
326*b1cdbd2cSJim Jagielski case SID_DRAWTBX_CS_STAR :
327*b1cdbd2cSJim Jagielski case SID_DRAW_CS_ID :
328*b1cdbd2cSJim Jagielski {
329*b1cdbd2cSJim Jagielski pTabView->SetDrawFuncPtr( new FuConstCustomShape( this, pWin, pView, pDoc, aNewReq ));
330*b1cdbd2cSJim Jagielski if ( nNewId != SID_DRAW_CS_ID )
331*b1cdbd2cSJim Jagielski {
332*b1cdbd2cSJim Jagielski SFX_REQUEST_ARG( rReq, pEnumCommand, SfxStringItem, nNewId, sal_False );
333*b1cdbd2cSJim Jagielski if ( pEnumCommand )
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski aCurrShapeEnumCommand[ nNewId - SID_DRAWTBX_CS_BASIC ] = pEnumCommand->GetValue();
336*b1cdbd2cSJim Jagielski SfxBindings& rBind = GetViewFrame()->GetBindings();
337*b1cdbd2cSJim Jagielski rBind.Invalidate( nNewId );
338*b1cdbd2cSJim Jagielski rBind.Update( nNewId );
339*b1cdbd2cSJim Jagielski
340*b1cdbd2cSJim Jagielski sDrawCustom = pEnumCommand->GetValue(); // to detect when a different shape type is selected
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski }
343*b1cdbd2cSJim Jagielski }
344*b1cdbd2cSJim Jagielski break;
345*b1cdbd2cSJim Jagielski
346*b1cdbd2cSJim Jagielski default:
347*b1cdbd2cSJim Jagielski break;
348*b1cdbd2cSJim Jagielski }
349*b1cdbd2cSJim Jagielski
350*b1cdbd2cSJim Jagielski if (pTabView->GetDrawFuncPtr())
351*b1cdbd2cSJim Jagielski pTabView->GetDrawFuncPtr()->Activate();
352*b1cdbd2cSJim Jagielski
353*b1cdbd2cSJim Jagielski rReq.Done();
354*b1cdbd2cSJim Jagielski
355*b1cdbd2cSJim Jagielski rBindings.Invalidate( SID_INSERT_DRAW );
356*b1cdbd2cSJim Jagielski rBindings.Update( SID_INSERT_DRAW );
357*b1cdbd2cSJim Jagielski
358*b1cdbd2cSJim Jagielski // #98185# Create default drawing objects via keyboard
359*b1cdbd2cSJim Jagielski // with qualifier construct directly
360*b1cdbd2cSJim Jagielski FuPoor* pFuActual = GetDrawFuncPtr();
361*b1cdbd2cSJim Jagielski
362*b1cdbd2cSJim Jagielski if(pFuActual && (rReq.GetModifier() & KEY_MOD1))
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski // #98185# Create default drawing objects via keyboard
365*b1cdbd2cSJim Jagielski const ScAppOptions& rAppOpt = SC_MOD()->GetAppOptions();
366*b1cdbd2cSJim Jagielski sal_uInt32 nDefaultObjectSizeWidth = rAppOpt.GetDefaultObjectSizeWidth();
367*b1cdbd2cSJim Jagielski sal_uInt32 nDefaultObjectSizeHeight = rAppOpt.GetDefaultObjectSizeHeight();
368*b1cdbd2cSJim Jagielski
369*b1cdbd2cSJim Jagielski // calc position and size
370*b1cdbd2cSJim Jagielski Rectangle aVisArea = pWin->PixelToLogic(Rectangle(Point(0,0), pWin->GetOutputSizePixel()));
371*b1cdbd2cSJim Jagielski Point aPagePos = aVisArea.Center();
372*b1cdbd2cSJim Jagielski aPagePos.X() -= nDefaultObjectSizeWidth / 2;
373*b1cdbd2cSJim Jagielski aPagePos.Y() -= nDefaultObjectSizeHeight / 2;
374*b1cdbd2cSJim Jagielski Rectangle aNewObjectRectangle(aPagePos, Size(nDefaultObjectSizeWidth, nDefaultObjectSizeHeight));
375*b1cdbd2cSJim Jagielski
376*b1cdbd2cSJim Jagielski ScDrawView* pDrView = GetScDrawView();
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski if(pDrView)
379*b1cdbd2cSJim Jagielski {
380*b1cdbd2cSJim Jagielski SdrPageView* pPageView = pDrView->GetSdrPageView();
381*b1cdbd2cSJim Jagielski
382*b1cdbd2cSJim Jagielski if(pPageView)
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski // create the default object
385*b1cdbd2cSJim Jagielski SdrObject* pObj = pFuActual->CreateDefaultObject(nNewId, aNewObjectRectangle);
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski if(pObj)
388*b1cdbd2cSJim Jagielski {
389*b1cdbd2cSJim Jagielski // insert into page
390*b1cdbd2cSJim Jagielski pView->InsertObjectAtView(pObj, *pPageView);
391*b1cdbd2cSJim Jagielski
392*b1cdbd2cSJim Jagielski if ( nNewId == SID_DRAW_CAPTION || nNewId == SID_DRAW_CAPTION_VERTICAL )
393*b1cdbd2cSJim Jagielski {
394*b1cdbd2cSJim Jagielski // #105815# use KeyInput to start edit mode (FuText is created).
395*b1cdbd2cSJim Jagielski // For FuText objects, edit mode is handled within CreateDefaultObject.
396*b1cdbd2cSJim Jagielski // KEY_F2 is handled in FuDraw::KeyInput.
397*b1cdbd2cSJim Jagielski
398*b1cdbd2cSJim Jagielski pFuActual->KeyInput( KeyEvent( 0, KeyCode( KEY_F2 ) ) );
399*b1cdbd2cSJim Jagielski }
400*b1cdbd2cSJim Jagielski }
401*b1cdbd2cSJim Jagielski }
402*b1cdbd2cSJim Jagielski }
403*b1cdbd2cSJim Jagielski }
404*b1cdbd2cSJim Jagielski }
405*b1cdbd2cSJim Jagielski
GetDrawState(SfxItemSet & rSet)406*b1cdbd2cSJim Jagielski void ScTabViewShell::GetDrawState(SfxItemSet &rSet)
407*b1cdbd2cSJim Jagielski {
408*b1cdbd2cSJim Jagielski SfxWhichIter aIter(rSet);
409*b1cdbd2cSJim Jagielski sal_uInt16 nWhich = aIter.FirstWhich();
410*b1cdbd2cSJim Jagielski
411*b1cdbd2cSJim Jagielski while ( nWhich )
412*b1cdbd2cSJim Jagielski {
413*b1cdbd2cSJim Jagielski switch ( nWhich )
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski case SID_INSERT_DRAW:
416*b1cdbd2cSJim Jagielski {
417*b1cdbd2cSJim Jagielski // SID_OBJECT_SELECT nur, wenn "harter" Selektionsmodus
418*b1cdbd2cSJim Jagielski sal_uInt16 nPutId = nDrawSfxId;
419*b1cdbd2cSJim Jagielski if ( nPutId == SID_OBJECT_SELECT && !IsDrawSelMode() )
420*b1cdbd2cSJim Jagielski nPutId = USHRT_MAX;
421*b1cdbd2cSJim Jagielski // nur die Images, die auch auf dem Controller liegen
422*b1cdbd2cSJim Jagielski if ( nPutId != SID_OBJECT_SELECT &&
423*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_LINE &&
424*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_RECT &&
425*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_ELLIPSE &&
426*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_POLYGON_NOFILL &&
427*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_BEZIER_NOFILL &&
428*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_FREELINE_NOFILL &&
429*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_ARC &&
430*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_PIE &&
431*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_CIRCLECUT &&
432*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_TEXT &&
433*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_TEXT_VERTICAL &&
434*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_TEXT_MARQUEE &&
435*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_CAPTION &&
436*b1cdbd2cSJim Jagielski nPutId != SID_DRAW_CAPTION_VERTICAL )
437*b1cdbd2cSJim Jagielski nPutId = USHRT_MAX;
438*b1cdbd2cSJim Jagielski SfxAllEnumItem aItem( nWhich, nPutId );
439*b1cdbd2cSJim Jagielski if ( !SvtLanguageOptions().IsVerticalTextEnabled() )
440*b1cdbd2cSJim Jagielski {
441*b1cdbd2cSJim Jagielski aItem.DisableValue( SID_DRAW_TEXT_VERTICAL );
442*b1cdbd2cSJim Jagielski aItem.DisableValue( SID_DRAW_CAPTION_VERTICAL );
443*b1cdbd2cSJim Jagielski }
444*b1cdbd2cSJim Jagielski rSet.Put( aItem );
445*b1cdbd2cSJim Jagielski }
446*b1cdbd2cSJim Jagielski break;
447*b1cdbd2cSJim Jagielski
448*b1cdbd2cSJim Jagielski case SID_DRAW_CHART:
449*b1cdbd2cSJim Jagielski {
450*b1cdbd2cSJim Jagielski sal_Bool bOle = GetViewFrame()->GetFrame().IsInPlace();
451*b1cdbd2cSJim Jagielski if ( bOle || !SvtModuleOptions().IsChart() )
452*b1cdbd2cSJim Jagielski rSet.DisableItem( nWhich );
453*b1cdbd2cSJim Jagielski }
454*b1cdbd2cSJim Jagielski break;
455*b1cdbd2cSJim Jagielski
456*b1cdbd2cSJim Jagielski case SID_OBJECT_SELECT: // wichtig fuer den ollen Control-Controller
457*b1cdbd2cSJim Jagielski rSet.Put( SfxBoolItem( nWhich, nDrawSfxId == SID_OBJECT_SELECT && IsDrawSelMode() ) );
458*b1cdbd2cSJim Jagielski break;
459*b1cdbd2cSJim Jagielski }
460*b1cdbd2cSJim Jagielski nWhich = aIter.NextWhich();
461*b1cdbd2cSJim Jagielski }
462*b1cdbd2cSJim Jagielski }
463*b1cdbd2cSJim Jagielski
SelectObject(const String & rName)464*b1cdbd2cSJim Jagielski sal_Bool ScTabViewShell::SelectObject( const String& rName )
465*b1cdbd2cSJim Jagielski {
466*b1cdbd2cSJim Jagielski ScDrawView* pView = GetViewData()->GetScDrawView();
467*b1cdbd2cSJim Jagielski if (!pView)
468*b1cdbd2cSJim Jagielski return sal_False;
469*b1cdbd2cSJim Jagielski
470*b1cdbd2cSJim Jagielski sal_Bool bFound = pView->SelectObject( rName );
471*b1cdbd2cSJim Jagielski // DrawShell etc. is handled in MarkListHasChanged
472*b1cdbd2cSJim Jagielski
473*b1cdbd2cSJim Jagielski return bFound;
474*b1cdbd2cSJim Jagielski }
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski
477*b1cdbd2cSJim Jagielski
478