[GSoC] Move all fill style tabs inside area tab

Change-Id: I89e84b7b3c7075ad4107e7bc444ea5c07bc90795
Reviewed-on: https://gerrit.libreoffice.org/27866
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
diff --git a/cui/source/dialogs/sdrcelldlg.cxx b/cui/source/dialogs/sdrcelldlg.cxx
index 3fd53db..d6e9244cb7 100644
--- a/cui/source/dialogs/sdrcelldlg.cxx
+++ b/cui/source/dialogs/sdrcelldlg.cxx
@@ -51,10 +51,6 @@
        rAreaPage.SetGradientList( mpGradientList );
        rAreaPage.SetHatchingList( mpHatchingList );
        rAreaPage.SetBitmapList( mpBitmapList );
        rAreaPage.SetPageType( PageType::Area );
        rAreaPage.SetDlgType( 1 );
        rAreaPage.SetPos( 0 );
        rAreaPage.Construct();
        rAreaPage.ActivatePage( mrOutAttrs );
    }
    else if (nId == m_nBorderPageId)
diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index 0c103cc..7f1decb 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -35,9 +35,60 @@
#include <svx/PaletteManager.hxx>
#include <svx/svdview.hxx>

#define NO_BUTTON_SELECTED -1

class SdrModel;
class SvxBitmapCtl;

/************************************************************************/
class ButtonBox
{
    private:
        sal_Int32 mnCurrentButton;
        std::vector< VclPtr<PushButton> > maButtonList;
        std::map< VclPtr<PushButton>, sal_Int32 > maButtonToPos;
        void SelectButtonImpl( sal_Int32 nPos )
        {
            if(mnCurrentButton != NO_BUTTON_SELECTED)
            {
                maButtonList[mnCurrentButton]->SetPressed(false);
            }
            mnCurrentButton = nPos;
            maButtonList[mnCurrentButton]->SetPressed(true);
        };
    public:
        ButtonBox()
        {
            mnCurrentButton = NO_BUTTON_SELECTED;
        };
        ~ButtonBox() {};
        void AddButton(VclPtr<PushButton> pButton)
        {
            maButtonList.push_back(pButton);
            maButtonToPos.insert( std::make_pair(pButton, maButtonList.size() - 1) );
        }
        sal_Int32 GetCurrentButtonPos() { return mnCurrentButton; }
        sal_Int32 GetButtonPos( VclPtr<PushButton> pButton )
        {
            std::map< VclPtr<PushButton>, sal_Int32 >::const_iterator aBtnPos = maButtonToPos.find(pButton);
            if(aBtnPos != maButtonToPos.end())
                return aBtnPos->second;
            else
                return -1;
        }
        void SelectButton( VclPtr<PushButton> pButton)
        {
            sal_Int32 nPos = GetButtonPos(pButton);
            if(nPos != -1)
                SelectButtonImpl(nPos);
        }
        void clear()
        {
            mnCurrentButton = NO_BUTTON_SELECTED;
            maButtonList.clear();
        };
};

enum class PageType
{
    Area,
@@ -47,12 +98,9 @@
    Color,
    Shadow,
    Transparence,
    Unknown = 0xFFFF
    Unknown = 0xFFF
};


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

class SvxAreaTabDialog : public SfxTabDialog
{
    sal_uInt16            m_nAreaTabPage;
@@ -86,9 +134,7 @@
    ChangeType          mnGradientListState;
    ChangeType          mnHatchingListState;

    PageType            mnPageType;
    sal_Int32           mnPos;
    bool                mbAreaTP;

    virtual void        PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) override;

@@ -199,74 +245,57 @@
    using TabPage::DeactivatePage;
    static const sal_uInt16 pAreaRanges[];
private:
    VclPtr<ListBox>            m_pTypeLB;
    ScopedVclPtr<SfxTabPage>   m_pFillTabPage;
    VclPtr<VclBox>             m_pFillTab;
    VclPtr<PushButton>         m_pBtnNone;
    VclPtr<PushButton>         m_pBtnColor;
    VclPtr<PushButton>         m_pBtnGradient;
    VclPtr<PushButton>         m_pBtnHatch;
    VclPtr<PushButton>         m_pBtnBitmap;
    VclPtr<PushButton>         m_pBtnPattern;
    ButtonBox                  maBox;

    VclPtr<VclBox>             m_pFillLB;
    VclPtr<ColorLB>            m_pLbColor;
    VclPtr<GradientLB>         m_pLbGradient;
    VclPtr<HatchingLB>         m_pLbHatching;
    VclPtr<BitmapLB>           m_pLbBitmap;
    VclPtr<SvxXRectPreview>    m_pCtlBitmapPreview;
    VclPtr<SvxXRectPreview>    m_pCtlXRectPreview;

    const SfxItemSet&   m_rOutAttrs;

    SdrModel*           mpDrawModel;
    XColorListRef         m_pColorList;
    XGradientListRef      m_pGradientList;
    XHatchListRef         m_pHatchingList;
    XBitmapListRef        m_pBitmapList;
    XPatternListRef       m_pPatternList;

    // Placeholders for pointer-based entries; these will be inited
    // to point to these so that the page is usable without that
    // SvxAreaTabDialog has to call the setter methods (e.g. SetColorChgd).
    // Without that the pages used in SvxAreaTabDialog are not usable
    ChangeType          maFixed_ChangeType;
    bool                maFixed_sal_Bool;

    ChangeType*         m_pnColorListState;
    ChangeType*         m_pnBitmapListState;
    ChangeType*         m_pnPatternListState;
    ChangeType*         m_pnGradientListState;
    ChangeType*         m_pnHatchingListState;

    PageType   m_nPageType;
    sal_uInt16 m_nDlgType;
    sal_Int32  m_nPos;

    bool*               m_pbAreaTP;

    sal_Int32           m_nPos;
    XFillAttrSetItem    m_aXFillAttr;
    SfxItemSet&         m_rXFSet;

    MapUnit             m_ePoolUnit;
    DECL_LINK(SelectFillTypeHdl_Impl, Button*, void);

    DECL_LINK(SelectDialogTypeHdl_Impl, ListBox&, void);
    DECL_LINK( ModifyColorHdl_Impl, ListBox&, void );
    DECL_LINK( ModifyGradientHdl_Impl, ListBox&, void );
    DECL_LINK( ModifyHatchingHdl_Impl, ListBox&, void );
    DECL_LINK( ModifyBitmapHdl_Impl, ListBox&, void );

    DECL_LINK( ModifyTileHdl_Impl, Edit&, void );
    DECL_LINK( ModifyTileClickHdl_Impl, Button*, void );
    DECL_LINK( ClickScaleHdl_Impl, Button*, void );
    void ClickInvisibleHdl_Impl();
    void ClickHatchingHdl_Impl();
    void ClickGradientHdl_Impl();
    void ClickColorHdl_Impl();
    void ClickBitmapHdl_Impl();

    template< typename TabPage >
    bool FillItemSet_Impl( SfxItemSet* );
    template< typename TabPage >
    void Reset_Impl( const SfxItemSet* );
    template< typename TabPage >
    DeactivateRC DeactivatePage_Impl( SfxItemSet* pSet );
public:
    SvxAreaTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs );
    virtual ~SvxAreaTabPage() override;
    virtual void dispose() override;

    void    Construct();

    static VclPtr<SfxTabPage> Create( vcl::Window*, const SfxItemSet* );
    static const sal_uInt16* GetRanges() { return pAreaRanges; }

    virtual bool FillItemSet( SfxItemSet* ) override;
    virtual void Reset( const SfxItemSet * ) override;
    virtual void ChangesApplied() override;
    virtual void ActivatePage( const SfxItemSet& rSet ) override;
    virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
    virtual void PointChanged( vcl::Window* pWindow, RectPoint eRP ) override;
@@ -277,12 +306,11 @@
    void    SetHatchingList( XHatchListRef const & pHtchLst)
                { m_pHatchingList = pHtchLst; }
    void    SetBitmapList( XBitmapListRef const & pBmpLst) { m_pBitmapList = pBmpLst; }
    void    SetPatternList( XPatternListRef const &pPtrnLst ) { m_pPatternList = pPtrnLst; }
    void    SetDrawModel( SdrModel* pModel ) { mpDrawModel = pModel; }

    void    SetPageType( PageType nInType ) { m_nPageType = nInType; }
    void    SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
    void    SetPos( sal_uInt16 nInPos ) { m_nPos = nInPos; }
    void    SetAreaTP( bool* pIn ) { m_pbAreaTP = pIn; }
    virtual void PageCreated(const SfxAllItemSet& aSet) override;
    void    CreatePage(sal_Int32 nId, SfxTabPage& pTab);
    void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
    void    SetGrdChgd( ChangeType* pIn ) { m_pnGradientListState = pIn; }
    void    SetHtchChgd( ChangeType* pIn ) { m_pnHatchingListState = pIn; }
@@ -379,10 +407,7 @@

    ChangeType*         m_pnGradientListState;
    ChangeType*         m_pnColorListState;
    PageType*           m_pPageType;
    sal_uInt16          m_nDlgType;
    sal_Int32*          m_pPos;
    bool*               m_pbAreaTP;

    XFillStyleItem      m_aXFStyleItem;
    XFillGradientItem   m_aXGradientItem;
@@ -400,6 +425,7 @@
    DECL_LINK( ChangeAutoStepHdl_Impl, CheckBox&, void );
    DECL_LINK( ModifiedSliderHdl_Impl, Slider*, void );
    void ModifiedHdl_Impl(void*);
    long CheckChanges_Impl();

    void SetControlState_Impl( css::awt::GradientStyle eXGS );
    sal_Int32 SearchGradientList(const OUString& rGradientName);
@@ -421,12 +447,7 @@
    void    SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
    void    SetGradientList( XGradientListRef const & pGrdLst)
                { m_pGradientList = pGrdLst; }

    void    SetPageType( PageType* pInType ) { m_pPageType = pInType; }
    void    SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
    void    SetPos( sal_Int32* pInPos ) { m_pPos = pInPos; }
    void    SetAreaTP( bool* pIn ) { m_pbAreaTP = pIn; }

    void    SetPos( sal_Int32* pPos ) { m_pPos = pPos; }
    void    SetGrdChgd( ChangeType* pIn ) { m_pnGradientListState = pIn; }
    void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
};
@@ -458,10 +479,7 @@

    ChangeType*         m_pnHatchingListState;
    ChangeType*         m_pnColorListState;
    PageType*           m_pPageType;
    sal_uInt16          m_nDlgType;
    sal_Int32*          m_pPos;
    bool*               m_pbAreaTP;

    XFillStyleItem      m_aXFStyleItem;
    XFillHatchItem      m_aXHatchItem;
@@ -505,11 +523,7 @@
    void    SetHatchingList( XHatchListRef const & pHtchLst)
                { m_pHatchingList = pHtchLst; }

    void    SetPageType( PageType* pInType ) { m_pPageType = pInType; }
    void    SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
    void    SetPos( sal_Int32* pInPos ) { m_pPos = pInPos; }
    void    SetAreaTP( bool* pIn ) { m_pbAreaTP = pIn; }

    void    SetPos( sal_Int32* pPos ) { m_pPos = pPos; }
    void    SetHtchChgd( ChangeType* pIn ) { m_pnHatchingListState = pIn; }
    void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }

@@ -551,16 +565,13 @@

    double                     m_fObjectWidth;
    double                     m_fObjectHeight;
    PageType*                  m_nPageType;
    sal_uInt16                 m_nDlgType;
    sal_Int32*                 m_nPos;

    bool*                      m_pbAreaTP;
    sal_Int32*                 m_pPos;

    XFillAttrSetItem           m_aXFillAttr;
    SfxItemSet&                m_rXFSet;
    const SdrView*             mpView;
    MapUnit                    mePoolUnit;
    FieldUnit                  meDlgUnit;
    Size                       rBitmapSize;
    Size                       rFilledSize;
    Size                       rZoomedSize;
@@ -599,11 +610,7 @@
    virtual void PointChanged( vcl::Window* pWindow, RectPoint eRP ) override;

    void    SetBitmapList( const XBitmapListRef& pBmpLst) { m_pBitmapList = pBmpLst; }

    void    SetPageType( PageType* pInType ) { m_nPageType = pInType; }
    void    SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
    void    SetPos( sal_Int32* pInPos ) { m_nPos = pInPos; }
    void    SetAreaTP( bool* pIn ) { m_pbAreaTP = pIn; }
    void    SetPos( sal_Int32* pPos ) { m_pPos = pPos; }
    void    SetBmpChgd( ChangeType* pIn ) { m_pnBitmapListState = pIn; }
};

@@ -634,10 +641,7 @@

    ChangeType*         m_pnPatternListState;
    ChangeType*         m_pnColorListState;
    PageType*           m_pPageType;
    sal_uInt16          m_nDlgType;
    sal_Int32*          m_pPos;
    bool*               m_pbAreaTP;

    bool                m_bPtrnChanged;

@@ -653,6 +657,9 @@
    DECL_LINK( ClickRenameHdl_Impl, SvxPresetListBox*, void );
    DECL_LINK( ClickDeleteHdl_Impl, SvxPresetListBox*, void );

    long CheckChanges_Impl();
    sal_Int32 SearchPatternList(const OUString& rPatternName);

public:
    SvxPatternTabPage( vcl::Window* pParent, const SfxItemSet& rInAttrs  );
    virtual ~SvxPatternTabPage() override;
@@ -671,12 +678,7 @@

    void    SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
    void    SetPatternList( XPatternListRef const & pPatternList) { m_pPatternList = pPatternList; }

    void    SetPageType( PageType* pInType ) { m_pPageType = pInType; }
    void    SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
    void    SetPos( sal_Int32* pInPos ) { m_pPos = pInPos; }
    void    SetAreaTP( bool* pIn ) { m_pbAreaTP = pIn; }

    void    SetPos( sal_Int32* pPos ) { m_pPos = pPos; }
    void    SetPtrnChgd( ChangeType* pIn ) { m_pnPatternListState = pIn; }
    void    SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
    void    ChangeColor_Impl();
@@ -687,7 +689,7 @@
enum class ColorModel
{
    RGB,
    CMYK // can be extend with more models, e.g. HSV
    CMYK
};

class SvxColorTabPage : public SfxTabPage
@@ -742,10 +744,7 @@
    XColorListRef         pColorList;

    ChangeType*         pnColorListState;
    PageType*           pPageType;
    sal_uInt16          nDlgType;
    sal_Int32*          pPos;
    bool*               pbAreaTP;

    XFillStyleItem      aXFStyleItem;
    XFillColorItem      aXFillColorItem;
@@ -797,13 +796,11 @@
    virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;

    void             SetPropertyList( XPropertyListType t, const XPropertyListRef &xRef );

    void    SetColorList( const XColorListRef& pColList );

    void    SetPageType( PageType* pInType ) { pPageType = pInType; }
    void    SetDlgType( sal_uInt16 nInType ) { nDlgType = nInType; }
    void    SetPos( sal_Int32* pInPos ) { pPos = pInPos; }
    void    SetAreaTP( bool* pIn ) { pbAreaTP = pIn; }
    void    SetColorList( const XColorListRef& pColList );
    void    SaveToViewFrame( SfxViewFrame *pViewFrame );
    void    SetupForViewFrame( SfxViewFrame *pViewFrame );


    void    SetColorChgd( ChangeType* pIn ) { pnColorListState = pIn; }

diff --git a/cui/source/tabpages/tabarea.cxx b/cui/source/tabpages/tabarea.cxx
index 787fa76..06acf58 100644
--- a/cui/source/tabpages/tabarea.cxx
+++ b/cui/source/tabpages/tabarea.cxx
@@ -73,9 +73,7 @@
    mnPatternListState ( ChangeType::NONE ),
    mnGradientListState ( ChangeType::NONE ),
    mnHatchingListState ( ChangeType::NONE ),
    mnPageType( PageType::Area ),
    mnPos( 0 ),
    mbAreaTP( false )
    mnPos( 0 )
{
    m_nAreaTabPage = AddTabPage( "RID_SVXPAGE_AREA", SvxAreaTabPage::Create, nullptr );

@@ -262,24 +260,18 @@
            static_cast<SvxAreaTabPage&>(rPage).SetGradientList( mpGradientList );
            static_cast<SvxAreaTabPage&>(rPage).SetHatchingList( mpHatchingList );
            static_cast<SvxAreaTabPage&>(rPage).SetBitmapList( mpBitmapList );
            static_cast<SvxAreaTabPage&>(rPage).SetPageType( mnPageType );
            static_cast<SvxAreaTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxAreaTabPage&>(rPage).SetPos( mnPos );
            static_cast<SvxAreaTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxAreaTabPage&>(rPage).SetPatternList( mpPatternList );
            static_cast<SvxAreaTabPage&>(rPage).SetDrawModel( mpDrawModel );
            static_cast<SvxAreaTabPage&>(rPage).SetGrdChgd( &mnGradientListState );
            static_cast<SvxAreaTabPage&>(rPage).SetHtchChgd( &mnHatchingListState );
            static_cast<SvxAreaTabPage&>(rPage).SetBmpChgd( &mnBitmapListState );
            static_cast<SvxAreaTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxAreaTabPage&>(rPage).Construct();
            // ActivatePge() is not called the first time
            static_cast<SvxAreaTabPage&>(rPage).ActivatePage( mrOutAttrs );
    }
    else if (nId == m_nShadowTabPage)
    {
            static_cast<SvxShadowTabPage&>(rPage).SetColorList( mpColorList );
            static_cast<SvxShadowTabPage&>(rPage).SetPageType( mnPageType );
            static_cast<SvxShadowTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxShadowTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxShadowTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxShadowTabPage&>(rPage).Construct();
    }
@@ -287,10 +279,7 @@
    {
            static_cast<SvxGradientTabPage&>(rPage).SetColorList( mpColorList );
            static_cast<SvxGradientTabPage&>(rPage).SetGradientList( mpGradientList );
            static_cast<SvxGradientTabPage&>(rPage).SetPageType( &mnPageType );
            static_cast<SvxGradientTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxGradientTabPage&>(rPage).SetPos( &mnPos );
            static_cast<SvxGradientTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxGradientTabPage&>(rPage).SetGrdChgd( &mnGradientListState );
            static_cast<SvxGradientTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxGradientTabPage&>(rPage).Construct();
@@ -299,10 +288,7 @@
    {
            static_cast<SvxHatchTabPage&>(rPage).SetColorList( mpColorList );
            static_cast<SvxHatchTabPage&>(rPage).SetHatchingList( mpHatchingList );
            static_cast<SvxHatchTabPage&>(rPage).SetPageType( &mnPageType );
            static_cast<SvxHatchTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxHatchTabPage&>(rPage).SetPos( &mnPos );
            static_cast<SvxHatchTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxHatchTabPage&>(rPage).SetHtchChgd( &mnHatchingListState );
            static_cast<SvxHatchTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxHatchTabPage&>(rPage).Construct();
@@ -310,10 +296,7 @@
    else if (nId == m_nBitmapTabPage )
    {
            static_cast<SvxBitmapTabPage&>(rPage).SetBitmapList( mpBitmapList );
            static_cast<SvxBitmapTabPage&>(rPage).SetPageType( &mnPageType );
            static_cast<SvxBitmapTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxBitmapTabPage&>(rPage).SetPos( &mnPos );
            static_cast<SvxBitmapTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxBitmapTabPage&>(rPage).SetBmpChgd( &mnBitmapListState );
            static_cast<SvxBitmapTabPage&>(rPage).Construct();
    }
@@ -321,10 +304,7 @@
    {
            static_cast<SvxPatternTabPage&>(rPage).SetColorList( mpColorList );
            static_cast<SvxPatternTabPage&>(rPage).SetPatternList( mpPatternList );
            static_cast<SvxPatternTabPage&>(rPage).SetPageType( &mnPageType );
            static_cast<SvxPatternTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxPatternTabPage&>(rPage).SetPos( &mnPos );
            static_cast<SvxPatternTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxPatternTabPage&>(rPage).SetPtrnChgd( &mnPatternListState );
            static_cast<SvxPatternTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxPatternTabPage&>(rPage).Construct();
@@ -332,18 +312,10 @@
    else if (nId == m_nColorTabPage)
    {
            static_cast<SvxColorTabPage&>(rPage).SetColorList( mpColorList );
            static_cast<SvxColorTabPage&>(rPage).SetPageType( &mnPageType );
            static_cast<SvxColorTabPage&>(rPage).SetDlgType( 0 );
            static_cast<SvxColorTabPage&>(rPage).SetPos( &mnPos );
            static_cast<SvxColorTabPage&>(rPage).SetAreaTP( &mbAreaTP );
            static_cast<SvxColorTabPage&>(rPage).SetColorChgd( &mnColorListState );
            static_cast<SvxColorTabPage&>(rPage).Construct();
    }
    else if (nId == m_nTransparenceTabPage)
    {
            static_cast<SvxTransparenceTabPage&>(rPage).SetPageType( mnPageType );
            static_cast<SvxTransparenceTabPage&>(rPage).SetDlgType( 0 );
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/tabpages/tparea.cxx b/cui/source/tabpages/tparea.cxx
index d89945d..c9b66a1 100644
--- a/cui/source/tabpages/tparea.cxx
+++ b/cui/source/tabpages/tparea.cxx
@@ -39,17 +39,24 @@
#include <svl/intitem.hxx>
#include <sfx2/request.hxx>
#include "paragrph.hrc"

//UUUU
#include <sfx2/tabdlg.hxx>
#include "sfx2/opengrf.hxx"
#include <vcl/layout.hxx>

#define DEFAULT_GRADIENTSTEP 64

using namespace com::sun::star;

// static ----------------------------------------------------------------

enum FillType
{
    TRANSPARENT,
    SOLID,
    GRADIENT,
    HATCH,
    BITMAP,
    PATTERN
};

const sal_uInt16 SvxAreaTabPage::pAreaRanges[] =
{
    XATTR_GRADIENTSTEPCOUNT,
@@ -71,91 +78,50 @@
                "AreaTabPage",
                "cui/ui/areatabpage.ui",
               rInAttrs ),
    m_rOutAttrs (rInAttrs ),

    m_pFillTabPage( nullptr ),
    m_pColorList( nullptr ),
    m_pGradientList( nullptr ),
    m_pHatchingList( nullptr ),
    m_pBitmapList( nullptr ),
    m_pPatternList( nullptr ),

    // local fixed not o be changed values for local pointers
    maFixed_ChangeType(ChangeType::NONE),
    maFixed_sal_Bool(false),

    // init with pointers to fixed ChangeType
    m_pnColorListState(&maFixed_ChangeType),
    m_pnBitmapListState(&maFixed_ChangeType),
    m_pnPatternListState(&maFixed_ChangeType),
    m_pnGradientListState(&maFixed_ChangeType),
    m_pnHatchingListState(&maFixed_ChangeType),

    m_nPageType(PageType::Area),
    m_nDlgType(0),
    m_nPos(0),

    // init with pointer to fixed bool
    m_pbAreaTP(&maFixed_sal_Bool),

    m_aXFillAttr          ( rInAttrs.GetPool() ),
    m_rXFSet              ( m_aXFillAttr.GetItemSet() )
{
    get(m_pTypeLB,"LB_AREA_TYPE");
    get(m_pFillLB,"boxLB_FILL");
    get(m_pLbColor,"LB_COLOR");
    get(m_pLbGradient,"LB_GRADIENT");
    get(m_pLbHatching,"LB_HATCHING");
    get(m_pLbBitmap,"LB_BITMAP");
    get(m_pCtlBitmapPreview,"CTL_BITMAP_PREVIEW");
    get(m_pCtlXRectPreview,"CTL_COLOR_PREVIEW");

    get(m_pBtnNone, "btnnone");
    get(m_pBtnColor, "btncolor");
    get(m_pBtnGradient, "btngradient");
    get(m_pBtnHatch, "btnhatch");
    get(m_pBtnBitmap, "btnbitmap");
    get(m_pBtnPattern, "btnpattern");
    get(m_pFillTab, "fillstylebox");
    maBox.AddButton( m_pBtnNone );
    maBox.AddButton( m_pBtnColor );
    maBox.AddButton( m_pBtnGradient );
    maBox.AddButton( m_pBtnHatch );
    maBox.AddButton( m_pBtnBitmap );
    maBox.AddButton( m_pBtnPattern );
    Link< Button*, void > aLink = LINK(this, SvxAreaTabPage, SelectFillTypeHdl_Impl);
    m_pBtnNone->SetClickHdl(aLink);
    m_pBtnColor->SetClickHdl(aLink);
    m_pBtnGradient->SetClickHdl(aLink);
    m_pBtnHatch->SetClickHdl(aLink);
    m_pBtnBitmap->SetClickHdl(aLink);
    m_pBtnPattern->SetClickHdl(aLink);

    // groups that overlay each other
    m_pLbBitmap->Hide();
    m_pCtlBitmapPreview->Hide();

    // this page needs ExchangeSupport
    SetExchangeSupport();

    // get PoolUnit
    SfxItemPool* pPool = m_rOutAttrs.GetPool();
    DBG_ASSERT( pPool, "Wo ist der Pool?" );
    m_ePoolUnit = pPool->GetMetric( XATTR_FILLBMP_SIZEX );

    // setting the output device
    m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
    m_rXFSet.Put( XFillColorItem( OUString(), COL_BLACK ) );
    m_pCtlXRectPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlBitmapPreview->SetAttributes( m_aXFillAttr.GetItemSet() );

    m_pLbColor->SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyColorHdl_Impl ) );
    m_pLbGradient->SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyGradientHdl_Impl ) );
    m_pLbHatching->SetSelectHdl( LINK( this, SvxAreaTabPage, ModifyHatchingHdl_Impl ) );
    m_pLbBitmap->SetSelectHdl(   LINK( this, SvxAreaTabPage, ModifyBitmapHdl_Impl ) );

    m_pTypeLB->SetSelectHdl( LINK( this, SvxAreaTabPage, SelectDialogTypeHdl_Impl ) );

    // #i76307# always paint the preview in LTR, because this is what the document does
    m_pCtlXRectPreview->EnableRTL(false);

    // Calculate size of dropdown listboxes
    Size aSize = LogicToPixel(Size(108, 103), MapUnit::MapAppFont);

    m_pLbColor->set_width_request(aSize.Width());
    m_pLbColor->set_height_request(aSize.Height());
    //m_pLbColor->

    m_pLbGradient->set_width_request(aSize.Width());
    m_pLbGradient->set_height_request(aSize.Height());
    m_pLbHatching->set_width_request(aSize.Width());
    m_pLbHatching->set_height_request(aSize.Height());
    m_pLbBitmap->set_width_request(aSize.Width());
    m_pLbBitmap->set_height_request(aSize.Height());

    // Calculate size of display boxes
    Size aSize2 = LogicToPixel(Size(110, 42), MapUnit::MapAppFont);
    m_pCtlBitmapPreview->set_width_request(aSize2.Width());
    m_pCtlBitmapPreview->set_height_request(aSize2.Height());
    m_pCtlXRectPreview->set_width_request(aSize2.Width());
    m_pCtlXRectPreview->set_height_request(aSize2.Height());
    m_pFillTab->set_width_request(700);
    m_pFillTab->set_height_request(400);
}

SvxAreaTabPage::~SvxAreaTabPage()
@@ -165,504 +131,187 @@

void SvxAreaTabPage::dispose()
{
    m_pTypeLB.clear();
    m_pFillLB.clear();
    m_pLbColor.clear();
    m_pLbGradient.clear();
    m_pLbHatching.clear();
    m_pLbBitmap.clear();
    m_pCtlBitmapPreview.clear();
    m_pCtlXRectPreview.clear();
    m_pBtnNone.clear();
    m_pBtnColor.clear();
    m_pBtnGradient.clear();
    m_pBtnHatch.clear();
    m_pBtnBitmap.clear();
    m_pBtnPattern.clear();
    m_pFillTab.clear();
    m_pFillTabPage.disposeAndClear();
    SvxTabPage::dispose();
}

void SvxAreaTabPage::Construct()
{
    // fill colortables / lists
    m_pLbColor->Fill( m_pColorList );
    m_pLbGradient->Fill( m_pGradientList );
    m_pLbHatching->Fill( m_pHatchingList );
    m_pLbBitmap->Fill( m_pBitmapList );
}


void SvxAreaTabPage::ActivatePage( const SfxItemSet& rSet )
{
    sal_Int32 nCount(0);
    const SfxUInt16Item* pPageTypeItem = rSet.GetItem<SfxUInt16Item>(SID_PAGE_TYPE, false);
    const SfxUInt16Item* pPosItem = rSet.GetItem<SfxUInt16Item>(SID_TABPAGE_POS, false);
    if (pPageTypeItem)
        SetPageType((PageType) pPageTypeItem->GetValue());
    if (pPosItem)
        SetPos(pPosItem->GetValue());
    if( m_nDlgType == 0 ) // area dialog
    drawing::FillStyle eXFS = drawing::FillStyle_NONE;
    if( rSet.GetItemState( XATTR_FILLSTYLE ) != SfxItemState::DONTCARE )
    {
        *m_pbAreaTP = true;

        if( m_pColorList.is() )
        eXFS = (drawing::FillStyle) ( static_cast<const XFillStyleItem&>( rSet.Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
    }
    switch(eXFS)
    {
        default:
        case drawing::FillStyle_NONE:
        {
            //UUUU use evtl. previously selected entry to avoid changing values just by
            // switching TabPages in dialogs using this TabPage
            sal_Int32 _nPos(m_nPos);

            if( *m_pnBitmapListState != ChangeType::NONE )
            {
                if( *m_pnBitmapListState & ChangeType::CHANGED )
                    m_pBitmapList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewBitmapList();

                _nPos = m_pLbBitmap->GetSelectEntryPos();

                m_pLbBitmap->Clear();
                m_pLbBitmap->Fill( m_pBitmapList );
                nCount = m_pLbBitmap->GetEntryCount();
                if( nCount == 0 )
                    ; // This case should never occur
                else if( nCount <= _nPos )
                    m_pLbBitmap->SelectEntryPos( 0 );
                else
                    m_pLbBitmap->SelectEntryPos( _nPos );
            }

            if( *m_pnHatchingListState != ChangeType::NONE )
            {
                if( *m_pnHatchingListState & ChangeType::CHANGED )
                    m_pHatchingList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewHatchingList();

                _nPos = m_pLbHatching->GetSelectEntryPos();

                m_pLbHatching->Clear();
                m_pLbHatching->Fill( m_pHatchingList );
                nCount = m_pLbHatching->GetEntryCount();
                if( nCount == 0 )
                    ; // This case should never occur
                else if( nCount <= _nPos )
                    m_pLbHatching->SelectEntryPos( 0 );
                else
                    m_pLbHatching->SelectEntryPos( _nPos );
                ModifyHatchingHdl_Impl( *m_pLbHatching );
            }

            if( *m_pnGradientListState != ChangeType::NONE )
            {
                if( *m_pnGradientListState & ChangeType::CHANGED )
                    m_pGradientList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewGradientList();

                _nPos = m_pLbGradient->GetSelectEntryPos();

                m_pLbGradient->Clear();
                m_pLbGradient->Fill( m_pGradientList );
                nCount = m_pLbGradient->GetEntryCount();
                if( nCount == 0 )
                    ; // This case should never occur
                else if( nCount <= _nPos )
                    m_pLbGradient->SelectEntryPos( 0 );
                else
                    m_pLbGradient->SelectEntryPos( _nPos );
                ModifyGradientHdl_Impl( *m_pLbGradient );
            }

            if( *m_pnColorListState != ChangeType::NONE )
            {
                if( *m_pnColorListState & ChangeType::CHANGED )
                    m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();
                // aLbColor
                _nPos = m_pLbColor->GetSelectEntryPos();
                m_pLbColor->Clear();
                m_pLbColor->Fill( m_pColorList );
                nCount = m_pLbColor->GetEntryCount();
                if( nCount == 0 )
                    ; // This case should never occur
                else if( nCount <= _nPos )
                    m_pLbColor->SelectEntryPos( 0 );
                else
                    m_pLbColor->SelectEntryPos( _nPos );

                ModifyColorHdl_Impl( *m_pLbColor );
            }

            // evaluate if any other Tabpage set another filltype
            if( m_pTypeLB->GetSelectEntryPos() > drawing::FillStyle_NONE)
            {
                switch( m_nPageType )
                {
                    case PageType::Gradient:
                        m_pTypeLB->SelectEntryPos( drawing::FillStyle_GRADIENT );
                        m_pLbGradient->SelectEntryPos( _nPos );
                        ClickGradientHdl_Impl();
                    break;

                    case PageType::Hatch:
                        m_pTypeLB->SelectEntryPos( drawing::FillStyle_HATCH );
                        m_pLbHatching->SelectEntryPos( _nPos );
                        ClickHatchingHdl_Impl();
                    break;

                    case PageType::Bitmap:
                        m_pTypeLB->SelectEntryPos( drawing::FillStyle_BITMAP );
                        m_pLbBitmap->SelectEntryPos( _nPos );
                        ClickBitmapHdl_Impl();
                    break;

                    case PageType::Color:
                        m_pTypeLB->SelectEntryPos( drawing::FillStyle_SOLID );
                        m_pLbColor->SelectEntryPos( _nPos );
                        ClickColorHdl_Impl();
                    break;
                    default: break;
                }
            }
            m_nPageType = PageType::Area;
            SelectFillTypeHdl_Impl( m_pBtnNone );
            break;
        }
        case drawing::FillStyle_SOLID:
        {
            m_rXFSet.Put( static_cast<const XFillColorItem&>( rSet.Get( GetWhich( XATTR_FILLCOLOR ) ) ) );
            SelectFillTypeHdl_Impl( m_pBtnColor );
            break;
        }
        case drawing::FillStyle_GRADIENT:
        {
            m_rXFSet.Put( static_cast<const XFillGradientItem&>( rSet.Get( GetWhich( XATTR_FILLGRADIENT ) ) ) );
            SelectFillTypeHdl_Impl( m_pBtnGradient );
            break;
        }
        case drawing::FillStyle_HATCH:
        {
            m_rXFSet.Put( static_cast<const XFillHatchItem&>( rSet.Get(XATTR_FILLHATCH) ) );
            SelectFillTypeHdl_Impl( m_pBtnHatch );
            break;
        }
        case drawing::FillStyle_BITMAP:
        {
            XFillBitmapItem aItem(static_cast<const XFillBitmapItem&>( rSet.Get( GetWhich( XATTR_FILLBITMAP ) ) ));
            m_rXFSet.Put( aItem );
            if(!aItem.isPattern())
                SelectFillTypeHdl_Impl( m_pBtnBitmap );
            else
                SelectFillTypeHdl_Impl( m_pBtnPattern );
            break;
        }
    }
}

template< typename TTabPage >
DeactivateRC SvxAreaTabPage::DeactivatePage_Impl( SfxItemSet* _pSet )
{
    return static_cast<TTabPage&>(*m_pFillTabPage).DeactivatePage(_pSet);
}

DeactivateRC SvxAreaTabPage::DeactivatePage( SfxItemSet* _pSet )
{
    if( m_nDlgType == 0 ) // area dialog
    FillType eFillType = static_cast<FillType>(maBox.GetCurrentButtonPos());
    switch( eFillType )
    {
        sal_Int32 nPosOrig = m_nPos;
        drawing::FillStyle eStyle = (drawing::FillStyle) m_pTypeLB->GetSelectEntryPos();
        switch( eStyle )
        case SOLID:
        {
            case drawing::FillStyle_GRADIENT:
            {
                        m_nPageType = PageType::Gradient;
                        m_nPos = m_pLbGradient->GetSelectEntryPos();
                        if( nPosOrig != m_nPos )
                            *m_pnGradientListState |= ChangeType::MODIFIED;
            }
            return DeactivatePage_Impl<SvxColorTabPage>(_pSet);
            break;
            case drawing::FillStyle_HATCH:
            {
                m_nPageType = PageType::Hatch;
                m_nPos = m_pLbHatching->GetSelectEntryPos();
                if( nPosOrig != m_nPos )
                    *m_pnHatchingListState |= ChangeType::MODIFIED;
            }
            break;
            case drawing::FillStyle_BITMAP:
            {
                m_nPageType = PageType::Bitmap;
                m_nPos = m_pLbBitmap->GetSelectEntryPos();
                if( nPosOrig != m_nPos )
                    *m_pnBitmapListState |= ChangeType::MODIFIED;
            }
            break;
            case drawing::FillStyle_SOLID:
            {
                m_nPageType = PageType::Color;
                m_nPos = m_pLbColor->GetSelectEntryPos();
                if( nPosOrig != m_nPos )
                    *m_pnColorListState |= ChangeType::MODIFIED;
            }
            break;
            default: ;//prevent warning
        }
        case GRADIENT:
        {
            return DeactivatePage_Impl<SvxGradientTabPage>(_pSet);
            break;
        }
        case HATCH:
        {
            return DeactivatePage_Impl<SvxHatchTabPage>(_pSet);
            break;
        }
        case BITMAP:
        {
            return DeactivatePage_Impl<SvxBitmapTabPage&>(_pSet);
            break;
        }
        case PATTERN:
        {
            return DeactivatePage_Impl<SvxPatternTabPage>(_pSet);
            break;
        }
        default:
            break;
    }

    if( _pSet )
        FillItemSet( _pSet );

    return DeactivateRC::LeavePage;
}

template< typename TTabPage >
bool SvxAreaTabPage::FillItemSet_Impl( SfxItemSet* rAttrs)
{
    return static_cast<TTabPage&>( *m_pFillTabPage ).FillItemSet( rAttrs );
}

bool SvxAreaTabPage::FillItemSet( SfxItemSet* rAttrs )
{
    sal_Int32  _nPos;
    bool    bModified = false;

    if( m_nDlgType != 0 || *m_pbAreaTP )
    FillType eFillType = static_cast<FillType>(maBox.GetCurrentButtonPos());
    switch( eFillType )
    {
        const SfxPoolItem* pOld = nullptr;
        drawing::FillStyle eStyle = (drawing::FillStyle) m_pTypeLB->GetSelectEntryPos();
        drawing::FillStyle eSavedStyle = (drawing::FillStyle) m_pTypeLB->GetSavedValue();
        switch( eStyle )
        case TRANSPARENT:
        {
            default:
            case drawing::FillStyle_NONE:
            {
                if(  eSavedStyle != eStyle )
                {
                    XFillStyleItem aStyleItem( drawing::FillStyle_NONE );
                    pOld = GetOldItem( *rAttrs, XATTR_FILLSTYLE );
                    if ( !pOld || !( *static_cast<const XFillStyleItem*>(pOld) == aStyleItem ) )
                    {
                        rAttrs->Put( aStyleItem );
                        bModified = true;
                    }
                }
            }
            break;
            case drawing::FillStyle_SOLID:
            {
                _nPos = m_pLbColor->GetSelectEntryPos();
                 if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
                     m_pLbColor->IsValueChangedFromSaved() )
                 {
                     XFillColorItem aItem( m_pLbColor->GetSelectEntry(),
                                           m_pLbColor->GetSelectEntryColor() );
                     pOld = GetOldItem( *rAttrs, XATTR_FILLCOLOR );
                     if ( !pOld || !( *static_cast<const XFillColorItem*>(pOld) == aItem ) )
                     {
                         rAttrs->Put( aItem );
                         bModified = true;
                     }
                 }
                 // NEW
                 if( (eSavedStyle != eStyle) &&
                     ( bModified ||
                       SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ) ) ) )
                 {
                     XFillStyleItem aStyleItem( drawing::FillStyle_SOLID );
                     pOld = GetOldItem( *rAttrs, XATTR_FILLSTYLE );
                     if ( !pOld || !( *static_cast<const XFillStyleItem*>(pOld) == aStyleItem ) )
                     {
                         rAttrs->Put( aStyleItem );
                         bModified = true;
                     }
                 }
            }
            break;
            case drawing::FillStyle_GRADIENT:
            {
                _nPos = m_pLbGradient->GetSelectEntryPos();
                if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
                    m_pLbGradient->IsValueChangedFromSaved() )
                {
                    XGradient aGradient = m_pGradientList->GetGradient( _nPos )->GetGradient();
                    OUString aString = m_pLbGradient->GetSelectEntry();
                    XFillGradientItem aItem( aString, aGradient );
                    pOld = GetOldItem( *rAttrs, XATTR_FILLGRADIENT );
                    if ( !pOld || !( *static_cast<const XFillGradientItem*>(pOld) == aItem ) )
                    {
                        rAttrs->Put( aItem );
                        bModified = true;
                    }
                }
                // NEW
                if( (eSavedStyle != eStyle) &&
                    ( bModified ||
                      SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ) ) ) )
                {
                    XFillStyleItem aStyleItem( drawing::FillStyle_GRADIENT );
                    pOld = GetOldItem( *rAttrs, XATTR_FILLSTYLE );
                    if ( !pOld || !( *static_cast<const XFillStyleItem*>(pOld) == aStyleItem ) )
                    {
                        rAttrs->Put( aStyleItem );
                        bModified = true;
                    }
                }
            }
            break;
            case drawing::FillStyle_HATCH:
            {
                _nPos = m_pLbHatching->GetSelectEntryPos();
                if( _nPos != LISTBOX_ENTRY_NOTFOUND &&
                   m_pLbHatching->IsValueChangedFromSaved() )
                {
                    XHatch aHatching = m_pHatchingList->GetHatch( _nPos )->GetHatch();
                    OUString aString = m_pLbHatching->GetSelectEntry();
                    XFillHatchItem aItem( aString, aHatching );
                    pOld = GetOldItem( *rAttrs, XATTR_FILLHATCH );
                    if ( !pOld || !( *static_cast<const XFillHatchItem*>(pOld) == aItem ) )
                    {
                        rAttrs->Put( aItem );
                        bModified = true;
                    }
                }
                // NEW
                if( (eSavedStyle != eStyle) &&
                    ( bModified ||
                      SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ) ) ) )
                {
                    XFillStyleItem aStyleItem( drawing::FillStyle_HATCH );
                    pOld = GetOldItem( *rAttrs, XATTR_FILLSTYLE );
                    if ( !pOld || !( *static_cast<const XFillStyleItem*>(pOld) == aStyleItem ) )
                    {
                        rAttrs->Put( aStyleItem );
                        bModified = true;
                    }
                }
            }
            break;
            case drawing::FillStyle_BITMAP:
            {
                //UUUU
                m_nPos = m_pLbBitmap->GetSelectEntryPos();
                if( m_nPos != LISTBOX_ENTRY_NOTFOUND &&
                    m_pLbBitmap->IsValueChangedFromSaved() )
                {
                    const XBitmapEntry* pXBitmapEntry = m_pBitmapList->GetBitmap(m_nPos);
                    const OUString aString(m_pLbBitmap->GetSelectEntry());
                    const XFillBitmapItem aFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject());
                    pOld = GetOldItem( *rAttrs, XATTR_FILLBITMAP );
                    if ( !pOld || !( *static_cast<const XFillBitmapItem*>(pOld) == aFillBitmapItem ) )
                    {
                        rAttrs->Put( aFillBitmapItem );
                        bModified = true;
                    }
                }
                // NEW
                if( (eSavedStyle != eStyle) &&
                    ( bModified ||
                      SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ) ) ) )
                {
                        XFillStyleItem aStyleItem( drawing::FillStyle_BITMAP );
                        pOld = GetOldItem( *rAttrs, XATTR_FILLSTYLE );
                        if ( !pOld || !( *static_cast<const XFillStyleItem*>(pOld) == aStyleItem ) )
                        {
                            rAttrs->Put( aStyleItem );
                            bModified = true;
                        }
                }
            }
            break;
            rAttrs->Put( XFillStyleItem( drawing::FillStyle_NONE ) );
            return true;
        }
        rAttrs->Put (SfxUInt16Item(SID_PAGE_TYPE, (sal_uInt16)m_nPageType));
        rAttrs->Put (SfxUInt16Item(SID_TABPAGE_POS,m_nPos));
        case SOLID:
        {
            return FillItemSet_Impl<SvxColorTabPage>( rAttrs );
        }
        case GRADIENT:
        {
            return FillItemSet_Impl<SvxGradientTabPage>( rAttrs );
        }
        case HATCH:
        {
            return FillItemSet_Impl<SvxHatchTabPage>( rAttrs );
        }
        case BITMAP:
        {
            return FillItemSet_Impl<SvxBitmapTabPage>( rAttrs );
        }
        case PATTERN:
        {
            return FillItemSet_Impl<SvxPatternTabPage>( rAttrs );
        }
        default:
            return false;
    }

    return bModified;
}

template< typename TTabPage >
void SvxAreaTabPage::Reset_Impl( const SfxItemSet* rAttrs )
{
    static_cast<TTabPage&>( *m_pFillTabPage ).Reset( rAttrs );
}

void SvxAreaTabPage::Reset( const SfxItemSet* rAttrs )
{
    bool isMissingHatching(false);
    bool isMissingGradient(false);
    bool isMissingBitmap(false);
    drawing::FillStyle eXFS = drawing::FillStyle_NONE;
    if( rAttrs->GetItemState( XATTR_FILLSTYLE ) != SfxItemState::DONTCARE )
    FillType eFillType = static_cast<FillType>(maBox.GetCurrentButtonPos());
    switch(eFillType)
    {
        eXFS = (drawing::FillStyle) ( static_cast<const XFillStyleItem&>( rAttrs->
                                Get( GetWhich( XATTR_FILLSTYLE ) ) ).GetValue() );
        m_pTypeLB->SelectEntryPos( sal::static_int_cast< sal_Int32 >( eXFS ) );

        if (SfxItemState::DONTCARE != rAttrs->GetItemState(XATTR_FILLCOLOR))
        case SOLID:
        {
            XFillColorItem const& rColorItem(static_cast<const XFillColorItem&>(
                                rAttrs->Get(XATTR_FILLCOLOR)) );
            m_pLbColor->SelectEntry( rColorItem.GetColorValue() );
            Reset_Impl<SvxColorTabPage>( rAttrs );
            break;
        }

        SfxItemState const eGradState(rAttrs->GetItemState(XATTR_FILLGRADIENT));
        XFillGradientItem const* pGradientItem(nullptr);
        if (SfxItemState::DONTCARE != eGradState)
        case GRADIENT:
        {
            pGradientItem = &static_cast<const XFillGradientItem&>(
                                    rAttrs->Get(XATTR_FILLGRADIENT));
            OUString  const aString( pGradientItem->GetName() );
            XGradient const aGradient( pGradientItem->GetGradientValue() );
            m_pLbGradient->SelectEntryByList(m_pGradientList, aString, aGradient);
            Reset_Impl<SvxGradientTabPage>( rAttrs );
            break;
        }
        if (!m_pLbGradient->GetSelectEntryCount()
            && (SfxItemState::DEFAULT == eGradState
                || (pGradientItem && pGradientItem->GetName().isEmpty())))
        {   // avoid relying on pool default - cannot export that
            m_pLbGradient->SelectEntryPos(0); // anything better than nothing
            isMissingGradient = true;
        }

        SfxItemState const eHatchState(rAttrs->GetItemState(XATTR_FILLHATCH));
        XFillHatchItem const* pHatch(nullptr);
        if (SfxItemState::DONTCARE != eHatchState)
        case HATCH:
        {
            pHatch = &static_cast<const XFillHatchItem&>(
                                rAttrs->Get(XATTR_FILLHATCH));
            m_pLbHatching->SelectEntry(pHatch->GetName());
            Reset_Impl<SvxHatchTabPage>( rAttrs );
            break;
        }
        if (!m_pLbHatching->GetSelectEntryCount()
            && (SfxItemState::DEFAULT == eHatchState
                || (pHatch && pHatch->GetName().isEmpty())))
        {   // avoid relying on pool default - cannot export that
            m_pLbHatching->SelectEntryPos(0); // anything better than nothing
            isMissingHatching = true;
        }

        SfxItemState const eBitmapState(rAttrs->GetItemState(XATTR_FILLBITMAP));
        XFillBitmapItem const* pBitmapItem(nullptr);
        if (SfxItemState::DONTCARE != eBitmapState)
        case BITMAP:
        {
            pBitmapItem = &static_cast<const XFillBitmapItem&>(
                            rAttrs->Get(XATTR_FILLBITMAP));
            m_pLbBitmap->SelectEntry(pBitmapItem->GetName());
            Reset_Impl<SvxBitmapTabPage>( rAttrs );
            break;
        }
        if (!m_pLbBitmap->GetSelectEntryCount()
            && (SfxItemState::DEFAULT == eBitmapState
                || (pBitmapItem && pBitmapItem->GetName().isEmpty())))
        {   // avoid relying on pool default - cannot export that
            m_pLbBitmap->SelectEntryPos(0); // anything better than nothing
            isMissingBitmap = true;
        }

        switch( eXFS )
        case PATTERN:
        {
            case drawing::FillStyle_NONE:
                ClickInvisibleHdl_Impl();
            break;

            case drawing::FillStyle_SOLID:
                ClickColorHdl_Impl();
            break;

            case drawing::FillStyle_GRADIENT:
                ClickGradientHdl_Impl();
            break;

            case drawing::FillStyle_HATCH:
                ClickHatchingHdl_Impl();
            break;

            case drawing::FillStyle_BITMAP:
            {
                ClickBitmapHdl_Impl();
            }
            break;

            default:
                assert(false);
            Reset_Impl<SvxPatternTabPage>( rAttrs );
            break;
        }
        default:
            break;
    }
    else
    {
        // make all LBs not accessible
        m_pFillLB->Hide();

        m_pCtlBitmapPreview->Hide();
        m_pLbColor->Disable();
        m_pLbColor->Show();

        // so that Reset() also works correctly with Back
        m_pTypeLB->SetNoSelection();
    }

    if( m_pTypeLB->GetSelectEntryPos() == drawing::FillStyle_BITMAP )
        ClickBitmapHdl_Impl();

    m_pTypeLB->SaveValue();
    if(eXFS == drawing::FillStyle_SOLID)
        m_pLbColor->SaveValue();
    if (!isMissingGradient)
        m_pLbGradient->SaveValue();
    if (!isMissingHatching)
        m_pLbHatching->SaveValue();
    if (!isMissingBitmap)
        m_pLbBitmap->SaveValue();
}

void SvxAreaTabPage::ChangesApplied()
{
    m_pTypeLB->SaveValue();
    m_pLbColor->SaveValue();
    m_pLbGradient->SaveValue();
    m_pLbHatching->SaveValue();
    m_pLbBitmap->SaveValue();
}


VclPtr<SfxTabPage> SvxAreaTabPage::Create( vcl::Window* pWindow,
                                           const SfxItemSet* rAttrs )
{
@@ -670,217 +319,32 @@
}


IMPL_LINK_NOARG(SvxAreaTabPage, SelectDialogTypeHdl_Impl, ListBox&, void)
VclPtr<SfxTabPage> CreateFillStyleTabPage( sal_uInt16 nId, vcl::Window* pParent, const SfxItemSet& rSet )
{
    switch( (drawing::FillStyle)m_pTypeLB->GetSelectEntryPos() )
    CreateTabPage fnCreate = nullptr;
    switch(nId)
    {
        default:
        case drawing::FillStyle_NONE: ClickInvisibleHdl_Impl(); break;
        case drawing::FillStyle_SOLID: ClickColorHdl_Impl(); break;
        case drawing::FillStyle_GRADIENT: ClickGradientHdl_Impl(); break;
        case drawing::FillStyle_HATCH: ClickHatchingHdl_Impl(); break;
        case drawing::FillStyle_BITMAP: ClickBitmapHdl_Impl(); break;
        case TRANSPARENT: fnCreate = nullptr; break;
        case SOLID: fnCreate = &SvxColorTabPage::Create; break;
        case GRADIENT: fnCreate = &SvxGradientTabPage::Create; break;
        case HATCH: fnCreate = &SvxHatchTabPage::Create; break;
        case BITMAP: fnCreate = &SvxBitmapTabPage::Create; break;
        case PATTERN: fnCreate = &SvxPatternTabPage::Create; break;
    }
    VclPtr<SfxTabPage> pRet = fnCreate ? (*fnCreate)( pParent, &rSet ) : nullptr;
    return pRet;
}

void SvxAreaTabPage::ClickInvisibleHdl_Impl()
IMPL_LINK(SvxAreaTabPage, SelectFillTypeHdl_Impl, Button*, pButton, void)
{
    m_pFillLB->Hide();

    m_pCtlXRectPreview->Hide();
    m_pCtlBitmapPreview->Hide();

    m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );
    m_pCtlXRectPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlBitmapPreview->SetAttributes( m_aXFillAttr.GetItemSet() );

    m_pCtlXRectPreview->Invalidate();
    m_pCtlBitmapPreview->Invalidate();
}


void SvxAreaTabPage::ClickColorHdl_Impl()
{
    m_pFillLB->Show();
    m_pLbColor->Enable();
    m_pLbColor->Show();
    m_pLbGradient->Hide();
    m_pLbHatching->Hide();
    m_pLbBitmap->Hide();
    m_pCtlXRectPreview->Enable();
    m_pCtlXRectPreview->Show();
    m_pCtlBitmapPreview->Hide();

    ModifyColorHdl_Impl( *m_pLbColor );
}


IMPL_LINK_NOARG(SvxAreaTabPage, ModifyColorHdl_Impl, ListBox&, void)
{
    const SfxPoolItem* pPoolItem = nullptr;
    sal_Int32 _nPos = m_pLbColor->GetSelectEntryPos();
    if( _nPos != LISTBOX_ENTRY_NOTFOUND )
    sal_Int32 nPos = maBox.GetButtonPos( static_cast<PushButton*>(pButton) );
    if(nPos != -1 && nPos != maBox.GetCurrentButtonPos())
    {
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
        m_rXFSet.Put( XFillColorItem( OUString(), m_pLbColor->GetSelectEntryColor() ) );
        maBox.SelectButton(static_cast<PushButton*>(pButton));
        FillType eFillType = static_cast<FillType>(maBox.GetCurrentButtonPos());
        m_pFillTabPage.disposeAndReset( CreateFillStyleTabPage(eFillType, m_pFillTab, m_rXFSet) );
        CreatePage( eFillType , *m_pFillTabPage);
    }
    // NEW
    else if( SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), true, &pPoolItem ) )
    {
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
        Color aColor( static_cast<const XFillColorItem*>( pPoolItem )->GetColorValue() );
        m_rXFSet.Put( XFillColorItem( OUString(), aColor ) );
    }
    else
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );

    m_pCtlXRectPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlXRectPreview->Invalidate();
}


void SvxAreaTabPage::ClickGradientHdl_Impl()
{
    m_pFillLB->Show();
    m_pLbColor->Hide();
    m_pLbGradient->Enable();
    m_pLbGradient->Show();
    m_pLbHatching->Hide();
    m_pLbBitmap->Hide();
    m_pCtlXRectPreview->Enable();
    m_pCtlXRectPreview->Show();
    m_pCtlBitmapPreview->Hide();

    ModifyGradientHdl_Impl( *m_pLbGradient );
}


IMPL_LINK_NOARG(SvxAreaTabPage, ModifyGradientHdl_Impl, ListBox&, void)
{
    const SfxPoolItem* pPoolItem = nullptr;
    sal_Int32 _nPos = m_pLbGradient->GetSelectEntryPos();
    if( _nPos != LISTBOX_ENTRY_NOTFOUND )
    {
        // fill ItemSet and pass it on to aCtlXRectPreview
        const XGradientEntry* pEntry = m_pGradientList->GetGradient(_nPos);

        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_GRADIENT ) );
        m_rXFSet.Put( XFillGradientItem( OUString(), pEntry->GetGradient() ) );
    }
    else if( SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLGRADIENT ), true, &pPoolItem ) )
    {
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_GRADIENT ) );
        m_rXFSet.Put( XFillGradientItem( OUString(), static_cast<const XFillGradientItem*>( pPoolItem )->GetGradientValue() ) );
    }
    else
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );

    sal_uInt16 nValue = static_cast<const XGradientStepCountItem&>( m_rOutAttrs.Get( XATTR_GRADIENTSTEPCOUNT ) ).GetValue();
    if( nValue == 0 )
        nValue = DEFAULT_GRADIENTSTEP;
    m_rXFSet.Put( XGradientStepCountItem( nValue ) );

    m_pCtlXRectPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlXRectPreview->Invalidate();
}


void SvxAreaTabPage::ClickHatchingHdl_Impl()
{
    m_pFillLB->Show();
    m_pLbColor->Hide();
    m_pLbGradient->Hide();
    m_pLbHatching->Enable();
    m_pLbHatching->Show();
    m_pLbBitmap->Hide();
    m_pCtlXRectPreview->Enable();
    m_pCtlXRectPreview->Show();
    m_pCtlBitmapPreview->Hide();

    ModifyHatchingHdl_Impl( *m_pLbHatching );
}

IMPL_LINK_NOARG(SvxAreaTabPage, ModifyHatchingHdl_Impl, ListBox&, void)
{
    // fill Hatch ItemSet
    const SfxPoolItem* pPoolItem = nullptr;
    sal_Int32 _nPos = m_pLbHatching->GetSelectEntryPos();
    if( _nPos != LISTBOX_ENTRY_NOTFOUND )
    {
        // fill ItemSet and pass it on to aCtlXRectPreview
        const XHatchEntry* pEntry = m_pHatchingList->GetHatch(_nPos);

        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_HATCH ) );
        m_rXFSet.Put( XFillHatchItem( OUString(), pEntry->GetHatch() ) );
    }
    else if( SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), true, &pPoolItem ) )
    {
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_HATCH ) );
        m_rXFSet.Put( XFillHatchItem( OUString(), static_cast<const XFillHatchItem*>( pPoolItem )->GetHatchValue() ) );
    }
    else
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );

    // fill Hatch background ItemSet
    XFillBackgroundItem aItem(static_cast<const XFillBackgroundItem&>(m_rOutAttrs.Get( XATTR_FILLBACKGROUND )));
    aItem.SetWhich( XATTR_FILLBACKGROUND );
    m_rXFSet.Put ( aItem );
    if(aItem.GetValue())
    {
        if( SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), true, &pPoolItem ) )
        {
            Color aColor( static_cast<const XFillColorItem*>( pPoolItem )->GetColorValue() );
            m_rXFSet.Put( XFillColorItem( OUString(), aColor ) );
        }
        else
            m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );
    }

    m_pCtlXRectPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlXRectPreview->Invalidate();
}

void SvxAreaTabPage::ClickBitmapHdl_Impl()
{
    m_pFillLB->Show();
    m_pLbColor->Hide();
    m_pLbGradient->Hide();
    m_pLbHatching->Hide();
    m_pLbBitmap->Show();
    m_pCtlBitmapPreview->Enable();
    m_pCtlBitmapPreview->Show();
    m_pCtlXRectPreview->Hide();

    ModifyBitmapHdl_Impl( *m_pLbBitmap );
}


IMPL_LINK_NOARG(SvxAreaTabPage, ModifyBitmapHdl_Impl, ListBox&, void)
{
    const SfxPoolItem* pPoolItem = nullptr;
    sal_Int32 _nPos = m_pLbBitmap->GetSelectEntryPos();
    if( _nPos != LISTBOX_ENTRY_NOTFOUND )
    {
        // fill ItemSet and pass it on to aCtlXRectPreview
        const XBitmapEntry* pEntry = m_pBitmapList->GetBitmap(_nPos);

        m_rXFSet.Put(XFillStyleItem(drawing::FillStyle_BITMAP));
        m_rXFSet.Put(XFillBitmapItem(OUString(), pEntry->GetGraphicObject()));
    }
    else if( SfxItemState::SET == m_rOutAttrs.GetItemState( GetWhich( XATTR_FILLBITMAP ), true, &pPoolItem ) )
    {
        m_rXFSet.Put(XFillStyleItem(drawing::FillStyle_BITMAP));
        m_rXFSet.Put(XFillBitmapItem(OUString(), static_cast<const XFillBitmapItem*>(pPoolItem)->GetGraphicObject()));
    }
    else
        m_rXFSet.Put( XFillStyleItem( drawing::FillStyle_NONE ) );

    m_pCtlBitmapPreview->SetAttributes( m_aXFillAttr.GetItemSet() );
    m_pCtlBitmapPreview->Invalidate();
}

void SvxAreaTabPage::PointChanged( vcl::Window* , RectPoint )
{
}

void SvxAreaTabPage::PageCreated(const SfxAllItemSet& aSet)
@@ -889,9 +353,6 @@
    const SvxGradientListItem* pGradientListItem = aSet.GetItem<SvxGradientListItem>(SID_GRADIENT_LIST, false);
    const SvxHatchListItem* pHatchingListItem = aSet.GetItem<SvxHatchListItem>(SID_HATCH_LIST, false);
    const SvxBitmapListItem* pBitmapListItem = aSet.GetItem<SvxBitmapListItem>(SID_BITMAP_LIST, false);
    const SfxUInt16Item* pPageTypeItem = aSet.GetItem<SfxUInt16Item>(SID_PAGE_TYPE, false);
    const SfxUInt16Item* pDlgTypeItem = aSet.GetItem<SfxUInt16Item>(SID_DLG_TYPE, false);
    const SfxUInt16Item* pPosItem = aSet.GetItem<SfxUInt16Item>(SID_TABPAGE_POS, false);

    if (pColorListItem)
        SetColorList(pColorListItem->GetColorList());
@@ -901,14 +362,70 @@
        SetHatchingList(pHatchingListItem->GetHatchList());
    if (pBitmapListItem)
        SetBitmapList(pBitmapListItem->GetBitmapList());
    if (pPageTypeItem)
        SetPageType((PageType) pPageTypeItem->GetValue());
    if (pDlgTypeItem)
        SetDlgType(pDlgTypeItem->GetValue());
    if (pPosItem)
        SetPos(pPosItem->GetValue());
}

    Construct();
void SvxAreaTabPage::PointChanged( vcl::Window* , RectPoint )
{
}

void SvxAreaTabPage::CreatePage( sal_Int32 nId, SfxTabPage& pTab )
{
    if(nId == SOLID )
    {
        static_cast<SvxColorTabPage&>(pTab).SetColorList( m_pColorList );
        static_cast<SvxColorTabPage&>(pTab).SetPos( &m_nPos );
        static_cast<SvxColorTabPage&>(pTab).SetColorChgd( m_pnColorListState );
        static_cast<SvxColorTabPage&>(pTab).Construct();
        static_cast<SvxColorTabPage&>(pTab).ActivatePage( m_rXFSet );
        static_cast<SvxColorTabPage&>(pTab).Reset(&m_rXFSet);
        static_cast<SvxColorTabPage&>(pTab).Show();
    }
    else if(nId == GRADIENT)
    {
        static_cast<SvxGradientTabPage&>(pTab).SetColorList( m_pColorList );
        static_cast<SvxGradientTabPage&>(pTab).SetGradientList( m_pGradientList );
        static_cast<SvxGradientTabPage&>(pTab).SetPos( &m_nPos );
        static_cast<SvxGradientTabPage&>(pTab).SetGrdChgd( m_pnGradientListState );
        static_cast<SvxGradientTabPage&>(pTab).SetColorChgd( m_pnColorListState );
        static_cast<SvxGradientTabPage&>(pTab).Construct();
        static_cast<SvxGradientTabPage&>(pTab).ActivatePage( m_rXFSet );
        static_cast<SvxGradientTabPage&>(pTab).Reset(&m_rXFSet);
        static_cast<SvxGradientTabPage&>(pTab).Show();
    }
    else if(nId == HATCH)
    {
        static_cast<SvxHatchTabPage&>(pTab).SetColorList( m_pColorList );
        static_cast<SvxHatchTabPage&>(pTab).SetHatchingList( m_pHatchingList );
        static_cast<SvxHatchTabPage&>(pTab).SetPos(&m_nPos);
        static_cast<SvxHatchTabPage&>(pTab).SetHtchChgd( m_pnHatchingListState );
        static_cast<SvxHatchTabPage&>(pTab).SetColorChgd( m_pnColorListState );
        static_cast<SvxHatchTabPage&>(pTab).Construct();
        static_cast<SvxHatchTabPage&>(pTab).ActivatePage( m_rXFSet );
        static_cast<SvxHatchTabPage&>(pTab).Reset(&m_rXFSet);
        static_cast<SvxHatchTabPage&>(pTab).Show();
    }
    else if(nId == BITMAP)
    {
        static_cast<SvxBitmapTabPage&>(pTab).SetBitmapList( m_pBitmapList );
        static_cast<SvxBitmapTabPage&>(pTab).SetPos( &m_nPos );
        static_cast<SvxBitmapTabPage&>(pTab).SetBmpChgd( m_pnBitmapListState );
        static_cast<SvxBitmapTabPage&>(pTab).Construct();
        static_cast<SvxBitmapTabPage&>(pTab).ActivatePage( m_rXFSet );
        static_cast<SvxBitmapTabPage&>(pTab).Reset(&m_rXFSet);
        static_cast<SvxBitmapTabPage&>(pTab).Show();
    }
    else if(nId == PATTERN)
    {
        static_cast<SvxPatternTabPage&>(pTab).SetColorList( m_pColorList );
        static_cast<SvxPatternTabPage&>(pTab).SetPatternList( m_pPatternList );
        static_cast<SvxPatternTabPage&>(pTab).SetPos( &m_nPos );
        static_cast<SvxPatternTabPage&>(pTab).SetPtrnChgd( m_pnPatternListState );
        static_cast<SvxPatternTabPage&>(pTab).SetColorChgd( m_pnColorListState );
        static_cast<SvxPatternTabPage&>(pTab).Construct();
        static_cast<SvxPatternTabPage&>(pTab).ActivatePage( m_rXFSet );
        static_cast<SvxPatternTabPage&>(pTab).Reset( &m_rXFSet );
        static_cast<SvxPatternTabPage&>(pTab).Show();
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx
index 55f8ea5..a462892 100644
--- a/cui/source/tabpages/tpbitmap.cxx
+++ b/cui/source/tabpages/tpbitmap.cxx
@@ -84,15 +84,12 @@
    m_aXBitmapItem( OUString(), Graphic() ),
    m_fObjectWidth(0.0),
    m_fObjectHeight(0.0),
    m_nPageType(nullptr),
    m_nDlgType(0),
    m_nPos(nullptr),

    m_pbAreaTP( nullptr ),
    m_pPos(nullptr),

    m_aXFillAttr          ( rInAttrs.GetPool() ),
    m_rXFSet              ( m_aXFillAttr.GetItemSet() ),
    mpView(nullptr),
    meDlgUnit(GetModuleFieldUnit( GetItemSet() )),
    nFilledWidthPercent(0),
    nFilledHeightPercent(0),
    nZoomedWidthPercent(0),
@@ -185,18 +182,12 @@

void SvxBitmapTabPage::ActivatePage( const SfxItemSet& )
{
    if( m_nDlgType == 0 ) // area dialog
    if( *m_pPos != LISTBOX_ENTRY_NOTFOUND )
    {
        *m_pbAreaTP = false;

        if( *m_nPageType == PageType::Bitmap && *m_nPos != LISTBOX_ENTRY_NOTFOUND )
        {
            sal_uInt16 nId = m_pBitmapLB->GetItemId( static_cast<size_t>( *m_nPos ) );
            m_pBitmapLB->SelectItem(nId);
        }
        *m_nPageType = PageType::Bitmap;
        *m_nPos = LISTBOX_ENTRY_NOTFOUND;
        sal_uInt16 nId = m_pBitmapLB->GetItemId( static_cast<size_t>( *m_pPos ) );
        m_pBitmapLB->SelectItem(nId);
    }
    *m_pPos = LISTBOX_ENTRY_NOTFOUND;
}


@@ -211,80 +202,73 @@

bool SvxBitmapTabPage::FillItemSet( SfxItemSet* rAttrs )
{
    if( m_nDlgType == 0 && !*m_pbAreaTP )
    rAttrs->Put(XFillStyleItem(drawing::FillStyle_BITMAP));
    size_t nPos = m_pBitmapLB->GetSelectItemPos();
    if(VALUESET_ITEM_NOTFOUND != nPos)
    {
        if(PageType::Bitmap == *m_nPageType)
        const XBitmapEntry* pXBitmapEntry = m_pBitmapList->GetBitmap(nPos);
        const OUString aString(m_pBitmapLB->GetItemText( m_pBitmapLB->GetSelectItemId() ));
        rAttrs->Put(XFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject()));
    }

    BitmapStyle eStylePos = (BitmapStyle)m_pBitmapStyleLB->GetSelectEntryPos();        bool bIsStretched( eStylePos == STRETCHED );
    bool bIsTiled( eStylePos == TILED );

    rAttrs->Put( XFillBmpTileItem(bIsTiled) );
    rAttrs->Put( XFillBmpStretchItem(bIsStretched) );

    if(!bIsStretched)
    {
        Size aSetBitmapSize;
        switch(eStylePos)
        {
            rAttrs->Put(XFillStyleItem(drawing::FillStyle_BITMAP));
            size_t nPos = m_pBitmapLB->GetSelectItemPos();
            if(VALUESET_ITEM_NOTFOUND != nPos)
            case ORIGINAL:
                aSetBitmapSize = rBitmapSize;
                break;
            case FILLED:
                aSetBitmapSize = rFilledSize;
                break;
            case ZOOMED:
                aSetBitmapSize = rZoomedSize;
                break;
            case CUSTOM:
            case TILED:
            {
                const XBitmapEntry* pXBitmapEntry = m_pBitmapList->GetBitmap(nPos);
                const OUString aString(m_pBitmapLB->GetItemText( m_pBitmapLB->GetSelectItemId() ));
                rAttrs->Put(XFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject()));
            }

            BitmapStyle eStylePos = (BitmapStyle)m_pBitmapStyleLB->GetSelectEntryPos();
            bool bIsStretched( eStylePos == STRETCHED );
            bool bIsTiled( eStylePos == TILED );

            rAttrs->Put( XFillBmpTileItem(bIsTiled) );
            rAttrs->Put( XFillBmpStretchItem(bIsStretched) );

            if(!bIsStretched)
            {
                Size aSetBitmapSize;
                switch(eStylePos)
                sal_Int64 nWidthPercent = m_pBitmapWidth->Denormalize(m_pBitmapWidth->GetValue());
                sal_Int64 nHeightPercent = m_pBitmapHeight->Denormalize(m_pBitmapHeight->GetValue());
                if(eStylePos == CUSTOM && m_pTsbScale->IsEnabled() && m_pTsbScale->GetState() == TRISTATE_TRUE)
                {
                    case ORIGINAL:
                        aSetBitmapSize = rBitmapSize;
                        break;
                    case FILLED:
                        aSetBitmapSize = rFilledSize;
                        break;
                    case ZOOMED:
                        aSetBitmapSize = rZoomedSize;
                        break;
                    case CUSTOM:
                    case TILED:
                    {
                        sal_Int64 nWidthPercent = m_pBitmapWidth->Denormalize(m_pBitmapWidth->GetValue());
                        sal_Int64 nHeightPercent = m_pBitmapHeight->Denormalize(m_pBitmapHeight->GetValue());
                        if(eStylePos == CUSTOM && m_pTsbScale->IsEnabled() && m_pTsbScale->GetState() == TRISTATE_TRUE)
                        {
                            aSetBitmapSize.Width() = -nWidthPercent;
                            aSetBitmapSize.Height() = -nHeightPercent;
                        }
                        else
                        {
                            aSetBitmapSize.Width() = static_cast<long>(nWidthPercent*rBitmapSize.Width()/100);
                            aSetBitmapSize.Height() = static_cast<long>(nHeightPercent*rBitmapSize.Height()/100);
                        }
                        break;
                    }
                    default:
                        break;
                    aSetBitmapSize.Width() = -nWidthPercent;
                    aSetBitmapSize.Height() = -nHeightPercent;
                }
                rAttrs->Put( XFillBmpSizeXItem( aSetBitmapSize.Width() ) );
                rAttrs->Put( XFillBmpSizeYItem( aSetBitmapSize.Height() ) );
                else
                {
                    aSetBitmapSize.Width() = static_cast<long>(nWidthPercent*rBitmapSize.Width()/100);
                    aSetBitmapSize.Height() = static_cast<long>(nHeightPercent*rBitmapSize.Height()/100);
                }
                break;
            }

            if(m_pPositionLB->IsEnabled())
                rAttrs->Put( XFillBmpPosItem( static_cast<RectPoint>( m_pPositionLB->GetSelectEntryPos() ) ) );
            if(m_pPositionOffX->IsEnabled())
                rAttrs->Put( XFillBmpPosOffsetXItem( m_pPositionOffX->GetValue() ) );
            if(m_pPositionOffY->IsEnabled())
                rAttrs->Put( XFillBmpPosOffsetYItem( m_pPositionOffY->GetValue() ) );
            if(m_pTileOffBox->IsEnabled())
            {
                TileOffset eValue = static_cast<TileOffset>(m_pTileOffLB->GetSelectEntryPos());
                sal_uInt16 nOffsetValue = static_cast<sal_uInt16>(m_pTileOffset->GetValue());
                sal_uInt16 nRowOff = (eValue == ROW) ? nOffsetValue : 0;
                sal_uInt16 nColOff = (eValue == COLUMN) ? nOffsetValue : 0;
                rAttrs->Put( XFillBmpTileOffsetXItem(nRowOff) );
                rAttrs->Put( XFillBmpTileOffsetYItem(nColOff) );
            }
            default:
                break;
        }
        rAttrs->Put( XFillBmpSizeXItem( aSetBitmapSize.Width() ) );
        rAttrs->Put( XFillBmpSizeYItem( aSetBitmapSize.Height() ) );
    }

    if(m_pPositionLB->IsEnabled())
        rAttrs->Put( XFillBmpPosItem( static_cast<RectPoint>( m_pPositionLB->GetSelectEntryPos() ) ) );
    if(m_pPositionOffX->IsEnabled())
        rAttrs->Put( XFillBmpPosOffsetXItem( m_pPositionOffX->GetValue() ) );
    if(m_pPositionOffY->IsEnabled())
        rAttrs->Put( XFillBmpPosOffsetYItem( m_pPositionOffY->GetValue() ) );
    if(m_pTileOffBox->IsEnabled())
    {
        TileOffset eValue = static_cast<TileOffset>(m_pTileOffLB->GetSelectEntryPos());
        sal_uInt16 nOffsetValue = static_cast<sal_uInt16>(m_pTileOffset->GetValue());
        sal_uInt16 nRowOff = (eValue == ROW) ? nOffsetValue : 0;
        sal_uInt16 nColOff = (eValue == COLUMN) ? nOffsetValue : 0;
        rAttrs->Put( XFillBmpTileOffsetXItem(nRowOff) );
        rAttrs->Put( XFillBmpTileOffsetYItem(nColOff) );
    }
    return true;
}
@@ -505,7 +489,7 @@

    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        pGraphicObject.reset(new GraphicObject(m_pBitmapList->GetBitmap(nPos)->GetGraphicObject()));
        pGraphicObject.reset(new GraphicObject(m_pBitmapList->GetBitmap( static_cast<sal_uInt16>(nPos) )->GetGraphicObject()));
    }
    else
    {
@@ -604,7 +588,7 @@

        if( aQueryBox->Execute() == RET_YES )
        {
            m_pBitmapList->Remove(nPos);
            m_pBitmapList->Remove( static_cast<sal_uInt16>(nPos) );
            m_pBitmapLB->RemoveItem( nId );
            nId = m_pBitmapLB->GetItemId(0);
            m_pBitmapLB->SelectItem( nId );
diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
index 36abaf5..9f06f9c 100644
--- a/cui/source/tabpages/tpcolor.cxx
+++ b/cui/source/tabpages/tpcolor.cxx
@@ -59,10 +59,7 @@
    , rOutAttrs           ( rInAttrs )
    // All the horrific pointers we store and should not
    , pnColorListState( nullptr )
    , pPageType( nullptr )
    , nDlgType( 0 )
    , pPos( nullptr )
    , pbAreaTP( nullptr )
    , aXFStyleItem( drawing::FillStyle_SOLID )
    , aXFillColorItem( OUString(), Color( COL_BLACK ) )
    , aXFillAttr( static_cast<XOutdevItemPool*>( rInAttrs.GetPool() ))
@@ -238,47 +235,40 @@

void SvxColorTabPage::ActivatePage( const SfxItemSet& )
{
    if( nDlgType == 0 ) // area dialog
    if( pColorList.is() )
    {
        *pbAreaTP = false;

        if( pColorList.is() )
        if( *pPos != LISTBOX_ENTRY_NOTFOUND )
        {
            if( *pPageType == PageType::Color && *pPos != LISTBOX_ENTRY_NOTFOUND )
            {
                m_pValSetColorList->SelectItem( m_pValSetColorList->GetItemId( static_cast<size_t>(*pPos) ) );
                const XColorEntry* pEntry = pColorList->GetColor(*pPos);
                aPreviousColor = pEntry->GetColor();
                ChangeColor(pEntry->GetColor());
            }
            else if( *pPageType == PageType::Color && *pPos == LISTBOX_ENTRY_NOTFOUND )
            {
                const SfxPoolItem* pPoolItem = nullptr;
                if( SfxItemState::SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), true, &pPoolItem ) )
                {
                    SetColorModel( ColorModel::RGB );
                    ChangeColorModel();

                    aPreviousColor = static_cast<const XFillColorItem*>(pPoolItem)->GetColorValue();
                    ChangeColor( aPreviousColor );


                    m_pRcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
                    m_pGcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
                    m_pBcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
                    m_pHexcustom->SetColor( aCurrentColor.GetColor() );

                }
            }

            m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
            m_pCtlPreviewOld->Invalidate();

            SelectValSetHdl_Impl( m_pValSetColorList );

            *pPageType = PageType::Color;
            *pPos = LISTBOX_ENTRY_NOTFOUND;
            m_pValSetColorList->SelectItem( m_pValSetColorList->GetItemId( static_cast<size_t>(*pPos) ) );
            const XColorEntry* pEntry = pColorList->GetColor(*pPos);
            aPreviousColor = pEntry->GetColor();
            ChangeColor(pEntry->GetColor());
        }
        else if( *pPos == LISTBOX_ENTRY_NOTFOUND )
        {
            const SfxPoolItem* pPoolItem = nullptr;
            if( SfxItemState::SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLCOLOR ), true, &pPoolItem ) )
            {
                SetColorModel( ColorModel::RGB );
                ChangeColorModel();

                aPreviousColor = static_cast<const XFillColorItem*>(pPoolItem)->GetColorValue();
                ChangeColor( aPreviousColor );

                m_pRcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetRed() ) );
                m_pGcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetGreen() ) );
                m_pBcustom->SetValue( ColorToPercent_Impl( aCurrentColor.GetBlue() ) );
                m_pHexcustom->SetColor( aCurrentColor.GetColor() );

            }
        }

        m_pCtlPreviewOld->SetAttributes( aXFillAttr.GetItemSet() );
        m_pCtlPreviewOld->Invalidate();

        SelectValSetHdl_Impl( m_pValSetColorList );

        *pPos = LISTBOX_ENTRY_NOTFOUND;
    }
}

