summaryrefslogtreecommitdiff
path: root/sc/source/ui/inc/docfunc.hxx
blob: dc0a0f2d31170a83feda43d5dbb2e1196f75f73f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
/* -*- 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_SC_SOURCE_UI_INC_DOCFUNC_HXX
#define INCLUDED_SC_SOURCE_UI_INC_DOCFUNC_HXX

#include <tools/link.hxx>
#include "global.hxx"
#include <formula/grammar.hxx>
#include "tabbgcolor.hxx"
#include "token.hxx"
#include "rangenam.hxx"

#include <vector>
#include <map>

class ScEditEngineDefaulter;
class SdrUndoAction;
class ScAddress;
class ScDocShell;
class ScMarkData;
class ScPatternAttr;
class ScRange;
class ScRangeList;
class ScFormulaCell;
class ScTokenArray;
struct ScTabOpParam;
class ScTableProtection;
struct ScCellMergeOption;
class ScConditionalFormat;
class ScConditionalFormatList;

namespace sc {

struct ColRowSpan;

}

class ScDocFunc
{
protected:
    ScDocShell&     rDocShell;

    bool            AdjustRowHeight( const ScRange& rRange, bool bPaint = true );
    void            CreateOneName( ScRangeName& rList,
                                    SCCOL nPosX, SCROW nPosY, SCTAB nTab,
                                    SCCOL nX1, SCROW nY1, SCCOL nX2, SCROW nY2,
                                    bool& rCancel, bool bApi );
    void            NotifyInputHandler( const ScAddress& rPos );

                    ScDocFunc( ScDocShell& rDocSh ): rDocShell(rDocSh) {}
public:
    virtual         ~ScDocFunc() {}

    DECL_LINK( NotifyDrawUndo, SdrUndoAction* );

    // for grouping multiple operations into one with a new name
    void            EnterListAction( sal_uInt16 nNameResId );
    void            EndListAction();

    bool            DetectiveAddPred(const ScAddress& rPos);
    bool            DetectiveDelPred(const ScAddress& rPos);
    bool            DetectiveAddSucc(const ScAddress& rPos);
    bool            DetectiveDelSucc(const ScAddress& rPos);
    bool            DetectiveAddError(const ScAddress& rPos);
    bool            DetectiveMarkInvalid(SCTAB nTab);
    bool            DetectiveDelAll(SCTAB nTab);
    bool            DetectiveRefresh(bool bAutomatic = false);
    void            DetectiveCollectAllPreds(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens);
    void            DetectiveCollectAllSuccs(const ScRangeList& rSrcRanges, ::std::vector<ScTokenRef>& rRefTokens);

    SC_DLLPUBLIC bool
                    DeleteContents( const ScMarkData& rMark, sal_uInt16 nFlags,
                                            bool bRecord, bool bApi );

    bool            TransliterateText( const ScMarkData& rMark, sal_Int32 nType,
                                               bool bRecord, bool bApi );

    bool            SetNormalString( bool& o_rbNumFmtSet, const ScAddress& rPos, const OUString& rText, bool bApi );
    bool SetValueCell( const ScAddress& rPos, double fVal, bool bInteraction );
    bool SetValueCells( const ScAddress& rPos, const std::vector<double>& aVals, bool bInteraction );
    bool SetStringCell( const ScAddress& rPos, const OUString& rStr, bool bInteraction );
    bool SetEditCell( const ScAddress& rPos, const EditTextObject& rStr, bool bInteraction );

    bool SetStringOrEditCell( const ScAddress& rPos, const OUString& rStr, bool bInteraction );

    /**
     * This method takes ownership of the formula cell instance. The caller
     * must not delete it after passing it to this call.
     */
    bool SetFormulaCell( const ScAddress& rPos, ScFormulaCell* pCell, bool bInteraction );
    bool PutData( const ScAddress& rPos, ScEditEngineDefaulter& rEngine, bool bApi );
    bool SetCellText(
        const ScAddress& rPos, const OUString& rText, bool bInterpret, bool bEnglish, bool bApi,
        const formula::FormulaGrammar::Grammar eGrammar );

    bool            ShowNote( const ScAddress& rPos, bool bShow = true );
    inline bool     HideNote( const ScAddress& rPos ) { return ShowNote( rPos, false ); }

    bool            SetNoteText( const ScAddress& rPos, const OUString& rNoteText, bool bApi );
    bool            ReplaceNote( const ScAddress& rPos, const OUString& rNoteText, const OUString* pAuthor, const OUString* pDate, bool bApi );

    bool            ApplyAttributes( const ScMarkData& rMark, const ScPatternAttr& rPattern,
                                             bool bRecord, bool bApi );
    bool            ApplyStyle( const ScMarkData& rMark, const OUString& rStyleName,
                                        bool bRecord, bool bApi );

    bool            InsertCells( const ScRange& rRange,const ScMarkData* pTabMark,
                              InsCellCmd eCmd, bool bRecord, bool bApi, bool bPartOfPaste = false );

    bool            DeleteCells( const ScRange& rRange, const ScMarkData* pTabMark,
                              DelCellCmd eCmd, bool bRecord, bool bApi );

    bool            MoveBlock( const ScRange& rSource, const ScAddress& rDestPos,
                                       bool bCut, bool bRecord, bool bPaint, bool bApi );

    bool            InsertTable( SCTAB nTab, const OUString& rName, bool bRecord, bool bApi );
    bool            RenameTable( SCTAB nTab, const OUString& rName, bool bRecord, bool bApi );
    bool            DeleteTable( SCTAB nTab, bool bRecord, bool bApi );

    bool            SetTabBgColor( SCTAB nTab, const Color& rColor, bool bRecord, bool bApi );
    bool            SetTabBgColor( ScUndoTabColorInfo::List& rUndoTabColorList, bool bRecord, bool bApi );

    bool            SetTableVisible( SCTAB nTab, bool bVisible, bool bApi );

    bool            SetLayoutRTL( SCTAB nTab, bool bRTL, bool bApi );

    SC_DLLPUBLIC bool SetWidthOrHeight(
        bool bWidth, const std::vector<sc::ColRowSpan>& rRanges, SCTAB nTab,
        ScSizeMode eMode, sal_uInt16 nSizeTwips, bool bRecord, bool bApi );

    bool            InsertPageBreak( bool bColumn, const ScAddress& rPos,
                                             bool bRecord, bool bSetModified, bool bApi );
    bool            RemovePageBreak( bool bColumn, const ScAddress& rPos,
                                             bool bRecord, bool bSetModified, bool bApi );

    void            ProtectSheet( SCTAB nTab, const ScTableProtection& rProtect );

    bool            Protect( SCTAB nTab, const OUString& rPassword, bool bApi );
    bool            Unprotect( SCTAB nTab, const OUString& rPassword, bool bApi );

    bool            ClearItems( const ScMarkData& rMark, const sal_uInt16* pWhich, bool bApi );
    bool            ChangeIndent( const ScMarkData& rMark, bool bIncrement, bool bApi );
    bool            AutoFormat( const ScRange& rRange, const ScMarkData* pTabMark,
                                        sal_uInt16 nFormatNo, bool bRecord, bool bApi );

    SC_DLLPUBLIC bool
                    EnterMatrix( const ScRange& rRange, const ScMarkData* pTabMark,
                                         const ScTokenArray* pTokenArray,
                                         const OUString& rString, bool bApi, bool bEnglish,
                                         const OUString& rFormulaNmsp,
                                         const formula::FormulaGrammar::Grammar );

    bool            TabOp( const ScRange& rRange, const ScMarkData* pTabMark,
                                   const ScTabOpParam& rParam, bool bRecord, bool bApi );

    bool            FillSimple( const ScRange& rRange, const ScMarkData* pTabMark,
                                        FillDir eDir, bool bRecord, bool bApi );
    bool            FillSeries( const ScRange& rRange, const ScMarkData* pTabMark,
                                        FillDir    eDir, FillCmd eCmd, FillDateCmd    eDateCmd,
                                        double fStart, double fStep, double fMax,
                                        bool bRecord, bool bApi );

    // FillAuto: rRange wird von Source-Range auf Dest-Range angepasst
    SC_DLLPUBLIC bool
                    FillAuto( ScRange& rRange, const ScMarkData* pTabMark, FillDir eDir, FillCmd eCmd, FillDateCmd  eDateCmd, sal_uLong nCount, double fStep, double fMax, bool bRecord, bool bApi );

    bool            FillAuto( ScRange& rRange, const ScMarkData* pTabMark,
                                      FillDir eDir, sal_uLong nCount, bool bRecord, bool bApi );

    bool            ResizeMatrix( const ScRange& rOldRange, const ScAddress& rNewEnd, bool bApi );

    bool            MergeCells( const ScCellMergeOption& rOption, bool bContents,
                                        bool bRecord, bool bApi );
    bool            UnmergeCells( const ScRange& rRange, bool bRecord );
    bool            UnmergeCells( const ScCellMergeOption& rOption, bool bRecord );

    bool            SetNewRangeNames( ScRangeName* pNewRanges, bool bModifyDoc = true, SCTAB nTab = -1 );     // takes ownership of pNewRanges //nTab = -1 for local range names
    bool            ModifyRangeNames( const ScRangeName& rNewRanges, SCTAB nTab = -1 );
    /**
     * Modify all range names, global scope names as well as sheet local ones,
     * in one go.  Note that this method will <b>not</b> destroy the instances
     * passed as arguments (it creates copies); the caller is responsible for
     * destroying them.
     */
    void            ModifyAllRangeNames( const boost::ptr_map<OUString, ScRangeName>& rRangeMap );

    bool            CreateNames( const ScRange& rRange, sal_uInt16 nFlags, bool bApi, SCTAB nTab = -1 ); // -1 for global range names
    bool            InsertNameList( const ScAddress& rStartPos, bool bApi );

    bool            InsertAreaLink( const OUString& rFile, const OUString& rFilter,
                                            const OUString& rOptions, const OUString& rSource,
                                            const ScRange& rDestRange, sal_uLong nRefresh,
                                            bool bFitBlock, bool bApi );

    /**
     * @param nOldIndex If 0 don't delete an old format
     * @param pFormat if NULL only delete an old format
     */
    void ReplaceConditionalFormat( sal_uLong nOldIndex, ScConditionalFormat* pFormat, SCTAB nTab, const ScRangeList& rRanges );

    /**
     * Sets or replaces the conditional format list of a table
     *
     * @param pList the new ScConditionalFormatList, method takes ownership
     * @param nTab the tab to which the conditional format list belongs
     */
    void SetConditionalFormatList( ScConditionalFormatList* pList, SCTAB nTab );
};

class ScDocFuncDirect : public ScDocFunc
{
public:
            ScDocFuncDirect( ScDocShell& rDocSh ) : ScDocFunc( rDocSh ) {}
    virtual ~ScDocFuncDirect() {}
};


#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */