File: KoSection.h

package info (click to toggle)
calligra 1%3A3.2.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 260,432 kB
  • sloc: cpp: 650,911; xml: 27,662; python: 6,044; perl: 2,724; yacc: 1,817; ansic: 1,325; sh: 1,277; lex: 1,107; ruby: 1,010; javascript: 495; makefile: 24
file content (135 lines) | stat: -rw-r--r-- 3,971 bytes parent folder | download | duplicates (3)
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
/*
 *  Copyright (c) 2011 Boudewijn Rempt <boud@valdyas.org>
 *  Copyright (c) 2014-2015 Denis Kuplyakov <dener.kup@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */
#ifndef KOSECTION_H
#define KOSECTION_H

#include "kotext_export.h"

#include <QMetaType>
#include <QList>
#include <QString>
#include <QPair>
#include <QScopedPointer>
#include <QTextCursor>

class KoXmlElement;
class KoShapeSavingContext;
class KoTextSharedLoadingData;
class KoSectionEnd;
class KoElementReference;
class KoTextInlineRdf;

class KoSectionPrivate;
/**
 * Contains the information about the current text:section.
 *
 * The <text:section> element has the following attributes:
 *
 * <ul>
 * <li>text:condition
 * <li>text:display
 * <li>text:name
 * <li>text:protected
 * <li>text:protection-key
 * <li>text:protection-key-digest-algorithm
 * <li>text:style-name
 * <li>xml:id
 * </ul>
 * (odf spec v.12)
 */
class KOTEXT_EXPORT KoSection
{
public:
    ~KoSection();

    /// Returns section name
    QString name() const;
    /// Returns starting and ending position of section in QTextDocument
    QPair<int, int> bounds() const;
    /// Returns section level. Root section has @c 0 level.
    int level() const;

    /** Returns inlineRdf associated with section
     * @return pointer to the KoTextInlineRdf for this section
     */
    KoTextInlineRdf *inlineRdf() const;

    /** Sets KoTextInlineRdf for this section
     * @param inlineRdf pointer to KoTextInlineRdf to set
     */
    void setInlineRdf(KoTextInlineRdf *inlineRdf);

    bool loadOdf(const KoXmlElement &element, KoTextSharedLoadingData *sharedData, bool stylesDotXml);
    void saveOdf(KoShapeSavingContext &context) const;

protected:
    const QScopedPointer<KoSectionPrivate> d_ptr;

private:
    Q_DISABLE_COPY(KoSection)
    Q_DECLARE_PRIVATE(KoSection)

    explicit KoSection(const QTextCursor &cursor, const QString &name, KoSection *parent);

    /// Changes section's name to @param name
    void setName(const QString &name);

    /// Sets paired KoSectionsEnd for this section.
    void setSectionEnd(KoSectionEnd *sectionEnd);

    /**
     * Sets level of section in section tree.
     * Root sections have @c 0 level.
     */
    void setLevel(int level);

    /// Returns a pointer to the parent of the section in tree.
    KoSection *parent() const;

    /// Returns a vector of pointers to the children of the section.
    QVector<KoSection *> children() const;

    /**
     * Specifies if end bound of section should stay on place when inserting text.
     * Used by KoTextLoader on document loading.
     * @see QTextCursor::setKeepPositionOnInsert(bool)
     */
    void setKeepEndBound(bool state);

    /**
     * Inserts @param section to position @param childIdx of children
     */
    void insertChild(int childIdx, KoSection *section);

    /**
     * Removes child on position @param childIdx
     */
    void removeChild(int childIdx);

    friend class KoSectionModel;
    friend class KoTextLoader; // accesses setKeepEndBound() function
    friend class KoSectionEnd;
    friend class TestKoTextEditor; // accesses setKeepEndBound() function
};

Q_DECLARE_METATYPE(KoSection *)
Q_DECLARE_METATYPE(QList<KoSection *>)

#endif // KOSECTION_H