Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsproviderconnectionmodel.cpp 3 : : -------------------------------------- 4 : : Date : March 2020 5 : : Copyright : (C) 2020 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 : : #include "qgsproviderconnectionmodel.h" 16 : : #include "qgsproviderregistry.h" 17 : : #include "qgsprovidermetadata.h" 18 : : 19 : 0 : QgsProviderConnectionModel::QgsProviderConnectionModel( const QString &provider, QObject *parent ) 20 : 0 : : QAbstractItemModel( parent ) 21 : 0 : , mProvider( provider ) 22 : 0 : , mMetadata( QgsProviderRegistry::instance()->providerMetadata( provider ) ) 23 : 0 : { 24 : : Q_ASSERT( mMetadata ); 25 : : 26 : 0 : connect( mMetadata, &QgsProviderMetadata::connectionCreated, this, &QgsProviderConnectionModel::addConnection ); 27 : 0 : connect( mMetadata, &QgsProviderMetadata::connectionDeleted, this, &QgsProviderConnectionModel::removeConnection ); 28 : : 29 : 0 : mConnections = mMetadata->connections().keys(); 30 : 0 : } 31 : : 32 : 0 : void QgsProviderConnectionModel::setAllowEmptyConnection( bool allowEmpty ) 33 : : { 34 : 0 : if ( allowEmpty == mAllowEmpty ) 35 : 0 : return; 36 : : 37 : 0 : if ( allowEmpty ) 38 : : { 39 : 0 : beginInsertRows( QModelIndex(), 0, 0 ); 40 : 0 : mAllowEmpty = true; 41 : 0 : endInsertRows(); 42 : 0 : } 43 : : else 44 : : { 45 : 0 : beginRemoveRows( QModelIndex(), 0, 0 ); 46 : 0 : mAllowEmpty = false; 47 : 0 : endRemoveRows(); 48 : : } 49 : 0 : } 50 : : 51 : 0 : void QgsProviderConnectionModel::removeConnection( const QString &connection ) 52 : : { 53 : 0 : int index = mConnections.indexOf( connection ); 54 : 0 : if ( index < 0 ) 55 : 0 : return; 56 : : 57 : 0 : beginRemoveRows( QModelIndex(), index + ( mAllowEmpty ? 1 : 0 ), index + ( mAllowEmpty ? 1 : 0 ) ); 58 : 0 : mConnections.removeAt( index ); 59 : 0 : endRemoveRows(); 60 : 0 : } 61 : : 62 : 0 : void QgsProviderConnectionModel::addConnection( const QString &connection ) 63 : : { 64 : 0 : beginInsertRows( QModelIndex(), mConnections.count() + ( mAllowEmpty ? 1 : 0 ), mConnections.count() + ( mAllowEmpty ? 1 : 0 ) ); 65 : 0 : mConnections.append( connection ); 66 : 0 : endInsertRows(); 67 : 0 : } 68 : : 69 : 0 : QModelIndex QgsProviderConnectionModel::parent( const QModelIndex &child ) const 70 : : { 71 : 0 : Q_UNUSED( child ) 72 : 0 : return QModelIndex(); 73 : : } 74 : : 75 : : 76 : 0 : int QgsProviderConnectionModel::rowCount( const QModelIndex &parent ) const 77 : : { 78 : 0 : if ( parent.isValid() ) 79 : 0 : return 0; 80 : : 81 : 0 : return mConnections.count() + ( mAllowEmpty ? 1 : 0 ); 82 : 0 : } 83 : : 84 : 0 : int QgsProviderConnectionModel::columnCount( const QModelIndex &parent ) const 85 : : { 86 : 0 : Q_UNUSED( parent ) 87 : 0 : return 1; 88 : 0 : } 89 : : 90 : : 91 : 0 : QVariant QgsProviderConnectionModel::data( const QModelIndex &index, int role ) const 92 : : { 93 : 0 : if ( !index.isValid() ) 94 : 0 : return QVariant(); 95 : : 96 : 0 : if ( index.row() == 0 && mAllowEmpty ) 97 : : { 98 : 0 : if ( role == RoleEmpty ) 99 : 0 : return true; 100 : : 101 : 0 : return QVariant(); 102 : : } 103 : : 104 : 0 : const QString connectionName = mConnections.value( index.row() - ( mAllowEmpty ? 1 : 0 ) ); 105 : 0 : switch ( role ) 106 : : { 107 : : case RoleEmpty: 108 : 0 : return false; 109 : : 110 : : case Qt::DisplayRole: 111 : : case Qt::EditRole: 112 : : case RoleConnectionName: 113 : : { 114 : 0 : return connectionName; 115 : : } 116 : : 117 : : case Qt::DecorationRole: 118 : 0 : if ( const QgsAbstractProviderConnection *connection = mMetadata->findConnection( connectionName ) ) 119 : : { 120 : 0 : return connection->icon(); 121 : : } 122 : : else 123 : : { 124 : 0 : return QIcon(); 125 : : } 126 : : 127 : : case Qt::ToolTipRole: 128 : : case RoleUri: 129 : : { 130 : 0 : if ( const QgsAbstractProviderConnection *connection = mMetadata->findConnection( connectionName ) ) 131 : : { 132 : 0 : return connection->uri(); 133 : : } 134 : : else 135 : : { 136 : 0 : return QString(); 137 : : } 138 : : } 139 : : 140 : : case RoleConfiguration: 141 : : { 142 : 0 : if ( const QgsAbstractProviderConnection *connection = mMetadata->findConnection( connectionName ) ) 143 : : { 144 : 0 : return connection->configuration(); 145 : : } 146 : : else 147 : : { 148 : 0 : return QVariant(); 149 : : } 150 : : } 151 : : 152 : : } 153 : : 154 : 0 : return QVariant(); 155 : 0 : } 156 : : 157 : 0 : QModelIndex QgsProviderConnectionModel::index( int row, int column, const QModelIndex &parent ) const 158 : : { 159 : 0 : if ( hasIndex( row, column, parent ) ) 160 : : { 161 : 0 : return createIndex( row, column, row ); 162 : : } 163 : : 164 : 0 : return QModelIndex(); 165 : 0 : }