42  b.
setId( element.attribute( QStringLiteral( 
"id" ) ) );
 
   43  b.
setName( element.attribute( QStringLiteral( 
"name" ) ) );
 
   44  b.
setGroup( element.attribute( QStringLiteral( 
"group" ) ) );
 
   46  b.
setRotation( element.attribute( QStringLiteral( 
"rotation" ) ).toDouble() );
 
 
   55  QDomElement bookmarkElem = doc.createElement( QStringLiteral( 
"Bookmark" ) );
 
   56  bookmarkElem.setAttribute( QStringLiteral( 
"id" ), mId );
 
   57  bookmarkElem.setAttribute( QStringLiteral( 
"name" ), mName );
 
   58  bookmarkElem.setAttribute( QStringLiteral( 
"group" ), mGroup );
 
   59  bookmarkElem.setAttribute( QStringLiteral( 
"extent" ), mExtent.
asWktPolygon() );
 
   60  bookmarkElem.setAttribute( QStringLiteral( 
"rotation" ), mRotation );
 
 
   67  return mId == other.mId
 
   68         && mName == other.mName
 
   69         && mExtent == other.mExtent
 
   70         && mGroup == other.mGroup
 
 
   76  return !( *
this == other );
 
 
  127  res->mProject = project;
 
 
  148  if ( bookmark.
id().isEmpty() )
 
  149    bookmark.
setId( QUuid::createUuid().toString() );
 
  153    for ( 
const QgsBookmark &b : std::as_const( mBookmarks ) )
 
  155      if ( b.
id() == bookmark.
id() )
 
  166  mBookmarks << bookmark;
 
  167  if ( !mGroups.contains( bookmark.
group() ) )
 
  168    mGroups << bookmark.
group();
 
  175  return bookmark.
id();
 
 
  186  for ( 
const QgsBookmark &b : std::as_const( mBookmarks ) )
 
  201  mBookmarks.removeAt( pos );
 
  203    mGroups.removeOne( group );
 
 
  217  for ( 
const QgsBookmark &b : std::as_const( mBookmarks ) )
 
  219    if ( b.id() == bookmark.
id() )
 
  221      if ( mBookmarks[i].group() != bookmark.
group() )
 
  224          mGroups.removeOne( mBookmarks[i].group() );
 
  225        if ( !mGroups.contains( bookmark.
group() ) )
 
  226          mGroups << bookmark.
group();
 
  228      mBookmarks[i] = bookmark;
 
 
  244  const QList< QgsBookmark > 
bookmarks = mBookmarks;
 
 
  258  for ( 
int i = 0; i < mBookmarks.count(); ++i )
 
  260    if ( mBookmarks.at( i ).group() == oldName )
 
  262      mBookmarks[ i ].setGroup( newName );
 
 
  288    if ( b.group() == group )
 
 
  298  QDomElement bookmarksElem = element;
 
  299  if ( element.tagName() != QLatin1String( 
"Bookmarks" ) )
 
  301    bookmarksElem = element.firstChildElement( QStringLiteral( 
"Bookmarks" ) );
 
  304  if ( mProject && bookmarksElem.isNull() )
 
  307    const int count = mProject->
readNumEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/count" ) );
 
  308    for ( 
int i = 0; i < count; ++i )
 
  310      const double minX = mProject->
readDoubleEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/MinX" ).arg( i ) );
 
  311      const double minY = mProject->
readDoubleEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/MinY" ).arg( i ) );
 
  312      const double maxX = mProject->
readDoubleEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/MaxX" ).arg( i ) );
 
  313      const double maxY = mProject->
readDoubleEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/MaxY" ).arg( i ) );
 
  314      const long srid = mProject->
readNumEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/SRID" ).arg( i ) );
 
  316      b.
setId( QStringLiteral( 
"bookmark_%1" ).arg( i ) );
 
  317      b.
