Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsbookmarkmanager.h 3 : : ------------------ 4 : : Date : Septemeber 2019 5 : : Copyright : (C) 2019 Nyall Dawson 6 : : Email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSBOOKMARKMANAGER_H 17 : : #define QGSBOOKMARKMANAGER_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include "qgsreferencedgeometry.h" 22 : : #include <QObject> 23 : : 24 : : class QgsProject; 25 : : 26 : : /** 27 : : * \ingroup core 28 : : * \class QgsBookmark 29 : : * 30 : : * \brief Represents a spatial bookmark, with a name, CRS and extent. 31 : : * 32 : : * QgsBookmark objects are typically used alongside the QgsBookmarkManager class, 33 : : * which handles storage of a set of bookmarks. 34 : : * 35 : : * \since QGIS 3.10 36 : : */ 37 : 0 : class CORE_EXPORT QgsBookmark 38 : : { 39 : : 40 : : public: 41 : : 42 : : /** 43 : : * Default constructor, creates an empty bookmark. 44 : : */ 45 : 0 : QgsBookmark() = default; 46 : : 47 : : /** 48 : : * Returns the bookmark's unique ID. 49 : : * \see setId() 50 : : */ 51 : : QString id() const; 52 : : 53 : : /** 54 : : * Sets the bookmark's unique \a id. 55 : : * \see id() 56 : : */ 57 : : void setId( const QString &id ); 58 : : 59 : : /** 60 : : * Returns the bookmark's name, which is a user-visible string identifying 61 : : * the bookmark. 62 : : * \see setName() 63 : : */ 64 : : QString name() const; 65 : : 66 : : /** 67 : : * Sets the bookmark's \a name, which is a user-visible string identifying 68 : : * the bookmark. 69 : : * \see name() 70 : : */ 71 : : void setName( const QString &name ); 72 : : 73 : : /** 74 : : * Returns the bookmark's group, which is a user-visible string identifying 75 : : * the bookmark's category. 76 : : * \see setGroup() 77 : : */ 78 : : QString group() const; 79 : : 80 : : /** 81 : : * Sets the bookmark's \a group, which is a user-visible string identifying 82 : : * the bookmark's category. 83 : : * \see group() 84 : : */ 85 : : void setGroup( const QString &group ); 86 : : 87 : : /** 88 : : * Returns the bookmark's spatial extent. 89 : : * \see setExtent() 90 : : */ 91 : : QgsReferencedRectangle extent() const; 92 : : 93 : : /** 94 : : * Sets the bookmark's spatial \a extent. 95 : : * \see extent() 96 : : */ 97 : : void setExtent( const QgsReferencedRectangle &extent ); 98 : : 99 : : /** 100 : : * Creates a bookmark using the properties from a DOM \a element. 101 : : * \see writeXml() 102 : : */ 103 : : static QgsBookmark fromXml( const QDomElement &element, const QDomDocument &doc ); 104 : : 105 : : /** 106 : : * Returns a DOM element representing the bookmark's properties. 107 : : * \see fromXml() 108 : : */ 109 : : QDomElement writeXml( QDomDocument &doc ) const; 110 : : 111 : : #ifdef SIP_RUN 112 : : SIP_PYOBJECT __repr__(); 113 : : % MethodCode 114 : : QString str = QStringLiteral( "<QgsBookmark: '%1' (%2 - %3)>" ).arg( sipCpp->name(), sipCpp->extent().asWktCoordinates(), sipCpp->extent().crs().authid() ); 115 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() ); 116 : : % End 117 : : #endif 118 : : 119 : : bool operator==( const QgsBookmark &other ); 120 : : bool operator!=( const QgsBookmark &other ); 121 : : 122 : : private: 123 : : 124 : : QString mId; 125 : : QString mName; 126 : : QString mGroup; 127 : : QgsReferencedRectangle mExtent; 128 : : 129 : : }; 130 : : 131 : : /** 132 : : * \ingroup core 133 : : * \class QgsBookmarkManager 134 : : * 135 : : * \brief Manages storage of a set of bookmarks. 136 : : * 137 : : * QgsBookmarkManager handles the storage, serializing and deserializing 138 : : * of geographic bookmarks. Usually this class is not constructed directly, but 139 : : * rather accessed through a QgsProject via QgsProject::bookmarkManager(), or via 140 : : * the application-wide bookmark store at QgsApplication::bookmarkManager(). 141 : : * 142 : : * \since QGIS 3.10 143 : : */ 144 : : class CORE_EXPORT QgsBookmarkManager : public QObject 145 : : { 146 : : Q_OBJECT 147 : : 148 : : public: 149 : : 150 : : /** 151 : : * Returns a newly created QgsBookmarkManager using a project-based bookmark store, linked to the specified \a project. 152 : : * 153 : : * The returned object is parented to the \a project. 154 : : */ 155 : : static QgsBookmarkManager *createProjectBasedManager( QgsProject *project ); 156 : : 157 : : /** 158 : : * Constructor for QgsBookmarkManager, with the specified \a parent object. 159 : : * 160 : : * This constructor creates a bookmark manager which stores bookmarks in an XML file. A call to 161 : : * initialize() is required to initialize the manager and set the corresponding file path. 162 : : */ 163 : : explicit QgsBookmarkManager( QObject *parent SIP_TRANSFERTHIS = nullptr ); 164 : : 165 : : ~QgsBookmarkManager() override; 166 : : 167 : : /** 168 : : * Initializes the bookmark manager. 169 : : */ 170 : : void initialize( const QString &filePath ); 171 : : 172 : : /** 173 : : * Adds a \a bookmark to the manager. 174 : : * 175 : : * \param bookmark the bookmark to add 176 : : * \param ok if specified, will be set to TRUE if the bookmark was successfully added, or 177 : : * FALSE if the bookmark could not be added (eg as a result of a duplicate bookmark ID). 178 : : * 179 : : * \returns The bookmark's ID (or newly generated ID, if no ID was originally set and one was automatically generated) 180 : : * 181 : : * \see removeBookmark() 182 : : * \see bookmarkAdded() 183 : : */ 184 : : QString addBookmark( const QgsBookmark &bookmark, bool *ok SIP_OUT = nullptr ); 185 : : 186 : : /** 187 : : * Removes the bookmark with matching \a id from the manager. 188 : : * 189 : : * Returns TRUE if the removal was successful, or FALSE if the removal failed (eg as a result 190 : : * of removing a bookmark which is not contained in the manager). 191 : : * 192 : : * \see addBookmark() 193 : : * \see bookmarkRemoved() 194 : : * \see bookmarkAboutToBeRemoved() 195 : : * \see clear() 196 : : */ 197 : : bool removeBookmark( const QString &id ); 198 : : 199 : : /** 200 : : * Updates the definition of a \a bookmark in the manager. 201 : : * 202 : : * Replaces the current definition of the bookmark with matching ID in the manager with 203 : : * a new definition (new bookmark name or extent). 204 : : * 205 : : * Returns TRUE if the bookmark was successfully updated, or 206 : : * FALSE if the bookmark could not be updated (eg bookmark is not stored in the manager). 207 : : * 208 : : * \see bookmarkChanged() 209 : : */ 210 : : bool updateBookmark( const QgsBookmark &bookmark ); 211 : : 212 : : /** 213 : : * Removes and deletes all bookmarks from the manager. 214 : : * \see removeBookmark() 215 : : */ 216 : : void clear(); 217 : : 218 : : /** 219 : : * Returns a list of all bookmark groups contained in the manager. 220 : : */ 221 : : QStringList groups() const; 222 : : 223 : : /** 224 : : * Renames an existing group from \a oldName to \a newName. This updates 225 : : * all existing bookmarks to reflect the new name. 226 : : */ 227 : : void renameGroup( const QString &oldName, const QString &newName ); 228 : : 229 : : /** 230 : : * Returns a list of all bookmarks contained in the manager. 231 : : */ 232 : : QList< QgsBookmark > bookmarks() const; 233 : : 234 : : /** 235 : : * Returns the bookmark with a matching \a id, or an empty bookmark if no matching bookmarks 236 : : * were found. 237 : : */ 238 : : QgsBookmark bookmarkById( const QString &id ) const; 239 : : 240 : : /** 241 : : * Returns a list of bookmark with a matching \a group, or an empty list if no matching bookmarks 242 : : * were found. 243 : : */ 244 : : QList< QgsBookmark > bookmarksByGroup( const QString &group ); 245 : : 246 : : /** 247 : : * Reads the manager's state from a DOM element, restoring all bookmarks 248 : : * present in the XML document. 249 : : * \see writeXml() 250 : : */ 251 : : bool readXml( const QDomElement &element, const QDomDocument &doc ); 252 : : 253 : : /** 254 : : * Returns a DOM element representing the state of the manager. 255 : : * \see readXml() 256 : : */ 257 : : QDomElement writeXml( QDomDocument &doc ) const; 258 : : 259 : : /** 260 : : * Moves the bookmark with matching \a id from this manager to a \a destination manager. 261 : : * 262 : : * Returns TRUE if the bookmark was successfully moved. 263 : : */ 264 : : bool moveBookmark( const QString &id, QgsBookmarkManager *destination ); 265 : : 266 : : /** 267 : : * Exports all bookmarks from a list of \a managers to an xml file at the specified \a path. 268 : : * 269 : : * If \a group is set then only bookmarks from the matching group will be exported. 270 : : * 271 : : * Returns TRUE if the export was successful. 272 : : * 273 : : * \see importFromFile() 274 : : */ 275 : : static bool exportToFile( const QString &path, const QList<const QgsBookmarkManager *> &managers, const QString &group = QString() ); 276 : : 277 : : 278 : : /** 279 : : * Imports the bookmarks from an xml file at the specified \a path. 280 : : * 281 : : * Returns TRUE if the import was successful. 282 : : * 283 : : * \see exportToFile() 284 : : */ 285 : : bool importFromFile( const QString &path ); 286 : : 287 : : signals: 288 : : 289 : : //! Emitted when a bookmark is about to be added to the manager 290 : : void bookmarkAboutToBeAdded( const QString &id ); 291 : : 292 : : //! Emitted when a bookmark has been added to the manager 293 : : void bookmarkAdded( const QString &id ); 294 : : 295 : : //! Emitted when a bookmark was removed from the manager 296 : : void bookmarkRemoved( const QString &id ); 297 : : 298 : : //! Emitted when a bookmark is about to be removed from the manager 299 : : void bookmarkAboutToBeRemoved( const QString &id ); 300 : : 301 : : //! Emitted when a bookmark is changed 302 : : void bookmarkChanged( const QString &id ); 303 : : 304 : : private: 305 : : 306 : : QgsProject *mProject = nullptr; 307 : : QString mFilePath; 308 : : QList< QgsBookmark > mBookmarks; 309 : : QStringList mGroups; 310 : : 311 : : void store(); 312 : : bool mInitialized = false; 313 : : 314 : : }; 315 : : 316 : : #endif // QGSBOOKMARKMANAGER_H