weld SvxLineDefTabPage

Change-Id: I7a7f421190c89cec8e1a772015b7544d60b26298
Reviewed-on: https://gerrit.libreoffice.org/61158
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/cui/source/inc/cuitabline.hxx b/cui/source/inc/cuitabline.hxx
index c7e2431..13e15ff 100644
--- a/cui/source/inc/cuitabline.hxx
+++ b/cui/source/inc/cuitabline.hxx
@@ -242,22 +242,6 @@ class SvxLineDefTabPage : public SfxTabPage
    using TabPage::ActivatePage;
    using TabPage::DeactivatePage;
private:
    VclPtr<LineLB>              m_pLbLineStyles;
    VclPtr<ListBox>             m_pLbType1;
    VclPtr<ListBox>             m_pLbType2;
    VclPtr<NumericField>        m_pNumFldNumber1;
    VclPtr<NumericField>        m_pNumFldNumber2;
    VclPtr<MetricField>         m_pMtrLength1;
    VclPtr<MetricField>         m_pMtrLength2;
    VclPtr<MetricField>         m_pMtrDistance;
    VclPtr<CheckBox>            m_pCbxSynchronize;
    VclPtr<PushButton>          m_pBtnAdd;
    VclPtr<PushButton>          m_pBtnModify;
    VclPtr<PushButton>          m_pBtnDelete;
    VclPtr<PushButton>          m_pBtnLoad;
    VclPtr<PushButton>          m_pBtnSave;
    VclPtr<SvxXLinePreview>     m_pCtlPreview;

    const SfxItemSet&   rOutAttrs;
    XDash               aDash;

@@ -274,27 +258,45 @@ private:
    MapUnit             ePoolUnit;
    FieldUnit           eFUnit;

    XLinePreview m_aCtlPreview;
    std::unique_ptr<SvxLineLB> m_xLbLineStyles;
    std::unique_ptr<weld::ComboBox> m_xLbType1;
    std::unique_ptr<weld::ComboBox> m_xLbType2;
    std::unique_ptr<weld::SpinButton> m_xNumFldNumber1;
    std::unique_ptr<weld::SpinButton> m_xNumFldNumber2;
    std::unique_ptr<weld::MetricSpinButton> m_xMtrLength1;
    std::unique_ptr<weld::MetricSpinButton> m_xMtrLength2;
    std::unique_ptr<weld::MetricSpinButton> m_xMtrDistance;
    std::unique_ptr<weld::CheckButton> m_xCbxSynchronize;
    std::unique_ptr<weld::Button> m_xBtnAdd;
    std::unique_ptr<weld::Button> m_xBtnModify;
    std::unique_ptr<weld::Button> m_xBtnDelete;
    std::unique_ptr<weld::Button> m_xBtnLoad;
    std::unique_ptr<weld::Button> m_xBtnSave;
    std::unique_ptr<weld::CustomWeld> m_xCtlPreview;

    void FillDash_Impl();
    void FillDialog_Impl();

    DECL_LINK( ClickAddHdl_Impl, Button*, void );
    DECL_LINK( ClickModifyHdl_Impl, Button*, void );
    DECL_LINK( ClickDeleteHdl_Impl, Button*, void );
    DECL_LINK( SelectLinestyleListBoxHdl_Impl, ListBox&, void );
    void SelectLinestyleHdl_Impl(ListBox const *);
    DECL_LINK( ChangePreviewHdl_Impl, Edit&, void );
    DECL_LINK( ChangeNumber1Hdl_Impl, Edit&, void );
    DECL_LINK( ChangeNumber2Hdl_Impl, Edit&, void );
    DECL_LINK( ClickLoadHdl_Impl, Button*, void );
    DECL_LINK( ClickSaveHdl_Impl, Button*, void );
    DECL_LINK( ChangeMetricHdl_Impl, Button*, void );
    DECL_LINK( SelectTypeListBoxHdl_Impl, ListBox&, void );
    void SelectTypeHdl_Impl(ListBox*);
    DECL_LINK(ClickAddHdl_Impl, weld::Button&, void);
    DECL_LINK(ClickModifyHdl_Impl, weld::Button&, void);
    DECL_LINK(ClickDeleteHdl_Impl, weld::Button&, void);
    DECL_LINK(SelectLinestyleListBoxHdl_Impl, weld::ComboBox&, void);
    void SelectLinestyleHdl_Impl(const weld::ComboBox*);
    DECL_LINK(ChangePreviewHdl_Impl, weld::MetricSpinButton&, void);
    DECL_LINK(ChangeNumber1Hdl_Impl, weld::SpinButton&, void);
    DECL_LINK(ChangeNumber2Hdl_Impl, weld::SpinButton&, void);
    DECL_LINK(ClickLoadHdl_Impl, weld::Button&, void);
    DECL_LINK(ClickSaveHdl_Impl, weld::Button&, void);
    DECL_LINK(ChangeMetricHdl_Impl, weld::ToggleButton&, void);
    DECL_LINK(SelectTypeListBoxHdl_Impl, weld::ComboBox&, void);
    void SelectTypeHdl_Impl(weld::ComboBox*);
    void ChangeMetricHdl_Impl(weld::ToggleButton*);

    void CheckChanges_Impl();

public:
    SvxLineDefTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs  );
    SvxLineDefTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs);
    virtual ~SvxLineDefTabPage() override;
    virtual void dispose() override;

diff --git a/cui/source/tabpages/tplnedef.cxx b/cui/source/tabpages/tplnedef.cxx
index 16e7602..bdc61de 100644
--- a/cui/source/tabpages/tplnedef.cxx
+++ b/cui/source/tabpages/tplnedef.cxx
@@ -50,45 +50,31 @@
using namespace com::sun::star;


SvxLineDefTabPage::SvxLineDefTabPage
(
    vcl::Window* pParent,
    const SfxItemSet& rInAttrs
) :

    SfxTabPage( pParent
              , "LineStylePage"
              , "cui/ui/linestyletabpage.ui"
              , &rInAttrs ),
    rOutAttrs       ( rInAttrs ),

    aXLineAttr          ( rInAttrs.GetPool() ),
    rXLSet              ( aXLineAttr.GetItemSet() ),
    pnDashListState(nullptr),
    pPageType(nullptr),
    nDlgType(0),
    pPosDashLb(nullptr)