setName( mProject->
readEntry( QStringLiteral( 
"Bookmarks" ), QStringLiteral( 
"/Row-%1/Name" ).arg( i ) ) );
 
  322      result = added && result;
 
  328  QDomNodeList bookmarkNodes = element.elementsByTagName( QStringLiteral( 
"Bookmark" ) );
 
  329  for ( 
int i = 0; i < bookmarkNodes.size(); ++i )
 
  334    result = added && result;
 
 
  342  QDomElement bookmarksElem = doc.createElement( QStringLiteral( 
"Bookmarks" ) );
 
  346    QDomElement bookmarkElem = b.writeXml( doc );
 
  347    bookmarksElem.appendChild( bookmarkElem );
 
  349  return bookmarksElem;
 
 
  355  if ( b.
id().isEmpty() )
 
 
  367  QDomDocument doc( QStringLiteral( 
"qgis_bookmarks" ) );
 
  368  QDomElement root = doc.createElement( QStringLiteral( 
"qgis_bookmarks" ) );
 
  369  doc.appendChild( root );
 
  371  QList<QString> headerList;
 
  373      << QStringLiteral( 
"project" )
 
  374      << QStringLiteral( 
"xmin" )
 
  375      << QStringLiteral( 
"ymin" )
 
  376      << QStringLiteral( 
"xmax" )
 
  377      << QStringLiteral( 
"ymax" )
 
  378      << QStringLiteral( 
"rotation" )
 
  379      << QStringLiteral( 
"sr_id" );
 
  383    const QList< QgsBookmark > 
bookmarks = manager->bookmarks();
 
  386      if ( !group.isEmpty() && b.group() != group )
 
  389      QDomElement bookmark = doc.createElement( QStringLiteral( 
"bookmark" ) );
 
  390      root.appendChild( bookmark );
 
  392      QDomElement 
id = doc.createElement( QStringLiteral( 
"id" ) );
 
  393      id.appendChild( doc.createTextNode( b.id() ) );
 
  394      bookmark.appendChild( 
id );
 
  396      QDomElement name = doc.createElement( QStringLiteral( 
"name" ) );
 
  397      name.appendChild( doc.createTextNode( b.name() ) );
 
  398      bookmark.appendChild( name );
 
  400      QDomElement group = doc.createElement( QStringLiteral( 
"project" ) );
 
  401      group.appendChild( doc.createTextNode( b.group() ) );
 
  402      bookmark.appendChild( group );
 
  404      QDomElement xMin = doc.createElement( QStringLiteral( 
"xmin" ) );
 
  405      xMin.appendChild( doc.createTextNode( 
qgsDoubleToString( b.extent().xMinimum() ) ) );
 
  406      bookmark.appendChild( xMin );
 
  407      QDomElement yMin = doc.createElement( QStringLiteral( 
"ymin" ) );
 
  408      yMin.appendChild( doc.createTextNode( 
qgsDoubleToString( b.extent().yMinimum() ) ) );
 
  409      bookmark.appendChild( yMin );
 
  410      QDomElement xMax = doc.createElement( QStringLiteral( 
"xmax" ) );
 
  411      xMax.appendChild( doc.createTextNode( 
qgsDoubleToString( b.extent().xMaximum() ) ) );
 
  412      bookmark.appendChild( xMax );
 
  413      QDomElement yMax = doc.createElement( QStringLiteral( 
"ymax" ) );
 
  414      yMax.appendChild( doc.createTextNode( 
qgsDoubleToString( b.extent().yMaximum() ) ) );
 
  415      bookmark.appendChild( yMax );
 
  417      QDomElement rotation = doc.createElement( QStringLiteral( 
"rotation" ) );
 
  419      bookmark.appendChild( rotation );
 
  421      QDomElement 
