Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 :
21 : #include "DrawViewShell.hxx"
22 : #include <vcl/wrkwin.hxx>
23 : #include <svx/xgrad.hxx>
24 : #include <svx/svdpagv.hxx>
25 : #include <svx/xlnwtit.hxx>
26 : #include <svx/xlndsit.hxx>
27 : #include <svx/xflhtit.hxx>
28 : #include <svx/xflgrit.hxx>
29 : #include <svx/xlnclit.hxx>
30 : #include <svx/xflclit.hxx>
31 : #include <sfx2/bindings.hxx>
32 :
33 : #include <sfx2/dispatch.hxx>
34 : #include <svl/intitem.hxx>
35 : #include <sfx2/app.hxx>
36 : #include <sfx2/request.hxx>
37 : #include <svl/stritem.hxx>
38 : #include <svx/svxids.hrc>
39 : #include <svx/xtable.hxx>
40 : #include <svx/gallery.hxx>
41 : #include <vcl/graph.hxx>
42 : #include <svx/svdograf.hxx>
43 : #include <svx/svdoole2.hxx>
44 : #include <sot/storage.hxx>
45 : #include <svl/whiter.hxx>
46 : #include <basic/sbstar.hxx>
47 :
48 : #include <sfx2/viewfrm.hxx>
49 :
50 :
51 : #include "app.hrc"
52 : #include "strings.hrc"
53 : #include "Window.hxx"
54 : #include "drawdoc.hxx"
55 : #include "drawview.hxx"
56 : #include "DrawDocShell.hxx"
57 : #include "sdresid.hxx"
58 : #include "fupoor.hxx"
59 :
60 : #include <svx/galleryitem.hxx>
61 : #include <com/sun/star/gallery/GalleryItemType.hpp>
62 :
63 : namespace sd {
64 :
65 :
66 0 : void DrawViewShell::ExecGallery(SfxRequest& rReq)
67 : {
68 : // nothing is executed during a slide show!
69 0 : if(HasCurrentFunction(SID_PRESENTATION))
70 0 : return;
71 :
72 0 : const SfxItemSet* pArgs = rReq.GetArgs();
73 :
74 0 : SFX_ITEMSET_ARG( pArgs, pGalleryItem, SvxGalleryItem, SID_GALLERY_FORMATS, false );
75 0 : if ( !pGalleryItem )
76 0 : return;
77 :
78 0 : GetDocSh()->SetWaitCursor( true );
79 :
80 0 : sal_Int8 nType( pGalleryItem->GetType() );
81 : // insert graphic
82 0 : if (nType == com::sun::star::gallery::GalleryItemType::GRAPHIC)
83 : {
84 0 : Graphic aGraphic( pGalleryItem->GetGraphic() );
85 :
86 : // reduce size if necessary
87 0 : Window aWindow (GetActiveWindow());
88 0 : aWindow.SetMapMode(aGraphic.GetPrefMapMode());
89 0 : Size aSizePix = aWindow.LogicToPixel(aGraphic.GetPrefSize());
90 0 : aWindow.SetMapMode( MapMode(MAP_100TH_MM) );
91 0 : Size aSize = aWindow.PixelToLogic(aSizePix);
92 :
93 : // constrain size to page size if necessary
94 0 : SdrPage* pPage = mpDrawView->GetSdrPageView()->GetPage();
95 0 : Size aPageSize = pPage->GetSize();
96 0 : aPageSize.Width() -= pPage->GetLftBorder() + pPage->GetRgtBorder();
97 0 : aPageSize.Height() -= pPage->GetUppBorder() + pPage->GetLwrBorder();
98 :
99 :
100 : // Falls Grafik zu gross, wird die Grafik
101 : // in die Seite eingepasst
102 0 : if ( ( ( aSize.Height() > aPageSize.Height() ) || ( aSize.Width() > aPageSize.Width() ) ) &&
103 0 : aSize.Height() && aPageSize.Height() )
104 : {
105 0 : float fGrfWH = (float)aSize.Width() /
106 0 : (float)aSize.Height();
107 0 : float fWinWH = (float)aPageSize.Width() /
108 0 : (float)aPageSize.Height();
109 :
110 : // constrain size to page size if necessary
111 0 : if ((fGrfWH != 0.F) && (fGrfWH < fWinWH))
112 : {
113 0 : aSize.Width() = (long)(aPageSize.Height() * fGrfWH);
114 0 : aSize.Height()= aPageSize.Height();
115 : }
116 : else
117 : {
118 0 : aSize.Width() = aPageSize.Width();
119 0 : aSize.Height()= (long)(aPageSize.Width() / fGrfWH);
120 : }
121 : }
122 :
123 : // set output rectangle for graphic
124 0 : Point aPnt ((aPageSize.Width() - aSize.Width()) / 2,
125 0 : (aPageSize.Height() - aSize.Height()) / 2);
126 0 : aPnt += Point(pPage->GetLftBorder(), pPage->GetUppBorder());
127 0 : Rectangle aRect (aPnt, aSize);
128 :
129 0 : SdrGrafObj* pGrafObj = NULL;
130 :
131 0 : sal_Bool bInsertNewObject = sal_True;
132 :
133 0 : if ( mpDrawView->AreObjectsMarked() )
134 : {
135 : // is there a empty graphic object?
136 0 : const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
137 :
138 0 : if (rMarkList.GetMarkCount() == 1)
139 : {
140 0 : SdrMark* pMark = rMarkList.GetMark(0);
141 0 : SdrObject* pObj = pMark->GetMarkedSdrObj();
142 :
143 0 : if (pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_GRAF)
144 : {
145 0 : pGrafObj = (SdrGrafObj*) pObj;
146 :
147 0 : if( pGrafObj->IsEmptyPresObj() )
148 : {
149 : // the empty graphic object gets a new graphic
150 0 : bInsertNewObject = sal_False;
151 :
152 0 : SdrGrafObj* pNewGrafObj = (SdrGrafObj*) pGrafObj->Clone();
153 0 : pNewGrafObj->SetEmptyPresObj(false);
154 0 : pNewGrafObj->SetOutlinerParaObject(NULL);
155 0 : pNewGrafObj->SetGraphic(aGraphic);
156 :
157 0 : OUString aStr(mpDrawView->GetDescriptionOfMarkedObjects());
158 0 : aStr += " " + SD_RESSTR(STR_UNDO_REPLACE);
159 0 : mpDrawView->BegUndo(aStr);
160 0 : SdrPageView* pPV = mpDrawView->GetSdrPageView();
161 0 : mpDrawView->ReplaceObjectAtView(pGrafObj, *pPV, pNewGrafObj);
162 0 : mpDrawView->EndUndo();
163 : }
164 : }
165 : }
166 : }
167 :
168 :
169 0 : if( bInsertNewObject )
170 : {
171 0 : pGrafObj = new SdrGrafObj(aGraphic, aRect);
172 0 : SdrPageView* pPV = mpDrawView->GetSdrPageView();
173 0 : mpDrawView->InsertObjectAtView(pGrafObj, *pPV, SDRINSERT_SETDEFLAYER);
174 0 : }
175 : }
176 : // insert sound
177 0 : else if( nType == com::sun::star::gallery::GalleryItemType::MEDIA )
178 : {
179 0 : const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, pGalleryItem->GetURL() );
180 0 : GetViewFrame()->GetDispatcher()->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_SYNCHRON, &aMediaURLItem, 0L );
181 : }
182 :
183 0 : GetDocSh()->SetWaitCursor( false );
184 : }
185 :
186 :
187 :
188 0 : void DrawViewShell::GetGalleryState(SfxItemSet& )
189 : {
190 0 : }
191 :
192 : /**
193 : * Edit macros for attribute configuration
194 : */
195 :
196 : /* the work flow to adjust the attributes is nearly everywhere the same
197 : 1. read existing attributes
198 : 2. read parameter from the basic-set
199 : 3. delete selected item from the attribute-set
200 : 4. create new attribute-item
201 : 5. insert item into set */
202 0 : void DrawViewShell::AttrExec (SfxRequest &rReq)
203 : {
204 : // nothing is executed during a slide show!
205 0 : if(HasCurrentFunction(SID_PRESENTATION))
206 0 : return;
207 :
208 0 : CheckLineTo (rReq);
209 :
210 0 : SfxBindings& rBindings = GetViewFrame()->GetBindings();
211 0 : SfxItemSet* pAttr = new SfxItemSet ( GetDoc()->GetPool() );
212 :
213 0 : GetView()->GetAttributes( *pAttr );
214 0 : const SfxItemSet* pArgs = rReq.GetArgs();
215 :
216 0 : switch (rReq.GetSlot ())
217 : {
218 : // set new fill-style
219 : case SID_SETFILLSTYLE :
220 0 : if (pArgs)
221 0 : if (pArgs->Count () == 1)
222 : {
223 0 : SFX_REQUEST_ARG (rReq, pFillStyle, SfxUInt32Item, ID_VAL_STYLE, false);
224 0 : if (CHECK_RANGE (XFILL_NONE, (sal_Int32)pFillStyle->GetValue (), XFILL_BITMAP))
225 : {
226 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
227 0 : pAttr->Put (XFillStyleItem ((XFillStyle) pFillStyle->GetValue ()), XATTR_FILLSTYLE);
228 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
229 : }
230 : #ifndef DISABLE_SCRIPTING
231 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
232 : #endif
233 0 : break;
234 : }
235 : #ifndef DISABLE_SCRIPTING
236 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
237 : #endif
238 0 : break;
239 :
240 : // determine new line style
241 : case SID_SETLINESTYLE :
242 0 : if (pArgs)
243 0 : if (pArgs->Count () == 1)
244 : {
245 0 : SFX_REQUEST_ARG (rReq, pLineStyle, SfxUInt32Item, ID_VAL_STYLE, false);
246 0 : if (CHECK_RANGE (XLINE_NONE, (sal_Int32)pLineStyle->GetValue (), XLINE_DASH))
247 : {
248 0 : pAttr->ClearItem (XATTR_LINESTYLE);
249 0 : pAttr->Put (XLineStyleItem ((XLineStyle) pLineStyle->GetValue ()), XATTR_LINESTYLE);
250 0 : rBindings.Invalidate (SID_ATTR_LINE_STYLE);
251 : }
252 : #ifndef DISABLE_SCRIPTING
253 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
254 : #endif
255 0 : break;
256 : }
257 : #ifndef DISABLE_SCRIPTING
258 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
259 : #endif
260 0 : break;
261 :
262 : // set line width
263 : case SID_SETLINEWIDTH :
264 0 : if (pArgs)
265 0 : if (pArgs->Count () == 1)
266 : {
267 0 : SFX_REQUEST_ARG (rReq, pLineWidth, SfxUInt32Item, ID_VAL_WIDTH, false);
268 0 : pAttr->ClearItem (XATTR_LINEWIDTH);
269 0 : pAttr->Put (XLineWidthItem (pLineWidth->GetValue ()), XATTR_LINEWIDTH);
270 0 : rBindings.Invalidate (SID_ATTR_LINE_WIDTH);
271 0 : break;
272 : }
273 : #ifndef DISABLE_SCRIPTING
274 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
275 : #endif
276 0 : break;
277 :
278 : case SID_SETFILLCOLOR :
279 0 : if (pArgs)
280 0 : if (pArgs->Count () == 3)
281 : {
282 0 : SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, false);
283 0 : SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, false);
284 0 : SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, false);
285 :
286 0 : pAttr->ClearItem (XATTR_FILLCOLOR);
287 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
288 0 : pAttr->Put (XFillColorItem (-1, Color ((sal_uInt8) pRed->GetValue (),
289 0 : (sal_uInt8) pGreen->GetValue (),
290 0 : (sal_uInt8) pBlue->GetValue ())),
291 0 : XATTR_FILLCOLOR);
292 0 : pAttr->Put (XFillStyleItem (XFILL_SOLID), XATTR_FILLSTYLE);
293 0 : rBindings.Invalidate (SID_ATTR_FILL_COLOR);
294 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
295 0 : break;
296 : }
297 : #ifndef DISABLE_SCRIPTING
298 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
299 : #endif
300 0 : break;
301 :
302 : case SID_SETLINECOLOR :
303 0 : if (pArgs)
304 0 : if (pArgs->Count () == 3)
305 : {
306 0 : SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, false);
307 0 : SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, false);
308 0 : SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, false);
309 :
310 0 : pAttr->ClearItem (XATTR_LINECOLOR);
311 0 : pAttr->Put (XLineColorItem (-1, Color ((sal_uInt8) pRed->GetValue (),
312 0 : (sal_uInt8) pGreen->GetValue (),
313 0 : (sal_uInt8) pBlue->GetValue ())),
314 0 : XATTR_LINECOLOR);
315 0 : rBindings.Invalidate (SID_ATTR_LINE_COLOR);
316 0 : break;
317 : }
318 : #ifndef DISABLE_SCRIPTING
319 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
320 : #endif
321 0 : break;
322 :
323 : case SID_SETGRADSTARTCOLOR :
324 : case SID_SETGRADENDCOLOR :
325 0 : if (pArgs)
326 0 : if (pArgs->Count () == 4)
327 : {
328 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
329 0 : SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, false);
330 0 : SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, false);
331 0 : SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, false);
332 :
333 0 : XGradientListRef pGradientList = GetDoc()->GetGradientList ();
334 0 : long nCounts = pGradientList->Count ();
335 0 : Color aColor ((sal_uInt8) pRed->GetValue (),
336 0 : (sal_uInt8) pGreen->GetValue (),
337 0 : (sal_uInt8) pBlue->GetValue ());
338 : long i;
339 :
340 0 : pAttr->ClearItem (XATTR_FILLGRADIENT);
341 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
342 :
343 0 : for ( i = 0; i < nCounts; i ++)
344 : {
345 0 : XGradientEntry *pEntry = pGradientList->GetGradient (i);
346 :
347 0 : if (pEntry->GetName () == pName->GetValue ())
348 : {
349 0 : XGradient aGradient(pEntry->GetGradient());
350 :
351 0 : if (rReq.GetSlot () == SID_SETGRADSTARTCOLOR) aGradient.SetStartColor (aColor);
352 0 : else aGradient.SetEndColor (aColor);
353 :
354 0 : pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
355 0 : pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
356 0 : break;
357 : }
358 : }
359 :
360 0 : if (i >= nCounts)
361 : {
362 0 : Color aBlack (0, 0, 0);
363 0 : XGradient aGradient ((rReq.GetSlot () == SID_SETGRADSTARTCOLOR)
364 : ? aColor
365 : : aBlack,
366 0 : (rReq.GetSlot () == SID_SETGRADENDCOLOR)
367 : ? aColor
368 0 : : aBlack);
369 :
370 0 : GetDoc()->GetGradientList ()->Insert (new XGradientEntry (aGradient, pName->GetValue ()));
371 :
372 0 : pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
373 0 : pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
374 : }
375 :
376 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
377 0 : rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
378 0 : break;
379 : }
380 : #ifndef DISABLE_SCRIPTING
381 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
382 : #endif
383 0 : break;
384 :
385 : case SID_SETHATCHCOLOR :
386 0 : if (pArgs)
387 0 : if (pArgs->Count () == 4)
388 : {
389 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
390 0 : SFX_REQUEST_ARG (rReq, pRed, SfxUInt32Item, ID_VAL_RED, false);
391 0 : SFX_REQUEST_ARG (rReq, pGreen, SfxUInt32Item, ID_VAL_GREEN, false);
392 0 : SFX_REQUEST_ARG (rReq, pBlue, SfxUInt32Item, ID_VAL_BLUE, false);
393 :
394 0 : XHatchListRef pHatchList = GetDoc()->GetHatchList ();
395 0 : long nCounts = pHatchList->Count ();
396 0 : Color aColor ((sal_uInt8) pRed->GetValue (),
397 0 : (sal_uInt8) pGreen->GetValue (),
398 0 : (sal_uInt8) pBlue->GetValue ());
399 : long i;
400 :
401 0 : pAttr->ClearItem (XATTR_FILLHATCH);
402 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
403 :
404 0 : for ( i = 0; i < nCounts; i ++)
405 : {
406 0 : XHatchEntry *pEntry = pHatchList->GetHatch (i);
407 :
408 0 : if (pEntry->GetName () == pName->GetValue ())
409 : {
410 0 : XHatch aHatch(pEntry->GetHatch());
411 :
412 0 : aHatch.SetColor (aColor);
413 :
414 0 : pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
415 0 : pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
416 0 : break;
417 : }
418 : }
419 :
420 0 : if (i >= nCounts)
421 : {
422 0 : XHatch aHatch (aColor);
423 :
424 0 : GetDoc()->GetHatchList ()->Insert (new XHatchEntry (aHatch, pName->GetValue ()));
425 :
426 0 : pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
427 0 : pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
428 : }
429 :
430 0 : rBindings.Invalidate (SID_ATTR_FILL_HATCH);
431 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
432 0 : break;
433 : }
434 : #ifndef DISABLE_SCRIPTING
435 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
436 : #endif
437 0 : break;
438 :
439 : // einstellungen fuer liniendash
440 : case SID_DASH :
441 0 : if (pArgs)
442 0 : if (pArgs->Count () == 7)
443 : {
444 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
445 0 : SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, false);
446 0 : SFX_REQUEST_ARG (rReq, pDots, SfxUInt32Item, ID_VAL_DOTS, false);
447 0 : SFX_REQUEST_ARG (rReq, pDotLen, SfxUInt32Item, ID_VAL_DOTLEN, false);
448 0 : SFX_REQUEST_ARG (rReq, pDashes, SfxUInt32Item, ID_VAL_DASHES, false);
449 0 : SFX_REQUEST_ARG (rReq, pDashLen, SfxUInt32Item, ID_VAL_DASHLEN, false);
450 0 : SFX_REQUEST_ARG (rReq, pDistance, SfxUInt32Item, ID_VAL_DISTANCE, false);
451 :
452 0 : if (CHECK_RANGE (XDASH_RECT, (sal_Int32)pStyle->GetValue (), XDASH_ROUNDRELATIVE))
453 : {
454 0 : XDash aNewDash ((XDashStyle) pStyle->GetValue (), (short) pDots->GetValue (), pDotLen->GetValue (),
455 0 : (short) pDashes->GetValue (), pDashLen->GetValue (), pDistance->GetValue ());
456 :
457 0 : pAttr->ClearItem (XATTR_LINEDASH);
458 0 : pAttr->ClearItem (XATTR_LINESTYLE);
459 :
460 0 : XDashListRef pDashList = GetDoc()->GetDashList();
461 0 : long nCounts = pDashList->Count ();
462 0 : XDashEntry *pEntry = new XDashEntry (aNewDash, pName->GetValue ());
463 : long i;
464 :
465 0 : for ( i = 0; i < nCounts; i++ )
466 0 : if (pDashList->GetDash (i)->GetName () == pName->GetValue ())
467 0 : break;
468 :
469 0 : if (i < nCounts)
470 0 : pDashList->Replace (pEntry, i);
471 : else
472 0 : pDashList->Insert (pEntry);
473 :
474 0 : pAttr->Put (XLineDashItem (pName->GetValue (), aNewDash), XATTR_LINEDASH);
475 0 : pAttr->Put (XLineStyleItem (XLINE_DASH), XATTR_LINESTYLE);
476 0 : rBindings.Invalidate (SID_ATTR_LINE_DASH);
477 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
478 : }
479 : #ifndef DISABLE_SCRIPTING
480 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
481 : #endif
482 0 : break;
483 : }
484 : #ifndef DISABLE_SCRIPTING
485 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
486 : #endif
487 0 : break;
488 :
489 : // configuration for gradients
490 : case SID_GRADIENT :
491 0 : if (pArgs)
492 0 : if (pArgs->Count () == 8)
493 : {
494 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
495 0 : SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, false);
496 0 : SFX_REQUEST_ARG (rReq, pAngle, SfxUInt32Item, ID_VAL_ANGLE, false);
497 0 : SFX_REQUEST_ARG (rReq, pBorder, SfxUInt32Item, ID_VAL_BORDER, false);
498 0 : SFX_REQUEST_ARG (rReq, pCenterX, SfxUInt32Item, ID_VAL_CENTER_X, false);
499 0 : SFX_REQUEST_ARG (rReq, pCenterY, SfxUInt32Item, ID_VAL_CENTER_Y, false);
500 0 : SFX_REQUEST_ARG (rReq, pStart, SfxUInt32Item, ID_VAL_STARTINTENS, false);
501 0 : SFX_REQUEST_ARG (rReq, pEnd, SfxUInt32Item, ID_VAL_ENDINTENS, false);
502 :
503 0 : if (CHECK_RANGE (XGRAD_LINEAR, (sal_Int32)pStyle->GetValue (), XGRAD_RECT) &&
504 0 : CHECK_RANGE (0, (sal_Int32)pAngle->GetValue (), 360) &&
505 0 : CHECK_RANGE (0, (sal_Int32)pBorder->GetValue (), 100) &&
506 0 : CHECK_RANGE (0, (sal_Int32)pCenterX->GetValue (), 100) &&
507 0 : CHECK_RANGE (0, (sal_Int32)pCenterY->GetValue (), 100) &&
508 0 : CHECK_RANGE (0, (sal_Int32)pStart->GetValue (), 100) &&
509 0 : CHECK_RANGE (0, (sal_Int32)pEnd->GetValue (), 100))
510 : {
511 0 : pAttr->ClearItem (XATTR_FILLGRADIENT);
512 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
513 :
514 0 : XGradientListRef pGradientList = GetDoc()->GetGradientList ();
515 0 : long nCounts = pGradientList->Count ();
516 : long i;
517 :
518 0 : for ( i = 0; i < nCounts; i++ )
519 : {
520 0 : XGradientEntry *pEntry = pGradientList->GetGradient (i);
521 :
522 0 : if (pEntry->GetName () == pName->GetValue ())
523 : {
524 0 : XGradient aGradient(pEntry->GetGradient());
525 :
526 0 : aGradient.SetGradientStyle ((XGradientStyle) pStyle->GetValue ());
527 0 : aGradient.SetAngle (pAngle->GetValue () * 10);
528 0 : aGradient.SetBorder ((short) pBorder->GetValue ());
529 0 : aGradient.SetXOffset ((short) pCenterX->GetValue ());
530 0 : aGradient.SetYOffset ((short) pCenterY->GetValue ());
531 0 : aGradient.SetStartIntens ((short) pStart->GetValue ());
532 0 : aGradient.SetEndIntens ((short) pEnd->GetValue ());
533 :
534 0 : pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
535 0 : pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
536 0 : break;
537 : }
538 : }
539 :
540 0 : if (i >= nCounts)
541 : {
542 0 : Color aBlack (0, 0, 0);
543 0 : XGradient aGradient (aBlack, aBlack, (XGradientStyle) pStyle->GetValue (),
544 0 : pAngle->GetValue () * 10, (short) pCenterX->GetValue (),
545 0 : (short) pCenterY->GetValue (), (short) pBorder->GetValue (),
546 0 : (short) pStart->GetValue (), (short) pEnd->GetValue ());
547 :
548 0 : pGradientList->Insert (new XGradientEntry (aGradient, pName->GetValue ()));
549 0 : pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
550 0 : pAttr->Put (XFillGradientItem (pName->GetValue (), aGradient), XATTR_FILLGRADIENT);
551 : }
552 :
553 0 : rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
554 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
555 : }
556 : #ifndef DISABLE_SCRIPTING
557 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
558 : #endif
559 0 : break;
560 : }
561 : #ifndef DISABLE_SCRIPTING
562 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
563 : #endif
564 0 : break;
565 :
566 : // configuration for hatch
567 : case SID_HATCH :
568 0 : if (pArgs)
569 0 : if (pArgs->Count () == 4)
570 : {
571 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
572 0 : SFX_REQUEST_ARG (rReq, pStyle, SfxUInt32Item, ID_VAL_STYLE, false);
573 0 : SFX_REQUEST_ARG (rReq, pDistance, SfxUInt32Item, ID_VAL_DISTANCE, false);
574 0 : SFX_REQUEST_ARG (rReq, pAngle, SfxUInt32Item, ID_VAL_ANGLE, false);
575 :
576 0 : if (CHECK_RANGE (XHATCH_SINGLE, (sal_Int32)pStyle->GetValue (), XHATCH_TRIPLE) &&
577 0 : CHECK_RANGE (0, (sal_Int32)pAngle->GetValue (), 360))
578 : {
579 0 : pAttr->ClearItem (XATTR_FILLHATCH);
580 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
581 :
582 0 : XHatchListRef pHatchList = GetDoc()->GetHatchList ();
583 0 : long nCounts = pHatchList->Count ();
584 : long i;
585 :
586 0 : for ( i = 0; i < nCounts; i++ )
587 : {
588 0 : XHatchEntry *pEntry = pHatchList->GetHatch (i);
589 :
590 0 : if (pEntry->GetName () == pName->GetValue ())
591 : {
592 0 : XHatch aHatch(pEntry->GetHatch());
593 :
594 0 : aHatch.SetHatchStyle ((XHatchStyle) pStyle->GetValue ());
595 0 : aHatch.SetDistance (pDistance->GetValue ());
596 0 : aHatch.SetAngle (pAngle->GetValue () * 10);
597 :
598 0 : pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
599 0 : pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
600 0 : break;
601 : }
602 : }
603 :
604 0 : if (i >= nCounts)
605 : {
606 0 : Color aBlack (0, 0, 0);
607 0 : XHatch aHatch (aBlack, (XHatchStyle) pStyle->GetValue (), pDistance->GetValue (),
608 0 : pAngle->GetValue () * 10);
609 :
610 0 : pHatchList->Insert (new XHatchEntry (aHatch, pName->GetValue ()));
611 0 : pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
612 0 : pAttr->Put (XFillHatchItem (pName->GetValue (), aHatch), XATTR_FILLHATCH);
613 : }
614 :
615 0 : rBindings.Invalidate (SID_ATTR_FILL_HATCH);
616 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
617 : }
618 : #ifndef DISABLE_SCRIPTING
619 0 : else StarBASIC::FatalError (SbERR_BAD_PROP_VALUE);
620 : #endif
621 0 : break;
622 : }
623 : #ifndef DISABLE_SCRIPTING
624 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
625 : #endif
626 0 : break;
627 :
628 : case SID_SELECTGRADIENT :
629 0 : if (pArgs)
630 0 : if (pArgs->Count () == 1)
631 : {
632 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
633 :
634 0 : XGradientListRef pGradientList = GetDoc()->GetGradientList ();
635 0 : long nCounts = pGradientList->Count ();
636 :
637 0 : for (long i = 0;
638 : i < nCounts;
639 : i ++)
640 : {
641 0 : XGradientEntry *pEntry = pGradientList->GetGradient (i);
642 :
643 0 : if (pEntry->GetName () == pName->GetValue ())
644 : {
645 0 : pAttr->ClearItem (XATTR_FILLGRADIENT);
646 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
647 0 : pAttr->Put (XFillStyleItem (XFILL_GRADIENT), XATTR_FILLSTYLE);
648 0 : pAttr->Put (XFillGradientItem (pName->GetValue (), pEntry->GetGradient ()), XATTR_FILLGRADIENT);
649 :
650 0 : rBindings.Invalidate (SID_ATTR_FILL_GRADIENT);
651 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
652 0 : break;
653 : }
654 : }
655 :
656 0 : break;
657 : }
658 : #ifndef DISABLE_SCRIPTING
659 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
660 : #endif
661 0 : break;
662 :
663 : case SID_SELECTHATCH :
664 0 : if (pArgs)
665 0 : if (pArgs->Count () == 1)
666 : {
667 0 : SFX_REQUEST_ARG (rReq, pName, SfxStringItem, ID_VAL_INDEX, false);
668 :
669 0 : XHatchListRef pHatchList = GetDoc()->GetHatchList ();
670 0 : long nCounts = pHatchList->Count ();
671 :
672 0 : for (long i = 0;
673 : i < nCounts;
674 : i ++)
675 : {
676 0 : XHatchEntry *pEntry = pHatchList->GetHatch (i);
677 :
678 0 : if (pEntry->GetName () == pName->GetValue ())
679 : {
680 0 : pAttr->ClearItem (XATTR_FILLHATCH);
681 0 : pAttr->ClearItem (XATTR_FILLSTYLE);
682 0 : pAttr->Put (XFillStyleItem (XFILL_HATCH), XATTR_FILLSTYLE);
683 0 : pAttr->Put (XFillHatchItem (pName->GetValue (), pEntry->GetHatch ()), XATTR_FILLHATCH);
684 :
685 0 : rBindings.Invalidate (SID_ATTR_FILL_HATCH);
686 0 : rBindings.Invalidate (SID_ATTR_FILL_STYLE);
687 0 : break;
688 : }
689 : }
690 :
691 0 : break;
692 : }
693 : #ifndef DISABLE_SCRIPTING
694 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
695 : #endif
696 0 : break;
697 :
698 : case SID_UNSELECT :
699 0 : mpDrawView->UnmarkAll ();
700 0 : break;
701 :
702 : case SID_GETRED :
703 0 : if (pArgs)
704 0 : if (pArgs->Count () == 1)
705 : {
706 0 : break;
707 : }
708 : #ifndef DISABLE_SCRIPTING
709 0 : StarBASIC::FatalError (SbERR_WRONG_ARGS);
710 : #endif
711 0 : break;
712 :
713 : /* case SID_SETFONTFAMILYNAME :
714 : case SID_SETFONTSTYLENAME :
715 : case SID_SETFONTFAMILY :
716 : case SID_SETFONTPITCH :
717 : case SID_SETFONTCHARSET :
718 : case SID_SETFONTPOSTURE :
719 : case SID_SETFONTWEIGHT :
720 : case SID_SETFONTUNDERLINE :
721 : case SID_SETFONTCROSSEDOUT :
722 : case SID_SETFONTSHADOWED :
723 : case SID_SETFONTCONTOUR :
724 : case SID_SETFONTCOLOR :
725 : case SID_SETFONTLANGUAGE :
726 : case SID_SETFONTWORDLINE :
727 : case SID_SETFONTCASEMAP :
728 : case SID_SETFONTESCAPE :
729 : case SID_SETFONTKERNING :
730 : break;*/
731 :
732 : default :
733 : ;
734 : }
735 :
736 0 : mpDrawView->SetAttributes (*(const SfxItemSet *) pAttr);
737 0 : rReq.Ignore ();
738 0 : delete pAttr;
739 : }
740 :
741 : /**
742 : * Edit macros for attribute configuration
743 : */
744 0 : void DrawViewShell::AttrState (SfxItemSet& rSet)
745 : {
746 0 : SfxWhichIter aIter (rSet);
747 0 : sal_uInt16 nWhich = aIter.FirstWhich ();
748 0 : SfxItemSet aAttr( GetDoc()->GetPool() );
749 0 : mpDrawView->GetAttributes( aAttr );
750 :
751 0 : while (nWhich)
752 : {
753 0 : switch (nWhich)
754 : {
755 : case SID_GETFILLSTYLE :
756 : {
757 0 : const XFillStyleItem &rFillStyleItem = (const XFillStyleItem &) aAttr.Get (XATTR_FILLSTYLE);
758 :
759 0 : rSet.Put (SfxUInt32Item (nWhich, (long) rFillStyleItem.GetValue ()));
760 0 : break;
761 : }
762 :
763 : case SID_GETLINESTYLE :
764 : {
765 0 : const XLineStyleItem &rLineStyleItem = (const XLineStyleItem &) aAttr.Get (XATTR_LINESTYLE);
766 :
767 0 : rSet.Put (SfxUInt32Item (nWhich, (long) rLineStyleItem.GetValue ()));
768 0 : break;
769 : }
770 :
771 : case SID_GETLINEWIDTH :
772 : {
773 0 : const XLineWidthItem &rLineWidthItem = (const XLineWidthItem &) aAttr.Get (XATTR_LINEWIDTH);
774 :
775 0 : rSet.Put (SfxUInt32Item (nWhich, (long) rLineWidthItem.GetValue ()));
776 0 : break;
777 : }
778 :
779 : case SID_GETGREEN :
780 : case SID_GETRED :
781 : case SID_GETBLUE :
782 : {
783 0 : const SfxUInt32Item &rWhatKind = (const SfxUInt32Item &) rSet.Get (ID_VAL_WHATKIND);
784 0 : Color aColor;
785 :
786 0 : switch (rWhatKind.GetValue ())
787 : {
788 : case 1 :
789 : {
790 0 : const XLineColorItem &rLineColorItem = (const XLineColorItem &) aAttr.Get (XATTR_LINECOLOR);
791 :
792 0 : aColor = rLineColorItem.GetColorValue ();
793 0 : break;
794 : }
795 :
796 : case 2 :
797 : {
798 0 : const XFillColorItem &rFillColorItem = (const XFillColorItem &) aAttr.Get (XATTR_FILLCOLOR);
799 :
800 0 : aColor = rFillColorItem.GetColorValue ();
801 0 : break;
802 : }
803 :
804 : case 3 :
805 : case 4 :
806 : {
807 0 : const XFillGradientItem &rFillGradientItem = (const XFillGradientItem &) aAttr.Get (XATTR_FILLGRADIENT);
808 0 : const XGradient &rGradient = rFillGradientItem.GetGradientValue ();
809 :
810 0 : aColor = (rWhatKind.GetValue () == 3)
811 : ? rGradient.GetStartColor ()
812 0 : : rGradient.GetEndColor ();
813 0 : break;
814 : }
815 :
816 : case 5:
817 : {
818 0 : const XFillHatchItem &rFillHatchItem = (const XFillHatchItem &) aAttr.Get (XATTR_FILLHATCH);
819 0 : const XHatch &rHatch = rFillHatchItem.GetHatchValue ();
820 :
821 0 : aColor = rHatch.GetColor ();
822 0 : break;
823 : }
824 :
825 : default :
826 : ;
827 : }
828 :
829 : rSet.Put (SfxUInt32Item (nWhich, (long) ((nWhich == SID_GETRED)
830 0 : ? aColor.GetRed ()
831 : : (nWhich == SID_GETGREEN)
832 0 : ? aColor.GetGreen ()
833 0 : : aColor.GetBlue ())));
834 0 : break;
835 : }
836 :
837 : default :
838 : ;
839 : }
840 :
841 0 : nWhich = aIter.NextWhich ();
842 0 : }
843 0 : }
844 :
845 : } // end of namespace sd
846 :
847 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|