[Libreoffice-commits] core.git: Branch 'feature/gsoc17-revamp-customize-dialog' - cui/Library_cui.mk cui/source

Muhammet Kara muhammet.kara at pardus.org.tr
Fri Jun 30 11:28:38 UTC 2017


 cui/Library_cui.mk                            |    1 
 cui/source/customize/SvxToolbarConfigPage.cxx | 1172 ++++++++++++++++++++
 cui/source/customize/cfg.cxx                  | 1516 ++------------------------
 cui/source/inc/SvxMenuConfigPage.hxx          |    4 
 cui/source/inc/SvxToolbarConfigPage.hxx       |  128 ++
 cui/source/inc/cfg.hxx                        |  239 ++--
 6 files changed, 1609 insertions(+), 1451 deletions(-)

New commits:
commit 32c6b7cc1aabd9c05295079e74ca1cc7ec01dbd8
Author: Muhammet Kara <muhammet.kara at pardus.org.tr>
Date:   Thu Jun 29 14:50:36 2017 +0300

    Separate SvxToolbarConfigPage from cfg.cxx
    
    Change-Id: I4aa504b92e9507635152c623a07d0538079860de
    Reviewed-on: https://gerrit.libreoffice.org/39389
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
index 55b520bedf18..3bf088fa7737 100644
--- a/cui/Library_cui.mk
+++ b/cui/Library_cui.mk
@@ -89,6 +89,7 @@ $(eval $(call gb_Library_add_exception_objects,cui,\
     cui/source/customize/eventdlg \
     cui/source/customize/macropg \
     cui/source/customize/SvxMenuConfigPage \
+    cui/source/customize/SvxToolbarConfigPage \
     cui/source/dialogs/about \
     cui/source/dialogs/colorpicker \
     cui/source/dialogs/cuicharmap \
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
new file mode 100644
index 000000000000..74d85256d947
--- /dev/null
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -0,0 +1,1172 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "sal/config.h"
+
+#include <cassert>
+#include <stdlib.h>
+#include <time.h>
+#include <typeinfo>
+
+#include <vcl/commandinfoprovider.hxx>
+#include <vcl/help.hxx>
+#include <vcl/layout.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/decoview.hxx>
+#include <vcl/toolbox.hxx>
+#include <vcl/scrbar.hxx>
+#include <vcl/virdev.hxx>
+#include <vcl/settings.hxx>
+
+#include <sfx2/app.hxx>
+#include <sfx2/sfxdlg.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <sfx2/viewsh.hxx>
+#include <sfx2/msg.hxx>
+#include <sfx2/msgpool.hxx>
+#include <sfx2/minfitem.hxx>
+#include <sfx2/objsh.hxx>
+#include <sfx2/request.hxx>
+#include <sfx2/filedlghelper.hxx>
+#include <svl/stritem.hxx>
+#include <svtools/miscopt.hxx>
+#include <svtools/svlbitm.hxx>
+#include "svtools/treelistentry.hxx"
+#include "svtools/viewdataentry.hxx"
+#include <tools/diagnose_ex.h>
+#include <toolkit/helper/vclunohelper.hxx>
+
+#include <algorithm>
+#include <cuires.hrc>
+#include "helpid.hrc"
+
+#include "acccfg.hxx"
+#include "cfg.hxx"
+#include "SvxToolbarConfigPage.hxx"
+#include "eventdlg.hxx"
+#include <dialmgr.hxx>
+
+#include <comphelper/documentinfo.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/random.hxx>
+#include <unotools/configmgr.hxx>
+#include <o3tl/make_unique.hxx>
+#include <com/sun/star/embed/ElementModes.hpp>
+#include <com/sun/star/embed/FileSystemStorageFactory.hpp>
+#include <com/sun/star/frame/UnknownModuleException.hpp>
+#include <com/sun/star/frame/XFrames.hpp>
+#include <com/sun/star/frame/XLayoutManager.hpp>
+#include <com/sun/star/frame/FrameSearchFlag.hpp>
+#include <com/sun/star/frame/ModuleManager.hpp>
+#include <com/sun/star/frame/XController.hpp>
+#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/frame/theUICommandDescription.hpp>
+#include <com/sun/star/graphic/GraphicProvider.hpp>
+#include <com/sun/star/io/IOException.hpp>
+#include <com/sun/star/lang/IllegalAccessException.hpp>
+#include <com/sun/star/ui/ItemType.hpp>
+#include <com/sun/star/ui/ItemStyle.hpp>
+#include <com/sun/star/ui/ImageManager.hpp>
+#include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
+#include <com/sun/star/ui/XUIConfiguration.hpp>
+#include <com/sun/star/ui/XUIConfigurationListener.hpp>
+#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
+#include <com/sun/star/ui/XUIConfigurationPersistence.hpp>
+#include <com/sun/star/ui/XUIConfigurationStorage.hpp>
+#include <com/sun/star/ui/XModuleUIConfigurationManager.hpp>
+#include <com/sun/star/ui/XUIElement.hpp>
+#include <com/sun/star/ui/UIElementType.hpp>
+#include <com/sun/star/ui/ImageType.hpp>
+#include <com/sun/star/ui/theWindowStateConfiguration.hpp>
+#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
+#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
+#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
+#include <com/sun/star/util/thePathSettings.hpp>
+
+#include "dlgname.hxx"
+
+SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSet& rSet)
+    : SvxConfigPage(pParent, rSet)
+    , m_pMenu(get_menu("modifymenu"))
+    , m_pEntry(get_menu("contentmenu"))
+{
+    SetHelpId( HID_SVX_CONFIG_TOOLBAR );
+
+    m_pContentsListBox = VclPtr<SvxToolbarEntriesListBox>::Create(m_pEntries, this);
+    m_pContentsListBox->set_grid_left_attach(0);
+    m_pContentsListBox->set_grid_top_attach(0);
+    m_pContentsListBox->set_hexpand(true);
+    m_pContentsListBox->set_vexpand(true);
+    m_pContentsListBox->Show();
+
+    m_pTopLevelListBox->SetHelpId ( HID_SVX_TOPLEVELLISTBOX );
+    m_pIconsOnlyRB->SetHelpId ( HID_SVX_ICONSONLY );
+    m_pTextOnlyRB->SetHelpId ( HID_SVX_TEXTONLY );
+    m_pIconsAndTextRB->SetHelpId ( HID_SVX_ICONSANDTEXT );
+    m_pContentsListBox->SetHelpId( HID_SVX_CONFIG_TOOLBAR_CONTENTS );
+    m_pNewTopLevelButton->SetHelpId( HID_SVX_NEW_TOOLBAR );
+    m_pModifyTopLevelButton->SetHelpId( HID_SVX_MODIFY_TOOLBAR );
+    m_pAddCommandsButton->SetHelpId( HID_SVX_NEW_TOOLBAR_ITEM );
+    m_pAddSeparatorButton->SetHelpId ( HID_SVX_ADD_SEPARATOR );
+    m_pModifyCommandButton->SetHelpId( HID_SVX_MODIFY_TOOLBAR_ITEM );
+    m_pDeleteCommandButton->SetHelpId ( HID_SVX_REMOVEBUTTON );
+    m_pResetTopLevelButton->SetHelpId ( HID_SVX_RESETBUTTON );
+    m_pSaveInListBox->SetHelpId( HID_SVX_SAVE_IN );
+    m_pMoveUpButton->SetHelpId( HID_SVX_UP_TOOLBAR_ITEM );
+    m_pMoveDownButton->SetHelpId( HID_SVX_DOWN_TOOLBAR_ITEM );
+    m_pDescriptionField->SetHelpId ( HID_SVX_DESCFIELD );
+
+    m_pTopLevel->set_label(CuiResId(RID_SVXSTR_PRODUCTNAME_TOOLBARS));
+
+    m_pTopLevelLabel->SetText( CuiResId( RID_SVXSTR_TOOLBAR ) );
+    m_pModifyTopLevelButton->SetText( CuiResId( RID_SVXSTR_TOOLBAR ) );
+    m_pContents->set_label(CuiResId(RID_SVXSTR_TOOLBAR_CONTENT));
+    m_pContentsLabel->SetText( CuiResId( RID_SVXSTR_COMMANDS ) );
+
+    // The reset button will be used in the toolbar config tab
+    m_pResetTopLevelButton->Show();
+    // These radio buttons will be used in the toolbar config tab
+    m_pIconsOnlyRB->Enable();
+    m_pTextOnlyRB->Enable();
+    m_pIconsAndTextRB->Enable();
+    m_pIconsOnlyRB->Show();
+    m_pTextOnlyRB->Show();
+    m_pIconsAndTextRB->Show();
+    m_pToolbarStyleLabel->Show();
+
+    m_pTopLevelListBox->SetSelectHdl(
+        LINK( this, SvxToolbarConfigPage, SelectToolbar ) );
+    m_pContentsListBox->SetSelectHdl(
+        LINK( this, SvxToolbarConfigPage, SelectToolbarEntry ) );
+
+    m_pIconsOnlyRB->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
+    m_pTextOnlyRB->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
+    m_pIconsAndTextRB->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
+
+    m_pNewTopLevelButton->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, NewToolbarHdl ) );
+
+    m_pAddCommandsButton->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, AddCommandsHdl ) );
+
+    m_pAddSeparatorButton->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, AddSeparatorHdl ) );
+
+    m_pDeleteCommandButton->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, DeleteCommandHdl ) );
+
+    m_pResetTopLevelButton->SetClickHdl  (
+        LINK( this, SvxToolbarConfigPage, ResetTopLevelHdl ) );
+
+    m_pMoveUpButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
+    m_pMoveDownButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
+    // Always enable Up and Down buttons
+    // added for issue i53677 by shizhoubo
+    m_pMoveDownButton->Enable();
+    m_pMoveUpButton->Enable();
+
+    m_pMenu->SetMenuFlags(
+        m_pMenu->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
+
+    m_pModifyTopLevelButton->SetPopupMenu( m_pMenu );
+    m_pModifyTopLevelButton->SetSelectHdl(
+        LINK( this, SvxToolbarConfigPage, ToolbarSelectHdl ) );
+
+    m_pEntry->SetMenuFlags(
+        m_pEntry->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
+
+    m_pModifyCommandButton->SetPopupMenu(m_pEntry);
+    m_pModifyCommandButton->SetSelectHdl(
+        LINK( this, SvxToolbarConfigPage, EntrySelectHdl ) );
+
+    // default toolbar to select is standardbar unless a different one
+    // has been passed in
+    m_aURLToSelect = ITEM_TOOLBAR_URL;
+    m_aURLToSelect += "standardbar";
+
+    const SfxPoolItem* pItem =
+        rSet.GetItem( rSet.GetPool()->GetWhich( SID_CONFIG ) );
+
+    if ( pItem )
+    {
+        OUString text = static_cast<const SfxStringItem*>(pItem)->GetValue();
+        if (text.startsWith( ITEM_TOOLBAR_URL ))
+        {
+            m_aURLToSelect = text.copy( 0 );
+        }
+    }
+}
+
+SvxToolbarConfigPage::~SvxToolbarConfigPage()
+{
+    disposeOnce();
+}
+
+void SvxToolbarConfigPage::dispose()
+{
+    for ( sal_Int32 i = 0 ; i < m_pSaveInListBox->GetEntryCount(); ++i )
+    {
+        ToolbarSaveInData* pData =
+            static_cast<ToolbarSaveInData*>(m_pSaveInListBox->GetEntryData( i ));
+
+        delete pData;
+    }
+    m_pSaveInListBox->Clear();
+
+    m_pEntry.clear();
+    m_pMenu.clear();
+
+    SvxConfigPage::dispose();
+}
+
+void SvxToolbarConfigPage::DeleteSelectedTopLevel()
+{
+    const sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
+    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
+    pSaveInData->RemoveToolbar( GetTopLevelSelection() );
+
+    if ( m_pTopLevelListBox->GetEntryCount() > 1 )
+    {
+        // select next entry after the one being deleted
+        // selection position is indexed from 0 so need to
+        // subtract one from the entry count
+        if ( nSelectionPos != m_pTopLevelListBox->GetEntryCount() - 1 )
+        {
+            m_pTopLevelListBox->SelectEntryPos( nSelectionPos + 1 );
+        }
+        else
+        {
+            m_pTopLevelListBox->SelectEntryPos( nSelectionPos - 1 );
+        }
+        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
+
+        // and now remove the entry
+        m_pTopLevelListBox->RemoveEntry( nSelectionPos );
+    }
+    else
+    {
+        ReloadTopLevelListBox();
+    }
+}
+
+void SvxToolbarConfigPage::DeleteSelectedContent()
+{
+    SvTreeListEntry *pActEntry = m_pContentsListBox->FirstSelected();
+
+    if ( pActEntry != nullptr )
+    {
+        // get currently selected entry
+        SvxConfigEntry* pEntry =
+            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+
+        SvxConfigEntry* pToolbar = GetTopLevelSelection();
+
+        // remove entry from the list for this toolbar
+        killmelater::RemoveEntry( pToolbar->GetEntries(), pEntry );
+
+        // remove toolbar entry from UI
+        m_pContentsListBox->GetModel()->Remove( pActEntry );
+
+        // delete data for toolbar entry
+        delete pEntry;
+
+        static_cast<ToolbarSaveInData*>(GetSaveInData())->ApplyToolbar( pToolbar );
+        UpdateButtonStates();
+
+        // if this is the last entry in the toolbar and it is a user
+        // defined toolbar pop up a dialog asking the user if they
+        // want to delete the toolbar
+        if ( m_pContentsListBox->GetEntryCount() == 0 &&
+             GetTopLevelSelection()->IsDeletable() )
+        {
+            ScopedVclPtrInstance<MessageDialog> qbox(this,
+                CuiResId(RID_SXVSTR_CONFIRM_DELETE_TOOLBAR), VclMessageType::Question, VclButtonsType::YesNo);
+
+            if ( qbox->Execute() == RET_YES )
+            {
+                DeleteSelectedTopLevel();
+            }
+        }
+    }
+}
+
+IMPL_LINK( SvxToolbarConfigPage, MoveHdl, Button *, pButton, void )
+{
+    MoveEntry(pButton == m_pMoveUpButton);
+}
+
+void SvxToolbarConfigPage::MoveEntry( bool bMoveUp )
+{
+    SvxConfigPage::MoveEntry( bMoveUp );
+
+    // Apply change to currently selected toolbar
+    SvxConfigEntry* pToolbar = GetTopLevelSelection();
+    if ( pToolbar )
+        static_cast<ToolbarSaveInData*>(GetSaveInData())->ApplyToolbar( pToolbar );
+    else
+    {
+        SAL_WARN( "cui.customize", "SvxToolbarConfigPage::MoveEntry(): no entry" );
+        UpdateButtonStates();
+    }
+}
+
+IMPL_LINK( SvxToolbarConfigPage, ToolbarSelectHdl, MenuButton *, pButton, void )
+{
+    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
+
+    SvxConfigEntry* pToolbar =
+        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
+
+    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
+
+    OString sCommand = m_pMenu->GetItemIdent(pButton->GetCurItemId());
+
+    if (sCommand == "modtooldelete")
+    {
+        DeleteSelectedTopLevel();
+        UpdateButtonStates();
+    }
+    else if (sCommand == "modtoolrename")
+    {
+        OUString aNewName( killmelater::stripHotKey( pToolbar->GetName() ) );
+        OUString aDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
+
+        VclPtrInstance< SvxNameDialog > pNameDialog( this, aNewName, aDesc );
+        pNameDialog->SetHelpId( HID_SVX_CONFIG_RENAME_TOOLBAR );
+        pNameDialog->SetText( CuiResId( RID_SVXSTR_RENAME_TOOLBAR ) );
+
+        if ( pNameDialog->Execute() == RET_OK )
+        {
+            pNameDialog->GetName(aNewName);
+
+            pToolbar->SetName( aNewName );
+            pSaveInData->ApplyToolbar( pToolbar );
+
+            // have to use remove and insert to change the name
+            m_pTopLevelListBox->RemoveEntry( nSelectionPos );
+            nSelectionPos =
+                m_pTopLevelListBox->InsertEntry( aNewName, nSelectionPos );
+            m_pTopLevelListBox->SetEntryData( nSelectionPos, pToolbar );
+            m_pTopLevelListBox->SelectEntryPos( nSelectionPos );
+        }
+    }
+}
+
+IMPL_LINK( SvxToolbarConfigPage, EntrySelectHdl, MenuButton *, pButton, void )
+{
+    bool bNeedsApply = false;
+
+    // get currently selected toolbar
+    SvxConfigEntry* pToolbar = GetTopLevelSelection();
+
+    OString sCommand = m_pEntry->GetItemIdent(pButton->GetCurItemId());
+
+    if (sCommand == "toolrename")
+    {
+        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
+        SvxConfigEntry* pEntry =
+            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+
+        OUString aNewName( killmelater::stripHotKey( pEntry->GetName() ) );
+        OUString aDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
+
+        VclPtrInstance< SvxNameDialog > pNameDialog( this, aNewName, aDesc );
+        pNameDialog->SetHelpId( HID_SVX_CONFIG_RENAME_TOOLBAR_ITEM );
+        pNameDialog->SetText( CuiResId( RID_SVXSTR_RENAME_TOOLBAR ) );
+
+        if ( pNameDialog->Execute() == RET_OK ) {
+            pNameDialog->GetName(aNewName);
+
+            if( aNewName.isEmpty() ) //tdf#80758 - Accelerator character ("~") is passed as
+                pEntry->SetName( "~" ); // the button name in case of empty values.
+            else
+                pEntry->SetName( aNewName );
+
+            m_pContentsListBox->SetEntryText( pActEntry, aNewName );
+            bNeedsApply = true;
+        }
+    }
+    else if (sCommand == "toolrestore")
+    {
+        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
+        SvxConfigEntry* pEntry =
+            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+
+        sal_uInt16 nSelectionPos = 0;
+
+        // find position of entry within the list
+        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
+        {
+            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
+            {
+                nSelectionPos = i;
+                break;
+            }
+        }
+
+        ToolbarSaveInData* pSaveInData =
+            static_cast<ToolbarSaveInData*>( GetSaveInData() );
+
+        OUString aSystemName =
+            pSaveInData->GetSystemUIName( pEntry->GetCommand() );
+
+        if ( !pEntry->GetName().equals( aSystemName ) )
+        {
+            pEntry->SetName( aSystemName );
+            m_pContentsListBox->SetEntryText(
+                pActEntry, killmelater::stripHotKey( aSystemName ) );
+            bNeedsApply = true;
+        }
+
+        css::uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
+
+        try
+        {
+            GetSaveInData()->GetImageManager()->removeImages(
+                killmelater::GetImageType(), aURLSeq );
+
+            // reset backup in entry
+            pEntry->SetBackupGraphic(
+                css::uno::Reference< css::graphic::XGraphic >() );
+
+            GetSaveInData()->PersistChanges(
+                GetSaveInData()->GetImageManager() );
+
+            m_pContentsListBox->GetModel()->Remove( pActEntry );
+
+            SvTreeListEntry* pNewLBEntry =
+                InsertEntryIntoUI( pEntry, nSelectionPos );
+
+            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
+                pEntry->IsVisible() ?
+                    SvButtonState::Checked : SvButtonState::Unchecked );
+
+            m_pContentsListBox->Select( pNewLBEntry );
+            m_pContentsListBox->MakeVisible( pNewLBEntry );
+
+            bNeedsApply = true;
+        }
+        catch ( css::uno::Exception& )
+        {
+            SAL_WARN("cui.customize", "Error restoring image");
+        }
+    }
+    else if (sCommand == "toolchange")
+    {
+        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
+        SvxConfigEntry* pEntry =
+            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+
+        sal_uInt16 nSelectionPos = 0;
+
+        // find position of entry within the list
+        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
+        {
+            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
+            {
+                nSelectionPos = i;
+                break;
+            }
+        }
+
+        ScopedVclPtr<SvxIconSelectorDialog> pIconDialog(
+            VclPtr<SvxIconSelectorDialog>::Create( nullptr,
+                GetSaveInData()->GetImageManager(),
+                GetSaveInData()->GetParentImageManager() ));
+
+        if ( pIconDialog->Execute() == RET_OK )
+        {
+            css::uno::Reference< css::graphic::XGraphic > newgraphic =
+                pIconDialog->GetSelectedIcon();
+
+            if ( newgraphic.is() )
+            {
+                css::uno::Sequence< css::uno::Reference< css::graphic::XGraphic > >
+                    aGraphicSeq( 1 );
+
+                css::uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
+
+                if ( !pEntry->GetBackupGraphic().is() )
+                {
+                    css::uno::Reference< css::graphic::XGraphic > backup;
+                    backup = killmelater::GetGraphic(
+                        GetSaveInData()->GetImageManager(), aURLSeq[ 0 ] );
+
+                    if ( backup.is() )
+                    {
+                        pEntry->SetBackupGraphic( backup );
+                    }
+                }
+
+                aGraphicSeq[ 0 ] = newgraphic;
+                try
+                {
+                    GetSaveInData()->GetImageManager()->replaceImages(
+                        killmelater::GetImageType(), aURLSeq, aGraphicSeq );
+
+                    m_pContentsListBox->GetModel()->Remove( pActEntry );
+                    SvTreeListEntry* pNewLBEntry =
+                        InsertEntryIntoUI( pEntry, nSelectionPos );
+
+                    m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
+                        pEntry->IsVisible() ?
+                            SvButtonState::Checked : SvButtonState::Unchecked );
+
+                    m_pContentsListBox->Select( pNewLBEntry );
+                    m_pContentsListBox->MakeVisible( pNewLBEntry );
+
+                    GetSaveInData()->PersistChanges(
+                        GetSaveInData()->GetImageManager() );
+                }
+                catch ( css::uno::Exception& )
+                {
+                    SAL_WARN("cui.customize", "Error replacing image");
+                }
+            }
+        }
+    }
+    else if (sCommand == "toolreset")
+    {
+        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
+        SvxConfigEntry* pEntry =
+            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+
+        sal_uInt16 nSelectionPos = 0;
+
+        // find position of entry within the list
+        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
+        {
+            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
+            {
+                nSelectionPos = i;
+                break;
+            }
+        }
+
+        css::uno::Reference< css::graphic::XGraphic > backup =
+            pEntry->GetBackupGraphic();
+
+        css::uno::Sequence< css::uno::Reference< css::graphic::XGraphic > >
+            aGraphicSeq( 1 );
+        aGraphicSeq[ 0 ] = backup;
+
+        css::uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
+
+        try
+        {
+            GetSaveInData()->GetImageManager()->replaceImages(
+                killmelater::GetImageType(), aURLSeq, aGraphicSeq );
+
+            m_pContentsListBox->GetModel()->Remove( pActEntry );
+
+            SvTreeListEntry* pNewLBEntry =
+                InsertEntryIntoUI( pEntry, nSelectionPos );
+
+            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
+                pEntry->IsVisible() ?
+                    SvButtonState::Checked : SvButtonState::Unchecked );
+
+            m_pContentsListBox->Select( pNewLBEntry );
+            m_pContentsListBox->MakeVisible( pNewLBEntry );
+
+            // reset backup in entry
+            pEntry->SetBackupGraphic(
+                css::uno::Reference< css::graphic::XGraphic >() );
+
+            GetSaveInData()->PersistChanges(
+                GetSaveInData()->GetImageManager() );
+        }
+        catch ( css::uno::Exception& )
+        {
+            SAL_WARN("cui.customize", "Error resetting image");
+        }
+    }
+
+    if ( bNeedsApply )
+    {
+        static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
+        UpdateButtonStates();
+    }
+}
+
+void SvxToolbarConfigPage::Init()
+{
+    // ensure that the UI is cleared before populating it
+    m_pTopLevelListBox->Clear();
+    m_pContentsListBox->Clear();
+
+    ReloadTopLevelListBox();
+
+    sal_Int32 nPos = 0;
+    if ( !m_aURLToSelect.isEmpty() )
+    {
+        for ( sal_Int32 i = 0 ; i < m_pTopLevelListBox->GetEntryCount(); ++i )
+        {
+            SvxConfigEntry* pData =
+                static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( i ));
+
+            if ( pData->GetCommand().equals( m_aURLToSelect ) )
+            {
+                nPos = i;
+                break;
+            }
+        }
+
+        // in future select the default toolbar: Standard
+        m_aURLToSelect = ITEM_TOOLBAR_URL;
+        m_aURLToSelect += "standardbar";
+    }
+
+    m_pTopLevelListBox->SelectEntryPos(nPos);
+    m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
+}
+
+SaveInData* SvxToolbarConfigPage::CreateSaveInData(
+    const css::uno::Reference< css::ui::XUIConfigurationManager >& xCfgMgr,
+    const css::uno::Reference< css::ui::XUIConfigurationManager >& xParentCfgMgr,
+    const OUString& aModuleId,
+    bool bDocConfig )
+{
+    return static_cast< SaveInData* >(
+        new ToolbarSaveInData( xCfgMgr, xParentCfgMgr, aModuleId, bDocConfig ));
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbarEntry, SvTreeListBox *, void )
+{
+    UpdateButtonStates();
+}
+
+void SvxToolbarConfigPage::UpdateButtonStates()
+{
+    PopupMenu* pPopup = m_pModifyCommandButton->GetPopupMenu();
+    pPopup->EnableItem(pPopup->GetItemId("toolrename"), false);
+    pPopup->EnableItem(pPopup->GetItemId("toolrestore"), false);
+    pPopup->EnableItem(pPopup->GetItemId("toolchange"), false);
+    pPopup->EnableItem(pPopup->GetItemId("toolreset"), false);
+
+    m_pDeleteCommandButton->Enable( false );
+    m_pAddSeparatorButton->Enable( false );
+
+    m_pDescriptionField->SetText("");
+
+    SvTreeListEntry* selection = m_pContentsListBox->GetCurEntry();
+    if ( m_pContentsListBox->GetEntryCount() == 0 || selection == nullptr )
+    {
+        return;
+    }
+
+    SvxConfigEntry* pEntryData = static_cast<SvxConfigEntry*>(selection->GetUserData());
+    if ( pEntryData->IsSeparator() )
+    {
+        m_pDeleteCommandButton->Enable();
+    }
+    else
+    {
+        pPopup->EnableItem(pPopup->GetItemId("toolrename"));
+        pPopup->EnableItem(pPopup->GetItemId("toolchange"));
+
+        m_pDeleteCommandButton->Enable();
+        m_pAddSeparatorButton->Enable();
+
+        if ( !pEntryData->IsUserDefined() )
+            pPopup->EnableItem(pPopup->GetItemId("toolrestore"));
+
+        if ( pEntryData->IsIconModified() )
+            pPopup->EnableItem(pPopup->GetItemId("toolreset"));
+
+        m_pDescriptionField->SetText(pEntryData->GetHelpText());
+    }
+}
+
+short SvxToolbarConfigPage::QueryReset()
+{
+    OUString msg = CuiResId( RID_SVXSTR_CONFIRM_TOOLBAR_RESET );
+
+    OUString saveInName = m_pSaveInListBox->GetEntry(
+        m_pSaveInListBox->GetSelectEntryPos() );
+
+    OUString label = killmelater::replaceSaveInName( msg, saveInName );
+
+    ScopedVclPtrInstance< QueryBox > qbox( this, WB_YES_NO, label );
+
+    return qbox->Execute();
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void )
+{
+    m_pContentsListBox->Clear();
+
+    SvxConfigEntry* pToolbar = GetTopLevelSelection();
+    if ( pToolbar == nullptr )
+    {
+        m_pModifyTopLevelButton->Enable( false );
+        m_pModifyCommandButton->Enable( false );
+        m_pAddCommandsButton->Enable( false );
+        m_pAddSeparatorButton->Enable( false );
+        m_pDeleteCommandButton->Enable( false );
+        m_pResetTopLevelButton->Enable( false );
+        m_pIconsOnlyRB->Enable( false );
+        m_pTextOnlyRB->Enable( false );
+        m_pIconsAndTextRB->Enable( false );
+
+        return;
+    }
+
+    m_pModifyTopLevelButton->Enable();
+    m_pModifyCommandButton->Enable();
+    m_pAddCommandsButton->Enable();
+    m_pResetTopLevelButton->Enable( !pToolbar->IsRenamable() );
+
+    m_pIconsOnlyRB->Enable();
+    m_pTextOnlyRB->Enable();
+    m_pIconsAndTextRB->Enable();
+
+    PopupMenu* pPopup = m_pModifyTopLevelButton->GetPopupMenu();
+
+    pPopup->EnableItem(m_pMenu->GetItemId("modtooldelete"), pToolbar->IsDeletable());
+    pPopup->EnableItem(m_pMenu->GetItemId("modtoolrename"), pToolbar->IsRenamable());
+
+    switch( pToolbar->GetStyle() )
+    {
+        case 0:
+        {
+            m_pIconsOnlyRB->Check();
+            break;
+        }
+        case 1:
+        {
+            m_pTextOnlyRB->Check();
+            break;
+        }
+        case 2:
+        {
+            m_pIconsAndTextRB->Check();
+            break;
+        }
+    }
+
+    SvxEntries* pEntries = pToolbar->GetEntries();
+    SvxEntries::const_iterator iter = pEntries->begin();
+
+    for ( ; iter != pEntries->end(); ++iter )
+    {
+        SvxConfigEntry* pEntry = *iter;
+
+        SvTreeListEntry* pNewLBEntry = InsertEntryIntoUI( pEntry );
+
+        if(pEntry->IsSeparator())
+            m_pContentsListBox->SetCheckButtonInvisible( pNewLBEntry );
+
+        if (pEntry->IsBinding())
+        {
+            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
+                pEntry->IsVisible() ? SvButtonState::Checked : SvButtonState::Unchecked );
+        }
+        else
+        {
+            m_pContentsListBox->SetCheckButtonState(
+                pNewLBEntry, SvButtonState::Tristate );
+        }
+    }
+
+    UpdateButtonStates();
+}
+
+IMPL_LINK( SvxToolbarConfigPage, StyleChangeHdl, Button*, pButton, void )
+{
+    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
+
+    SvxConfigEntry* pToolbar =
+        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
+
+    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
+
+    if (pButton == m_pIconsOnlyRB)
+    {
+        pToolbar->SetStyle( 0 );
+        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 0 );
+
+        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
+    }
+    else if (pButton == m_pTextOnlyRB)
+    {
+        pToolbar->SetStyle( 1 );
+        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 1 );
+
+        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
+    }
+    else if (pButton == m_pIconsAndTextRB)
+    {
+        pToolbar->SetStyle( 2 );
+        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 2 );
+
+        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
+    }
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, NewToolbarHdl, Button *, void )
+{
+    OUString prefix = CuiResId( RID_SVXSTR_NEW_TOOLBAR );
+
+    OUString aNewName =
+        killmelater::generateCustomName( prefix, GetSaveInData()->GetEntries() );
+
+    OUString aNewURL =
+        killmelater::generateCustomURL( GetSaveInData()->GetEntries() );
+
+    VclPtrInstance< SvxNewToolbarDialog > pNameDialog( nullptr, aNewName );
+
+    for ( sal_Int32 i = 0 ; i < m_pSaveInListBox->GetEntryCount(); ++i )
+    {
+        SaveInData* pData =
+            static_cast<SaveInData*>(m_pSaveInListBox->GetEntryData( i ));
+
+        const sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->InsertEntry(
+            m_pSaveInListBox->GetEntry( i ) );
+
+        pNameDialog->m_pSaveInListBox->SetEntryData( nInsertPos, pData );
+    }
+
+    pNameDialog->m_pSaveInListBox->SelectEntryPos(
+        m_pSaveInListBox->GetSelectEntryPos() );
+
+    if ( pNameDialog->Execute() == RET_OK )
+    {
+        aNewName = pNameDialog->GetName();
+
+        sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->GetSelectEntryPos();
+
+        ToolbarSaveInData* pData = static_cast<ToolbarSaveInData*>(
+            pNameDialog->m_pSaveInListBox->GetEntryData( nInsertPos ));
+
+        if ( GetSaveInData() != pData )
+        {
+            m_pSaveInListBox->SelectEntryPos( nInsertPos );
+            m_pSaveInListBox->GetSelectHdl().Call(*m_pSaveInListBox);
+        }
+
+        SvxConfigEntry* pToolbar =
+            new SvxConfigEntry( aNewName, aNewURL, true );
+
+        pToolbar->SetUserDefined();
+        pToolbar->SetMain();
+
+        pData->CreateToolbar( pToolbar );
+
+        nInsertPos = m_pTopLevelListBox->InsertEntry( pToolbar->GetName() );
+        m_pTopLevelListBox->SetEntryData( nInsertPos, pToolbar );
+        m_pTopLevelListBox->SelectEntryPos( nInsertPos );
+        m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
+
+        pData->SetModified();
+    }
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, AddCommandsHdl, Button *, void )
+{
+    if ( m_pSelectorDlg == nullptr )
+    {
+        // Create Script Selector which shows slot commands
+        m_pSelectorDlg = VclPtr<SvxScriptSelectorDialog>::Create( this, true, m_xFrame );
+
+        // Position the Script Selector over the Add button so it is
+        // beside the menu contents list and does not obscure it
+        m_pSelectorDlg->SetPosPixel( m_pAddCommandsButton->GetPosPixel() );
+
+        m_pSelectorDlg->SetAddHdl(
+            LINK( this, SvxToolbarConfigPage, AddFunctionHdl ) );
+    }
+
+    m_pSelectorDlg->SetImageProvider( GetSaveInData() );
+
+    m_pSelectorDlg->Execute();
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, AddSeparatorHdl, Button *, void )
+{
+    // get currently selected toolbar
+    SvxConfigEntry* pToolbar = GetTopLevelSelection();
+
+    SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
+    pNewEntryData->SetUserDefined();
+
+    SvTreeListEntry* pNewLBEntry = InsertEntry( pNewEntryData );
+
+    m_pContentsListBox->SetCheckButtonInvisible( pNewLBEntry );
+    m_pContentsListBox->SetCheckButtonState(
+        pNewLBEntry, SvButtonState::Tristate );
+
+    static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
+    UpdateButtonStates();
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, DeleteCommandHdl, Button *, void )
+{
+    DeleteSelectedContent();
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, ResetTopLevelHdl, Button *, void )
+{
+    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
+
+    SvxConfigEntry* pToolbar =
+        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
+
+    ScopedVclPtrInstance<MessageDialog> qbox(this,
+        CuiResId(RID_SVXSTR_CONFIRM_RESTORE_DEFAULT), VclMessageType::Question, VclButtonsType::YesNo);
+
+    if ( qbox->Execute() == RET_YES )
+    {
+        ToolbarSaveInData* pSaveInData_ =
+        static_cast<ToolbarSaveInData*>(GetSaveInData());
+
+        pSaveInData_->RestoreToolbar( pToolbar );
+
+        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
+    }
+}
+
+IMPL_LINK_NOARG( SvxToolbarConfigPage, AddFunctionHdl, SvxScriptSelectorDialog&, void )
+{
+    AddFunction();
+}
+
+void SvxToolbarConfigPage::AddFunction(
+    SvTreeListEntry* pTarget, bool bFront )
+{
+    SvTreeListEntry* pNewLBEntry =
+        SvxConfigPage::AddFunction( pTarget, bFront, true/*bAllowDuplicates*/ );
+
+    SvxConfigEntry* pEntry = static_cast<SvxConfigEntry*>(pNewLBEntry->GetUserData());
+
+    if ( pEntry->IsBinding() )
+    {
+        pEntry->SetVisible( true );
+        m_pContentsListBox->SetCheckButtonState(
+            pNewLBEntry, SvButtonState::Checked );
+    }
+    else
+    {
+        m_pContentsListBox->SetCheckButtonState(
+            pNewLBEntry, SvButtonState::Tristate );
+    }
+
+    // get currently selected toolbar and apply change
+    SvxConfigEntry* pToolbar = GetTopLevelSelection();
+
+    if ( pToolbar != nullptr )
+    {
+        static_cast<ToolbarSaveInData*>( GetSaveInData() )->ApplyToolbar( pToolbar );
+    }
+}
+
+SvxToolbarEntriesListBox::SvxToolbarEntriesListBox(vcl::Window* pParent, SvxToolbarConfigPage* pPg)
+    : SvxMenuEntriesListBox(pParent, pPg)
+    , pPage(pPg)
+{
+    m_pButtonData = new SvLBoxButtonData( this );
+    BuildCheckBoxButtonImages( m_pButtonData );
+    EnableCheckButton( m_pButtonData );
+}
+
+SvxToolbarEntriesListBox::~SvxToolbarEntriesListBox()
+{
+    disposeOnce();
+}
+
+void SvxToolbarEntriesListBox::dispose()
+{
+    delete m_pButtonData;
+    m_pButtonData = nullptr;
+
+    pPage.clear();
+    SvxMenuEntriesListBox::dispose();
+}
+
+void SvxToolbarEntriesListBox::BuildCheckBoxButtonImages( SvLBoxButtonData* pData )
+{
+    // Build checkbox images according to the current application
+    // settings. This is necessary to be able to have correct colors
+    // in all color modes, like high contrast.
+    const AllSettings& rSettings = Application::GetSettings();
+
+    ScopedVclPtrInstance< VirtualDevice > pVDev;
+    Size            aSize( 26, 20 );
+
+    pVDev->SetOutputSizePixel( aSize );
+
+    Image aImage = GetSizedImage( *pVDev.get(), aSize,
+        CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Default ));
+
+    // Fill button data struct with new images
+    pData->SetImage(SvBmp::UNCHECKED,     aImage);
+    pData->SetImage(SvBmp::CHECKED,       GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Checked )) );
+    pData->SetImage(SvBmp::HICHECKED,     GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Checked | DrawButtonFlags::Pressed )) );
+    pData->SetImage(SvBmp::HIUNCHECKED,   GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Default | DrawButtonFlags::Pressed)) );
+    pData->SetImage(SvBmp::TRISTATE,      GetSizedImage( *pVDev.get(), aSize, Image() ) ); // Use tristate bitmaps to have no checkbox for separator entries
+    pData->SetImage(SvBmp::HITRISTATE,    GetSizedImage( *pVDev.get(), aSize, Image() ) );
+
+    // Get image size
+    m_aCheckBoxImageSizePixel = aImage.GetSizePixel();
+}
+
+Image SvxToolbarEntriesListBox::GetSizedImage(
+    VirtualDevice& rVDev, const Size& aNewSize, const Image& aImage )
+{
+    // Create new checkbox images for treelistbox. They must have a
+    // decent width to have a clear column for the visibility checkbox.
+
+    // Standard transparent color is light magenta as is won't be
+    // used for other things
+    Color   aFillColor( COL_LIGHTMAGENTA );
+
+    // Position image at the center of (width-2),(height) rectangle.
+    // We need 2 pixels to have a bigger border to the next button image
+    sal_uInt16  nPosX = std::max( (sal_uInt16) (((( aNewSize.Width() - 2 ) - aImage.GetSizePixel().Width() ) / 2 ) - 1), (sal_uInt16) 0 );
+    sal_uInt16  nPosY = std::max( (sal_uInt16) (((( aNewSize.Height() - 2 ) - aImage.GetSizePixel().Height() ) / 2 ) + 1), (sal_uInt16) 0 );
+    Point   aPos( nPosX > 0 ? nPosX : 0, nPosY > 0 ? nPosY : 0 );
+    rVDev.SetFillColor( aFillColor );
+    rVDev.SetLineColor( aFillColor );
+    rVDev.DrawRect( ::tools::Rectangle( Point(), aNewSize ));
+    rVDev.DrawImage( aPos, aImage );
+
+    // Draw separator line 2 pixels left from the right border
+    Color aLineColor = GetDisplayBackground().GetColor().IsDark() ? Color( COL_WHITE ) : Color( COL_BLACK );
+    rVDev.SetLineColor( aLineColor );
+    rVDev.DrawLine( Point( aNewSize.Width()-3, 0 ), Point( aNewSize.Width()-3, aNewSize.Height()-1 ));
+
+    // Create new image that uses the fillcolor as transparent
+    return Image(BitmapEx(rVDev.GetBitmap(Point(), aNewSize), aFillColor));
+}
+
+void SvxToolbarEntriesListBox::DataChanged( const DataChangedEvent& rDCEvt )
+{
+    SvTreeListBox::DataChanged( rDCEvt );
+
+    if (( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) &&
+        ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ))
+    {
+        BuildCheckBoxButtonImages( m_pButtonData );
+        Invalidate();
+    }
+}
+
+
+void SvxToolbarEntriesListBox::ChangeVisibility( SvTreeListEntry* pEntry )
+{
+    if ( pEntry != nullptr )
+    {
+        SvxConfigEntry* pEntryData =
+            static_cast<SvxConfigEntry*>(pEntry->GetUserData());
+
+        if ( pEntryData->IsBinding() )
+        {
+            pEntryData->SetVisible( !pEntryData->IsVisible() );
+
+            SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
+
+            ToolbarSaveInData* pToolbarSaveInData = static_cast<ToolbarSaveInData*>(
+                pPage->GetSaveInData() );
+
+               pToolbarSaveInData->ApplyToolbar( pToolbar );
+
+            SetCheckButtonState( pEntry, pEntryData->IsVisible() ?
+                SvButtonState::Checked : SvButtonState::Unchecked );
+        }
+    }
+}
+
+void SvxToolbarEntriesListBox::CheckButtonHdl()
+{
+    ChangeVisibility( GetHdlEntry() );
+}
+
+void SvxToolbarEntriesListBox::KeyInput( const KeyEvent& rKeyEvent )
+{
+    // space key will change visibility of toolbar items
+    if ( rKeyEvent.GetKeyCode() == KEY_SPACE )
+    {
+        ChangeVisibility( GetCurEntry() );
+    }
+    else
+    {
+        // pass on to superclass
+        SvxMenuEntriesListBox::KeyInput( rKeyEvent );
+    }
+}
+
+TriState SvxToolbarEntriesListBox::NotifyMoving(
+    SvTreeListEntry* pTarget, SvTreeListEntry* pSource,
+    SvTreeListEntry*& rpNewParent, sal_uLong& rNewChildPos)
+{
+    TriState result = SvxMenuEntriesListBox::NotifyMoving(
+        pTarget, pSource, rpNewParent, rNewChildPos );
+
+    if ( result )
+    {
+        // Instant Apply changes to UI
+        SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
+        if ( pToolbar != nullptr )
+        {
+            ToolbarSaveInData* pSaveInData =
+                static_cast<ToolbarSaveInData*>( pPage->GetSaveInData() );
+            pSaveInData->ApplyToolbar( pToolbar );
+        }
+    }
+
+    return result;
+}
+
+TriState SvxToolbarEntriesListBox::NotifyCopying(
+    SvTreeListEntry*  pTarget,
+    SvTreeListEntry*  pSource,
+    SvTreeListEntry*& rpNewParent,
+    sal_uLong&      rNewChildPos)
+{
+    (void)pSource;
+    (void)rpNewParent;
+    (void)rNewChildPos;
+
+    if ( !m_bIsInternalDrag )
+    {
+        // if the target is NULL then add function to the start of the list
+        static_cast<SvxToolbarConfigPage*>(pPage.get())->AddFunction( pTarget, pTarget == nullptr );
+
+        // Instant Apply changes to UI
+        SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
+        if ( pToolbar != nullptr )
+        {
+            ToolbarSaveInData* pSaveInData =
+                static_cast<ToolbarSaveInData*>( pPage->GetSaveInData() );
+            pSaveInData->ApplyToolbar( pToolbar );
+        }
+
+        // AddFunction already adds the listbox entry so return TRISTATE_FALSE
+        // to stop another listbox entry being added
+        return TRISTATE_FALSE;
+    }
+
+    // Copying is only allowed from external controls, not within the listbox
+    return TRISTATE_FALSE;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index ba3a337e1228..78a53c980e59 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -45,7 +45,6 @@
 #include <sfx2/request.hxx>
 #include <sfx2/filedlghelper.hxx>
 #include <svl/stritem.hxx>
-#include <svtools/miscopt.hxx>
 #include <svtools/svlbitm.hxx>
 #include "svtools/treelistentry.hxx"
 #include "svtools/viewdataentry.hxx"
@@ -59,12 +58,10 @@
 #include "acccfg.hxx"
 #include "cfg.hxx"
 #include "SvxMenuConfigPage.hxx"
+#include "SvxToolbarConfigPage.hxx"
 #include "eventdlg.hxx"
 #include <dialmgr.hxx>
 
-#include <comphelper/documentinfo.hxx>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/random.hxx>
 #include <unotools/configmgr.hxx>
 #include <o3tl/make_unique.hxx>
 #include <com/sun/star/embed/ElementModes.hpp>
@@ -112,12 +109,8 @@ static const char ITEM_DESCRIPTOR_ISVISIBLE[]   = "IsVisible";
 static const char ITEM_DESCRIPTOR_RESOURCEURL[] = "ResourceURL";
 static const char ITEM_DESCRIPTOR_UINAME[]      = "UIName";
 
-static const char ITEM_MENUBAR_URL[] = "private:resource/menubar/menubar";
-static const char ITEM_TOOLBAR_URL[] = "private:resource/toolbar/";
-
-static const char CUSTOM_TOOLBAR_STR[] = "custom_toolbar_";
-
-static const char aMenuSeparatorStr[] = " | ";
+//static const char ITEM_MENUBAR_URL[] = "private:resource/menubar/menubar";
+//static const char ITEM_TOOLBAR_URL[] = "private:resource/toolbar/";
 
 namespace uno = com::sun::star::uno;
 namespace frame = com::sun::star::frame;
@@ -204,24 +197,6 @@ stripHotKey( const OUString& str )
     }
 }
 
