TextEdit example: add indent/unindent feature
It was not possible to interactively create the example text without this feature; and in general it's necessary to work with nested lists. But currently it does not deal with all possible changes of list nesting, because the API seems incomplete for that purpose. Task-number: QTBUG-75589 Change-Id: I3e29ca15a2e7c37300a0103ceb90670716472ffb Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
This commit is contained in:
parent
5146582b8d
commit
b922c97c9c
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 993 B |
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 993 B |
@ -317,6 +317,14 @@ void TextEdit::setupTextActions()
|
|||||||
actionAlignJustify->setShortcut(Qt::CTRL + Qt::Key_J);
|
actionAlignJustify->setShortcut(Qt::CTRL + Qt::Key_J);
|
||||||
actionAlignJustify->setCheckable(true);
|
actionAlignJustify->setCheckable(true);
|
||||||
actionAlignJustify->setPriority(QAction::LowPriority);
|
actionAlignJustify->setPriority(QAction::LowPriority);
|
||||||
|
const QIcon indentMoreIcon = QIcon::fromTheme("format-indent-more", QIcon(rsrcPath + "/format-indent-more.png"));
|
||||||
|
actionIndentMore = menu->addAction(indentMoreIcon, tr("&Indent"), this, &TextEdit::indent);
|
||||||
|
actionIndentMore->setShortcut(Qt::CTRL + Qt::Key_BracketRight);
|
||||||
|
actionIndentMore->setPriority(QAction::LowPriority);
|
||||||
|
const QIcon indentLessIcon = QIcon::fromTheme("format-indent-less", QIcon(rsrcPath + "/format-indent-less.png"));
|
||||||
|
actionIndentLess = menu->addAction(indentLessIcon, tr("&Unindent"), this, &TextEdit::unindent);
|
||||||
|
actionIndentLess->setShortcut(Qt::CTRL + Qt::Key_BracketLeft);
|
||||||
|
actionIndentLess->setPriority(QAction::LowPriority);
|
||||||
|
|
||||||
// Make sure the alignLeft is always left of the alignRight
|
// Make sure the alignLeft is always left of the alignRight
|
||||||
QActionGroup *alignGroup = new QActionGroup(this);
|
QActionGroup *alignGroup = new QActionGroup(this);
|
||||||
@ -335,6 +343,10 @@ void TextEdit::setupTextActions()
|
|||||||
|
|
||||||
tb->addActions(alignGroup->actions());
|
tb->addActions(alignGroup->actions());
|
||||||
menu->addActions(alignGroup->actions());
|
menu->addActions(alignGroup->actions());
|
||||||
|
tb->addAction(actionIndentMore);
|
||||||
|
tb->addAction(actionIndentLess);
|
||||||
|
menu->addAction(actionIndentMore);
|
||||||
|
menu->addAction(actionIndentLess);
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|
||||||
@ -736,6 +748,40 @@ void TextEdit::setChecked(bool checked)
|
|||||||
textStyle(checked ? 5 : 4);
|
textStyle(checked ? 5 : 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TextEdit::indent()
|
||||||
|
{
|
||||||
|
modifyIndentation(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextEdit::unindent()
|
||||||
|
{
|
||||||
|
modifyIndentation(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextEdit::modifyIndentation(int amount)
|
||||||
|
{
|
||||||
|
QTextCursor cursor = textEdit->textCursor();
|
||||||
|
cursor.beginEditBlock();
|
||||||
|
if (cursor.currentList()) {
|
||||||
|
QTextListFormat listFmt = cursor.currentList()->format();
|
||||||
|
// See whether the line above is the list we want to move this item into,
|
||||||
|
// or whether we need a new list.
|
||||||
|
QTextCursor above(cursor);
|
||||||
|
above.movePosition(QTextCursor::Up);
|
||||||
|
if (above.currentList() && listFmt.indent() + amount == above.currentList()->format().indent()) {
|
||||||
|
above.currentList()->add(cursor.block());
|
||||||
|
} else {
|
||||||
|
listFmt.setIndent(listFmt.indent() + amount);
|
||||||
|
cursor.createList(listFmt);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
QTextBlockFormat blockFmt = cursor.blockFormat();
|
||||||
|
blockFmt.setIndent(blockFmt.indent() + amount);
|
||||||
|
cursor.setBlockFormat(blockFmt);
|
||||||
|
}
|
||||||
|
cursor.endEditBlock();
|
||||||
|
}
|
||||||
|
|
||||||
void TextEdit::currentCharFormatChanged(const QTextCharFormat &format)
|
void TextEdit::currentCharFormatChanged(const QTextCharFormat &format)
|
||||||
{
|
{
|
||||||
fontChanged(format.font());
|
fontChanged(format.font());
|
||||||
|
@ -97,6 +97,8 @@ private slots:
|
|||||||
void textColor();
|
void textColor();
|
||||||
void textAlign(QAction *a);
|
void textAlign(QAction *a);
|
||||||
void setChecked(bool checked);
|
void setChecked(bool checked);
|
||||||
|
void indent();
|
||||||
|
void unindent();
|
||||||
|
|
||||||
void currentCharFormatChanged(const QTextCharFormat &format);
|
void currentCharFormatChanged(const QTextCharFormat &format);
|
||||||
void cursorPositionChanged();
|
void cursorPositionChanged();
|
||||||
@ -111,6 +113,7 @@ private:
|
|||||||
void setupTextActions();
|
void setupTextActions();
|
||||||
bool maybeSave();
|
bool maybeSave();
|
||||||
void setCurrentFileName(const QString &fileName);
|
void setCurrentFileName(const QString &fileName);
|
||||||
|
void modifyIndentation(int amount);
|
||||||
|
|
||||||
void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
|
void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
|
||||||
void fontChanged(const QFont &f);
|
void fontChanged(const QFont &f);
|
||||||
@ -126,6 +129,8 @@ private:
|
|||||||
QAction *actionAlignCenter;
|
QAction *actionAlignCenter;
|
||||||
QAction *actionAlignRight;
|
QAction *actionAlignRight;
|
||||||
QAction *actionAlignJustify;
|
QAction *actionAlignJustify;
|
||||||
|
QAction *actionIndentLess;
|
||||||
|
QAction *actionIndentMore;
|
||||||
QAction *actionToggleCheckState;
|
QAction *actionToggleCheckState;
|
||||||
QAction *actionUndo;
|
QAction *actionUndo;
|
||||||
QAction *actionRedo;
|
QAction *actionRedo;
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
<file>images/mac/fileopen.png</file>
|
<file>images/mac/fileopen.png</file>
|
||||||
<file>images/mac/fileprint.png</file>
|
<file>images/mac/fileprint.png</file>
|
||||||
<file>images/mac/filesave.png</file>
|
<file>images/mac/filesave.png</file>
|
||||||
|
<file>images/mac/format-indent-less.png</file>
|
||||||
|
<file>images/mac/format-indent-more.png</file>
|
||||||
<file>images/mac/textbold.png</file>
|
<file>images/mac/textbold.png</file>
|
||||||
<file>images/mac/textcenter.png</file>
|
<file>images/mac/textcenter.png</file>
|
||||||
<file>images/mac/textitalic.png</file>
|
<file>images/mac/textitalic.png</file>
|
||||||
@ -34,6 +36,8 @@
|
|||||||
<file>images/win/fileopen.png</file>
|
<file>images/win/fileopen.png</file>
|
||||||
<file>images/win/fileprint.png</file>
|
<file>images/win/fileprint.png</file>
|
||||||
<file>images/win/filesave.png</file>
|
<file>images/win/filesave.png</file>
|
||||||
|
<file>images/win/format-indent-less.png</file>
|
||||||
|
<file>images/win/format-indent-more.png</file>
|
||||||
<file>images/win/textbold.png</file>
|
<file>images/win/textbold.png</file>
|
||||||
<file>images/win/textcenter.png</file>
|
<file>images/win/textcenter.png</file>
|
||||||
<file>images/win/textitalic.png</file>
|
<file>images/win/textitalic.png</file>
|
||||||
|
Loading…
Reference in New Issue
Block a user