Files
Michael Meeks 94a89768af sc: forward declare ScDrawLayer in document.hxx.
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
2026-09-22 21:02:36 +02:00

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: */