Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsmaplayerlistutils.h 3 : : --------------------- 4 : : begin : December 2016 5 : : copyright : (C) 2016 by Martin Dobias 6 : : email : wonder dot sk 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 : : #ifndef QGSMAPLAYERLISTUTILS_H 16 : : #define QGSMAPLAYERLISTUTILS_H 17 : : 18 : : // 19 : : // W A R N I N G 20 : : // ------------- 21 : : // 22 : : // This file is not part of the QGIS API. It exists purely as an 23 : : // implementation detail. This header file may change from version to 24 : : // version without notice, or even be removed. 25 : : // 26 : : 27 : : #include <QPointer> 28 : : 29 : : #include "qgsmaplayer.h" 30 : : #include "qgsmaplayerref.h" 31 : : 32 : : /// @cond PRIVATE 33 : : 34 : 1 : inline QList<QgsMapLayer *> _qgis_listQPointerToRaw( const QgsWeakMapLayerPointerList &layers ) 35 : : { 36 : 1 : QList<QgsMapLayer *> lst; 37 : 1 : lst.reserve( layers.count() ); 38 : 2 : for ( const QgsWeakMapLayerPointer &layerPtr : layers ) 39 : : { 40 : 1 : if ( layerPtr ) 41 : 0 : lst.append( layerPtr.data() ); 42 : : } 43 : 1 : return lst; 44 : 1 : } 45 : : 46 : 10 : inline QgsWeakMapLayerPointerList _qgis_listRawToQPointer( const QList<QgsMapLayer *> &layers ) 47 : : { 48 : 10 : QgsWeakMapLayerPointerList lst; 49 : 10 : lst.reserve( layers.count() ); 50 : 10 : for ( QgsMapLayer *layer : layers ) 51 : : { 52 : 0 : lst.append( layer ); 53 : : } 54 : 10 : return lst; 55 : 10 : } 56 : : 57 : 0 : inline QList<QgsMapLayer *> _qgis_listRefToRaw( const QList< QgsMapLayerRef > &layers ) 58 : : { 59 : 0 : QList<QgsMapLayer *> lst; 60 : 0 : lst.reserve( layers.count() ); 61 : 0 : for ( const QgsMapLayerRef &layer : layers ) 62 : : { 63 : 0 : if ( layer ) 64 : 0 : lst.append( layer.get() ); 65 : : } 66 : 0 : return lst; 67 : 0 : } 68 : : 69 : 0 : inline QList< QgsMapLayerRef > _qgis_listRawToRef( const QList<QgsMapLayer *> &layers ) 70 : : { 71 : 0 : QList< QgsMapLayerRef > lst; 72 : 0 : lst.reserve( layers.count() ); 73 : 0 : for ( QgsMapLayer *layer : layers ) 74 : : { 75 : 0 : lst.append( QgsMapLayerRef( layer ) ); 76 : : } 77 : 0 : return lst; 78 : 0 : } 79 : : 80 : 0 : inline void _qgis_removeLayers( QList< QgsMapLayerRef > &list, const QList< QgsMapLayer *> &layersToRemove ) 81 : : { 82 : 0 : QMutableListIterator<QgsMapLayerRef> it( list ); 83 : 0 : while ( it.hasNext() ) 84 : : { 85 : 0 : QgsMapLayerRef &ref = it.next(); 86 : 0 : if ( layersToRemove.contains( ref.get() ) ) 87 : 0 : it.remove(); 88 : : } 89 : 0 : } 90 : : 91 : 0 : inline QStringList _qgis_listQPointerToIDs( const QgsWeakMapLayerPointerList &layers ) 92 : : { 93 : 0 : QStringList lst; 94 : 0 : lst.reserve( layers.count() ); 95 : 0 : for ( const QgsWeakMapLayerPointer &layerPtr : layers ) 96 : : { 97 : 0 : if ( layerPtr ) 98 : 0 : lst << layerPtr->id(); 99 : : } 100 : 0 : return lst; 101 : 0 : } 102 : : 103 : : inline static QgsMapLayer *_qgis_findLayer( const QList< QgsMapLayer *> &layers, const QString &identifier ) 104 : : { 105 : : QgsMapLayer *matchId = nullptr; 106 : : QgsMapLayer *matchName = nullptr; 107 : : QgsMapLayer *matchNameInsensitive = nullptr; 108 : : 109 : : // Look for match against layer IDs 110 : : for ( QgsMapLayer *layer : layers ) 111 : : { 112 : : if ( !matchId && layer->id() == identifier ) 113 : : { 114 : : matchId = layer; 115 : : break; 116 : : } 117 : : if ( !matchName && layer->name() == identifier ) 118 : : { 119 : : matchName = layer; 120 : : } 121 : : if ( !matchNameInsensitive && QString::compare( layer->name(), identifier, Qt::CaseInsensitive ) == 0 ) 122 : : { 123 : : matchNameInsensitive = layer; 124 : : } 125 : : } 126 : : 127 : : if ( matchId ) 128 : : { 129 : : return matchId; 130 : : } 131 : : else if ( matchName ) 132 : : { 133 : : return matchName; 134 : : } 135 : : else if ( matchNameInsensitive ) 136 : : { 137 : : return matchNameInsensitive; 138 : : } 139 : : else 140 : : { 141 : : return nullptr; 142 : : } 143 : : } 144 : : 145 : 0 : inline uint qHash( const QgsWeakMapLayerPointer &key ) 146 : : { 147 : 0 : return qHash( key ? key->id() : QString() ); 148 : : } 149 : : 150 : : ///@endcond 151 : : 152 : : #endif // QGSMAPLAYERLISTUTILS_H