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)32 QgsEmbeddedLayerSelectDialog::QgsEmbeddedLayerSelectDialog( QWidget *parent, QgsLayerTreeView *tv )
33   : QDialog( parent ),
34     mTreeView( tv )
35 {
36   setupUi( this );
37   updateLayersList();
38 }
39 
layers() const40 QStringList 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()52 void 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