crs = doc.createElement( QStringLiteral( 
"sr_id" ) );
 
  422      crs.appendChild( doc.createTextNode( QString::number( b.extent().crs().srsid() ) ) );
 
  423      bookmark.appendChild( 
crs );
 
  428  if ( !f.open( QFile::WriteOnly | QIODevice::Truncate ) )
 
  434  QTextStream out( &f );
 
  435#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 
  436  out.setCodec( 
"UTF-8" );
 
 
  446  if ( path.isEmpty() )
 
  452  if ( !f.open( QIODevice::ReadOnly | QIODevice::Text ) )
 
  458  if ( !doc.setContent( &f ) )
 
  464  QDomElement docElem = doc.documentElement();
 
  465  QDomNodeList nodeList = docElem.elementsByTagName( QStringLiteral( 
"bookmark" ) );
 
  468  for ( 
int i = 0; i < nodeList.count(); i++ )
 
  470    QDomNode bookmark = nodeList.at( i );
 
  471    QDomElement name = bookmark.firstChildElement( QStringLiteral( 
"name" ) );
 
  472    QDomElement prjname = bookmark.firstChildElement( QStringLiteral( 
"project" ) );
 
  473    QDomElement xmin = bookmark.firstChildElement( QStringLiteral( 
"xmin" ) );
 
  474    QDomElement ymin = bookmark.firstChildElement( QStringLiteral( 
"ymin" ) );
 
  475    QDomElement xmax = bookmark.firstChildElement( QStringLiteral( 
"xmax" ) );
 
  476    QDomElement ymax = bookmark.firstChildElement( QStringLiteral( 
"ymax" ) );
 
  477    QDomElement rotation = bookmark.firstChildElement( QStringLiteral( 
"rotation" ) );
 
  478    QDomElement srid = bookmark.firstChildElement( QStringLiteral( 
"sr_id" ) );
 
  487                                         ymin.text().toDouble(),
 
  488                                         xmax.text().toDouble(),
 
  489                                         ymax.text().toDouble() ), 
crs ) );
 
 
  498void QgsBookmarkManager::store()
 
  500  if ( !mFilePath.isEmpty() )
 
  502    QFile f( mFilePath );
 
  503    if ( !f.open( QFile::WriteOnly | QIODevice::Truncate ) )
 
  511    doc.appendChild( elem );
 
  513    QTextStream out( &f );
 
  514#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 
  515    out.setCodec( 
"UTF-8" );
 
  527  mFilePath = filePath;
 
  532  if ( !QFileInfo::exists( mFilePath ) )
 
  537    if ( result != SQLITE_OK )
 
  543    if ( result == SQLITE_OK )
 
  545      while ( preparedStatement.
step() == SQLITE_ROW )
 
  547        const QString name = preparedStatement.
columnAsText( 0 );
 
  565    QFile f( mFilePath );
 
  566    if ( !f.open( QIODevice::ReadOnly | QIODevice::Text ) )
 
  572    if ( !doc.setContent( &f ) )
 
  578    QDomElement elem = doc.documentElement();
 
 
static QString qgisUserDatabaseFilePath()
Returns the path to the user qgis.db file.
 
Manages storage of a set of bookmarks.
 
void renameGroup(const QString &oldName, const QString &newName)
Renames an existing group from oldName to newName.
 
bool removeBookmark(const QString &id)
Removes the bookmark with matching id from the manager.
 
QList< QgsBookmark > bookmarksByGroup(const QString &group)
Returns a list of bookmark with a matching group, or an empty list if no matching bookmarks were foun...
 
void initialize(const QString &filePath)
Initializes the bookmark manager.
 
void bookmarkAboutToBeRemoved(const QString &id)
Emitted when a bookmark is about to be removed from the manager.
 
~QgsBookmarkManager() override
 
void bookmarkChanged(const QString &id)
Emitted when a bookmark is changed.
 
static QgsBookmarkManager * createProjectBasedManager(QgsProject *project)
Returns a newly created QgsBookmarkManager using a project-based bookmark store, linked to the specif...
 
bool readXml(const QDomElement &element, const QDomDocument &doc)
Reads the manager's state from a DOM element, restoring all bookmarks present in the XML document.
 
void clear()
Removes and deletes all bookmarks from the manager.
 
void bookmarkAdded(const QString &id)
Emitted when a bookmark has been added to the manager.
 
bool updateBookmark(const QgsBookmark &bookmark)
Updates the definition of a bookmark in the manager.
 
void bookmarkAboutToBeAdded(const QString &id)
Emitted when a bookmark is about to be added to the manager.
 
bool moveBookmark(const QString &id, QgsBookmarkManager *destination)
Moves the bookmark with matching id from this manager to a destination manager.
 
static bool exportToFile(const QString &path, const QList< const QgsBookmarkManager * > &managers, const QString &group=QString())
Exports all bookmarks from a list of managers to an xml file at the specified path.
 
QgsBookmark bookmarkById(const QString &id) const
Returns the bookmark with a matching id, or an empty bookmark if no matching bookmarks were found.
 