SvxLineDefTabPage::SvxLineDefTabPage(TabPageParent pParent, const SfxItemSet& rInAttrs)
    : SfxTabPage(pParent, "cui/ui/linestyletabpage.ui", "LineStylePage", &rInAttrs)
    , rOutAttrs(rInAttrs)
    , aXLineAttr(rInAttrs.GetPool())
    , rXLSet(aXLineAttr.GetItemSet())
    , pnDashListState(nullptr)
    , pPageType(nullptr)
    , nDlgType(0)
    , pPosDashLb(nullptr)
    , m_xLbLineStyles(new SvxLineLB(m_xBuilder->weld_combo_box("LB_LINESTYLES")))
    , m_xLbType1(m_xBuilder->weld_combo_box("LB_TYPE_1"))
    , m_xLbType2(m_xBuilder->weld_combo_box("LB_TYPE_2"))
    , m_xNumFldNumber1(m_xBuilder->weld_spin_button("NUM_FLD_1"))
    , m_xNumFldNumber2(m_xBuilder->weld_spin_button("NUM_FLD_2"))
    , m_xMtrLength1(m_xBuilder->weld_metric_spin_button("MTR_FLD_LENGTH_1", FUNIT_CM))
    , m_xMtrLength2(m_xBuilder->weld_metric_spin_button("MTR_FLD_LENGTH_2", FUNIT_CM))
    , m_xMtrDistance(m_xBuilder->weld_metric_spin_button("MTR_FLD_DISTANCE", FUNIT_CM))
    , m_xCbxSynchronize(m_xBuilder->weld_check_button("CBX_SYNCHRONIZE"))
    , m_xBtnAdd(m_xBuilder->weld_button("BTN_ADD"))
    , m_xBtnModify(m_xBuilder->weld_button("BTN_MODIFY"))
    , m_xBtnDelete(m_xBuilder->weld_button("BTN_DELETE"))
    , m_xBtnLoad(m_xBuilder->weld_button("BTN_LOAD"))
    , m_xBtnSave(m_xBuilder->weld_button("BTN_SAVE"))
    , m_xCtlPreview(new weld::CustomWeld(*m_xBuilder, "CTL_PREVIEW", m_aCtlPreview))
{

   get(m_pLbLineStyles   ,"LB_LINESTYLES");
   get(m_pLbType1        ,"LB_TYPE_1");
   get(m_pLbType2        ,"LB_TYPE_2");
   get(m_pNumFldNumber1  ,"NUM_FLD_1");
   get(m_pNumFldNumber2  ,"NUM_FLD_2");
   get(m_pMtrLength1     ,"MTR_FLD_LENGTH_1");
   m_pMtrLength1->SetCustomUnitText("%");
   get(m_pMtrLength2     ,"MTR_FLD_LENGTH_2");
   m_pMtrLength2->SetCustomUnitText("%");
   get(m_pMtrDistance    ,"MTR_FLD_DISTANCE");
   m_pMtrDistance->SetCustomUnitText("%");
   get(m_pCbxSynchronize ,"CBX_SYNCHRONIZE");
   get(m_pBtnAdd         ,"BTN_ADD");
   get(m_pBtnModify      ,"BTN_MODIFY");
   get(m_pBtnDelete      ,"BTN_DELETE");
   get(m_pBtnLoad        ,"BTN_LOAD");
   get(m_pBtnSave        ,"BTN_SAVE");
   get(m_pCtlPreview     ,"CTL_PREVIEW");

    // this page needs ExchangeSupport
    SetExchangeSupport();

@@ -103,9 +89,9 @@ SvxLineDefTabPage::SvxLineDefTabPage
            break;
        default: ; //prevent warning
    }
    SetFieldUnit( *m_pMtrDistance, eFUnit );
    SetFieldUnit( *m_pMtrLength1, eFUnit );
    SetFieldUnit( *m_pMtrLength2, eFUnit );
    SetFieldUnit(*m_xMtrDistance, eFUnit);
    SetFieldUnit(*m_xMtrLength1, eFUnit);
    SetFieldUnit(*m_xMtrLength2, eFUnit);

    // determine PoolUnit
    SfxItemPool* pPool = rOutAttrs.GetPool();
@@ -118,33 +104,33 @@ SvxLineDefTabPage::SvxLineDefTabPage
    rXLSet.Put( XLineColorItem(OUString(), COL_BLACK) );

    // #i34740#
    m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
    m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());

    m_pBtnAdd->SetClickHdl( LINK( this, SvxLineDefTabPage, ClickAddHdl_Impl ) );
    m_pBtnModify->SetClickHdl( LINK( this, SvxLineDefTabPage, ClickModifyHdl_Impl ) );
    m_pBtnDelete->SetClickHdl( LINK( this, SvxLineDefTabPage, ClickDeleteHdl_Impl ) );
    m_pBtnLoad->SetClickHdl( LINK( this, SvxLineDefTabPage, ClickLoadHdl_Impl ) );
    m_pBtnSave->SetClickHdl( LINK( this, SvxLineDefTabPage, ClickSaveHdl_Impl ) );
    m_xBtnAdd->connect_clicked(LINK(this, SvxLineDefTabPage, ClickAddHdl_Impl));
    m_xBtnModify->connect_clicked(LINK(this, SvxLineDefTabPage, ClickModifyHdl_Impl));
    m_xBtnDelete->connect_clicked(LINK(this, SvxLineDefTabPage, ClickDeleteHdl_Impl));
    m_xBtnLoad->connect_clicked(LINK(this, SvxLineDefTabPage, ClickLoadHdl_Impl));
    m_xBtnSave->connect_clicked(LINK(this, SvxLineDefTabPage, ClickSaveHdl_Impl));

    m_pNumFldNumber1->SetModifyHdl( LINK( this, SvxLineDefTabPage, ChangeNumber1Hdl_Impl ) );
    m_pNumFldNumber2->SetModifyHdl( LINK( this, SvxLineDefTabPage, ChangeNumber2Hdl_Impl ) );
    m_pLbLineStyles->SetSelectHdl( LINK( this, SvxLineDefTabPage, SelectLinestyleListBoxHdl_Impl ) );
    m_xNumFldNumber1->connect_value_changed(LINK(this, SvxLineDefTabPage, ChangeNumber1Hdl_Impl));
    m_xNumFldNumber2->connect_value_changed(LINK(this, SvxLineDefTabPage, ChangeNumber2Hdl_Impl));
    m_xLbLineStyles->connect_changed(LINK(this, SvxLineDefTabPage, SelectLinestyleListBoxHdl_Impl));

    // #i122042# switch off default adding of 'none' and 'solid' entries
    // for this ListBox; we want to select only editable/dashed styles
    m_pLbLineStyles->setAddStandardFields(false);
    m_xLbLineStyles->setAddStandardFields(false);

    // absolute (in mm) or relative (in %)
    m_pCbxSynchronize->SetClickHdl(  LINK( this, SvxLineDefTabPage, ChangeMetricHdl_Impl ) );
    m_xCbxSynchronize->connect_toggled(LINK(this, SvxLineDefTabPage, ChangeMetricHdl_Impl));

    // preview must be updated when there's something changed
    Link<ListBox&, void> aLink = LINK( this, SvxLineDefTabPage, SelectTypeListBoxHdl_Impl );
    m_pLbType1->SetSelectHdl( aLink );
    m_pLbType2->SetSelectHdl( aLink );
    Link<Edit&,void> aLink2 = LINK( this, SvxLineDefTabPage, ChangePreviewHdl_Impl );
    m_pMtrLength1->SetModifyHdl( aLink2 );
    m_pMtrLength2->SetModifyHdl( aLink2 );
    m_pMtrDistance->SetModifyHdl( aLink2 );
    Link<weld::ComboBox&, void> aLink = LINK(this, SvxLineDefTabPage, SelectTypeListBoxHdl_Impl);
    m_xLbType1->connect_changed(aLink);
    m_xLbType2->connect_changed(aLink);
    Link<weld::MetricSpinButton&,void> aLink2 = LINK( this, SvxLineDefTabPage, ChangePreviewHdl_Impl );
    m_xMtrLength1->connect_value_changed(aLink2);
    m_xMtrLength2->connect_value_changed(aLink2);
    m_xMtrDistance->connect_value_changed(aLink2);

    pDashList = nullptr;
}
@@ -156,31 +142,17 @@ SvxLineDefTabPage::~SvxLineDefTabPage()

void SvxLineDefTabPage::dispose()
{
    m_pLbLineStyles.clear();
    m_pLbType1.clear();
    m_pLbType2.clear();
    m_pNumFldNumber1.clear();
    m_pNumFldNumber2.clear();
    m_pMtrLength1.clear();
    m_pMtrLength2.clear();
    m_pMtrDistance.clear();
    m_pCbxSynchronize.clear();
    m_pBtnAdd.clear();
    m_pBtnModify.clear();
    m_pBtnDelete.clear();
    m_pBtnLoad.clear();
    m_pBtnSave.clear();
    m_pCtlPreview.clear();
    m_xCtlPreview.reset();
    m_xLbLineStyles.reset();
    SfxTabPage::dispose();
}

void SvxLineDefTabPage::Construct()
{
    // Line style fill; do *not* add default fields here
    m_pLbLineStyles->Fill( pDashList );
    m_xLbLineStyles->Fill( pDashList );
}


void SvxLineDefTabPage::ActivatePage( const SfxItemSet& )
{
    if( nDlgType == 0 ) // area dialog
@@ -188,10 +160,10 @@ void SvxLineDefTabPage::ActivatePage( const SfxItemSet& )
        // ActivatePage() is called before the dialog receives PageCreated() !!!
        if( pDashList.is() )
        {
            if( *pPageType == PageType::Gradient &&
                *pPosDashLb != LISTBOX_ENTRY_NOTFOUND )
            if (*pPageType == PageType::Gradient &&
                *pPosDashLb != -1)
            {
                m_pLbLineStyles->SelectEntryPos( *pPosDashLb );
                m_xLbLineStyles->set_active(*pPosDashLb);
            }
            // so that a possibly existing line style is discarded
            SelectLinestyleHdl_Impl( nullptr );
@@ -222,21 +194,20 @@ DeactivateRC SvxLineDefTabPage::DeactivatePage( SfxItemSet* _pSet )
    return DeactivateRC::LeavePage;
}


void SvxLineDefTabPage::CheckChanges_Impl()
{
    // is here used to NOT lose changes
    //css::drawing::DashStyle eXDS;

    if( m_pNumFldNumber1->IsValueChangedFromSaved() ||
        m_pMtrLength1->IsValueChangedFromSaved() ||
        m_pLbType1->IsValueChangedFromSaved() ||
        m_pNumFldNumber2->IsValueChangedFromSaved() ||
        m_pMtrLength2->IsValueChangedFromSaved() ||
        m_pLbType2->IsValueChangedFromSaved() ||
        m_pMtrDistance->IsValueChangedFromSaved() )
    if( m_xNumFldNumber1->get_value_changed_from_saved() ||
        m_xMtrLength1->get_value_changed_from_saved() ||
        m_xLbType1->get_value_changed_from_saved() ||
        m_xNumFldNumber2->get_value_changed_from_saved() ||
        m_xMtrLength2->get_value_changed_from_saved() ||
        m_xLbType2->get_value_changed_from_saved() ||
        m_xMtrDistance->get_value_changed_from_saved() )
    {
        std::unique_ptr<weld::MessageDialog> xMessDlg(Application::CreateMessageDialog(GetFrameWeld(),
        std::unique_ptr<weld::MessageDialog> xMessDlg(Application::CreateMessageDialog(GetDialogFrameWeld(),
                                                      VclMessageType::Warning, VclButtonsType::Cancel,
                                                      CuiResId(RID_SVXSTR_ASK_CHANGE_LINESTYLE)));
        xMessDlg->set_title(SvxResId(RID_SVXSTR_LINESTYLE));
@@ -249,13 +220,13 @@ void SvxLineDefTabPage::CheckChanges_Impl()
        {
            case RET_BTN_1:
            {
                ClickModifyHdl_Impl( nullptr );
                ClickModifyHdl_Impl(*m_xBtnModify);
            }
            break;

            case RET_BTN_2:
            {
                ClickAddHdl_Impl( nullptr );
                ClickAddHdl_Impl(*m_xBtnAdd);
            }
            break;

@@ -264,9 +235,8 @@ void SvxLineDefTabPage::CheckChanges_Impl()
        }
    }


    sal_Int32 nPos = m_pLbLineStyles->GetSelectedEntryPos();
    if( nPos != LISTBOX_ENTRY_NOTFOUND )
    int nPos = m_xLbLineStyles->get_active();
    if (nPos != -1)
    {
        *pPosDashLb = nPos;
    }
@@ -281,7 +251,7 @@ bool SvxLineDefTabPage::FillItemSet( SfxItemSet* rAttrs )
        {
            FillDash_Impl();

            OUString aString( m_pLbLineStyles->GetSelectedEntry() );
            OUString aString(m_xLbLineStyles->get_active_text());
            rAttrs->Put( XLineStyleItem( drawing::LineStyle_DASH ) );
            rAttrs->Put( XLineDashItem( aString, aDash ) );
        }
@@ -300,19 +270,17 @@ void SvxLineDefTabPage::Reset( const SfxItemSet* rAttrs )
        {
            case drawing::LineStyle_NONE:
            case drawing::LineStyle_SOLID:
                m_pLbLineStyles->SelectEntryPos( 0 );
                m_xLbLineStyles->set_active(0);
                break;

            case drawing::LineStyle_DASH:
            {
                const XLineDashItem& rDashItem = rAttrs->Get( XATTR_LINEDASH );
                aDash = rDashItem.GetDashValue();

                m_pLbLineStyles->SetNoSelection();
                m_pLbLineStyles->SelectEntry( rDashItem.GetName() );
            }
                m_xLbLineStyles->set_active(-1);
                m_xLbLineStyles->set_active_text(rDashItem.GetName());
                break;

            }
            default:
                break;
        }
@@ -322,37 +290,34 @@ void SvxLineDefTabPage::Reset( const SfxItemSet* rAttrs )
    // determine button state
    if( pDashList->Count() )
    {
        m_pBtnModify->Enable();
        m_pBtnDelete->Enable();
        m_pBtnSave->Enable();
        m_xBtnModify->set_sensitive(true);
        m_xBtnDelete->set_sensitive(true);
        m_xBtnSave->set_sensitive(true);
    }
    else
    {
        m_pBtnModify->Disable();
        m_pBtnDelete->Disable();
        m_pBtnSave->Disable();
        m_xBtnModify->set_sensitive(false);
        m_xBtnDelete->set_sensitive(false);
        m_xBtnSave->set_sensitive(false);
    }
}


VclPtr<SfxTabPage> SvxLineDefTabPage::Create( TabPageParent pWindow, const SfxItemSet* rOutAttrs )
VclPtr<SfxTabPage> SvxLineDefTabPage::Create(TabPageParent pParent, const SfxItemSet* rOutAttrs )
{
    return VclPtr<SvxLineDefTabPage>::Create( pWindow.pParent, *rOutAttrs );
    return VclPtr<SvxLineDefTabPage>::Create(pParent, *rOutAttrs);
}


IMPL_LINK( SvxLineDefTabPage, SelectLinestyleListBoxHdl_Impl, ListBox&, rListBox, void )
IMPL_LINK(SvxLineDefTabPage, SelectLinestyleListBoxHdl_Impl, weld::ComboBox&, rListBox, void)
{
    SelectLinestyleHdl_Impl(&rListBox);
}

void SvxLineDefTabPage::SelectLinestyleHdl_Impl(ListBox const * p)
void SvxLineDefTabPage::SelectLinestyleHdl_Impl(const weld::ComboBox* p)
{
    if(pDashList->Count())
    {
        int nTmp = m_pLbLineStyles->GetSelectedEntryPos();

        if(LISTBOX_ENTRY_NOTFOUND == nTmp)
        int nTmp = m_xLbLineStyles->get_active();
        if (nTmp == -1)
        {
            OSL_ENSURE(false, "OOps, non-existent LineDash selected (!)");
            nTmp = 1;
@@ -365,9 +330,8 @@ void SvxLineDefTabPage::SelectLinestyleHdl_Impl(ListBox const * p)
        rXLSet.Put( XLineDashItem( OUString(), aDash ) );

        // #i34740#
        m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());

        m_pCtlPreview->Invalidate();
        m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());
        m_aCtlPreview.Invalidate();

        // Is not set before, in order to take the new style
        // only if there was an entry selected in the ListBox.
@@ -377,153 +341,149 @@ void SvxLineDefTabPage::SelectLinestyleHdl_Impl(ListBox const * p)
    }
}


IMPL_LINK_NOARG(SvxLineDefTabPage, ChangePreviewHdl_Impl, Edit&, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ChangePreviewHdl_Impl, weld::MetricSpinButton&, void)
{
    FillDash_Impl();
    m_pCtlPreview->Invalidate();
    m_aCtlPreview.Invalidate();
}

IMPL_LINK_NOARG(SvxLineDefTabPage, ChangeNumber1Hdl_Impl, Edit&, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ChangeNumber1Hdl_Impl, weld::SpinButton&, void)
{
    if( m_pNumFldNumber1->GetValue() == 0 )
    if (m_xNumFldNumber1->get_value() == 0)
    {
        m_pNumFldNumber2->SetMin( 1 );
        m_pNumFldNumber2->SetFirst( 1 );
        m_xNumFldNumber2->set_min(1);
    }
    else
    {
        m_pNumFldNumber2->SetMin( 0 );
        m_pNumFldNumber2->SetFirst( 0 );
        m_xNumFldNumber2->set_min(0);
    }

    ChangePreviewHdl_Impl( *m_pMtrLength1 );
    ChangePreviewHdl_Impl(*m_xMtrLength1);
}


IMPL_LINK_NOARG(SvxLineDefTabPage, ChangeNumber2Hdl_Impl, Edit&, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ChangeNumber2Hdl_Impl, weld::SpinButton&, void)
{
    if( m_pNumFldNumber2->GetValue() == 0 )
    if (m_xNumFldNumber2->get_value() == 0)
    {
        m_pNumFldNumber1->SetMin( 1 );
        m_pNumFldNumber1->SetFirst( 1 );
        m_xNumFldNumber1->set_min(1);
    }
    else
    {
        m_pNumFldNumber1->SetMin( 0 );
        m_pNumFldNumber1->SetFirst( 0 );
        m_xNumFldNumber1->set_min(0);
    }

    ChangePreviewHdl_Impl( *m_pMtrLength1 );
    ChangePreviewHdl_Impl(*m_xMtrLength1);
}


IMPL_LINK( SvxLineDefTabPage, ChangeMetricHdl_Impl, Button*, p, void )
IMPL_LINK( SvxLineDefTabPage, ChangeMetricHdl_Impl, weld::ToggleButton&, r, void)
{
    if( !m_pCbxSynchronize->IsChecked() && m_pMtrLength1->GetUnit() != eFUnit )
    ChangeMetricHdl_Impl(&r);
}

void SvxLineDefTabPage::ChangeMetricHdl_Impl(weld::ToggleButton* p)
{
    if( !m_xCbxSynchronize->get_active() && m_xMtrLength1->get_unit() != eFUnit )
    {
        long nTmp1, nTmp2, nTmp3;

        // was changed with Control
        if( p )
        {
            nTmp1 = GetCoreValue( *m_pMtrLength1, ePoolUnit ) * XOUT_WIDTH / 100;
            nTmp2 = GetCoreValue( *m_pMtrLength2, ePoolUnit ) * XOUT_WIDTH / 100;
            nTmp3 = GetCoreValue( *m_pMtrDistance, ePoolUnit ) * XOUT_WIDTH / 100;
            nTmp1 = GetCoreValue( *m_xMtrLength1, ePoolUnit ) * XOUT_WIDTH / 100;
            nTmp2 = GetCoreValue( *m_xMtrLength2, ePoolUnit ) * XOUT_WIDTH / 100;
            nTmp3 = GetCoreValue( *m_xMtrDistance, ePoolUnit ) * XOUT_WIDTH / 100;
        }
        else
        {
            nTmp1 = GetCoreValue( *m_pMtrLength1, ePoolUnit );
            nTmp2 = GetCoreValue( *m_pMtrLength2, ePoolUnit );
            nTmp3 = GetCoreValue( *m_pMtrDistance, ePoolUnit );
            nTmp1 = GetCoreValue( *m_xMtrLength1, ePoolUnit );
            nTmp2 = GetCoreValue( *m_xMtrLength2, ePoolUnit );
            nTmp3 = GetCoreValue( *m_xMtrDistance, ePoolUnit );
        }
        m_pMtrLength1->SetDecimalDigits( 2 );
        m_pMtrLength2->SetDecimalDigits( 2 );
        m_pMtrDistance->SetDecimalDigits( 2 );
        m_xMtrLength1->set_digits(2);
        m_xMtrLength2->set_digits(2);
        m_xMtrDistance->set_digits(2);

        // adjust metric
        m_pMtrLength1->SetUnit( eFUnit );
        m_pMtrLength2->SetUnit( eFUnit );
        m_pMtrDistance->SetUnit( eFUnit );
        m_xMtrLength1->set_unit(eFUnit);
        m_xMtrLength2->set_unit(eFUnit);
        m_xMtrDistance->set_unit(eFUnit);

        SetMetricValue( *m_pMtrLength1, nTmp1, ePoolUnit );
        SetMetricValue( *m_pMtrLength2, nTmp2, ePoolUnit );
        SetMetricValue( *m_pMtrDistance, nTmp3, ePoolUnit );
        SetMetricValue( *m_xMtrLength1, nTmp1, ePoolUnit );
        SetMetricValue( *m_xMtrLength2, nTmp2, ePoolUnit );
        SetMetricValue( *m_xMtrDistance, nTmp3, ePoolUnit );
    }
    else if( m_pCbxSynchronize->IsChecked() && m_pMtrLength1->GetUnit() != FUNIT_PERCENT )
    else if( m_xCbxSynchronize->get_active() && m_xMtrLength1->get_unit() != FUNIT_PERCENT )
    {
        long nTmp1, nTmp2, nTmp3;

        // was changed with Control
        if( p )
        {
            nTmp1 = GetCoreValue( *m_pMtrLength1, ePoolUnit ) * 100 / XOUT_WIDTH;
            nTmp2 = GetCoreValue( *m_pMtrLength2, ePoolUnit ) * 100 / XOUT_WIDTH;
            nTmp3 = GetCoreValue( *m_pMtrDistance, ePoolUnit ) * 100 / XOUT_WIDTH;
            nTmp1 = GetCoreValue( *m_xMtrLength1, ePoolUnit ) * 100 / XOUT_WIDTH;
            nTmp2 = GetCoreValue( *m_xMtrLength2, ePoolUnit ) * 100 / XOUT_WIDTH;
            nTmp3 = GetCoreValue( *m_xMtrDistance, ePoolUnit ) * 100 / XOUT_WIDTH;
        }
        else
        {
            nTmp1 = GetCoreValue( *m_pMtrLength1, ePoolUnit );
            nTmp2 = GetCoreValue( *m_pMtrLength2, ePoolUnit );
            nTmp3 = GetCoreValue( *m_pMtrDistance, ePoolUnit );
            nTmp1 = GetCoreValue( *m_xMtrLength1, ePoolUnit );
            nTmp2 = GetCoreValue( *m_xMtrLength2, ePoolUnit );
            nTmp3 = GetCoreValue( *m_xMtrDistance, ePoolUnit );
        }

        m_pMtrLength1->SetDecimalDigits( 0 );
        m_pMtrLength2->SetDecimalDigits( 0 );
        m_pMtrDistance->SetDecimalDigits( 0 );
        m_xMtrLength1->set_digits(0);
        m_xMtrLength2->set_digits(0);
        m_xMtrDistance->set_digits(0);

        m_pMtrLength1->SetUnit( FUNIT_PERCENT );
        m_pMtrLength2->SetUnit( FUNIT_PERCENT );
        m_pMtrDistance->SetUnit( FUNIT_PERCENT );
        m_xMtrLength1->set_unit(FUNIT_PERCENT);
        m_xMtrLength2->set_unit(FUNIT_PERCENT);
        m_xMtrDistance->set_unit(FUNIT_PERCENT);

        SetMetricValue( *m_pMtrLength1, nTmp1, ePoolUnit );
        SetMetricValue( *m_pMtrLength2, nTmp2, ePoolUnit );
        SetMetricValue( *m_pMtrDistance, nTmp3, ePoolUnit );
        SetMetricValue( *m_xMtrLength1, nTmp1, ePoolUnit );
        SetMetricValue( *m_xMtrLength2, nTmp2, ePoolUnit );
        SetMetricValue( *m_xMtrDistance, nTmp3, ePoolUnit );

    }
    SelectTypeHdl_Impl( nullptr );
}


IMPL_LINK( SvxLineDefTabPage, SelectTypeListBoxHdl_Impl, ListBox&, rListBox, void )
IMPL_LINK( SvxLineDefTabPage, SelectTypeListBoxHdl_Impl, weld::ComboBox&, rListBox, void )
{
    SelectTypeHdl_Impl(&rListBox);
}

void  SvxLineDefTabPage::SelectTypeHdl_Impl(ListBox* p)
void  SvxLineDefTabPage::SelectTypeHdl_Impl(weld::ComboBox* p)
{
    if ( p == m_pLbType1 || !p )
    if (p == m_xLbType1.get() || !p)
    {
        if ( m_pLbType1->GetSelectedEntryPos() == 0 )
        if (m_xLbType1->get_active() == 0)
        {
            m_pMtrLength1->Disable();
            m_pMtrLength1->SetText( "" );
            m_xMtrLength1->set_sensitive(false);
            m_xMtrLength1->set_text("");
        }
        else if ( !m_pMtrLength1->IsEnabled() )
        else if (!m_xMtrLength1->get_sensitive())
        {
            m_pMtrLength1->Enable();
            m_pMtrLength1->Reformat();
            m_xMtrLength1->set_sensitive(true);
            m_xMtrLength1->reformat();
        }
    }

    if ( p == m_pLbType2 || !p )
    if (p == m_xLbType2.get() || !p)
    {
        if ( m_pLbType2->GetSelectedEntryPos() == 0 )
        if (m_xLbType2->get_active() == 0)
        {
            m_pMtrLength2->Disable();
            m_pMtrLength2->SetText( "" );
            m_xMtrLength2->set_sensitive(false);
            m_xMtrLength2->set_text("");
        }
        else if ( !m_pMtrLength2->IsEnabled() )
        else if (!m_xMtrLength2->get_sensitive())
        {
            m_pMtrLength2->Enable();
            m_pMtrLength2->Reformat();
            m_xMtrLength2->set_sensitive(true);
            m_xMtrLength2->reformat();
        }
    }
    ChangePreviewHdl_Impl( *m_pMtrLength1 );
    ChangePreviewHdl_Impl(*m_xMtrLength1);
}


IMPL_LINK_NOARG(SvxLineDefTabPage, ClickAddHdl_Impl, Button*, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ClickAddHdl_Impl, weld::Button&, void)
{
    OUString aNewName(SvxResId(RID_SVXSTR_LINESTYLE));
    OUString aDesc(CuiResId(RID_SVXSTR_DESC_LINESTYLE));
@@ -544,7 +504,7 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickAddHdl_Impl, Button*, void)
    }

    SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
    ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc));
    ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetDialogFrameWeld(), aName, aDesc));
    bool bLoop = true;

    while ( bLoop && pDlg->Execute() == RET_OK )
