1
0
Fork 0
libreoffice/cui/source/inc/cuitabline.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

376 lines
14 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 <memory>
#include <vector>
#include <editeng/brushitem.hxx>
#include <sfx2/tabdlg.hxx>
#include <svx/svdpage.hxx>
#include <svx/tabarea.hxx>
#include <svx/xlnasit.hxx>
#include <svx/xtable.hxx>
#include <svx/dlgctrl.hxx>
#include <vcl/customweld.hxx>
enum class PageType;
class ColorListBox;
class SvxLineTabDialog final : public SfxTabDialogController
{
SdrModel* pDrawModel;
const SdrObject* pObj;
XColorListRef pColorList;
XColorListRef mpNewColorList;
XDashListRef pDashList;
XDashListRef pNewDashList;
XLineEndListRef pLineEndList;
XLineEndListRef pNewLineEndList;
bool bObjSelected;
ChangeType nLineEndListState;
ChangeType nDashListState;
ChangeType mnColorListState;
PageType nPageType;
sal_Int32 nPosDashLb;
sal_Int32 nPosLineEndLb;
virtual void PageCreated(const OUString& rId, SfxTabPage &rPage) override;
virtual short Ok() override;
DECL_LINK(CancelHdlImpl, weld::Button&, void);
void SavePalettes();
public:
SvxLineTabDialog(weld::Window* pParent, const SfxItemSet* pAttr,
SdrModel* pModel, const SdrObject* pObj,
bool bHasObj);
void SetNewDashList( XDashListRef const & pInLst)
{ pNewDashList = pInLst; }
const XDashListRef& GetNewDashList() const { return pNewDashList; }
void SetNewLineEndList( XLineEndListRef const & pInLst)
{ pNewLineEndList = pInLst; }
const XLineEndListRef& GetNewLineEndList() const { return pNewLineEndList; }
void SetNewColorList( XColorListRef const & pColTab ) { mpNewColorList = pColTab; }
const XColorListRef& GetNewColorList() const { return mpNewColorList; }
};
/*************************************************************************/
struct SvxBmpItemInfo
{
std::unique_ptr<SvxBrushItem> pBrushItem;
OUString sItemId;
};
class SvxLineTabPage : public SfxTabPage
{
static const WhichRangesContainer pLineRanges;
private:
//#58425# symbols on a line (e. g. StarChart) ->
/** a list of symbols to be shown in menu. Symbol at position SID_ATTR_SYMBOLTYPE is to be shown in preview.
The list position is to be used cyclic. */
SdrObjList* m_pSymbolList;
bool m_bNewSize;
/// a graphic to be displayed in the preview in case that an automatic symbol is chosen
Graphic m_aAutoSymbolGraphic;
sal_Int32 m_nSymbolType;
/// attributes for the shown symbols; only necessary if not equal to line properties
std::unique_ptr<SfxItemSet> m_xSymbolAttr;
std::vector<OUString> m_aGrfNames;
std::vector< std::unique_ptr<SvxBmpItemInfo> >
m_aGalleryBrushItems;
std::vector< std::unique_ptr<SvxBmpItemInfo> >
m_aSymbolBrushItems;
bool m_bLastWidthModified;
Size m_aSymbolLastSize;
Graphic m_aSymbolGraphic;
Size m_aSymbolSize;
bool m_bSymbols;
const SfxItemSet& m_rOutAttrs;
bool m_bObjSelected;
XLineAttrSetItem m_aXLineAttr;
SfxItemSet& m_rXLSet;
XDashListRef m_pDashList;
XLineEndListRef m_pLineEndList;
ChangeType* m_pnLineEndListState;
ChangeType* m_pnDashListState;
ChangeType* m_pnColorListState;
PageType m_nPageType;
sal_uInt16 m_nDlgType;
sal_Int32* m_pPosDashLb;
sal_Int32* m_pPosLineEndLb;
MapUnit m_ePoolUnit;
sal_Int32 m_nActLineWidth;
SvxXLinePreview m_aCtlPreview;
std::unique_ptr<weld::Widget> m_xBoxColor;
std::unique_ptr<SvxLineLB> m_xLbLineStyle;
std::unique_ptr<ColorListBox> m_xLbColor;
std::unique_ptr<weld::Widget> m_xBoxWidth;
std::unique_ptr<weld::MetricSpinButton> m_xMtrLineWidth;
std::unique_ptr<weld::Widget> m_xBoxTransparency;
std::unique_ptr<weld::MetricSpinButton> m_xMtrTransparent;
std::unique_ptr<weld::Widget> m_xFlLineEnds;
std::unique_ptr<weld::Widget> m_xBoxArrowStyles;
std::unique_ptr<SvxLineEndLB> m_xLbStartStyle;
std::unique_ptr<weld::Widget> m_xBoxStart;
std::unique_ptr<weld::MetricSpinButton> m_xMtrStartWidth;
std::unique_ptr<weld::CheckButton> m_xTsbCenterStart;
std::unique_ptr<weld::Widget> m_xBoxEnd;
std::unique_ptr<SvxLineEndLB> m_xLbEndStyle;
std::unique_ptr<weld::MetricSpinButton> m_xMtrEndWidth;
std::unique_ptr<weld::CheckButton> m_xTsbCenterEnd;
std::unique_ptr<weld::CheckButton> m_xCbxSynchronize;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
std::unique_ptr<weld::Widget> m_xFLEdgeStyle;
std::unique_ptr<weld::Widget> m_xGridEdgeCaps;
std::unique_ptr<weld::ComboBox> m_xLBEdgeStyle;
// LineCaps
std::unique_ptr<weld::ComboBox> m_xLBCapStyle;
std::unique_ptr<weld::Widget> m_xFlSymbol;
std::unique_ptr<weld::Widget> m_xGridIconSize;
std::unique_ptr<weld::MenuButton> m_xSymbolMB;
std::unique_ptr<weld::Menu> m_xSymbolsMenu;
std::unique_ptr<weld::Menu> m_xGalleryMenu;
std::unique_ptr<weld::MetricSpinButton> m_xSymbolWidthMF;
std::unique_ptr<weld::MetricSpinButton> m_xSymbolHeightMF;
std::unique_ptr<weld::CheckButton> m_xSymbolRatioCB;
// handler for gallery popup menu button + size
DECL_LINK(GraphicHdl_Impl, const OUString&, void);
DECL_LINK(SizeHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(RatioHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ClickInvisibleHdl_Impl, weld::ComboBox&, void);
void ClickInvisibleHdl_Impl();
DECL_LINK(ChangeStartClickHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ChangeStartListBoxHdl_Impl, weld::ComboBox&, void);
DECL_LINK(ChangeStartModifyHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ChangeEndListBoxHdl_Impl, weld::ComboBox&, void);
DECL_LINK(ChangeEndModifyHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ChangeEndClickHdl_Impl, weld::Toggleable&, void);
DECL_LINK(ChangePreviewListBoxHdl_Impl, ColorListBox&, void);
DECL_LINK(ChangePreviewModifyHdl_Impl, weld::MetricSpinButton&, void);
void ChangePreviewHdl_Impl(const weld::MetricSpinButton*);
DECL_LINK(ChangeTransparentHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ChangeEdgeStyleHdl_Impl, weld::ComboBox&, void);
// LineCaps
DECL_LINK(ChangeCapStyleHdl_Impl, weld::ComboBox&, void);
void FillXLSet_Impl();
void FillListboxes();
void PopulateMenus();
public:
void ShowSymbolControls(bool bOn);
SvxLineTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxLineTabPage() override;
void Construct();
static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
static const WhichRangesContainer & GetRanges() { return pLineRanges; }
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 FillUserData() override;
void SetDashList( XDashListRef const & pDshLst ) { m_pDashList = pDshLst; }
void SetLineEndList( XLineEndListRef const & pLneEndLst) { m_pLineEndList = pLneEndLst; }
void SetObjSelected( bool bHasObj ) { m_bObjSelected = bHasObj; }
void SetPageType( PageType nInType ) { m_nPageType = nInType; }
void SetDlgType( sal_uInt16 nInType ) { m_nDlgType = nInType; }
void SetPosDashLb( sal_Int32* pInPos ) { m_pPosDashLb = pInPos; }
void SetPosLineEndLb( sal_Int32* pInPos ) { m_pPosLineEndLb = pInPos; }
void SetLineEndChgd( ChangeType* pIn ) { m_pnLineEndListState = pIn; }
void SetDashChgd( ChangeType* pIn ) { m_pnDashListState = pIn; }
void SetColorChgd( ChangeType* pIn ) { m_pnColorListState = pIn; }
virtual void PageCreated(const SfxAllItemSet& aSet) override;
};
/*************************************************************************/
class SvxLineDefTabPage : public SfxTabPage
{
private:
const SfxItemSet& rOutAttrs;
XDash aDash;
XLineAttrSetItem aXLineAttr;
SfxItemSet& rXLSet;
XDashListRef pDashList;
ChangeType* pnDashListState;
PageType* pPageType;
sal_uInt16 nDlgType;
sal_Int32* pPosDashLb;
MapUnit ePoolUnit;
FieldUnit eFUnit;
SvxXLinePreview m_aCtlPreview;
std::unique_ptr<SvxLineLB> m_xLbLineStyles;
std::unique_ptr<weld::ComboBox> m_xLbType1;
std::unique_ptr<weld::ComboBox> m_xLbType2;
std::unique_ptr<weld::SpinButton> m_xNumFldNumber1;
std::unique_ptr<weld::SpinButton> m_xNumFldNumber2;
std::unique_ptr<weld::MetricSpinButton> m_xMtrLength1;
std::unique_ptr<weld::MetricSpinButton> m_xMtrLength2;
std::unique_ptr<weld::MetricSpinButton> m_xMtrDistance;
std::unique_ptr<weld::CheckButton> m_xCbxSynchronize;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnModify;
std::unique_ptr<weld::Button> m_xBtnDelete;
std::unique_ptr<weld::Button> m_xBtnLoad;
std::unique_ptr<weld::Button> m_xBtnSave;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
void FillDash_Impl();
void FillDialog_Impl();
DECL_LINK(ClickAddHdl_Impl, weld::Button&, void);
DECL_LINK(ClickModifyHdl_Impl, weld::Button&, void);
DECL_LINK(ClickDeleteHdl_Impl, weld::Button&, void);
DECL_LINK(SelectLinestyleListBoxHdl_Impl, weld::ComboBox&, void);
void SelectLinestyleHdl_Impl(const weld::ComboBox*);
DECL_LINK(ChangePreviewHdl_Impl, weld::MetricSpinButton&, void);
DECL_LINK(ChangeNumber1Hdl_Impl, weld::SpinButton&, void);
DECL_LINK(ChangeNumber2Hdl_Impl, weld::SpinButton&, void);
DECL_LINK(ClickLoadHdl_Impl, weld::Button&, void);
DECL_LINK(ClickSaveHdl_Impl, weld::Button&, void);
DECL_LINK(ChangeMetricHdl_Impl, weld::Toggleable&, void);
DECL_LINK(SelectTypeListBoxHdl_Impl, weld::ComboBox&, void);
void SelectTypeHdl_Impl(const weld::ComboBox*);
void ChangeMetricHdl_Impl(const weld::Toggleable*);
void CheckChanges_Impl();
public:
SvxLineDefTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxLineDefTabPage() 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 SetDashList( XDashListRef const & pDshLst ) { pDashList = pDshLst; }
void SetPageType( PageType* pInType ) { pPageType = pInType; }
void SetDlgType( sal_uInt16 nInType ) { nDlgType = nInType; }
void SetPosDashLb( sal_Int32* pInPos ) { pPosDashLb = pInPos; }
void SetDashChgd( ChangeType* pIn ) { pnDashListState = pIn; }
};
/*************************************************************************/
class SvxLineEndDefTabPage : public SfxTabPage
{
private:
const SfxItemSet& rOutAttrs;
const SdrObject* pPolyObj;
XLineAttrSetItem aXLineAttr;
SfxItemSet& rXLSet;
XLineEndListRef pLineEndList;
ChangeType* pnLineEndListState;
PageType* pPageType;
sal_uInt16 nDlgType;
sal_Int32* pPosLineEndLb;
SvxXLinePreview m_aCtlPreview;
std::unique_ptr<weld::Entry> m_xEdtName;
std::unique_ptr<SvxLineEndLB> m_xLbLineEnds;
std::unique_ptr<weld::Button> m_xBtnAdd;
std::unique_ptr<weld::Button> m_xBtnModify;
std::unique_ptr<weld::Button> m_xBtnDelete;
std::unique_ptr<weld::Button> m_xBtnLoad;
std::unique_ptr<weld::Button> m_xBtnSave;
std::unique_ptr<weld::CustomWeld> m_xCtlPreview;
DECL_LINK(ClickAddHdl_Impl, weld::Button&, void);
DECL_LINK(ClickModifyHdl_Impl, weld::Button&, void);
DECL_LINK(ClickDeleteHdl_Impl, weld::Button&, void);
DECL_LINK(ClickLoadHdl_Impl, weld::Button&, void);
DECL_LINK(ClickSaveHdl_Impl, weld::Button&, void);
DECL_LINK(SelectLineEndHdl_Impl, weld::ComboBox&, void);
void SelectLineEndHdl_Impl();
void CheckChanges_Impl();
public:
SvxLineEndDefTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs);
virtual ~SvxLineEndDefTabPage() 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 SetLineEndList( XLineEndListRef const & pInList ) { pLineEndList = pInList; }
void SetPolyObj( const SdrObject* pObj ) { pPolyObj = pObj; }
void SetPageType( PageType* pInType ) { pPageType = pInType; }
void SetDlgType( sal_uInt16 nInType ) { nDlgType = nInType; }
void SetPosLineEndLb( sal_Int32* pInPos ) { pPosLineEndLb = pInPos; }
void SetLineEndChgd( ChangeType* pIn ) { pnLineEndListState = pIn; }
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */