23 #include <rtl/ustring.hxx>
28 #include <svx/svxids.hrc>
67 return drawing::FillStyle_BITMAP;
82 , mxFillControl(nullptr)
83 , mpLbFillType(nullptr)
84 , mpToolBoxColor(nullptr)
85 , mpLbFillAttr(nullptr)
87 , mnLastPosGradient(0)
92 addStatusListener(
".uno:FillColor");
93 addStatusListener(
".uno:FillGradient");
94 addStatusListener(
".uno:FillHatch");
95 addStatusListener(
".uno:FillBitmap");
96 addStatusListener(
".uno:ColorTableState");
97 addStatusListener(
".uno:GradientListState");
98 addStatusListener(
".uno:HatchListState");
99 addStatusListener(
".uno:BitmapListState");
111 const bool bDisabled(SfxItemState::DISABLED == eState);
115 case SID_ATTR_FILL_STYLE:
129 if(eState >= SfxItemState::DEFAULT)
138 mnLastXFS = sal::static_int_cast< sal_Int32 >(eXFS);
141 if(drawing::FillStyle_NONE == eXFS)
162 case SID_ATTR_FILL_COLOR:
164 if(SfxItemState::DEFAULT == eState)
166 mpColorItem.reset(pState ? static_cast<XFillColorItem*>(pState->
Clone()) :
nullptr);
179 case SID_ATTR_FILL_GRADIENT:
181 if(SfxItemState::DEFAULT == eState)
192 if(SfxItemState::DEFAULT == eState)
197 else if(SfxItemState::DISABLED == eState )
209 case SID_ATTR_FILL_HATCH:
211 if(SfxItemState::DEFAULT == eState)
213 mpHatchItem.reset(pState ? static_cast<XFillHatchItem*>(pState->
Clone()) :
nullptr);
222 if(SfxItemState::DEFAULT == eState)
227 else if(SfxItemState::DISABLED == eState )
239 case SID_ATTR_FILL_BITMAP:
241 if(SfxItemState::DEFAULT == eState)
243 mpBitmapItem.reset(pState ? static_cast<XFillBitmapItem*>(pState->
Clone()) :
nullptr);
252 if(SfxItemState::DEFAULT == eState)
257 else if(SfxItemState::DISABLED == eState )
269 case SID_GRADIENT_LIST:
271 if(SfxItemState::DEFAULT == eState)
295 if(SfxItemState::DEFAULT == eState)
317 case SID_BITMAP_LIST:
319 if(SfxItemState::DEFAULT == eState)
349 const drawing::FillStyle eXFS =
mpStyleItem->GetValue();
354 case drawing::FillStyle_NONE:
361 case drawing::FillStyle_SOLID:
371 case drawing::FillStyle_GRADIENT:
377 if(pSh && pSh->
GetItem(SID_GRADIENT_LIST))
407 xGradientList->Insert(std::make_unique<XGradientEntry>(
mpFillGradientItem->GetGradientValue(), aTmpStr));
408 xGradientList->SetDirty(
false );
409 const BitmapEx aBmp = xGradientList->GetUiBitmap( 0 );
415 pVD->SetOutputSizePixel(aBmpSize,
false);
416 pVD->DrawBitmapEx(
Point(), aBmp);
434 case drawing::FillStyle_HATCH:
440 if(pSh && pSh->
GetItem(SID_HATCH_LIST))
470 xHatchList->Insert(std::make_unique<XHatchEntry>(
mpHatchItem->GetHatchValue(), aTmpStr));
471 xHatchList->SetDirty(
false );
472 const BitmapEx & aBmp = xHatchList->GetUiBitmap( 0 );
478 pVD->SetOutputSizePixel(aBmpSize,
false);
479 pVD->DrawBitmapEx(
Point(), aBmp);
496 case drawing::FillStyle_BITMAP:
536 xBitmapList->Insert(std::make_unique<XBitmapEntry>(
mpBitmapItem->GetGraphicObject(), aTmpStr));
537 xBitmapList->SetDirty(
false );
565 OSL_ENSURE(
false,
"Non supported FillType (!)");
592 , mxLbFillType(m_xBuilder->weld_combo_box(
"type"))
593 , mxToolBoxColor(m_xBuilder->weld_toolbar(
"color"))
595 , mxLbFillAttr(m_xBuilder->weld_combo_box(
"attr"))
617 rJsonWriter.put(
"command",
".uno:FillStyle");
638 mxLbFillType->set_active(mnTypeCurPos);
646 return ChildKeyInput(rKEvt);
647 if (mxLbFillAttr->get_visible() && !mxLbFillAttr->get_sensitive())
648 return ChildKeyInput(rKEvt);
654 mnTypeCurPos = mxLbFillType->get_active();
659 mnAttrCurPos = mxLbFillAttr->get_active();
669 mxLbFillAttr->set_active(mnAttrCurPos);
674 return ChildKeyInput(rKEvt);
679 return ChildKeyInput(rKEvt);
698 sal_Int32 nXFS = mpLbFillType->get_active();
700 if(mnLastXFS == nXFS)
704 mpLbFillAttr->clear();
717 mpLbFillAttr->show();
718 mpToolBoxColor->hide();
719 mpLbFillAttr->set_sensitive(
false);
724 SID_ATTR_FILL_STYLE, SfxCallMode::RECORD,
725 { &aXFillStyleItem });
731 mpLbFillAttr->hide();
732 mpToolBoxColor->show();
735 const ::Color aColor = mpColorItem ? mpColorItem->GetColorValue() :
COL_AUTO;
740 SID_ATTR_FILL_COLOR, SfxCallMode::RECORD,
741 { &aXFillColorItem, &aXFillStyleItem });
747 mpLbFillAttr->show();
748 mpToolBoxColor->hide();
750 if(pSh && pSh->
GetItem(SID_GRADIENT_LIST))
752 if(!mpLbFillAttr->get_count())
754 mpLbFillAttr->set_sensitive(
true);
755 mpLbFillAttr->clear();
759 if (mnLastPosGradient != -1)
763 if(mnLastPosGradient < pItem->GetGradientList()->
Count())
766 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->get_text(mnLastPosGradient), aGradient);
770 SID_ATTR_FILL_GRADIENT, SfxCallMode::RECORD,
771 { &aXFillGradientItem, &aXFillStyleItem });
772 mpLbFillAttr->set_active(mnLastPosGradient);
778 mpLbFillAttr->set_sensitive(
false);
784 mpLbFillAttr->show();
785 mpToolBoxColor->hide();
787 if(pSh && pSh->
GetItem(SID_HATCH_LIST))
789 if(!mpLbFillAttr->get_count())
791 mpLbFillAttr->set_sensitive(
true);
792 mpLbFillAttr->clear();
796 if (mnLastPosHatch != -1)
800 if(mnLastPosHatch < pItem->GetHatchList()->
Count())
803 const XFillHatchItem aXFillHatchItem(mpLbFillAttr->get_active_text(), aHatch);
807 SID_ATTR_FILL_HATCH, SfxCallMode::RECORD,
808 { &aXFillHatchItem, &aXFillStyleItem });
809 mpLbFillAttr->set_active(mnLastPosHatch);
815 mpLbFillAttr->set_sensitive(
false);
821 mpLbFillAttr->show();
822 mpToolBoxColor->hide();
824 if(pSh && pSh->
GetItem(SID_BITMAP_LIST))
826 if(!mpLbFillAttr->get_count())
828 mpLbFillAttr->set_sensitive(
true);
829 mpLbFillAttr->clear();
833 if (mnLastPosBitmap != -1)
837 if(mnLastPosBitmap < pItem->GetBitmapList()->
Count())
844 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
845 { &aXFillBitmapItem, &aXFillStyleItem });
846 mpLbFillAttr->set_active(mnLastPosBitmap);
852 mpLbFillAttr->set_sensitive(
false);
858 mpLbFillAttr->show();
859 mpToolBoxColor->hide();
861 if(pSh && pSh->
GetItem(SID_PATTERN_LIST))
863 if(!mpLbFillAttr->get_count())
865 mpLbFillAttr->set_sensitive(
true);
866 mpLbFillAttr->clear();
870 if (mnLastPosPattern != -1)
874 if(mnLastPosPattern < pItem->GetPatternList()->
Count())
881 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
882 { &aXFillBitmapItem, &aXFillStyleItem });
883 mpLbFillAttr->set_active(mnLastPosPattern);
889 mpLbFillAttr->set_sensitive(
false);
898 mxFillControl->Resize();
903 sal_Int32 nXFS = mpLbFillType->get_active();
911 const bool bFillStyleChange(mnLastXFS != nXFS);
917 if (bFillStyleChange && pSh)
921 SID_ATTR_FILL_STYLE, SfxCallMode::RECORD,
922 { &aXFillStyleItem });
928 sal_Int32
nPos = mpLbFillAttr->get_active();
932 nPos = mnLastPosGradient;
935 if (nPos != -1 && pSh && pSh->
GetItem(SID_GRADIENT_LIST))
939 if(nPos < pItem->GetGradientList()->
Count())
942 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->get_active_text(), aGradient);
946 SID_ATTR_FILL_GRADIENT, SfxCallMode::RECORD,
948 ? std::initializer_list<SfxPoolItem const*>{ &aXFillGradientItem, &aXFillStyleItem }
949 : std::initializer_list<SfxPoolItem const*>{ &aXFillGradientItem });
955 mnLastPosGradient = nPos;
961 sal_Int32
nPos = mpLbFillAttr->get_active();
965 nPos = mnLastPosHatch;
968 if (nPos != -1 && pSh && pSh->
GetItem(SID_HATCH_LIST))
972 if(nPos < pItem->GetHatchList()->
Count())
975 const XFillHatchItem aXFillHatchItem( mpLbFillAttr->get_active_text(), aHatch);
979 SID_ATTR_FILL_HATCH, SfxCallMode::RECORD,
981 ? std::initializer_list<SfxPoolItem const*>{ &aXFillHatchItem, &aXFillStyleItem }
982 : std::initializer_list<SfxPoolItem const*>{ &aXFillHatchItem });
988 mnLastPosHatch = nPos;
994 sal_Int32
nPos = mpLbFillAttr->get_active();
998 nPos = mnLastPosBitmap;
1001 if (nPos != -1 && pSh && pSh->
GetItem(SID_BITMAP_LIST))
1005 if(nPos < pItem->GetBitmapList()->
Count())
1012 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
1014 ? std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem, &aXFillStyleItem }
1015 : std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem });
1021 mnLastPosBitmap = nPos;
1027 sal_Int32
nPos = mpLbFillAttr->get_active();
1031 nPos = mnLastPosPattern;
1034 if (nPos != -1 && pSh && pSh->
GetItem(SID_PATTERN_LIST))
1038 if(nPos < pItem->GetPatternList()->
Count())
1045 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
1047 ? std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem, &aXFillStyleItem }
1048 : std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem });
1054 mnLastPosPattern = nPos;
1068 auto nHeight = std::max(aSize.Height(), aFirstSize.Height());
1076 if((rDCEvt.
GetType() == DataChangedEventType::SETTINGS) &&
1077 (rDCEvt.
GetFlags() & AllSettingsFlags::STYLE))
#define LINK(Instance, Class, Member)
virtual ~FillControl() override
virtual void dispose() override
const SfxPoolItem * ExecuteList(sal_uInt16 nSlot, SfxCallMode nCall, std::initializer_list< SfxPoolItem const * > args, std::initializer_list< SfxPoolItem const * > internalargs=std::initializer_list< SfxPoolItem const * >())
const XPatternListRef & GetPatternList() const
enum SAL_DLLPUBLIC_RTTI FillStyle
virtual SfxPoolItem * Clone(SfxItemPool *pPool=nullptr) const =0
SVX_DLLPUBLIC void Fill(weld::ComboBox &, const XHatchListRef &pList)
virtual OUString get_text(int pos) const =0
static XBitmapListRef AsBitmapList(rtl::Reference< XPropertyList > const &plist)
constexpr::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
css::uno::Reference< css::lang::XComponent > m_xFrame
virtual void SetSizePixel(const Size &rNewSize)
const XGradientListRef & GetGradientList() const
sal_uInt16 GetCode() const
DataChangedEventType GetType() const
IMPL_LINK_NOARG(FillControl, TypeFocusHdl, weld::Widget &, void)
static SfxObjectShell * Current()
void append(const OUString &rId, const OUString &rStr)
virtual int get_count() const =0
constexpr OUStringLiteral TMP_STR_BEGIN
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
FillControl(vcl::Window *pParent, const css::uno::Reference< css::frame::XFrame > &rFrame)
constexpr OUStringLiteral TMP_STR_END
AllSettingsFlags GetFlags() const
static SfxViewShell * Current()
IMPL_LINK(FillControl, TypeKeyInputHdl, const KeyEvent &, rKEvt, bool)
virtual void Resize() override
const GraphicObject & GetGraphicObject() const
const XHatchListRef & GetHatchList() const
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
std::unique_ptr< weld::ComboBox > mxLbFillAttr
void set_active_text(const OUString &rStr)
SVX_DLLPUBLIC void Fill(weld::ComboBox &rListBox)
Point LogicToPixel(const Point &rLogicPt) const
SfxDispatcher * GetDispatcher() const
static void ReleaseFocus_Impl()
constexpr OUStringLiteral PATTERN
void connect_changed(const Link< ComboBox &, void > &rLink)
static XPropertyListRef CreatePropertyList(XPropertyListType t, const OUString &rPath, const OUString &rReferer)
virtual void set_active(int pos)=0
const XBitmapListRef & GetBitmapList() const
SFX_IMPL_TOOLBOX_CONTROL(SvxFillToolBoxControl, XFillStyleItem)
void reset(reference_type *pBody)
std::unique_ptr< weld::Container > m_xContainer
constexpr sal_uInt16 KEY_ESCAPE
virtual void dispose() override
vcl::Window * GetWindow() const
std::unique_ptr< ToolbarUnoDispatcher > mxColorDispatch
virtual void remove(int pos)=0
IMPL_STATIC_LINK(FillControl, DumpAsPropertyTreeHdl, tools::JsonWriter &, rJsonWriter, void)
std::unique_ptr< weld::Toolbar > mxToolBoxColor
const Size & GetSizePixel() const
std::unique_ptr< weld::ComboBox > mxLbFillType
void InitControlBase(weld::Widget *pWidget)
virtual XFillStyleItem * Clone(SfxItemPool *pPool=nullptr) const override
constexpr sal_uInt16 KEY_TAB
virtual void DataChanged(const DataChangedEvent &rDCEvt)
virtual OUString get_active_text() const =0