@@ -565,26 +525,26 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickAddHdl_Impl, Button*, void)

            long nDashCount = pDashList->Count();
            pDashList->Insert( o3tl::make_unique<XDashEntry>(aDash, aName), nDashCount );
            m_pLbLineStyles->Append( *pDashList->GetDash(nDashCount), pDashList->GetUiBitmap(nDashCount) );
            m_xLbLineStyles->Append( *pDashList->GetDash(nDashCount), pDashList->GetUiBitmap(nDashCount) );

            m_pLbLineStyles->SelectEntryPos( m_pLbLineStyles->GetEntryCount() - 1 );
            m_xLbLineStyles->set_active(m_xLbLineStyles->get_count() - 1);

            *pnDashListState |= ChangeType::MODIFIED;

            *pPageType = PageType::Hatch;

            // save values for changes recognition (-> method)
            m_pNumFldNumber1->SaveValue();
            m_pMtrLength1->SaveValue();
            m_pLbType1->SaveValue();
            m_pNumFldNumber2->SaveValue();
            m_pMtrLength2->SaveValue();
            m_pLbType2->SaveValue();
            m_pMtrDistance->SaveValue();
            m_xNumFldNumber1->save_value();
            m_xMtrLength1->save_value();
            m_xLbType1->save_value();
            m_xNumFldNumber2->save_value();
            m_xMtrLength2->save_value();
            m_xLbType2->save_value();
            m_xMtrDistance->save_value();
        }
        else
        {
            std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
            std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
            std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
            xBox->run();
        }
