xref: /AOO41X/main/svx/source/tbxctrls/grafctrl.cxx (revision 74d4449f545d057116574e4b741dabbdd02f9afc)
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 
89 TbxImageItem::TbxImageItem( sal_uInt16 _nWhich, sal_uInt16 nImage ) :
90 	SfxUInt16Item( _nWhich, nImage )
91 {
92 }
93 
94 //---------------------------------------------------------
95 
96 SfxPoolItem* TbxImageItem::Clone( SfxItemPool* ) const
97 {
98 	return new TbxImageItem( *this );
99 }
100 
101 //---------------------------------------------------------
102 
103 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 );
133 	const OUString&	GetCommand() const { return maCommand; }
134 };
135 
136 // -----------------------------------------------------------------------------
137 
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 
179 ImplGrafMetricField::~ImplGrafMetricField()
180 {
181 }
182 
183 // -----------------------------------------------------------------------------
184 
185 void ImplGrafMetricField::Modify()
186 {
187 	maTimer.Start();
188 }
189 
190 // -----------------------------------------------------------------------------
191 
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 
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 
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 
307 	void					Update( const SfxPoolItem* pItem ) { maField.Update( pItem ); }
308 	void					SetText( const String& rStr ) { maField.SetText( rStr ); }
309 };
310 
311 // -----------------------------------------------------------------------------
312 
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 
356 ImplGrafControl::~ImplGrafControl()
357 {
358 }
359 
360 // -----------------------------------------------------------------------------
361 
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 
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 
410 ImplGrafModeControl::~ImplGrafModeControl()
411 {
412 }
413 
414 // -----------------------------------------------------------------------
415 
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 
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 
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 
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 
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 
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 
623 SvxGrafFilterToolBoxControl::~SvxGrafFilterToolBoxControl()
624 {
625 }
626 
627 // -----------------------------------------------------------------------------
628 
629 void SvxGrafFilterToolBoxControl::StateChanged( sal_uInt16, SfxItemState eState, const SfxPoolItem* )
630 {
631 	GetToolBox().EnableItem( GetId(), ( eState != SFX_ITEM_DISABLED ) );
632 }
633 
634 // -----------------------------------------------------------------------------
635 
636 SfxPopupWindowType SvxGrafFilterToolBoxControl::GetPopupWindowType() const
637 {
638 	return SFX_POPUPWINDOW_ONCLICK;
639 }
640 
641 // -----------------------------------------------------------------------------
642 
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 
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 
669 SvxGrafToolBoxControl::~SvxGrafToolBoxControl()
670 {
671 }
672 
673 // -----------------------------------------------------------------------------
674 
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 
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 
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 
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 
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 
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 
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 
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 
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 
803 SvxGrafModeToolBoxControl::SvxGrafModeToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ) :
804 	SfxToolBoxControl( nSlotId, nId, rTbx )
805 {
806 }
807 
808 // -----------------------------------------------------------------------------
809 
810 SvxGrafModeToolBoxControl::~SvxGrafModeToolBoxControl()
811 {
812 }
813 
814 // -----------------------------------------------------------------------------
815 
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 
840 Window* SvxGrafModeToolBoxControl::CreateItemWindow( Window *pParent )
841 {
842 	return( new ImplGrafModeControl( pParent, m_xFrame ) );
843 }
844 
845 // ---------------------
846 // - SvxGrafAttrHelper -
847 // ---------------------
848 
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 
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