QStringList groups() const
Returns a list of all bookmark groups contained in the manager.
 
QString addBookmark(const QgsBookmark &bookmark, bool *ok=nullptr)
Adds a bookmark to the manager.
 
QDomElement writeXml(QDomDocument &doc) const
Returns a DOM element representing the state of the manager.
 
QgsBookmarkManager(QObject *parent=nullptr)
Constructor for QgsBookmarkManager, with the specified parent object.
 
QList< QgsBookmark > bookmarks() const
Returns a list of all bookmarks contained in the manager.
 
void bookmarkRemoved(const QString &id)
Emitted when a bookmark was removed from the manager.
 
bool importFromFile(const QString &path)
Imports the bookmarks from an xml file at the specified path.
 
Represents a spatial bookmark, with a name, CRS and extent.
 
static QgsBookmark fromXml(const QDomElement &element, const QDomDocument &doc)
Creates a bookmark using the properties from a DOM element.
 
void setGroup(const QString &group)
Sets the bookmark's group, which is a user-visible string identifying the bookmark's category.
 
bool operator!=(const QgsBookmark &other) const
 
void setRotation(double rotation)
Sets the bookmark's spatial map rotation.
 
QString id() const
Returns the bookmark's unique ID.
 
QgsReferencedRectangle extent() const
Returns the bookmark's spatial extent.
 
void setExtent(const QgsReferencedRectangle &extent)
Sets the bookmark's spatial extent.
 
double rotation() const
Returns the bookmark's map rotation.
 
void setId(const QString &id)
Sets the bookmark's unique id.
 
QDomElement writeXml(QDomDocument &doc) const
Returns a DOM element representing the bookmark's properties.
 
bool operator==(const QgsBookmark &other) const
 
QString group() const
Returns the bookmark's group, which is a user-visible string identifying the bookmark's category.
 
void setName(const QString &name)
Sets the bookmark's name, which is a user-visible string identifying the bookmark.
 
QString name() const
Returns the bookmark's name, which is a user-visible string identifying the bookmark.
 
This class represents a coordinate reference system (CRS).
 
bool readXml(const QDomNode &node)
Restores state from the given DOM node.
 
bool createFromSrsId(long srsId)
Sets this CRS by lookup of internal QGIS CRS ID in the CRS database.
 
bool writeXml(QDomNode &node, QDomDocument &doc) const
Stores state to the given Dom node in the given document.
 
static QgsCoordinateReferenceSystem fromSrsId(long srsId)
Creates a CRS from a specified QGIS SRS ID.
 
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
 
int readNumEntry(const QString &scope, const QString &key, int def=0, bool *ok=nullptr) const
Reads an integer from the specified scope and key.
 
QString readEntry(const QString &scope, const QString &key, const QString &def=QString(), bool *ok=nullptr) const
Reads a string from the specified scope and key.
 
double readDoubleEntry(const QString &scope, const QString &key, double def=0, bool *ok=nullptr) const
Reads a double from the specified scope and key.
 
void setDirty(bool b=true)
Flag the project as dirty (modified).
 
A rectangle specified with double values.
 
static QgsRectangle fromWkt(const QString &wkt)
Creates a new rectangle from a wkt string.
 
QString asWktPolygon() const
Returns a string representation of the rectangle as a WKT Polygon.
 
QgsCoordinateReferenceSystem crs() const
Returns the associated coordinate reference system, or an invalid CRS if no reference system is set.
 
A QgsRectangle with associated coordinate reference system.
 
Unique pointer for sqlite3 databases, which automatically closes the database when the pointer goes o...
 
sqlite3_statement_unique_ptr prepare(const QString &sql, int &resultCode) const
Prepares a sql statement, returning the result.
 
int open(const QString &path)
Opens the database at the specified file path.
 
Unique pointer for sqlite3 prepared statements, which automatically finalizes the statement when the ...
 
QString columnAsText(int column) const
Returns the column value from the current statement row as a string.
 
double columnAsDouble(int column) const
Gets column value from the current statement row as a double.
 
int step()
Steps to the next record in the statement, returning the sqlite3 result code.
 
qlonglong columnAsInt64(int column) const
Gets column value from the current statement row as a long long integer (64 bits).
 
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
 
const QgsCoordinateReferenceSystem & crs