@@ -594,25 +554,23 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickAddHdl_Impl, Button*, void)
    // determine button state
    if ( pDashList->Count() )
    {
        m_pBtnModify->Enable();
        m_pBtnDelete->Enable();
        m_pBtnSave->Enable();
        m_xBtnModify->set_sensitive(true);
        m_xBtnDelete->set_sensitive(true);
        m_xBtnSave->set_sensitive(true);
    }
}


IMPL_LINK_NOARG(SvxLineDefTabPage, ClickModifyHdl_Impl, Button*, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ClickModifyHdl_Impl, weld::Button&, void)
{
    sal_Int32 nPos = m_pLbLineStyles->GetSelectedEntryPos();

    if( nPos != LISTBOX_ENTRY_NOTFOUND )
    int nPos = m_xLbLineStyles->get_active();
    if (nPos != -1)
    {
        OUString aDesc(CuiResId(RID_SVXSTR_DESC_LINESTYLE));
        OUString aName( pDashList->GetDash( nPos )->GetName() );
        OUString aOldName = aName;

        SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
        ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetFrameWeld(), aName, aDesc));
        ScopedVclPtr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog(GetDialogFrameWeld(), aName, aDesc));

        long nCount = pDashList->Count();
        bool bLoop = true;
@@ -635,26 +593,26 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickModifyHdl_Impl, Button*, void)
                FillDash_Impl();

                pDashList->Replace(o3tl::make_unique<XDashEntry>(aDash, aName), nPos);
                m_pLbLineStyles->Modify(*pDashList->GetDash(nPos), nPos, pDashList->GetUiBitmap(nPos));
                m_xLbLineStyles->Modify(*pDashList->GetDash(nPos), nPos, pDashList->GetUiBitmap(nPos));

                m_pLbLineStyles->SelectEntryPos( nPos );
                m_xLbLineStyles->set_active(nPos);

                *pnDashListState |= ChangeType::MODIFIED;

                *pPageType = PageType::Hatch;

                // save values for changes recognition (-> method)
                m_pNumFldNumber1->SaveValue();
                m_pMtrLength1->SaveValue();
                m_pLbType1->SaveValue();
                m_pNumFldNumber2->SaveValue();
                m_pMtrLength2->SaveValue();
                m_pLbType2->SaveValue();
                m_pMtrDistance->SaveValue();
                m_xNumFldNumber1->save_value();
                m_xMtrLength1->save_value();
                m_xLbType1->save_value();
                m_xNumFldNumber2->save_value();
                m_xMtrLength2->save_value();
                m_xLbType2->save_value();
                m_xMtrDistance->save_value();
            }
            else
            {
                std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
                std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/queryduplicatedialog.ui"));
                std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("DuplicateNameDialog"));
                xBox->run();
            }
@@ -662,46 +620,44 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickModifyHdl_Impl, Button*, void)
    }
}


IMPL_LINK_NOARG(SvxLineDefTabPage, ClickDeleteHdl_Impl, Button*, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ClickDeleteHdl_Impl, weld::Button&, void)
{
    sal_Int32 nPos = m_pLbLineStyles->GetSelectedEntryPos();

    if ( nPos != LISTBOX_ENTRY_NOTFOUND )
    int nPos = m_xLbLineStyles->get_active();
    if (nPos != -1)
    {
        std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querydeletelinestyledialog.ui"));
        std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querydeletelinestyledialog.ui"));
        std::unique_ptr<weld::MessageDialog> xQueryBox(xBuilder->weld_message_dialog("AskDelLineStyleDialog"));
        if (xQueryBox->run() == RET_YES)
        {
            pDashList->Remove(nPos);
            m_pLbLineStyles->RemoveEntry( nPos );
            m_pLbLineStyles->SelectEntryPos( 0 );
            m_xLbLineStyles->remove(nPos);
            m_xLbLineStyles->set_active(0);

            SelectLinestyleHdl_Impl( nullptr );
            *pPageType = PageType::Area; // style should not be taken

            *pnDashListState |= ChangeType::MODIFIED;

            ChangePreviewHdl_Impl( *m_pMtrLength1 );
            ChangePreviewHdl_Impl( *m_xMtrLength1 );
        }
    }

    // determine button state
    if ( !pDashList->Count() )
    {
        m_pBtnModify->Disable();
        m_pBtnDelete->Disable();
        m_pBtnSave->Disable();
        m_xBtnModify->set_sensitive(false);
        m_xBtnDelete->set_sensitive(false);
        m_xBtnSave->set_sensitive(false);
    }
}

IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, Button*, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, weld::Button&, void)
{
    sal_uInt16 nReturn = RET_YES;

    if ( *pnDashListState & ChangeType::MODIFIED )
    {
        std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querysavelistdialog.ui"));
        std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querysavelistdialog.ui"));
        std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("AskSaveList"));

        nReturn = xBox->run();
@@ -713,7 +669,7 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, Button*, void)
    if ( nReturn != RET_CANCEL )
    {
        ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE,
                                      FileDialogFlags::NONE, GetFrameWeld());
                                      FileDialogFlags::NONE, GetDialogFrameWeld());
        OUString aStrFilterType( "*.sod" );
        aDlg.AddFilter( aStrFilterType, aStrFilterType );
        OUString aPalettePath(SvtPathOptions().GetPalettePath());
@@ -744,8 +700,8 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, Button*, void)
                pDashList = pDshLst;
                static_cast<SvxLineTabDialog*>( GetParentDialog() )->SetNewDashList( pDashList );

                m_pLbLineStyles->Clear();
                m_pLbLineStyles->Fill( pDashList );
                m_xLbLineStyles->clear();
                m_xLbLineStyles->Fill( pDashList );
                Reset( &rOutAttrs );

                pDashList->SetName( aURL.getName() );
@@ -755,7 +711,7 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, Button*, void)
            }
            else
            {
                std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynoloadedfiledialog.ui"));
                std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querynoloadedfiledialog.ui"));
                std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoLoadedFileDialog"));
                xBox->run();
            }
@@ -765,21 +721,21 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickLoadHdl_Impl, Button*, void)
    // determine button state
    if ( pDashList->Count() )
    {
        m_pBtnModify->Enable();
        m_pBtnDelete->Enable();
        m_pBtnSave->Enable();
        m_xBtnModify->set_sensitive(true);
        m_xBtnDelete->set_sensitive(true);
        m_xBtnSave->set_sensitive(true);
    }
    else
    {
        m_pBtnModify->Disable();
        m_pBtnDelete->Disable();
        m_pBtnSave->Disable();
        m_xBtnModify->set_sensitive(false);
        m_xBtnDelete->set_sensitive(false);
        m_xBtnSave->set_sensitive(false);
    }
}

IMPL_LINK_NOARG(SvxLineDefTabPage, ClickSaveHdl_Impl, Button*, void)
IMPL_LINK_NOARG(SvxLineDefTabPage, ClickSaveHdl_Impl, weld::Button&, void)
{
    ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetFrameWeld());
    ::sfx2::FileDialogHelper aDlg(css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, FileDialogFlags::NONE, GetDialogFrameWeld());
    OUString aStrFilterType( "*.sod" );
    aDlg.AddFilter( aStrFilterType, aStrFilterType );

@@ -822,7 +778,7 @@ IMPL_LINK_NOARG(SvxLineDefTabPage, ClickSaveHdl_Impl, Button*, void)
        }
        else
        {
            std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), "cui/ui/querynosavefiledialog.ui"));
            std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetDialogFrameWeld(), "cui/ui/querynosavefiledialog.ui"));
            std::unique_ptr<weld::MessageDialog> xBox(xBuilder->weld_message_dialog("NoSaveFileDialog"));
            xBox->run();
        }
@@ -833,64 +789,62 @@ void SvxLineDefTabPage::FillDash_Impl()
{
    css::drawing::DashStyle eXDS;

    if( m_pCbxSynchronize->IsChecked() )
    if (m_xCbxSynchronize->get_active())
        eXDS = css::drawing::DashStyle_RECTRELATIVE;
    else
        eXDS = css::drawing::DashStyle_RECT;

    aDash.SetDashStyle( eXDS );
    aDash.SetDots( static_cast<sal_uInt8>(m_pNumFldNumber1->GetValue()) );
    aDash.SetDotLen( m_pLbType1->GetSelectedEntryPos() == 0 ? 0 : GetCoreValue( *m_pMtrLength1, ePoolUnit ) );
    aDash.SetDashes( static_cast<sal_uInt8>(m_pNumFldNumber2->GetValue()) );
    aDash.SetDashLen( m_pLbType2->GetSelectedEntryPos() == 0 ? 0 : GetCoreValue( *m_pMtrLength2, ePoolUnit ) );
    aDash.SetDistance( GetCoreValue( *m_pMtrDistance, ePoolUnit ) );
    aDash.SetDots( static_cast<sal_uInt8>(m_xNumFldNumber1->get_value()) );
    aDash.SetDotLen( m_xLbType1->get_active() == 0 ? 0 : GetCoreValue( *m_xMtrLength1, ePoolUnit ) );
    aDash.SetDashes( static_cast<sal_uInt8>(m_xNumFldNumber2->get_value()) );
    aDash.SetDashLen( m_xLbType2->get_active() == 0 ? 0 : GetCoreValue( *m_xMtrLength2, ePoolUnit ) );
    aDash.SetDistance( GetCoreValue( *m_xMtrDistance, ePoolUnit ) );

    rXLSet.Put( XLineDashItem( OUString(), aDash ) );

    // #i34740#
    m_pCtlPreview->SetLineAttributes(aXLineAttr.GetItemSet());
    m_aCtlPreview.SetLineAttributes(aXLineAttr.GetItemSet());
}


void SvxLineDefTabPage::FillDialog_Impl()
{
    css::drawing::DashStyle eXDS = aDash.GetDashStyle(); // css::drawing::DashStyle_RECT, css::drawing::DashStyle_ROUND
    if( eXDS == css::drawing::DashStyle_RECTRELATIVE )
        m_pCbxSynchronize->Check();
        m_xCbxSynchronize->set_active(true);
    else
        m_pCbxSynchronize->Check( false );
        m_xCbxSynchronize->set_active(false);

    m_pNumFldNumber1->SetValue( aDash.GetDots() );
    SetMetricValue( *m_pMtrLength1, aDash.GetDotLen(), ePoolUnit );
    m_pLbType1->SelectEntryPos( aDash.GetDotLen() == 0 ? 0 : 1 );
    m_pNumFldNumber2->SetValue( aDash.GetDashes() );
    SetMetricValue( *m_pMtrLength2, aDash.GetDashLen(), ePoolUnit );
    m_pLbType2->SelectEntryPos( aDash.GetDashLen() == 0 ? 0 : 1 );
    SetMetricValue( *m_pMtrDistance, aDash.GetDistance(), ePoolUnit );
    m_xNumFldNumber1->set_value(aDash.GetDots());
    SetMetricValue( *m_xMtrLength1, aDash.GetDotLen(), ePoolUnit );
    m_xLbType1->set_active(aDash.GetDotLen() == 0 ? 0 : 1);
    m_xNumFldNumber2->set_value(aDash.GetDashes());
    SetMetricValue( *m_xMtrLength2, aDash.GetDashLen(), ePoolUnit );
    m_xLbType2->set_active(aDash.GetDashLen() == 0 ? 0 : 1);
    SetMetricValue( *m_xMtrDistance, aDash.GetDistance(), ePoolUnit );

    ChangeMetricHdl_Impl( nullptr );
    ChangeMetricHdl_Impl(nullptr);

    // save values for changes recognition (-> method)
    m_pNumFldNumber1->SaveValue();
    m_pMtrLength1->SaveValue();
    m_pLbType1->SaveValue();
    m_pNumFldNumber2->SaveValue();
    m_pMtrLength2->SaveValue();
    m_pLbType2->SaveValue();
    m_pMtrDistance->SaveValue();
    m_xNumFldNumber1->save_value();
    m_xMtrLength1->save_value();
    m_xLbType1->save_value();
    m_xNumFldNumber2->save_value();
    m_xMtrLength2->save_value();
    m_xLbType2->save_value();
    m_xMtrDistance->save_value();
}


void SvxLineDefTabPage::DataChanged( const DataChangedEvent& rDCEvt )
{
    SfxTabPage::DataChanged( rDCEvt );

    if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
    {
        sal_Int32 nOldSelect = m_pLbLineStyles->GetSelectedEntryPos();
        m_pLbLineStyles->Clear();
        m_pLbLineStyles->Fill( pDashList );
        m_pLbLineStyles->SelectEntryPos( nOldSelect );
        auto nOldSelect = m_xLbLineStyles->get_active();
        m_xLbLineStyles->clear();
        m_xLbLineStyles->Fill(pDashList);
        m_xLbLineStyles->set_active(nOldSelect);
    }
}

diff --git a/cui/uiconfig/ui/lineendstabpage.ui b/cui/uiconfig/ui/lineendstabpage.ui
index 81145b0..8423d30d 100644
--- a/cui/uiconfig/ui/lineendstabpage.ui
+++ b/cui/uiconfig/ui/lineendstabpage.ui
@@ -91,7 +91,7 @@
                    <child>
                      <object class="GtkEntry" id="EDT_NAME">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="halign">start</property>
                        <property name="hexpand">True</property>
                        <property name="width_chars">30</property>
@@ -148,7 +148,7 @@
                      <object class="GtkButton" id="BTN_ADD">
                        <property name="label">gtk-add</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
