fdo#61429: Stylist: try a little harder to restore "hierarchical"

Change-Id: I30972224c5a9aa12c4ef4c2b5ca80e7aece0baad
diff --git a/sfx2/source/dialog/templdlg.cxx b/sfx2/source/dialog/templdlg.cxx
index c1d3b17..73c9f87 100644
--- a/sfx2/source/dialog/templdlg.cxx
+++ b/sfx2/source/dialog/templdlg.cxx
@@ -1038,6 +1038,7 @@ void SfxCommonTemplateDialog_Impl::Initialize()
    ReadResource();
    pBindings->Invalidate( SID_STYLE_FAMILY );
    pBindings->Update( SID_STYLE_FAMILY );

    Update_Impl();

    aFilterLb.SetSelectHdl( LINK( this, SfxCommonTemplateDialog_Impl, FilterSelectHdl ) );
@@ -1045,8 +1046,10 @@ void SfxCommonTemplateDialog_Impl::Initialize()
    aFmtLb.SetSelectHdl( LINK( this, SfxCommonTemplateDialog_Impl, FmtSelectHdl ) );
    aFmtLb.SetSelectionMode(MULTIPLE_SELECTION);


    aFilterLb.Show();
    aFmtLb.Show();
    if (!bHierarchical)
        aFmtLb.Show();
}

//-------------------------------------------------------------------------
@@ -1367,6 +1370,7 @@ void SfxCommonTemplateDialog_Impl::UpdateStyles_Impl(sal_uInt16 nFlags)
            if (pTreeBox || m_bWantHierarchical)
            {
                aFilterLb.SelectEntry(SfxResId(STR_STYLE_FILTER_HIERARCHICAL).toString());
                EnableHierarchical(true);
            }

            // show maximum 14 entries
@@ -1375,21 +1379,12 @@ void SfxCommonTemplateDialog_Impl::UpdateStyles_Impl(sal_uInt16 nFlags)
        }
        else
        {
            if (m_bWantHierarchical)
            {
                nActFilter = 0;
                aFilterLb.SelectEntry(SfxResId(
                            STR_STYLE_FILTER_HIERARCHICAL).toString());
            }
            if (nActFilter < aFilterLb.GetEntryCount() - 1)
                aFilterLb.SelectEntryPos(nActFilter + 1);
            else
            {
                if (nActFilter < aFilterLb.GetEntryCount() - 1)
                    aFilterLb.SelectEntryPos(nActFilter + 1);
                else
                {
                    nActFilter = 0;
                    aFilterLb.SelectEntryPos(1);
                }
                nActFilter = 0;
                aFilterLb.SelectEntryPos(1);
            }
        }

@@ -1827,11 +1822,11 @@ sal_Bool SfxCommonTemplateDialog_Impl::Execute_Impl(
//-------------------------------------------------------------------------

// Handler der Listbox der Filter
IMPL_LINK( SfxCommonTemplateDialog_Impl, FilterSelectHdl, ListBox *, pBox )
void SfxCommonTemplateDialog_Impl::EnableHierarchical(bool const bEnable)
{
    if ( SfxResId(STR_STYLE_FILTER_HIERARCHICAL).toString().equals(pBox->GetSelectEntry()) )
    if (bEnable)
    {
        if ( !bHierarchical )
        if (!bHierarchical)
        {
            // Turn on treeView
            bHierarchical=sal_True;
@@ -1862,7 +1857,6 @@ IMPL_LINK( SfxCommonTemplateDialog_Impl, FilterSelectHdl, ListBox *, pBox )
            pTreeBox->Show();
        }
    }

    else
    {
        DELETEZ(pTreeBox);
@@ -1870,9 +1864,21 @@ IMPL_LINK( SfxCommonTemplateDialog_Impl, FilterSelectHdl, ListBox *, pBox )
        // If bHierarchical, then the family can have changed
        // minus one since hierarchical is inserted at the start
        m_bWantHierarchical = sal_False; // before FilterSelect
        FilterSelect(pBox->GetSelectEntryPos() - 1, bHierarchical );
        FilterSelect(aFilterLb.GetSelectEntryPos() - 1, bHierarchical );
        bHierarchical=sal_False;
    }
}

IMPL_LINK( SfxCommonTemplateDialog_Impl, FilterSelectHdl, ListBox *, pBox )
{
    if (SfxResId(STR_STYLE_FILTER_HIERARCHICAL).toString() == pBox->GetSelectEntry())
    {
        EnableHierarchical(true);
    }
    else
    {
        EnableHierarchical(false);
    }

    return 0;
}
diff --git a/sfx2/source/inc/templdgi.hxx b/sfx2/source/inc/templdgi.hxx
index 88405fa..f685a71 100644
--- a/sfx2/source/inc/templdgi.hxx
+++ b/sfx2/source/inc/templdgi.hxx
@@ -201,6 +201,7 @@ protected:
    void                        ResetFocus();
    void                        EnableDelete();
    void                        Initialize();
    void                        EnableHierarchical(bool);

    void                FilterSelect( sal_uInt16 nFilterIdx, sal_Bool bForce = sal_False );
    void                SetFamilyState( sal_uInt16 nSlotId, const SfxTemplateItem* );