document.hxx included drwlayer.hxx, and with it svx/fmmodel.hxx, svx/svdmodel.hxx, svx/svdundo.hxx, svx/xtable.hxx and editeng/outliner.hxx, in all 700 translation units that use ScDocument. The only place in the header that needed the complete type was the inline destructor of sc::DrawUndoGuard, which now lives in documen9.cxx next to ScDocument::BeginDrawUndo. The ScObjectHandling enumeration, used as a default argument of SetLayoutRTL, moves to types.hxx so that both headers can see it. The files that used the drawing layer or the svx model classes through this include now include drwlayer.hxx themselves, and a few headers that relied on the same chain for TranslateId, Idle or SvStream get the header or forward declaration they need. clang -ftime-trace suggests this is 6% of the sc build time. Signed-off-by: Michael Meeks <michael.meeks@collabora.com> Change-Id: Id723c46ef0c881428ab1d9a2e9a642713a92e79e Reviewed-on: https://gerrit.collaboraoffice.com/c/online/+/12681 Tested-by: Jenkins CPCI <releng@collaboraoffice.com> Reviewed-by: Noel Grandin <noel.grandin@collabora.com> (cherry picked from commit 3e8fd8cd92ff57aaef5ba9d4b71933700ee3f83b) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/211316 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins
159 lines
3.7 KiB
C++
159 lines
3.7 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/.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <sal/types.h>
|
|
|
|
#include <boost/intrusive_ptr.hpp>
|
|
#include <o3tl/typed_flags_set.hxx>
|
|
|
|
class ScMatrix;
|
|
|
|
// The typedefs
|
|
typedef sal_Int32 SCROW;
|
|
typedef sal_Int16 SCCOL;
|
|
typedef sal_Int16 SCTAB;
|
|
typedef sal_Int32 SCCOLROW; ///< a type capable of holding either SCCOL or SCROW
|
|
|
|
typedef ::boost::intrusive_ptr<ScMatrix> ScMatrixRef;
|
|
typedef ::boost::intrusive_ptr<const ScMatrix> ScConstMatrixRef;
|
|
|
|
namespace formula { class FormulaToken; }
|
|
typedef ::boost::intrusive_ptr<formula::FormulaToken> ScTokenRef;
|
|
|
|
enum class ScMatValType : sal_uInt8 {
|
|
Value = 0x00,
|
|
Boolean = 0x01,
|
|
String = 0x02,
|
|
Empty = String | 0x04, // STRING plus flag
|
|
EmptyPath = Empty | 0x08, // EMPTY plus flag
|
|
NonvalueMask = EmptyPath // mask of all non-value bits
|
|
};
|
|
namespace o3tl{
|
|
template<> struct typed_flags<ScMatValType> : o3tl::is_typed_flags<ScMatValType, 0x0f> {};
|
|
}
|
|
|
|
struct ScFormulaCellGroup;
|
|
typedef ::boost::intrusive_ptr<ScFormulaCellGroup> ScFormulaCellGroupRef;
|
|
|
|
/**
|
|
* When vectorization is enabled, we could potentially mass-calculate a
|
|
* series of formula token arrays in adjacent formula cells in one step,
|
|
* provided that they all contain identical set of tokens.
|
|
*/
|
|
enum ScFormulaVectorState
|
|
{
|
|
FormulaVectorDisabled,
|
|
FormulaVectorDisabledNotInSubSet,
|
|
FormulaVectorDisabledByOpCode,
|
|
FormulaVectorDisabledByStackVariable,
|
|
|
|
FormulaVectorEnabled,
|
|
FormulaVectorCheckReference,
|
|
FormulaVectorUnknown
|
|
};
|
|
|
|
namespace sc {
|
|
|
|
enum class MatrixEdge{
|
|
Nothing = 0,
|
|
Inside = 1,
|
|
Bottom = 2,
|
|
Left = 4,
|
|
Top = 8,
|
|
Right = 16,
|
|
Open = 32
|
|
}; // typed_flags, template outside of sc namespace
|
|
|
|
enum GroupCalcState
|
|
{
|
|
GroupCalcDisabled = 0,
|
|
GroupCalcEnabled,
|
|
GroupCalcRunning,
|
|
};
|
|
|
|
struct RangeMatrix
|
|
{
|
|
ScMatrixRef mpMat;
|
|
sal_Int32 mnCol1;
|
|
sal_Int32 mnRow1;
|
|
sal_Int32 mnTab1;
|
|
sal_Int32 mnCol2;
|
|
sal_Int32 mnRow2;
|
|
sal_Int32 mnTab2;
|
|
|
|
RangeMatrix();
|
|
|
|
bool isRangeValid() const;
|
|
};
|
|
|
|
struct MultiDataCellState
|
|
{
|
|
enum StateType : sal_uInt8 { Invalid = 0, Empty, HasOneCell, HasMultipleCells };
|
|
|
|
SCROW mnRow1; //< first non-empty row
|
|
SCCOL mnCol1; //< first non-empty column
|
|
StateType meState;
|
|
|
|
MultiDataCellState();
|
|
MultiDataCellState( StateType eState );
|
|
};
|
|
|
|
enum class AreaOverlapType
|
|
{
|
|
Inside,
|
|
InsideOrOverlap,
|
|
OneRowInside,
|
|
OneColumnInside
|
|
};
|
|
|
|
enum class ListenerGroupType
|
|
{
|
|
Group,
|
|
Both
|
|
};
|
|
|
|
enum StartListeningType
|
|
{
|
|
ConvertToGroupListening,
|
|
SingleCellListening,
|
|
NoListening
|
|
};
|
|
|
|
}
|
|
|
|
namespace o3tl{
|
|
template<> struct typed_flags<sc::MatrixEdge> : o3tl::is_typed_flags<sc::MatrixEdge, 63> {};
|
|
}
|
|
|
|
// Type of query done by ScQueryCellIteratorBase.
|
|
enum class ScQueryCellIteratorType
|
|
{
|
|
Generic,
|
|
CountIf
|
|
};
|
|
|
|
// Type of cell access done by ScQueryCellIteratorBase.
|
|
enum class ScQueryCellIteratorAccess
|
|
{
|
|
Direct, // Accessing directly cells.
|
|
SortedCache // Using ScSortedRangeCache.
|
|
};
|
|
|
|
// How ScDrawLayer::SetPageSize treats the drawing objects of a sheet.
|
|
enum class ScObjectHandling
|
|
{
|
|
RecalcPosMode, // used for row height or col width changes
|
|
MoveRTLMode, // used for switch to RTL during import of right-to-left sheet
|
|
MirrorRTLMode // used for switch between RTL and LTR by .uno:SheetRightToLeft
|
|
};
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|