1
0
Fork 0
libreoffice/cui/source/inc/cuitabarea.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

743 lines
29 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include <svtools/valueset.hxx>
#include <svx/dlgctrl.hxx>
#include <svx/xflasit.hxx>
#include <svx/tabarea.hxx>
#include <svx/hexcolorcontrol.hxx>
#include <svx/SvxColorValueSet.hxx>
#include <svx/SvxPresetListBox.hxx>
#include <svx/PaletteManager.hxx>
#include <svx/svdview.hxx>
#define NO_BUTTON_SELECTED -1
class ColorListBox;
class SdrModel;
class SvxBitmapCtl;
/************************************************************************/
class ButtonBox
{
private:
sal_Int32 mnCurrentButton;
std::vector<weld::Toggleable*> maButtonList;
std::map<weld::Toggleable*, sal_Int32 > maButtonToPos;
void SelectButtonImpl( sal_Int32 nPos )
{
if(mnCurrentButton != NO_BUTTON_SELECTED)
{
maButtonList[mnCurrentButton]->set_active(false);
}
mnCurrentButton = nPos;
maButtonList[mnCurrentButton]->set_active(true);
};
public:
ButtonBox()
{
mnCurrentButton = NO_BUTTON_SELECTED;
};
void AddButton(weld::Toggleable* pButton)
{
maButtonList.push_back(pButton);
maButtonToPos.insert( std::make_pair(pButton, maButtonList.size() - 1) );
}
sal_Int32 GetCurrentButtonPos() const { return mnCurrentButton; }
sal_Int32 GetButtonPos(weld::Toggleable* pButton)
{
std::map<weld::Toggleable*, sal_Int32>::const_iterator aBtnPos = maButtonToPos.find(pButton);
if(aBtnPos != maButtonToPos.end())
return aBtnPos->second;
else
return -1;
}
void SelectButton(weld::Toggleable* pButton)
{
sal_Int32 nPos = GetButtonPos(pButton);
if(nPos != -1)
SelectButtonImpl(nPos);
}
};
enum class PageType
{
Area,
Gradient,
Hatch,
Bitmap,
Shadow,
Transparence,
};
class AreaTabHelper
{
public:
static OUString GetPalettePath();
};
class SvxAreaTabDialog final : public SfxTabDialogController
{
SdrModel* mpDrawModel;
XColorListRef mpColorList;
XColorListRef mpNewColorList;
XGradientListRef mpGradientList;
XGradientListRef mpNewGradientList;
XHatchListRef mpHatchingList;
XHatchListRef mpNewHatchingList;
XBitmapListRef mpBitmapList;
XBitmapListRef mpNewBitmapList;
XPatternListRef mpPatternList;
XPatternListRef mpNewPatternList;
ChangeType mnColorListState;
virtual void PageCreated(const OUString& rId, SfxTabPage &rPage) override;
virtual short Ok() override;
DECL_LINK(CancelHdlImpl, weld::Button&, void);
void SavePalettes();
public:
SvxAreaTabDialog(weld::Window* pParent, const SfxItemSet* pAttr, SdrModel* pModel, bool bShadow,
bool bSlideBackground);
void SetNewColorList( XColorListRef const & pColorList )
{ mpNewColorList = pColorList; }
const XColorListRef& GetNewColorList() const { return mpNewColorList; }
};
/************************************************************************/
class SvxTransparenceTabPage : public SfxTabPage
{
static const WhichRangesContainer pTransparenceRanges;
const SfxItemSet& rOutAttrs;
PageType nPageType;
sal_uInt16 nDlgType;
bool bBitmap;
XFillAttrSetItem aXFillAttr;
SfxItemSet& rXFSet;
SvxXRectPreview m_aCtlBitmapPreview;
SvxXRectPreview m_aCtlXRectPreview;
// main selection
std::unique_ptr<weld::RadioButton> m_xRbtTransOff;
std::unique_ptr<weld::RadioButton> m_xRbtTransLinear;
std::unique_ptr<weld::RadioButton> m_xRbtTransGradient;
/// linear transparency
std::unique_ptr<weld::MetricSpinButton> m_xMtrTransparent;
// gradient transparency
std::unique_ptr<weld::Widget> m_xGridGradient;
std::unique_ptr<weld::ComboBox> m_xLbTrgrGradientType;
std::unique_ptr<weld::Label> m_xFtTrgrCenterX;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrCenterX;
std::unique_ptr<weld::Label> m_xFtTrgrCenterY;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrCenterY;
std::unique_ptr<weld::Label> m_xFtTrgrAngle;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrAngle;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrBorder;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrStartValue;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTrgrEndValue;
std::unique_ptr<weld::Widget> m_xCtlBitmapBorder;
std::unique_ptr<weld::Widget> m_xCtlXRectBorder;
// preview
std::unique_ptr<weld::CustomWeld> m_xCtlBitmapPreview;
std::unique_ptr<weld::CustomWeld> m_xCtlXRectPreview;
// MCGR: Preserve ColorStops until we have a UI to edit these
basegfx::BColorStops maColorStops;
DECL_LINK(ClickTransOffHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ClickTransLinearHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ClickTransGradientHdl_Impl, weld::Toggleable&, void );
DECL_LINK(ModifyTransparentHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ModifiedTrgrEditHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ModifiedTrgrListBoxHdl_Impl, weld::ComboBox&, void);
void ModifiedTrgrHdl_Impl(const weld::ComboBox*);
void ActivateLinear(bool bActivate);
void ActivateGradient(bool bActivate);
void SetControlState_Impl(css::awt::GradientStyle eXGS);
bool InitPreview ( const SfxItemSet& rSet );
void InvalidatePreview (bool bEnable = true );
// MCGR: Preserve ColorStops until we have a UI to edit these
basegfx::BColorStops createColorStops();
public:
SvxTransparenceTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxTransparenceTabPage() override;
static std::unique_ptr<SfxTabPage> Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet*);
static const WhichRangesContainer & GetRanges() { return pTransparenceRanges; }
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;
void SetPageType(PageType nInType) { nPageType = nInType; }
void SetDlgType(sal_uInt16 nInType) { nDlgType = nInType; }
virtual void PageCreated(const SfxAllItemSet& aSet) override;
};
/************************************************************************/
class SvxAreaTabPage : public SfxTabPage
{
static const WhichRangesContainer pAreaRanges;
private:
std::unique_ptr<SfxTabPage> m_xFillTabPage;
ButtonBox maBox;
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;
ChangeType* m_pnColorListState;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
bool m_bBtnClicked = false;
protected:
std::unique_ptr<weld::Container> m_xFillTab;
std::unique_ptr<weld::Toggleable> m_xBtnNone;
std::unique_ptr<weld::Toggleable> m_xBtnColor;
std::unique_ptr<weld::Toggleable> m_xBtnGradient;
std::unique_ptr<weld::Toggleable> m_xBtnHatch;
std::unique_ptr<weld::Toggleable> m_xBtnBitmap;
std::unique_ptr<weld::Toggleable> m_xBtnPattern;
std::unique_ptr<weld::Toggleable> m_xBtnUseBackground;
void SetOptimalSize(weld::DialogController* pController);
void SelectFillType( weld::Toggleable& rButton, const SfxItemSet* _pSet = nullptr );
bool IsBtnClicked() const { return m_bBtnClicked; }
private:
DECL_LINK(SelectFillTypeHdl_Impl, weld::Toggleable&, void);
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(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet& rInAttrs, bool bSlideBackground = false);
virtual ~SvxAreaTabPage() override;
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
static std::unique_ptr<SfxTabPage>
CreateWithSlideBackground(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet*);
static const WhichRangesContainer & GetRanges() { return pAreaRanges; }
virtual OUString GetAllStrings() override;
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
void SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
void SetGradientList( XGradientListRef const & pGrdLst)
{ m_pGradientList = pGrdLst; }
void SetHatchingList( XHatchListRef const & pHtchLst)
{ m_pHatchingList = pHtchLst; }
void SetBitmapList( XBitmapListRef const & pBmpLst) { m_pBitmapList = pBmpLst; }
void SetPatternList( XPatternListRef const &pPtrnLst ) { m_pPatternList = pPtrnLst; }
virtual void PageCreated(const SfxAllItemSet& aSet) override;
void CreatePage(sal_Int32 nId, SfxTabPage& rTab);
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
};
class SvxShadowTabPage : public SvxTabPage
{
static const WhichRangesContainer pShadowRanges;
private:
const SfxItemSet& m_rOutAttrs;
XColorListRef m_pColorList;
ChangeType* m_pnColorListState;
PageType m_nPageType;
sal_uInt16 m_nDlgType;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
MapUnit m_ePoolUnit;
SvxRectCtl m_aCtlPosition;
SvxXShadowPreview m_aCtlXRectPreview;
std::unique_ptr<weld::CheckButton> m_xTsbShowShadow;
std::unique_ptr<weld::Widget> m_xGridShadow;
std::unique_ptr<weld::MetricSpinButton> m_xMtrDistance;
std::unique_ptr<ColorListBox> m_xLbShadowColor;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTransparent;
std::unique_ptr<weld::MetricSpinButton> m_xLbShadowBlurMetric;
std::unique_ptr<weld::CustomWeld> m_xCtlPosition;
std::unique_ptr<weld::CustomWeld> m_xCtlXRectPreview;
DECL_LINK(ClickShadowHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ModifyShadowHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(SelectShadowHdl_Impl, ColorListBox&, void);
public:
SvxShadowTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxShadowTabPage() override;
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
static const WhichRangesContainer & GetRanges() { return pShadowRanges; }
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
virtual void PointChanged( weld::DrawingArea* pWindow, RectPoint eRP ) override;
void SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
void SetPageType( PageType nInType ) { m_nPageType = nInType; }
void SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
virtual void PageCreated(const SfxAllItemSet& aSet) override;
};
/************************************************************************/
class SvxGradientTabPage : public SfxTabPage
{
private:
const SfxItemSet& m_rOutAttrs;
XColorListRef m_pColorList;
XGradientListRef m_pGradientList;
ChangeType m_nGradientListState;
ChangeType* m_pnColorListState;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
// MCGR: Preserve ColorStops until we have a UI to edit these
basegfx::BColorStops m_aColorStops;
SvxXRectPreview m_aCtlPreview;
std::unique_ptr<weld::ComboBox> m_xLbGradientType;
std::unique_ptr<weld::Label> m_xFtCenter;
std::unique_ptr<weld::MetricSpinButton> m_xMtrCenterX;
std::unique_ptr<weld::MetricSpinButton> m_xMtrCenterY;
std::unique_ptr<weld::Label> m_xFtAngle;
std::unique_ptr<weld::MetricSpinButton> m_xMtrAngle;
std::unique_ptr<weld::Scale> m_xSliderAngle;
std::unique_ptr<weld::MetricSpinButton> m_xMtrBorder;
std::unique_ptr<weld::Scale> m_xSliderBorder;
std::unique_ptr<ColorListBox> m_xLbColorFrom;
std::unique_ptr<weld::MetricSpinButton> m_xMtrColorFrom;
std::unique_ptr<ColorListBox> m_xLbColorTo;
std::unique_ptr<weld::MetricSpinButton> m_xMtrColorTo;
std::unique_ptr<SvxPresetListBox> m_xGradientLB;
std::unique_ptr<weld::SpinButton> m_xMtrIncrement;
std::unique_ptr<weld::CheckButton> m_xCbIncrement;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnModify;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
std::unique_ptr<weld::CustomWeld> m_xGradientLBWin;
DECL_LINK( ClickAddHdl_Impl, weld::Button&, void );
DECL_LINK( ClickModifyHdl_Impl, weld::Button&, void );
DECL_LINK( ChangeGradientHdl, ValueSet*, void );
void ChangeGradientHdl_Impl();
DECL_LINK( ClickRenameHdl_Impl, SvxPresetListBox*, void );
DECL_LINK( ClickDeleteHdl_Impl, SvxPresetListBox*, void );
DECL_LINK( ModifiedEditHdl_Impl, weld::SpinButton&, void );
DECL_LINK( ModifiedMetricHdl_Impl, weld::MetricSpinButton&, void );
DECL_LINK( ModifiedColorListBoxHdl_Impl, ColorListBox&, void );
DECL_LINK( ModifiedListBoxHdl_Impl, weld::ComboBox&, void );
DECL_LINK( ChangeAutoStepHdl_Impl, weld::Toggleable&, void );
DECL_LINK( ModifiedSliderHdl_Impl, weld::Scale&, void );
void ModifiedHdl_Impl(void const *);
void SetControlState_Impl( css::awt::GradientStyle eXGS );
sal_Int32 SearchGradientList(std::u16string_view rGradientName);
// MCGR: Preserve ColorStops until we have a UI to edit these
basegfx::BColorStops createColorStops();
public:
SvxGradientTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxGradientTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
void SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
void SetGradientList( XGradientListRef const & pGrdLst)
{ m_pGradientList = pGrdLst; }
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
};
/************************************************************************/
class SvxHatchTabPage : public SfxTabPage
{
private:
const SfxItemSet& m_rOutAttrs;
XColorListRef m_pColorList;
XHatchListRef m_pHatchingList;
ChangeType m_nHatchingListState;
ChangeType* m_pnColorListState;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
MapUnit m_ePoolUnit;
SvxXRectPreview m_aCtlPreview;
std::unique_ptr<weld::MetricSpinButton> m_xMtrDistance;
std::unique_ptr<weld::MetricSpinButton> m_xMtrAngle;
std::unique_ptr<weld::Scale> m_xSliderAngle;
std::unique_ptr<weld::ComboBox> m_xLbLineType;
std::unique_ptr<ColorListBox> m_xLbLineColor;
std::unique_ptr<weld::CheckButton> m_xCbBackgroundColor;
std::unique_ptr<ColorListBox> m_xLbBackgroundColor;
std::unique_ptr<SvxPresetListBox> m_xHatchLB;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnModify;
std::unique_ptr<weld::CustomWeld> m_xHatchLBWin;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
DECL_LINK(ChangeHatchHdl, ValueSet*, void);
void ChangeHatchHdl_Impl();
DECL_LINK( ModifiedEditHdl_Impl, weld::MetricSpinButton&, void );
DECL_LINK( ModifiedListBoxHdl_Impl, weld::ComboBox&, void );
DECL_LINK( ModifiedColorListBoxHdl_Impl, ColorListBox&, void );
DECL_LINK( ToggleHatchBackgroundColor_Impl, weld::Toggleable&, void );
DECL_LINK( ModifiedBackgroundHdl_Impl, ColorListBox&, void );
DECL_LINK( ModifiedSliderHdl_Impl, weld::Scale&, void );
void ModifiedHdl_Impl(void const *);
DECL_LINK( ClickAddHdl_Impl, weld::Button&, void );
DECL_LINK( ClickModifyHdl_Impl, weld::Button&, void );
DECL_LINK( ClickRenameHdl_Impl, SvxPresetListBox*, void );
DECL_LINK( ClickDeleteHdl_Impl, SvxPresetListBox*, void );
sal_Int32 SearchHatchList(std::u16string_view rHatchName);
public:
SvxHatchTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxHatchTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
void SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
void SetHatchingList( XHatchListRef const & pHtchLst)
{ m_pHatchingList = pHtchLst; }
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
};
/************************************************************************/
class SvxBitmapTabPage : public SfxTabPage
{
private:
const SfxItemSet& m_rOutAttrs;
XBitmapListRef m_pBitmapList;
ChangeType m_nBitmapListState;
double m_fObjectWidth;
double m_fObjectHeight;
bool m_bLogicalSize;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
const SdrView* mpView;
MapUnit mePoolUnit;
FieldUnit meFieldUnit;
Size rBitmapSize;
Size rFilledSize;
Size rZoomedSize;
SvxXRectPreview m_aCtlBitmapPreview;
std::unique_ptr<SvxPresetListBox> m_xBitmapLB;
std::unique_ptr<weld::ComboBox> m_xBitmapStyleLB;
std::unique_ptr<weld::Container> m_xSizeBox;
std::unique_ptr<weld::CheckButton> m_xTsbScale;
std::unique_ptr<weld::MetricSpinButton> m_xBitmapWidth;
std::unique_ptr<weld::MetricSpinButton> m_xBitmapHeight;
std::unique_ptr<weld::Container> m_xPositionBox;
std::unique_ptr<weld::ComboBox> m_xPositionLB;
std::unique_ptr<weld::Container> m_xPositionOffBox;
std::unique_ptr<weld::MetricSpinButton> m_xPositionOffX;
std::unique_ptr<weld::MetricSpinButton> m_xPositionOffY;
std::unique_ptr<weld::Container> m_xTileOffBox;
std::unique_ptr<weld::ComboBox> m_xTileOffLB;
std::unique_ptr<weld::MetricSpinButton> m_xTileOffset;
std::unique_ptr<weld::Button> m_xBtnImport;
std::unique_ptr<weld::CustomWeld> m_xCtlBitmapPreview;
std::unique_ptr<weld::CustomWeld> m_xBitmapLBWin;
DECL_LINK( ModifyBitmapHdl, ValueSet*, void );
DECL_LINK( ClickScaleHdl, weld::Toggleable&, void );
DECL_LINK( ModifyBitmapStyleHdl, weld::ComboBox&, void );
DECL_LINK( ModifyBitmapSizeHdl, weld::MetricSpinButton&, void );
DECL_LINK( ModifyBitmapPositionHdl, weld::ComboBox&, void );
DECL_LINK( ModifyPositionOffsetHdl, weld::MetricSpinButton&, void );
DECL_LINK( ModifyTileOffsetHdl, weld::MetricSpinButton&, void );
DECL_LINK( ClickRenameHdl, SvxPresetListBox*, void );
DECL_LINK( ClickDeleteHdl, SvxPresetListBox*, void );
DECL_LINK( ClickImportHdl, weld::Button&, void );
void ClickBitmapHdl_Impl();
void CalculateBitmapPresetSize();
sal_Int32 SearchBitmapList(std::u16string_view rBitmapName);
sal_Int32 SearchBitmapList(const GraphicObject& rGraphicObject);
public:
SvxBitmapTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxBitmapTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
void SetBitmapList( const XBitmapListRef& pBmpLst) { m_pBitmapList = pBmpLst; }
};
/************************************************************************/
class SvxPatternTabPage : public SvxTabPage
{
private:
const SfxItemSet& m_rOutAttrs;
XColorListRef m_pColorList;
XPatternListRef m_pPatternList;
ChangeType m_nPatternListState;
ChangeType* m_pnColorListState;
XFillAttrSetItem m_aXFillAttr;
SfxItemSet& m_rXFSet;
SvxXRectPreview m_aCtlPreview;
std::unique_ptr<SvxPixelCtl> m_xCtlPixel;
std::unique_ptr<ColorListBox> m_xLbColor;
std::unique_ptr<ColorListBox> m_xLbBackgroundColor;
std::unique_ptr<SvxPresetListBox> m_xPatternLB;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnModify;
std::unique_ptr<weld::CustomWeld> m_xCtlPixelWin;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
std::unique_ptr<weld::CustomWeld> m_xPatternLBWin;
std::unique_ptr<SvxBitmapCtl> m_xBitmapCtl;
DECL_LINK( ClickAddHdl_Impl, weld::Button&, void );
DECL_LINK( ClickModifyHdl_Impl, weld::Button&, void );
DECL_LINK( ChangePatternHdl_Impl, ValueSet*, void );
DECL_LINK( ChangeColorHdl_Impl, ColorListBox&, void );
DECL_LINK( ClickRenameHdl_Impl, SvxPresetListBox*, void );
DECL_LINK( ClickDeleteHdl_Impl, SvxPresetListBox*, void );
sal_Int32 SearchPatternList(std::u16string_view rPatternName);
public:
SvxPatternTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxPatternTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
virtual void PointChanged( weld::DrawingArea*, RectPoint eRP ) override;
void SetColorList( XColorListRef const & pColorList ) { m_pColorList = pColorList; }
void SetPatternList( XPatternListRef const & pPatternList) { m_pPatternList = pPatternList; }
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
void ChangeColor_Impl();
};
/************************************************************************/
enum class ColorModel
{
RGB,
CMYK
};
class SvxColorTabPage : public SfxTabPage
{
private:
const SfxItemSet& rOutAttrs;
XColorListRef pColorList;
ChangeType* pnColorListState;
XFillAttrSetItem aXFillAttr;
SfxItemSet& rXFSet;
ColorModel eCM;
Color m_aPreviousColor;
NamedColor m_aCurrentColor;
PaletteManager maPaletteManager;
SvxXRectPreview m_aCtlPreviewOld;
SvxXRectPreview m_aCtlPreviewNew;
std::unique_ptr<SvxColorValueSet> m_xValSetColorList;
std::unique_ptr<SvxColorValueSet> m_xValSetRecentList;
std::unique_ptr<weld::ComboBox> m_xSelectPalette;
std::unique_ptr<weld::RadioButton> m_xRbRGB;
std::unique_ptr<weld::RadioButton> m_xRbCMYK;
std::unique_ptr<weld::Widget> m_xRGBcustom;
std::unique_ptr<weld::Widget> m_xRGBpreset;
std::unique_ptr<weld::Entry> m_xRpreset;
std::unique_ptr<weld::Entry> m_xGpreset;
std::unique_ptr<weld::Entry> m_xBpreset;
std::unique_ptr<weld::SpinButton> m_xRcustom;
std::unique_ptr<weld::SpinButton> m_xGcustom;
std::unique_ptr<weld::SpinButton> m_xBcustom;
std::unique_ptr<weld::HexColorControl> m_xHexpreset;
std::unique_ptr<weld::HexColorControl> m_xHexcustom;
std::unique_ptr<weld::Widget> m_xCMYKcustom;
std::unique_ptr<weld::Widget> m_xCMYKpreset;
std::unique_ptr<weld::Entry> m_xCpreset;
std::unique_ptr<weld::Entry> m_xYpreset;
std::unique_ptr<weld::Entry> m_xMpreset;
std::unique_ptr<weld::Entry> m_xKpreset;
std::unique_ptr<weld::MetricSpinButton> m_xCcustom;
std::unique_ptr<weld::MetricSpinButton> m_xYcustom;
std::unique_ptr<weld::MetricSpinButton> m_xMcustom;
std::unique_ptr<weld::MetricSpinButton> m_xKcustom;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnDelete;
std::unique_ptr<weld::Button> m_xBtnWorkOn;
std::unique_ptr<weld::Button> m_xMoreColors;
std::unique_ptr<weld::CustomWeld> m_xCtlPreviewOld;
std::unique_ptr<weld::CustomWeld> m_xCtlPreviewNew;
std::unique_ptr<weld::CustomWeld> m_xValSetColorListWin;
std::unique_ptr<weld::CustomWeld> m_xValSetRecentListWin;
static void ConvertColorValues (Color& rColor, ColorModel eModell);
static void RgbToCmyk_Impl( Color& rColor, sal_uInt16& rK );
static void CmykToRgb_Impl( Color& rColor, const sal_uInt16 nKey );
sal_uInt16 ColorToPercent_Impl( sal_uInt16 nColor );
sal_uInt16 PercentToColor_Impl( sal_uInt16 nPercent );
void ImpColorCountChanged();
void FillPaletteLB();
DECL_LINK(ClickAddHdl_Impl, weld::Button&, void);
DECL_LINK(ClickWorkOnHdl_Impl, weld::Button&, void);
DECL_LINK(ClickDeleteHdl_Impl, weld::Button&, void);
DECL_STATIC_LINK(SvxColorTabPage, OnMoreColorsClick, weld::Button&, void);
DECL_LINK(SelectPaletteLBHdl, weld::ComboBox&, void);
DECL_LINK( SelectValSetHdl_Impl, ValueSet*, void );
DECL_LINK( SelectColorModeHdl_Impl, weld::Toggleable&, void );
void ChangeColor(const NamedColor &rNewColor, bool bUpdatePreset = true);
void SetColorModel(ColorModel eModel);
void ChangeColorModel();
void UpdateColorValues( bool bUpdatePreset = true );
DECL_LINK(SpinValueHdl_Impl, weld::SpinButton&, void);
DECL_LINK(MetricSpinValueHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ModifiedHdl_Impl, weld::Entry&, void);
void UpdateModified();
static sal_Int32 FindInCustomColors( std::u16string_view aColorName );
sal_Int32 FindInPalette( const Color& rColor );
public:
SvxColorTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxColorTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
virtual bool FillItemSet( SfxItemSet* ) override;
virtual void Reset( const SfxItemSet * ) override;
virtual void ActivatePage( const SfxItemSet& rSet ) override;
virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
void SetPropertyList( XPropertyListType t, const XPropertyListRef &xRef );
void SetColorList( const XColorListRef& pColList );
void SetColorChgd( ChangeType* pIn ) { pnColorListState = pIn; }
virtual void FillUserData() override;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */