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 : #include <cmdid.h>
21 : #include <hintids.hxx>
22 : #include <tools/urlobj.hxx>
23 : #include <vcl/msgbox.hxx>
24 : #include <svl/stritem.hxx>
25 : #include <svl/whiter.hxx>
26 : #include <svl/urihelper.hxx>
27 : #include <sfx2/docfile.hxx>
28 : #include <sfx2/dispatch.hxx>
29 :
30 : #include <sfx2/objface.hxx>
31 : #include <editeng/sizeitem.hxx>
32 : #include <editeng/protitem.hxx>
33 : #include <sfx2/request.hxx>
34 : #include <svl/srchitem.hxx>
35 : #include <svx/htmlmode.hxx>
36 : #include <svx/sdgluitm.hxx>
37 : #include <svx/sdgcoitm.hxx>
38 : #include <svx/sdggaitm.hxx>
39 : #include <svx/sdgtritm.hxx>
40 : #include <svx/sdginitm.hxx>
41 : #include <svx/sdgmoitm.hxx>
42 : #include <editeng/brshitem.hxx>
43 : #include <svx/grfflt.hxx>
44 : #include <svx/tbxcolor.hxx>
45 : #include <fmturl.hxx>
46 : #include <view.hxx>
47 : #include <wrtsh.hxx>
48 : #include <viewopt.hxx>
49 : #include <swmodule.hxx>
50 : #include <frmatr.hxx>
51 : #include <swundo.hxx>
52 : #include <uitool.hxx>
53 : #include <docsh.hxx>
54 : #include <grfsh.hxx>
55 : #include <frmmgr.hxx>
56 : #include <frmdlg.hxx>
57 : #include <frmfmt.hxx>
58 : #include <grfatr.hxx>
59 : #include <usrpref.hxx>
60 : #include <edtwin.hxx>
61 : #include <swwait.hxx>
62 : #include <shells.hrc>
63 : #include <popup.hrc>
64 : #include <svx/extedit.hxx>
65 : #include <svx/graphichelper.hxx>
66 : #define SwGrfShell
67 : #include <sfx2/msg.hxx>
68 : #include "swslots.hxx"
69 :
70 : #include "swabstdlg.hxx"
71 :
72 : #define TOOLBOX_NAME ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "colorbar" ) )
73 :
74 0 : class SwExternalToolEdit : public ExternalToolEdit
75 : {
76 : SwWrtShell* m_pShell;
77 :
78 : public:
79 0 : SwExternalToolEdit ( SwWrtShell* pShell ) :
80 0 : m_pShell (pShell)
81 0 : {}
82 :
83 0 : virtual void Update( Graphic& aGraphic )
84 : {
85 0 : m_pShell->ReRead(aEmptyStr, aEmptyStr, (const Graphic*) &aGraphic);
86 0 : }
87 : };
88 :
89 60 : SFX_IMPL_INTERFACE(SwGrfShell, SwBaseShell, SW_RES(STR_SHELLNAME_GRAPHIC))
90 : {
91 10 : SFX_POPUPMENU_REGISTRATION(SW_RES(MN_GRF_POPUPMENU));
92 10 : SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT, SW_RES(RID_GRAFIK_TOOLBOX));
93 10 : }
94 :
95 0 : void SwGrfShell::Execute(SfxRequest &rReq)
96 : {
97 0 : SwWrtShell &rSh = GetShell();
98 :
99 0 : sal_uInt16 nSlot = rReq.GetSlot();
100 0 : switch(nSlot)
101 : {
102 : case SID_TWAIN_TRANSFER:
103 : {
104 0 : GetView().ExecuteScan( rReq );
105 0 : break;
106 : }
107 : case SID_SAVE_GRAPHIC:
108 : {
109 : const Graphic *pGraphic;
110 0 : if(0 != (pGraphic = rSh.GetGraphic()))
111 : {
112 0 : String sGrfNm, sFilterNm;
113 0 : rSh.GetGrfNms( &sGrfNm, &sFilterNm );
114 0 : GraphicHelper::ExportGraphic( *pGraphic, sGrfNm );
115 : }
116 : }
117 0 : break;
118 : case SID_EXTERNAL_EDIT:
119 : {
120 : /* When the graphic is selected to be opened via some external tool
121 : * for advanced editing
122 : */
123 0 : GraphicObject *pGraphicObject = (GraphicObject *) rSh.GetGraphicObj();
124 0 : if(0 != pGraphicObject)
125 : {
126 0 : SwExternalToolEdit* externalToolEdit = new SwExternalToolEdit( &rSh );
127 0 : externalToolEdit->Edit ( pGraphicObject );
128 : }
129 : }
130 0 : break;
131 :
132 : case SID_INSERT_GRAPHIC:
133 : case FN_FORMAT_GRAFIC_DLG:
134 : {
135 0 : SwFlyFrmAttrMgr aMgr( sal_False, &rSh, rSh.IsFrmSelected() ?
136 0 : FRMMGR_TYPE_NONE : FRMMGR_TYPE_GRF);
137 0 : const SwViewOption* pVOpt = rSh.GetViewOptions();
138 0 : SwViewOption aUsrPref( *pVOpt );
139 :
140 0 : SfxItemSet aSet(GetPool(), RES_FRMATR_BEGIN, RES_FRMATR_END-1,
141 : RES_GRFATR_MIRRORGRF, RES_GRFATR_CROPGRF,
142 : SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
143 : SID_ATTR_GRAF_KEEP_ZOOM, SID_ATTR_GRAF_KEEP_ZOOM,
144 : SID_ATTR_GRAF_FRMSIZE, SID_ATTR_GRAF_FRMSIZE,
145 : SID_ATTR_GRAF_FRMSIZE_PERCENT, SID_ATTR_GRAF_FRMSIZE_PERCENT,
146 : SID_ATTR_GRAF_GRAPHIC, SID_ATTR_GRAF_GRAPHIC,
147 : FN_PARAM_GRF_CONNECT, FN_PARAM_GRF_CONNECT,
148 : SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
149 : FN_GET_PRINT_AREA, FN_GET_PRINT_AREA,
150 : FN_SET_FRM_NAME, FN_KEEP_ASPECT_RATIO,
151 : FN_PARAM_GRF_DIALOG, FN_PARAM_GRF_DIALOG,
152 : SID_DOCFRAME, SID_DOCFRAME,
153 : SID_HTML_MODE, SID_HTML_MODE,
154 : FN_SET_FRM_ALT_NAME, FN_SET_FRM_ALT_NAME,
155 0 : 0);
156 :
157 0 : sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell());
158 0 : aSet.Put(SfxUInt16Item(SID_HTML_MODE, nHtmlMode));
159 0 : FieldUnit eMetric = ::GetDfltMetric((0 != (nHtmlMode&HTMLMODE_ON)));
160 0 : SW_MOD()->PutItem(SfxUInt16Item(SID_ATTR_METRIC, static_cast< sal_uInt16 >(eMetric)) );
161 :
162 0 : const SwRect* pRect = &rSh.GetAnyCurRect(RECT_PAGE);
163 0 : SwFmtFrmSize aFrmSize( ATT_VAR_SIZE, pRect->Width(), pRect->Height());
164 0 : aFrmSize.SetWhich( GetPool().GetWhich( SID_ATTR_PAGE_SIZE ) );
165 0 : aSet.Put( aFrmSize );
166 :
167 0 : aSet.Put(SfxStringItem(FN_SET_FRM_NAME, rSh.GetFlyName()));
168 0 : if ( nSlot == FN_FORMAT_GRAFIC_DLG )
169 : {
170 : // #i73249#
171 0 : aSet.Put( SfxStringItem( FN_SET_FRM_ALT_NAME, rSh.GetObjTitle() ) );
172 : }
173 :
174 0 : pRect = &rSh.GetAnyCurRect(RECT_PAGE_PRT);
175 0 : aFrmSize.SetWidth( pRect->Width() );
176 0 : aFrmSize.SetHeight( pRect->Height() );
177 0 : aFrmSize.SetWhich( GetPool().GetWhich(FN_GET_PRINT_AREA) );
178 0 : aSet.Put( aFrmSize );
179 :
180 0 : aSet.Put( aMgr.GetAttrSet() );
181 0 : aSet.SetParent( aMgr.GetAttrSet().GetParent() );
182 :
183 : // Bei %-Werten Groesse initialisieren
184 0 : SwFmtFrmSize aSizeCopy = (const SwFmtFrmSize&)aSet.Get(RES_FRM_SIZE);
185 0 : if (aSizeCopy.GetWidthPercent() && aSizeCopy.GetWidthPercent() != 0xff)
186 0 : aSizeCopy.SetWidth(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Width());
187 0 : if (aSizeCopy.GetHeightPercent() && aSizeCopy.GetHeightPercent() != 0xff)
188 0 : aSizeCopy.SetHeight(rSh.GetAnyCurRect(RECT_FLY_EMBEDDED).Height());
189 :
190 : // and now set the size for "external" tabpages
191 : {
192 0 : SvxSizeItem aSzItm( SID_ATTR_GRAF_FRMSIZE, aSizeCopy.GetSize() );
193 0 : aSet.Put( aSzItm );
194 :
195 0 : Size aSz( aSizeCopy.GetWidthPercent(), aSizeCopy.GetHeightPercent() );
196 0 : if( 0xff == aSz.Width() ) aSz.Width() = 0;
197 0 : if( 0xff == aSz.Height() ) aSz.Height() = 0;
198 :
199 0 : aSzItm.SetSize( aSz );
200 0 : aSzItm.SetWhich( SID_ATTR_GRAF_FRMSIZE_PERCENT );
201 0 : aSet.Put( aSzItm );
202 : }
203 :
204 0 : String sGrfNm, sFilterNm;
205 0 : rSh.GetGrfNms( &sGrfNm, &sFilterNm );
206 0 : if( sGrfNm.Len() )
207 : {
208 : aSet.Put( SvxBrushItem( INetURLObject::decode( sGrfNm,
209 : INET_HEX_ESCAPE,
210 : INetURLObject::DECODE_UNAMBIGUOUS,
211 : RTL_TEXTENCODING_UTF8 ),
212 : sFilterNm, GPOS_LT,
213 0 : SID_ATTR_GRAF_GRAPHIC ));
214 : }
215 : else
216 : {
217 : // #119353# - robust
218 0 : const GraphicObject* pGrfObj = rSh.GetGraphicObj();
219 0 : if ( pGrfObj )
220 : {
221 : aSet.Put( SvxBrushItem( *pGrfObj, GPOS_LT,
222 0 : SID_ATTR_GRAF_GRAPHIC ) );
223 : }
224 : }
225 0 : aSet.Put( SfxBoolItem( FN_PARAM_GRF_CONNECT, sGrfNm.Len() > 0 ) );
226 :
227 : // get Mirror and Crop
228 : {
229 0 : SfxItemSet aTmpSet( rSh.GetAttrPool(),
230 0 : RES_GRFATR_MIRRORGRF, RES_GRFATR_CROPGRF );
231 :
232 0 : rSh.GetCurAttr( aTmpSet );
233 0 : aSet.Put( aTmpSet );
234 : }
235 :
236 0 : aSet.Put(SfxBoolItem(FN_KEEP_ASPECT_RATIO, aUsrPref.IsKeepRatio()));
237 0 : aSet.Put(SfxBoolItem( SID_ATTR_GRAF_KEEP_ZOOM, aUsrPref.IsGrfKeepZoom()));
238 :
239 0 : aSet.Put(SfxFrameItem( SID_DOCFRAME, &GetView().GetViewFrame()->GetTopFrame()));
240 :
241 0 : SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
242 : OSL_ENSURE(pFact, "Dialogdiet fail!");
243 : SfxAbstractTabDialog* pDlg = pFact->CreateFrmTabDialog( DLG_FRM_GRF,
244 0 : GetView().GetViewFrame(),
245 0 : GetView().GetWindow(),
246 0 : aSet, sal_False, DLG_FRM_GRF);
247 : OSL_ENSURE(pDlg, "Dialogdiet fail!");
248 0 : if( pDlg->Execute() )
249 : {
250 0 : rSh.StartAllAction();
251 0 : rSh.StartUndo(UNDO_START);
252 : const SfxPoolItem* pItem;
253 0 : SfxItemSet* pSet = (SfxItemSet*)pDlg->GetOutputItemSet();
254 0 : rReq.Done(*pSet);
255 : // change the 2 frmsize SizeItems to the correct SwFrmSizeItem
256 0 : if( SFX_ITEM_SET == pSet->GetItemState(
257 0 : SID_ATTR_GRAF_FRMSIZE, sal_False, &pItem ))
258 : {
259 0 : SwFmtFrmSize aSize;
260 0 : const Size& rSz = ((SvxSizeItem*)pItem)->GetSize();
261 0 : aSize.SetWidth( rSz.Width() );
262 0 : aSize.SetHeight( rSz.Height() );
263 :
264 0 : if( SFX_ITEM_SET == pSet->GetItemState(
265 0 : SID_ATTR_GRAF_FRMSIZE_PERCENT, sal_False, &pItem ))
266 : {
267 0 : const Size& rRelativeSize = ((SvxSizeItem*)pItem)->GetSize();
268 0 : aSize.SetWidthPercent( static_cast< sal_uInt8 >( rRelativeSize.Width() ) );
269 0 : aSize.SetHeightPercent( static_cast< sal_uInt8 >( rRelativeSize.Height() ) );
270 : }
271 0 : pSet->Put( aSize );
272 : }
273 :
274 : // Vorlagen-AutoUpdate
275 0 : SwFrmFmt* pFmt = rSh.GetCurFrmFmt();
276 0 : if(pFmt && pFmt->IsAutoUpdateFmt())
277 : {
278 0 : pFmt->SetFmtAttr(*pSet);
279 0 : SfxItemSet aShellSet(GetPool(), RES_FRM_SIZE, RES_FRM_SIZE,
280 : RES_SURROUND, RES_SURROUND,
281 : RES_ANCHOR, RES_ANCHOR,
282 : RES_VERT_ORIENT,RES_HORI_ORIENT,
283 0 : 0);
284 0 : aShellSet.Put(*pSet);
285 0 : aMgr.SetAttrSet(aShellSet);
286 : }
287 : else
288 : {
289 0 : aMgr.SetAttrSet(*pSet);
290 : }
291 0 : aMgr.UpdateFlyFrm();
292 :
293 0 : bool bApplyUsrPref = false;
294 0 : if (SFX_ITEM_SET == pSet->GetItemState(
295 0 : FN_KEEP_ASPECT_RATIO, sal_True, &pItem ))
296 : {
297 : aUsrPref.SetKeepRatio(
298 0 : ((const SfxBoolItem*)pItem)->GetValue() );
299 0 : bApplyUsrPref = true;
300 : }
301 0 : if( SFX_ITEM_SET == pSet->GetItemState(
302 0 : SID_ATTR_GRAF_KEEP_ZOOM, sal_True, &pItem ))
303 : {
304 : aUsrPref.SetGrfKeepZoom(
305 0 : ((const SfxBoolItem*)pItem)->GetValue() );
306 0 : bApplyUsrPref = true;
307 : }
308 :
309 0 : if( bApplyUsrPref )
310 0 : SW_MOD()->ApplyUsrPref(aUsrPref, &GetView());
311 :
312 : // and now set all the graphic attributes and other stuff
313 0 : if( SFX_ITEM_SET == pSet->GetItemState(
314 0 : SID_ATTR_GRAF_GRAPHIC, sal_True, &pItem ))
315 : {
316 0 : if( ((SvxBrushItem*)pItem)->GetGraphicLink() )
317 0 : sGrfNm = *((SvxBrushItem*)pItem)->GetGraphicLink();
318 : else
319 0 : sGrfNm.Erase();
320 :
321 0 : if( ((SvxBrushItem*)pItem)->GetGraphicFilter() )
322 0 : sFilterNm = *((SvxBrushItem*)pItem)->GetGraphicFilter();
323 : else
324 0 : sFilterNm.Erase();
325 :
326 0 : if( sGrfNm.Len() )
327 : {
328 0 : SwDocShell* pDocSh = GetView().GetDocShell();
329 0 : SwWait aWait( *pDocSh, sal_True );
330 0 : SfxMedium* pMedium = pDocSh->GetMedium();
331 0 : INetURLObject aAbs;
332 0 : if( pMedium )
333 0 : aAbs = pMedium->GetURLObject();
334 : rSh.ReRead( URIHelper::SmartRel2Abs(
335 : aAbs, sGrfNm,
336 : URIHelper::GetMaybeFileHdl() ),
337 0 : sFilterNm, 0 );
338 : }
339 : }
340 0 : if ( SFX_ITEM_SET == pSet->GetItemState(
341 0 : FN_SET_FRM_ALT_NAME, sal_True, &pItem ))
342 : {
343 : // #i73249#
344 0 : rSh.SetObjTitle( ((const SfxStringItem*)pItem)->GetValue() );
345 : }
346 :
347 0 : SfxItemSet aGrfSet( rSh.GetAttrPool(), RES_GRFATR_BEGIN,
348 0 : RES_GRFATR_END-1 );
349 0 : aGrfSet.Put( *pSet );
350 0 : if( aGrfSet.Count() )
351 0 : rSh.SetAttr( aGrfSet );
352 :
353 0 : rSh.EndUndo(UNDO_END);
354 0 : rSh.EndAllAction();
355 : }
356 0 : delete pDlg;
357 : }
358 0 : break;
359 :
360 : case FN_GRAPHIC_MIRROR_ON_EVEN_PAGES:
361 : {
362 0 : SfxItemSet aSet(rSh.GetAttrPool(), RES_GRFATR_MIRRORGRF, RES_GRFATR_MIRRORGRF);
363 0 : rSh.GetCurAttr( aSet );
364 0 : SwMirrorGrf aGrf((const SwMirrorGrf &)aSet.Get(RES_GRFATR_MIRRORGRF));
365 0 : aGrf.SetGrfToggle(!aGrf.IsGrfToggle());
366 0 : rSh.SetAttr(aGrf);
367 : }
368 0 : break;
369 :
370 : default:
371 : OSL_ENSURE(!this, "wrong dispatcher");
372 0 : return;
373 : }
374 : }
375 :
376 :
377 0 : void SwGrfShell::ExecAttr( SfxRequest &rReq )
378 : {
379 : sal_uInt16 nGrfType;
380 0 : if( CNT_GRF == GetShell().GetCntType() &&
381 0 : ( GRAPHIC_BITMAP == ( nGrfType = GetShell().GetGraphicType()) ||
382 : GRAPHIC_GDIMETAFILE == nGrfType ))
383 : {
384 0 : SfxItemSet aGrfSet( GetShell().GetAttrPool(), RES_GRFATR_BEGIN,
385 0 : RES_GRFATR_END -1 );
386 0 : const SfxItemSet *pArgs = rReq.GetArgs();
387 : const SfxPoolItem* pItem;
388 0 : sal_uInt16 nSlot = rReq.GetSlot();
389 0 : if( !pArgs || SFX_ITEM_SET != pArgs->GetItemState( nSlot, sal_False, &pItem ))
390 0 : pItem = 0;
391 :
392 0 : switch( nSlot )
393 : {
394 : case FN_FLIP_VERT_GRAFIC:
395 : case FN_FLIP_HORZ_GRAFIC:
396 : {
397 0 : GetShell().GetCurAttr( aGrfSet );
398 : SwMirrorGrf aMirror( (SwMirrorGrf&)aGrfSet.Get(
399 0 : RES_GRFATR_MIRRORGRF ) );
400 0 : sal_uInt16 nMirror = aMirror.GetValue();
401 0 : if( FN_FLIP_VERT_GRAFIC == nSlot )
402 0 : switch( nMirror )
403 : {
404 0 : case RES_MIRROR_GRAPH_DONT: nMirror = RES_MIRROR_GRAPH_VERT;
405 0 : break;
406 0 : case RES_MIRROR_GRAPH_HOR: nMirror = RES_MIRROR_GRAPH_BOTH;
407 0 : break;
408 0 : case RES_MIRROR_GRAPH_VERT: nMirror = RES_MIRROR_GRAPH_DONT;
409 0 : break;
410 0 : case RES_MIRROR_GRAPH_BOTH: nMirror = RES_MIRROR_GRAPH_HOR;
411 0 : break;
412 : }
413 : else
414 0 : switch( nMirror )
415 : {
416 0 : case RES_MIRROR_GRAPH_DONT: nMirror = RES_MIRROR_GRAPH_HOR;
417 0 : break;
418 0 : case RES_MIRROR_GRAPH_VERT: nMirror = RES_MIRROR_GRAPH_BOTH;
419 0 : break;
420 0 : case RES_MIRROR_GRAPH_HOR: nMirror = RES_MIRROR_GRAPH_DONT;
421 0 : break;
422 0 : case RES_MIRROR_GRAPH_BOTH: nMirror = RES_MIRROR_GRAPH_VERT;
423 0 : break;
424 : }
425 0 : aMirror.SetValue( nMirror );
426 0 : aGrfSet.ClearItem();
427 0 : aGrfSet.Put( aMirror );
428 : }
429 0 : break;
430 :
431 : case SID_ATTR_GRAF_LUMINANCE:
432 0 : if( pItem )
433 : aGrfSet.Put( SwLuminanceGrf(
434 0 : ((SfxInt16Item*)pItem)->GetValue() ));
435 0 : break;
436 : case SID_ATTR_GRAF_CONTRAST:
437 0 : if( pItem )
438 : aGrfSet.Put( SwContrastGrf(
439 0 : ((SfxInt16Item*)pItem)->GetValue() ));
440 0 : break;
441 : case SID_ATTR_GRAF_RED:
442 0 : if( pItem )
443 : aGrfSet.Put( SwChannelRGrf(
444 0 : ((SfxInt16Item*)pItem)->GetValue() ));
445 0 : break;
446 : case SID_ATTR_GRAF_GREEN:
447 0 : if( pItem )
448 : aGrfSet.Put( SwChannelGGrf(
449 0 : ((SfxInt16Item*)pItem)->GetValue() ));
450 0 : break;
451 : case SID_ATTR_GRAF_BLUE:
452 0 : if( pItem )
453 : aGrfSet.Put( SwChannelBGrf(
454 0 : ((SfxInt16Item*)pItem)->GetValue() ));
455 0 : break;
456 : case SID_ATTR_GRAF_GAMMA:
457 0 : if( pItem )
458 : {
459 0 : double fVal = ((SfxUInt32Item*)pItem)->GetValue();
460 0 : aGrfSet.Put( SwGammaGrf(fVal/100. ));
461 : }
462 0 : break;
463 : case SID_ATTR_GRAF_TRANSPARENCE:
464 0 : if( pItem )
465 : aGrfSet.Put( SwTransparencyGrf(
466 0 : static_cast< sal_Int8 >( ( (SfxUInt16Item*)pItem )->GetValue() ) ) );
467 0 : break;
468 : case SID_ATTR_GRAF_INVERT:
469 0 : if( pItem )
470 : aGrfSet.Put( SwInvertGrf(
471 0 : ((SfxBoolItem*)pItem)->GetValue() ));
472 0 : break;
473 :
474 : case SID_ATTR_GRAF_MODE:
475 0 : if( pItem )
476 : aGrfSet.Put( SwDrawModeGrf(
477 0 : ((SfxUInt16Item*)pItem)->GetValue() ));
478 0 : break;
479 :
480 : case SID_COLOR_SETTINGS:
481 : {
482 0 : svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
483 0 : aToolboxAccess.toggleToolbox();
484 0 : break;
485 : }
486 : case SID_GRFFILTER:
487 : case SID_GRFFILTER_INVERT:
488 : case SID_GRFFILTER_SMOOTH:
489 : case SID_GRFFILTER_SHARPEN:
490 : case SID_GRFFILTER_REMOVENOISE:
491 : case SID_GRFFILTER_SOBEL:
492 : case SID_GRFFILTER_MOSAIC:
493 : case SID_GRFFILTER_EMBOSS:
494 : case SID_GRFFILTER_POSTER:
495 : case SID_GRFFILTER_POPART:
496 : case SID_GRFFILTER_SEPIA:
497 : case SID_GRFFILTER_SOLARIZE:
498 0 : if( GRAPHIC_BITMAP == nGrfType )
499 : {
500 : // #119353# - robust
501 0 : const GraphicObject* pFilterObj( GetShell().GetGraphicObj() );
502 0 : if ( pFilterObj )
503 : {
504 0 : GraphicObject aFilterObj( *pFilterObj );
505 0 : if( SVX_GRAPHICFILTER_ERRCODE_NONE ==
506 0 : SvxGraphicFilter::ExecuteGrfFilterSlot( rReq, aFilterObj ))
507 0 : GetShell().ReRead( aEmptyStr, aEmptyStr,
508 0 : &aFilterObj.GetGraphic() );
509 : }
510 : }
511 0 : break;
512 :
513 : default:
514 : OSL_ENSURE(!this, "wrong dispatcher");
515 : }
516 0 : if( aGrfSet.Count() )
517 0 : GetShell().SetAttr( aGrfSet );
518 : }
519 0 : GetView().GetViewFrame()->GetBindings().Invalidate(rReq.GetSlot());
520 0 : }
521 :
522 0 : void SwGrfShell::GetAttrState(SfxItemSet &rSet)
523 : {
524 0 : SwWrtShell &rSh = GetShell();
525 0 : SfxItemSet aCoreSet( GetPool(), aNoTxtNodeSetRange );
526 0 : rSh.GetCurAttr( aCoreSet );
527 0 : bool bParentCntProt = 0 != rSh.IsSelObjProtected( FLYPROTECT_CONTENT|FLYPROTECT_PARENT );
528 0 : bool bIsGrfCntnt = CNT_GRF == GetShell().GetCntType();
529 :
530 0 : SetGetStateSet( &rSet );
531 :
532 0 : SfxWhichIter aIter( rSet );
533 0 : sal_uInt16 nWhich = aIter.FirstWhich();
534 0 : while( nWhich )
535 : {
536 0 : bool bDisable = bParentCntProt;
537 0 : switch( nWhich )
538 : {
539 : case SID_INSERT_GRAPHIC:
540 : case FN_FORMAT_GRAFIC_DLG:
541 : case SID_TWAIN_TRANSFER:
542 0 : if( bParentCntProt || !bIsGrfCntnt )
543 0 : bDisable = true;
544 0 : break;
545 : case SID_SAVE_GRAPHIC:
546 : case SID_EXTERNAL_EDIT:
547 0 : if( rSh.GetGraphicType() == GRAPHIC_NONE )
548 0 : bDisable = true;
549 0 : break;
550 : case SID_COLOR_SETTINGS:
551 : {
552 0 : if ( bParentCntProt || !bIsGrfCntnt )
553 0 : bDisable = true;
554 : else
555 : {
556 0 : svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
557 0 : rSet.Put( SfxBoolItem( nWhich, aToolboxAccess.isToolboxVisible() ) );
558 : }
559 0 : break;
560 : }
561 :
562 : case FN_FLIP_VERT_GRAFIC:
563 0 : if( !bParentCntProt )
564 : {
565 : MirrorGraph nState = static_cast< MirrorGraph >(((const SwMirrorGrf &) aCoreSet.Get(
566 0 : RES_GRFATR_MIRRORGRF )).GetValue());
567 :
568 : rSet.Put(SfxBoolItem( nWhich, nState == RES_MIRROR_GRAPH_VERT ||
569 0 : nState == RES_MIRROR_GRAPH_BOTH));
570 : }
571 0 : break;
572 :
573 : case FN_FLIP_HORZ_GRAFIC:
574 0 : if( !bParentCntProt )
575 : {
576 : MirrorGraph nState = static_cast< MirrorGraph >(((const SwMirrorGrf &) aCoreSet.Get(
577 0 : RES_GRFATR_MIRRORGRF )).GetValue());
578 :
579 : rSet.Put(SfxBoolItem( nWhich, nState == RES_MIRROR_GRAPH_HOR ||
580 0 : nState == RES_MIRROR_GRAPH_BOTH));
581 : }
582 0 : break;
583 :
584 :
585 : case SID_ATTR_GRAF_LUMINANCE:
586 0 : if( !bParentCntProt )
587 : rSet.Put( SfxInt16Item( nWhich, ((SwLuminanceGrf&)
588 0 : aCoreSet.Get(RES_GRFATR_LUMINANCE)).GetValue() ));
589 0 : break;
590 : case SID_ATTR_GRAF_CONTRAST:
591 0 : if( !bParentCntProt )
592 : rSet.Put( SfxInt16Item( nWhich, ((SwContrastGrf&)
593 0 : aCoreSet.Get(RES_GRFATR_CONTRAST)).GetValue() ));
594 0 : break;
595 : case SID_ATTR_GRAF_RED:
596 0 : if( !bParentCntProt )
597 : rSet.Put( SfxInt16Item( nWhich, ((SwChannelRGrf&)
598 0 : aCoreSet.Get(RES_GRFATR_CHANNELR)).GetValue() ));
599 0 : break;
600 : case SID_ATTR_GRAF_GREEN:
601 0 : if( !bParentCntProt )
602 : rSet.Put( SfxInt16Item( nWhich, ((SwChannelGGrf&)
603 0 : aCoreSet.Get(RES_GRFATR_CHANNELG)).GetValue() ));
604 0 : break;
605 : case SID_ATTR_GRAF_BLUE:
606 0 : if( !bParentCntProt )
607 : rSet.Put( SfxInt16Item( nWhich, ((SwChannelBGrf&)
608 0 : aCoreSet.Get(RES_GRFATR_CHANNELB)).GetValue() ));
609 0 : break;
610 :
611 : case SID_ATTR_GRAF_GAMMA:
612 0 : if( !bParentCntProt )
613 : rSet.Put( SfxUInt32Item( nWhich, static_cast< sal_uInt32 >(
614 0 : ( (SwGammaGrf&)aCoreSet.Get( RES_GRFATR_GAMMA ) ).GetValue() * 100 ) ) );
615 0 : break;
616 : case SID_ATTR_GRAF_TRANSPARENCE:
617 0 : if( !bParentCntProt )
618 : {
619 : // #119353# - robust
620 0 : const GraphicObject* pGrafObj = rSh.GetGraphicObj();
621 0 : if ( pGrafObj )
622 : {
623 0 : if( pGrafObj->IsAnimated() ||
624 0 : GRAPHIC_GDIMETAFILE == pGrafObj->GetType() )
625 0 : bDisable = true;
626 : else
627 : rSet.Put( SfxUInt16Item( nWhich, ((SwTransparencyGrf&)
628 0 : aCoreSet.Get(RES_GRFATR_TRANSPARENCY)).GetValue() ));
629 : }
630 : }
631 0 : break;
632 : case SID_ATTR_GRAF_INVERT:
633 0 : if( !bParentCntProt )
634 : rSet.Put( SfxBoolItem( nWhich, ((SwInvertGrf&)
635 0 : aCoreSet.Get(RES_GRFATR_INVERT)).GetValue() ));
636 0 : break;
637 :
638 : case SID_ATTR_GRAF_MODE:
639 0 : if( !bParentCntProt )
640 : rSet.Put( SfxUInt16Item( nWhich, ((SwDrawModeGrf&)
641 0 : aCoreSet.Get(RES_GRFATR_DRAWMODE)).GetValue() ));
642 0 : break;
643 :
644 : case SID_GRFFILTER:
645 : case SID_GRFFILTER_INVERT:
646 : case SID_GRFFILTER_SMOOTH:
647 : case SID_GRFFILTER_SHARPEN:
648 : case SID_GRFFILTER_REMOVENOISE:
649 : case SID_GRFFILTER_SOBEL:
650 : case SID_GRFFILTER_MOSAIC:
651 : case SID_GRFFILTER_EMBOSS:
652 : case SID_GRFFILTER_POSTER:
653 : case SID_GRFFILTER_POPART:
654 : case SID_GRFFILTER_SEPIA:
655 : case SID_GRFFILTER_SOLARIZE:
656 : {
657 0 : if( bParentCntProt || !bIsGrfCntnt )
658 0 : bDisable = true;
659 : // #i59688# load graphic only if type is unknown
660 : else
661 : {
662 0 : const sal_uInt16 eGraphicType( rSh.GetGraphicType() );
663 0 : if ( ( eGraphicType == GRAPHIC_NONE ||
664 : eGraphicType == GRAPHIC_DEFAULT ) &&
665 0 : rSh.IsGrfSwapOut( sal_True ) )
666 : {
667 0 : rSet.DisableItem( nWhich );
668 0 : if( AddGrfUpdateSlot( nWhich ))
669 0 : rSh.GetGraphic(sal_False); // start the loading
670 : }
671 : else
672 : {
673 0 : bDisable = eGraphicType != GRAPHIC_BITMAP;
674 : }
675 : }
676 : }
677 0 : break;
678 :
679 : default:
680 0 : bDisable = false;
681 : }
682 :
683 0 : if( bDisable )
684 0 : rSet.DisableItem( nWhich );
685 0 : nWhich = aIter.NextWhich();
686 : }
687 0 : SetGetStateSet( 0 );
688 0 : }
689 :
690 :
691 0 : SwGrfShell::SwGrfShell(SwView &_rView) :
692 0 : SwBaseShell(_rView)
693 :
694 : {
695 0 : SetName(rtl::OUString("Graphic"));
696 0 : SetHelpId(SW_GRFSHELL);
697 30 : }
698 :
699 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|