-OUString replaceSaveInName(
-    const OUString& rMessage,
-    const OUString& rSaveInName )
-{
-    OUString name;
-    OUString placeholder("%SAVE IN SELECTION%" );
-
-    sal_Int32 pos = rMessage.indexOf( placeholder );
-
-    if ( pos != -1 )
-    {
-        name = rMessage.replaceAt(
-            pos, placeholder.getLength(), rSaveInName );
-    }
-
-    return name;
-}
-
 OUString
 replaceSixteen( const OUString& str, sal_Int32 nReplacement )
 {
@@ -242,93 +217,6 @@ replaceSixteen( const OUString& str, sal_Int32 nReplacement )
 }
 
 OUString
-generateCustomName(
-    const OUString& prefix,
-    SvxEntries* entries,
-    sal_Int32 suffix = 1 )
-{
-    // find and replace the %n placeholder in the prefix string
-    OUString name;
-    OUString placeholder("%n" );
-
-    sal_Int32 pos = prefix.indexOf( placeholder );
-
-    if ( pos != -1 )
-    {
-        name = prefix.replaceAt(
-            pos, placeholder.getLength(), OUString::number( suffix ) );
-    }
-    else
-    {
-        // no placeholder found so just append the suffix
-        name = prefix + OUString::number( suffix );
-    }
-
-    if (!entries)
-        return name;
-
-    // now check is there is an already existing entry with this name
-    SvxEntries::const_iterator iter = entries->begin();
-
-    while ( iter != entries->end() )
-    {
-        SvxConfigEntry* pEntry = *iter;
-
-        if ( name.equals( pEntry->GetName() ) )
-        {
-            break;
-        }
-        ++iter;
-    }
-
-    if ( iter != entries->end() )
-    {
-        // name already exists so try the next number up
-        return generateCustomName( prefix, entries, ++suffix );
-    }
-
-    return name;
-}
-
-sal_uInt32 generateRandomValue()
-{
-    return comphelper::rng::uniform_uint_distribution(0, std::numeric_limits<unsigned int>::max());
-}
-
-OUString
-generateCustomURL(
-    SvxEntries* entries )
-{
-    OUString url = ITEM_TOOLBAR_URL;
-    url += CUSTOM_TOOLBAR_STR;
-
-    // use a random number to minimize possible clash with existing custom toolbars
-    url += OUString::number( generateRandomValue(), 16 );
-
-    // now check is there is an already existing entry with this url
-    SvxEntries::const_iterator iter = entries->begin();
-
-    while ( iter != entries->end() )
-    {
-        SvxConfigEntry* pEntry = *iter;
-
-        if ( url.equals( pEntry->GetCommand() ) )
-        {
-            break;
-        }
-        ++iter;
-    }
-
-    if ( iter != entries->end() )
-    {
-        // url already exists so try the next number up
-        return generateCustomURL( entries );
-    }
-
-    return url;
-}
-
-OUString
 generateCustomMenuURL(
     SvxEntries* entries,
     sal_Int32 suffix = 1 )
@@ -360,31 +248,6 @@ generateCustomMenuURL(
     return url;
 }
 
-static sal_Int16 theImageType =
-    css::ui::ImageType::COLOR_NORMAL |
-    css::ui::ImageType::SIZE_DEFAULT;
-
-void InitImageType()
-{
-    theImageType =
-        css::ui::ImageType::COLOR_NORMAL |
-        css::ui::ImageType::SIZE_DEFAULT;
-
-    if (SvtMiscOptions().GetSymbolsSize() == SFX_SYMBOLS_SIZE_LARGE)
-    {
-        theImageType |= css::ui::ImageType::SIZE_LARGE;
-    }
-    else if (SvtMiscOptions().GetSymbolsSize() == SFX_SYMBOLS_SIZE_32)
-    {
-        theImageType |= css::ui::ImageType::SIZE_32;
-    }
-}
-
-sal_Int16 GetImageType()
-{
-    return theImageType;
-}
-
 void RemoveEntry( SvxEntries* pEntries, SvxConfigEntry* pChildEntry )
 {
     SvxEntries::iterator iter = pEntries->begin();
@@ -700,7 +563,7 @@ SvxConfigDialog::SvxConfigDialog(vcl::Window * pParent, const SfxItemSet* pInSet
     , m_nToolbarsPageId(0)
     , m_nEventsPageId(0)
 {
-    InitImageType();
+    killmelater::InitImageType();
 
     m_nMenusPageId = AddTabPage("menus", CreateSvxMenuConfigPage, nullptr);
     m_nContextMenusPageId = AddTabPage("contextmenus", CreateSvxContextMenuConfigPage, nullptr);
@@ -808,44 +671,12 @@ SaveInData::SaveInData(
     }
 }
 
-uno::Reference< graphic::XGraphic > GetGraphic(
-    const uno::Reference< css::ui::XImageManager >& xImageManager,
-    const OUString& rCommandURL )
-{
-    uno::Reference< graphic::XGraphic > result;
-
-    if ( xImageManager.is() )
-    {
-        // TODO handle large graphics
-        uno::Sequence< uno::Reference< graphic::XGraphic > > aGraphicSeq;
-
-        uno::Sequence<OUString> aImageCmdSeq { rCommandURL };
-
-        try
-        {
-            aGraphicSeq =
-                xImageManager->getImages( GetImageType(), aImageCmdSeq );
-
-            if ( aGraphicSeq.getLength() > 0 )
-            {
-                result =  aGraphicSeq[0];
-            }
-        }
-        catch ( uno::Exception& )
-        {
-            // will return empty XGraphic
-        }
-    }
-
-    return result;
-}
-
 Image SaveInData::GetImage( const OUString& rCommandURL )
 {
     Image aImage;
 
     uno::Reference< graphic::XGraphic > xGraphic =
-        GetGraphic( m_xImgMgr, rCommandURL );
+        killmelater::GetGraphic( m_xImgMgr, rCommandURL );
 
     if ( xGraphic.is() )
     {
@@ -853,7 +684,7 @@ Image SaveInData::GetImage( const OUString& rCommandURL )
     }
     else if ( xDefaultImgMgr != nullptr && (*xDefaultImgMgr).is() )
     {
-        xGraphic = GetGraphic( (*xDefaultImgMgr), rCommandURL );
+        xGraphic = killmelater::GetGraphic( (*xDefaultImgMgr), rCommandURL );
 
         if ( xGraphic.is() )
         {
@@ -2405,7 +2236,7 @@ SvxMainMenuOrganizerDialog::SvxMainMenuOrganizerDialog(
         // Generate custom name for new menu
         OUString prefix = CuiResId( RID_SVXSTR_NEW_MENU );
 
-        OUString newname = generateCustomName( prefix, entries );
+        OUString newname = killmelater::generateCustomName( prefix, entries );
         OUString newurl = generateCustomMenuURL( mpEntries );
 
         SvxConfigEntry* pNewEntryData =
@@ -2616,712 +2447,165 @@ bool SvxConfigEntry::IsRenamable()
     return !IsMain() || IsUserDefined();
 }
 
-SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSet& rSet)
-    : SvxConfigPage(pParent, rSet)
-    , m_pMenu(get_menu("modifymenu"))
-    , m_pEntry(get_menu("contentmenu"))
-{
-    SetHelpId( HID_SVX_CONFIG_TOOLBAR );
-
-    m_pContentsListBox = VclPtr<SvxToolbarEntriesListBox>::Create(m_pEntries, this);
-    m_pContentsListBox->set_grid_left_attach(0);
-    m_pContentsListBox->set_grid_top_attach(0);
-    m_pContentsListBox->set_hexpand(true);
-    m_pContentsListBox->set_vexpand(true);
-    m_pContentsListBox->Show();
-
-    m_pTopLevelListBox->SetHelpId ( HID_SVX_TOPLEVELLISTBOX );
-    m_pIconsOnlyRB->SetHelpId ( HID_SVX_ICONSONLY );
-    m_pTextOnlyRB->SetHelpId ( HID_SVX_TEXTONLY );
-    m_pIconsAndTextRB->SetHelpId ( HID_SVX_ICONSANDTEXT );
-    m_pContentsListBox->SetHelpId( HID_SVX_CONFIG_TOOLBAR_CONTENTS );
-    m_pNewTopLevelButton->SetHelpId( HID_SVX_NEW_TOOLBAR );
-    m_pModifyTopLevelButton->SetHelpId( HID_SVX_MODIFY_TOOLBAR );
-    m_pAddCommandsButton->SetHelpId( HID_SVX_NEW_TOOLBAR_ITEM );
-    m_pAddSeparatorButton->SetHelpId ( HID_SVX_ADD_SEPARATOR );
-    m_pModifyCommandButton->SetHelpId( HID_SVX_MODIFY_TOOLBAR_ITEM );
-    m_pDeleteCommandButton->SetHelpId ( HID_SVX_REMOVEBUTTON );
-    m_pResetTopLevelButton->SetHelpId ( HID_SVX_RESETBUTTON );
-    m_pSaveInListBox->SetHelpId( HID_SVX_SAVE_IN );
-    m_pMoveUpButton->SetHelpId( HID_SVX_UP_TOOLBAR_ITEM );
-    m_pMoveDownButton->SetHelpId( HID_SVX_DOWN_TOOLBAR_ITEM );
-    m_pDescriptionField->SetHelpId ( HID_SVX_DESCFIELD );
-
-    m_pTopLevel->set_label(CuiResId(RID_SVXSTR_PRODUCTNAME_TOOLBARS));
-
-    m_pTopLevelLabel->SetText( CuiResId( RID_SVXSTR_TOOLBAR ) );
-    m_pModifyTopLevelButton->SetText( CuiResId( RID_SVXSTR_TOOLBAR ) );
-    m_pContents->set_label(CuiResId(RID_SVXSTR_TOOLBAR_CONTENT));
-    m_pContentsLabel->SetText( CuiResId( RID_SVXSTR_COMMANDS ) );
-
-    // The reset button will be used in the toolbar config tab
-    m_pResetTopLevelButton->Show();
-    // These radio buttons will be used in the toolbar config tab
-    m_pIconsOnlyRB->Enable();
-    m_pTextOnlyRB->Enable();
-    m_pIconsAndTextRB->Enable();
-    m_pIconsOnlyRB->Show();
-    m_pTextOnlyRB->Show();
-    m_pIconsAndTextRB->Show();
-    m_pToolbarStyleLabel->Show();
-
-    m_pTopLevelListBox->SetSelectHdl(
-        LINK( this, SvxToolbarConfigPage, SelectToolbar ) );
-    m_pContentsListBox->SetSelectHdl(
-        LINK( this, SvxToolbarConfigPage, SelectToolbarEntry ) );
-
-    m_pIconsOnlyRB->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
-    m_pTextOnlyRB->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
-    m_pIconsAndTextRB->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, StyleChangeHdl ) );
-
-    m_pNewTopLevelButton->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, NewToolbarHdl ) );
-
-    m_pAddCommandsButton->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, AddCommandsHdl ) );
-
-    m_pAddSeparatorButton->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, AddSeparatorHdl ) );
-
-    m_pDeleteCommandButton->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, DeleteCommandHdl ) );
-
-    m_pResetTopLevelButton->SetClickHdl  (
-        LINK( this, SvxToolbarConfigPage, ResetTopLevelHdl ) );
-
-    m_pMoveUpButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
-    m_pMoveDownButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
-    // Always enable Up and Down buttons
-    // added for issue i53677 by shizhoubo
-    m_pMoveDownButton->Enable();
-    m_pMoveUpButton->Enable();
-
-    m_pMenu->SetMenuFlags(
-        m_pMenu->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
-
-    m_pModifyTopLevelButton->SetPopupMenu( m_pMenu );
-    m_pModifyTopLevelButton->SetSelectHdl(
-        LINK( this, SvxToolbarConfigPage, ToolbarSelectHdl ) );
-
-    m_pEntry->SetMenuFlags(
-        m_pEntry->GetMenuFlags() | MenuFlags::AlwaysShowDisabledEntries );
-
-    m_pModifyCommandButton->SetPopupMenu(m_pEntry);
-    m_pModifyCommandButton->SetSelectHdl(
-        LINK( this, SvxToolbarConfigPage, EntrySelectHdl ) );
-
-    // default toolbar to select is standardbar unless a different one
-    // has been passed in
-    m_aURLToSelect = ITEM_TOOLBAR_URL;
-    m_aURLToSelect += "standardbar";
+//SvxToolbarConfigPage class was here (first part)
 
-    const SfxPoolItem* pItem =
-        rSet.GetItem( rSet.GetPool()->GetWhich( SID_CONFIG ) );
+ToolbarSaveInData::ToolbarSaveInData(
+    const uno::Reference < css::ui::XUIConfigurationManager >& xCfgMgr,
+    const uno::Reference < css::ui::XUIConfigurationManager >& xParentCfgMgr,
+    const OUString& aModuleId,
+    bool docConfig ) :
 
-    if ( pItem )
-    {
-        OUString text = static_cast<const SfxStringItem*>(pItem)->GetValue();
-        if (text.startsWith( ITEM_TOOLBAR_URL ))
-        {
-            m_aURLToSelect = text.copy( 0 );
-        }
-    }
+    SaveInData              ( xCfgMgr, xParentCfgMgr, aModuleId, docConfig ),
+    pRootEntry              ( nullptr ),
+    m_aDescriptorContainer  ( ITEM_DESCRIPTOR_CONTAINER  )
+
+{
+    uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
+    // Initialize the m_xPersistentWindowState variable which is used
+    // to get the default properties of system toolbars such as name
+    uno::Reference< container::XNameAccess > xPWSS = css::ui::theWindowStateConfiguration::get( xContext );
+
+    xPWSS->getByName( aModuleId ) >>= m_xPersistentWindowState;
 }
 
-SvxToolbarConfigPage::~SvxToolbarConfigPage()
+ToolbarSaveInData::~ToolbarSaveInData()
 {
-    disposeOnce();
 }
 
-void SvxToolbarConfigPage::dispose()
+void ToolbarSaveInData::SetSystemStyle(
+    const uno::Reference< frame::XFrame >& xFrame,
+    const OUString& rResourceURL,
+    sal_Int32 nStyle )
 {
-    for ( sal_Int32 i = 0 ; i < m_pSaveInListBox->GetEntryCount(); ++i )
-    {
-        ToolbarSaveInData* pData =
-            static_cast<ToolbarSaveInData*>(m_pSaveInListBox->GetEntryData( i ));
+    // change the style using the API
+    SetSystemStyle( rResourceURL, nStyle );
 
-        delete pData;
+    // this code is a temporary hack as the UI is not updating after
+    // changing the toolbar style via the API
+    uno::Reference< css::frame::XLayoutManager > xLayoutManager;
+    vcl::Window *window = nullptr;
+
+    uno::Reference< beans::XPropertySet > xPropSet( xFrame, uno::UNO_QUERY );
+    if ( xPropSet.is() )
+    {
+        uno::Any a = xPropSet->getPropertyValue( "LayoutManager" );
+        a >>= xLayoutManager;
     }
-    m_pSaveInListBox->Clear();
 
-    m_pEntry.clear();
-    m_pMenu.clear();
+    if ( xLayoutManager.is() )
+    {
+        uno::Reference< css::ui::XUIElement > xUIElement =
+            xLayoutManager->getElement( rResourceURL );
 
-    SvxConfigPage::dispose();
-}
+        // check reference before we call getRealInterface. The layout manager
+        // can only provide references for elements that have been created
+        // before. It's possible that the current element is not available.
+        uno::Reference< css::awt::XWindow > xWindow;
+        if ( xUIElement.is() )
+            xWindow.set( xUIElement->getRealInterface(), uno::UNO_QUERY );
 
-void SvxToolbarConfigPage::DeleteSelectedTopLevel()
-{
-    const sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
-    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
-    pSaveInData->RemoveToolbar( GetTopLevelSelection() );
+        window = VCLUnoHelper::GetWindow( xWindow ).get();
+    }
 
-    if ( m_pTopLevelListBox->GetEntryCount() > 1 )
+    if ( window != nullptr && window->GetType() == WindowType::TOOLBOX )
     {
-        // select next entry after the one being deleted
-        // selection position is indexed from 0 so need to
-        // subtract one from the entry count
-        if ( nSelectionPos != m_pTopLevelListBox->GetEntryCount() - 1 )
+        ToolBox* toolbox = static_cast<ToolBox*>(window);
+
+        if ( nStyle == 0 )
         {
-            m_pTopLevelListBox->SelectEntryPos( nSelectionPos + 1 );
+            toolbox->SetButtonType();
         }
-        else
+        else if ( nStyle == 1 )
+        {
+            toolbox->SetButtonType( ButtonType::TEXT );
+        }
+        if ( nStyle == 2 )
         {
-            m_pTopLevelListBox->SelectEntryPos( nSelectionPos - 1 );
+            toolbox->SetButtonType( ButtonType::SYMBOLTEXT );
         }
-        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
-
-        // and now remove the entry
-        m_pTopLevelListBox->RemoveEntry( nSelectionPos );
-    }
-    else
-    {
-        ReloadTopLevelListBox();
     }
 }
 
-void SvxToolbarConfigPage::DeleteSelectedContent()
+void ToolbarSaveInData::SetSystemStyle(
+    const OUString& rResourceURL,
+    sal_Int32 nStyle )
 {
-    SvTreeListEntry *pActEntry = m_pContentsListBox->FirstSelected();
-
-    if ( pActEntry != nullptr )
+    if ( rResourceURL.startsWith( "private" ) &&
+         m_xPersistentWindowState.is() &&
+         m_xPersistentWindowState->hasByName( rResourceURL ) )
     {
-        // get currently selected entry
-        SvxConfigEntry* pEntry =
-            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
+        try
+        {
+            uno::Sequence< beans::PropertyValue > aProps;
 
-        SvxConfigEntry* pToolbar = GetTopLevelSelection();
+            uno::Any a( m_xPersistentWindowState->getByName( rResourceURL ) );
 
-        // remove entry from the list for this toolbar
-        RemoveEntry( pToolbar->GetEntries(), pEntry );
+            if ( a >>= aProps )
+            {
+                for ( sal_Int32 i = 0; i < aProps.getLength(); ++i )
+                {
+                    if ( aProps[ i ].Name == ITEM_DESCRIPTOR_STYLE )
+                    {
+                        aProps[ i ].Value <<= nStyle;
+                        break;
+                    }
+                }
+            }
 
-        // remove toolbar entry from UI
-        m_pContentsListBox->GetModel()->Remove( pActEntry );
+            uno::Reference< container::XNameReplace >
+                xNameReplace( m_xPersistentWindowState, uno::UNO_QUERY );
 
-        // delete data for toolbar entry
-        delete pEntry;
+            xNameReplace->replaceByName( rResourceURL, uno::Any( aProps ) );
+        }
+        catch ( uno::Exception& )
+        {
+            // do nothing, a default value is returned
+            SAL_WARN("cui.customize", "Exception setting toolbar style");
+        }
+    }
+}
 
-        static_cast<ToolbarSaveInData*>(GetSaveInData())->ApplyToolbar( pToolbar );
-        UpdateButtonStates();
+sal_Int32 ToolbarSaveInData::GetSystemStyle( const OUString& rResourceURL )
+{
+    sal_Int32 result = 0;
 
-        // if this is the last entry in the toolbar and it is a user
-        // defined toolbar pop up a dialog asking the user if they
-        // want to delete the toolbar
-        if ( m_pContentsListBox->GetEntryCount() == 0 &&
-             GetTopLevelSelection()->IsDeletable() )
+    if ( rResourceURL.startsWith( "private" ) &&
+         m_xPersistentWindowState.is() &&
+         m_xPersistentWindowState->hasByName( rResourceURL ) )
+    {
+        try
         {
-            ScopedVclPtrInstance<MessageDialog> qbox(this,
-                CuiResId(RID_SXVSTR_CONFIRM_DELETE_TOOLBAR), VclMessageType::Question, VclButtonsType::YesNo);
+            uno::Sequence< beans::PropertyValue > aProps;
+            uno::Any a( m_xPersistentWindowState->getByName( rResourceURL ) );
 
-            if ( qbox->Execute() == RET_YES )
+            if ( a >>= aProps )
             {
-                DeleteSelectedTopLevel();
+                for ( sal_Int32 i = 0; i < aProps.getLength(); ++i )
+                {
+                    if ( aProps[ i ].Name == ITEM_DESCRIPTOR_STYLE )
+                    {
+                        aProps[i].Value >>= result;
+                        break;
+                    }
+                }
             }
         }
+        catch ( uno::Exception& )
+        {
+            // do nothing, a default value is returned
+        }
     }
-}
 
-IMPL_LINK( SvxToolbarConfigPage, MoveHdl, Button *, pButton, void )
-{
-    MoveEntry(pButton == m_pMoveUpButton);
+    return result;
 }
 
-void SvxToolbarConfigPage::MoveEntry( bool bMoveUp )
+OUString ToolbarSaveInData::GetSystemUIName( const OUString& rResourceURL )
 {
-    SvxConfigPage::MoveEntry( bMoveUp );
+    OUString result;
 
-    // Apply change to currently selected toolbar
-    SvxConfigEntry* pToolbar = GetTopLevelSelection();
-    if ( pToolbar )
-        static_cast<ToolbarSaveInData*>(GetSaveInData())->ApplyToolbar( pToolbar );
-    else
-    {
-        SAL_WARN( "cui.customize", "SvxToolbarConfigPage::MoveEntry(): no entry" );
-        UpdateButtonStates();
-    }
-}
-
-IMPL_LINK( SvxToolbarConfigPage, ToolbarSelectHdl, MenuButton *, pButton, void )
-{
-    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
-
-    SvxConfigEntry* pToolbar =
-        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
-
-    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
-
-    OString sCommand = m_pMenu->GetItemIdent(pButton->GetCurItemId());
-
-    if (sCommand == "modtooldelete")
-    {
-        DeleteSelectedTopLevel();
-        UpdateButtonStates();
-    }
-    else if (sCommand == "modtoolrename")
-    {
-        OUString aNewName( stripHotKey( pToolbar->GetName() ) );
-        OUString aDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
-
-        VclPtrInstance< SvxNameDialog > pNameDialog( this, aNewName, aDesc );
-        pNameDialog->SetHelpId( HID_SVX_CONFIG_RENAME_TOOLBAR );
-        pNameDialog->SetText( CuiResId( RID_SVXSTR_RENAME_TOOLBAR ) );
-
-        if ( pNameDialog->Execute() == RET_OK )
-        {
-            pNameDialog->GetName(aNewName);
-
-            pToolbar->SetName( aNewName );
-            pSaveInData->ApplyToolbar( pToolbar );
-
-            // have to use remove and insert to change the name
-            m_pTopLevelListBox->RemoveEntry( nSelectionPos );
-            nSelectionPos =
-                m_pTopLevelListBox->InsertEntry( aNewName, nSelectionPos );
-            m_pTopLevelListBox->SetEntryData( nSelectionPos, pToolbar );
-            m_pTopLevelListBox->SelectEntryPos( nSelectionPos );
-        }
-    }
-}
-
-IMPL_LINK( SvxToolbarConfigPage, EntrySelectHdl, MenuButton *, pButton, void )
-{
-    bool bNeedsApply = false;
-
-    // get currently selected toolbar
-    SvxConfigEntry* pToolbar = GetTopLevelSelection();
-
-    OString sCommand = m_pEntry->GetItemIdent(pButton->GetCurItemId());
-
-    if (sCommand == "toolrename")
-    {
-        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
-        SvxConfigEntry* pEntry =
-            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
-
-        OUString aNewName( stripHotKey( pEntry->GetName() ) );
-        OUString aDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );
-
-        VclPtrInstance< SvxNameDialog > pNameDialog( this, aNewName, aDesc );
-        pNameDialog->SetHelpId( HID_SVX_CONFIG_RENAME_TOOLBAR_ITEM );
-        pNameDialog->SetText( CuiResId( RID_SVXSTR_RENAME_TOOLBAR ) );
-
-        if ( pNameDialog->Execute() == RET_OK ) {
-            pNameDialog->GetName(aNewName);
-
-            if( aNewName.isEmpty() ) //tdf#80758 - Accelerator character ("~") is passed as
-                pEntry->SetName( "~" ); // the button name in case of empty values.
-            else
-                pEntry->SetName( aNewName );
-
-            m_pContentsListBox->SetEntryText( pActEntry, aNewName );
-            bNeedsApply = true;
-        }
-    }
-    else if (sCommand == "toolrestore")
-    {
-        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
-        SvxConfigEntry* pEntry =
-            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
-
-        sal_uInt16 nSelectionPos = 0;
-
-        // find position of entry within the list
-        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
-        {
-            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
-            {
-                nSelectionPos = i;
-                break;
-            }
-        }
-
-        ToolbarSaveInData* pSaveInData =
-            static_cast<ToolbarSaveInData*>( GetSaveInData() );
-
-        OUString aSystemName =
-            pSaveInData->GetSystemUIName( pEntry->GetCommand() );
-
-        if ( !pEntry->GetName().equals( aSystemName ) )
-        {
-            pEntry->SetName( aSystemName );
-            m_pContentsListBox->SetEntryText(
-                pActEntry, stripHotKey( aSystemName ) );
-            bNeedsApply = true;
-        }
-
-        uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
-
-        try
-        {
-            GetSaveInData()->GetImageManager()->removeImages(
-                GetImageType(), aURLSeq );
-
-            // reset backup in entry
-            pEntry->SetBackupGraphic(
-                uno::Reference< graphic::XGraphic >() );
-
-            GetSaveInData()->PersistChanges(
-                GetSaveInData()->GetImageManager() );
-
-            m_pContentsListBox->GetModel()->Remove( pActEntry );
-
-            SvTreeListEntry* pNewLBEntry =
-                InsertEntryIntoUI( pEntry, nSelectionPos );
-
-            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
-                pEntry->IsVisible() ?
-                    SvButtonState::Checked : SvButtonState::Unchecked );
-
-            m_pContentsListBox->Select( pNewLBEntry );
-            m_pContentsListBox->MakeVisible( pNewLBEntry );
-
-            bNeedsApply = true;
-        }
-        catch ( uno::Exception& )
-        {
-            SAL_WARN("cui.customize", "Error restoring image");
-        }
-    }
-    else if (sCommand == "toolchange")
-    {
-        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
-        SvxConfigEntry* pEntry =
-            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
-
-        sal_uInt16 nSelectionPos = 0;
-
-        // find position of entry within the list
-        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
-        {
-            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
-            {
-                nSelectionPos = i;
-                break;
-            }
-        }
-
-        ScopedVclPtr<SvxIconSelectorDialog> pIconDialog(
-            VclPtr<SvxIconSelectorDialog>::Create( nullptr,
-                GetSaveInData()->GetImageManager(),
-                GetSaveInData()->GetParentImageManager() ));
-
-        if ( pIconDialog->Execute() == RET_OK )
-        {
-            uno::Reference< graphic::XGraphic > newgraphic =
-                pIconDialog->GetSelectedIcon();
-
-            if ( newgraphic.is() )
-            {
-                uno::Sequence< uno::Reference< graphic::XGraphic > >
-                    aGraphicSeq( 1 );
-
-                uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
-
-                if ( !pEntry->GetBackupGraphic().is() )
-                {
-                    uno::Reference< graphic::XGraphic > backup;
-                    backup = GetGraphic(
-                        GetSaveInData()->GetImageManager(), aURLSeq[ 0 ] );
-
-                    if ( backup.is() )
-                    {
-                        pEntry->SetBackupGraphic( backup );
-                    }
-                }
-
-                aGraphicSeq[ 0 ] = newgraphic;
-                try
-                {
-                    GetSaveInData()->GetImageManager()->replaceImages(
-                        GetImageType(), aURLSeq, aGraphicSeq );
-
-                    m_pContentsListBox->GetModel()->Remove( pActEntry );
-                    SvTreeListEntry* pNewLBEntry =
-                        InsertEntryIntoUI( pEntry, nSelectionPos );
-
-                    m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
-                        pEntry->IsVisible() ?
-                            SvButtonState::Checked : SvButtonState::Unchecked );
-
-                    m_pContentsListBox->Select( pNewLBEntry );
-                    m_pContentsListBox->MakeVisible( pNewLBEntry );
-
-                    GetSaveInData()->PersistChanges(
-                        GetSaveInData()->GetImageManager() );
-                }
-                catch ( uno::Exception& )
-                {
-                    SAL_WARN("cui.customize", "Error replacing image");
-                }
-            }
-        }
-    }
-    else if (sCommand == "toolreset")
-    {
-        SvTreeListEntry* pActEntry = m_pContentsListBox->GetCurEntry();
-        SvxConfigEntry* pEntry =
-            static_cast<SvxConfigEntry*>(pActEntry->GetUserData());
-
-        sal_uInt16 nSelectionPos = 0;
-
-        // find position of entry within the list
-        for ( sal_uLong i = 0; i < m_pContentsListBox->GetEntryCount(); ++i )
-        {
-            if ( m_pContentsListBox->GetEntry( nullptr, i ) == pActEntry )
-            {
-                nSelectionPos = i;
-                break;
-            }
-        }
-
-        uno::Reference< graphic::XGraphic > backup =
-            pEntry->GetBackupGraphic();
-
-        uno::Sequence< uno::Reference< graphic::XGraphic > >
-            aGraphicSeq( 1 );
-        aGraphicSeq[ 0 ] = backup;
-
-        uno::Sequence<OUString> aURLSeq { pEntry->GetCommand() };
-
-        try
-        {
-            GetSaveInData()->GetImageManager()->replaceImages(
-                GetImageType(), aURLSeq, aGraphicSeq );
-
-            m_pContentsListBox->GetModel()->Remove( pActEntry );
-
-            SvTreeListEntry* pNewLBEntry =
-                InsertEntryIntoUI( pEntry, nSelectionPos );
-
-            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
-                pEntry->IsVisible() ?
-                    SvButtonState::Checked : SvButtonState::Unchecked );
-
-            m_pContentsListBox->Select( pNewLBEntry );
-            m_pContentsListBox->MakeVisible( pNewLBEntry );
-
-            // reset backup in entry
-            pEntry->SetBackupGraphic(
-                uno::Reference< graphic::XGraphic >() );
-
-            GetSaveInData()->PersistChanges(
-                GetSaveInData()->GetImageManager() );
-        }
-        catch ( uno::Exception& )
-        {
-            SAL_WARN("cui.customize", "Error resetting image");
-        }
-    }
-
-    if ( bNeedsApply )
-    {
-        static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
-        UpdateButtonStates();
-    }
-}
-
-void SvxToolbarConfigPage::Init()
-{
-    // ensure that the UI is cleared before populating it
-    m_pTopLevelListBox->Clear();
-    m_pContentsListBox->Clear();
-
-    ReloadTopLevelListBox();
-
-    sal_Int32 nPos = 0;
-    if ( !m_aURLToSelect.isEmpty() )
-    {
-        for ( sal_Int32 i = 0 ; i < m_pTopLevelListBox->GetEntryCount(); ++i )
-        {
-            SvxConfigEntry* pData =
-                static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( i ));
-
-            if ( pData->GetCommand().equals( m_aURLToSelect ) )
-            {
-                nPos = i;
-                break;
-            }
-        }
-
-        // in future select the default toolbar: Standard
-        m_aURLToSelect = ITEM_TOOLBAR_URL;
-        m_aURLToSelect += "standardbar";
-    }
-
-    m_pTopLevelListBox->SelectEntryPos(nPos);
-    m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
-}
-
-SaveInData* SvxToolbarConfigPage::CreateSaveInData(
-    const uno::Reference< css::ui::XUIConfigurationManager >& xCfgMgr,
-    const uno::Reference< css::ui::XUIConfigurationManager >& xParentCfgMgr,
-    const OUString& aModuleId,
-    bool bDocConfig )
-{
-    return static_cast< SaveInData* >(
-        new ToolbarSaveInData( xCfgMgr, xParentCfgMgr, aModuleId, bDocConfig ));
-}
-
-ToolbarSaveInData::ToolbarSaveInData(
-    const uno::Reference < css::ui::XUIConfigurationManager >& xCfgMgr,
-    const uno::Reference < css::ui::XUIConfigurationManager >& xParentCfgMgr,
-    const OUString& aModuleId,
-    bool docConfig ) :
-
-    SaveInData              ( xCfgMgr, xParentCfgMgr, aModuleId, docConfig ),
-    pRootEntry              ( nullptr ),
-    m_aDescriptorContainer  ( ITEM_DESCRIPTOR_CONTAINER  )
-
-{
-    uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
-    // Initialize the m_xPersistentWindowState variable which is used
-    // to get the default properties of system toolbars such as name
-    uno::Reference< container::XNameAccess > xPWSS = css::ui::theWindowStateConfiguration::get( xContext );
-
-    xPWSS->getByName( aModuleId ) >>= m_xPersistentWindowState;
-}
-
-ToolbarSaveInData::~ToolbarSaveInData()
-{
-}
-
-void ToolbarSaveInData::SetSystemStyle(
-    const uno::Reference< frame::XFrame >& xFrame,
-    const OUString& rResourceURL,
-    sal_Int32 nStyle )
-{
-    // change the style using the API
-    SetSystemStyle( rResourceURL, nStyle );
-
-    // this code is a temporary hack as the UI is not updating after
-    // changing the toolbar style via the API
-    uno::Reference< css::frame::XLayoutManager > xLayoutManager;
-    vcl::Window *window = nullptr;
-
-    uno::Reference< beans::XPropertySet > xPropSet( xFrame, uno::UNO_QUERY );
-    if ( xPropSet.is() )
-    {
-        uno::Any a = xPropSet->getPropertyValue( "LayoutManager" );
-        a >>= xLayoutManager;
-    }
-
-    if ( xLayoutManager.is() )
-    {
-        uno::Reference< css::ui::XUIElement > xUIElement =
-            xLayoutManager->getElement( rResourceURL );
-
-        // check reference before we call getRealInterface. The layout manager
-        // can only provide references for elements that have been created
-        // before. It's possible that the current element is not available.
-        uno::Reference< css::awt::XWindow > xWindow;
-        if ( xUIElement.is() )
-            xWindow.set( xUIElement->getRealInterface(), uno::UNO_QUERY );
-
-        window = VCLUnoHelper::GetWindow( xWindow ).get();
-    }
-
-    if ( window != nullptr && window->GetType() == WindowType::TOOLBOX )
-    {
-        ToolBox* toolbox = static_cast<ToolBox*>(window);
-
-        if ( nStyle == 0 )
-        {
-            toolbox->SetButtonType();
-        }
-        else if ( nStyle == 1 )
-        {
-            toolbox->SetButtonType( ButtonType::TEXT );
-        }
-        if ( nStyle == 2 )
-        {
-            toolbox->SetButtonType( ButtonType::SYMBOLTEXT );
-        }
-    }
-}
-
-void ToolbarSaveInData::SetSystemStyle(
-    const OUString& rResourceURL,
-    sal_Int32 nStyle )
-{
-    if ( rResourceURL.startsWith( "private" ) &&
-         m_xPersistentWindowState.is() &&
-         m_xPersistentWindowState->hasByName( rResourceURL ) )
-    {
-        try
-        {
-            uno::Sequence< beans::PropertyValue > aProps;
-
-            uno::Any a( m_xPersistentWindowState->getByName( rResourceURL ) );
-
-            if ( a >>= aProps )
-            {
-                for ( sal_Int32 i = 0; i < aProps.getLength(); ++i )
-                {
-                    if ( aProps[ i ].Name == ITEM_DESCRIPTOR_STYLE )
-                    {
-                        aProps[ i ].Value <<= nStyle;
-                        break;
-                    }
-                }
-            }
-
-            uno::Reference< container::XNameReplace >
-                xNameReplace( m_xPersistentWindowState, uno::UNO_QUERY );
-
-            xNameReplace->replaceByName( rResourceURL, uno::Any( aProps ) );
-        }
-        catch ( uno::Exception& )
-        {
-            // do nothing, a default value is returned
-            SAL_WARN("cui.customize", "Exception setting toolbar style");
-        }
-    }
-}
-
-sal_Int32 ToolbarSaveInData::GetSystemStyle( const OUString& rResourceURL )
-{
-    sal_Int32 result = 0;
-
-    if ( rResourceURL.startsWith( "private" ) &&
-         m_xPersistentWindowState.is() &&
-         m_xPersistentWindowState->hasByName( rResourceURL ) )
-    {
-        try
-        {
-            uno::Sequence< beans::PropertyValue > aProps;
-            uno::Any a( m_xPersistentWindowState->getByName( rResourceURL ) );
-
-            if ( a >>= aProps )
-            {
-                for ( sal_Int32 i = 0; i < aProps.getLength(); ++i )
-                {
-                    if ( aProps[ i ].Name == ITEM_DESCRIPTOR_STYLE )
-                    {
-                        aProps[i].Value >>= result;
-                        break;
-                    }
-                }
-            }
-        }
-        catch ( uno::Exception& )
-        {
-            // do nothing, a default value is returned
-        }
-    }
-
-    return result;
-}
-
-OUString ToolbarSaveInData::GetSystemUIName( const OUString& rResourceURL )
-{
-    OUString result;
-
-    if ( rResourceURL.startsWith( "private" ) &&
-         m_xPersistentWindowState.is() &&
-         m_xPersistentWindowState->hasByName( rResourceURL ) )
+    if ( rResourceURL.startsWith( "private" ) &&
+         m_xPersistentWindowState.is() &&
+         m_xPersistentWindowState->hasByName( rResourceURL ) )
     {
         try
         {
@@ -3846,7 +3130,7 @@ void ToolbarSaveInData::RestoreToolbar( SvxConfigEntry* pToolbar )
 
             try
             {
-                GetImageManager()->removeImages( GetImageType(), aURLSeq );
+                GetImageManager()->removeImages( killmelater::GetImageType(), aURLSeq );
             }
             catch ( uno::Exception& )
             {
@@ -3939,524 +3223,8 @@ void ToolbarSaveInData::LoadToolbar(
     }
 }
 
-IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbarEntry, SvTreeListBox *, void )
-{
-    UpdateButtonStates();
-}
-
-void SvxToolbarConfigPage::UpdateButtonStates()
-{
-    PopupMenu* pPopup = m_pModifyCommandButton->GetPopupMenu();
-    pPopup->EnableItem(pPopup->GetItemId("toolrename"), false);
-    pPopup->EnableItem(pPopup->GetItemId("toolrestore"), false);
-    pPopup->EnableItem(pPopup->GetItemId("toolchange"), false);
-    pPopup->EnableItem(pPopup->GetItemId("toolreset"), false);
-
-    m_pDeleteCommandButton->Enable( false );
-    m_pAddSeparatorButton->Enable( false );
-
-    m_pDescriptionField->SetText("");
-
-    SvTreeListEntry* selection = m_pContentsListBox->GetCurEntry();
-    if ( m_pContentsListBox->GetEntryCount() == 0 || selection == nullptr )
-    {
-        return;
-    }
-
-    SvxConfigEntry* pEntryData = static_cast<SvxConfigEntry*>(selection->GetUserData());
-    if ( pEntryData->IsSeparator() )
-    {
-        m_pDeleteCommandButton->Enable();
-    }
-    else
-    {
-        pPopup->EnableItem(pPopup->GetItemId("toolrename"));
-        pPopup->EnableItem(pPopup->GetItemId("toolchange"));
-
-        m_pDeleteCommandButton->Enable();
-        m_pAddSeparatorButton->Enable();
-
-        if ( !pEntryData->IsUserDefined() )
-            pPopup->EnableItem(pPopup->GetItemId("toolrestore"));
-
-        if ( pEntryData->IsIconModified() )
-            pPopup->EnableItem(pPopup->GetItemId("toolreset"));
-
-        m_pDescriptionField->SetText(pEntryData->GetHelpText());
-    }
-}
-
-short SvxToolbarConfigPage::QueryReset()
-{
-    OUString msg = CuiResId( RID_SVXSTR_CONFIRM_TOOLBAR_RESET );
-
-    OUString saveInName = m_pSaveInListBox->GetEntry(
-        m_pSaveInListBox->GetSelectEntryPos() );
-
-    OUString label = replaceSaveInName( msg, saveInName );
-
-    ScopedVclPtrInstance< QueryBox > qbox( this, WB_YES_NO, label );
-
-    return qbox->Execute();
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void )
-{
-    m_pContentsListBox->Clear();
-
-    SvxConfigEntry* pToolbar = GetTopLevelSelection();
-    if ( pToolbar == nullptr )
-    {
-        m_pModifyTopLevelButton->Enable( false );
-        m_pModifyCommandButton->Enable( false );
-        m_pAddCommandsButton->Enable( false );
-        m_pAddSeparatorButton->Enable( false );
-        m_pDeleteCommandButton->Enable( false );
-        m_pResetTopLevelButton->Enable( false );
-        m_pIconsOnlyRB->Enable( false );
-        m_pTextOnlyRB->Enable( false );
-        m_pIconsAndTextRB->Enable( false );
-
-        return;
-    }
-
-    m_pModifyTopLevelButton->Enable();
-    m_pModifyCommandButton->Enable();
-    m_pAddCommandsButton->Enable();
-    m_pResetTopLevelButton->Enable( !pToolbar->IsRenamable() );
-
-    m_pIconsOnlyRB->Enable();
-    m_pTextOnlyRB->Enable();
-    m_pIconsAndTextRB->Enable();
-
-    PopupMenu* pPopup = m_pModifyTopLevelButton->GetPopupMenu();
-
-    pPopup->EnableItem(m_pMenu->GetItemId("modtooldelete"), pToolbar->IsDeletable());
-    pPopup->EnableItem(m_pMenu->GetItemId("modtoolrename"), pToolbar->IsRenamable());
-
-    switch( pToolbar->GetStyle() )
-    {
-        case 0:
-        {
-            m_pIconsOnlyRB->Check();
-            break;
-        }
-        case 1:
-        {
-            m_pTextOnlyRB->Check();
-            break;
-        }
-        case 2:
-        {
-            m_pIconsAndTextRB->Check();
-            break;
-        }
-    }
-
-    SvxEntries* pEntries = pToolbar->GetEntries();
-    SvxEntries::const_iterator iter = pEntries->begin();
-
-    for ( ; iter != pEntries->end(); ++iter )
-    {
-        SvxConfigEntry* pEntry = *iter;
-
-        SvTreeListEntry* pNewLBEntry = InsertEntryIntoUI( pEntry );
-
-        if(pEntry->IsSeparator())
-            m_pContentsListBox->SetCheckButtonInvisible( pNewLBEntry );
-
-        if (pEntry->IsBinding())
-        {
-            m_pContentsListBox->SetCheckButtonState( pNewLBEntry,
-                pEntry->IsVisible() ? SvButtonState::Checked : SvButtonState::Unchecked );
-        }
-        else
-        {
-            m_pContentsListBox->SetCheckButtonState(
-                pNewLBEntry, SvButtonState::Tristate );
-        }
-    }
-
-    UpdateButtonStates();
-}
-
-IMPL_LINK( SvxToolbarConfigPage, StyleChangeHdl, Button*, pButton, void )
-{
-    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
-
-    SvxConfigEntry* pToolbar =
-        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
-
-    ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );
-
-    if (pButton == m_pIconsOnlyRB)
-    {
-        pToolbar->SetStyle( 0 );
-        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 0 );
-
-        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
-    }
-    else if (pButton == m_pTextOnlyRB)
-    {
-        pToolbar->SetStyle( 1 );
-        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 1 );
-
-        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
-    }
-    else if (pButton == m_pIconsAndTextRB)
-    {
-        pToolbar->SetStyle( 2 );
-        pSaveInData->SetSystemStyle( m_xFrame, pToolbar->GetCommand(), 2 );
-
-        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
-    }
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, NewToolbarHdl, Button *, void )
-{
-    OUString prefix = CuiResId( RID_SVXSTR_NEW_TOOLBAR );
-
-    OUString aNewName =
-        generateCustomName( prefix, GetSaveInData()->GetEntries() );
-
-    OUString aNewURL =
-        generateCustomURL( GetSaveInData()->GetEntries() );
-
-    VclPtrInstance< SvxNewToolbarDialog > pNameDialog( nullptr, aNewName );
-
-    for ( sal_Int32 i = 0 ; i < m_pSaveInListBox->GetEntryCount(); ++i )
-    {
-        SaveInData* pData =
-            static_cast<SaveInData*>(m_pSaveInListBox->GetEntryData( i ));
-
-        const sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->InsertEntry(
-            m_pSaveInListBox->GetEntry( i ) );
-
-        pNameDialog->m_pSaveInListBox->SetEntryData( nInsertPos, pData );
-    }
-
-    pNameDialog->m_pSaveInListBox->SelectEntryPos(
-        m_pSaveInListBox->GetSelectEntryPos() );
-
-    if ( pNameDialog->Execute() == RET_OK )
-    {
-        aNewName = pNameDialog->GetName();
-
-        sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->GetSelectEntryPos();
-
-        ToolbarSaveInData* pData = static_cast<ToolbarSaveInData*>(
-            pNameDialog->m_pSaveInListBox->GetEntryData( nInsertPos ));
-
-        if ( GetSaveInData() != pData )
-        {
-            m_pSaveInListBox->SelectEntryPos( nInsertPos );
-            m_pSaveInListBox->GetSelectHdl().Call(*m_pSaveInListBox);
-        }
-
-        SvxConfigEntry* pToolbar =
-            new SvxConfigEntry( aNewName, aNewURL, true );
-
-        pToolbar->SetUserDefined();
-        pToolbar->SetMain();
-
-        pData->CreateToolbar( pToolbar );
-
-        nInsertPos = m_pTopLevelListBox->InsertEntry( pToolbar->GetName() );
-        m_pTopLevelListBox->SetEntryData( nInsertPos, pToolbar );
-        m_pTopLevelListBox->SelectEntryPos( nInsertPos );
-        m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
-
-        pData->SetModified();
-    }
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, AddCommandsHdl, Button *, void )
-{
-    if ( m_pSelectorDlg == nullptr )
-    {
-        // Create Script Selector which shows slot commands
-        m_pSelectorDlg = VclPtr<SvxScriptSelectorDialog>::Create( this, true, m_xFrame );
-
-        // Position the Script Selector over the Add button so it is
-        // beside the menu contents list and does not obscure it
-        m_pSelectorDlg->SetPosPixel( m_pAddCommandsButton->GetPosPixel() );
-
-        m_pSelectorDlg->SetAddHdl(
-            LINK( this, SvxToolbarConfigPage, AddFunctionHdl ) );
-    }
-
-    m_pSelectorDlg->SetImageProvider( GetSaveInData() );
-
-    m_pSelectorDlg->Execute();
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, AddSeparatorHdl, Button *, void )
-{
-    // get currently selected toolbar
-    SvxConfigEntry* pToolbar = GetTopLevelSelection();
-
-    SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
-    pNewEntryData->SetUserDefined();
-
-    SvTreeListEntry* pNewLBEntry = InsertEntry( pNewEntryData );
-
-    m_pContentsListBox->SetCheckButtonInvisible( pNewLBEntry );
-    m_pContentsListBox->SetCheckButtonState(
-        pNewLBEntry, SvButtonState::Tristate );
-
-    static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );
-    UpdateButtonStates();
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, DeleteCommandHdl, Button *, void )
-{
-    DeleteSelectedContent();
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, ResetTopLevelHdl, Button *, void )
-{
-    sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectEntryPos();
-
-    SvxConfigEntry* pToolbar =
-        static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
-
-    ScopedVclPtrInstance<MessageDialog> qbox(this,
-        CuiResId(RID_SVXSTR_CONFIRM_RESTORE_DEFAULT), VclMessageType::Question, VclButtonsType::YesNo);
-
-    if ( qbox->Execute() == RET_YES )
-    {
-        ToolbarSaveInData* pSaveInData_ =
-        static_cast<ToolbarSaveInData*>(GetSaveInData());
-
-        pSaveInData_->RestoreToolbar( pToolbar );
-
-        m_pTopLevelListBox->GetSelectHdl().Call( *m_pTopLevelListBox );
-    }
-}
-
-IMPL_LINK_NOARG( SvxToolbarConfigPage, AddFunctionHdl, SvxScriptSelectorDialog&, void )
-{
-    AddFunction();
-}
-
-void SvxToolbarConfigPage::AddFunction(
-    SvTreeListEntry* pTarget, bool bFront )
-{
-    SvTreeListEntry* pNewLBEntry =
-        SvxConfigPage::AddFunction( pTarget, bFront, true/*bAllowDuplicates*/ );
-
-    SvxConfigEntry* pEntry = static_cast<SvxConfigEntry*>(pNewLBEntry->GetUserData());
-
-    if ( pEntry->IsBinding() )
-    {
-        pEntry->SetVisible( true );
-        m_pContentsListBox->SetCheckButtonState(
-            pNewLBEntry, SvButtonState::Checked );
-    }
-    else
-    {
-        m_pContentsListBox->SetCheckButtonState(
-            pNewLBEntry, SvButtonState::Tristate );
-    }
-
-    // get currently selected toolbar and apply change
-    SvxConfigEntry* pToolbar = GetTopLevelSelection();
-
-    if ( pToolbar != nullptr )
-    {
-        static_cast<ToolbarSaveInData*>( GetSaveInData() )->ApplyToolbar( pToolbar );
-    }
-}
-
-SvxToolbarEntriesListBox::SvxToolbarEntriesListBox(vcl::Window* pParent, SvxToolbarConfigPage* pPg)
-    : SvxMenuEntriesListBox(pParent, pPg)
-    , pPage(pPg)
-{
-    m_pButtonData = new SvLBoxButtonData( this );
-    BuildCheckBoxButtonImages( m_pButtonData );
-    EnableCheckButton( m_pButtonData );
-}
-
-SvxToolbarEntriesListBox::~SvxToolbarEntriesListBox()
-{
-    disposeOnce();
-}
-
-void SvxToolbarEntriesListBox::dispose()
-{
-    delete m_pButtonData;
-    m_pButtonData = nullptr;
-
-    pPage.clear();
-    SvxMenuEntriesListBox::dispose();
-}
-
-void SvxToolbarEntriesListBox::BuildCheckBoxButtonImages( SvLBoxButtonData* pData )
-{
-    // Build checkbox images according to the current application
-    // settings. This is necessary to be able to have correct colors
-    // in all color modes, like high contrast.
-    const AllSettings& rSettings = Application::GetSettings();
-
-    ScopedVclPtrInstance< VirtualDevice > pVDev;
-    Size            aSize( 26, 20 );
-
-    pVDev->SetOutputSizePixel( aSize );
-
-    Image aImage = GetSizedImage( *pVDev.get(), aSize,
-        CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Default ));
-
-    // Fill button data struct with new images
-    pData->SetImage(SvBmp::UNCHECKED,     aImage);
-    pData->SetImage(SvBmp::CHECKED,       GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Checked )) );
-    pData->SetImage(SvBmp::HICHECKED,     GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Checked | DrawButtonFlags::Pressed )) );
-    pData->SetImage(SvBmp::HIUNCHECKED,   GetSizedImage( *pVDev.get(), aSize, CheckBox::GetCheckImage( rSettings, DrawButtonFlags::Default | DrawButtonFlags::Pressed)) );
-    pData->SetImage(SvBmp::TRISTATE,      GetSizedImage( *pVDev.get(), aSize, Image() ) ); // Use tristate bitmaps to have no checkbox for separator entries
-    pData->SetImage(SvBmp::HITRISTATE,    GetSizedImage( *pVDev.get(), aSize, Image() ) );
-
-    // Get image size
-    m_aCheckBoxImageSizePixel = aImage.GetSizePixel();
-}
-
-Image SvxToolbarEntriesListBox::GetSizedImage(
-    VirtualDevice& rVDev, const Size& aNewSize, const Image& aImage )
-{
-    // Create new checkbox images for treelistbox. They must have a
-    // decent width to have a clear column for the visibility checkbox.
-
-    // Standard transparent color is light magenta as is won't be
-    // used for other things
-    Color   aFillColor( COL_LIGHTMAGENTA );
-
-    // Position image at the center of (width-2),(height) rectangle.
-    // We need 2 pixels to have a bigger border to the next button image
-    sal_uInt16  nPosX = std::max( (sal_uInt16) (((( aNewSize.Width() - 2 ) - aImage.GetSizePixel().Width() ) / 2 ) - 1), (sal_uInt16) 0 );
-    sal_uInt16  nPosY = std::max( (sal_uInt16) (((( aNewSize.Height() - 2 ) - aImage.GetSizePixel().Height() ) / 2 ) + 1), (sal_uInt16) 0 );
-    Point   aPos( nPosX > 0 ? nPosX : 0, nPosY > 0 ? nPosY : 0 );
-    rVDev.SetFillColor( aFillColor );
-    rVDev.SetLineColor( aFillColor );
-    rVDev.DrawRect( ::tools::Rectangle( Point(), aNewSize ));
-    rVDev.DrawImage( aPos, aImage );
-
-    // Draw separator line 2 pixels left from the right border
-    Color aLineColor = GetDisplayBackground().GetColor().IsDark() ? Color( COL_WHITE ) : Color( COL_BLACK );
-    rVDev.SetLineColor( aLineColor );
-    rVDev.DrawLine( Point( aNewSize.Width()-3, 0 ), Point( aNewSize.Width()-3, aNewSize.Height()-1 ));
-
-    // Create new image that uses the fillcolor as transparent
-    return Image(BitmapEx(rVDev.GetBitmap(Point(), aNewSize), aFillColor));
-}
-
-void SvxToolbarEntriesListBox::DataChanged( const DataChangedEvent& rDCEvt )
-{
-    SvTreeListBox::DataChanged( rDCEvt );
-
-    if (( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) &&
-        ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ))
-    {
-        BuildCheckBoxButtonImages( m_pButtonData );
-        Invalidate();
-    }
-}
-
-
-void SvxToolbarEntriesListBox::ChangeVisibility( SvTreeListEntry* pEntry )
-{
-    if ( pEntry != nullptr )
-    {
-        SvxConfigEntry* pEntryData =
-            static_cast<SvxConfigEntry*>(pEntry->GetUserData());
-
-        if ( pEntryData->IsBinding() )
-        {
-            pEntryData->SetVisible( !pEntryData->IsVisible() );
-
-            SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
-
-            ToolbarSaveInData* pToolbarSaveInData = static_cast<ToolbarSaveInData*>(
-                pPage->GetSaveInData() );
-
-               pToolbarSaveInData->ApplyToolbar( pToolbar );
-
-            SetCheckButtonState( pEntry, pEntryData->IsVisible() ?
-                SvButtonState::Checked : SvButtonState::Unchecked );
-        }
-    }
-}
-
-void SvxToolbarEntriesListBox::CheckButtonHdl()
-{
-    ChangeVisibility( GetHdlEntry() );
-}
-
-void SvxToolbarEntriesListBox::KeyInput( const KeyEvent& rKeyEvent )
-{
-    // space key will change visibility of toolbar items
-    if ( rKeyEvent.GetKeyCode() == KEY_SPACE )
-    {
-        ChangeVisibility( GetCurEntry() );
-    }
-    else
-    {
-        // pass on to superclass
-        SvxMenuEntriesListBox::KeyInput( rKeyEvent );
-    }
-}
-
-TriState SvxToolbarEntriesListBox::NotifyMoving(
-    SvTreeListEntry* pTarget, SvTreeListEntry* pSource,
-    SvTreeListEntry*& rpNewParent, sal_uLong& rNewChildPos)
-{
-    TriState result = SvxMenuEntriesListBox::NotifyMoving(
-        pTarget, pSource, rpNewParent, rNewChildPos );
-
-    if ( result )
-    {
-        // Instant Apply changes to UI
-        SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
-        if ( pToolbar != nullptr )
-        {
-            ToolbarSaveInData* pSaveInData =
-                static_cast<ToolbarSaveInData*>( pPage->GetSaveInData() );
-            pSaveInData->ApplyToolbar( pToolbar );
-        }
-    }
-
-    return result;
-}
-
-TriState SvxToolbarEntriesListBox::NotifyCopying(
-    SvTreeListEntry*  pTarget,
-    SvTreeListEntry*  pSource,
-    SvTreeListEntry*& rpNewParent,
-    sal_uLong&      rNewChildPos)
-{
-    (void)pSource;
-    (void)rpNewParent;
-    (void)rNewChildPos;
-
-    if ( !m_bIsInternalDrag )
-    {
-        // if the target is NULL then add function to the start of the list
-        static_cast<SvxToolbarConfigPage*>(pPage.get())->AddFunction( pTarget, pTarget == nullptr );
-
-        // Instant Apply changes to UI
-        SvxConfigEntry* pToolbar = pPage->GetTopLevelSelection();
-        if ( pToolbar != nullptr )
-        {
-            ToolbarSaveInData* pSaveInData =
-                static_cast<ToolbarSaveInData*>( pPage->GetSaveInData() );
-            pSaveInData->ApplyToolbar( pToolbar );
-        }
-
-        // AddFunction already adds the listbox entry so return TRISTATE_FALSE
-        // to stop another listbox entry being added
-        return TRISTATE_FALSE;
-    }
-
-    // Copying is only allowed from external controls, not within the listbox
-    return TRISTATE_FALSE;
-}
+//SvxToolbarConfigPage class was here (second part)
+//SvxToolbarEntriesListBox class was here
 
 SvxNewToolbarDialog::SvxNewToolbarDialog(vcl::Window* pWindow, const OUString& rName)
     : ModalDialog(pWindow, "NewToolbarDialog", "cui/ui/newtoolbardialog.ui")
