diff --git a/sources/titleblock/templatelocation.cpp b/sources/titleblock/templatelocation.cpp index cfd4657db..84cbf1832 100644 --- a/sources/titleblock/templatelocation.cpp +++ b/sources/titleblock/templatelocation.cpp @@ -144,3 +144,12 @@ TitleBlockTemplate *TitleBlockTemplateLocation::getTemplate() const { if (!collection_ || name_.isEmpty()) return(0); return(collection_ -> getTemplate(name_)); } + +/** + This is a convenience method equivalent to + parentCollection() -> isReadOnly(name()) +*/ +bool TitleBlockTemplateLocation::isReadOnly() const { + if (!collection_) return(false); + return(collection_ -> isReadOnly(name_)); +} diff --git a/sources/titleblock/templatelocation.h b/sources/titleblock/templatelocation.h index 58bd43227..340044f88 100644 --- a/sources/titleblock/templatelocation.h +++ b/sources/titleblock/templatelocation.h @@ -49,6 +49,7 @@ class TitleBlockTemplateLocation { QString protocol() const; QDomElement getTemplateXmlDescription() const; TitleBlockTemplate *getTemplate() const; + bool isReadOnly() const; // attributes private: diff --git a/sources/titleblock/templatescollection.cpp b/sources/titleblock/templatescollection.cpp index ed4dffcf9..b6db574eb 100644 --- a/sources/titleblock/templatescollection.cpp +++ b/sources/titleblock/templatescollection.cpp @@ -257,9 +257,12 @@ TitleBlockTemplateLocation TitleBlockTemplatesProjectCollection::location(const } /** - @return true if this collection is read only + @param template_name Either an empty QString to know whether the collection + itself is read only, or a specific template name. + @return true if the specified template is read only, false otherwise */ -bool TitleBlockTemplatesProjectCollection::isReadOnly() const { +bool TitleBlockTemplatesProjectCollection::isReadOnly(const QString &template_name) const { + Q_UNUSED(template_name) if (project_) { return(project_ -> isReadOnly()); } @@ -431,11 +434,18 @@ TitleBlockTemplateLocation TitleBlockTemplatesFilesCollection::location(const QS } /** - @return true if this collection is read only, false otherwise + @param template_name Either an empty QString to know whether the collection + itself is read only, or a specific template name. + @return true if the specified template is read only, false otherwise */ -bool TitleBlockTemplatesFilesCollection::isReadOnly() const { - QFileInfo info(dir_.canonicalPath()); - return(!info.isWritable()); +bool TitleBlockTemplatesFilesCollection::isReadOnly(const QString &template_name) const { + if (template_name.isEmpty()) { + QFileInfo info(dir_.canonicalPath()); + return(!info.isWritable()); + } else { + QFileInfo info(dir_.absoluteFilePath(toFileName(template_name))); + return(!info.isWritable()); + } } /** diff --git a/sources/titleblock/templatescollection.h b/sources/titleblock/templatescollection.h index 826bacb8c..39d6d1632 100644 --- a/sources/titleblock/templatescollection.h +++ b/sources/titleblock/templatescollection.h @@ -48,7 +48,7 @@ class TitleBlockTemplatesCollection : public QObject { virtual bool setTemplateXmlDescription(const QString &, const QDomElement &) = 0; virtual void removeTemplate(const QString &) = 0; virtual TitleBlockTemplateLocation location(const QString & = QString()) = 0; - virtual bool isReadOnly() const = 0; + virtual bool isReadOnly(const QString & = QString()) const = 0; virtual QString title() const; virtual void setTitle(const QString &); virtual QString protocol() const; @@ -94,7 +94,7 @@ class TitleBlockTemplatesProjectCollection : public TitleBlockTemplatesCollectio virtual bool setTemplateXmlDescription(const QString &, const QDomElement &); virtual void removeTemplate(const QString &); virtual TitleBlockTemplateLocation location(const QString & = QString()); - virtual bool isReadOnly() const; + virtual bool isReadOnly(const QString & = QString()) const; virtual void fromXml(const QDomElement &); // attributes @@ -130,7 +130,7 @@ class TitleBlockTemplatesFilesCollection : public TitleBlockTemplatesCollection virtual bool setTemplateXmlDescription(const QString &, const QDomElement &); virtual void removeTemplate(const QString &); virtual TitleBlockTemplateLocation location(const QString & = QString()); - virtual bool isReadOnly() const; + virtual bool isReadOnly(const QString & = QString()) const; static QString toTemplateName(const QString &); static QString toFileName(const QString &);