20#include <osl/diagnose.h>
24#include <svx/svxids.hrc>
34#include <bitmaps.hlst>
38using namespace css::uno;
68 const css::uno::Reference<css::frame::XFrame>& rxFrame)
69 :
PanelLayout(pParent,
"AreaPropertyPanel",
"svx/ui/sidebararea.ui"),
71 meLastXFS(static_cast<sal_uInt16>(-1)),
76 mxColorTextFT(m_xBuilder->weld_label(
"filllabel")),
77 mxLbFillType(m_xBuilder->weld_combo_box(
"fillstylearea")),
78 mxLbFillAttr(m_xBuilder->weld_combo_box(
"fillattrhb")),
80 mxLbFillGradTo(
new ColorListBox(m_xBuilder->weld_menu_button(
"fillgrad2"), [
this]{ return GetFrameWeld(); })),
81 mxToolBoxColor(m_xBuilder->weld_toolbar(
"selectcolor")),
83 mxTrspTextFT(m_xBuilder->weld_label(
"transparencylabel")),
84 mxLBTransType(m_xBuilder->weld_combo_box(
"transtype")),
85 mxMTRTransparent(m_xBuilder->weld_metric_spin_button(
"settransparency", FieldUnit::PERCENT)),
86 mxSldTransparent(m_xBuilder->weld_scale(
"transparencyslider")),
87 mxBTNGradient(m_xBuilder->weld_toolbar(
"selectgradient")),
88 mxMTRAngle(m_xBuilder->weld_metric_spin_button(
"gradangle", FieldUnit::DEGREE)),
89 mxGradientStyle(m_xBuilder->weld_combo_box(
"gradientstyle")),
90 mxBmpImport(m_xBuilder->weld_button(
"bmpimport")),
91 maImgAxial(BMP_AXIAL),
94 maImgRadial(BMP_RADIAL),
95 maImgSquare(BMP_SQUARE),
96 maImgLinear(BMP_LINEAR)
202 auto xWait = std::make_unique<weld::WaitObject>(
m_xContainer.get());
208 mxLbFillAttr->clear();
213 OUString aFileName =
aURL.GetLastName().getToken(0,
'.');
214 OUString
aName = aFileName;
216 XBitmapListRef pList = pSh->GetItem(SID_BITMAP_LIST)->GetBitmapList();
219 bool bValidBitmapName =
false;
220 while( !bValidBitmapName )
222 bValidBitmapName =
true;
223 for(
tools::Long i = 0;
i < pList->Count() && bValidBitmapName;
i++ )
225 if(
aName == pList->GetBitmap(
i)->GetName() )
227 bValidBitmapName =
false;
228 aName = aFileName + OUString::number(j++);
233 pList->Insert(std::make_unique<XBitmapEntry>(aGraphic,
aName));
238 mxLbFillAttr->set_active_text(
aName);
239 SelectFillAttrHdl(*mxLbFillAttr);
245 FillStyleChanged(
true);
250 SelectFillAttrHdl_Impl();
255 SelectFillAttrHdl_Impl();
260 SelectFillAttrHdl_Impl();
265 sal_Int32 nPosFillStyle =
static_cast<eFillStyle
>(
mxLbFillType->get_active());
270 const bool bFillStyleChange(
static_cast<eFillStyle
>(
meLastXFS) !=
static_cast<eFillStyle
>(nPosFillStyle));
272 switch(nPosFillStyle)
274 case eFillStyle::NONE:
285 case eFillStyle::SOLID:
295 case eFillStyle::GRADIENT:
298 if (pSh && pSh->
GetItem(SID_COLOR_TABLE))
312 case eFillStyle::HATCH:
321 if (
nPos != -1 && pSh && pSh->
GetItem(SID_HATCH_LIST))
325 if(nPos < pItem->GetHatchList()->
Count())
342 case eFillStyle::BITMAP:
351 if (
nPos != -1 && pSh && pSh->
GetItem(SID_BITMAP_LIST))
355 if(nPos < pItem->GetBitmapList()->
Count())
372 case eFillStyle::PATTERN:
381 if (
nPos != -1 && pSh && pSh->
GetItem(SID_PATTERN_LIST))
385 if(nPos < pItem->GetPatternList()->
Count())
415 bool bShowLbFillAttr =
false;
416 bool bShowLbFillGradFrom =
false;
417 bool bShowLbFillGradTo =
false;
418 bool bShowGradientStyle =
false;
419 bool bShowMTRAngle =
false;
420 bool bShowToolBoxColor =
false;
421 bool bShowBmpImport =
false;
444 bShowToolBoxColor =
true;
459 bShowLbFillGradFrom =
true;
460 bShowLbFillGradTo =
true;
461 bShowGradientStyle =
true;
462 bShowMTRAngle =
true;
504 if (pSh->
GetItem(SID_GRADIENT_LIST))
507 pSh->
GetItem(SID_GRADIENT_LIST)->GetGradientList());
526 if (
mxGradientStyle->get_active() == sal_Int32(css::awt::GradientStyle_RADIAL))
546 bShowLbFillAttr =
true;
558 if (mnLastPosHatch < pXHatchList->
Count())
583 bShowLbFillAttr =
true;
592 bShowBmpImport =
true;
601 if (mnLastPosBitmap < pXBitmapList->
Count())
613 bShowBmpImport =
false;
626 if (mnLastPosPattern < pXPatternList->
Count())
638 bShowLbFillAttr =
false;
685 bool bZeroValue(
false);
719 sal_Int32 nEntryPos(0);
720 OUString* pImage =
nullptr;
732 case css::awt::GradientStyle_LINEAR:
738 case css::awt::GradientStyle_AXIAL:
744 case css::awt::GradientStyle_RADIAL:
750 case css::awt::GradientStyle_ELLIPTICAL:
756 case css::awt::GradientStyle_SQUARE:
762 case css::awt::GradientStyle_RECT:
815 else if (bDefaultOrSet)
879 else if (bDefaultOrSet && pState)
890 case drawing::FillStyle_NONE:
898 case drawing::FillStyle_SOLID:
901 case drawing::FillStyle_GRADIENT:
904 case drawing::FillStyle_HATCH:
907 case drawing::FillStyle_BITMAP:
1080 const bool bDisabled(SfxItemState::DISABLED == eState);
1081 const bool bDefaultOrSet(SfxItemState::DEFAULT <= eState);
1082 const bool bDefault(SfxItemState::DEFAULT == eState);
1086 case SID_ATTR_FILL_TRANSPARENCE:
1089 case SID_ATTR_FILL_FLOATTRANSPARENCE:
1092 case SID_ATTR_FILL_STYLE:
1095 case SID_ATTR_FILL_COLOR:
1098 case SID_ATTR_FILL_GRADIENT:
1101 case SID_ATTR_FILL_HATCH:
1104 case SID_ATTR_FILL_BITMAP:
1107 case SID_ATTR_FILL_USE_SLIDE_BACKGROUND:
1110 case SID_GRADIENT_LIST:
1136 case SID_HATCH_LIST:
1162 case SID_BITMAP_LIST:
1163 case SID_PATTERN_LIST:
1177 if(nSID == SID_BITMAP_LIST)
1179 else if(nSID == SID_PATTERN_LIST)
1198 const sal_uInt16 nVal = mxSldTransparent->get_value();
1199 SetTransparency(nVal);
1201 setFillTransparence(aLinearItem);
1206 sal_Int32 nSelectType = mxLBTransType->get_active();
1207 bool bGradient =
false;
1208 sal_uInt16 nTrans = 0;
1212 mxBTNGradient->hide();
1213 mxMTRTransparent->show();
1214 mxSldTransparent->show();
1215 mxMTRTransparent->set_sensitive(
true);
1216 mxSldTransparent->set_sensitive(
true);
1219 else if(1 == nSelectType)
1221 mxBTNGradient->hide();
1222 mxMTRTransparent->show();
1223 mxSldTransparent->show();
1224 nTrans = mnLastTransSolid;
1225 mxMTRTransparent->set_value(nTrans, FieldUnit::PERCENT);
1226 mxLBTransType->set_active(1);
1227 mxMTRTransparent->set_sensitive(
true);
1228 mxSldTransparent->set_sensitive(
true);
1232 mxBTNGradient->show();
1234 switch (nSelectType)
1256 mxMTRTransparent->hide();
1257 mxSldTransparent->hide();
1258 mxBTNGradient->set_sensitive(
true);
1263 setFillTransparence(aLinearItem);
1272 switch(
static_cast<css::awt::GradientStyle
>(nSelectType))
1274 case css::awt::GradientStyle_LINEAR:
1275 aTmpGradient = maGradientLinear;
1277 case css::awt::GradientStyle_AXIAL:
1278 aTmpGradient = maGradientAxial;
1280 case css::awt::GradientStyle_RADIAL:
1281 aTmpGradient = maGradientRadial;
1283 case css::awt::GradientStyle_ELLIPTICAL:
1284 aTmpGradient = maGradientElliptical;
1286 case css::awt::GradientStyle_SQUARE:
1287 aTmpGradient = maGradientSquare;
1289 case css::awt::GradientStyle_RECT:
1290 aTmpGradient = maGradientRect;
1297 setFillFloatTransparence(aGradientItem);
1302 const sal_uInt16 nTrans =
static_cast<sal_uInt16
>(mxMTRTransparent->get_value(FieldUnit::PERCENT));
1303 mnLastTransSolid = nTrans;
1304 SetTransparency(nTrans);
1305 const sal_Int32 nSelectType = mxLBTransType->get_active();
1307 if(nTrans && !nSelectType)
1309 mxLBTransType->set_active(1);
1313 setFillTransparence(aLinearItem);
1321 case css::awt::GradientStyle_LINEAR:
1323 case css::awt::GradientStyle_AXIAL:
1325 case css::awt::GradientStyle_RADIAL:
1327 case css::awt::GradientStyle_ELLIPTICAL:
1329 case css::awt::GradientStyle_SQUARE:
1331 case css::awt::GradientStyle_RECT:
1340 case css::awt::GradientStyle_LINEAR:
1343 case css::awt::GradientStyle_AXIAL:
1346 case css::awt::GradientStyle_RADIAL:
1349 case css::awt::GradientStyle_ELLIPTICAL:
1352 case css::awt::GradientStyle_SQUARE:
1355 case css::awt::GradientStyle_RECT:
1372 aColorStops.emplace_back(0.0,
mxLbFillGradFrom->GetSelectEntryColor().getBColor());
1379 aColorStops.emplace_back(1.0,
mxLbFillGradTo->GetSelectEntryColor().getBColor());
constexpr OUStringLiteral SIDEBARGRADIENT
sfx2::sidebar::Panel * m_pPanel
virtual weld::Window * GetFrameWeld() const
static SAL_WARN_UNUSED_RESULT SfxObjectShell * Current()
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
virtual SfxUInt16Item * Clone(SfxItemPool *=nullptr) const override
const XBitmapListRef & GetBitmapList() const
const XGradientListRef & GetGradientList() const
const XHatchListRef & GetHatchList() const
ErrCode GetGraphic(Graphic &) const
const XPatternListRef & GetPatternList() const
const GraphicObject & GetGraphicObject() const
virtual XFillBitmapItem * Clone(SfxItemPool *pPool=nullptr) const override
virtual XFillColorItem * Clone(SfxItemPool *pPool=nullptr) const override
virtual XFillFloatTransparenceItem * Clone(SfxItemPool *pPool=nullptr) const override
virtual XFillGradientItem * Clone(SfxItemPool *pPool=nullptr) const override
virtual XFillHatchItem * Clone(SfxItemPool *pPool=nullptr) const override
virtual XFillStyleItem * Clone(SfxItemPool *pPool=nullptr) const override
Item to enable slide background for filled objects.
const OUString & GetName() const
void SetGradientStyle(css::awt::GradientStyle eNewStyle)
void SetColorStops(const basegfx::BColorStops &rSteps)
void SetYOffset(sal_uInt16 nNewOffset)
void SetXOffset(sal_uInt16 nNewOffset)
void SetBorder(sal_uInt16 nNewBorder)
const basegfx::BColorStops & GetColorStops() const
Degree10 GetAngle() const
css::awt::GradientStyle GetGradientStyle() const
void SetAngle(Degree10 nNewAngle)
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
#define LINK(Instance, Class, Member)
SVX_DLLPUBLIC void Fill(weld::ComboBox &, const XHatchListRef &pList)
SVX_DLLPUBLIC void Fill(weld::ComboBox &rListBox)
Reference< XNameAccess > m_xContainer
constexpr OUStringLiteral PATTERN