QGIS API Documentation  3.10.0-A Coruña (6c816b4204)
qgsbrowserdockwidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsbrowserdockwidget.cpp
3  ---------------------
4  begin : July 2011
5  copyright : (C) 2011 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 #include "qgsbrowserdockwidget.h"
16 #include "qgsbrowserdockwidget_p.h"
17 
18 #include <QAbstractTextDocumentLayout>
19 #include <QHeaderView>
20 #include <QTreeView>
21 #include <QMenu>
22 #include <QToolButton>
23 #include <QFileDialog>
24 #include <QPlainTextDocumentLayout>
25 #include <QSortFilterProxyModel>
26 
27 #include "qgsbrowserguimodel.h"
28 #include "qgsbrowsertreeview.h"
29 #include "qgslogger.h"
30 #include "qgsrasterlayer.h"
31 #include "qgsvectorlayer.h"
32 #include "qgsproject.h"
33 #include "qgssettings.h"
34 #include "qgsnewnamedialog.h"
35 #include "qgsbrowserproxymodel.h"
36 #include "qgsgui.h"
38 #include "qgsnative.h"
40 #include "qgsdataitemguiprovider.h"
41 
42 // browser layer properties dialog
43 #include "qgsapplication.h"
44 #include "qgsmapcanvas.h"
45 
46 #include <QDragEnterEvent>
47 
48 QgsBrowserDockWidget::QgsBrowserDockWidget( const QString &name, QgsBrowserGuiModel *browserModel, QWidget *parent )
49  : QgsDockWidget( parent )
50  , mModel( browserModel )
51  , mPropertiesWidgetEnabled( false )
52  , mPropertiesWidgetHeight( 0 )
53 {
54  setupUi( this );
55 
56  mContents->layout()->setContentsMargins( 0, 0, 0, 0 );
57  mContents->layout()->setMargin( 0 );
58  static_cast< QVBoxLayout * >( mContents->layout() )->setSpacing( 0 );
59 
60  setWindowTitle( name );
61 
62  mBrowserView = new QgsDockBrowserTreeView( this );
63  mLayoutBrowser->addWidget( mBrowserView );
64 
65  mWidgetFilter->hide();
66  mLeFilter->setPlaceholderText( tr( "Type here to filter visible items…" ) );
67  // icons from http://www.fatcow.com/free-icons License: CC Attribution 3.0
68 
69  QMenu *menu = new QMenu( this );
70  menu->setSeparatorsCollapsible( false );
71  mBtnFilterOptions->setMenu( menu );
72  QAction *action = new QAction( tr( "Case Sensitive" ), menu );
73  action->setData( "case" );
74  action->setCheckable( true );
75  action->setChecked( false );
76  connect( action, &QAction::toggled, this, &QgsBrowserDockWidget::setCaseSensitive );
77  menu->addAction( action );
78  QActionGroup *group = new QActionGroup( menu );
79  action = new QAction( tr( "Filter Pattern Syntax" ), group );
80  action->setSeparator( true );
81  menu->addAction( action );
82  action = new QAction( tr( "Normal" ), group );
83  action->setData( QgsBrowserProxyModel::Normal );
84  action->setCheckable( true );
85  action->setChecked( true );
86  menu->addAction( action );
87  action = new QAction( tr( "Wildcard(s)" ), group );
88  action->setData( QgsBrowserProxyModel::Wildcards );
89  action->setCheckable( true );
90  menu->addAction( action );
91  action = new QAction( tr( "Regular Expression" ), group );
92  action->setData( QgsBrowserProxyModel::RegularExpression );
93  action->setCheckable( true );
94  menu->addAction( action );
95 
96  mBrowserView->setExpandsOnDoubleClick( false );
97 
98  connect( mActionRefresh, &QAction::triggered, this, &QgsBrowserDockWidget::refresh );
99  connect( mActionAddLayers, &QAction::triggered, this, &QgsBrowserDockWidget::addSelectedLayers );
100  connect( mActionCollapse, &QAction::triggered, mBrowserView, &QgsDockBrowserTreeView::collapseAll );
101  connect( mActionShowFilter, &QAction::triggered, this, &QgsBrowserDockWidget::showFilterWidget );
102  connect( mActionPropertiesWidget, &QAction::triggered, this, &QgsBrowserDockWidget::enablePropertiesWidget );
103  connect( mLeFilter, &QgsFilterLineEdit::returnPressed, this, &QgsBrowserDockWidget::setFilter );
104  connect( mLeFilter, &QgsFilterLineEdit::cleared, this, &QgsBrowserDockWidget::setFilter );
105  connect( mLeFilter, &QgsFilterLineEdit::textChanged, this, &QgsBrowserDockWidget::setFilter );
106  connect( group, &QActionGroup::triggered, this, &QgsBrowserDockWidget::setFilterSyntax );
107  connect( mBrowserView, &QgsDockBrowserTreeView::customContextMenuRequested, this, &QgsBrowserDockWidget::showContextMenu );
108  connect( mBrowserView, &QgsDockBrowserTreeView::doubleClicked, this, &QgsBrowserDockWidget::itemDoubleClicked );
109  connect( mSplitter, &QSplitter::splitterMoved, this, &QgsBrowserDockWidget::splitterMoved );
110 }
111 
113 {
114  QgsSettings settings;
115  settings.setValue( settingsSection() + "/propertiesWidgetEnabled", mPropertiesWidgetEnabled );
116  //settings.setValue(settingsSection() + "/propertiesWidgetHeight", mPropertiesWidget->size().height() );
117  settings.setValue( settingsSection() + "/propertiesWidgetHeight", mPropertiesWidgetHeight );
118 }
119 
120 void QgsBrowserDockWidget::showEvent( QShowEvent *e )
121 {
122  // delayed initialization of the model
123  if ( !mModel->initialized( ) )
124  {
125  mModel->initialize();
126  }
127  if ( ! mProxyModel )
128  {
129  mProxyModel = new QgsBrowserProxyModel( this );
130  mProxyModel->setBrowserModel( mModel );
131  mBrowserView->setSettingsSection( objectName().toLower() ); // to distinguish 2 or more instances of the browser
132  mBrowserView->setBrowserModel( mModel );
133  mBrowserView->setModel( mProxyModel );
134  mBrowserView->setSortingEnabled( true );
135  mBrowserView->sortByColumn( 0, Qt::AscendingOrder );
136  // provide a horizontal scroll bar instead of using ellipse (...) for longer items
137  mBrowserView->setTextElideMode( Qt::ElideNone );
138  mBrowserView->header()->setSectionResizeMode( 0, QHeaderView::ResizeToContents );
139  mBrowserView->header()->setStretchLastSection( false );
140 
141  // selectionModel is created when model is set on tree
142  connect( mBrowserView->selectionModel(), &QItemSelectionModel::selectionChanged,
144 
145  // Forward the model changed signals to the widget
146  connect( mModel, &QgsBrowserModel::connectionsChanged,
148 
149 
150  // objectName used by settingsSection() is not yet set in constructor
151  QgsSettings settings;
152  mPropertiesWidgetEnabled = settings.value( settingsSection() + "/propertiesWidgetEnabled", false ).toBool();
153  mActionPropertiesWidget->setChecked( mPropertiesWidgetEnabled );
154  mPropertiesWidget->setVisible( false ); // false until item is selected
155 
156  mPropertiesWidgetHeight = settings.value( settingsSection() + "/propertiesWidgetHeight" ).toFloat();
157  QList<int> sizes = mSplitter->sizes();
158  int total = sizes.value( 0 ) + sizes.value( 1 );
159  int height = static_cast<int>( total * mPropertiesWidgetHeight );
160  sizes.clear();
161  sizes << total - height << height;
162  mSplitter->setSizes( sizes );
163  }
164 
166 }
167 
168 void QgsBrowserDockWidget::itemDoubleClicked( const QModelIndex &index )
169 {
170  QgsDataItem *item = mModel->dataItem( mProxyModel->mapToSource( index ) );
171  if ( !item )
172  return;
173 
174  QgsDataItemGuiContext context = createContext();
175 
176  const QList< QgsDataItemGuiProvider * > providers = QgsGui::instance()->dataItemGuiProviderRegistry()->providers();
177  for ( QgsDataItemGuiProvider *provider : providers )
178  {
179  if ( provider->handleDoubleClick( item, context ) )
180  return;
181  }
182 
183  // if no providers overrode the double-click handling for this item, we give the item itself a chance
184  if ( !item->handleDoubleClick() )
185  {
186  // double-click not handled by browser model, so use as default view expand behavior
187  if ( mBrowserView->isExpanded( index ) )
188  mBrowserView->collapse( index );
189  else
190  mBrowserView->expand( index );
191  }
192 }
193 
195 {
196  QModelIndex index = mProxyModel->mapToSource( mBrowserView->indexAt( pt ) );
197  QgsDataItem *item = mModel->dataItem( index );
198  if ( !item )
199  return;
200 
201  const QModelIndexList selection = mBrowserView->selectionModel()->selectedIndexes();
202  QList< QgsDataItem * > selectedItems;
203  selectedItems.reserve( selection.size() );
204  for ( const QModelIndex &selectedIndex : selection )
205  {
206  QgsDataItem *selectedItem = mProxyModel->dataItem( selectedIndex );
207  if ( selectedItem )
208  selectedItems << selectedItem;
209  }
210 
211  QMenu *menu = new QMenu( this );
212 
213  const QList<QMenu *> menus = item->menus( menu );
214  QList<QAction *> actions = item->actions( menu );
215 
216  if ( !menus.isEmpty() )
217  {
218  for ( QMenu *mn : menus )
219  {
220  menu->addMenu( mn );
221  }
222  }
223 
224  if ( !actions.isEmpty() )
225  {
226  if ( !menu->actions().isEmpty() )
227  menu->addSeparator();
228  // add action to the menu
229  menu->addActions( actions );
230  }
231 
232  QgsDataItemGuiContext context = createContext();
233 
234  const QList< QgsDataItemGuiProvider * > providers = QgsGui::instance()->dataItemGuiProviderRegistry()->providers();
235  for ( QgsDataItemGuiProvider *provider : providers )
236  {
237  provider->populateContextMenu( item, menu, selectedItems, context );
238  }
239 
240  if ( menu->actions().isEmpty() )
241  {
242  delete menu;
243  return;
244  }
245 
246  menu->popup( mBrowserView->mapToGlobal( pt ) );
247 }
248 
250 {
251  QModelIndex index = mProxyModel->mapToSource( mBrowserView->currentIndex() );
252  QgsDataItem *item = mModel->dataItem( index );
253  if ( !item )
254  return;
255 
256  QgsDirectoryItem *dirItem = qobject_cast<QgsDirectoryItem *>( item );
257  if ( !dirItem )
258  return;
259 
261  addFavoriteDirectory( dirItem->dirPath() );
263 }
264 
266 {
267  QString directory = QFileDialog::getExistingDirectory( this, tr( "Add directory to favorites" ) );
268  if ( !directory.isEmpty() )
269  {
271  addFavoriteDirectory( directory );
273  }
274 }
275 
276 void QgsBrowserDockWidget::addFavoriteDirectory( const QString &favDir, const QString &name )
277 {
278  mModel->addFavoriteDirectory( favDir, name );
279 }
280 
282 {
283  mMessageBar = bar;
284  mModel->setMessageBar( bar );
285 }
286 
288 {
289  return mMessageBar;
290 }
291 
293 {
294  mModel->removeFavorite( mProxyModel->mapToSource( mBrowserView->currentIndex() ) );
295 }
296 
298 {
299  refreshModel( QModelIndex() );
300 }
301 
302 void QgsBrowserDockWidget::refreshModel( const QModelIndex &index )
303 {
304  if ( mModel && mProxyModel )
305  {
306  QgsDataItem *item = mModel->dataItem( index );
307  if ( item )
308  {
309  QgsDebugMsgLevel( "path = " + item->path(), 4 );
310  }
311  else
312  {
313  QgsDebugMsgLevel( QStringLiteral( "invalid item" ), 4 );
314  }
315 
316  if ( item && ( item->capabilities2() & QgsDataItem::Fertile ) )
317  {
318  mModel->refresh( index );
319  }
320 
321  for ( int i = 0; i < mModel->rowCount( index ); i++ )
322  {
323  QModelIndex idx = mModel->index( i, 0, index );
324  QModelIndex proxyIdx = mProxyModel->mapFromSource( idx );
325  QgsDataItem *child = mModel->dataItem( idx );
326 
327  // Check also expanded descendants so that the whole expanded path does not get collapsed if one item is collapsed.
328  // Fast items (usually root items) are refreshed so that when collapsed, it is obvious they are if empty (no expand symbol).
329  if ( mBrowserView->isExpanded( proxyIdx ) || mBrowserView->hasExpandedDescendant( proxyIdx ) || ( child && child->capabilities2() & QgsDataItem::Fast ) )
330  {
331  refreshModel( idx );
332  }
333  else
334  {
335  if ( child && ( child->capabilities2() & QgsDataItem::Fertile ) )
336  {
337  child->depopulate();
338  }
339  }
340  }
341  }
342 }
343 
344 void QgsBrowserDockWidget::addLayer( QgsLayerItem *layerItem )
345 {
346  if ( !layerItem )
347  return;
348 
350  list << layerItem->mimeUri();
351  emit handleDropUriList( list );
352 }
353 
354 bool QgsBrowserDockWidget::addLayerAtIndex( const QModelIndex &index )
355 {
356  QgsDebugMsg( QStringLiteral( "rowCount() = %1" ).arg( mModel->rowCount( mProxyModel->mapToSource( index ) ) ) );
357  QgsDataItem *item = mModel->dataItem( mProxyModel->mapToSource( index ) );
358 
359  if ( item && item->type() == QgsDataItem::Project )
360  {
361  QgsProjectItem *projectItem = qobject_cast<QgsProjectItem *>( item );
362  if ( projectItem )
363  {
364  QApplication::setOverrideCursor( Qt::WaitCursor );
365  emit openFile( projectItem->path(), QStringLiteral( "project" ) );
366  QApplication::restoreOverrideCursor();
367  }
368  return true;
369  }
370  else if ( item && item->type() == QgsDataItem::Layer )
371  {
372  QgsLayerItem *layerItem = qobject_cast<QgsLayerItem *>( item );
373  if ( layerItem )
374  {
375  QApplication::setOverrideCursor( Qt::WaitCursor );
376  addLayer( layerItem );
377  QApplication::restoreOverrideCursor();
378  }
379  return true;
380  }
381  return false;
382 }
383 
385 {
386  QApplication::setOverrideCursor( Qt::WaitCursor );
387 
388  // get a sorted list of selected indexes
389  QModelIndexList list = mBrowserView->selectionModel()->selectedIndexes();
390  std::sort( list.begin(), list.end() );
391 
392  // If any of the layer items are QGIS we just open and exit the loop
393  const auto constList = list;
394  for ( const QModelIndex &index : constList )
395  {
396  QgsDataItem *item = mModel->dataItem( mProxyModel->mapToSource( index ) );
397  if ( item && item->type() == QgsDataItem::Project )
398  {
399  QgsProjectItem *projectItem = qobject_cast<QgsProjectItem *>( item );
400  if ( projectItem )
401  emit openFile( projectItem->path(), QStringLiteral( "project" ) );
402 
403  QApplication::restoreOverrideCursor();
404  return;
405  }
406  }
407 
408  // add items in reverse order so they are in correct order in the layers dock
409  for ( int i = list.size() - 1; i >= 0; i-- )
410  {
411  QgsDataItem *item = mModel->dataItem( mProxyModel->mapToSource( list[i] ) );
412  if ( item && item->type() == QgsDataItem::Layer )
413  {
414  QgsLayerItem *layerItem = qobject_cast<QgsLayerItem *>( item );
415  if ( layerItem )
416  addLayer( layerItem );
417  }
418  }
419 
420  QApplication::restoreOverrideCursor();
421 }
422 
424 {
425  QModelIndex index = mProxyModel->mapToSource( mBrowserView->currentIndex() );
426  QgsDataItem *item = mModel->dataItem( index );
427  if ( ! item )
428  return;
429 
430  if ( item->type() == QgsDataItem::Directory )
431  {
432  mModel->hidePath( item );
433  }
434 }
435 
437 {
438  QModelIndex index = mProxyModel->mapToSource( mBrowserView->currentIndex() );
439  QgsDataItem *item = mModel->dataItem( index );
440  if ( ! item )
441  return;
442 
443  if ( item->type() == QgsDataItem::Layer || item->type() == QgsDataItem::Directory )
444  {
445  QgsBrowserPropertiesDialog *dialog = new QgsBrowserPropertiesDialog( settingsSection(), this );
446  dialog->setAttribute( Qt::WA_DeleteOnClose );
447  dialog->setItem( item, createContext() );
448  dialog->show();
449  }
450 }
451 
453 {
454  QModelIndex index = mProxyModel->mapToSource( mBrowserView->currentIndex() );
455  QgsDataItem *item = mModel->dataItem( index );
456  if ( ! item )
457  return;
458 
459  if ( item->type() == QgsDataItem::Directory )
460  {
461  QgsSettings settings;
462  QStringList fastScanDirs = settings.value( QStringLiteral( "qgis/scanItemsFastScanUris" ),
463  QStringList() ).toStringList();
464  int idx = fastScanDirs.indexOf( item->path() );
465  if ( idx != -1 )
466  {
467  fastScanDirs.removeAt( idx );
468  }
469  else
470  {
471  fastScanDirs << item->path();
472  }
473  settings.setValue( QStringLiteral( "qgis/scanItemsFastScanUris" ), fastScanDirs );
474  }
475 }
476 
478 {
479  mWidgetFilter->setVisible( visible );
480  if ( ! visible )
481  {
482  mLeFilter->setText( QString() );
483  setFilter();
484  }
485  else
486  {
487  mLeFilter->setFocus();
488  }
489 }
490 
492 {
493  QString filter = mLeFilter->text();
494  if ( mProxyModel )
495  mProxyModel->setFilterString( filter );
496 }
497 
499 {
500  if ( mModel )
501  mModel->updateProjectHome();
502 }
503 
505 {
506  if ( !action || ! mProxyModel )
507  return;
508 
509  mProxyModel->setFilterSyntax( static_cast< QgsBrowserProxyModel::FilterSyntax >( action->data().toInt() ) );
510 }
511 
512 void QgsBrowserDockWidget::setCaseSensitive( bool caseSensitive )
513 {
514  if ( ! mProxyModel )
515  return;
516  mProxyModel->setFilterCaseSensitivity( caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive );
517 }
518 
519 int QgsBrowserDockWidget::selectedItemsCount()
520 {
521  QItemSelectionModel *selectionModel = mBrowserView->selectionModel();
522  if ( selectionModel )
523  {
524  return selectionModel->selectedIndexes().size();
525  }
526  return 0;
527 }
528 
529 QgsDataItemGuiContext QgsBrowserDockWidget::createContext()
530 {
531  QgsDataItemGuiContext context;
532  context.setMessageBar( mMessageBar );
533  return context;
534 }
535 
536 void QgsBrowserDockWidget::selectionChanged( const QItemSelection &selected, const QItemSelection &deselected )
537 {
538  Q_UNUSED( selected )
539  Q_UNUSED( deselected )
540  if ( mPropertiesWidgetEnabled )
541  {
542  setPropertiesWidget();
543  }
544 }
545 
546 void QgsBrowserDockWidget::clearPropertiesWidget()
547 {
548  while ( mPropertiesLayout->count() > 0 )
549  {
550  delete mPropertiesLayout->itemAt( 0 )->widget();
551  }
552  mPropertiesWidget->setVisible( false );
553 }
554 
555 void QgsBrowserDockWidget::setPropertiesWidget()
556 {
557  clearPropertiesWidget();
558  QItemSelectionModel *selectionModel = mBrowserView->selectionModel();
559  if ( selectionModel )
560  {
561  QModelIndexList indexes = selectionModel->selectedIndexes();
562  if ( indexes.size() == 1 )
563  {
564  QModelIndex index = mProxyModel->mapToSource( indexes.value( 0 ) );
565  QgsDataItem *item = mModel->dataItem( index );
566  QgsDataItemGuiContext context = createContext();
567  QgsBrowserPropertiesWidget *propertiesWidget = QgsBrowserPropertiesWidget::createWidget( item, context, mPropertiesWidget );
568  if ( propertiesWidget )
569  {
570  propertiesWidget->setCondensedMode( true );
571  mPropertiesLayout->addWidget( propertiesWidget );
572  }
573  }
574  }
575  mPropertiesWidget->setVisible( mPropertiesLayout->count() > 0 );
576 }
577 
579 {
580  mPropertiesWidgetEnabled = enable;
581  if ( enable && selectedItemsCount() == 1 )
582  {
583  setPropertiesWidget();
584  }
585  else
586  {
587  clearPropertiesWidget();
588  }
589 }
590 
591 void QgsBrowserDockWidget::setActiveIndex( const QModelIndex &index )
592 {
593  if ( index.isValid() )
594  {
595  QModelIndex proxyIndex = mProxyModel->mapFromSource( index );
596  mBrowserView->expand( proxyIndex );
597  mBrowserView->setCurrentIndex( proxyIndex );
598  }
599 }
600 
602 {
603  QList<int> sizes = mSplitter->sizes();
604  float total = sizes.value( 0 ) + sizes.value( 1 );
605  mPropertiesWidgetHeight = total > 0 ? sizes.value( 1 ) / total : 0;
606 }
virtual QList< QMenu * > menus(QWidget *parent)
Returns the list of menus available for this item.
QString path() const
Definition: qgsdataitem.h:309
Q_DECL_DEPRECATED void toggleFastScan()
Toggle fast scan.
void addSelectedLayers()
Add selected layers to the project.
void connectionsChanged()
Connections changed in the browser, forwarded to the widget and used to notify the provider dialogs o...
void hidePath(QgsDataItem *item)
Hide the given path in the browser model.
This class is a composition of two QSettings instances:
Definition: qgssettings.h:58
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
#define QgsDebugMsg(str)
Definition: qgslogger.h:38
static QgsDataItemGuiProviderRegistry * dataItemGuiProviderRegistry()
Returns the global data item GUI provider registry, used for tracking providers which affect the brow...
Definition: qgsgui.cpp:112
Q_DECL_DEPRECATED void addFavoriteDirectory()
Add directory from file dialog to favorite.
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:649
A bar for displaying non-blocking messages to the user.
Definition: qgsmessagebar.h:45
void setBrowserModel(QgsBrowserModel *model)
Sets the underlying browser model.
Type type() const
Definition: qgsdataitem.h:281
virtual void depopulate()
Remove children recursively and set as not populated. This is used when refreshing collapsed items...
A model for showing available data sources and other items in a structured tree.
QList< QgsDataItemGuiProvider * > providers() const
Returns the list of available providers.
static QgsGui * instance()
Returns a pointer to the singleton instance.
Definition: qgsgui.cpp:61
void setFilterSyntax(FilterSyntax syntax)
Sets the filter syntax.
QgsBrowserDockWidget(const QString &name, QgsBrowserGuiModel *browserModel, QWidget *parent=nullptr)
Constructor for QgsBrowserDockWidget.
void enablePropertiesWidget(bool enable)
Enable/disable properties widget.
void hideItem()
Hide current item.
void showEvent(QShowEvent *event) override
Show event override.
bool initialized() const
Returns true if the model has been initialized.
void setFilter()
Apply filter to the model.
void showContextMenu(QPoint)
Show context menu.
Q_DECL_DEPRECATED void addFavorite()
Add current item to favorite.
#define QgsDebugMsgLevel(str, level)
Definition: qgslogger.h:39
QgsDockWidget subclass with more fine-grained control over how the widget is closed or opened...
Definition: qgsdockwidget.h:31
virtual bool handleDoubleClick()
Called when a user double clicks on the item.
void setFilterString(const QString &filter)
Sets the filter string to use when filtering items in the model.
void initialize()
Delayed initialization, needed because the provider registry must be already populated.
QgsDataItem * dataItem(const QModelIndex &idx) const
Returns the data item at the specified index, or nullptr if no item exists at the index...
void removeFavorite(const QModelIndex &index)
Removes a favorite directory from its corresponding model index.
void handleDropUriList(const QgsMimeDataUtils::UriList &)
Emitted when drop uri list needs to be handled.
Abstract base class for providers which affect how QgsDataItem items behave within the application GU...
void setFilterSyntax(QAction *)
Sets filter syntax.
void setFilterCaseSensitivity(Qt::CaseSensitivity sensitivity)
Sets whether item filtering should be case sensitive.
A directory: contains subdirectories and layers.
Definition: qgsdataitem.h:611
void showEvent(QShowEvent *event) override
void showProperties()
Show the layer properties.
Base class for all items in the model.
Definition: qgsdataitem.h:49
Encapsulates the context in which a QgsDataItem is shown within the application GUI.
void splitterMoved()
Splitter has been moved.
Can create children. Even items without this capability may have children, but cannot create them...
Definition: qgsdataitem.h:224
void setCaseSensitive(bool caseSensitive)
Sets filter case sensitivity.
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:650
Q_DECL_DEPRECATED void removeFavorite()
Remove from favorite.
void setActiveIndex(const QModelIndex &index)
Sets the selection to index and expand it.
void addFavoriteDirectory(const QString &directory, const QString &name=QString())
Adds a directory to the favorites group.
void updateProjectHome()
Update project home directory.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
QgsMimeDataUtils::Uri mimeUri() const override
Returns mime URI for the data item.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
void setMessageBar(QgsMessageBar *bar)
Sets the associated message bar.
void cleared()
Emitted when the widget is cleared.
void showFilterWidget(bool visible)
Show/hide filter widget.
virtual QList< QAction * > actions(QWidget *parent)
Returns the list of actions available for this item.
QString dirPath() const
Returns the full path to the directory the item represents.
Definition: qgsdataitem.h:633
void setMessageBar(QgsMessageBar *bar)
Sets a message bar to use alongside the dock widget.
void refresh(const QString &path)
Refresh item specified by path.
Standard string filtering.
A QSortFilterProxyModel subclass for filtering and sorting browser model items.
QList< QgsMimeDataUtils::Uri > UriList
Represents a QGIS project.
Definition: qgsdataitem.h:83
Item that represents a layer that can be opened with one of the providers.
Definition: qgsdataitem.h:452
void openFile(const QString &fileName, const QString &fileTypeHint=QString())
Emitted when a file needs to be opened.
void connectionsChanged()
Connections changed in the browser.
void refresh()
Refresh browser view model (and view)
Data item that can be used to represent QGIS projects.
Definition: qgsdataitem.h:662
QgsMessageBar * messageBar()
Returns the message bar associated with the dock.
QgsDataItem * dataItem(const QModelIndex &index) const
Returns the data item at the specified proxy index, or nullptr if no item exists at the index...
Q_DECL_DEPRECATED bool addLayerAtIndex(const QModelIndex &index)
Adds the layer corresponding to the specified model index.
CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms...
Definition: qgsdataitem.h:225
void setMessageBar(QgsMessageBar *bar)
Sets message bar that will be passed in QgsDataItemGuiContext to data items.
void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
Selection has changed.
virtual Capabilities capabilities2() const
Returns the capabilities for the data item.
Definition: qgsdataitem.h:265