@@ -163,7 +163,7 @@
                      <object class="GtkButton" id="BTN_MODIFY">
                        <property name="label" translatable="yes" context="lineendstabpage|BTN_MODIFY">_Modify</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_underline">True</property>
                      </object>
@@ -177,7 +177,7 @@
                      <object class="GtkButton" id="BTN_DELETE">
                        <property name="label">gtk-delete</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_stock">True</property>
                      </object>
diff --git a/cui/uiconfig/ui/linestyletabpage.ui b/cui/uiconfig/ui/linestyletabpage.ui
index 6ecc1ad..39537e1 100644
--- a/cui/uiconfig/ui/linestyletabpage.ui
+++ b/cui/uiconfig/ui/linestyletabpage.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
  <!-- interface-requires gtk+ 3.0 -->
  <!-- interface-requires LibreOffice 1.0 -->
  <requires lib="gtk+" version="3.0"/>
  <object class="GtkAdjustment" id="adjustmentDIST">
    <property name="upper">5</property>
    <property name="step_increment">0.10000000000000001</property>
@@ -15,30 +15,22 @@
  <object class="GtkImage" id="image1">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="pixbuf">res/sc05501.png</property>
    <property name="icon_name">res/sc05501.png</property>
  </object>
  <object class="GtkImage" id="image2">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="pixbuf">res/sc05502.png</property>
    <property name="icon_name">res/sc05502.png</property>
  </object>
  <object class="GtkListStore" id="liststoreTYPE">
  <object class="GtkListStore" id="liststore4">
    <columns>
      <!-- column-name gchararray1 -->
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name guint1 -->
      <column type="guint"/>
      <!-- column-name id -->
      <column type="gchararray"/>
      <!-- column-name image -->
      <column type="GdkPixbuf"/>
    </columns>
    <data>
      <row>
        <col id="0" translatable="yes" context="linestyletabpage|liststoreTYPE">Dots</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes" context="linestyletabpage|liststoreTYPE">Dash</col>
        <col id="1">0</col>
      </row>
    </data>
  </object>
  <object class="GtkFrame" id="LineStylePage">
    <property name="visible">True</property>
@@ -88,9 +80,10 @@
                          <object class="GtkLabel" id="FT_LINESTYLE">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes" context="linestyletabpage|FT_LINESTYLE">Line _style:</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">LB_LINESTYLES</property>
                            <property name="xalign">0</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -99,9 +92,12 @@
                          </packing>
                        </child>
                        <child>
                          <object class="svxlo-LineLB" id="LB_LINESTYLES">
                          <object class="GtkComboBox" id="LB_LINESTYLES">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="halign">start</property>
                            <property name="model">liststore4</property>
                            <property name="id_column">1</property>
                          </object>
                          <packing>
                            <property name="expand">False</property>
@@ -126,71 +122,63 @@
                          <object class="GtkLabel" id="FT_TYPE">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes" context="linestyletabpage|FT_TYPE">_Type:</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">LB_TYPE_1</property>
                            <property name="xalign">0</property>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkLabel" id="FT_NUMBER">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes" context="linestyletabpage|FT_NUMBER">_Number:</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">NUM_FLD_1</property>
                            <property name="xalign">0</property>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">1</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkLabel" id="FT_LENGTH">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes" context="linestyletabpage|FT_LENGTH">_Length:</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">MTR_FLD_LENGTH_1:0.00cm</property>
                            <property name="mnemonic_widget">MTR_FLD_LENGTH_1</property>
                            <property name="xalign">0</property>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">2</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkLabel" id="FT_DISTANCE">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="xalign">0</property>
                            <property name="label" translatable="yes" context="linestyletabpage|FT_DISTANCE">_Spacing:</property>
                            <property name="use_underline">True</property>
                            <property name="mnemonic_widget">MTR_FLD_DISTANCE:0.00cm</property>
                            <property name="mnemonic_widget">MTR_FLD_DISTANCE</property>
                            <property name="xalign">0</property>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">3</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkCheckButton" id="CBX_SYNCHRONIZE">
                            <property name="label" translatable="yes" context="linestyletabpage|CBX_SYNCHRONIZE">_Fit to line width</property>
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">False</property>
                            <property name="use_underline">True</property>
                            <property name="xalign">0</property>
@@ -199,102 +187,97 @@
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">4</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkComboBox" id="LB_TYPE_1">
                          <object class="GtkComboBoxText" id="LB_TYPE_1">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="model">liststoreTYPE</property>
                            <items>
                              <item translatable="yes" context="linestyletabpage|liststoreTYPE">Dots</item>
                              <item translatable="yes" context="linestyletabpage|liststoreTYPE">Dash</item>
                            </items>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkComboBox" id="LB_TYPE_2">
                          <object class="GtkComboBoxText" id="LB_TYPE_2">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="model">liststoreTYPE</property>
                            <items>
                              <item translatable="yes" context="linestyletabpage|liststoreTYPE">Dots</item>
                              <item translatable="yes" context="linestyletabpage|liststoreTYPE">Dash</item>
                            </items>
                          </object>
                          <packing>
                            <property name="left_attach">2</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkSpinButton" id="NUM_FLD_1">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="adjustment">adjustmentNUM</property>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">1</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkSpinButton" id="NUM_FLD_2">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="adjustment">adjustmentNUM</property>
                          </object>
                          <packing>
                            <property name="left_attach">2</property>
                            <property name="top_attach">1</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkSpinButton" id="MTR_FLD_LENGTH_1:0.00cm">
                          <object class="GtkSpinButton" id="MTR_FLD_LENGTH_1">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="adjustment">adjustmentDIST</property>
                            <property name="digits">2</property>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">2</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkSpinButton" id="MTR_FLD_LENGTH_2:0.00cm">
                          <object class="GtkSpinButton" id="MTR_FLD_LENGTH_2">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="adjustment">adjustmentDIST</property>
                            <property name="digits">2</property>
                          </object>
                          <packing>
                            <property name="left_attach">2</property>
                            <property name="top_attach">2</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
                          <object class="GtkSpinButton" id="MTR_FLD_DISTANCE:0.00cm">
                          <object class="GtkSpinButton" id="MTR_FLD_DISTANCE">
                            <property name="visible">True</property>
                            <property name="can_focus">False</property>
                            <property name="can_focus">True</property>
                            <property name="activates_default">True</property>
                            <property name="adjustment">adjustmentDIST</property>
                            <property name="digits">2</property>
                          </object>
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">3</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
@@ -333,7 +316,7 @@
                      <object class="GtkButton" id="BTN_ADD">
                        <property name="label">gtk-add</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
@@ -348,7 +331,7 @@
                      <object class="GtkButton" id="BTN_MODIFY">
                        <property name="label" translatable="yes" context="linestyletabpage|BTN_MODIFY">_Modify</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_underline">True</property>
                      </object>
@@ -362,7 +345,7 @@
                      <object class="GtkButton" id="BTN_DELETE">
                        <property name="label">gtk-delete</property>
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="can_focus">True</property>
                        <property name="receives_default">True</property>
                        <property name="use_stock">True</property>
                      </object>
@@ -392,8 +375,6 @@
                          <packing>
                            <property name="left_attach">0</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                        <child>
@@ -410,8 +391,6 @@
                          <packing>
                            <property name="left_attach">1</property>
                            <property name="top_attach">0</property>
                            <property name="width">1</property>
                            <property name="height">1</property>
                          </packing>
                        </child>
                      </object>
@@ -437,10 +416,24 @@
              </packing>
            </child>
            <child>
              <object class="svxlo-SvxXLinePreview" id="CTL_PREVIEW">
              <object class="GtkScrolledWindow">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="valign">end</property>
                <property name="hscrollbar_policy">never</property>
                <property name="vscrollbar_policy">never</property>
                <property name="shadow_type">in</property>
                <child>
                  <object class="GtkViewport">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <child>
                      <object class="GtkDrawingArea" id="CTL_PREVIEW">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                      </object>
                    </child>
                  </object>
                </child>
              </object>
              <packing>
                <property name="expand">False</property>
@@ -456,8 +449,8 @@
      <object class="GtkLabel" id="label1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="xalign">0</property>
        <property name="label" translatable="yes" context="linestyletabpage|label1">Properties</property>
        <property name="xalign">0</property>
        <attributes>
          <attribute name="weight" value="bold"/>
        </attributes>
diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx
index 2061a21..db016d6 100644
--- a/include/svx/dlgctrl.hxx
+++ b/include/svx/dlgctrl.hxx
@@ -268,6 +268,34 @@ public:
    void Modify(const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap );
};

class SAL_WARN_UNUSED SVX_DLLPUBLIC SvxLineLB
{
private:
    std::unique_ptr<weld::ComboBox> m_xControl;

    /// defines if standard fields (none, solid) are added, default is true
    bool        mbAddStandardFields : 1;

public:
    SvxLineLB(std::unique_ptr<weld::ComboBox> pControl);

    void Fill(const XDashListRef &pList);
    bool getAddStandardFields() const { return mbAddStandardFields; }
    void setAddStandardFields(bool bNew);

    void Append(const XDashEntry& rEntry, const BitmapEx& rBitmap );
    void Modify(const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap );

    void clear() { m_xControl->clear(); }
    void remove(int nPos) { m_xControl->remove(nPos); }
    int get_active() const { return m_xControl->get_active(); }
    void set_active(int nPos) { m_xControl->set_active(nPos); }
    void set_active_text(const OUString& rStr) { m_xControl->set_active_text(rStr); }
    OUString get_active_text() const { return m_xControl->get_active_text(); }
    void connect_changed(const Link<weld::ComboBox&, void>& rLink) { m_xControl->connect_changed(rLink); }
    int get_count() const { return m_xControl->get_count(); }
};

/************************************************************************/

class SAL_WARN_UNUSED SVX_DLLPUBLIC LineEndLB : public ListBox
@@ -299,6 +327,7 @@ public:
    void remove(int nPos) { m_xControl->remove(nPos); }
    int get_active() const { return m_xControl->get_active(); }
    void set_active(int nPos) { m_xControl->set_active(nPos); }
    void set_active_text(const OUString& rStr) { m_xControl->set_active_text(rStr); }
    OUString get_active_text() const { return m_xControl->get_active_text(); }
    void connect_changed(const Link<weld::ComboBox&, void>& rLink) { m_xControl->connect_changed(rLink); }
    int get_count() const { return m_xControl->get_count(); }
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index ddfd104..822aec4 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -764,6 +764,11 @@ public:
        return convert_value_to(m_xSpinButton->get_value(), eDestUnit);
    }

    // typically you only need to call this if set_text (e.g. with "") was
    // previously called to display some arbitrary text instead of the
    // formatted value and now you want to show it as formattted again
    void reformat() { set_value(get_value(m_eSrcUnit), m_eSrcUnit); }

    void set_range(int min, int max, FieldUnit eValueUnit)
    {
        min = convert_value_from(min, eValueUnit);
diff --git a/solenv/sanitizers/ui/cui.suppr b/solenv/sanitizers/ui/cui.suppr
index f084489..b0c922a 100644
--- a/solenv/sanitizers/ui/cui.suppr
+++ b/solenv/sanitizers/ui/cui.suppr
@@ -265,11 +265,9 @@ cui/uiconfig/ui/linetabpage.ui://GtkSpinButton[@id='MF_SYMBOL_HEIGHT:0cm'] no-la
cui/uiconfig/ui/lineendstabpage.ui://GtkLabel[@id='FT_LINE_END_STYLE'] orphan-label
cui/uiconfig/ui/lineendstabpage.ui://svxlo-LineEndLB[@id='LB_LINEENDS'] no-labelled-by
cui/uiconfig/ui/lineendstabpage.ui://GtkLabel[@id='FI_TIP'] orphan-label
cui/uiconfig/ui/linestyletabpage.ui://GtkLabel[@id='FT_LINESTYLE'] orphan-label
cui/uiconfig/ui/linestyletabpage.ui://svxlo-LineLB[@id='LB_LINESTYLES'] no-labelled-by
cui/uiconfig/ui/linestyletabpage.ui://GtkComboBox[@id='LB_TYPE_2'] no-labelled-by
cui/uiconfig/ui/linestyletabpage.ui://GtkSpinButton[@id='NUM_FLD_2'] no-labelled-by
cui/uiconfig/ui/linestyletabpage.ui://GtkSpinButton[@id='MTR_FLD_LENGTH_2:0.00cm'] no-labelled-by
cui/uiconfig/ui/linestyletabpage.ui://GtkSpinButton[@id='MTR_FLD_LENGTH_2'] no-labelled-by
cui/uiconfig/ui/macroassignpage.ui://cuilo-MacroEventListBox[@id='assignments:border'] no-labelled-by
cui/uiconfig/ui/macroassignpage.ui://GtkLabel[@id='eventft'] orphan-label
cui/uiconfig/ui/macroassignpage.ui://GtkLabel[@id='assignft'] orphan-label
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx
index f75661d..83292b9 100644
--- a/svx/source/dialog/dlgctrl.cxx
+++ b/svx/source/dialog/dlgctrl.cxx
@@ -1076,6 +1076,105 @@ void LineLB::Modify( const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& r
    }
}

SvxLineLB::SvxLineLB(std::unique_ptr<weld::ComboBox> pControl)
    : m_xControl(std::move(pControl))
    , mbAddStandardFields(true)
{
}

void SvxLineLB::setAddStandardFields(bool bNew)
{
    if(getAddStandardFields() != bNew)
    {
        mbAddStandardFields = bNew;
    }
}

// Fills the listbox (provisional) with strings

void SvxLineLB::Fill( const XDashListRef &pList )
{
    m_xControl->clear();

    if( !pList.is() )
        return;

    ScopedVclPtrInstance< VirtualDevice > pVD;

    if(getAddStandardFields())
    {
        // entry for 'none'
        m_xControl->append_text(pList->GetStringForUiNoLine());

        // entry for solid line
        const BitmapEx aBitmap = pList->GetBitmapForUISolidLine();
        const Size aBmpSize(aBitmap.GetSizePixel());
        pVD->SetOutputSizePixel(aBmpSize, false);
        pVD->DrawBitmapEx(Point(), aBitmap);
        m_xControl->append("", pList->GetStringForUiSolidLine(), *pVD);
    }

    // entries for dashed lines

    long nCount = pList->Count();
    m_xControl->freeze();

    for( long i = 0; i < nCount; i++ )
    {
        const XDashEntry* pEntry = pList->GetDash(i);
        const BitmapEx aBitmap = pList->GetUiBitmap( i );
        if( !aBitmap.IsEmpty() )
        {
            const Size aBmpSize(aBitmap.GetSizePixel());
            pVD->SetOutputSizePixel(aBmpSize, false);
            pVD->DrawBitmapEx(Point(), aBitmap);
            m_xControl->append("", pEntry->GetName(), *pVD);
        }
        else
        {
            m_xControl->append_text(pEntry->GetName());
        }
    }

    m_xControl->thaw();
}

void SvxLineLB::Append( const XDashEntry& rEntry, const BitmapEx& rBitmap )
{
    if (!rBitmap.IsEmpty())
    {
        ScopedVclPtrInstance< VirtualDevice > pVD;

        const Size aBmpSize(rBitmap.GetSizePixel());
        pVD->SetOutputSizePixel(aBmpSize, false);
        pVD->DrawBitmapEx(Point(), rBitmap);
        m_xControl->append("", rEntry.GetName(), *pVD);
    }
    else
    {
        m_xControl->append_text(rEntry.GetName());
    }
}

void SvxLineLB::Modify(const XDashEntry& rEntry, sal_Int32 nPos, const BitmapEx& rBitmap)
{
    m_xControl->remove(nPos);

    if (!rBitmap.IsEmpty())
    {
        ScopedVclPtrInstance< VirtualDevice > pVD;

        const Size aBmpSize(rBitmap.GetSizePixel());
        pVD->SetOutputSizePixel(aBmpSize, false);
        pVD->DrawBitmapEx(Point(), rBitmap);
        m_xControl->insert(nPos, "", rEntry.GetName(), nullptr, pVD);
    }
    else
    {
        m_xControl->insert_text(nPos, rEntry.GetName());
    }
}

// Fills the listbox (provisional) with strings

LineEndLB::LineEndLB( vcl::Window* pParent, WinBits aWB )