diff --git a/components/Document.h b/components/Document.h --- a/components/Document.h +++ b/components/Document.h @@ -50,6 +50,7 @@ Q_PROPERTY(Calligra::Components::DocumentType::Type documentType READ documentType NOTIFY documentTypeChanged) Q_PROPERTY(Calligra::Components::DocumentStatus::Status status READ status NOTIFY statusChanged) Q_PROPERTY(QSize documentSize READ documentSize NOTIFY documentSizeChanged) + Q_PROPERTY(bool readOnly READ readOnly WRITE setReadOnly NOTIFY readOnlyChanged) /** * \property currentIndex @@ -95,6 +96,9 @@ QUrl source() const; void setSource(const QUrl& value); + bool readOnly() const; + void setReadOnly(bool readOnly); + DocumentType::Type documentType() const; DocumentStatus::Status status() const; QSize documentSize() const; @@ -143,6 +147,7 @@ void sourceChanged(); void statusChanged(); void documentChanged(); + void readOnlyChanged(); void documentSizeChanged(); void documentTypeChanged(); void textEditorChanged(); diff --git a/components/Document.cpp b/components/Document.cpp --- a/components/Document.cpp +++ b/components/Document.cpp @@ -43,7 +43,7 @@ class Document::Private { public: - Private(Document* qq) : q{qq}, impl{nullptr}, status{DocumentStatus::Unloaded} + Private(Document* qq) : q{qq}, impl{nullptr}, status{DocumentStatus::Unloaded}, readOnly{false} { } void updateImpl(); @@ -53,6 +53,7 @@ QUrl source; DocumentImpl* impl; DocumentStatus::Status status; + bool readOnly; }; Document::Document(QObject* parent) @@ -84,6 +85,7 @@ emit documentTypeChanged(); if(d->impl) { + d->impl->setReadOnly(d->readOnly); if(d->impl->load(d->source)) { d->status = DocumentStatus::Loaded; connect(d->impl->canvasController()->canvas()->shapeManager(), SIGNAL(selectionChanged()), SIGNAL(textEditorChanged())); @@ -99,6 +101,20 @@ } } +bool Document::readOnly() const +{ + return d->readOnly; +} + +void Document::setReadOnly(bool readOnly) +{ + if (d->readOnly != readOnly) { + d->readOnly = readOnly; + + emit readOnlyChanged(); + } +} + DocumentType::Type Document::documentType() const { if(d->impl) { diff --git a/components/impl/DocumentImpl.h b/components/impl/DocumentImpl.h --- a/components/impl/DocumentImpl.h +++ b/components/impl/DocumentImpl.h @@ -64,6 +64,8 @@ KoDocument* koDocument() const; virtual QObject* part() const = 0; + void setReadOnly(bool readOnly); + Q_SIGNALS: void documentSizeChanged(); void currentIndexChanged(); diff --git a/components/impl/DocumentImpl.cpp b/components/impl/DocumentImpl.cpp --- a/components/impl/DocumentImpl.cpp +++ b/components/impl/DocumentImpl.cpp @@ -43,6 +43,7 @@ , canvasController{nullptr} , zoomController{nullptr} , document{nullptr} + , readOnly{false} { } DocumentType::Type type; @@ -52,6 +53,7 @@ KoZoomController* zoomController; QSize documentSize; KoDocument* document; + bool readOnly; }; DocumentImpl::DocumentImpl(QObject* parent) @@ -120,12 +122,19 @@ d->finder = newFinder; } +void DocumentImpl::setReadOnly(bool readOnly) +{ + d->readOnly = readOnly; +} + void DocumentImpl::createAndSetCanvasController(KoCanvasBase* canvas) { auto controller = new ComponentsKoCanvasController{new KActionCollection{this}}; d->canvasController = controller; controller->setCanvas(canvas); - KoToolManager::instance()->addController(controller); + if (!d->readOnly) { + KoToolManager::instance()->addController(controller); + } connect(controller, &ComponentsKoCanvasController::documentSizeChanged, this, &DocumentImpl::setDocumentSize); }