From b2aec252353fa0c87ff23d3e5d1f55e4ae835b21 Mon Sep 17 00:00:00 2001 From: Kevin Krammer Date: Tue, 6 Nov 2012 09:02:01 +0100 Subject: [PATCH] Add text document as property --- lib/declarativewidgetsdocument.cpp | 1 + lib/objectadaptors.cpp | 23 +++++++++++++++++++++++ lib/objectadaptors_p.h | 7 +++++++ 3 files changed, 31 insertions(+), 0 deletions(-) diff --git a/lib/declarativewidgetsdocument.cpp b/lib/declarativewidgetsdocument.cpp index e861a86..793f77a 100644 --- a/lib/declarativewidgetsdocument.cpp +++ b/lib/declarativewidgetsdocument.cpp @@ -152,6 +152,7 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject qmlRegisterType("QtGui", 1, 0, "MenuBar"); qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "MessageBox"); + qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "PlainTextEdit"); qmlRegisterType("QtGui", 1, 0, "ProgressBar"); qmlRegisterType("QtGui", 1, 0, "PushButton"); diff --git a/lib/objectadaptors.cpp b/lib/objectadaptors.cpp index b654864..b7f10f3 100644 --- a/lib/objectadaptors.cpp +++ b/lib/objectadaptors.cpp @@ -228,6 +228,29 @@ TextEdit::TextEdit(QWidget *parent) connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); } +void TextEdit::setTextDocument(QTextDocument *document) +{ + if (document == 0) + return; + + if (this->document() == document) + return; + + if (this->document()) { + disconnect(this->document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); + } + + const bool oldModified = modified(); + + setDocument(document); + connect(document, SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); + + emit documentChanged(); + + if (oldModified != modified()) + emit modifiedChanged(); +} + bool TextEdit::modified() const { return document()->isModified(); diff --git a/lib/objectadaptors_p.h b/lib/objectadaptors_p.h index 13a65b5..96eb692 100644 --- a/lib/objectadaptors_p.h +++ b/lib/objectadaptors_p.h @@ -183,13 +183,20 @@ class TextEdit : public QTextEdit { Q_OBJECT + // TODO + // ideally QTextDocument's property declaration for modified would include the modificationChanged signal + // as its NOTIFY, this and setTextDocument could then be removed Q_PROPERTY(bool modified READ modified NOTIFY modifiedChanged) + Q_PROPERTY(QTextDocument* document READ document WRITE setTextDocument NOTIFY documentChanged) public: TextEdit(QWidget *parent = 0); + void setTextDocument(QTextDocument *document); + Q_SIGNALS: void modifiedChanged(); + void documentChanged(); private: bool modified() const; -- 1.7.2.5