31#include <svx/strings.hrc>
32#include <svx/svxids.hrc>
63 :
svt::PopupWindowController( rContext, nullptr, OUString() )
65 addStatusListener(
".uno:LineDash");
76 if (!getToolboxId(
nId, &pToolBox) && !m_pToolbar)
79 OString
sId(m_aCommandURL.toUtf8());
81 if ( rEvent.FeatureURL.Complete == m_aCommandURL )
84 m_pToolbar->set_item_sensitive(
sId, rEvent.IsEnabled);
101 bool bNoneLineStyle =
false;
107 BitmapEx aEmpty(xList->GetBitmapForUISolidLine());
116 bNoneLineStyle =
true;
122 Graphic aGraf(xList->GetBitmapForUISolidLine());
147 const OString aId(m_aCommandURL.toUtf8());
148 m_pToolbar->set_menu_item_active(aId, !m_pToolbar->get_menu_item_active(aId));
159 svt::PopupWindowController::initialize( rArguments );
164 m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(),
mxPopoverContainer->getTopLevel());
169 if ( getToolboxId(
nId, &pToolBox ) )
197 return std::make_unique<SvxLineBox>(
this, m_pToolbar,
m_xBtnUpdater->GetStyleIndex());
212 return "com.sun.star.comp.svx.LineStyleToolBoxControl";
217 return {
"com.sun.star.frame.ToolbarController" };
220extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
222 css::uno::XComponentContext* rContext,
223 css::uno::Sequence<css::uno::Any>
const & )
233 explicit SvxLineEndToolBoxControl(
const css::uno::Reference<css::uno::XComponentContext>& rContext );
236 virtual void SAL_CALL initialize(
const css::uno::Sequence<css::uno::Any>& rArguments )
override;
242 virtual void SAL_CALL execute(sal_Int16 nKeyModifier)
override;
254 std::unique_ptr<ValueSet> mxLineEndSet;
255 std::unique_ptr<weld::CustomWeld> mxLineEndSetWin;
265 mxLineEndSet->GrabFocus();
269 SvxLineEndWindow(SvxLineEndToolBoxControl* pControl,
weld::Widget* pParent);
270 virtual void statusChanged(
const css::frame::FeatureStateEvent& rEvent )
override;
277SvxLineEndWindow::SvxLineEndWindow(SvxLineEndToolBoxControl* pControl,
weld::Widget* pParent)
278 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/floatinglineend.ui",
"FloatingLineEnd")
279 , mxControl(pControl)
280 , mxLineEndSet(new
ValueSet(m_xBuilder->weld_scrolled_window(
"valuesetwin", true)))
281 , mxLineEndSetWin(new
weld::CustomWeld(*m_xBuilder,
"valueset", *mxLineEndSet))
295 DBG_ASSERT( mpLineEndList.is(),
"LineEndList not found" );
297 mxLineEndSet->SetSelectHdl(
LINK(
this, SvxLineEndWindow, SelectHdl ) );
298 mxLineEndSet->SetColCount(
gnCols );
303 AddStatusListener(
".uno:LineEndListState");
308 std::unique_ptr<XLineEndItem> pLineEndItem;
309 std::unique_ptr<XLineStartItem> pLineStartItem;
310 sal_uInt16
nId = mxLineEndSet->GetSelectedItemId();
334 if ( pLineStartItem )
337 pLineStartItem->QueryValue(
a );
342 pLineEndItem->QueryValue(
a );
349 mxLineEndSet->SetNoSelection();
351 mxControl->dispatchCommand(mxControl->getCommandURL(), aArgs);
353 mxControl->EndPopupMode();
356void SvxLineEndWindow::FillValueSet()
358 if( !mpLineEndList.is() )
368 mpLineEndList->Insert(std::make_unique<XLineEndEntry>(aNothing,
372 BitmapEx aBmp = mpLineEndList->GetUiBitmap( nCount );
373 OSL_ENSURE( !aBmp.
IsEmpty(),
"UI bitmap was not created" );
376 pVD->SetOutputSizePixel( maBmpSize,
false );
377 maBmpSize.setWidth( maBmpSize.Width() / 2 );
379 Point aPt1( maBmpSize.Width(), 0 );
381 pVD->DrawBitmapEx(
Point(), aBmp );
382 mxLineEndSet->InsertItem(1,
Image(pVD->GetBitmapEx(aPt0, maBmpSize)), pEntry->
GetName());
383 mxLineEndSet->InsertItem(2,
Image(pVD->GetBitmapEx(aPt1, maBmpSize)), pEntry->
GetName());
385 mpLineEndList->Remove(nCount);
390 DBG_ASSERT( pEntry,
"Could not access LineEndEntry" );
391 aBmp = mpLineEndList->GetUiBitmap( i );
392 OSL_ENSURE( !aBmp.
IsEmpty(),
"UI bitmap was not created" );
394 pVD->DrawBitmapEx( aPt0, aBmp );
395 mxLineEndSet->InsertItem(
static_cast<sal_uInt16
>((i+1)*2L+1),
396 Image(pVD->GetBitmapEx(aPt0, maBmpSize)), pEntry->
GetName());
397 mxLineEndSet->InsertItem(
static_cast<sal_uInt16
>((i+2)*2L),
398 Image(pVD->GetBitmapEx(aPt1, maBmpSize)), pEntry->
GetName());
400 mnLines = std::min(
static_cast<sal_uInt16
>(nCount + 1), sal_uInt16(
MAX_LINES) );
401 mxLineEndSet->SetLineCount( mnLines );
406void SvxLineEndWindow::statusChanged(
const css::frame::FeatureStateEvent& rEvent )
408 if ( rEvent.FeatureURL.Complete !=
".uno:LineEndListState" )
412 css::uno::Reference< css::uno::XWeak > xWeak;
413 if ( rEvent.State >>= xWeak )
415 mpLineEndList.set(
static_cast< XLineEndList*
>( xWeak.get() ) );
416 DBG_ASSERT( mpLineEndList.is(),
"LineEndList not found" );
418 mxLineEndSet->Clear();
423void SvxLineEndWindow::SetSize()
425 sal_uInt16 nItemCount = mxLineEndSet->GetItemCount();
426 sal_uInt16 nMaxLines = nItemCount /
gnCols;
428 WinBits nBits = mxLineEndSet->GetStyle();
429 if ( mnLines == nMaxLines )
430 nBits &= ~WB_VSCROLL;
433 mxLineEndSet->SetStyle( nBits );
435 Size aSize( maBmpSize );
436 aSize.AdjustWidth(6 );
437 aSize.AdjustHeight(6 );
438 aSize = mxLineEndSet->CalcWindowSizePixel( aSize );
439 mxLineEndSet->GetDrawingArea()->set_size_request(aSize.Width(), aSize.Height());
440 mxLineEndSet->SetOutputSizePixel(aSize);
443SvxLineEndToolBoxControl::SvxLineEndToolBoxControl(
const css::uno::Reference<css::uno::XComponentContext>& rContext )
444 :
svt::PopupWindowController( rContext, nullptr, OUString() )
448void SAL_CALL SvxLineEndToolBoxControl::execute(sal_Int16 )
453 const OString aId(m_aCommandURL.toUtf8());
454 m_pToolbar->set_menu_item_active(aId, !m_pToolbar->get_menu_item_active(aId));
463void SvxLineEndToolBoxControl::initialize(
const css::uno::Sequence<css::uno::Any>& rArguments )
465 svt::PopupWindowController::initialize( rArguments );
470 m_pToolbar->set_item_popover(m_aCommandURL.toUtf8(), mxPopoverContainer->getTopLevel());
475 if ( getToolboxId( nId, &pToolBox ) )
479std::unique_ptr<WeldToolbarPopup> SvxLineEndToolBoxControl::weldPopupWindow()
481 return std::make_unique<SvxLineEndWindow>(
this, m_pToolbar);
487 std::make_unique<SvxLineEndWindow>(
this, pParent->
GetFrameWeld()));
489 mxInterimPopover->Show();
491 mxInterimPopover->SetText(
SvxResId(RID_SVXSTR_LINEEND));
493 return mxInterimPopover;
496OUString SvxLineEndToolBoxControl::getImplementationName()
498 return "com.sun.star.comp.svx.LineEndToolBoxControl";
501css::uno::Sequence<OUString> SvxLineEndToolBoxControl::getSupportedServiceNames()
503 return {
"com.sun.star.frame.ToolbarController" };
506extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
508 css::uno::XComponentContext* rContext,
509 css::uno::Sequence<css::uno::Any>
const & )
511 return cppu::acquire(
new SvxLineEndToolBoxControl( rContext ) );
515 :
WeldToolbarPopup(pControl->getFrameInterface(), pParent,
"svx/ui/floatinglinestyle.ui",
"FloatingLineStyle")
516 , mxControl(pControl)
517 , mxLineStyleSet(new
ValueSet(m_xBuilder->weld_scrolled_window(
"valuesetwin", true)))
518 , mxLineStyleSetWin(new
weld::CustomWeld(*m_xBuilder,
"valueset", *mxLineStyleSet))
551 auto aBmp = pList->GetBitmapForUISolidLine();
560 const BitmapEx aBitmap = pList->GetUiBitmap(
i);
565 sal_uInt16 nLines = std::min(
static_cast<sal_uInt16
>(
nCount + 2), sal_uInt16(
MAX_LINES) );
570 nBits &= ~WB_VSCROLL;
575 Size aSize(aBmpSize);
585 drawing::LineStyle eXLS;
586 sal_Int32
nPos = mxLineStyleSet->GetSelectedItemId();
592 eXLS = drawing::LineStyle_NONE;
596 eXLS = drawing::LineStyle_SOLID;
601 eXLS = drawing::LineStyle_DASH;
603 if (
nPos != -1 && pObjSh && pObjSh->
GetItem(SID_DASH_LIST))
614 mxControl->dispatchLineStyleCommand(
".uno:LineDash", aArgs);
619 eStyle == drawing::DashStyle_RECT || eStyle == drawing::DashStyle_RECTRELATIVE
620 ? css::drawing::LineCap_BUTT
621 : css::drawing::LineCap_ROUND );
624 mxControl->dispatchLineStyleCommand(
".uno:LineCap", aArgs2);
634 mxControl->dispatchLineStyleCommand(
".uno:XLineStyle", aArgs);
636 mxControl->EndPopupMode();
static const AllSettings & GetSettings()
bool Erase(const Color &rFillColor)
const Size & GetSizePixel() const
css::uno::Reference< css::graphic::XGraphic > GetXGraphic() const
static SAL_WARN_UNUSED_RESULT SfxObjectShell * Current()
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
tools::Long AdjustWidth(tools::Long n)
constexpr tools::Long Width() const
const XDashListRef & GetDashList() const
std::unique_ptr< ValueSet > mxLineStyleSet
virtual void GrabFocus() override
void Fill(const XDashListRef &pList)
SvxLineBox(SvxLineStyleToolBoxControl *pControl, weld::Widget *pParent, int nInitialIndex)
virtual ~SvxLineBox() override
static VclPtr< reference_type > Create(Arg &&... arg)
const XDash & GetDash() const
css::drawing::DashStyle GetDashStyle() const
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt8 nMemberId=0) const override
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt8 nMemberId=0) const override
const basegfx::B2DPolyPolygon & GetLineEnd() const
virtual bool QueryValue(css::uno::Any &rVal, sal_uInt8 nMemberId=0) const override
const OUString & GetName() const
weld::Window * GetFrameWeld() const
#define DBG_ASSERT(sCon, aError)
OUString SvxResId(TranslateId aId)
DECL_LINK(CheckNameHdl, SvxNameDialog &, bool)
constexpr OStringLiteral HID_POPUP_LINEEND
constexpr OStringLiteral HID_POPUP_LINEEND_CTRL
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_svx_LineEndToolBoxControl_get_implementation(css::uno::XComponentContext *rContext, css::uno::Sequence< css::uno::Any > const &)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_svx_LineStyleToolBoxControl_get_implementation(css::uno::XComponentContext *rContext, css::uno::Sequence< css::uno::Any > const &)
constexpr sal_uInt16 gnCols
IMPL_LINK_NOARG(SvxLineEndWindow, SelectHdl, ValueSet *, void)
std::function< bool(const OUString &, const css::uno::Any &)> LineStyleSelectFunction
std::function< void(bool)> LineStyleIsNoneFunction
#define LINK(Instance, Class, Member)
bool dispatchCommand(const OUString &rCommand, const uno::Reference< css::frame::XFrame > &rFrame, const css::uno::Sequence< css::beans::PropertyValue > &rArguments, const uno::Reference< css::frame::XDispatchResultListener > &rListener)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
#define WB_NO_DIRECTSELECT