1 /*************************************************************************** 2 Virtual layer embedded layer selection widget 3 4 begin : Feb 2016 5 copyright : (C) 2016 Hugo Mercier, Oslandia 6 email : hugo dot mercier at oslandia dot com 7 ***************************************************************************/ 8 9 /*************************************************************************** 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 ***************************************************************************/ 17 18 #include "qgsembeddedlayerselectdialog.h" 19 20 #include <QMainWindow> 21 #include <QSettings> 22 23 #include "qgsvectorlayer.h" 24 #include "layertree/qgslayertreeview.h" 25 #include "layertree/qgslayertreemodel.h" 26 #include "layertree/qgslayertreegroup.h" 27 #include "layertree/qgslayertreelayer.h" 28 #include "layertree/qgslayertree.h" 29 #include "qgsproviderregistry.h" 30 #include "qgsvectordataprovider.h" 31 QgsEmbeddedLayerSelectDialog(QWidget * parent,QgsLayerTreeView * tv)32QgsEmbeddedLayerSelectDialog::QgsEmbeddedLayerSelectDialog( QWidget *parent, QgsLayerTreeView *tv ) 33 : QDialog( parent ), 34 mTreeView( tv ) 35 { 36 setupUi( this ); 37 updateLayersList(); 38 } 39 layers() const40QStringList QgsEmbeddedLayerSelectDialog::layers() const 41 { 42 QStringList ids; 43 QModelIndexList selected = mLayers->selectionModel()->selectedRows(); 44 for ( int i = 0; i < selected.size(); i++ ) 45 { 46 QgsVectorLayer *l = static_cast<QgsVectorLayer *>( mLayers->item( selected[i].row() )->data( Qt::UserRole ).value<void *>() ); 47 ids << l->id(); 48 } 49 return ids; 50 } 51 updateLayersList()52void QgsEmbeddedLayerSelectDialog::updateLayersList() 53 { 54 // populate list 55 mLayers->clear(); 56 QList<QgsLayerTreeLayer *> layers = mTreeView->layerTreeModel()->rootGroup()->findLayers(); 57 const auto constLayers = layers; 58 for ( const QgsLayerTreeLayer *l : constLayers ) 59 { 60 if ( l->layer() && l->layer()->type() == QgsMapLayerType::VectorLayer ) 61 { 62 // display layer name and store its pointer 63 QListWidgetItem *item = new QListWidgetItem(); 64 item->setText( l->layer()->name() ); 65 item->setData( Qt::UserRole, QVariant::fromValue( static_cast<void *>( l->layer() ) ) ); 66 mLayers->insertItem( mLayers->count(), item ); 67 } 68 } 69 } 70