24 #include <rtl/ustring.hxx>
29 #include <svx/svxids.hrc>
32 #define TMP_STR_BEGIN "["
33 #define TMP_STR_END "]"
61 , mpFillGradientItem()
64 , mxFillControl(nullptr)
65 , mpLbFillType(nullptr)
66 , mpToolBoxColor(nullptr)
67 , mpLbFillAttr(nullptr)
69 , mnLastPosGradient(0)
73 addStatusListener(
".uno:FillColor");
74 addStatusListener(
".uno:FillGradient");
75 addStatusListener(
".uno:FillHatch");
76 addStatusListener(
".uno:FillBitmap");
77 addStatusListener(
".uno:ColorTableState");
78 addStatusListener(
".uno:GradientListState");
79 addStatusListener(
".uno:HatchListState");
80 addStatusListener(
".uno:BitmapListState");
92 const bool bDisabled(SfxItemState::DISABLED == eState);
96 case SID_ATTR_FILL_STYLE:
106 meLastXFS =
static_cast<drawing::FillStyle
>(-1);
110 if(eState >= SfxItemState::DEFAULT)
122 if(drawing::FillStyle_NONE == eXFS)
138 meLastXFS =
static_cast<drawing::FillStyle
>(-1);
143 case SID_ATTR_FILL_COLOR:
145 if(SfxItemState::DEFAULT == eState)
147 mpColorItem.reset(pState ? static_cast<XFillColorItem*>(pState->
Clone()) :
nullptr);
160 case SID_ATTR_FILL_GRADIENT:
162 if(SfxItemState::DEFAULT == eState)
173 if(SfxItemState::DEFAULT == eState)
178 else if(SfxItemState::DISABLED == eState )
190 case SID_ATTR_FILL_HATCH:
192 if(SfxItemState::DEFAULT == eState)
194 mpHatchItem.reset(pState ? static_cast<XFillHatchItem*>(pState->
Clone()) :
nullptr);
203 if(SfxItemState::DEFAULT == eState)
208 else if(SfxItemState::DISABLED == eState )
220 case SID_ATTR_FILL_BITMAP:
222 if(SfxItemState::DEFAULT == eState)
224 mpBitmapItem.reset(pState ? static_cast<XFillBitmapItem*>(pState->
Clone()) :
nullptr);
233 if(SfxItemState::DEFAULT == eState)
238 else if(SfxItemState::DISABLED == eState )
250 case SID_GRADIENT_LIST:
252 if(SfxItemState::DEFAULT == eState)
276 if(SfxItemState::DEFAULT == eState)
298 case SID_BITMAP_LIST:
300 if(SfxItemState::DEFAULT == eState)
330 const drawing::FillStyle eXFS =
mpStyleItem->GetValue();
335 case drawing::FillStyle_NONE:
342 case drawing::FillStyle_SOLID:
352 case drawing::FillStyle_GRADIENT:
358 if(pSh && pSh->
GetItem(SID_GRADIENT_LIST))
396 pVD->SetOutputSizePixel(aBmpSize,
false);
397 pVD->DrawBitmapEx(
Point(), aBmp);
415 case drawing::FillStyle_HATCH:
421 if(pSh && pSh->
GetItem(SID_HATCH_LIST))
451 aHatchList.
Insert(std::make_unique<XHatchEntry>(
mpHatchItem->GetHatchValue(), aTmpStr));
459 pVD->SetOutputSizePixel(aBmpSize,
false);
460 pVD->DrawBitmapEx(
Point(), aBmp);
477 case drawing::FillStyle_BITMAP:
483 if(pSh && pSh->
GetItem(SID_BITMAP_LIST))
516 xBitmapList->Insert(std::make_unique<XBitmapEntry>(
mpBitmapItem->GetGraphicObject(), aTmpStr));
517 xBitmapList->SetDirty(
false );
535 OSL_ENSURE(
false,
"Non supported FillType (!)");
562 , mxLbFillType(m_xBuilder->weld_combo_box(
"type"))
563 , mxToolBoxColor(m_xBuilder->weld_toolbar(
"color"))
565 , mxLbFillAttr(m_xBuilder->weld_combo_box(
"attr"))
587 rJsonWriter.put(
"command",
".uno:FillStyle");
608 mxLbFillType->set_active(mnTypeCurPos);
616 return ChildKeyInput(rKEvt);
617 if (mxLbFillAttr->get_visible() && !mxLbFillAttr->get_sensitive())
618 return ChildKeyInput(rKEvt);
624 mnTypeCurPos = mxLbFillType->get_active();
629 mnAttrCurPos = mxLbFillAttr->get_active();
639 mxLbFillAttr->set_active(mnAttrCurPos);
644 return ChildKeyInput(rKEvt);
649 return ChildKeyInput(rKEvt);
668 const drawing::FillStyle eXFS =
static_cast<drawing::FillStyle
>(mpLbFillType->get_active());
670 if(meLastXFS == eXFS)
673 mpLbFillAttr->clear();
684 case drawing::FillStyle_NONE:
686 mpLbFillAttr->show();
687 mpToolBoxColor->hide();
688 mpLbFillAttr->set_sensitive(
false);
693 SID_ATTR_FILL_STYLE, SfxCallMode::RECORD,
694 { &aXFillStyleItem });
698 case drawing::FillStyle_SOLID:
700 mpLbFillAttr->hide();
701 mpToolBoxColor->show();
702 const ::Color aColor = mpColorItem->GetColorValue();
708 SID_ATTR_FILL_COLOR, SfxCallMode::RECORD,
709 { &aXFillColorItem, &aXFillStyleItem });
713 case drawing::FillStyle_GRADIENT:
715 mpLbFillAttr->show();
716 mpToolBoxColor->hide();
718 if(pSh && pSh->
GetItem(SID_GRADIENT_LIST))
720 if(!mpLbFillAttr->get_count())
722 mpLbFillAttr->set_sensitive(
true);
723 mpLbFillAttr->clear();
727 if (mnLastPosGradient != -1)
731 if(mnLastPosGradient < pItem->GetGradientList()->
Count())
734 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->get_text(mnLastPosGradient), aGradient);
738 SID_ATTR_FILL_GRADIENT, SfxCallMode::RECORD,
739 { &aXFillGradientItem, &aXFillStyleItem });
740 mpLbFillAttr->set_active(mnLastPosGradient);
746 mpLbFillAttr->set_sensitive(
false);
750 case drawing::FillStyle_HATCH:
752 mpLbFillAttr->show();
753 mpToolBoxColor->hide();
755 if(pSh && pSh->
GetItem(SID_HATCH_LIST))
757 if(!mpLbFillAttr->get_count())
759 mpLbFillAttr->set_sensitive(
true);
760 mpLbFillAttr->clear();
764 if (mnLastPosHatch != -1)
768 if(mnLastPosHatch < pItem->GetHatchList()->
Count())
771 const XFillHatchItem aXFillHatchItem(mpLbFillAttr->get_active_text(), aHatch);
775 SID_ATTR_FILL_HATCH, SfxCallMode::RECORD,
776 { &aXFillHatchItem, &aXFillStyleItem });
777 mpLbFillAttr->set_active(mnLastPosHatch);
783 mpLbFillAttr->set_sensitive(
false);
787 case drawing::FillStyle_BITMAP:
789 mpLbFillAttr->show();
790 mpToolBoxColor->hide();
792 if(pSh && pSh->
GetItem(SID_BITMAP_LIST))
794 if(!mpLbFillAttr->get_count())
796 mpLbFillAttr->set_sensitive(
true);
797 mpLbFillAttr->clear();
801 if (mnLastPosBitmap != -1)
805 if(mnLastPosBitmap < pItem->GetBitmapList()->
Count())
812 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
813 { &aXFillBitmapItem, &aXFillStyleItem });
814 mpLbFillAttr->set_active(mnLastPosBitmap);
820 mpLbFillAttr->set_sensitive(
false);
828 mxFillControl->Resize();
833 const drawing::FillStyle eXFS =
static_cast<drawing::FillStyle
>(mpLbFillType->get_active());
839 const bool bFillStyleChange(meLastXFS != eXFS);
843 case drawing::FillStyle_SOLID:
845 if (bFillStyleChange && pSh)
849 SID_ATTR_FILL_STYLE, SfxCallMode::RECORD,
850 { &aXFillStyleItem });
854 case drawing::FillStyle_GRADIENT:
856 sal_Int32
nPos = mpLbFillAttr->get_active();
860 nPos = mnLastPosGradient;
863 if (nPos != -1 && pSh && pSh->
GetItem(SID_GRADIENT_LIST))
867 if(nPos < pItem->GetGradientList()->
Count())
870 const XFillGradientItem aXFillGradientItem(mpLbFillAttr->get_active_text(), aGradient);
874 SID_ATTR_FILL_GRADIENT, SfxCallMode::RECORD,
876 ? std::initializer_list<SfxPoolItem const*>{ &aXFillGradientItem, &aXFillStyleItem }
877 : std::initializer_list<SfxPoolItem const*>{ &aXFillGradientItem });
883 mnLastPosGradient = nPos;
887 case drawing::FillStyle_HATCH:
889 sal_Int32
nPos = mpLbFillAttr->get_active();
893 nPos = mnLastPosHatch;
896 if (nPos != -1 && pSh && pSh->
GetItem(SID_HATCH_LIST))
900 if(nPos < pItem->GetHatchList()->
Count())
903 const XFillHatchItem aXFillHatchItem( mpLbFillAttr->get_active_text(), aHatch);
907 SID_ATTR_FILL_HATCH, SfxCallMode::RECORD,
909 ? std::initializer_list<SfxPoolItem const*>{ &aXFillHatchItem, &aXFillStyleItem }
910 : std::initializer_list<SfxPoolItem const*>{ &aXFillHatchItem });
916 mnLastPosHatch = nPos;
920 case drawing::FillStyle_BITMAP:
922 sal_Int32
nPos = mpLbFillAttr->get_active();
926 nPos = mnLastPosBitmap;
929 if (nPos != -1 && pSh && pSh->
GetItem(SID_BITMAP_LIST))
933 if(nPos < pItem->GetBitmapList()->
Count())
940 SID_ATTR_FILL_BITMAP, SfxCallMode::RECORD,
942 ? std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem, &aXFillStyleItem }
943 : std::initializer_list<SfxPoolItem const*>{ &aXFillBitmapItem });
949 mnLastPosBitmap = nPos;
962 auto nHeight = std::max(aSize.Height(), aFirstSize.Height());
970 if((rDCEvt.
GetType() == DataChangedEventType::SETTINGS) &&
971 (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 * >())
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)
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
virtual void DataChanged(const DataChangedEvent &rDCEvt) override
FillControl(vcl::Window *pParent, const css::uno::Reference< css::frame::XFrame > &rFrame)
AllSettingsFlags GetFlags() const
static SfxViewShell * Current()
IMPL_LINK(FillControl, TypeKeyInputHdl, const KeyEvent &, rKEvt, bool)
virtual void Resize() override
const GraphicObject & GetGraphicObject() const
const OUString & GetName() 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)
void Insert(std::unique_ptr< XPropertyEntry > pEntry, tools::Long nIndex=std::numeric_limits< tools::Long >::max())
SfxDispatcher * GetDispatcher() const
static void ReleaseFocus_Impl()
void connect_changed(const Link< ComboBox &, void > &rLink)
XPropertyEntry * Get(tools::Long nIndex) const
BitmapEx GetUiBitmap(tools::Long nIndex) const
static XPropertyListRef CreatePropertyList(XPropertyListType t, const OUString &rPath, const OUString &rReferer)
virtual void set_active(int pos)=0
void SetDirty(bool bDirty)
const XBitmapListRef & GetBitmapList() const
SFX_IMPL_TOOLBOX_CONTROL(SvxFillToolBoxControl, XFillStyleItem)
void reset(reference_type *pBody)
Point LogicToPixel(const Point &rLogicPt) const
XHatchEntry * GetHatch(tools::Long nIndex) const
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