20 #include <QHBoxLayout> 
   21 #include <QToolButton> 
   25   , mProvider( provider )
 
   27   if ( !provider.isEmpty() && !connection.isEmpty() )
 
   41   mAllowEmpty = allowEmpty;
 
   51 void QgsDatabaseSchemaComboBox::init()
 
   53   mComboBox = 
new QComboBox();
 
   55   mSortModel = 
new QgsDatabaseSchemaComboBoxSortModel( 
this );
 
   58     mSortModel->setSourceModel( mModel );
 
   60   mSortModel->setSortRole( Qt::DisplayRole );
 
   61   mSortModel->setSortLocaleAware( 
true );
 
   62   mSortModel->setSortCaseSensitivity( Qt::CaseInsensitive );
 
   63   mSortModel->setDynamicSortFilter( 
true );
 
   64   mSortModel->sort( 0 );
 
   66   mComboBox->setModel( mSortModel );
 
   68   QHBoxLayout *l = 
new QHBoxLayout();
 
   69   l->setContentsMargins( 0, 0, 0, 0 );
 
   70   l->addWidget( mComboBox );
 
   72   QToolButton *refreshButton = 
new QToolButton();
 
   73   refreshButton->setAutoRaise( 
true );
 
   74   refreshButton->setToolTip( tr( 
"Refresh schemas" ) );
 
   76   l->addWidget( refreshButton );
 
   81   connect( mComboBox, 
static_cast < void ( QComboBox::* )( 
int ) 
> ( &QComboBox::activated ), 
this, &QgsDatabaseSchemaComboBox::indexChanged );
 
   82   connect( mSortModel, &QAbstractItemModel::rowsInserted, 
this, &QgsDatabaseSchemaComboBox::rowsChanged );
 
   83   connect( mSortModel, &QAbstractItemModel::rowsRemoved, 
this, &QgsDatabaseSchemaComboBox::rowsChanged );
 
   91   if ( schema.isEmpty() )
 
   94       mComboBox->setCurrentIndex( 0 );
 
   96       mComboBox->setCurrentIndex( -1 );
 
  102   const QModelIndexList idx = mSortModel->match( mSortModel->index( 0, 0 ), Qt::DisplayRole, schema, 1, Qt::MatchFixedString | Qt::MatchCaseSensitive );
 
  105     const QModelIndex proxyIdx = idx.at( 0 );
 
  106     if ( proxyIdx.isValid() )
 
  108       mComboBox->setCurrentIndex( proxyIdx.row() );
 
  113   mComboBox->setCurrentIndex( -1 );
 
  119   if ( !provider.isEmpty() )
 
  120     mProvider = provider;
 
  124   if ( !connection.isEmpty() && !mProvider.isEmpty() )
 
  128     mSortModel->setSourceModel( mModel );
 
  133     mSortModel->setSourceModel( 
nullptr );
 
  136     oldModel->deleteLater();
 
  152   const QModelIndex proxyIndex = mSortModel->index( mComboBox->currentIndex(), 0 );
 
  153   if ( !proxyIndex.isValid() )
 
  158   return mSortModel->data( proxyIndex, Qt::DisplayRole ).toString();
 
  161 void QgsDatabaseSchemaComboBox::indexChanged( 
int i )
 
  167 void QgsDatabaseSchemaComboBox::rowsChanged()
 
  169   if ( mComboBox->count() == 1 || ( mAllowEmpty && mComboBox->count() == 2 && mComboBox->currentIndex() == 1 ) )
 
  174   else if ( mComboBox->count() == 0 )
 
  182 QgsDatabaseSchemaComboBoxSortModel::QgsDatabaseSchemaComboBoxSortModel( QObject *parent )
 
  183   : QSortFilterProxyModel( parent )
 
  188 bool QgsDatabaseSchemaComboBoxSortModel::lessThan( 
const QModelIndex &left, 
const QModelIndex &right )
 const 
  197   const QString leftStr = sourceModel()->data( left ).toString();
 
  198   const QString rightStr = sourceModel()->data( right ).toString();
 
  199   return QString::localeAwareCompare( leftStr, rightStr ) < 0;