2 * This file is part of the LibreOffice project.
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 * This file incorporates work covered by the following license notice:
10 * Licensed to the Apache Software Foundation (ASF) under one or more
11 * contributor license agreements. See the NOTICE file distributed
12 * with this work for additional information regarding copyright
13 * ownership. The ASF licenses this file to you under the Apache
14 * License, Version 2.0 (the "License"); you may not use this file
15 * except in compliance with the License. You may obtain a copy of
16 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 #include "svx/sidebar/PopupContainer.hxx"
19 #include "AreaTransparencyGradientControl.hxx"
21 #include <sfx2/sidebar/ResourceDefinitions.hrc>
22 #include <sfx2/sidebar/Theme.hxx>
23 #include <sfx2/sidebar/ControlFactory.hxx>
24 #include <AreaPropertyPanel.hxx>
25 #include <AreaPropertyPanel.hrc>
26 #include <svx/dialogs.hrc>
27 #include <svx/dialmgr.hxx>
28 #include <sfx2/objsh.hxx>
29 #include <svx/xfltrit.hxx>
30 #include <svx/xflftrit.hxx>
31 #include <svx/xtable.hxx>
32 #include <sfx2/dispatch.hxx>
33 #include <sfx2/bindings.hxx>
35 #include <svtools/valueset.hxx>
36 #include <unotools/pathoptions.hxx>
37 #include <svx/svxitems.hrc>
38 #include <vcl/toolbox.hxx>
39 #include <svtools/toolbarmenu.hxx>
40 #include <svx/sidebar/ColorControl.hxx>
42 #include <boost/bind.hpp>
46 using ::sfx2::sidebar::Theme
;
48 #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
53 namespace svx
{ namespace sidebar
{
55 const sal_Int32
AreaPropertyPanel::DEFAULT_CENTERX
= 50;
56 const sal_Int32
AreaPropertyPanel::DEFAULT_CENTERY
= 50;
57 const sal_Int32
AreaPropertyPanel::DEFAULT_ANGLE
= 0;
58 const sal_Int32
AreaPropertyPanel::DEFAULT_STARTVALUE
= 0;
59 const sal_Int32
AreaPropertyPanel::DEFAULT_ENDVALUE
= 16777215;
60 const sal_Int32
AreaPropertyPanel::DEFAULT_BORDER
= 0;
63 AreaPropertyPanel::AreaPropertyPanel(
65 const cssu::Reference
<css::frame::XFrame
>& rxFrame
,
66 SfxBindings
* pBindings
)
67 : Control(pParent
, SVX_RES(RID_SIDEBAR_AREA_PANEL
)),
69 maLastColor(Color(COL_DEFAULT_SHAPE_FILLING
)),
77 maGradientElliptical(),
80 mpColorTextFT(new FixedText(this, SVX_RES(FT_COLOR_LIST
))),
81 mpLbFillType(new SvxFillTypeBox(this)),
82 mpLbFillAttr(new SvxFillAttrBox(this)),
83 mpToolBoxColorBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
84 mpToolBoxColor(sfx2::sidebar::ControlFactory::CreateToolBox(mpToolBoxColorBackground
.get(), SVX_RES(TB_COLOR
))),
85 mpTrspTextFT(new FixedText(this, SVX_RES(FL_TRSP_TEXT
))),
86 mpLBTransType(new ListBox(this, SVX_RES(LB_TRGR_TYPES
))),
87 mpMTRTransparent(new MetricField(this, SVX_RES(MTR_TRANSPARENT
))),
88 mpBTNGradientBackground(sfx2::sidebar::ControlFactory::CreateToolBoxBackground(this)),
89 mpBTNGradient(sfx2::sidebar::ControlFactory::CreateToolBox(mpBTNGradientBackground
.get(), SVX_RES(BTN_GRADIENT
))),
90 mpColorUpdater(new ::svx::ToolboxButtonColorUpdater(SID_ATTR_FILL_COLOR
, TBI_COLOR
, mpToolBoxColor
.get(), TBX_UPDATER_MODE_CHAR_COLOR_NEW
)),
96 maStyleControl(SID_ATTR_FILL_STYLE
, *pBindings
, *this),
97 maColorControl(SID_ATTR_FILL_COLOR
, *pBindings
, *this),
98 maGradientControl(SID_ATTR_FILL_GRADIENT
, *pBindings
, *this),
99 maHatchControl(SID_ATTR_FILL_HATCH
, *pBindings
, *this),
100 maBitmapControl(SID_ATTR_FILL_BITMAP
, *pBindings
, *this),
101 maColorTableControl(SID_COLOR_TABLE
, *pBindings
, *this),
102 maGradientListControl(SID_GRADIENT_LIST
, *pBindings
, *this),
103 maHatchListControl(SID_HATCH_LIST
, *pBindings
, *this),
104 maBitmapListControl(SID_BITMAP_LIST
, *pBindings
, *this),
105 maFillTransparenceController(SID_ATTR_FILL_TRANSPARENCE
, *pBindings
, *this),
106 maFillFloatTransparenceController(SID_ATTR_FILL_FLOATTRANSPARENCE
, *pBindings
, *this),
107 maImgAxial(SVX_RES(IMG_AXIAL
)),
108 maImgElli(SVX_RES(IMG_ELLI
)),
109 maImgQuad(SVX_RES(IMG_QUAD
)),
110 maImgRadial(SVX_RES(IMG_RADIAL
)),
111 maImgSquare(SVX_RES(IMG_SQUARE
)),
112 maImgLinear(SVX_RES(IMG_LINEAR
)),
113 maImgColor(SVX_RES(IMG_COLOR
)),
114 msHelpFillType(SVX_RES(STR_HELP_TYPE
)),
115 msHelpFillAttr(SVX_RES(STR_HELP_ATTR
)),
116 maTrGrPopup(this, ::boost::bind(&AreaPropertyPanel::CreateTransparencyGradientControl
, this, _1
)),
117 maColorPopup(this, ::boost::bind(&AreaPropertyPanel::CreateColorPopupControl
, this, _1
)),
118 mpFloatTransparenceItem(),
119 mpTransparanceItem(),
121 mpBindings(pBindings
),
130 AreaPropertyPanel::~AreaPropertyPanel()
132 // Destroy the toolboxes, then their background windows.
133 mpToolBoxColor
.reset();
134 mpBTNGradient
.reset();
135 mpToolBoxColorBackground
.reset();
136 mpBTNGradientBackground
.reset();
141 void AreaPropertyPanel::Initialize()
143 mpColorTextFT
->SetBackground(Wallpaper());
144 mpTrspTextFT
->SetBackground(Wallpaper());
146 maGradientLinear
.SetXOffset(DEFAULT_CENTERX
);
147 maGradientLinear
.SetYOffset(DEFAULT_CENTERY
);
148 maGradientLinear
.SetAngle(DEFAULT_ANGLE
);
149 maGradientLinear
.SetStartColor(Color(DEFAULT_STARTVALUE
));
150 maGradientLinear
.SetEndColor(Color(DEFAULT_ENDVALUE
));
151 maGradientLinear
.SetBorder(DEFAULT_BORDER
);
152 maGradientLinear
.SetGradientStyle(XGRAD_LINEAR
);
154 maGradientAxial
= maGradientLinear
;
155 maGradientAxial
.SetGradientStyle(XGRAD_AXIAL
);
157 maGradientRadial
= maGradientLinear
;
158 maGradientRadial
.SetGradientStyle(XGRAD_RADIAL
);
160 maGradientElliptical
= maGradientLinear
;
161 maGradientElliptical
.SetGradientStyle(XGRAD_ELLIPTICAL
);
163 maGradientSquare
= maGradientLinear
;
164 maGradientSquare
.SetGradientStyle(XGRAD_SQUARE
);
166 maGradientRect
= maGradientLinear
;
167 maGradientRect
.SetGradientStyle(XGRAD_RECT
);
169 Size
aLogicalFillSize(MBOX_WIDTH
,LISTBOX_HEIGHT
);
170 Size
aLogicalAttrSize(MBOX_WIDTH
+ 1,LISTBOX_HEIGHT
);
172 Point
aPoint(SECTIONPAGE_MARGIN_HORIZONTAL
,SECTIONPAGE_MARGIN_VERTICAL_TOP
+ FIXED_TEXT_HEIGHT
+ TEXT_CONTROL_SPACING_VERTICAL
);
173 Point
aPoint_Picker(SECTIONPAGE_MARGIN_HORIZONTAL
+ MBOX_WIDTH
+ CONTROL_SPACING_HORIZONTAL
,SECTIONPAGE_MARGIN_VERTICAL_TOP
+ FIXED_TEXT_HEIGHT
+ TEXT_CONTROL_SPACING_VERTICAL
);
175 Size
aTypeSize(LogicToPixel(aLogicalFillSize
, MAP_APPFONT
));
176 Size
aAttrSize(LogicToPixel(aLogicalAttrSize
, MAP_APPFONT
));
178 Point
aTypePoint(LogicToPixel(aPoint
, MAP_APPFONT
));
179 Point
aAttrPoint(LogicToPixel(aPoint_Picker
, MAP_APPFONT
));
181 mpLbFillType
->SetPosSizePixel(aTypePoint
,aTypeSize
);
182 mpLbFillAttr
->SetPosSizePixel(aAttrPoint
,aAttrSize
);
184 mpLbFillType
->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_TYPES
);
185 mpLbFillAttr
->SetHelpId(HID_PPROPERTYPANEL_AREA_LB_FILL_ATTR
);
187 mpLbFillType
->SetQuickHelpText(msHelpFillType
);
188 mpLbFillAttr
->SetQuickHelpText(msHelpFillAttr
);
190 mpLbFillType
->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); //wj acc
191 mpLbFillAttr
->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Fill"))); //wj acc
193 Link aLink
= LINK( this, AreaPropertyPanel
, SelectFillTypeHdl
);
194 mpLbFillType
->SetSelectHdl( aLink
);
196 aLink
= LINK( this, AreaPropertyPanel
, SelectFillAttrHdl
);
197 mpLbFillAttr
->SetSelectHdl( aLink
);
199 //add for new color picker
200 mpLbFillAttr
->Hide();
201 mpToolBoxColor
->SetItemImage(TBI_COLOR
, maImgColor
);
202 Size
aTbxSize( mpToolBoxColor
->CalcWindowSizePixel() );
203 mpToolBoxColor
->SetOutputSizePixel( aTbxSize
);
204 mpToolBoxColor
->SetItemBits( TBI_COLOR
, mpToolBoxColor
->GetItemBits( TBI_COLOR
) | TIB_DROPDOWNONLY
);
205 mpToolBoxColor
->SetBackground(Wallpaper());
206 mpToolBoxColor
->SetPaintTransparent(true);
207 mpToolBoxColor
->SetQuickHelpText(TBI_COLOR
, String(SVX_RES(STR_HELP_COLOR
))); //wj acc
208 //mpToolBoxColor->SetItemText(TBI_COLOR, msHelpFillAttr);
210 long aHeightLBStyle
= mpLbFillType
->GetSizePixel().getHeight();
211 long aLBPosY
= mpLbFillType
->GetPosPixel().getY();
212 long aHeightTBAttr
= mpToolBoxColor
->GetSizePixel().getHeight();
213 Point aPointTBAttr
= mpToolBoxColor
->GetPosPixel();
214 aPointTBAttr
.setY( aLBPosY
+ aHeightLBStyle
/ 2 - aHeightTBAttr
/ 2);
215 mpToolBoxColor
->SetPosPixel(aPointTBAttr
);
217 aLink
= LINK(this, AreaPropertyPanel
, ToolBoxColorDropHdl
);
218 mpToolBoxColor
->SetDropdownClickHdl ( aLink
);
219 mpToolBoxColor
->SetSelectHdl ( aLink
);
222 mpLBTransType
->SetSelectHdl(LINK(this, AreaPropertyPanel
, ChangeTrgrTypeHdl_Impl
));
223 mpLBTransType
->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc
225 mpMTRTransparent
->SetValue( 50 );
226 mpMTRTransparent
->SetModifyHdl(LINK(this, AreaPropertyPanel
, ModifyTransparentHdl_Impl
));
227 mpMTRTransparent
->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Transparency"))); //wj acc
229 mpBTNGradient
->SetItemBits( TBI_BTX_GRADIENT
, mpBTNGradient
->GetItemBits( TBI_BTX_GRADIENT
) | TIB_DROPDOWNONLY
);
230 aLink
= LINK( this, AreaPropertyPanel
, ClickTrGrHdl_Impl
);
231 mpBTNGradient
->SetDropdownClickHdl( aLink
);
232 mpBTNGradient
->SetSelectHdl( aLink
);
233 aTbxSize
= mpBTNGradient
->CalcWindowSizePixel();
234 mpBTNGradient
->SetOutputSizePixel( aTbxSize
);
235 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
,maImgLinear
);
236 mpBTNGradient
->SetQuickHelpText(TBI_BTX_GRADIENT
, String(SVX_RES(STR_HELP_GRADIENT
))); //wj acc
237 mpBTNGradient
->Hide();
239 long aHeightLBTrans
= mpLBTransType
->GetSizePixel().getHeight();
240 Point aPointLB
= mpLBTransType
->GetPosPixel();
241 long aPosY
= aPointLB
.getY();
243 Point aPointMetric
= mpMTRTransparent
->GetPosPixel();
244 Point aPointTB
= mpMTRTransparent
->GetPosPixel();
245 long aHeightMetric
= mpMTRTransparent
->GetSizePixel().getHeight();
246 long aHeightTool
= mpBTNGradient
->GetSizePixel().getHeight();
247 aPointMetric
.setY(aPosY
+aHeightLBTrans
/2-aHeightMetric
/2);
248 aPointTB
.setY(aPosY
+aHeightLBTrans
/2-aHeightTool
/2);
249 aPointTB
.setX(aPointTB
.getX()+3);
250 mpMTRTransparent
->SetPosPixel(aPointMetric
);
251 mpBTNGradient
->SetPosPixel(aPointTB
);
253 mpLbFillType
->SetAccessibleRelationLabeledBy(mpColorTextFT
.get());
254 mpLbFillAttr
->SetAccessibleRelationLabeledBy(mpLbFillAttr
.get());
255 mpToolBoxColor
->SetAccessibleRelationLabeledBy(mpToolBoxColor
.get());
256 mpLBTransType
->SetAccessibleRelationLabeledBy(mpTrspTextFT
.get());
257 mpMTRTransparent
->SetAccessibleRelationLabeledBy(mpMTRTransparent
.get());
258 mpBTNGradient
->SetAccessibleRelationLabeledBy(mpBTNGradient
.get());
265 IMPL_LINK( AreaPropertyPanel
, SelectFillTypeHdl
, ListBox
*, pToolBox
)
267 const XFillStyle eXFS
= (XFillStyle
)mpLbFillType
->GetSelectEntryPos();
269 if((XFillStyle
)meLastXFS
!= eXFS
)
271 mpLbFillAttr
->Clear();
272 SfxObjectShell
* pSh
= SfxObjectShell::Current();
273 const XFillStyleItem
aXFillStyleItem(eXFS
);
274 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE
, SFX_CALLMODE_RECORD
, &aXFillStyleItem
, 0L);
280 mpLbFillAttr
->Show();
281 mpToolBoxColor
->Hide();
282 mpLbFillType
->Selected();
283 mpLbFillAttr
->Disable();
288 mpLbFillAttr
->Hide();
289 mpToolBoxColor
->Show();
290 const String aTmpStr
;
291 const Color aColor
= maLastColor
;
292 const XFillColorItem
aXFillColorItem( aTmpStr
, aColor
);
293 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR
, SFX_CALLMODE_RECORD
, &aXFillColorItem
, 0L);
298 mpLbFillAttr
->Show();
299 mpToolBoxColor
->Hide();
301 if(pSh
&& pSh
->GetItem(SID_GRADIENT_LIST
))
303 if(!mpLbFillAttr
->GetEntryCount())
305 const SvxGradientListItem
aItem(*(const SvxGradientListItem
*)(pSh
->GetItem(SID_GRADIENT_LIST
)));
306 mpLbFillAttr
->Enable();
307 mpLbFillAttr
->Clear();
308 mpLbFillAttr
->Fill(aItem
.GetGradientList());
311 mpLbFillAttr
->AdaptDropDownLineCountToMaximum();
313 if(LISTBOX_ENTRY_NOTFOUND
!= mnLastPosGradient
)
315 const SvxGradientListItem
aItem(*(const SvxGradientListItem
*)(pSh
->GetItem(SID_GRADIENT_LIST
)));
317 if(mnLastPosGradient
< aItem
.GetGradientList()->Count())
319 const XGradient aGradient
= aItem
.GetGradientList()->GetGradient(mnLastPosGradient
)->GetGradient();
320 const XFillGradientItem
aXFillGradientItem(mpLbFillAttr
->GetEntry(mnLastPosGradient
), aGradient
);
321 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_GRADIENT
, SFX_CALLMODE_RECORD
, &aXFillGradientItem
, 0L);
322 mpLbFillAttr
->SelectEntryPos(mnLastPosGradient
);
328 mpLbFillAttr
->Disable();
334 mpLbFillAttr
->Show();
335 mpToolBoxColor
->Hide();
337 if(pSh
&& pSh
->GetItem(SID_HATCH_LIST
))
339 if(!mpLbFillAttr
->GetEntryCount())
341 const SvxHatchListItem
aItem( *(const SvxHatchListItem
*)(pSh
->GetItem(SID_HATCH_LIST
)));
342 mpLbFillAttr
->Enable();
343 mpLbFillAttr
->Clear();
344 mpLbFillAttr
->Fill(aItem
.GetHatchList());
347 mpLbFillAttr
->AdaptDropDownLineCountToMaximum();
349 if(LISTBOX_ENTRY_NOTFOUND
!= mnLastPosHatch
)
351 const SvxHatchListItem
aItem(*(const SvxHatchListItem
*)(pSh
->GetItem(SID_HATCH_LIST
)));
353 if(mnLastPosHatch
< aItem
.GetHatchList()->Count())
355 const XHatch aHatch
= aItem
.GetHatchList()->GetHatch(mnLastPosHatch
)->GetHatch();
356 const XFillHatchItem
aXFillHatchItem(mpLbFillAttr
->GetSelectEntry(), aHatch
);
357 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_HATCH
, SFX_CALLMODE_RECORD
, &aXFillHatchItem
, 0L);
358 mpLbFillAttr
->SelectEntryPos(mnLastPosHatch
);
364 mpLbFillAttr
->Disable();
370 mpLbFillAttr
->Show();
371 mpToolBoxColor
->Hide();
373 if(pSh
&& pSh
->GetItem(SID_BITMAP_LIST
))
375 if(!mpLbFillAttr
->GetEntryCount())
377 const SvxBitmapListItem
aItem( *(const SvxBitmapListItem
*)(pSh
->GetItem(SID_BITMAP_LIST
)));
378 mpLbFillAttr
->Enable();
379 mpLbFillAttr
->Clear();
380 mpLbFillAttr
->Fill(aItem
.GetBitmapList());
383 mpLbFillAttr
->AdaptDropDownLineCountToMaximum();
385 if(LISTBOX_ENTRY_NOTFOUND
!= mnLastPosBitmap
)
387 const SvxBitmapListItem
aItem(*(const SvxBitmapListItem
*)(pSh
->GetItem(SID_BITMAP_LIST
)));
389 if(mnLastPosBitmap
< aItem
.GetBitmapList()->Count())
391 const XBitmapEntry
* pXBitmapEntry
= aItem
.GetBitmapList()->GetBitmap(mnLastPosBitmap
);
392 const XFillBitmapItem
aXFillBitmapItem(mpLbFillAttr
->GetSelectEntry(), pXBitmapEntry
->GetGraphicObject());
393 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_BITMAP
, SFX_CALLMODE_RECORD
, &aXFillBitmapItem
, 0L);
394 mpLbFillAttr
->SelectEntryPos(mnLastPosBitmap
);
400 mpLbFillAttr
->Disable();
406 meLastXFS
= (sal_uInt16
)eXFS
;
408 if(XFILL_NONE
!= eXFS
)
412 mpLbFillType
->Selected();
422 IMPL_LINK( AreaPropertyPanel
, SelectFillAttrHdl
, ListBox
*, pToolBox
)
424 const XFillStyle eXFS
= (XFillStyle
)mpLbFillType
->GetSelectEntryPos();
425 const XFillStyleItem
aXFillStyleItem(eXFS
);
426 SfxObjectShell
* pSh
= SfxObjectShell::Current();
430 if((XFillStyle
) meLastXFS
!= eXFS
)
432 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_STYLE
, SFX_CALLMODE_RECORD
, &aXFillStyleItem
, 0L);
439 // //String aTmpStr = mpLbFillAttr->GetSelectEntry();
440 // //Color aColor = mpLbFillAttr->GetSelectEntryColor();
441 // //if(aColor.GetColor() == 0 && aTmpStr.Equals(String::CreateFromAscii("")))
443 // Color aColor = maLastColor;
444 // XFillColorItem aXFillColorItem( aTmpStr, aColor );
445 // GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR, SFX_CALLMODE_RECORD, &aXFillColorItem, 0L);
446 // maLastColor = aColor;
452 sal_uInt16 nPos
= mpLbFillAttr
->GetSelectEntryPos();
454 if(LISTBOX_ENTRY_NOTFOUND
== nPos
)
456 nPos
= mnLastPosGradient
;
459 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
&& pSh
&& pSh
->GetItem(SID_GRADIENT_LIST
))
461 const SvxGradientListItem
aItem(*(const SvxGradientListItem
*)(pSh
->GetItem(SID_GRADIENT_LIST
)));
463 if(nPos
< aItem
.GetGradientList()->Count())
465 const XGradient aGradient
= aItem
.GetGradientList()->GetGradient(nPos
)->GetGradient();
466 const XFillGradientItem
aXFillGradientItem(mpLbFillAttr
->GetSelectEntry(), aGradient
);
467 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_GRADIENT
, SFX_CALLMODE_RECORD
, &aXFillGradientItem
, 0L);
471 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
)
473 mnLastPosGradient
= nPos
;
479 sal_uInt16 nPos
= mpLbFillAttr
->GetSelectEntryPos();
481 if(LISTBOX_ENTRY_NOTFOUND
== nPos
)
483 nPos
= mnLastPosHatch
;
486 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
&& pSh
&& pSh
->GetItem(SID_HATCH_LIST
))
488 const SvxHatchListItem
aItem(*(const SvxHatchListItem
*)(pSh
->GetItem(SID_HATCH_LIST
)));
490 if(nPos
< aItem
.GetHatchList()->Count())
492 const XHatch aHatch
= aItem
.GetHatchList()->GetHatch(nPos
)->GetHatch();
493 const XFillHatchItem
aXFillHatchItem( mpLbFillAttr
->GetSelectEntry(), aHatch
);
494 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_HATCH
, SFX_CALLMODE_RECORD
, &aXFillHatchItem
, 0L);
498 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
)
500 mnLastPosHatch
= nPos
;
506 sal_uInt16 nPos
= mpLbFillAttr
->GetSelectEntryPos();
508 if(LISTBOX_ENTRY_NOTFOUND
== nPos
)
510 nPos
= mnLastPosBitmap
;
513 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
&& pSh
&& pSh
->GetItem(SID_BITMAP_LIST
))
515 const SvxBitmapListItem
aItem(*(const SvxBitmapListItem
*)(pSh
->GetItem(SID_BITMAP_LIST
)));
517 if(nPos
< aItem
.GetBitmapList()->Count())
519 const XBitmapEntry
* pXBitmapEntry
= aItem
.GetBitmapList()->GetBitmap(nPos
);
520 const XFillBitmapItem
aXFillBitmapItem(mpLbFillAttr
->GetSelectEntry(), pXBitmapEntry
->GetGraphicObject());
521 GetBindings()->GetDispatcher()->Execute(SID_ATTR_FILL_BITMAP
, SFX_CALLMODE_RECORD
, &aXFillBitmapItem
, 0L);
525 if(LISTBOX_ENTRY_NOTFOUND
!= nPos
)
527 mnLastPosBitmap
= nPos
;
539 IMPL_LINK(AreaPropertyPanel
, ToolBoxColorDropHdl
, ToolBox
*, pToolBox
)
541 const sal_uInt16 nId
= pToolBox
->GetCurItemId();
545 maColorPopup
.Show(*pToolBox
);
549 maColorPopup
.SetCurrentColor(mpColorItem
->GetColorValue(), mbColorAvail
);
553 maColorPopup
.SetCurrentColor(COL_WHITE
, false);
562 void AreaPropertyPanel::SetColor (
563 const String
& rsColorName
,
566 const XFillColorItem
aXFillColorItem(rsColorName
, aColor
);
567 mpBindings
->GetDispatcher()->Execute(SID_ATTR_FILL_COLOR
, SFX_CALLMODE_RECORD
, &aXFillColorItem
, 0L);
568 maLastColor
= aColor
;
574 PopupControl
* AreaPropertyPanel::CreateTransparencyGradientControl (PopupContainer
* pParent
)
576 return new AreaTransparencyGradientControl(pParent
, *this);
582 PopupControl
* AreaPropertyPanel::CreateColorPopupControl (PopupContainer
* pParent
)
584 return new ColorControl(
587 SVX_RES(RID_POPUPPANEL_AERAPAGE_COLOR
),
589 ::boost::bind(&AreaPropertyPanel::GetLastColor
, this),
590 ::boost::bind(&AreaPropertyPanel::SetColor
, this, _1
,_2
),
598 void AreaPropertyPanel::SetupIcons(void)
600 if(Theme::GetBoolean(Theme::Bool_UseSymphonyIcons
))
612 AreaPropertyPanel
* AreaPropertyPanel::Create (
614 const cssu::Reference
<css::frame::XFrame
>& rxFrame
,
615 SfxBindings
* pBindings
)
618 throw lang::IllegalArgumentException(A2S("no parent Window given to AreaPropertyPanel::Create"), NULL
, 0);
620 throw lang::IllegalArgumentException(A2S("no XFrame given to AreaPropertyPanel::Create"), NULL
, 1);
621 if (pBindings
== NULL
)
622 throw lang::IllegalArgumentException(A2S("no SfxBindings given to AreaPropertyPanel::Create"), NULL
, 2);
624 return new AreaPropertyPanel(
632 void AreaPropertyPanel::DataChanged(
633 const DataChangedEvent
& rEvent
)
642 void AreaPropertyPanel::ImpUpdateTransparencies()
644 if(mpTransparanceItem
.get() && mpFloatTransparenceItem
.get())
646 bool bZeroValue(false);
648 if(mpTransparanceItem
.get())
650 const sal_uInt16
nValue(mpTransparanceItem
->GetValue());
656 else if(nValue
<= 100)
658 mpLBTransType
->Enable();
659 mpTrspTextFT
->Enable();
660 mpLBTransType
->SelectEntryPos(1);
661 mpBTNGradient
->Hide();
662 mpMTRTransparent
->Show();
663 mpMTRTransparent
->Enable();
664 mpMTRTransparent
->SetValue(nValue
);
673 if(bZeroValue
&& mpFloatTransparenceItem
.get())
675 if(mpFloatTransparenceItem
->IsEnabled())
677 const XGradient
& rGradient
= mpFloatTransparenceItem
->GetGradientValue();
678 sal_uInt16
nEntryPos(0);
681 mpLBTransType
->Enable();
682 mpTrspTextFT
->Enable();
683 mpMTRTransparent
->Hide();
684 mpBTNGradient
->Enable();
685 mpBTNGradient
->Show();
687 switch(rGradient
.GetGradientStyle())
692 pImage
= &maImgLinear
;
698 pImage
= &maImgAxial
;
704 pImage
= &maImgRadial
;
707 case XGRAD_ELLIPTICAL
:
722 pImage
= &maImgSquare
;
727 mpLBTransType
->SelectEntryPos(nEntryPos
);
728 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, *pImage
);
739 mpLBTransType
->Enable();
740 mpTrspTextFT
->Enable();
741 mpLBTransType
->SelectEntryPos(0);
742 mpBTNGradient
->Hide();
743 mpMTRTransparent
->Enable();
744 mpMTRTransparent
->Show();
745 mpMTRTransparent
->SetValue(0);
750 // no transparency at all
751 mpLBTransType
->SetNoSelection();
752 mpLBTransType
->Disable();
753 mpTrspTextFT
->Disable();
754 mpMTRTransparent
->Disable();
755 mpMTRTransparent
->Show();
756 mpBTNGradient
->Disable();
757 mpBTNGradient
->Hide();
763 void AreaPropertyPanel::NotifyItemUpdate(
766 const SfxPoolItem
* pState
,
767 const bool bIsEnabled
)
770 const bool bDisabled(SFX_ITEM_DISABLED
== eState
);
774 case SID_ATTR_FILL_TRANSPARENCE
:
775 case SID_ATTR_FILL_FLOATTRANSPARENCE
:
777 bool bFillTransparenceChanged(false);
779 if(SID_ATTR_FILL_TRANSPARENCE
== nSID
)
781 bFillTransparenceChanged
= true;
783 if(eState
>= SFX_ITEM_AVAILABLE
)
785 const SfxUInt16Item
* pItem
= dynamic_cast< const SfxUInt16Item
* >(pState
);
787 if(pItem
&& (!mpTransparanceItem
|| *pItem
!= *mpTransparanceItem
))
789 mpTransparanceItem
.reset((SfxUInt16Item
*)pItem
->Clone());
793 mpTransparanceItem
.reset();
798 mpTransparanceItem
.reset();
801 else // if(SID_ATTR_FILL_FLOATTRANSPARENCE == nSID)
803 bFillTransparenceChanged
= true;
805 if(eState
>= SFX_ITEM_AVAILABLE
)
807 const XFillFloatTransparenceItem
* pItem
= dynamic_cast< const XFillFloatTransparenceItem
* >(pState
);
809 if(pItem
&& (!mpFloatTransparenceItem
|| *pItem
!= *mpFloatTransparenceItem
))
811 mpFloatTransparenceItem
.reset((XFillFloatTransparenceItem
*)pItem
->Clone());
815 mpFloatTransparenceItem
.reset();
820 mpFloatTransparenceItem
.reset();
824 if(bFillTransparenceChanged
)
826 // update transparency settings dependent of mpTransparanceItem and mpFloatTransparenceItem
827 ImpUpdateTransparencies();
831 case SID_ATTR_FILL_STYLE
:
835 mpLbFillType
->Disable();
836 mpColorTextFT
->Disable();
837 mpLbFillType
->SetNoSelection();
838 mpLbFillAttr
->Show();
839 mpLbFillAttr
->Disable();
840 mpLbFillAttr
->SetNoSelection();
841 mpToolBoxColor
->Hide();
846 if(eState
>= SFX_ITEM_AVAILABLE
)
848 const XFillStyleItem
* pItem
= dynamic_cast< const XFillStyleItem
* >(pState
);
852 mpStyleItem
.reset(dynamic_cast< XFillStyleItem
* >(pItem
->Clone()));
853 mpLbFillType
->Enable();
854 mpColorTextFT
->Enable();
855 XFillStyle eXFS
= (XFillStyle
)mpStyleItem
->GetValue();
857 mpLbFillType
->SelectEntryPos(sal::static_int_cast
< sal_uInt16
>(eXFS
));
859 if(XFILL_NONE
== eXFS
)
861 mpLbFillAttr
->SetNoSelection();
862 mpLbFillAttr
->Disable();
870 mpLbFillType
->SetNoSelection();
871 mpLbFillAttr
->Show();
872 mpLbFillAttr
->Disable();
873 mpLbFillAttr
->SetNoSelection();
874 mpToolBoxColor
->Hide();
879 case SID_ATTR_FILL_COLOR
:
881 if(SFX_ITEM_AVAILABLE
== eState
)
883 mpColorItem
.reset(pState
? (XFillColorItem
*)pState
->Clone() : 0);
886 if(mpStyleItem
&& XFILL_SOLID
== (XFillStyle
)mpStyleItem
->GetValue())
888 mpLbFillAttr
->Hide();
889 mpToolBoxColor
->Show();
891 if(SFX_ITEM_AVAILABLE
== eState
)
893 mpToolBoxColor
->Enable();
895 // maLastColor = mpColorItem->GetColorValue();
898 else if(SFX_ITEM_DISABLED
== eState
)
900 mpToolBoxColor
->Disable();
901 mbColorAvail
= false;
902 mpColorUpdater
->Update(COL_WHITE
);
906 mbColorAvail
= false;
907 mpColorUpdater
->Update(COL_WHITE
);
912 case SID_ATTR_FILL_GRADIENT
:
914 if(SFX_ITEM_AVAILABLE
== eState
)
916 mpFillGradientItem
.reset(pState
? (XFillGradientItem
*)pState
->Clone() : 0);
919 if(mpStyleItem
&& XFILL_GRADIENT
== (XFillStyle
)mpStyleItem
->GetValue())
921 mpLbFillAttr
->Show();
922 mpToolBoxColor
->Hide();
924 if(SFX_ITEM_AVAILABLE
== eState
)
926 mpLbFillAttr
->Enable();
929 else if(SFX_ITEM_DISABLED
== eState
)
931 mpLbFillAttr
->Disable();
932 mpLbFillAttr
->SetNoSelection();
936 mpLbFillAttr
->SetNoSelection();
941 case SID_ATTR_FILL_HATCH
:
943 if(SFX_ITEM_AVAILABLE
== eState
)
945 mpHatchItem
.reset(pState
? (XFillHatchItem
*)pState
->Clone() : 0);
948 if(mpStyleItem
&& XFILL_HATCH
== (XFillStyle
)mpStyleItem
->GetValue())
950 mpLbFillAttr
->Show();
951 mpToolBoxColor
->Hide();
953 if(SFX_ITEM_AVAILABLE
== eState
)
955 mpLbFillAttr
->Enable();
958 else if(SFX_ITEM_DISABLED
== eState
)
960 mpLbFillAttr
->Disable();
961 mpLbFillAttr
->SetNoSelection();
965 mpLbFillAttr
->SetNoSelection();
970 case SID_ATTR_FILL_BITMAP
:
972 if(SFX_ITEM_AVAILABLE
== eState
)
974 mpBitmapItem
.reset(pState
? (XFillBitmapItem
*)pState
->Clone() : 0);
977 if(mpStyleItem
&& XFILL_BITMAP
== (XFillStyle
)mpStyleItem
->GetValue())
979 mpLbFillAttr
->Show();
980 mpToolBoxColor
->Hide();
982 if(SFX_ITEM_AVAILABLE
== eState
)
984 mpLbFillAttr
->Enable();
987 else if(SFX_ITEM_DISABLED
== eState
)
989 mpLbFillAttr
->Disable();
990 mpLbFillAttr
->SetNoSelection();
994 mpLbFillAttr
->SetNoSelection();
999 case SID_COLOR_TABLE
:
1001 if(SFX_ITEM_AVAILABLE
== eState
)
1003 if(mpStyleItem
&& XFILL_SOLID
== (XFillStyle
)mpStyleItem
->GetValue())
1007 const Color aColor
= mpColorItem
->GetColorValue();
1008 const SfxObjectShell
* pSh
= SfxObjectShell::Current();
1009 const SvxColorListItem
aItem(*(const SvxColorListItem
*)(pSh
->GetItem(SID_COLOR_TABLE
)));
1011 mpLbFillAttr
->Clear();
1012 mpLbFillAttr
->Enable();
1013 mpLbFillAttr
->Fill(aItem
.GetColorList());
1014 mpLbFillAttr
->SelectEntry(aColor
);
1018 mpLbFillAttr
->SetNoSelection();
1024 case SID_GRADIENT_LIST
:
1026 if(SFX_ITEM_AVAILABLE
== eState
)
1028 if(mpStyleItem
&& XFILL_GRADIENT
== (XFillStyle
)mpStyleItem
->GetValue())
1030 if(mpFillGradientItem
)
1032 const String
aString( mpFillGradientItem
->GetName() );
1033 const SfxObjectShell
* pSh
= SfxObjectShell::Current();
1034 const SvxGradientListItem
aItem( *(const SvxGradientListItem
*)(pSh
->GetItem(SID_GRADIENT_LIST
)));
1036 mpLbFillAttr
->Clear();
1037 mpLbFillAttr
->Enable();
1038 mpLbFillAttr
->Fill(aItem
.GetGradientList());
1039 mpLbFillAttr
->SelectEntry(aString
);
1043 mpLbFillAttr
->SetNoSelection();
1049 case SID_HATCH_LIST
:
1051 if(SFX_ITEM_AVAILABLE
== eState
)
1053 if(mpStyleItem
&& XFILL_HATCH
== (XFillStyle
)mpStyleItem
->GetValue())
1057 const String
aString( mpHatchItem
->GetName() );
1058 const SfxObjectShell
* pSh
= SfxObjectShell::Current();
1059 const SvxHatchListItem
aItem(*(const SvxHatchListItem
*)(pSh
->GetItem(SID_HATCH_LIST
)));
1061 mpLbFillAttr
->Clear();
1062 mpLbFillAttr
->Enable();
1063 mpLbFillAttr
->Fill(aItem
.GetHatchList());
1064 mpLbFillAttr
->SelectEntry(aString
);
1068 mpLbFillAttr
->SetNoSelection();
1074 case SID_BITMAP_LIST
:
1076 if(SFX_ITEM_AVAILABLE
== eState
)
1078 if(mpStyleItem
&& XFILL_BITMAP
== (XFillStyle
)mpStyleItem
->GetValue())
1082 const String
aString( mpBitmapItem
->GetName() );
1083 const SfxObjectShell
* pSh
= SfxObjectShell::Current();
1084 const SvxBitmapListItem
aItem(*(const SvxBitmapListItem
*)(pSh
->GetItem(SID_BITMAP_LIST
)));
1086 mpLbFillAttr
->Clear();
1087 mpLbFillAttr
->Enable();
1088 mpLbFillAttr
->Fill(aItem
.GetBitmapList());
1089 mpLbFillAttr
->SelectEntry(aString
);
1093 mpLbFillAttr
->SetNoSelection();
1104 SfxBindings
* AreaPropertyPanel::GetBindings()
1111 void AreaPropertyPanel::Update()
1115 const XFillStyle eXFS
= (XFillStyle
)mpStyleItem
->GetValue();
1116 SfxObjectShell
* pSh
= SfxObjectShell::Current();
1122 mpLbFillAttr
->Show();
1123 mpToolBoxColor
->Hide();
1130 mpLbFillAttr
->Hide();
1131 mpToolBoxColor
->Show();
1132 mpColorUpdater
->Update(mpColorItem
->GetColorValue());
1136 mpColorUpdater
->Update(COL_WHITE
);
1140 case XFILL_GRADIENT
:
1142 mpLbFillAttr
->Show();
1143 mpToolBoxColor
->Hide();
1145 if(pSh
&& pSh
->GetItem(SID_GRADIENT_LIST
))
1147 const SvxGradientListItem
aItem(*(const SvxGradientListItem
*)(pSh
->GetItem(SID_GRADIENT_LIST
)));
1148 mpLbFillAttr
->Enable();
1149 mpLbFillAttr
->Clear();
1150 mpLbFillAttr
->Fill(aItem
.GetGradientList());
1152 if(mpFillGradientItem
)
1154 const String
aString(mpFillGradientItem
->GetName());
1156 mpLbFillAttr
->SelectEntry(aString
);
1160 mpLbFillAttr
->SetNoSelection();
1165 mpLbFillAttr
->SetNoSelection();
1171 mpLbFillAttr
->Show();
1172 mpToolBoxColor
->Hide();
1174 if(pSh
&& pSh
->GetItem(SID_HATCH_LIST
))
1176 const SvxHatchListItem
aItem(*(const SvxHatchListItem
*)(pSh
->GetItem(SID_HATCH_LIST
)));
1177 mpLbFillAttr
->Enable();
1178 mpLbFillAttr
->Clear();
1179 mpLbFillAttr
->Fill(aItem
.GetHatchList());
1183 const String
aString(mpHatchItem
->GetName());
1185 mpLbFillAttr
->SelectEntry( aString
);
1189 mpLbFillAttr
->SetNoSelection();
1194 mpLbFillAttr
->SetNoSelection();
1200 mpLbFillAttr
->Show();
1201 mpToolBoxColor
->Hide();
1203 if(pSh
&& pSh
->GetItem(SID_BITMAP_LIST
))
1205 const SvxBitmapListItem
aItem(*(const SvxBitmapListItem
*)(pSh
->GetItem(SID_BITMAP_LIST
)));
1206 mpLbFillAttr
->Enable();
1207 mpLbFillAttr
->Clear();
1208 mpLbFillAttr
->Fill(aItem
.GetBitmapList());
1212 const String
aString(mpBitmapItem
->GetName());
1214 mpLbFillAttr
->SelectEntry(aString
);
1218 mpLbFillAttr
->SetNoSelection();
1223 mpLbFillAttr
->SetNoSelection();
1228 OSL_ENSURE(false, "Non supported FillType (!)");
1236 IMPL_LINK( AreaPropertyPanel
, ImplPopupModeEndHdl
, FloatingWindow
*, EMPTYARG
)
1243 IMPL_LINK( AreaPropertyPanel
, ClickTrGrHdl_Impl
, ToolBox
*, pToolBox
)
1245 maTrGrPopup
.Rearrange(mpFloatTransparenceItem
.get());
1246 OSL_ASSERT(pToolBox
->GetCurItemId() == TBI_BTX_GRADIENT
);
1247 maTrGrPopup
.Show(*pToolBox
);
1254 IMPL_LINK(AreaPropertyPanel
, ChangeTrgrTypeHdl_Impl
, void *, EMPTYARG
)
1256 sal_uInt16 nSelectType
= mpLBTransType
->GetSelectEntryPos();
1257 bool bGradient
= false;
1258 sal_uInt16 nTrans
= 0;
1262 mpBTNGradient
->Hide();
1263 mpMTRTransparent
->Show();
1264 mpMTRTransparent
->Enable();
1265 mpMTRTransparent
->SetValue(0);
1267 else if(1 == nSelectType
)
1269 mpBTNGradient
->Hide();
1270 mpMTRTransparent
->Show();
1271 nTrans
= mnLastTransSolid
;
1272 mpMTRTransparent
->SetValue(nTrans
);
1273 mpLBTransType
->SelectEntryPos(1);
1274 mpMTRTransparent
->Enable();
1278 mpBTNGradient
->Show();
1280 switch (nSelectType
)
1283 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgLinear
);
1286 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgAxial
);
1289 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgRadial
);
1292 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgElli
);
1295 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgQuad
);
1298 mpBTNGradient
->SetItemImage(TBI_BTX_GRADIENT
, maImgSquare
);
1302 mpMTRTransparent
->Hide();
1303 mpBTNGradient
->Enable();
1307 const XFillTransparenceItem
aLinearItem(nTrans
);
1308 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE
, SFX_CALLMODE_RECORD
, &aLinearItem
, 0L );
1315 XGradient aTmpGradient
;
1320 aTmpGradient
= maGradientLinear
;
1323 aTmpGradient
= maGradientAxial
;
1326 aTmpGradient
= maGradientRadial
;
1328 case XGRAD_ELLIPTICAL
:
1329 aTmpGradient
= maGradientElliptical
;
1332 aTmpGradient
= maGradientSquare
;
1335 aTmpGradient
= maGradientRect
;
1339 SfxItemPool
* pPool
= 0;
1340 const XFillFloatTransparenceItem
aGradientItem(pPool
, aTmpGradient
, sal_Bool(bGradient
));
1341 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_FLOATTRANSPARENCE
, SFX_CALLMODE_RECORD
, &aGradientItem
, 0L );
1348 IMPL_LINK(AreaPropertyPanel
, ModifyTransparentHdl_Impl
, void*, EMPTYARG
)
1350 const sal_uInt16 nTrans
= (sal_uInt16
)mpMTRTransparent
->GetValue();
1351 mnLastTransSolid
= nTrans
;
1352 const sal_uInt16 nSelectType
= mpLBTransType
->GetSelectEntryPos();
1354 if(nTrans
&& !nSelectType
)
1356 mpLBTransType
->SelectEntryPos(1);
1359 const XFillTransparenceItem
aLinearItem(nTrans
);
1360 GetBindings()->GetDispatcher()->Execute( SID_ATTR_FILL_TRANSPARENCE
, SFX_CALLMODE_RECORD
, &aLinearItem
, 0L );
1366 Color
AreaPropertyPanel::GetLastColor (void) const
1374 XGradient
AreaPropertyPanel::GetGradient (const XGradientStyle eStyle
) const
1380 return maGradientLinear
;
1382 return maGradientAxial
;
1384 return maGradientRadial
;
1385 case XGRAD_ELLIPTICAL
:
1386 return maGradientElliptical
;
1388 return maGradientSquare
;
1390 return maGradientRect
;
1397 void AreaPropertyPanel::SetGradient (const XGradient
& rGradient
)
1399 switch (rGradient
.GetGradientStyle())
1402 maGradientLinear
= rGradient
;
1405 maGradientAxial
= rGradient
;
1408 maGradientRadial
= rGradient
;
1410 case XGRAD_ELLIPTICAL
:
1411 maGradientElliptical
= rGradient
;
1414 maGradientSquare
= rGradient
;
1417 maGradientRect
= rGradient
;
1425 sal_Int32
AreaPropertyPanel::GetSelectedTransparencyTypeIndex (void) const
1427 return mpLBTransType
->GetSelectEntryPos();
1430 } } // end of namespace svx::sidebar