1/*
2 Nested list helper
3 SPDX-FileCopyrightText: 2008 Stephen Kelly <steveire@gmail.com>
4
5 SPDX-License-Identifier: LGPL-2.1-or-later
6*/
7
8#ifndef NESTEDLISTHELPER_H
9#define NESTEDLISTHELPER_H
10
11class QTextEdit;
12
13class QKeyEvent;
14class QDropEvent;
15class QTextCursor;
16class QTextList;
17class QTextBlock;
18
19/*!
20 * \brief Helper class for automatic handling of nested lists in a text edit
21 *
22 * \since 4.1
23 * \internal
24 */
25class NestedListHelper
26{
27public:
28 /*!
29 * Create a helper
30 *
31 * \a The text edit object to handle lists in.
32 */
33 explicit NestedListHelper(QTextEdit *te);
34
35 /*!
36 * Destructor
37 */
38 ~NestedListHelper();
39
40 /*!
41 *
42 * Handles a key press before it is processed by the text edit widget.
43 *
44 * This includes:
45 * 1. Backspace at the beginning of a line decreases nesting level
46 * 2. Return at the empty list element decreases nesting level
47 * 3. Tab at the beginning of a line OR with a multi-line selection
48 * increases nesting level
49 *
50 * \a event The event to be handled
51 *
52 * Returns Whether the event was completely handled by this method.
53 */
54 bool handleKeyPressEvent(QKeyEvent *event);
55
56 bool handleAfterDropEvent(QDropEvent *event);
57
58 /*!
59 * Changes the indent (nesting level) on a current list item or selection
60 * by the value \a delta (typically, +1 or -1)
61 */
62 void changeIndent(int delta);
63
64 /*!
65 * Changes the style of the current list or creates a new list with
66 * the specified style.
67 *
68 * \a styleIndex The QTextListStyle of the list.
69 */
70 void handleOnBulletType(int styleIndex);
71
72 /*!
73 * \brief Check whether the current item in the list may be indented.
74 *
75 * An list item must have an item above it on the same or greater level
76 * if it can be indented.
77 *
78 * Also, a block which is currently part of a list can be indented.
79 *
80 * \sa canDedent
81 *
82 * Returns Whether the item can be indented.
83 */
84 bool canIndent() const;
85
86 /*!
87 * \brief Check whether the current item in the list may be dedented.
88 *
89 * An item may be dedented if it is part of a list.
90 * The next item must be at the same or lesser level.
91 *
92 * \sa canIndent
93 *
94 * Returns Whether the item can be dedented.
95 */
96 bool canDedent() const;
97
98private:
99 QTextCursor topOfSelection() const;
100 QTextCursor bottomOfSelection() const;
101 void processList(QTextList *list);
102 void reformatList(QTextBlock block);
103 void reformatList();
104
105 QTextEdit *const textEdit;
106};
107
108#endif
109

source code of ktextwidgets/src/widgets/nestedlisthelper_p.h