@@ -4512,9 +3280,9 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window *pWindow,
     pTbSymbol->SetPageScroll( true );
 
     m_nExpectedSize = 16;
-    if (GetImageType() & css::ui::ImageType::SIZE_LARGE)
+    if (killmelater::GetImageType() & css::ui::ImageType::SIZE_LARGE)
         m_nExpectedSize = 26;
-    else if (GetImageType() & css::ui::ImageType::SIZE_32)
+    else if (killmelater::GetImageType() & css::ui::ImageType::SIZE_32)
         m_nExpectedSize = 32;
 
     if ( m_nExpectedSize != 16 )
@@ -4578,7 +3346,7 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window *pWindow,
     uno::Sequence< OUString > names;
     if ( m_xImportedImageManager.is() )
     {
-        names = m_xImportedImageManager->getAllImageNames( GetImageType() );
+        names = m_xImportedImageManager->getAllImageNames( killmelater::GetImageType() );
         for ( sal_Int32 n = 0; n < names.getLength(); ++n )
             aImageInfo1.insert( ImageInfo::value_type( names[n], false ));
     }
@@ -4588,7 +3356,7 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window *pWindow,
     while ( pConstIter != aImageInfo1.end() )
     {
         name[ 0 ] = pConstIter->first;
-        uno::Sequence< uno::Reference< graphic::XGraphic> > graphics = m_xImportedImageManager->getImages( GetImageType(), name );
+        uno::Sequence< uno::Reference< graphic::XGraphic> > graphics = m_xImportedImageManager->getImages( killmelater::GetImageType(), name );
         if ( graphics.getLength() > 0 )
         {
             Image img = Image( graphics[ 0 ] );
@@ -4608,12 +3376,12 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window *pWindow,
 
     if ( m_xParentImageManager.is() )
     {
-        names = m_xParentImageManager->getAllImageNames( GetImageType() );
+        names = m_xParentImageManager->getAllImageNames( killmelater::GetImageType() );
         for ( sal_Int32 n = 0; n < names.getLength(); ++n )
             aImageInfo.insert( ImageInfo::value_type( names[n], false ));
     }
 
-    names = m_xImageManager->getAllImageNames( GetImageType() );
+    names = m_xImageManager->getAllImageNames( killmelater::GetImageType() );
     for ( sal_Int32 n = 0; n < names.getLength(); ++n )
     {
         ImageInfo::iterator pIter = aImageInfo.find( names[n] );
@@ -4633,9 +3401,9 @@ SvxIconSelectorDialog::SvxIconSelectorDialog( vcl::Window *pWindow,
         try
         {
             if ( pConstIter->second )
-                graphics = m_xImageManager->getImages( GetImageType(), name );
+                graphics = m_xImageManager->getImages( killmelater::GetImageType(), name );
             else

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list