aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util/qquicktextselection_p.h
blob: 66fa2813ceb718f115838f1e3c643f27d459e006 (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
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default

#ifndef QQUICKTEXTSELECTION_H
#define QQUICKTEXTSELECTION_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <private/qtquickglobal_p.h>

#include <QtQuick/qquicktextdocument.h>

#include <QtQml/qqml.h>

#include <QtGui/qtextcursor.h>

QT_BEGIN_NAMESPACE

class QFont;
class QQuickTextControl;

class Q_QUICK_EXPORT QQuickTextSelection : public QObject, public QQmlParserStatus
{
    Q_OBJECT
    Q_INTERFACES(QQmlParserStatus)

    // specify the selection
    Q_PROPERTY(QQuickTextDocument *document READ document WRITE setDocument NOTIFY documentChanged FINAL REVISION(6, 11))
    Q_PROPERTY(int selectionStart READ selectionStart WRITE setSelectionStart NOTIFY selectionStartChanged FINAL REVISION(6, 11))
    Q_PROPERTY(int selectionEnd READ selectionEnd WRITE setSelectionEnd NOTIFY selectionEndChanged FINAL REVISION(6, 11))

    // modify the selected text
    Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL)
    Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL)
    Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL)
    Q_PROPERTY(Qt::Alignment alignment READ alignment WRITE setAlignment NOTIFY alignmentChanged FINAL)

    QML_NAMED_ELEMENT(TextSelection)
    QML_ADDED_IN_VERSION(6, 7)

public:

    // keep this in sync with QTextCursor::MoveOperation
    enum MoveOperation {
        NoMove = QTextCursor::NoMove,

        Start,
        Up,
        StartOfLine,
        StartOfBlock,
        StartOfWord,
        PreviousBlock,
        PreviousCharacter,
        PreviousWord,
        Left,
        WordLeft,

        End,
        Down,
        EndOfLine,
        EndOfWord,
        EndOfBlock,
        NextBlock,
        NextCharacter,
        NextWord,
        Right,
        WordRight,

        NextCell,
        PreviousCell,
        NextRow,
        PreviousRow
    };
    Q_ENUM(MoveOperation);

    explicit QQuickTextSelection(QObject *parent = nullptr);

    void classBegin() override {}
    void componentComplete() override;

    QQuickTextDocument *document() const;
    void setDocument(QQuickTextDocument *doc);

    int selectionStart() const;
    void setSelectionStart(int start);

    int selectionEnd() const;
    void setSelectionEnd(int end);

    QString text() const;
    void setText(const QString &text);

    QFont font() const;
    void setFont(const QFont &font);

    QColor color() const;
    void setColor(QColor color);

    Qt::Alignment alignment() const;
    void setAlignment(Qt::Alignment align);

    Q_REVISION(6, 11) Q_INVOKABLE bool moveSelectionStart(MoveOperation op, int n = 1);
    Q_REVISION(6, 11) Q_INVOKABLE bool moveSelectionEnd(MoveOperation op, int n = 1);

    Q_REVISION(6, 11) Q_INVOKABLE void duplicate();

    Q_REVISION(6, 11) Q_INVOKABLE void linkTo(const QUrl &destination);

Q_SIGNALS:
    Q_REVISION(6, 11) void documentChanged();
    Q_REVISION(6, 11) void selectionStartChanged();
    Q_REVISION(6, 11) void selectionEndChanged();
    void textChanged();
    void fontChanged();
    void colorChanged();
    void alignmentChanged();

private:
    QTextCursor cursor() const;
    void updateFromCharFormat(const QTextCharFormat &fmt);
    void updateFromBlockFormat();

private:
    QTextCursor m_cursor;
    QTextCharFormat m_charFormat;
    QTextBlockFormat m_blockFormat;
    QQuickTextDocument *m_doc = nullptr;
    QQuickTextControl *m_control = nullptr;
};

QT_END_NAMESPACE

QML_DECLARE_TYPE(QQuickTextSelection)

#endif // QQUICKTEXTSELECTION_H