xref: /AOO41X/main/svx/source/tbxctrls/grafctrl.cxx (revision 7658c3995f9aa968b8e8009cb10ccebf8945d7c0)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // MARKER(update_precomp.py): autogen include statement, do not remove
23 #include "precompiled_svx.hxx"
24 
25 #include <string> // HACK: prevent conflict between STLPORT and Workshop headers
26 
27 #ifndef _TOOLBOX_HXX //autogen
28 #include <vcl/toolbox.hxx>
29 #endif
30 #ifndef _FIELD_HXX //autogen
31 #include <vcl/field.hxx>
32 #endif
33 #include <vcl/fixed.hxx>
34 #include <vcl/msgbox.hxx>
35 #include <svl/intitem.hxx>
36 #include <svl/eitem.hxx>
37 #include <svl/whiter.hxx>
38 #include <sfx2/app.hxx>
39 #include <sfx2/dispatch.hxx>
40 #include <sfx2/objsh.hxx>
41 #include <sfx2/viewsh.hxx>
42 #include <sfx2/request.hxx>
43 #include <sfx2/basedlgs.hxx>
44 #include <tools/urlobj.hxx>
45 #include <comphelper/processfactory.hxx>
46 
47 #include <svx/svxids.hrc>
48 #include "grafctrl.hrc"
49 #include <svx/dialogs.hrc>
50 #include <editeng/brshitem.hxx>
51 #include <editeng/sizeitem.hxx>
52 #include <svx/sdgcpitm.hxx>
53 //CHINA001 #include "../dialog/grfpage.hxx"
54 #include <svx/itemwin.hxx>
55 #include <svx/dialmgr.hxx>
56 #include <svx/svdview.hxx>
57 #include <svx/svdmodel.hxx>
58 #include <svx/svdograf.hxx>
59 #include <svx/svdundo.hxx>
60 #include <svx/svdtrans.hxx>
61 #include "svx/grafctrl.hxx"
62 #include "svx/tbxcolor.hxx"
63 
64 // namespaces
65 using ::rtl::OUString;
66 using namespace ::com::sun::star::uno;
67 using namespace ::com::sun::star::frame;
68 using namespace ::com::sun::star::util;
69 using namespace ::com::sun::star::beans;
70 using namespace ::com::sun::star::lang;
71 
72 #include <svx/svxdlg.hxx> //CHINA001
73 // -----------
74 // - Defines -
75 // -----------
76 
77 #define SYMBOL_TO_FIELD_OFFSET      4
78 #define ITEMVALUE(ItemSet,Id,Cast)  ((const Cast&)(ItemSet).Get(Id)).GetValue()
79 #define TOOLBOX_NAME                ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "colorbar" ) )
80 
81 // ----------------
82 // - TbxImageItem -
83 // ----------------
84 
85 TYPEINIT1_AUTOFACTORY( TbxImageItem, SfxUInt16Item );
86 
87 //---------------------------------------------------------
88 
TbxImageItem(sal_uInt16 _nWhich,sal_uInt16 nImage)89 TbxImageItem::TbxImageItem( sal_uInt16 _nWhich, sal_uInt16 nImage ) :
90     SfxUInt16Item( _nWhich, nImage )
91 {
92 }
93 
94 //---------------------------------------------------------
95 
Clone(SfxItemPool *) const96 SfxPoolItem* TbxImageItem::Clone( SfxItemPool* ) const
97 {
98     return new TbxImageItem( *this );
99 }
100 
101 //---------------------------------------------------------
102 
operator ==(const SfxPoolItem & rItem) const103 int TbxImageItem::operator==( const SfxPoolItem& rItem ) const
104 {
105     return( ( (TbxImageItem&) rItem ).GetValue() == GetValue() );
106 }
107 
108 // -----------------------
109 // - ImplGrafMetricField -
110 // -----------------------
111 
112 class ImplGrafMetricField : public MetricField
113 {
114     using Window::Update;
115 
116 private:
117     Timer               maTimer;
118     OUString            maCommand;
119     Reference< XFrame > mxFrame;
120 
121                     DECL_LINK( ImplModifyHdl, Timer* );
122 
123 protected:
124 
125     virtual void    Modify();
126 
127 public:
128 
129                     ImplGrafMetricField( Window* pParent, const rtl::OUString& aCmd, const Reference< XFrame >& rFrame );
130                     ~ImplGrafMetricField();
131 
132     void            Update( const SfxPoolItem* pItem );
GetCommand() const133     const OUString& GetCommand() const { return maCommand; }
134 };
135 
136 // -----------------------------------------------------------------------------
137 
ImplGrafMetricField(Window * pParent,const rtl::OUString & rCmd,const Reference<XFrame> & rFrame)138 ImplGrafMetricField::ImplGrafMetricField( Window* pParent, const rtl::OUString& rCmd, const Reference< XFrame >& rFrame ) :
139     MetricField( pParent, WB_BORDER | WB_SPIN | WB_REPEAT | WB_3DLOOK ),
140     maCommand( rCmd ),
141     mxFrame( rFrame )
142 {
143     Size aSize( GetTextWidth( String::CreateFromAscii("-100 %") ), GetTextHeight() );
144 
145     aSize.Width() += 20, aSize.Height() += 6;
146     SetSizePixel( aSize );
147 
148     if ( maCommand.equalsAscii( ".uno:GrafGamma" ))
149     {
150         SetDecimalDigits( 2 );
151 
152         SetMin( 10 );
153         SetFirst( 10 );
154         SetMax( 1000 );
155         SetLast( 1000 );
156         SetSpinSize( 10 );
157     }
158     else
159     {
160         const long nMinVal = ( maCommand.equalsAscii( ".uno:GrafTransparence" )) ? 0 : -100;
161 
162         SetUnit( FUNIT_CUSTOM );
163         SetCustomUnitText( String::CreateFromAscii(" %") );
164         SetDecimalDigits( 0 );
165 
166         SetMin( nMinVal );
167         SetFirst( nMinVal );
168         SetMax( 100 );
169         SetLast( 100 );
170         SetSpinSize( 1 );
171     }
172 
173     maTimer.SetTimeout( 100 );
174     maTimer.SetTimeoutHdl( LINK( this, ImplGrafMetricField, ImplModifyHdl ) );
175 }
176 
177 // -----------------------------------------------------------------------------
178 
~ImplGrafMetricField()179 ImplGrafMetricField::~ImplGrafMetricField()
180 {
181 }
182 
183 // -----------------------------------------------------------------------------
184 
Modify()185 void ImplGrafMetricField::Modify()
186 {
187     maTimer.Start();
188 }
189 
190 // -----------------------------------------------------------------------------
191 
IMPL_LINK(ImplGrafMetricField,ImplModifyHdl,Timer *,EMPTYARG)192 IMPL_LINK( ImplGrafMetricField, ImplModifyHdl, Timer*, EMPTYARG )
193 {
194     const sal_Int64 nVal = GetValue();
195 
196     // Convert value to an any to be usable with dispatch API
197     Any a;
198     if ( maCommand.equalsAscii( ".uno:GrafRed" ) ||
199          maCommand.equalsAscii( ".uno:GrafGreen" ) ||
200          maCommand.equalsAscii( ".uno:GrafBlue" ) ||
201          maCommand.equalsAscii( ".uno:GrafLuminance" ) ||
202          maCommand.equalsAscii( ".uno:GrafContrast" ))
203         a = makeAny( sal_Int16( nVal ));
204     else if ( maCommand.equalsAscii( ".uno:GrafGamma" ) ||
205               maCommand.equalsAscii( ".uno:GrafTransparence" ))
206         a = makeAny( sal_Int32( nVal ));
207 
208     if ( a.hasValue() )
209     {
210         INetURLObject aObj( maCommand );
211 
212         Sequence< PropertyValue > aArgs( 1 );
213         aArgs[0].Name = aObj.GetURLPath();
214         aArgs[0].Value = a;
215 
216         SfxToolBoxControl::Dispatch(
217             Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
218             maCommand,
219             aArgs );
220     }
221     return 0L;
222 }
223 
224 // -----------------------------------------------------------------------------
225 
Update(const SfxPoolItem * pItem)226 void ImplGrafMetricField::Update( const SfxPoolItem* pItem )
227 {
228     if( pItem )
229     {
230         long nValue;
231 
232         if ( maCommand.equalsAscii( ".uno:GrafTransparence" ))
233             nValue = ( (SfxUInt16Item*) pItem )->GetValue();
234         else if ( maCommand.equalsAscii( ".uno:GrafGamma" ))
235             nValue = ( (SfxUInt32Item*) pItem )->GetValue();
236         else
237             nValue = ( (SfxInt16Item*) pItem )->GetValue();
238 
239         SetValue( nValue );
240     }
241     else
242         SetText( String() );
243 }
244 
245 // --------------------
246 // - ImplGrafControl -
247 // --------------------
248 
249 struct CommandToRID
250 {
251     const char* pCommand;
252     sal_uInt16      nResId;
253     sal_uInt16      nHCResId;
254 };
255 
ImplGetRID(const OUString & aCommand,bool bHighContrast)256 static sal_uInt16 ImplGetRID( const OUString& aCommand, bool bHighContrast )
257 {
258     static const CommandToRID aImplCommandToResMap[] =
259     {
260         { ".uno:GrafRed", RID_SVXIMG_GRAF_RED, RID_SVXIMG_GRAF_RED_H },
261         { ".uno:GrafGreen", RID_SVXIMG_GRAF_GREEN, RID_SVXIMG_GRAF_GREEN_H },
262         { ".uno:GrafBlue", RID_SVXIMG_GRAF_BLUE, RID_SVXIMG_GRAF_BLUE_H },
263         { ".uno:GrafLuminance", RID_SVXIMG_GRAF_LUMINANCE, RID_SVXIMG_GRAF_LUMINANCE_H },
264         { ".uno:GrafContrast", RID_SVXIMG_GRAF_CONTRAST, RID_SVXIMG_GRAF_CONTRAST_H },
265         { ".uno:GrafGamma", RID_SVXIMG_GRAF_GAMMA, RID_SVXIMG_GRAF_GAMMA_H },
266         { ".uno:GrafTransparence", RID_SVXIMG_GRAF_TRANSPARENCE, RID_SVXIMG_GRAF_TRANSPARENCE_H },
267         { 0, 0, 0 }
268     };
269 
270     sal_uInt16 nRID = 0;
271 
272     sal_Int32 i( 0 );
273     while ( aImplCommandToResMap[ i ].pCommand )
274     {
275         if ( aCommand.equalsAscii( aImplCommandToResMap[ i ].pCommand ))
276         {
277             if ( bHighContrast )
278                 nRID = aImplCommandToResMap[ i ].nHCResId;
279             else
280                 nRID = aImplCommandToResMap[ i ].nResId;
281             break;
282         }
283         ++i;
284     }
285 
286     return nRID;
287 }
288 
289 // -----------------------------------------------------------------------------
290 
291 class ImplGrafControl : public Control
292 {
293     using Window::Update;
294 private:
295     FixedImage              maImage;
296     ImplGrafMetricField     maField;
297 
298 protected:
299 
300     virtual void            GetFocus();
301 
302 public:
303 
304                             ImplGrafControl( Window* pParent, sal_uInt16 nSlotId, const rtl::OUString& rCmd, const Reference< XFrame >& rFrame );
305                             ~ImplGrafControl();
306 
Update(const SfxPoolItem * pItem)307     void                    Update( const SfxPoolItem* pItem ) { maField.Update( pItem ); }
SetText(const String & rStr)308     void                    SetText( const String& rStr ) { maField.SetText( rStr ); }
309 };
310 
311 // -----------------------------------------------------------------------------
312 
ImplGrafControl(Window * pParent,sal_uInt16,const rtl::OUString & rCmd,const Reference<XFrame> & rFrame)313 ImplGrafControl::ImplGrafControl( Window* pParent, sal_uInt16, const rtl::OUString& rCmd, const Reference< XFrame >& rFrame ) :
314     Control( pParent, WB_TABSTOP ),
315     maImage     ( this ),
316     maField     ( this, rCmd, rFrame )
317 {
318     ResId   aResId( ImplGetRID( rCmd, false ), DIALOG_MGR() ) ;
319     Image   aImage( aResId );
320 
321     ResId   aResIdHC( ImplGetRID( rCmd, true ), DIALOG_MGR() ) ;
322     Image   aImageHC( aResIdHC );
323 
324     Size    aImgSize( aImage.GetSizePixel() );
325     Size    aFldSize( maField.GetSizePixel() );
326     long    nFldY, nImgY;
327 
328     maImage.SetImage( aImage );
329     maImage.SetModeImage( aImageHC, BMP_COLOR_HIGHCONTRAST );
330     maImage.SetSizePixel( aImgSize );
331     // we want to see the background of the toolbox, not of the FixedImage or Control
332     maImage.SetBackground( Wallpaper( COL_TRANSPARENT ) );
333     SetBackground( Wallpaper( COL_TRANSPARENT ) );
334 
335     if( aImgSize.Height() > aFldSize.Height() )
336         nImgY = 0, nFldY = ( aImgSize.Height() - aFldSize.Height() ) >> 1;
337     else
338         nFldY = 0, nImgY = ( aFldSize.Height() - aImgSize.Height() ) >> 1;
339 
340     long nOffset = SYMBOL_TO_FIELD_OFFSET / 2;
341     maImage.SetPosPixel( Point( nOffset, nImgY ) );
342     maField.SetPosPixel( Point( aImgSize.Width() + SYMBOL_TO_FIELD_OFFSET, nFldY ) );
343     SetSizePixel( Size( aImgSize.Width() + aFldSize.Width() + SYMBOL_TO_FIELD_OFFSET + nOffset,
344                   Max( aImgSize.Height(), aFldSize.Height() ) ) );
345 
346     SetBackground( Wallpaper() ); // transparent background
347 
348     maImage.Show();
349 
350     maField.SetHelpId( rtl::OUStringToOString( rCmd, RTL_TEXTENCODING_UTF8 ) );
351     maField.Show();
352 }
353 
354 // -----------------------------------------------------------------------------
355 
~ImplGrafControl()356 ImplGrafControl::~ImplGrafControl()
357 {
358 }
359 
360 // -----------------------------------------------------------------------------
361 
GetFocus()362 void ImplGrafControl::GetFocus()
363 {
364     maField.GrabFocus();
365 }
366 
367 // -----------------------
368 // - ImplGrafModeControl -
369 // -----------------------
370 
371 class ImplGrafModeControl : public ListBox
372 {
373     using Window::Update;
374 private:
375     sal_uInt16              mnCurPos;
376     Reference< XFrame > mxFrame;
377 
378     virtual void    Select();
379     virtual long    PreNotify( NotifyEvent& rNEvt );
380     virtual long    Notify( NotifyEvent& rNEvt );
381     void            ImplReleaseFocus();
382 
383 public:
384 
385                     ImplGrafModeControl( Window* pParent, const Reference< XFrame >& rFrame );
386                     ~ImplGrafModeControl();
387 
388     void            Update( const SfxPoolItem* pItem );
389 };
390 
391 // -----------------------------------------------------------------------------
392 
ImplGrafModeControl(Window * pParent,const Reference<XFrame> & rFrame)393 ImplGrafModeControl::ImplGrafModeControl( Window* pParent, const Reference< XFrame >& rFrame ) :
394     ListBox( pParent, WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ),
395     mnCurPos( 0 ),
396     mxFrame( rFrame )
397 {
398     SetSizePixel( Size( 100, 260 ) );
399 
400     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_STANDARD ) );
401     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_GREYS ) );
402     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_MONO ) );
403     InsertEntry( SVX_RESSTR( RID_SVXSTR_GRAFMODE_WATERMARK ) );
404 
405     Show();
406 }
407 
408 // -----------------------------------------------------------------------
409 
~ImplGrafModeControl()410 ImplGrafModeControl::~ImplGrafModeControl()
411 {
412 }
413 
414 // -----------------------------------------------------------------------
415 
Select()416 void ImplGrafModeControl::Select()
417 {
418     if ( !IsTravelSelect() )
419     {
420         Sequence< PropertyValue > aArgs( 1 );
421         aArgs[0].Name = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "GrafMode" ));
422         aArgs[0].Value = makeAny( sal_Int16( GetSelectEntryPos() ));
423 
424         /*  #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
425             This instance may be deleted in the meantime (i.e. when a dialog is opened
426             while in Dispatch()), accessing members will crash in this case. */
427         ImplReleaseFocus();
428 
429         SfxToolBoxControl::Dispatch(
430             Reference< XDispatchProvider >( mxFrame->getController(), UNO_QUERY ),
431             OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:GrafMode" )),
432             aArgs );
433     }
434 }
435 
436 // -----------------------------------------------------------------------
437 
PreNotify(NotifyEvent & rNEvt)438 long ImplGrafModeControl::PreNotify( NotifyEvent& rNEvt )
439 {
440     sal_uInt16 nType = rNEvt.GetType();
441 
442     if( EVENT_MOUSEBUTTONDOWN == nType || EVENT_GETFOCUS == nType )
443         mnCurPos = GetSelectEntryPos();
444 
445     return ListBox::PreNotify( rNEvt );
446 }
447 
448 // -----------------------------------------------------------------------
449 
Notify(NotifyEvent & rNEvt)450 long ImplGrafModeControl::Notify( NotifyEvent& rNEvt )
451 {
452     long nHandled = ListBox::Notify( rNEvt );
453 
454     if( rNEvt.GetType() == EVENT_KEYINPUT )
455     {
456         const KeyEvent* pKEvt = rNEvt.GetKeyEvent();
457 
458         switch( pKEvt->GetKeyCode().GetCode() )
459         {
460             case KEY_RETURN:
461             {
462                 Select();
463                 nHandled = 1;
464             }
465             break;
466 
467             case KEY_ESCAPE:
468             {
469                 SelectEntryPos( mnCurPos );
470                 ImplReleaseFocus();
471                 nHandled = 1;
472             }
473             break;
474         }
475     }
476 
477     return nHandled;
478 }
479 
480 // -----------------------------------------------------------------------
481 
ImplReleaseFocus()482 void ImplGrafModeControl::ImplReleaseFocus()
483 {
484     if( SfxViewShell::Current() )
485     {
486         Window* pShellWnd = SfxViewShell::Current()->GetWindow();
487 
488         if( pShellWnd )
489             pShellWnd->GrabFocus();
490     }
491 }
492 
493 // -----------------------------------------------------------------------
494 
Update(const SfxPoolItem * pItem)495 void ImplGrafModeControl::Update( const SfxPoolItem* pItem )
496 {
497     if( pItem )
498         SelectEntryPos( ((SfxUInt16Item*)pItem)->GetValue() );
499     else
500         SetNoSelection();
501 }
502 
503 // -----------------------
504 // - ImplGrafFilterPopup -
505 // -----------------------
506 /*
507 CD!!!
508 class ImplGrafFilterPopup : public SfxPopupWindow
509 {
510 private:
511 
512     SvxGrafFilterToolBoxControl*        mpParent;
513     Reference< XConfigurableUIElement > m_xToolBar;
514 //  SfxToolBoxManager                   maTbxMgr;
515     ResId                               maResIdWin;
516     ResId                               maResIdTbx;
517     WindowAlign                         meTbxAlign;
518     Link                                maSelectHdl;
519 
520                                     DECL_LINK( TbxSelectHdl, void* );
521 
522 public:
523                                     ImplGrafFilterPopup( sal_uInt16 nId, SvxGrafFilterToolBoxControl* pParent,
524                                                          WindowAlign eAlign,
525                                                          const ResId& rResIdWin, const ResId& rResIdTbx,
526                                                          SfxBindings& rBindings );
527                                     ~ImplGrafFilterPopup();
528 
529     virtual SfxPopupWindow*         Clone() const;
530     virtual void                    PopupModeEnd();
531 
532     void                            StartSelection() { maTbxMgr.GetToolBox().StartSelection(); }
533     void                            Update();
534 };
535 
536 // -----------------------------------------------------------------------------
537 
538 ImplGrafFilterPopup::ImplGrafFilterPopup( sal_uInt16 nId, SvxGrafFilterToolBoxControl* pParent,
539                                           WindowAlign eAlign,
540                                           const ResId& rResIdWin, const ResId& rResIdTbx ) :
541     SfxPopupWindow  ( nId, rResIdWin ),
542     mpParent        ( pParent ),
543     maTbxMgr        ( this, GetBindings(), rResIdTbx ),
544     maResIdWin      ( rResIdWin ),
545     maResIdTbx      ( rResIdTbx ),
546     meTbxAlign      ( eAlign )
547 {
548     maTbxMgr.UseDefault();
549 
550     maSelectHdl = maTbxMgr.GetToolBox().GetSelectHdl();
551     maTbxMgr.GetToolBox().SetSelectHdl( LINK( this, ImplGrafFilterPopup, TbxSelectHdl ) );
552 
553     FreeResource();
554 
555     const Size aSize( maTbxMgr.CalcWindowSizePixel() );
556     maTbxMgr.SetPosSizePixel( Point(), aSize );
557     SetOutputSizePixel( aSize );
558 }
559 
560 // -----------------------------------------------------------------------------
561 
562 ImplGrafFilterPopup::~ImplGrafFilterPopup()
563 {
564 }
565 
566 // -----------------------------------------------------------------------------
567 
568 SfxPopupWindow* ImplGrafFilterPopup::Clone() const
569 {
570     return( new ImplGrafFilterPopup( GetId(), mpParent, meTbxAlign,
571                                      maResIdWin, maResIdTbx,
572                                      (SfxBindings&) GetBindings() ) );
573 }
574 
575 // -----------------------------------------------------------------------------
576 
577 void ImplGrafFilterPopup::Update()
578 {
579     ToolBox* pBox = &maTbxMgr.GetToolBox();
580     maTbxMgr.Activate( pBox );
581     maTbxMgr.Deactivate( pBox );
582 }
583 
584 // -----------------------------------------------------------------------------
585 
586 void ImplGrafFilterPopup::PopupModeEnd()
587 {
588     maTbxMgr.GetToolBox().EndSelection();
589     SfxPopupWindow::PopupModeEnd();
590 }
591 
592 // -----------------------------------------------------------------------------
593 
594 IMPL_LINK( ImplGrafFilterPopup, TbxSelectHdl, void*, EMPTYARG )
595 {
596     const sal_uInt16 nSlotId = maTbxMgr.GetToolBox().GetCurItemId();
597 
598     if( IsInPopupMode() )
599         EndPopupMode();
600 
601     GetBindings().GetDispatcher()->Execute( nSlotId, SFX_CALLMODE_ASYNCHRON );
602 
603     return 0;
604 }
605 */
606 // -------------------------------
607 // - SvxGrafFilterToolBoxControl -
608 // -------------------------------
609 
610 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafFilterToolBoxControl, TbxImageItem );
611 
612 // -----------------------------------------------------------------------------
613 
SvxGrafFilterToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)614 SvxGrafFilterToolBoxControl::SvxGrafFilterToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
615     SfxToolBoxControl( nSlotId, nId, rTbx )
616 {
617     rTbx.SetItemBits( nId, TIB_DROPDOWNONLY | rTbx.GetItemBits( nId ) );
618     rTbx.Invalidate();
619 }
620 
621 // -----------------------------------------------------------------------------
622 
~SvxGrafFilterToolBoxControl()623 SvxGrafFilterToolBoxControl::~SvxGrafFilterToolBoxControl()
624 {
625 }
626 
627 // -----------------------------------------------------------------------------
628 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem *)629 void SvxGrafFilterToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* )
630 {
631     GetToolBox().EnableItem( GetId(), ( eState != SFX_ITEM_DISABLED ) );
632 }
633 
634 // -----------------------------------------------------------------------------
635 
GetPopupWindowType() const636 SfxPopupWindowType SvxGrafFilterToolBoxControl::GetPopupWindowType() const
637 {
638     return SFX_POPUPWINDOW_ONCLICK;
639 }
640 
641 // -----------------------------------------------------------------------------
642 
CreatePopupWindow()643 SfxPopupWindow* SvxGrafFilterToolBoxControl::CreatePopupWindow()
644 {
645     rtl::OUString aSubTbxResName(
646         RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/graffilterbar" ) );
647     createAndPositionSubToolBar( aSubTbxResName );
648 
649     return NULL;
650 }
651 
652 // -------------------------
653 // - SvxGrafToolBoxControl -
654 // -------------------------
655 
656 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafToolBoxControl, SfxVoidItem );
657 
658 // -----------------------------------------------------------------------------
659 
SvxGrafToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)660 SvxGrafToolBoxControl::SvxGrafToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx) :
661     SfxToolBoxControl( nSlotId, nId, rTbx )
662 {
663     rTbx.SetItemBits( nId, TIB_DROPDOWN | rTbx.GetItemBits( nId ) );
664     rTbx.Invalidate();
665 }
666 
667 // -----------------------------------------------------------------------------
668 
~SvxGrafToolBoxControl()669 SvxGrafToolBoxControl::~SvxGrafToolBoxControl()
670 {
671 }
672 
673 // -----------------------------------------------------------------------------
674 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)675 void SvxGrafToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
676 
677 {
678     ImplGrafControl* pCtrl = (ImplGrafControl*) GetToolBox().GetItemWindow( GetId() );
679     DBG_ASSERT( pCtrl, "Control not found" );
680 
681     if( eState == SFX_ITEM_DISABLED )
682     {
683         pCtrl->Disable();
684         pCtrl->SetText( String() );
685     }
686     else
687     {
688         pCtrl->Enable();
689 
690         if( eState == SFX_ITEM_AVAILABLE )
691             pCtrl->Update( pState );
692         else
693             pCtrl->Update( NULL );
694     }
695 }
696 
697 // -----------------------------------------------------------------------------
698 
CreateItemWindow(Window * pParent)699 Window* SvxGrafToolBoxControl::CreateItemWindow( Window *pParent )
700 {
701     return( new ImplGrafControl( pParent, GetSlotId(), m_aCommandURL, m_xFrame ) );
702 }
703 
704 // ----------------------------
705 // - SvxGrafRedToolBoxControl -
706 // ----------------------------
707 
708 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafRedToolBoxControl, SfxInt16Item );
709 
710 // -----------------------------------------------------------------------------
711 
SvxGrafRedToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)712 SvxGrafRedToolBoxControl::SvxGrafRedToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
713     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
714 {
715 }
716 
717 // ------------------------------
718 // - SvxGrafGreenToolBoxControl -
719 // ------------------------------
720 
721 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafGreenToolBoxControl, SfxInt16Item );
722 
723 // -----------------------------------------------------------------------------
724 
SvxGrafGreenToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)725 SvxGrafGreenToolBoxControl::SvxGrafGreenToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
726     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
727 {
728 }
729 
730 // -----------------------------
731 // - SvxGrafBlueToolBoxControl -
732 // -----------------------------
733 
734 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafBlueToolBoxControl, SfxInt16Item );
735 
736 // -----------------------------------------------------------------------------
737 
SvxGrafBlueToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)738 SvxGrafBlueToolBoxControl::SvxGrafBlueToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
739     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
740 {
741 }
742 
743 // ----------------------------------
744 // - SvxGrafLuminanceToolBoxControl -
745 // ----------------------------------
746 
747 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafLuminanceToolBoxControl, SfxInt16Item );
748 
749 // -----------------------------------------------------------------------------
750 
SvxGrafLuminanceToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)751 SvxGrafLuminanceToolBoxControl::SvxGrafLuminanceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
752     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
753 {
754 }
755 
756 // ----------------------------------
757 // - SvxGrafContrastToolBoxControl -
758 // ----------------------------------
759 
760 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafContrastToolBoxControl, SfxInt16Item );
761 
762 // -----------------------------------------------------------------------------
763 
SvxGrafContrastToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)764 SvxGrafContrastToolBoxControl::SvxGrafContrastToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
765     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
766 {
767 }
768 
769 // ------------------------------
770 // - SvxGrafGammaToolBoxControl -
771 // ------------------------------
772 
773 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafGammaToolBoxControl, SfxUInt32Item );
774 
775 // -----------------------------------------------------------------------------
776 
SvxGrafGammaToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)777 SvxGrafGammaToolBoxControl::SvxGrafGammaToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
778     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
779 {
780 }
781 
782 // -------------------------------------
783 // - SvxGrafTransparenceToolBoxControl -
784 // -------------------------------------
785 
786 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafTransparenceToolBoxControl, SfxUInt16Item );
787 
788 // -----------------------------------------------------------------------------
789 
SvxGrafTransparenceToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)790 SvxGrafTransparenceToolBoxControl::SvxGrafTransparenceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
791     SvxGrafToolBoxControl( nSlotId, nId, rTbx )
792 {
793 }
794 
795 // -----------------------------
796 // - SvxGrafModeToolBoxControl -
797 // -----------------------------
798 
799 SFX_IMPL_TOOLBOX_CONTROL( SvxGrafModeToolBoxControl, SfxUInt16Item );
800 
801 // -----------------------------------------------------------------------------
802 
SvxGrafModeToolBoxControl(sal_uInt16 nSlotId,sal_uInt16 nId,ToolBox & rTbx)803 SvxGrafModeToolBoxControl::SvxGrafModeToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
804     SfxToolBoxControl( nSlotId, nId, rTbx )
805 {
806 }
807 
808 // -----------------------------------------------------------------------------
809 
~SvxGrafModeToolBoxControl()810 SvxGrafModeToolBoxControl::~SvxGrafModeToolBoxControl()
811 {
812 }
813 
814 // -----------------------------------------------------------------------------
815 
StateChanged(sal_uInt16,SfxItemState eState,const SfxPoolItem * pState)816 void SvxGrafModeToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* pState )
817 
818 {
819     ImplGrafModeControl* pCtrl = (ImplGrafModeControl*) GetToolBox().GetItemWindow( GetId() );
820     DBG_ASSERT( pCtrl, "Control not found" );
821 
822     if( eState == SFX_ITEM_DISABLED )
823     {
824         pCtrl->Disable();
825         pCtrl->SetText( String() );
826     }
827     else
828     {
829         pCtrl->Enable();
830 
831         if( eState == SFX_ITEM_AVAILABLE )
832             pCtrl->Update( pState );
833         else
834             pCtrl->Update( NULL );
835     }
836 }
837 
838 // -----------------------------------------------------------------------------
839 
CreateItemWindow(Window * pParent)840 Window* SvxGrafModeToolBoxControl::CreateItemWindow( Window *pParent )
841 {
842     return( new ImplGrafModeControl( pParent, m_xFrame ) );
843 }
844 
845 // ---------------------
846 // - SvxGrafAttrHelper -
847 // ---------------------
848 
ExecuteGrafAttr(SfxRequest & rReq,SdrView & rView)849 void SvxGrafAttrHelper::ExecuteGrafAttr( SfxRequest& rReq, SdrView& rView )
850 {
851     SfxItemPool&    rPool = rView.GetModel()->GetItemPool();
852     SfxItemSet      aSet( rPool, SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST );
853     String          aUndoStr;
854     const bool      bUndo = rView.IsUndoEnabled();
855 
856     if( bUndo )
857     {
858         aUndoStr = rView.GetDescriptionOfMarkedObjects();
859         aUndoStr.Append( sal_Unicode(' ') );
860     }
861 
862     const SfxItemSet*   pArgs = rReq.GetArgs();
863     const SfxPoolItem*  pItem;
864     sal_uInt16              nSlot = rReq.GetSlot();
865 
866     if( !pArgs || SFX_ITEM_SET != pArgs->GetItemState( nSlot, sal_False, &pItem ))
867         pItem = 0;
868 
869     switch( nSlot )
870     {
871         case SID_ATTR_GRAF_RED:
872         {
873             if( pItem )
874             {
875                 aSet.Put( SdrGrafRedItem( ((SfxInt16Item*)pItem)->GetValue() ));
876                 if( bUndo )
877                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFRED ) ) );
878             }
879         }
880         break;
881 
882         case SID_ATTR_GRAF_GREEN:
883         {
884             if( pItem )
885             {
886                 aSet.Put( SdrGrafGreenItem( ((SfxInt16Item*)pItem)->GetValue() ));
887                 if( bUndo )
888                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFGREEN ) ) );
889             }
890         }
891         break;
892 
893         case SID_ATTR_GRAF_BLUE:
894         {
895             if( pItem )
896             {
897                 aSet.Put( SdrGrafBlueItem( ((SfxInt16Item*)pItem)->GetValue() ));
898                 if( bUndo )
899                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFBLUE ) ) );
900             }
901         }
902         break;
903 
904         case SID_ATTR_GRAF_LUMINANCE:
905         {
906             if( pItem )
907             {
908                 aSet.Put( SdrGrafLuminanceItem( ((SfxInt16Item*)pItem)->GetValue() ));
909                 if( bUndo )
910                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFLUMINANCE ) ) );
911             }
912         }
913         break;
914 
915         case SID_ATTR_GRAF_CONTRAST:
916         {
917             if( pItem )
918             {
919                 aSet.Put( SdrGrafContrastItem( ((SfxInt16Item*)pItem)->GetValue() ));
920                 if( bUndo )
921                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFCONTRAST ) ) );
922             }
923         }
924         break;
925 
926         case SID_ATTR_GRAF_GAMMA:
927         {
928             if( pItem )
929             {
930                 aSet.Put( SdrGrafGamma100Item( ((SfxUInt32Item*)pItem)->GetValue() ));
931                 if( bUndo )
932                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFGAMMA ) ) );
933             }
934         }
935         break;
936 
937         case SID_ATTR_GRAF_TRANSPARENCE:
938         {
939             if( pItem )
940             {
941                 aSet.Put( SdrGrafTransparenceItem( ((SfxUInt16Item*)pItem)->GetValue() ));
942                 if( bUndo )
943                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFTRANSPARENCY ) ) );
944             }
945         }
946         break;
947 
948         case SID_ATTR_GRAF_MODE:
949         {
950             if( pItem )
951             {
952                 aSet.Put( SdrGrafModeItem( (GraphicDrawMode) ((SfxUInt16Item*)pItem)->GetValue() ));
953                 if( bUndo )
954                     aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFMODE ) ) );
955             }
956         }
957         break;
958 
959         case( SID_ATTR_GRAF_CROP ):
960         {
961             const SdrMarkList& rMarkList = rView.GetMarkedObjectList();
962 
963             if( 0 < rMarkList.GetMarkCount() )
964             {
965                 SdrGrafObj* pObj = (SdrGrafObj*) rMarkList.GetMark( 0 )->GetMarkedSdrObj();
966 
967                 if( pObj && pObj->ISA( SdrGrafObj ) &&
968                     ( pObj->GetGraphicType() != GRAPHIC_NONE ) &&
969                     ( pObj->GetGraphicType() != GRAPHIC_DEFAULT ) )
970                 {
971                     SfxItemSet          aGrfAttr( rPool, SDRATTR_GRAFCROP, SDRATTR_GRAFCROP, 0 );
972                     const SfxMapUnit    eOldMetric = rPool.GetMetric( 0 );
973                     const MapMode       aMap100( MAP_100TH_MM );
974                     const MapMode       aMapTwip( MAP_TWIP );
975 
976                     aGrfAttr.Put(pObj->GetMergedItemSet());
977                     rPool.SetDefaultMetric( SFX_MAPUNIT_TWIP );
978 
979                     SfxItemSet  aCropDlgAttr( rPool,
980                                             SDRATTR_GRAFCROP, SDRATTR_GRAFCROP,
981                                             SID_ATTR_GRAF_GRAPHIC, SID_ATTR_GRAF_GRAPHIC,
982                                             SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
983                                             SID_ATTR_GRAF_FRMSIZE, SID_ATTR_GRAF_FRMSIZE,
984                                             SID_ATTR_GRAF_CROP, SID_ATTR_GRAF_CROP, 0 );
985 
986                     aCropDlgAttr.Put( SvxBrushItem( pObj->GetGraphic(), GPOS_MM, SID_ATTR_GRAF_GRAPHIC ) );
987                     aCropDlgAttr.Put( SvxSizeItem( SID_ATTR_PAGE_SIZE,
988                                                 Size( OutputDevice::LogicToLogic(
989                                                         Size( 200000, 200000 ), aMap100, aMapTwip ) ) ) );
990                     aCropDlgAttr.Put( SvxSizeItem( SID_ATTR_GRAF_FRMSIZE, OutputDevice::LogicToLogic(
991                                                 pObj->GetLogicRect().GetSize(), aMap100, aMapTwip ) ) );
992 
993                     const SdrGrafCropItem&  rCrop = (const SdrGrafCropItem&) aGrfAttr.Get( SDRATTR_GRAFCROP );
994                     Size                    aLTSize( OutputDevice::LogicToLogic(
995                                                     Size( rCrop.GetLeft(), rCrop.GetTop() ), aMap100, aMapTwip ) );
996                     Size                    aRBSize( OutputDevice::LogicToLogic(
997                                                     Size( rCrop.GetRight(), rCrop.GetBottom() ), aMap100, aMapTwip ) );
998 
999                     aCropDlgAttr.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(),
1000                                                     aRBSize.Width(), aRBSize.Height() ) );
1001 
1002                     SfxSingleTabDialog  aCropDialog( SfxViewShell::Current() ? SfxViewShell::Current()->GetWindow() : NULL,
1003                                                     aCropDlgAttr, 950 );
1004                     const String        aCropStr = SVX_RESSTR( RID_SVXSTR_GRAFCROP );
1005                     //CHINA001 SfxTabPage*          pTabPage = SvxGrfCropPage::Create( &aCropDialog, aCropDlgAttr );
1006                     SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
1007                     DBG_ASSERT(pFact, "Dialogdiet error!");//CHINA001
1008                     ::CreateTabPage fnCreatePage = pFact->GetTabPageCreatorFunc( RID_SVXPAGE_GRFCROP );
1009                     DBG_ASSERT(fnCreatePage, "Dialogdiet error!");//CHINA001
1010                     SfxTabPage* pTabPage = (*fnCreatePage)( &aCropDialog, aCropDlgAttr );
1011                     //CHINA001 end
1012                     pTabPage->SetText( aCropStr );
1013                     aCropDialog.SetTabPage( pTabPage );
1014 
1015                     if( aCropDialog.Execute() == RET_OK )
1016                     {
1017                         const SfxItemSet* pOutAttr = aCropDialog.GetOutputItemSet();
1018 
1019                         if( pOutAttr )
1020                         {
1021                             aUndoStr.Append( String( SVX_RESSTR( RID_SVXSTR_UNDO_GRAFCROP ) ) );
1022 
1023                             // set crop attributes
1024                             if( SFX_ITEM_SET <= pOutAttr->GetItemState( SDRATTR_GRAFCROP ) )
1025                             {
1026                                 const SdrGrafCropItem& rNewCrop = (const SdrGrafCropItem&) pOutAttr->Get( SDRATTR_GRAFCROP );
1027 
1028                                 aLTSize = OutputDevice::LogicToLogic( Size( rNewCrop.GetLeft(), rNewCrop.GetTop() ), aMapTwip, aMap100 );
1029                                 aRBSize = OutputDevice::LogicToLogic( Size( rNewCrop.GetRight(), rNewCrop.GetBottom() ), aMapTwip, aMap100 );
1030                                 aSet.Put( SdrGrafCropItem( aLTSize.Width(), aLTSize.Height(), aRBSize.Width(), aRBSize.Height() ) );
1031                             }
1032 
1033                             // set new logic rect
1034                             if( SFX_ITEM_SET <= pOutAttr->GetItemState( SID_ATTR_GRAF_FRMSIZE ) )
1035                             {
1036                                 Point       aNewOrigin( pObj->GetLogicRect().TopLeft() );
1037                                 const Size& rGrfSize = ( (const SvxSizeItem&) pOutAttr->Get( SID_ATTR_GRAF_FRMSIZE ) ).GetSize();
1038                                 Size        aNewGrfSize( OutputDevice::LogicToLogic( rGrfSize, aMapTwip, aMap100 ) );
1039                                 Size        aOldGrfSize( pObj->GetLogicRect().GetSize() );
1040 
1041                                 Rectangle aNewRect( aNewOrigin, aNewGrfSize );
1042                                 Point aOffset( (aNewGrfSize.Width() - aOldGrfSize.Width()) >> 1,
1043                                             (aNewGrfSize.Height() - aOldGrfSize.Height()) >> 1 );
1044 
1045                                 // #106181# rotate snap rect before setting it
1046                                 const GeoStat& aGeo = pObj->GetGeoStat();
1047 
1048                                 if (aGeo.nDrehWink!=0 || aGeo.nShearWink!=0)
1049                                 {
1050                                     Polygon aPol(aNewRect);
1051 
1052                                     // also transform origin offset
1053                                     if (aGeo.nShearWink!=0)
1054                                     {
1055                                         ShearPoly(aPol,
1056                                                 aNewRect.TopLeft(),
1057                                                 aGeo.nTan);
1058                                         ShearPoint(aOffset, Point(0,0), aGeo.nTan);
1059                                     }
1060                                     if (aGeo.nDrehWink!=0)
1061                                     {
1062                                         RotatePoly(aPol,
1063                                                 aNewRect.TopLeft(),
1064                                                 aGeo.nSin,aGeo.nCos);
1065                                         RotatePoint(aOffset, Point(0,0), aGeo.nSin,aGeo.nCos);
1066                                     }
1067 
1068                                     // apply offset
1069                                     aPol.Move( -aOffset.X(), -aOffset.Y() );
1070                                     aNewRect=aPol.GetBoundRect();
1071                                 }
1072                                 else
1073                                 {
1074                                     aNewRect.Move( -aOffset.X(), -aOffset.Y() );
1075                                 }
1076 
1077                                 if( !aSet.Count() )
1078                                     rView.SetMarkedObjRect( aNewRect );
1079                                 else
1080                                 {
1081                                     if( bUndo )
1082                                     {
1083                                         rView.BegUndo( aUndoStr );
1084                                         rView.AddUndo( rView.GetModel()->GetSdrUndoFactory().CreateUndoGeoObject( *pObj ) );
1085                                     }
1086                                     pObj->SetSnapRect( aNewRect );
1087                                     rView.SetAttributes( aSet );
1088 
1089                                     if( bUndo )
1090                                         rView.EndUndo();
1091                                     aSet.ClearItem();
1092                                 }
1093                             }
1094                         }
1095                     }
1096 
1097                     rPool.SetDefaultMetric( eOldMetric );
1098                 }
1099             }
1100         }
1101         break;
1102 
1103         case SID_COLOR_SETTINGS:
1104         {
1105             svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
1106             aToolboxAccess.toggleToolbox();
1107             rReq.Done();
1108             break;
1109         }
1110 
1111         default:
1112             break;
1113     }
1114 
1115     if( aSet.Count() )
1116     {
1117         if( bUndo )
1118             rView.BegUndo( aUndoStr );
1119 
1120         rView.SetAttributes( aSet );
1121 
1122         if( bUndo )
1123             rView.EndUndo();
1124     }
1125 }
1126 
1127 // -----------------------------------------------------------------------------
1128 
GetGrafAttrState(SfxItemSet & rSet,SdrView & rView)1129 void SvxGrafAttrHelper::GetGrafAttrState( SfxItemSet& rSet, SdrView& rView )
1130 {
1131     SfxItemPool&    rPool = rView.GetModel()->GetItemPool();
1132     SfxItemSet      aAttrSet( rPool );
1133     SfxWhichIter    aIter( rSet );
1134     sal_uInt16      nWhich = aIter.FirstWhich();
1135     const           SdrMarkList& rMarkList = rView.GetMarkedObjectList();
1136     bool            bEnableColors = true;
1137     bool            bEnableTransparency = true;
1138     bool            bEnableCrop = ( 1 == rMarkList.GetMarkCount() );
1139 
1140     for( int i = 0, nCount = rMarkList.GetMarkCount(); i < nCount; ++i )
1141     {
1142         SdrGrafObj* pGrafObj = dynamic_cast< SdrGrafObj* >( rMarkList.GetMark( i )->GetMarkedSdrObj() );
1143 
1144         if( !pGrafObj ||
1145             ( pGrafObj->GetGraphicType() == GRAPHIC_NONE ) ||
1146             ( pGrafObj->GetGraphicType() == GRAPHIC_DEFAULT ))
1147         {
1148             bEnableColors = bEnableTransparency = bEnableCrop = false;
1149             break;
1150         }
1151         else if( bEnableTransparency && ( pGrafObj->HasGDIMetaFile() || pGrafObj->IsAnimated() ) )
1152         {
1153             bEnableTransparency = false;
1154         }
1155     }
1156 
1157     rView.GetAttributes( aAttrSet );
1158 
1159     while( nWhich )
1160     {
1161         sal_uInt16 nSlotId = SfxItemPool::IsWhich( nWhich ) ? rPool.GetSlotId( nWhich ) : nWhich;
1162 
1163         switch( nSlotId )
1164         {
1165             case( SID_ATTR_GRAF_MODE ):
1166             {
1167                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFMODE ) )
1168                 {
1169                     if( bEnableColors )
1170                     {
1171                         rSet.Put( SfxUInt16Item( nSlotId,
1172                             sal::static_int_cast< sal_uInt16 >( ITEMVALUE( aAttrSet, SDRATTR_GRAFMODE, SdrGrafModeItem ) ) ) );
1173                     }
1174                     else
1175                     {
1176                         rSet.DisableItem( SID_ATTR_GRAF_MODE );
1177                     }
1178                 }
1179             }
1180             break;
1181 
1182             case( SID_ATTR_GRAF_RED ):
1183             {
1184                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFRED ) )
1185                 {
1186                     if( bEnableColors )
1187                     {
1188                         rSet.Put( SfxInt16Item( nSlotId,
1189                             ITEMVALUE( aAttrSet, SDRATTR_GRAFRED, SdrGrafRedItem ) ) );
1190                     }
1191                     else
1192                     {
1193                         rSet.DisableItem( SID_ATTR_GRAF_RED );
1194                     }
1195                 }
1196             }
1197             break;
1198 
1199             case( SID_ATTR_GRAF_GREEN ):
1200             {
1201                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFGREEN ) )
1202                 {
1203                     if( bEnableColors )
1204                     {
1205                         rSet.Put( SfxInt16Item( nSlotId,
1206                             ITEMVALUE( aAttrSet, SDRATTR_GRAFGREEN, SdrGrafGreenItem ) ) );
1207                     }
1208                     else
1209                     {
1210                         rSet.DisableItem( SID_ATTR_GRAF_GREEN );
1211                     }
1212                 }
1213             }
1214             break;
1215 
1216             case( SID_ATTR_GRAF_BLUE ):
1217             {
1218                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFBLUE ) )
1219                 {
1220                     if( bEnableColors )
1221                     {
1222                         rSet.Put( SfxInt16Item( nSlotId,
1223                             ITEMVALUE( aAttrSet, SDRATTR_GRAFBLUE, SdrGrafBlueItem ) ) );
1224                     }
1225                     else
1226                     {
1227                         rSet.DisableItem( SID_ATTR_GRAF_BLUE );
1228                     }
1229                 }
1230             }
1231             break;
1232 
1233             case( SID_ATTR_GRAF_LUMINANCE ):
1234             {
1235                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFLUMINANCE ) )
1236                 {
1237                     if( bEnableColors )
1238                     {
1239                         rSet.Put( SfxInt16Item( nSlotId,
1240                             ITEMVALUE( aAttrSet, SDRATTR_GRAFLUMINANCE, SdrGrafLuminanceItem ) ) );
1241                     }
1242                     else
1243                     {
1244                         rSet.DisableItem( SID_ATTR_GRAF_LUMINANCE );
1245                     }
1246                 }
1247             }
1248             break;
1249 
1250             case( SID_ATTR_GRAF_CONTRAST ):
1251             {
1252                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFCONTRAST ) )
1253                 {
1254                     if( bEnableColors )
1255                     {
1256                         rSet.Put( SfxInt16Item( nSlotId,
1257                             ITEMVALUE( aAttrSet, SDRATTR_GRAFCONTRAST, SdrGrafContrastItem ) ) );
1258                     }
1259                     else
1260                     {
1261                         rSet.DisableItem( SID_ATTR_GRAF_CONTRAST );
1262                     }
1263                 }
1264             }
1265             break;
1266 
1267             case( SID_ATTR_GRAF_GAMMA ):
1268             {
1269                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFGAMMA ) )
1270                 {
1271                     if( bEnableColors )
1272                     {
1273                         rSet.Put( SfxUInt32Item( nSlotId,
1274                             ITEMVALUE( aAttrSet, SDRATTR_GRAFGAMMA, SdrGrafGamma100Item ) ) );
1275                     }
1276                     else
1277                     {
1278                         rSet.DisableItem( SID_ATTR_GRAF_GAMMA );
1279                     }
1280                 }
1281             }
1282             break;
1283 
1284             case( SID_ATTR_GRAF_TRANSPARENCE ):
1285             {
1286                 if( SFX_ITEM_AVAILABLE <= aAttrSet.GetItemState( SDRATTR_GRAFTRANSPARENCE ) )
1287                 {
1288                     if( bEnableTransparency )
1289                     {
1290                         rSet.Put( SfxUInt16Item( nSlotId,
1291                             ITEMVALUE( aAttrSet, SDRATTR_GRAFTRANSPARENCE, SdrGrafTransparenceItem ) ) );
1292                     }
1293                     else
1294                     {
1295                         rSet.DisableItem( SID_ATTR_GRAF_TRANSPARENCE );
1296                     }
1297                 }
1298             }
1299             break;
1300 
1301             case( SID_ATTR_GRAF_CROP ):
1302             {
1303                 if( !bEnableCrop )
1304                     rSet.DisableItem( nSlotId );
1305             }
1306             break;
1307 
1308             case SID_COLOR_SETTINGS :
1309             {
1310                 svx::ToolboxAccess aToolboxAccess( TOOLBOX_NAME );
1311                 rSet.Put( SfxBoolItem( nWhich, aToolboxAccess.isToolboxVisible() ) );
1312                 break;
1313             }
1314 
1315             default:
1316             break;
1317         }
1318 
1319         nWhich = aIter.NextWhich();
1320     }
1321 }
1322 
1323 /* vim: set noet sw=4 ts=4: */
1324