@@ -293,13 +283,9 @@

bool SvxColorTabPage::FillItemSet( SfxItemSet* rSet )
{
    if( ( nDlgType != 0 ) ||
        ( *pPageType == PageType::Color && !*pbAreaTP ) )
    {
        maPaletteManager.AddRecentColor(aCurrentColor, "#" + aCurrentColor.AsRGBHexString().toAsciiUpperCase());
        rSet->Put( XFillColorItem( OUString(), aCurrentColor ) );
        rSet->Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
    }
    maPaletteManager.AddRecentColor( aCurrentColor, OUString() );
    rSet->Put( XFillColorItem( OUString(), aCurrentColor ) );
    rSet->Put( XFillStyleItem( drawing::FillStyle_SOLID ) );
    return true;
}

@@ -774,6 +760,46 @@
}


void SvxColorTabPage::SetupForViewFrame( SfxViewFrame *pViewFrame )
{
    const OfaRefItem<XColorList> *pPtr = nullptr;
    if ( pViewFrame != nullptr && pViewFrame->GetDispatcher() )
        pPtr = static_cast<const OfaRefItem<XColorList> *>(pViewFrame->
            GetDispatcher()->Execute( SID_GET_COLORLIST,
                                      SfxCallMode::SYNCHRON ));
    pColorList = pPtr ? pPtr->GetValue() : XColorList::GetStdColorList();

    //SetPos( &pShadow->nUnknownPos );
    //SetColorChgd( &pShadow->nChangeType );
    Construct();
}

void SvxColorTabPage::SaveToViewFrame( SfxViewFrame *pViewFrame )
{
    if( !pColorList.is() )
        return;

    if( !pViewFrame )
        return;

    // notify current viewframe that it uses the same color table
    if ( !pViewFrame->GetDispatcher() )
        return;

    const OfaRefItem<XColorList> * pPtr;
    pPtr = static_cast<const OfaRefItem<XColorList>*>(pViewFrame->GetDispatcher()->Execute( SID_GET_COLORLIST, SfxCallMode::SYNCHRON ));
    if( pPtr )
    {
        XColorListRef pReference = pPtr->GetValue();

        if( pReference.is() &&
            pReference->GetPath() == pColorList->GetPath() &&
            pReference->GetName() == pColorList->GetName() )
            SfxObjectShell::Current()->PutItem( SvxColorListItem( pColorList,
                                                                  SID_COLOR_TABLE ) );
    }
}

void SvxColorTabPage::SetPropertyList( XPropertyListType t, const XPropertyListRef &xRef )
{
    (void) t;
diff --git a/cui/source/tabpages/tpgradnt.cxx b/cui/source/tabpages/tpgradnt.cxx
index 11effdd..d1b50c7 100644
--- a/cui/source/tabpages/tpgradnt.cxx
+++ b/cui/source/tabpages/tpgradnt.cxx
@@ -58,10 +58,7 @@

    m_pnGradientListState ( nullptr ),
    m_pnColorListState    ( nullptr ),
    m_pPageType           ( nullptr ),
    m_nDlgType            ( 0 ),
    m_pPos                ( nullptr ),
    m_pbAreaTP            ( nullptr ),

    m_aXFStyleItem        ( drawing::FillStyle_GRADIENT ),
    m_aXGradientItem      ( OUString(), XGradient( COL_BLACK, COL_WHITE ) ),
@@ -176,78 +173,73 @@
}


void SvxGradientTabPage::ActivatePage( const SfxItemSet&  )
void SvxGradientTabPage::ActivatePage( const SfxItemSet& rSet )
{
    sal_Int32 nPos;
    sal_Int32 nCount;

    if( m_nDlgType == 0 ) // area dialog
    if( m_pColorList.is() )
    {
        *m_pbAreaTP = false;

        if( m_pColorList.is() )
        // ColorList
        if( *m_pnColorListState & ChangeType::CHANGED ||
            *m_pnColorListState & ChangeType::MODIFIED )
        {
            // ColorList
            if( *m_pnColorListState & ChangeType::CHANGED ||
                *m_pnColorListState & ChangeType::MODIFIED )
            {
                if( *m_pnColorListState & ChangeType::CHANGED )
                    m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();
            if( *m_pnColorListState & ChangeType::CHANGED )
                m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();

                // LbColorFrom
                nPos = m_pLbColorFrom->GetSelectEntryPos();
                m_pLbColorFrom->Clear();
                m_pLbColorFrom->Fill( m_pColorList );
                nCount = m_pLbColorFrom->GetEntryCount();
                if( nCount == 0 )
                    ; // this case should not occur
                else if( nCount <= nPos )
                    m_pLbColorFrom->SelectEntryPos( 0 );
                else
                    m_pLbColorFrom->SelectEntryPos( nPos );

                // LbColorTo
                nPos = m_pLbColorTo->GetSelectEntryPos();
                m_pLbColorTo->Clear();
                m_pLbColorTo->CopyEntries( *m_pLbColorFrom );
                nCount = m_pLbColorTo->GetEntryCount();
                if( nCount == 0 )
                    ; // this case should not occur
                else if( nCount <= nPos )
                    m_pLbColorTo->SelectEntryPos( 0 );
                else
                    m_pLbColorTo->SelectEntryPos( nPos );

                ModifiedHdl_Impl( this );
            }

            // determining (and possibly cutting) the name and
            // displaying it in the GroupBox
            OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
            aString         += ": ";
            INetURLObject   aURL( m_pGradientList->GetPath() );

            aURL.Append( m_pGradientList->GetName() );
            SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

            if ( aURL.getBase().getLength() > 18 )
            {
                aString += aURL.getBase().copy( 0, 15 ) + "...";
            }
            // LbColorFrom
            nPos = m_pLbColorFrom->GetSelectEntryPos();
            m_pLbColorFrom->Clear();
            m_pLbColorFrom->Fill( m_pColorList );
            nCount = m_pLbColorFrom->GetEntryCount();
            if( nCount == 0 )
                ; // this case should not occur
            else if( nCount <= nPos )
                m_pLbColorFrom->SelectEntryPos( 0 );
            else
                aString += aURL.getBase();
                m_pLbColorFrom->SelectEntryPos( nPos );

            if ( *m_pPageType == PageType::Gradient && *m_pPos != LISTBOX_ENTRY_NOTFOUND )
            {
                sal_uInt16 nId = m_pGradientLB->GetItemId( static_cast<size_t>( *m_pPos ) );
                m_pGradientLB->SelectItem( nId );
            }
            // colors could have been deleted
            ChangeGradientHdl_Impl();
            // LbColorTo
            nPos = m_pLbColorTo->GetSelectEntryPos();
            m_pLbColorTo->Clear();
            m_pLbColorTo->CopyEntries( *m_pLbColorFrom );
            nCount = m_pLbColorTo->GetEntryCount();
            if( nCount == 0 )
                ; // this case should not occur
            else if( nCount <= nPos )
                m_pLbColorTo->SelectEntryPos( 0 );
            else
                m_pLbColorTo->SelectEntryPos( nPos );

            *m_pPageType = PageType::Gradient;
            *m_pPos = LISTBOX_ENTRY_NOTFOUND;
            ModifiedHdl_Impl( this );
        }

        // determining (and possibly cutting) the name and
        // displaying it in the GroupBox
        OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
        aString         += ": ";
        INetURLObject   aURL( m_pGradientList->GetPath() );

        aURL.Append( m_pGradientList->GetName() );
        SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

        if ( aURL.getBase().getLength() > 18 )
        {
            aString += aURL.getBase().copy( 0, 15 ) + "...";
        }
        else
            aString += aURL.getBase();

        *m_pPos = SearchGradientList( ( &static_cast<const XFillGradientItem&>( rSet.Get(XATTR_FILLGRADIENT) ) )->GetName() );
        if ( *m_pPos != LISTBOX_ENTRY_NOTFOUND )
        {
            sal_uInt16 nId = m_pGradientLB->GetItemId( static_cast<size_t>( *m_pPos ) );
            m_pGradientLB->SelectItem( nId );
        }
        // colors could have been deleted
        ChangeGradientHdl_Impl();

        *m_pPos = LISTBOX_ENTRY_NOTFOUND;
    }
}

@@ -260,12 +252,81 @@
    return DeactivateRC::LeavePage;
}

long SvxGradientTabPage::CheckChanges_Impl()
{
    // is used here in order to NOT lose changes
    XGradient aTmpGradient( m_pLbColorFrom->GetSelectEntryColor(),
                          m_pLbColorTo->GetSelectEntryColor(),
                          (css::awt::GradientStyle) m_pLbGradientType->GetSelectEntryPos(),
                          static_cast<long>(m_pMtrAngle->GetValue() * 10), // should be changed in resource
                          (sal_uInt16) m_pMtrCenterX->GetValue(),
                          (sal_uInt16) m_pMtrCenterY->GetValue(),
                          (sal_uInt16) m_pMtrBorder->GetValue(),
                          (sal_uInt16) m_pMtrColorFrom->GetValue(),
                          (sal_uInt16) m_pMtrColorTo->GetValue() );

    size_t nPos = m_pGradientLB->GetSelectItemPos();
    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        XGradient aGradient = m_pGradientList->GetGradient( static_cast<sal_uInt16>(nPos) )->GetGradient();

        if( !( aTmpGradient == aGradient ) )
        {
            ResMgr& rMgr = CUI_MGR();
            Image aWarningBoxImage = WarningBox::GetStandardImage();
            ScopedVclPtrInstance<SvxMessDialog> aMessDlg( GetParentDialog(),
                                                          SVX_RESSTR( RID_SVXSTR_GRADIENT ),
                                                          CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_GRADIENT ),
                                                          &aWarningBoxImage );
            assert(aMessDlg && "Dialog creation failed!");
            aMessDlg->SetButtonText( SvxMessDialogButton::N1,
                                    OUString( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
            aMessDlg->SetButtonText( SvxMessDialogButton::N2,
                                    OUString( ResId( RID_SVXSTR_ADD, rMgr ) ) );

            short nRet = aMessDlg->Execute();

            switch( nRet )
            {
                case RET_BTN_1:
                {
                    ClickModifyHdl_Impl( nullptr );
                }
                break;

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

                case RET_CANCEL:
                break;
            }
        }
    }
    nPos = m_pGradientLB->GetSelectItemPos();
    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        *m_pPos = static_cast<sal_Int32>(nPos);
    }
    return 0L;
}


bool SvxGradientTabPage::FillItemSet( SfxItemSet* rSet )
{
    if( m_nDlgType == 0 && *m_pPageType == PageType::Gradient && !*m_pbAreaTP )
    std::unique_ptr<XGradient> pXGradient;
    OUString      aString;
    size_t        nPos = m_pGradientLB->GetSelectItemPos();
    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        std::unique_ptr<XGradient> pXGradient;
        pXGradient.reset(new XGradient( m_pGradientList->GetGradient( static_cast<sal_uInt16>(nPos) )->GetGradient() ));
        aString = m_pGradientLB->GetItemText( m_pGradientLB->GetSelectItemId() );
    }
    else
    // gradient was passed (unidentified)
    {
        pXGradient.reset(new XGradient( m_pLbColorFrom->GetSelectEntryColor(),
                    m_pLbColorTo->GetSelectEntryColor(),
                    (css::awt::GradientStyle) m_pLbGradientType->GetSelectEntryPos(),
@@ -275,25 +336,16 @@
                    (sal_uInt16) m_pMtrBorder->GetValue(),
                    (sal_uInt16) m_pMtrColorFrom->GetValue(),
                    (sal_uInt16) m_pMtrColorTo->GetValue() ));

        OUString      aString;
        size_t        nPos = m_pGradientLB->GetSelectItemPos();
        if( nPos != VALUESET_ITEM_NOTFOUND )
        {
            XGradient aTmpGradient = m_pGradientList->GetGradient( static_cast<sal_uInt16>(nPos) )->GetGradient();
            if( *pXGradient ==  aTmpGradient )
                aString = m_pGradientLB->GetItemText( m_pGradientLB->GetSelectItemId() );
        }

        sal_uInt16 nValue = 0;
        if( !m_pCbIncrement->IsChecked() )
            nValue = m_pMtrIncrement->GetValue();

        assert( pXGradient && "XGradient could not be created" );
        rSet->Put( XFillStyleItem( drawing::FillStyle_GRADIENT ) );
        rSet->Put( XFillGradientItem( aString, *pXGradient ) );
        rSet->Put( XGradientStepCountItem( nValue ) );
    }

    sal_uInt16 nValue = 0;
    if( !m_pCbIncrement->IsChecked() )
        nValue = m_pMtrIncrement->GetValue();

    assert( pXGradient && "XGradient could not be created" );
    rSet->Put( XFillStyleItem( drawing::FillStyle_GRADIENT ) );
    rSet->Put( XFillGradientItem( aString, *pXGradient ) );
    rSet->Put( XGradientStepCountItem( nValue ) );
    return true;
}

@@ -473,7 +525,7 @@

    if ( nPos != VALUESET_ITEM_NOTFOUND )
    {
        OUString aName(m_pGradientList->GetGradient(nPos)->GetName());
        OUString aName( m_pGradientList->GetGradient( static_cast<sal_uInt16>(nPos) )->GetName() );

        XGradient aXGradient( m_pLbColorFrom->GetSelectEntryColor(),
                              m_pLbColorTo->GetSelectEntryColor(),
@@ -487,7 +539,7 @@

        m_pGradientList->Replace(o3tl::make_unique<XGradientEntry>(aXGradient, aName), nPos);

        Bitmap aBitmap = m_pGradientList->GetBitmapForPreview(nPos, m_pGradientLB->GetIconSize());
        Bitmap aBitmap = m_pGradientList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_pGradientLB->GetIconSize() );
        m_pGradientLB->RemoveItem( nId );
        m_pGradientLB->InsertItem( nId, Image(aBitmap), aName, static_cast<sal_uInt16>(nPos) );
        m_pGradientLB->SelectItem( nId );
@@ -579,7 +631,7 @@
    size_t nPos = m_pGradientLB->GetSelectItemPos();

    if( nPos != VALUESET_ITEM_NOTFOUND )
        pGradient.reset(new XGradient(m_pGradientList->GetGradient(nPos)->GetGradient()));
        pGradient.reset(new XGradient( m_pGradientList->GetGradient( static_cast<sal_uInt16>( nPos ) )->GetGradient() ));
    else
    {
        const SfxPoolItem* pPoolItem = nullptr;
diff --git a/cui/source/tabpages/tphatch.cxx b/cui/source/tabpages/tphatch.cxx
index 6d8d456..9b6c5ad 100644
--- a/cui/source/tabpages/tphatch.cxx
+++ b/cui/source/tabpages/tphatch.cxx
@@ -58,10 +58,7 @@
    m_rOutAttrs           ( rInAttrs ),
    m_pnHatchingListState ( nullptr ),
    m_pnColorListState    ( nullptr ),
    m_pPageType           ( nullptr ),
    m_nDlgType            ( 0 ),
    m_pPos                ( nullptr ),
    m_pbAreaTP            ( nullptr ),

    m_aXFStyleItem        ( drawing::FillStyle_HATCH ),
    m_aXHatchItem         ( OUString(), XHatch() ),
@@ -167,61 +164,56 @@
    sal_Int32 nPos;
    sal_Int32 nCount;

    if( m_nDlgType == 0 ) // area dialog
    if( m_pColorList.is() )
    {
        *m_pbAreaTP = false;

        if( m_pColorList.is() )
        // ColorList
        if( *m_pnColorListState & ChangeType::CHANGED ||
            *m_pnColorListState & ChangeType::MODIFIED )
        {
            // ColorList
            if( *m_pnColorListState & ChangeType::CHANGED ||
                *m_pnColorListState & ChangeType::MODIFIED )
            {
                if( *m_pnColorListState & ChangeType::CHANGED )
                    m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();
            if( *m_pnColorListState & ChangeType::CHANGED )
                m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();

                // LbLineColor
                nPos = m_pLbLineColor->GetSelectEntryPos();
                m_pLbLineColor->Clear();
                m_pLbLineColor->Fill( m_pColorList );
                nCount = m_pLbLineColor->GetEntryCount();
                if( nCount == 0 )
                    ; // this case should not occur
                else if( nCount <= nPos )
                    m_pLbLineColor->SelectEntryPos( 0 );
                else
                    m_pLbLineColor->SelectEntryPos( nPos );

                ModifiedHdl_Impl( this );
            }

            // determining (possibly cutting) the name
            // and displaying it in the GroupBox
            OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
            aString         += ": ";
            INetURLObject   aURL( m_pHatchingList->GetPath() );

            aURL.Append( m_pHatchingList->GetName() );
            SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

            if ( aURL.getBase().getLength() > 18 )
            {
                aString += aURL.getBase().copy( 0, 15 ) + "...";
            }
            // LbLineColor
            nPos = m_pLbLineColor->GetSelectEntryPos();
            m_pLbLineColor->Clear();
            m_pLbLineColor->Fill( m_pColorList );
            nCount = m_pLbLineColor->GetEntryCount();
            if( nCount == 0 )
                ; // this case should not occur
            else if( nCount <= nPos )
                m_pLbLineColor->SelectEntryPos( 0 );
            else
                aString += aURL.getBase();
                m_pLbLineColor->SelectEntryPos( nPos );

            if( *m_pPageType == PageType::Hatch && *m_pPos != LISTBOX_ENTRY_NOTFOUND )
            {
                sal_uInt16 nId = m_pHatchLB->GetItemId( static_cast<size_t>( *m_pPos ) );
                m_pHatchLB->SelectItem( nId );
            }
            // colors could have been deleted
            ChangeHatchHdl_Impl();

            *m_pPageType = PageType::Hatch;
            *m_pPos = LISTBOX_ENTRY_NOTFOUND;
            ModifiedHdl_Impl( this );
        }

        // determining (possibly cutting) the name
        // and displaying it in the GroupBox
        OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
        aString         += ": ";
        INetURLObject   aURL( m_pHatchingList->GetPath() );

        aURL.Append( m_pHatchingList->GetName() );
        SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

        if ( aURL.getBase().getLength() > 18 )
        {
            aString += aURL.getBase().copy( 0, 15 ) + "...";
        }
        else
            aString += aURL.getBase();

        *m_pPos = SearchHatchList( ( &static_cast<const XFillHatchItem&>( rSet.Get(XATTR_FILLHATCH)) )->GetName() );
        if( *m_pPos != LISTBOX_ENTRY_NOTFOUND )
        {
            sal_uInt16 nId = m_pHatchLB->GetItemId( static_cast<size_t>( *m_pPos ) );
            m_pHatchLB->SelectItem( nId );
        }
        // colors could have been deleted
        ChangeHatchHdl_Impl();

        *m_pPos = LISTBOX_ENTRY_NOTFOUND;
    }

    XFillBackgroundItem aBckItem( static_cast<const XFillBackgroundItem&>(rSet.Get(XATTR_FILLBACKGROUND)));
@@ -281,42 +273,35 @@

bool SvxHatchTabPage::FillItemSet( SfxItemSet* rSet )
{
    if( m_nDlgType == 0 && !*m_pbAreaTP ) // area dialog
    std::unique_ptr<XHatch> pXHatch;
    OUString  aString;
    size_t nPos = m_pHatchLB->GetSelectItemPos();
    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        if( *m_pPageType == PageType::Hatch )
        {
            std::unique_ptr<XHatch> pXHatch;
            pXHatch.reset(new XHatch( m_pLbLineColor->GetSelectEntryColor(),
                            (css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
                            GetCoreValue( *m_pMtrDistance, m_ePoolUnit ),
                            static_cast<long>(m_pMtrAngle->GetValue() * 10) ));

            OUString  aString;
            if( !( m_pMtrDistance->IsValueChangedFromSaved() ||
                m_pMtrAngle->IsValueChangedFromSaved() ||
                m_pLbLineType->IsValueChangedFromSaved() ||
                m_pLbLineColor->IsValueChangedFromSaved() ||
                m_pHatchLB->IsValueChangedFromSaved() ) )
            {
                aString = m_pHatchLB->GetItemText( m_pHatchLB->GetSelectItemId() );;
            }

            assert( pXHatch && "XHatch couldn't be created" );
            rSet->Put( XFillStyleItem( drawing::FillStyle_HATCH ) );
            rSet->Put( XFillHatchItem( aString, *pXHatch ) );

            rSet->Put( XFillBackgroundItem( m_pCbBackgroundColor->IsChecked() ) );
            if(m_pCbBackgroundColor->IsChecked())
            {
                sal_uInt32 nPosBckColor = m_pLbBackgroundColor->GetSelectEntryPos();
                OUString aBckColorString;
                if( nPosBckColor != LISTBOX_ENTRY_NOTFOUND )
                    aBckColorString = m_pLbBackgroundColor->GetSelectEntry();
                else
                    aBckColorString = OUString();
                rSet->Put( XFillColorItem( aBckColorString, m_pLbBackgroundColor->GetSelectEntryColor() ) );
            }
        }
        pXHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() ));
        aString = m_pHatchLB->GetItemText( m_pHatchLB->GetSelectItemId() );
    }
    // gradient has been (unidentifiedly) passed
    else
    {
        pXHatch.reset(new XHatch( m_pLbLineColor->GetSelectEntryColor(),
                    (css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
                    GetCoreValue( *m_pMtrDistance, m_ePoolUnit ),
                    static_cast<long>(m_pMtrAngle->GetValue() * 10) ));
    }
    assert( pXHatch && "XHatch couldn't be created" );
    rSet->Put( XFillStyleItem( drawing::FillStyle_HATCH ) );
    rSet->Put( XFillHatchItem( aString, *pXHatch ) );
    rSet->Put( XFillBackgroundItem( m_pCbBackgroundColor->IsChecked() ) );
    if(m_pCbBackgroundColor->IsChecked())
    {
        sal_uInt32 nPosBckColor = m_pLbBackgroundColor->GetSelectEntryPos();
        OUString aBckColorString;
        if( nPosBckColor != LISTBOX_ENTRY_NOTFOUND )
            aBckColorString = m_pLbBackgroundColor->GetSelectEntry();
        else
            aBckColorString = OUString();
        rSet->Put( XFillColorItem( aBckColorString, m_pLbBackgroundColor->GetSelectEntryColor() ) );
    }
    return true;
}
@@ -418,7 +403,7 @@
    size_t nPos = m_pHatchLB->GetSelectItemPos();

    if( nPos != VALUESET_ITEM_NOTFOUND )
        pHatch.reset(new XHatch(m_pHatchingList->GetHatch(nPos)->GetHatch()));
        pHatch.reset(new XHatch( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetHatch() ));
    else
    {
        const SfxPoolItem* pPoolItem = nullptr;
@@ -547,7 +532,7 @@

    if( nPos != VALUESET_ITEM_NOTFOUND )
    {
        OUString aName(m_pHatchingList->GetHatch(nPos)->GetName());
        OUString aName( m_pHatchingList->GetHatch( static_cast<sal_uInt16>(nPos) )->GetName() );

        XHatch aXHatch( m_pLbLineColor->GetSelectEntryColor(),
                        (css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
@@ -556,7 +541,7 @@

        m_pHatchingList->Replace(o3tl::make_unique<XHatchEntry>(aXHatch, aName), nPos);

        Bitmap aBitmap = m_pHatchingList->GetBitmapForPreview(nPos, m_pHatchLB->GetIconSize());
        Bitmap aBitmap = m_pHatchingList->GetBitmapForPreview( static_cast<sal_uInt16>(nPos), m_pHatchLB->GetIconSize() );
        m_pHatchLB->RemoveItem( nId );
        m_pHatchLB->InsertItem( nId, Image(aBitmap), aName, static_cast<sal_uInt16>(nPos) );
        m_pHatchLB->SelectItem( nId );
diff --git a/cui/source/tabpages/tppattern.cxx b/cui/source/tabpages/tppattern.cxx
index 0342d1e..7c73b3a 100644
--- a/cui/source/tabpages/tppattern.cxx
+++ b/cui/source/tabpages/tppattern.cxx
@@ -91,11 +91,7 @@

    m_pnPatternListState  ( nullptr ),
    m_pnColorListState    ( nullptr ),
    m_pPageType           ( nullptr ),
    m_nDlgType            ( 0 ),
    m_pPos                ( nullptr ),
    m_pbAreaTP            ( nullptr ),

    m_bPtrnChanged        ( false ),

    m_aXFStyleItem        ( drawing::FillStyle_BITMAP ),
@@ -168,77 +164,72 @@
}


void SvxPatternTabPage::ActivatePage( const SfxItemSet&  )
void SvxPatternTabPage::ActivatePage( const SfxItemSet& rSet )
{
    sal_Int32 nPos;
    sal_Int32 nCount;

    if( m_nDlgType == 0 ) // area dialog
    if( m_pColorList.is() )
    {
        *m_pbAreaTP = false;

        if( m_pColorList.is() )
        // ColorList
        if( *m_pnColorListState & ChangeType::CHANGED ||
            *m_pnColorListState & ChangeType::MODIFIED )
        {
            // ColorList
            if( *m_pnColorListState & ChangeType::CHANGED ||
                *m_pnColorListState & ChangeType::MODIFIED )
            {
                if( *m_pnColorListState & ChangeType::CHANGED )
                    m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();
            if( *m_pnColorListState & ChangeType::CHANGED )
                m_pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();

                // LbColor
                nPos = m_pLbColor->GetSelectEntryPos();
                m_pLbColor->Clear();
                m_pLbColor->Fill( m_pColorList );
                nCount = m_pLbColor->GetEntryCount();
                if( nCount == 0 )
                    ; // this case should not occur
                else if( nCount <= nPos )
                    m_pLbColor->SelectEntryPos( 0 );
                else
                    m_pLbColor->SelectEntryPos( nPos );

                // LbColorBackground
                nPos = m_pLbBackgroundColor->GetSelectEntryPos();
                m_pLbBackgroundColor->Clear();
                m_pLbBackgroundColor->CopyEntries( *m_pLbColor );
                nCount = m_pLbBackgroundColor->GetEntryCount();
                if( nCount == 0 )
                    ; // this case should not occur
                else if( nCount <= nPos )
                    m_pLbBackgroundColor->SelectEntryPos( 0 );
                else
                    m_pLbBackgroundColor->SelectEntryPos( nPos );
                ChangeColor_Impl();
            }

            // determining (possibly cutting) the name and
            // displaying it in the GroupBox
            OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
            aString         += ": ";
            INetURLObject   aURL( m_pPatternList->GetPath() );

            aURL.Append( m_pPatternList->GetName() );
            SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

            if( aURL.getBase().getLength() > 18 )
            {
                aString += aURL.getBase().copy( 0, 15 ) + "...";
            }
            // LbColor
            nPos = m_pLbColor->GetSelectEntryPos();
            m_pLbColor->Clear();
            m_pLbColor->Fill( m_pColorList );
            nCount = m_pLbColor->GetEntryCount();
            if( nCount == 0 )
                ; // this case should not occur
            else if( nCount <= nPos )
                m_pLbColor->SelectEntryPos( 0 );
            else
                aString += aURL.getBase();
                m_pLbColor->SelectEntryPos( nPos );

            if( *m_pPageType == PageType::Bitmap && *m_pPos != LISTBOX_ENTRY_NOTFOUND )
            {
                sal_uInt16 nId = m_pPatternLB->GetItemId( static_cast<size_t>( *m_pPos ) );
                m_pPatternLB->SelectItem( nId );
            }
            // colors could have been deleted
            ChangePatternHdl_Impl( m_pPatternLB );

            *m_pPageType = PageType::Bitmap;
            *m_pPos = LISTBOX_ENTRY_NOTFOUND;
            // LbColorBackground
            nPos = m_pLbBackgroundColor->GetSelectEntryPos();
            m_pLbBackgroundColor->Clear();
            m_pLbBackgroundColor->CopyEntries( *m_pLbColor );
            nCount = m_pLbBackgroundColor->GetEntryCount();
            if( nCount == 0 )
                ; // this case should not occur
            else if( nCount <= nPos )
                m_pLbBackgroundColor->SelectEntryPos( 0 );
            else
                m_pLbBackgroundColor->SelectEntryPos( nPos );
            ChangeColor_Impl();
        }

        // determining (possibly cutting) the name and
        // displaying it in the GroupBox
        OUString        aString( CUI_RES( RID_SVXSTR_TABLE ) );
        aString         += ": ";
        INetURLObject   aURL( m_pPatternList->GetPath() );

        aURL.Append( m_pPatternList->GetName() );
        SAL_WARN_IF( aURL.GetProtocol() == INetProtocol::NotValid, "cui.tabpages", "invalid URL" );

        if( aURL.getBase().getLength() > 18 )
        {
            aString += aURL.getBase().copy( 0, 15 ) + "...";
        }
        else
            aString += aURL.getBase();

        *m_pPos = SearchPatternList( ( &static_cast<const XFillBitmapItem&>( rSet.Get(XATTR_FILLBITMAP)) )->GetName() );
        if( *m_pPos != LISTBOX_ENTRY_NOTFOUND )
        {
            sal_uInt16 nId = m_pPatternLB->GetItemId( static_cast<size_t>( *m_pPos ) );
            m_pPatternLB->SelectItem( nId );
        }
        // colors could have been deleted
        ChangePatternHdl_Impl( m_pPatternLB );

        *m_pPos = LISTBOX_ENTRY_NOTFOUND;
    }
}

@@ -254,28 +245,21 @@

bool SvxPatternTabPage::FillItemSet( SfxItemSet* _rOutAttrs )
{
    if( m_nDlgType == 0 && !*m_pbAreaTP ) // area dialog
    _rOutAttrs->Put(XFillStyleItem(drawing::FillStyle_BITMAP));
    size_t nPos = m_pPatternLB->GetSelectItemPos();
    if(VALUESET_ITEM_NOTFOUND != nPos)
    {
        if(PageType::Bitmap == *m_pPageType)
        {
            _rOutAttrs->Put(XFillStyleItem(drawing::FillStyle_BITMAP));
            size_t nPos = m_pPatternLB->GetSelectItemPos();
            if( !m_bPtrnChanged && VALUESET_ITEM_NOTFOUND != nPos)
            {
                const XBitmapEntry* pXBitmapEntry = m_pPatternList->GetBitmap(nPos);
                const OUString aString( m_pPatternLB->GetItemText( m_pPatternLB->GetSelectItemId() ) );
        const XBitmapEntry* pXBitmapEntry = m_pPatternList->GetBitmap( static_cast<sal_uInt16>(nPos) );
        const OUString aString( m_pPatternLB->GetItemText( m_pPatternLB->GetSelectItemId() ) );

                _rOutAttrs->Put(XFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject()));
            }
            else
            {
                const BitmapEx aBitmapEx(m_pBitmapCtl->GetBitmapEx());

                _rOutAttrs->Put(XFillBitmapItem(OUString(), Graphic(aBitmapEx)));
            }
        }
        _rOutAttrs->Put(XFillBitmapItem(aString, pXBitmapEntry->GetGraphicObject()));
    }
    else
    {
        const BitmapEx aBitmapEx(m_pBitmapCtl->GetBitmapEx());

        _rOutAttrs->Put(XFillBitmapItem(OUString(), Graphic(aBitmapEx)));
    }
    return true;
}

@@ -321,7 +305,7 @@

    if(VALUESET_ITEM_NOTFOUND != nPos)
    {
        pGraphicObject.reset(new GraphicObject(m_pPatternList->GetBitmap(nPos)->GetGraphicObject()));
        pGraphicObject.reset(new GraphicObject(m_pPatternList->GetBitmap( static_cast<sal_uInt16>(nPos) )->GetGraphicObject()));
    }
    else
    {
@@ -429,16 +413,12 @@

    long nCount = m_pPatternList->Count();
    long j = 1;
    bool bDifferent = false;
    bool bValidPatternName = false;

    while( !bDifferent )
    while( !bValidPatternName )
    {
        aName  = aNewName + " " + OUString::number( j++ );
        bDifferent = true;

        for( long i = 0; i < nCount && bDifferent; i++ )
            if( aName == m_pPatternList->GetBitmap( i )->GetName() )
                bDifferent = false;
        aName = aNewName + " " + OUString::number( j++ );
        bValidPatternName = (SearchPatternList(aName) == LISTBOX_ENTRY_NOTFOUND);
    }

    SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
@@ -452,13 +432,9 @@
    {
        pDlg->GetName( aName );

        bDifferent = true;
        bValidPatternName = (SearchPatternList(aName) == LISTBOX_ENTRY_NOTFOUND);

        for( long i = 0; i < nCount && bDifferent; i++ )
            if( aName == m_pPatternList->GetBitmap( i )->GetName() )
                bDifferent = false;

        if( bDifferent ) {
        if( bValidPatternName ) {
            nError = 0;
            break;
        }
@@ -532,14 +508,14 @@

    if ( nPos != VALUESET_ITEM_NOTFOUND )
    {
        OUString aName(m_pPatternList->GetBitmap(nPos)->GetName());
        OUString aName( m_pPatternList->GetBitmap( static_cast<sal_uInt16>(nPos) )->GetName() );

        const BitmapEx aBitmapEx(m_pBitmapCtl->GetBitmapEx());

        // #i123497# Need to replace the existing entry with a new one (old returned needs to be deleted)
        m_pPatternList->Replace(o3tl::make_unique<XBitmapEntry>(Graphic(aBitmapEx), aName), nPos);

        Bitmap aBitmap = m_pPatternList->GetBitmapForPreview(nPos, m_pPatternLB->GetIconSize());
        Bitmap aBitmap = m_pPatternList->GetBitmapForPreview( static_cast<sal_uInt16>( nPos ), m_pPatternLB->GetIconSize() );
        m_pPatternLB->RemoveItem(nId);
        m_pPatternLB->InsertItem( nId, Image(aBitmap), aName, static_cast<sal_uInt16>(nPos) );
        m_pPatternLB->SelectItem( nId );
@@ -561,29 +537,21 @@
        ResMgr& rMgr = CUI_MGR();
        OUString aDesc( ResId( RID_SVXSTR_DESC_NEW_PATTERN, rMgr ) );
        OUString aName( m_pPatternList->GetBitmap( nPos )->GetName() );
        OUString aOldName = aName;

        SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
        assert(pFact && "Dialog creation failed!");
        std::unique_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
        assert(pDlg && "Dialog creation failed!");

        long nCount = m_pPatternList->Count();
        bool bLoop = true;

        while( bLoop && pDlg->Execute() == RET_OK )
        {
            pDlg->GetName( aName );
            bool bDifferent = true;
            sal_Int32 nPatternPos = SearchPatternList(aName);
            bool bValidPatternName = (nPatternPos == static_cast<sal_Int32>(nPos) ) || (nPatternPos == LISTBOX_ENTRY_NOTFOUND);

            for( long i = 0; i < nCount && bDifferent; i++ )
            {
                if( aName == m_pPatternList->GetBitmap( i )->GetName()
                    && aName != aOldName )
                    bDifferent = false;
            }

            if( bDifferent )
            if( bValidPatternName )
            {
                bLoop = false;

@@ -679,4 +647,21 @@
    }
}

sal_Int32 SvxPatternTabPage::SearchPatternList(const OUString& rPatternName)
{
    long nCount = m_pPatternList->Count();
    bool bValidPatternName = true;
    sal_Int32 nPos = LISTBOX_ENTRY_NOTFOUND;

    for(long i = 0;i < nCount && bValidPatternName;i++)
    {
        if(rPatternName == m_pPatternList->GetBitmap( i )->GetName())
        {
            nPos = i;
            bValidPatternName = false;
        }
    }
    return nPos;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/uiconfig/ui/areatabpage.ui b/cui/uiconfig/ui/areatabpage.ui
index 504e931..665350b 100644
--- a/cui/uiconfig/ui/areatabpage.ui
+++ b/cui/uiconfig/ui/areatabpage.ui
@@ -3,216 +3,131 @@
<interface>
  <requires lib="gtk+" version="3.0"/>
  <!-- interface-requires LibreOffice 1.0 -->
  <object class="GtkListStore" id="liststoreLB_AREA_TYPE">
    <columns>
      <!-- column-name gchararray1 -->
      <column type="gchararray"/>
      <!-- column-name guint1 -->
      <column type="guint"/>
    </columns>
    <data>
      <row>
        <col id="0" translatable="yes">None</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes">Color</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes">Gradient</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes">Hatching</col>
        <col id="1">0</col>
      </row>
      <row>
        <col id="0" translatable="yes">Bitmap</col>
        <col id="1">0</col>
      </row>
    </data>
  </object>
  <object class="GtkBox" id="AreaTabPage">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="border_width">6</property>
    <property name="spacing">6</property>
    <child>
      <object class="GtkFrame" id="Fill Frame">
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label_xalign">0</property>
        <property name="shadow_type">none</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkAlignment" id="alignment1">
          <object class="GtkButtonBox" id="buttonbox1">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="top_padding">6</property>
            <property name="left_padding">12</property>
            <property name="hexpand">True</property>
            <property name="spacing">12</property>
            <property name="layout_style">center</property>
            <child>
              <object class="GtkVBox" id="box1">
              <object class="GtkButton" id="btnnone">
                <property name="label" translatable="yes">None</property>
                <property name="visible">True</property>
                <property name="can_focus">False</property>
                <property name="spacing">6</property>
                <child>
                  <object class="GtkComboBox" id="LB_AREA_TYPE">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="model">liststoreLB_AREA_TYPE</property>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="position">0</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="boxLB_FILL">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="vexpand">True</property>
                    <property name="orientation">vertical</property>
                    <property name="spacing">6</property>
                    <child>
                      <object class="svxlo-ColorLB" id="LB_COLOR:border">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="vexpand">True</property>
                        <property name="dropdown">False</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="svxlo-GradientLB" id="LB_GRADIENT:border">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="vexpand">True</property>
                        <property name="dropdown">False</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                    <child>
                      <object class="svxlo-HatchingLB" id="LB_HATCHING:border">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="vexpand">True</property>
                        <property name="dropdown">False</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">2</property>
                      </packing>
                    </child>
                    <child>
                      <object class="svxlo-BitmapLB" id="LB_BITMAP:border">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="vexpand">True</property>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">3</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">True</property>
                    <property name="fill">True</property>
                    <property name="position">1</property>
                  </packing>
                </child>
                <child>
                  <object class="GtkBox" id="box4">
                    <property name="visible">True</property>
                    <property name="can_focus">False</property>
                    <property name="orientation">vertical</property>
                    <child>
                      <object class="svxlo-SvxXRectPreview" id="CTL_COLOR_PREVIEW">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="vexpand">True</property>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="CTL_COLOR_PREVIEW-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes">Example</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="expand">False</property>
                        <property name="fill">True</property>
                        <property name="position">0</property>
                      </packing>
                    </child>
                    <child>
                      <object class="svxlo-SvxXRectPreview" id="CTL_BITMAP_PREVIEW">
                        <property name="visible">True</property>
                        <property name="can_focus">False</property>
                        <property name="hexpand">True</property>
                        <property name="vexpand">True</property>
                        <child internal-child="accessible">
                          <object class="AtkObject" id="CTL_BITMAP_PREVIEW-atkobject">
                            <property name="AtkObject::accessible-name" translatable="yes">Example</property>
                          </object>
                        </child>
                      </object>
                      <packing>
                        <property name="expand">True</property>
                        <property name="fill">True</property>
                        <property name="position">1</property>
                      </packing>
                    </child>
                  </object>
                  <packing>
                    <property name="expand">False</property>
                    <property name="fill">True</property>
                    <property name="pack_type">end</property>
                    <property name="position">2</property>
                  </packing>
                </child>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="btncolor">
                <property name="label" translatable="yes">Color</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="btngradient">
                <property name="label" translatable="yes">Gradient</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="btnhatch">
                <property name="label" translatable="yes">Hatch</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">3</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="btnbitmap">
                <property name="label" translatable="yes">Bitmap</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">4</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="btnpattern">
                <property name="label" translatable="yes">Pattern</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">5</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child type="label">
          <object class="GtkLabel" id="label1">
        <child>
          <object class="GtkBox" id="fillstylebox">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <property name="xalign">0</property>
            <property name="label" translatable="yes">Fill</property>
            <attributes>
              <attribute name="weight" value="bold"/>
            </attributes>
            <property name="hexpand">True</property>
            <property name="vexpand">True</property>
            <property name="orientation">vertical</property>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
      <packing>
        <property name="expand">False</property>
        <property name="fill">True</property>
        <property name="position">0</property>
        <property name="position">1</property>
      </packing>
    </child>
  </object>
  <object class="GtkSizeGroup" id="sizegroup1">
    <widgets>
      <widget name="LB_AREA_TYPE"/>
      <widget name="LB_COLOR:border"/>
      <widget name="LB_GRADIENT:border"/>
      <widget name="LB_HATCHING:border"/>
      <widget name="LB_BITMAP:border"/>
      <widget name="CTL_COLOR_PREVIEW"/>
      <widget name="CTL_BITMAP_PREVIEW"/>
    </widgets>
  </object>
</interface>