Version 7.6.3.2-android, tag libreoffice-7.6.3.2-android
[LibreOffice.git] / svx / source / tbxctrls / linectrl.cxx
blob3be0d011c6ce13f936dd27a8b2d23ee47c6d2f8d
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <tools/debug.hxx>
21 #include <vcl/settings.hxx>
22 #include <vcl/svapp.hxx>
23 #include <vcl/toolbox.hxx>
24 #include <vcl/virdev.hxx>
25 #include <sfx2/objsh.hxx>
27 #include <svtools/toolbarmenu.hxx>
28 #include <svtools/popupwindowcontroller.hxx>
29 #include <svtools/valueset.hxx>
31 #include <svx/strings.hrc>
32 #include <svx/svxids.hrc>
33 #include <helpids.h>
35 #include <svx/drawitem.hxx>
36 #include <svx/xlineit0.hxx>
37 #include <svx/xlncapit.hxx>
38 #include <svx/xlndsit.hxx>
39 #include <svx/xlnstit.hxx>
40 #include <svx/xlnedit.hxx>
41 #include <svx/xtable.hxx>
42 #include <svx/linectrl.hxx>
43 #include <svx/itemwin.hxx>
44 #include <svx/dialmgr.hxx>
45 #include <tbxcolorupdate.hxx>
47 #include <memory>
49 #include <comphelper/lok.hxx>
50 #include <comphelper/propertyvalue.hxx>
52 using namespace ::com::sun::star::uno;
53 using namespace ::com::sun::star::beans;
54 using namespace ::com::sun::star::util;
55 using namespace ::com::sun::star::frame;
56 using namespace ::com::sun::star::lang;
57 using namespace ::com::sun::star;
59 // For End Line Controller
60 #define MAX_LINES 12
62 SvxLineStyleToolBoxControl::SvxLineStyleToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext )
63 : svt::PopupWindowController( rContext, nullptr, OUString() )
65 addStatusListener(".uno:LineDash");
68 SvxLineStyleToolBoxControl::~SvxLineStyleToolBoxControl()
72 void SAL_CALL SvxLineStyleToolBoxControl::statusChanged( const frame::FeatureStateEvent& rEvent )
74 ToolBox* pToolBox = nullptr;
75 ToolBoxItemId nId;
76 if (!getToolboxId(nId, &pToolBox) && !m_pToolbar)
77 return;
79 if ( rEvent.FeatureURL.Complete == m_aCommandURL )
81 if (m_pToolbar)
82 m_pToolbar->set_item_sensitive(m_aCommandURL, rEvent.IsEnabled);
83 else
84 pToolBox->EnableItem( nId, rEvent.IsEnabled );
87 m_xBtnUpdater->Update(rEvent);
89 SfxObjectShell* pSh = SfxObjectShell::Current();
90 if (!pSh)
91 return;
93 const SvxDashListItem* pItem = pSh->GetItem( SID_DASH_LIST );
94 if (!pItem)
95 return;
97 XDashListRef xList = pItem->GetDashList();
98 int nIndex = m_xBtnUpdater->GetStyleIndex();
99 bool bNoneLineStyle = false;
100 switch (nIndex)
102 case -1:
103 case 0:
105 BitmapEx aEmpty(xList->GetBitmapForUISolidLine());
106 aEmpty.Erase(Application::GetSettings().GetStyleSettings().GetFieldColor());
107 if (m_pToolbar)
109 Graphic aGraf(aEmpty);
110 m_pToolbar->set_item_image(m_aCommandURL, aGraf.GetXGraphic());
112 else
113 pToolBox->SetItemImage(nId, Image(aEmpty));
114 bNoneLineStyle = true;
115 break;
117 case 1:
118 if (m_pToolbar)
120 Graphic aGraf(xList->GetBitmapForUISolidLine());
121 m_pToolbar->set_item_image(m_aCommandURL, aGraf.GetXGraphic());
123 else
124 pToolBox->SetItemImage(nId, Image(xList->GetBitmapForUISolidLine()));
125 break;
126 default:
127 if (m_pToolbar)
129 Graphic aGraf(xList->GetUiBitmap(nIndex - 2));
130 m_pToolbar->set_item_image(m_aCommandURL, aGraf.GetXGraphic());
132 else
133 pToolBox->SetItemImage(nId, Image(xList->GetUiBitmap(nIndex - 2)));
134 break;
136 if (m_aLineStyleIsNoneFunction)
137 m_aLineStyleIsNoneFunction(bNoneLineStyle);
140 void SAL_CALL SvxLineStyleToolBoxControl::execute(sal_Int16 /*KeyModifier*/)
142 if (m_pToolbar)
144 // Toggle the popup also when toolbutton is activated
145 m_pToolbar->set_menu_item_active(m_aCommandURL, !m_pToolbar->get_menu_item_active(m_aCommandURL));
147 else
149 // Open the popup also when Enter key is pressed.
150 createPopupWindow();
154 void SvxLineStyleToolBoxControl::initialize( const css::uno::Sequence<css::uno::Any>& rArguments )
156 svt::PopupWindowController::initialize( rArguments );
158 if (m_pToolbar)
160 mxPopoverContainer.reset(new ToolbarPopupContainer(m_pToolbar));
161 m_pToolbar->set_item_popover(m_aCommandURL, mxPopoverContainer->getTopLevel());
164 ToolBox* pToolBox = nullptr;
165 ToolBoxItemId nId;
166 if ( getToolboxId( nId, &pToolBox ) )
168 pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
171 m_xBtnUpdater.reset(new svx::ToolboxButtonLineStyleUpdater);
174 void SvxLineStyleToolBoxControl::setLineStyleSelectFunction(const LineStyleSelectFunction& rLineStyleSelectFunction)
176 m_aLineStyleSelectFunction = rLineStyleSelectFunction;
179 void SvxLineStyleToolBoxControl::setLineStyleIsNoneFunction(const LineStyleIsNoneFunction& rLineStyleIsNoneFunction)
181 m_aLineStyleIsNoneFunction = rLineStyleIsNoneFunction;
184 void SvxLineStyleToolBoxControl::dispatchLineStyleCommand(const OUString& rCommand, const Sequence<PropertyValue>& rArgs)
186 if (m_aLineStyleSelectFunction && m_aLineStyleSelectFunction(rCommand, rArgs[0].Value))
187 return;
189 dispatchCommand(rCommand, rArgs);
192 std::unique_ptr<WeldToolbarPopup> SvxLineStyleToolBoxControl::weldPopupWindow()
194 return std::make_unique<SvxLineBox>(this, m_pToolbar, m_xBtnUpdater->GetStyleIndex());
197 VclPtr<vcl::Window> SvxLineStyleToolBoxControl::createVclPopupWindow( vcl::Window* pParent )
199 mxInterimPopover = VclPtr<InterimToolbarPopup>::Create(getFrameInterface(), pParent,
200 std::make_unique<SvxLineBox>(this, pParent->GetFrameWeld(), m_xBtnUpdater->GetStyleIndex()));
202 mxInterimPopover->Show();
204 return mxInterimPopover;
207 OUString SvxLineStyleToolBoxControl::getImplementationName()
209 return "com.sun.star.comp.svx.LineStyleToolBoxControl";
212 css::uno::Sequence<OUString> SvxLineStyleToolBoxControl::getSupportedServiceNames()
214 return { "com.sun.star.frame.ToolbarController" };
217 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
218 com_sun_star_comp_svx_LineStyleToolBoxControl_get_implementation(
219 css::uno::XComponentContext* rContext,
220 css::uno::Sequence<css::uno::Any> const & )
222 return cppu::acquire( new SvxLineStyleToolBoxControl( rContext ) );
225 namespace {
227 class SvxLineEndToolBoxControl final : public svt::PopupWindowController
229 public:
230 explicit SvxLineEndToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext );
232 // XInitialization
233 virtual void SAL_CALL initialize( const css::uno::Sequence<css::uno::Any>& rArguments ) override;
235 // XServiceInfo
236 virtual OUString SAL_CALL getImplementationName() override;
237 virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
239 virtual void SAL_CALL execute(sal_Int16 nKeyModifier) override;
241 private:
242 virtual std::unique_ptr<WeldToolbarPopup> weldPopupWindow() override;
243 virtual VclPtr<vcl::Window> createVclPopupWindow( vcl::Window* pParent ) override;
246 class SvxLineEndWindow final : public WeldToolbarPopup
248 private:
249 XLineEndListRef mpLineEndList;
250 rtl::Reference<SvxLineEndToolBoxControl> mxControl;
251 std::unique_ptr<ValueSet> mxLineEndSet;
252 std::unique_ptr<weld::CustomWeld> mxLineEndSetWin;
253 sal_uInt16 mnLines;
254 Size maBmpSize;
256 DECL_LINK( SelectHdl, ValueSet*, void );
257 void FillValueSet();
258 void SetSize();
260 virtual void GrabFocus() override
262 mxLineEndSet->GrabFocus();
265 public:
266 SvxLineEndWindow(SvxLineEndToolBoxControl* pControl, weld::Widget* pParent);
267 virtual void statusChanged( const css::frame::FeatureStateEvent& rEvent ) override;
272 constexpr sal_uInt16 gnCols = 2;
274 SvxLineEndWindow::SvxLineEndWindow(SvxLineEndToolBoxControl* pControl, weld::Widget* pParent)
275 : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "svx/ui/floatinglineend.ui", "FloatingLineEnd")
276 , mxControl(pControl)
277 , mxLineEndSet(new ValueSet(m_xBuilder->weld_scrolled_window("valuesetwin", true)))
278 , mxLineEndSetWin(new weld::CustomWeld(*m_xBuilder, "valueset", *mxLineEndSet))
279 , mnLines(12)
281 mxLineEndSet->SetStyle(mxLineEndSet->GetStyle() | WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT);
282 mxLineEndSet->SetHelpId(HID_POPUP_LINEEND_CTRL);
283 m_xTopLevel->set_help_id(HID_POPUP_LINEEND);
285 SfxObjectShell* pDocSh = SfxObjectShell::Current();
286 if ( pDocSh )
288 const SfxPoolItem* pItem = pDocSh->GetItem( SID_LINEEND_LIST );
289 if( pItem )
290 mpLineEndList = static_cast<const SvxLineEndListItem*>( pItem )->GetLineEndList();
292 DBG_ASSERT( mpLineEndList.is(), "LineEndList not found" );
294 mxLineEndSet->SetSelectHdl( LINK( this, SvxLineEndWindow, SelectHdl ) );
295 mxLineEndSet->SetColCount( gnCols );
297 // ValueSet fill with entries of LineEndList
298 FillValueSet();
300 AddStatusListener( ".uno:LineEndListState");
303 IMPL_LINK_NOARG(SvxLineEndWindow, SelectHdl, ValueSet*, void)
305 std::unique_ptr<XLineEndItem> pLineEndItem;
306 std::unique_ptr<XLineStartItem> pLineStartItem;
307 sal_uInt16 nId = mxLineEndSet->GetSelectedItemId();
309 if( nId == 1 )
311 pLineStartItem.reset(new XLineStartItem());
313 else if( nId == 2 )
315 pLineEndItem.reset(new XLineEndItem());
317 else if( nId % 2 ) // beginning of line
319 const XLineEndEntry* pEntry = mpLineEndList->GetLineEnd( (nId - 1) / 2 - 1 );
320 pLineStartItem.reset(new XLineStartItem(pEntry->GetName(), pEntry->GetLineEnd()));
322 else // end of line
324 const XLineEndEntry* pEntry = mpLineEndList->GetLineEnd( nId / 2 - 2 );
325 pLineEndItem.reset(new XLineEndItem(pEntry->GetName(), pEntry->GetLineEnd()));
328 OUString name;
329 Any a;
331 if ( pLineStartItem )
333 name = "LineStart";
334 pLineStartItem->QueryValue( a );
336 else
338 name = "LineEnd";
339 pLineEndItem->QueryValue( a );
341 Sequence< PropertyValue > aArgs{ comphelper::makePropertyValue(name, a) };
343 /* #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
344 This instance may be deleted in the meantime (i.e. when a dialog is opened
345 while in Dispatch()), accessing members will crash in this case. */
346 mxLineEndSet->SetNoSelection();
348 mxControl->dispatchCommand(mxControl->getCommandURL(), aArgs);
350 mxControl->EndPopupMode();
353 void SvxLineEndWindow::FillValueSet()
355 if( !mpLineEndList.is() )
356 return;
358 ScopedVclPtrInstance< VirtualDevice > pVD;
360 tools::Long nCount = mpLineEndList->Count();
362 // First entry: no line end.
363 // An entry is temporarily added to get the UI bitmap
364 basegfx::B2DPolyPolygon aNothing;
365 mpLineEndList->Insert(std::make_unique<XLineEndEntry>(aNothing,
366 comphelper::LibreOfficeKit::isActive() ? SvxResId(RID_SVXSTR_INVISIBLE)
367 : SvxResId(RID_SVXSTR_NONE)));
368 const XLineEndEntry* pEntry = mpLineEndList->GetLineEnd(nCount);
369 BitmapEx aBmp = mpLineEndList->GetUiBitmap( nCount );
370 OSL_ENSURE( !aBmp.IsEmpty(), "UI bitmap was not created" );
372 maBmpSize = aBmp.GetSizePixel();
373 pVD->SetOutputSizePixel( maBmpSize, false );
374 maBmpSize.setWidth( maBmpSize.Width() / 2 );
375 Point aPt0( 0, 0 );
376 Point aPt1( maBmpSize.Width(), 0 );
378 pVD->DrawBitmapEx( Point(), aBmp );
379 mxLineEndSet->InsertItem(1, Image(pVD->GetBitmapEx(aPt0, maBmpSize)), pEntry->GetName());
380 mxLineEndSet->InsertItem(2, Image(pVD->GetBitmapEx(aPt1, maBmpSize)), pEntry->GetName());
382 mpLineEndList->Remove(nCount);
384 for( tools::Long i = 0; i < nCount; i++ )
386 pEntry = mpLineEndList->GetLineEnd( i );
387 DBG_ASSERT( pEntry, "Could not access LineEndEntry" );
388 aBmp = mpLineEndList->GetUiBitmap( i );
389 OSL_ENSURE( !aBmp.IsEmpty(), "UI bitmap was not created" );
391 pVD->DrawBitmapEx( aPt0, aBmp );
392 mxLineEndSet->InsertItem(static_cast<sal_uInt16>((i+1)*2L+1),
393 Image(pVD->GetBitmapEx(aPt0, maBmpSize)), pEntry->GetName());
394 mxLineEndSet->InsertItem(static_cast<sal_uInt16>((i+2)*2L),
395 Image(pVD->GetBitmapEx(aPt1, maBmpSize)), pEntry->GetName());
397 mnLines = std::min( static_cast<sal_uInt16>(nCount + 1), sal_uInt16(MAX_LINES) );
398 mxLineEndSet->SetLineCount( mnLines );
400 SetSize();
403 void SvxLineEndWindow::statusChanged( const css::frame::FeatureStateEvent& rEvent )
405 if ( rEvent.FeatureURL.Complete != ".uno:LineEndListState" )
406 return;
408 // The list of line ends (LineEndList) has changed
409 css::uno::Reference< css::uno::XWeak > xWeak;
410 if ( rEvent.State >>= xWeak )
412 mpLineEndList.set( static_cast< XLineEndList* >( xWeak.get() ) );
413 DBG_ASSERT( mpLineEndList.is(), "LineEndList not found" );
415 mxLineEndSet->Clear();
416 FillValueSet();
420 void SvxLineEndWindow::SetSize()
422 sal_uInt16 nItemCount = mxLineEndSet->GetItemCount();
423 sal_uInt16 nMaxLines = nItemCount / gnCols;
425 WinBits nBits = mxLineEndSet->GetStyle();
426 if ( mnLines == nMaxLines )
427 nBits &= ~WB_VSCROLL;
428 else
429 nBits |= WB_VSCROLL;
430 mxLineEndSet->SetStyle( nBits );
432 Size aSize( maBmpSize );
433 aSize.AdjustWidth(6 );
434 aSize.AdjustHeight(6 );
435 aSize = mxLineEndSet->CalcWindowSizePixel( aSize );
436 mxLineEndSet->GetDrawingArea()->set_size_request(aSize.Width(), aSize.Height());
437 mxLineEndSet->SetOutputSizePixel(aSize);
440 SvxLineEndToolBoxControl::SvxLineEndToolBoxControl( const css::uno::Reference<css::uno::XComponentContext>& rContext )
441 : svt::PopupWindowController( rContext, nullptr, OUString() )
445 void SAL_CALL SvxLineEndToolBoxControl::execute(sal_Int16 /*KeyModifier*/)
447 if (m_pToolbar)
449 // Toggle the popup also when toolbutton is activated
450 m_pToolbar->set_menu_item_active(m_aCommandURL, !m_pToolbar->get_menu_item_active(m_aCommandURL));
452 else
454 // Open the popup also when Enter key is pressed.
455 createPopupWindow();
459 void SvxLineEndToolBoxControl::initialize( const css::uno::Sequence<css::uno::Any>& rArguments )
461 svt::PopupWindowController::initialize( rArguments );
463 if (m_pToolbar)
465 mxPopoverContainer.reset(new ToolbarPopupContainer(m_pToolbar));
466 m_pToolbar->set_item_popover(m_aCommandURL, mxPopoverContainer->getTopLevel());
469 ToolBox* pToolBox = nullptr;
470 ToolBoxItemId nId;
471 if ( getToolboxId( nId, &pToolBox ) )
472 pToolBox->SetItemBits( nId, pToolBox->GetItemBits( nId ) | ToolBoxItemBits::DROPDOWNONLY );
475 std::unique_ptr<WeldToolbarPopup> SvxLineEndToolBoxControl::weldPopupWindow()
477 return std::make_unique<SvxLineEndWindow>(this, m_pToolbar);
480 VclPtr<vcl::Window> SvxLineEndToolBoxControl::createVclPopupWindow( vcl::Window* pParent )
482 mxInterimPopover = VclPtr<InterimToolbarPopup>::Create(getFrameInterface(), pParent,
483 std::make_unique<SvxLineEndWindow>(this, pParent->GetFrameWeld()));
485 mxInterimPopover->Show();
487 mxInterimPopover->SetText(SvxResId(RID_SVXSTR_LINEEND));
489 return mxInterimPopover;
492 OUString SvxLineEndToolBoxControl::getImplementationName()
494 return "com.sun.star.comp.svx.LineEndToolBoxControl";
497 css::uno::Sequence<OUString> SvxLineEndToolBoxControl::getSupportedServiceNames()
499 return { "com.sun.star.frame.ToolbarController" };
502 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
503 com_sun_star_comp_svx_LineEndToolBoxControl_get_implementation(
504 css::uno::XComponentContext* rContext,
505 css::uno::Sequence<css::uno::Any> const & )
507 return cppu::acquire( new SvxLineEndToolBoxControl( rContext ) );
510 SvxLineBox::SvxLineBox(SvxLineStyleToolBoxControl* pControl, weld::Widget* pParent, int nInitialIndex)
511 : WeldToolbarPopup(pControl->getFrameInterface(), pParent, "svx/ui/floatinglinestyle.ui", "FloatingLineStyle")
512 , mxControl(pControl)
513 , mxLineStyleSet(new ValueSet(m_xBuilder->weld_scrolled_window("valuesetwin", true)))
514 , mxLineStyleSetWin(new weld::CustomWeld(*m_xBuilder, "valueset", *mxLineStyleSet))
516 mxLineStyleSet->SetStyle(WB_FLATVALUESET | WB_ITEMBORDER | WB_3DLOOK | WB_NO_DIRECTSELECT);
518 FillControl();
520 mxLineStyleSet->SelectItem(nInitialIndex + 1);
522 mxLineStyleSet->SetSelectHdl( LINK( this, SvxLineBox, SelectHdl ) );
525 void SvxLineBox::GrabFocus()
527 mxLineStyleSet->GrabFocus();
530 SvxLineBox::~SvxLineBox()
534 // Fills the listbox (provisional) with strings
536 void SvxLineBox::Fill( const XDashListRef &pList )
538 mxLineStyleSet->Clear();
540 if( !pList.is() )
541 return;
543 // entry for 'none'
544 mxLineStyleSet->InsertItem(1, Image(), pList->GetStringForUiNoLine());
546 // entry for solid line
547 auto aBmp = pList->GetBitmapForUISolidLine();
548 Size aBmpSize = aBmp.GetSizePixel();
549 mxLineStyleSet->InsertItem(2, Image(aBmp), pList->GetStringForUiSolidLine());
551 // entries for dashed lines
552 tools::Long nCount = pList->Count();
553 for( tools::Long i = 0; i < nCount; i++ )
555 const XDashEntry* pEntry = pList->GetDash(i);
556 const BitmapEx aBitmap = pList->GetUiBitmap(i);
558 mxLineStyleSet->InsertItem(i + 3, Image(aBitmap), pEntry->GetName());
561 sal_uInt16 nLines = std::min( static_cast<sal_uInt16>(nCount + 2), sal_uInt16(MAX_LINES) );
562 mxLineStyleSet->SetLineCount(nLines);
564 WinBits nBits = mxLineStyleSet->GetStyle();
565 if ( nLines == mxLineStyleSet->GetItemCount() )
566 nBits &= ~WB_VSCROLL;
567 else
568 nBits |= WB_VSCROLL;
569 mxLineStyleSet->SetStyle( nBits );
571 Size aSize(aBmpSize);
572 aSize.AdjustWidth(6);
573 aSize.AdjustHeight(6);
574 aSize = mxLineStyleSet->CalcWindowSizePixel(aSize);
575 mxLineStyleSet->GetDrawingArea()->set_size_request(aSize.Width(), aSize.Height());
576 mxLineStyleSet->SetOutputSizePixel(aSize);
579 IMPL_LINK_NOARG(SvxLineBox, SelectHdl, ValueSet*, void)
581 drawing::LineStyle eXLS;
582 sal_Int32 nPos = mxLineStyleSet->GetSelectedItemId();
583 --nPos; // ids start at 1, get the pos of the id
585 switch ( nPos )
587 case 0:
588 eXLS = drawing::LineStyle_NONE;
589 break;
591 case 1:
592 eXLS = drawing::LineStyle_SOLID;
593 break;
595 default:
597 eXLS = drawing::LineStyle_DASH;
598 const SfxObjectShell* pObjSh = SfxObjectShell::Current();
599 if (nPos != -1 && pObjSh && pObjSh->GetItem(SID_DASH_LIST))
601 // LineDashItem will only be sent if it also has a dash.
602 // Notify cares!
603 SvxDashListItem const * pItem = pObjSh->GetItem( SID_DASH_LIST );
604 const XDashEntry* pEntry = pItem->GetDashList()->GetDash(nPos - 2);
605 XLineDashItem aLineDashItem(pEntry->GetName(), pEntry->GetDash());
607 Any a;
608 aLineDashItem.QueryValue ( a );
609 Sequence< PropertyValue > aArgs{ comphelper::makePropertyValue("LineDash", a) };
610 mxControl->dispatchLineStyleCommand(".uno:LineDash", aArgs);
612 // set also cap style using the toolbar line style selection popup
613 css::drawing::DashStyle eStyle = pEntry->GetDash().GetDashStyle();
614 XLineCapItem aLineCapItem(
615 eStyle == drawing::DashStyle_RECT || eStyle == drawing::DashStyle_RECTRELATIVE
616 ? css::drawing::LineCap_BUTT
617 : css::drawing::LineCap_ROUND );
618 aLineCapItem.QueryValue ( a );
619 Sequence< PropertyValue > aArgs2{ comphelper::makePropertyValue("LineCap", a) };
620 mxControl->dispatchLineStyleCommand(".uno:LineCap", aArgs2);
623 break;
626 XLineStyleItem aLineStyleItem( eXLS );
627 Any a;
628 aLineStyleItem.QueryValue ( a );
629 Sequence< PropertyValue > aArgs{ comphelper::makePropertyValue("XLineStyle", a) };
630 mxControl->dispatchLineStyleCommand(".uno:XLineStyle", aArgs);
632 mxControl->EndPopupMode();
635 void SvxLineBox::FillControl()
637 SfxObjectShell* pSh = SfxObjectShell::Current();
638 if (pSh)
640 const SvxDashListItem* pItem = pSh->GetItem( SID_DASH_LIST );
641 if (pItem)
642 Fill(pItem->GetDashList());
646 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */