diff options
Diffstat (limited to 'sw/inc/fmtclds.hxx')
-rw-r--r-- | sw/inc/fmtclds.hxx | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/sw/inc/fmtclds.hxx b/sw/inc/fmtclds.hxx new file mode 100644 index 0000000000..d2b34192b4 --- /dev/null +++ b/sw/inc/fmtclds.hxx @@ -0,0 +1,177 @@ +/* -*- 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 . + */ +#ifndef INCLUDED_SW_INC_FMTCLDS_HXX +#define INCLUDED_SW_INC_FMTCLDS_HXX + +#include <editeng/borderline.hxx> +#include <tools/color.hxx> +#include <tools/solar.h> +#include <svl/poolitem.hxx> +#include "swdllapi.h" +#include "hintids.hxx" +#include "format.hxx" + +#include <vector> + +/// ColumnDescriptor +class SwColumn +{ + sal_uInt16 m_nWish; /**< Desired width, borders included. + It is inversely proportional to the ratio of + desired width environment / current width column. */ + sal_uInt16 m_nLeft; ///< Left border. + sal_uInt16 m_nRight; ///< Right border. + +public: + SwColumn(); + + bool operator==( const SwColumn & ) const; + + void SetWishWidth( sal_uInt16 nNew ) { m_nWish = nNew; } + void SetLeft ( sal_uInt16 nNew ) { m_nLeft = nNew; } + void SetRight( sal_uInt16 nNew ) { m_nRight = nNew; } + + sal_uInt16 GetWishWidth() const { return m_nWish; } + sal_uInt16 GetLeft () const { return m_nLeft; } + sal_uInt16 GetRight() const { return m_nRight; } + + void dumpAsXml(xmlTextWriterPtr pWriter) const; +}; + +typedef std::vector<SwColumn> SwColumns; + +enum SwColLineAdj +{ + COLADJ_NONE, + COLADJ_TOP, + COLADJ_CENTER, + COLADJ_BOTTOM +}; + +/// This pool item subclass can appear in the item set of an SwPageDesc, and contains settings +/// visible on the UI via Format -> Page Style -> Columns tab. +/// It can also appear in the item set of an SwSectionFormat, and then contains settings visible on +/// the UI via Format -> Sections -> Options -> Columns tab. +class SW_DLLPUBLIC SwFormatCol final : public SfxPoolItem +{ + SvxBorderLineStyle m_eLineStyle; ///< style of the separator line + sal_uLong m_nLineWidth; ///< Width of the separator line. + Color m_aLineColor; ///< Color of the separator line. + + sal_uInt16 m_nLineHeight; /**< Percentile height of lines. + (Based on height of columns including UL). */ + + SwColLineAdj m_eAdj; ///< Line will be adjusted top, centered or bottom. + + SwColumns m_aColumns; ///< Information concerning the columns. + sal_uInt16 m_nWidth; ///< Total desired width of all columns. + sal_Int16 m_aWidthAdjustValue; + + bool m_bOrtho; /**< Only if this flag is set, the setting of GutterWidth will + be accompanied by a "visual rearrangement". + The flag must be reset if widths of columns or borders are changed. + When it is set (again) the visual arrangement is recalculated. + The flag is initially set. */ + + SAL_DLLPRIVATE void Calc( sal_uInt16 nGutterWidth, sal_uInt16 nAct ); + +public: + SwFormatCol(); + SwFormatCol( const SwFormatCol& ); + virtual ~SwFormatCol() override; + //#i120133# + sal_Int16 GetAdjustValue() const { return m_aWidthAdjustValue; } + void SetAdjustValue( sal_Int16 n ) { m_aWidthAdjustValue = n; } + + SwFormatCol& operator=( const SwFormatCol& ); + + /// "pure virtual methods" of SfxPoolItem + virtual bool operator==( const SfxPoolItem& ) const override; + virtual SwFormatCol* Clone( SfxItemPool* pPool = nullptr ) const override; + virtual bool GetPresentation( SfxItemPresentation ePres, + MapUnit eCoreMetric, + MapUnit ePresMetric, + OUString &rText, + const IntlWrapper& rIntl ) const override; + + virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override; + virtual bool PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId ) override; + + const SwColumns &GetColumns() const { return m_aColumns; } + SwColumns &GetColumns() { return m_aColumns; } + sal_uInt16 GetNumCols() const { return m_aColumns.size(); } + + SvxBorderLineStyle GetLineStyle() const { return m_eLineStyle;} + sal_uLong GetLineWidth() const { return m_nLineWidth;} + const Color& GetLineColor() const { return m_aLineColor;} + + SwColLineAdj GetLineAdj() const { return m_eAdj; } + bool IsOrtho() const { return m_bOrtho; } + sal_uInt16 GetWishWidth() const { return m_nWidth; } + sal_uInt8 GetLineHeight()const { return m_nLineHeight; } + + /** @return USHRT_MAX if ambiguous. + @return smallest width if bMin is true. */ + sal_uInt16 GetGutterWidth( bool bMin = false ) const; + + void SetLineStyle(SvxBorderLineStyle eStyle) { m_eLineStyle = eStyle;} + void SetLineWidth(sal_uLong nLWidth) { m_nLineWidth = nLWidth;} + void SetLineColor(const Color& rCol ) { m_aLineColor = rCol;} + void SetLineHeight( sal_uInt8 nNew ) { m_nLineHeight = nNew; } + void SetLineAdj( SwColLineAdj eNew ){ m_eAdj = eNew; } + void SetWishWidth( sal_uInt16 nNew ) { m_nWidth = nNew; } + + /** This function allows to (repeatedly) initialize the columns. + The Ortho flag is set automatically. */ + void Init( sal_uInt16 nNumCols, sal_uInt16 nGutterWidth, sal_uInt16 nAct ); + + /** Adjusts borders for columns in aColumns. + If flag m_bOrtho is set, columns are visually re-arranged. + If the flag is not set, columns widths are not changed and + borders are adjusted. */ + void SetGutterWidth( sal_uInt16 nNew, sal_uInt16 nAct ); + + /** This too re-arranges columns automatically if flag is set. + Only in this case the second parameter is needed and evaluated. */ + void SetOrtho( bool bNew, sal_uInt16 nGutterWidth, sal_uInt16 nAct ); + + /// For the reader + void SetOrtho_( bool bNew ) { m_bOrtho = bNew; } + + /** Calculates current width of column nCol. + The ratio of desired width of this column to return value is + proportional to ratio of total desired value to nAct. */ + sal_uInt16 CalcColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const; + + /** As above except that it @return the width of PrtArea - + that corresponds to what constitutes the column for the user. */ + sal_uInt16 CalcPrtColWidth( sal_uInt16 nCol, sal_uInt16 nAct ) const; + + void dumpAsXml(xmlTextWriterPtr pWriter) const override; +}; + +inline const SwFormatCol &SwAttrSet::GetCol(bool bInP) const + { return Get( RES_COL,bInP); } + +inline const SwFormatCol &SwFormat::GetCol(bool bInP) const + { return m_aSet.GetCol(bInP); } + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |