From 01eda3fa22fa92795753cdecb75b920ce914146c Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Thu, 11 Aug 2016 21:03:35 +0200 Subject: texteditor: re-order the property accessors There's no reason to register all setters as slots. Properties are fine for QML usage. Re-order them also in the .cpp file in the same order than they are in the header. It's a bit easier to follow when logical pairs are next to each other. Change-Id: Ib8097ecafe10f2c785b05b045694c338977860ef Reviewed-by: Mitch Curtis --- .../quickcontrols2/texteditor/documenthandler.cpp | 318 +++++++++++---------- .../quickcontrols2/texteditor/documenthandler.h | 43 +-- 2 files changed, 189 insertions(+), 172 deletions(-) (limited to 'examples') diff --git a/examples/quickcontrols2/texteditor/documenthandler.cpp b/examples/quickcontrols2/texteditor/documenthandler.cpp index 43907db9..81397517 100644 --- a/examples/quickcontrols2/texteditor/documenthandler.cpp +++ b/examples/quickcontrols2/texteditor/documenthandler.cpp @@ -87,145 +87,94 @@ void DocumentHandler::setDocument(QQuickTextDocument *quickDoc) emit documentChanged(); } -void DocumentHandler::setFileUrl(const QUrl &fileUrl) +int DocumentHandler::cursorPosition() const { - if (fileUrl == m_fileUrl) - return; - - m_fileUrl = fileUrl; - QString fileName = QQmlFile::urlToLocalFileOrQrc(fileUrl); - if (QFile::exists(fileName)) { - QFile file(fileName); - if (file.open(QFile::ReadOnly)) { - QByteArray data = file.readAll(); - QTextCodec *codec = QTextCodec::codecForHtml(data); - setText(codec->toUnicode(data)); - if (m_doc) - m_doc->setModified(false); - if (fileName.isEmpty()) - m_documentTitle = QStringLiteral("untitled.txt"); - else - m_documentTitle = QFileInfo(fileName).fileName(); - - emit textChanged(); - emit documentTitleChanged(); - - reset(); - } - } - emit fileUrlChanged(); -} - -QString DocumentHandler::documentTitle() const -{ - return m_documentTitle; + return m_cursorPosition; } -void DocumentHandler::setDocumentTitle(const QString &documentTitle) +void DocumentHandler::setCursorPosition(int position) { - if (documentTitle == m_documentTitle) + if (position == m_cursorPosition) return; - m_documentTitle = documentTitle; - emit documentTitleChanged(); + m_cursorPosition = position; + reset(); } -void DocumentHandler::setText(const QString &text) +int DocumentHandler::selectionStart() const { - if (text == m_text) - return; - - m_text = text; - emit textChanged(); + return m_selectionStart; } -void DocumentHandler::saveAs(const QUrl &fileUrl) +void DocumentHandler::setSelectionStart(int position) { - if (!m_doc) + if (position == m_selectionStart) return; - const QString filePath = fileUrl.toLocalFile(); - const bool isHtml = QFileInfo(filePath).suffix().contains(QLatin1String("htm")); - QFile file(filePath); - if (!file.open(QFile::WriteOnly | QFile::Truncate | (isHtml ? QFile::NotOpen : QFile::Text))) { - emit error(tr("Cannot save: ") + file.errorString()); - return; - } - file.write((isHtml ? m_doc->toHtml() : m_doc->toPlainText()).toUtf8()); - file.close(); - setFileUrl(fileUrl); -} - -QUrl DocumentHandler::fileUrl() const -{ - return m_fileUrl; + m_selectionStart = position; + emit selectionStartChanged(); } -QString DocumentHandler::text() const +int DocumentHandler::selectionEnd() const { - return m_text; + return m_selectionEnd; } -void DocumentHandler::setCursorPosition(int position) +void DocumentHandler::setSelectionEnd(int position) { - if (position == m_cursorPosition) + if (position == m_selectionEnd) return; - m_cursorPosition = position; - - reset(); + m_selectionEnd = position; + emit selectionEndChanged(); } -void DocumentHandler::reset() +QString DocumentHandler::fontFamily() const { - emit fontFamilyChanged(); - emit alignmentChanged(); - emit boldChanged(); - emit italicChanged(); - emit underlineChanged(); - emit fontSizeChanged(); - emit textColorChanged(); + QTextCursor cursor = textCursor(); + if (cursor.isNull()) + return QString(); + QTextCharFormat format = cursor.charFormat(); + return format.font().family(); } -QTextCursor DocumentHandler::textCursor() const +void DocumentHandler::setFontFamily(const QString &family) { - if (!m_doc) - return QTextCursor(); - - QTextCursor cursor = QTextCursor(m_doc); - if (m_selectionStart != m_selectionEnd) { - cursor.setPosition(m_selectionStart); - cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor); - } else { - cursor.setPosition(m_cursorPosition); - } - return cursor; + QTextCursor cursor = textCursor(); + if (cursor.isNull()) + return; + QTextCharFormat format; + format.setFontFamily(family); + mergeFormatOnWordOrSelection(format); + emit fontFamilyChanged(); } -void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +QColor DocumentHandler::textColor() const { QTextCursor cursor = textCursor(); - if (!cursor.hasSelection()) - cursor.select(QTextCursor::WordUnderCursor); - cursor.mergeCharFormat(format); + if (cursor.isNull()) + return QColor(Qt::black); + QTextCharFormat format = cursor.charFormat(); + return format.foreground().color(); } -void DocumentHandler::setSelectionStart(int position) +void DocumentHandler::setTextColor(const QColor &color) { - if (position == m_selectionStart) + QTextCursor cursor = textCursor(); + if (cursor.isNull()) return; - - m_selectionStart = position; - emit selectionStartChanged(); + QTextCharFormat format; + format.setForeground(QBrush(color)); + mergeFormatOnWordOrSelection(format); + emit textColorChanged(); } -void DocumentHandler::setSelectionEnd(int position) +Qt::Alignment DocumentHandler::alignment() const { - if (position == m_selectionEnd) - return; - - m_selectionEnd = position; - emit selectionEndChanged(); + QTextCursor cursor = textCursor(); + if (cursor.isNull()) + return Qt::AlignLeft; + return textCursor().blockFormat().alignment(); } void DocumentHandler::setAlignment(Qt::Alignment alignment) @@ -240,14 +189,6 @@ void DocumentHandler::setAlignment(Qt::Alignment alignment) emit alignmentChanged(); } -Qt::Alignment DocumentHandler::alignment() const -{ - QTextCursor cursor = textCursor(); - if (cursor.isNull()) - return Qt::AlignLeft; - return textCursor().blockFormat().alignment(); -} - bool DocumentHandler::bold() const { QTextCursor cursor = textCursor(); @@ -256,28 +197,20 @@ bool DocumentHandler::bold() const return textCursor().charFormat().fontWeight() == QFont::Bold; } -bool DocumentHandler::italic() const +void DocumentHandler::setBold(bool bold) { - QTextCursor cursor = textCursor(); - if (cursor.isNull()) - return false; - return textCursor().charFormat().fontItalic(); + QTextCharFormat format; + format.setFontWeight(bold ? QFont::Bold : QFont::Normal); + mergeFormatOnWordOrSelection(format); + emit boldChanged(); } -bool DocumentHandler::underline() const +bool DocumentHandler::italic() const { QTextCursor cursor = textCursor(); if (cursor.isNull()) return false; - return textCursor().charFormat().fontUnderline(); -} - -void DocumentHandler::setBold(bool bold) -{ - QTextCharFormat format; - format.setFontWeight(bold ? QFont::Bold : QFont::Normal); - mergeFormatOnWordOrSelection(format); - emit boldChanged(); + return textCursor().charFormat().fontItalic(); } void DocumentHandler::setItalic(bool italic) @@ -288,6 +221,14 @@ void DocumentHandler::setItalic(bool italic) emit italicChanged(); } +bool DocumentHandler::underline() const +{ + QTextCursor cursor = textCursor(); + if (cursor.isNull()) + return false; + return textCursor().charFormat().fontUnderline(); +} + void DocumentHandler::setUnderline(bool underline) { QTextCharFormat format; @@ -305,9 +246,9 @@ int DocumentHandler::fontSize() const return format.font().pointSize(); } -void DocumentHandler::setFontSize(int fontSize) +void DocumentHandler::setFontSize(int size) { - if (fontSize <= 0) + if (size <= 0) return; QTextCursor cursor = textCursor(); @@ -317,51 +258,124 @@ void DocumentHandler::setFontSize(int fontSize) if (!cursor.hasSelection()) cursor.select(QTextCursor::WordUnderCursor); - if (cursor.charFormat().property(QTextFormat::FontPointSize).toInt() == fontSize) + if (cursor.charFormat().property(QTextFormat::FontPointSize).toInt() == size) return; QTextCharFormat format; - format.setFontPointSize(fontSize); + format.setFontPointSize(size); mergeFormatOnWordOrSelection(format); emit fontSizeChanged(); } -QColor DocumentHandler::textColor() const +QString DocumentHandler::text() const { - QTextCursor cursor = textCursor(); - if (cursor.isNull()) - return QColor(Qt::black); - QTextCharFormat format = cursor.charFormat(); - return format.foreground().color(); + return m_text; } -void DocumentHandler::setTextColor(const QColor &color) +void DocumentHandler::setText(const QString &text) { - QTextCursor cursor = textCursor(); - if (cursor.isNull()) + if (text == m_text) return; - QTextCharFormat format; - format.setForeground(QBrush(color)); - mergeFormatOnWordOrSelection(format); - emit textColorChanged(); + + m_text = text; + emit textChanged(); } -QString DocumentHandler::fontFamily() const +QString DocumentHandler::documentTitle() const { - QTextCursor cursor = textCursor(); - if (cursor.isNull()) - return QString(); - QTextCharFormat format = cursor.charFormat(); - return format.font().family(); + return m_documentTitle; } -void DocumentHandler::setFontFamily(const QString &fontFamily) +void DocumentHandler::setDocumentTitle(const QString &title) { - QTextCursor cursor = textCursor(); - if (cursor.isNull()) + if (title == m_documentTitle) return; - QTextCharFormat format; - format.setFontFamily(fontFamily); - mergeFormatOnWordOrSelection(format); + + m_documentTitle = title; + emit documentTitleChanged(); +} + +QUrl DocumentHandler::fileUrl() const +{ + return m_fileUrl; +} + +void DocumentHandler::setFileUrl(const QUrl &fileUrl) +{ + if (fileUrl == m_fileUrl) + return; + + m_fileUrl = fileUrl; + QString fileName = QQmlFile::urlToLocalFileOrQrc(fileUrl); + if (QFile::exists(fileName)) { + QFile file(fileName); + if (file.open(QFile::ReadOnly)) { + QByteArray data = file.readAll(); + QTextCodec *codec = QTextCodec::codecForHtml(data); + setText(codec->toUnicode(data)); + if (m_doc) + m_doc->setModified(false); + if (fileName.isEmpty()) + m_documentTitle = QStringLiteral("untitled.txt"); + else + m_documentTitle = QFileInfo(fileName).fileName(); + + emit textChanged(); + emit documentTitleChanged(); + + reset(); + } + } + emit fileUrlChanged(); +} + +void DocumentHandler::saveAs(const QUrl &fileUrl) +{ + if (!m_doc) + return; + + const QString filePath = fileUrl.toLocalFile(); + const bool isHtml = QFileInfo(filePath).suffix().contains(QLatin1String("htm")); + QFile file(filePath); + if (!file.open(QFile::WriteOnly | QFile::Truncate | (isHtml ? QFile::NotOpen : QFile::Text))) { + emit error(tr("Cannot save: ") + file.errorString()); + return; + } + file.write((isHtml ? m_doc->toHtml() : m_doc->toPlainText()).toUtf8()); + file.close(); + setFileUrl(fileUrl); +} + +void DocumentHandler::reset() +{ emit fontFamilyChanged(); + emit alignmentChanged(); + emit boldChanged(); + emit italicChanged(); + emit underlineChanged(); + emit fontSizeChanged(); + emit textColorChanged(); +} + +QTextCursor DocumentHandler::textCursor() const +{ + if (!m_doc) + return QTextCursor(); + + QTextCursor cursor = QTextCursor(m_doc); + if (m_selectionStart != m_selectionEnd) { + cursor.setPosition(m_selectionStart); + cursor.setPosition(m_selectionEnd, QTextCursor::KeepAnchor); + } else { + cursor.setPosition(m_cursorPosition); + } + return cursor; +} + +void DocumentHandler::mergeFormatOnWordOrSelection(const QTextCharFormat &format) +{ + QTextCursor cursor = textCursor(); + if (!cursor.hasSelection()) + cursor.select(QTextCursor::WordUnderCursor); + cursor.mergeCharFormat(format); } diff --git a/examples/quickcontrols2/texteditor/documenthandler.h b/examples/quickcontrols2/texteditor/documenthandler.h index 9feb338e..81a3995e 100644 --- a/examples/quickcontrols2/texteditor/documenthandler.h +++ b/examples/quickcontrols2/texteditor/documenthandler.h @@ -80,9 +80,9 @@ class DocumentHandler : public QObject Q_PROPERTY(int fontSize READ fontSize WRITE setFontSize NOTIFY fontSizeChanged) - Q_PROPERTY(QUrl fileUrl READ fileUrl WRITE setFileUrl NOTIFY fileUrlChanged) Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) Q_PROPERTY(QString documentTitle READ documentTitle WRITE setDocumentTitle NOTIFY documentTitleChanged) + Q_PROPERTY(QUrl fileUrl READ fileUrl WRITE setFileUrl NOTIFY fileUrlChanged) public: explicit DocumentHandler(QObject *parent = nullptr); @@ -90,44 +90,47 @@ public: QQuickTextDocument *document() const; void setDocument(QQuickTextDocument *quickDoc); + int cursorPosition() const; void setCursorPosition(int position); + + int selectionStart() const; void setSelectionStart(int position); - void setSelectionEnd(int position); - int cursorPosition() const { return m_cursorPosition; } - int selectionStart() const { return m_selectionStart; } - int selectionEnd() const { return m_selectionEnd; } + int selectionEnd() const; + void setSelectionEnd(int position); QString fontFamily() const; + void setFontFamily(const QString &family); QColor textColor() const; + void setTextColor(const QColor &color); Qt::Alignment alignment() const; void setAlignment(Qt::Alignment alignment); bool bold() const; + void setBold(bool bold); + bool italic() const; + void setItalic(bool italic); + bool underline() const; + void setUnderline(bool underline); + int fontSize() const; + void setFontSize(int size); - QUrl fileUrl() const; QString text() const; + void setText(const QString &text); QString documentTitle() const; + void setDocumentTitle(const QString &title); -public Q_SLOTS: - void setBold(bool bold); - void setItalic(bool italic); - void setUnderline(bool underline); - void setFontSize(int fontSize); - void setTextColor(const QColor &color); - void setFontFamily(const QString &fontFamily); - + QUrl fileUrl() const; void setFileUrl(const QUrl &fileUrl); - void setText(const QString &text); - void saveAs(const QUrl &fileUrl); - void setDocumentTitle(const QString &documentTitle); +public Q_SLOTS: + void saveAs(const QUrl &fileUrl); Q_SIGNALS: void documentChanged(); @@ -145,10 +148,10 @@ Q_SIGNALS: void fontSizeChanged(); - void fileUrlChanged(); - void textChanged(); void documentTitleChanged(); + void fileUrlChanged(); + void error(const QString &message); private: @@ -165,9 +168,9 @@ private: QFont m_font; int m_fontSize; - QUrl m_fileUrl; QString m_text; QString m_documentTitle; + QUrl m_fileUrl; }; #endif -- cgit v1.2.3