QGIS API Documentation 3.29.0-Master (ade4f0cf0f)
qgsfilewidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsfilewidget.h
3
4 ---------------------
5 begin : 17.12.2015
6 copyright : (C) 2015 by Denis Rouzaud
8 ***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#ifndef QGSFILEWIDGET_H
18#define QGSFILEWIDGET_H
19
20class QLabel;
21class QToolButton;
22class QVariant;
23class QHBoxLayout;
24class QgsFileDropEdit;
25
26#include <QWidget>
27#include <QFileDialog>
28
29#include "qgis_gui.h"
30#include "qgis_sip.h"
32
33
38class GUI_EXPORT QgsFileWidget : public QWidget
39{
40
41#ifdef SIP_RUN
43 if ( qobject_cast<QgsFileWidget *>( sipCpp ) )
44 sipType = sipType_QgsFileWidget;
45 else
46 sipType = NULL;
48#endif
49
50 Q_OBJECT
51 Q_PROPERTY( bool fileWidgetButtonVisible READ fileWidgetButtonVisible WRITE setFileWidgetButtonVisible )
52 Q_PROPERTY( bool useLink READ useLink WRITE setUseLink )
53 Q_PROPERTY( bool fullUrl READ fullUrl WRITE setFullUrl )
54 Q_PROPERTY( QString dialogTitle READ dialogTitle WRITE setDialogTitle )
55 Q_PROPERTY( QString filter READ filter WRITE setFilter )
56 Q_PROPERTY( QString defaultRoot READ defaultRoot WRITE setDefaultRoot )
57 Q_PROPERTY( StorageMode storageMode READ storageMode WRITE setStorageMode )
58 Q_PROPERTY( RelativeStorage relativeStorage READ relativeStorage WRITE setRelativeStorage )
59 Q_PROPERTY( QFileDialog::Options options READ options WRITE setOptions )
60
61 public:
62
67 {
72 };
73 Q_ENUM( StorageMode )
74
75
79 {
82 RelativeDefaultPath
83 };
84 Q_ENUM( RelativeStorage )
85
86
89 explicit QgsFileWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );
90
100 QString filePath();
101
107 static QStringList splitFilePaths( const QString &path );
108
114 void setFilePath( const QString &path );
115
119 virtual void setReadOnly( bool readOnly );
120
126 QString dialogTitle() const;
127
135 void setDialogTitle( const QString &title );
136
138 QString filter() const;
139
144 void setFilter( const QString &filter );
145
153 QFileDialog::Options options() const;
154
165 void setOptions( QFileDialog::Options options );
166
172 void setSelectedFilter( const QString &selectedFilter ) { mSelectedFilter = selectedFilter; }
173
179 QString selectedFilter() const { return mSelectedFilter; }
180
190 void setConfirmOverwrite( bool confirmOverwrite ) { mConfirmOverwrite = confirmOverwrite; }
191
197 bool confirmOverwrite() const { return mConfirmOverwrite; }
198
204 bool fileWidgetButtonVisible() const;
205
211 void setFileWidgetButtonVisible( bool visible );
212
218 bool useLink() const;
219
225 void setUseLink( bool useLink );
226
232 bool fullUrl() const;
233
239 void setFullUrl( bool fullUrl );
240
246 QString defaultRoot() const;
247
253 void setDefaultRoot( const QString &defaultRoot );
254
260 QgsFileWidget::StorageMode storageMode() const;
261
267 void setStorageMode( QgsFileWidget::StorageMode storageMode );
268
274 QgsFileWidget::RelativeStorage relativeStorage() const;
275
281 void setRelativeStorage( QgsFileWidget::RelativeStorage relativeStorage );
282
288 QgsFilterLineEdit *lineEdit();
289
290 signals:
291
295 void fileChanged( const QString &path );
296
297 private slots:
298 void openFileDialog();
299 void textEdited( const QString &path );
300 void editLink();
301 void fileDropped( const QString &filePath );
302
303 protected:
304
308 virtual void updateLayout();
309
313 virtual void setSelectedFileNames( QStringList fileNames );
314
318 static bool isMultiFiles( const QString &path );
319
323 void setFilePaths( const QStringList &filePaths );
324
325 QString mFilePath;
326 bool mButtonVisible = true;
327 bool mUseLink = false;
328 bool mFullUrl = false;
329 bool mReadOnly = false;
330 bool mIsLinkEdited = false;
332 QString mFilter;
335 bool mConfirmOverwrite = true;
336 StorageMode mStorageMode = GetFile;
337 RelativeStorage mRelativeStorage = Absolute;
338 QFileDialog::Options mOptions = QFileDialog::Options();
339
340 QLabel *mLinkLabel = nullptr;
341 QgsFileDropEdit *mLineEdit = nullptr;
342 QToolButton *mLinkEditButton = nullptr;
343 QToolButton *mFileWidgetButton = nullptr;
344 QHBoxLayout *mLayout = nullptr;
345
347 QString toUrl( const QString &path ) const;
348
350 QString relativePath( const QString &filePath, bool removeRelative ) const;
351
352 // QWidget interface
353 public:
354 QSize minimumSizeHint() const override;
355
356 friend class TestQgsFileWidget;
357 friend class TestQgsExternalStorageFileWidget;
358 friend class TestQgsExternalResourceWidgetWrapper;
359};
360
362
363
364
365#ifndef SIP_RUN
366
376class GUI_EXPORT QgsFileDropEdit: public QgsHighlightableLineEdit
377{
378 Q_OBJECT
379
380 public:
381 QgsFileDropEdit( QWidget *parent SIP_TRANSFERTHIS = nullptr );
382
383 void setStorageMode( QgsFileWidget::StorageMode storageMode ) { mStorageMode = storageMode; }
384
385 void setFilters( const QString &filters );
386
388 QStringList acceptableFilePaths( QDropEvent *event ) const;
389
390 signals:
391
395 void fileDropped( const QString &filePath );
396
397 protected:
398
400 QString acceptableFilePath( QDropEvent *event ) const;
401
402 void dragEnterEvent( QDragEnterEvent *event ) override;
403 void dragLeaveEvent( QDragLeaveEvent *event ) override;
404 void dropEvent( QDropEvent *event ) override;
405
406 private:
407
408
409 QStringList mAcceptableExtensions;
411 friend class TestQgsFileWidget;
412};
413
414#endif
416
417#endif // QGSFILEWIDGET_H
The QgsFileWidget class creates a widget for selecting a file or a folder.
Definition: qgsfilewidget.h:39
StorageMode
The StorageMode enum determines if the file picker should pick files or directories.
Definition: qgsfilewidget.h:67
@ GetMultipleFiles
Select multiple files.
Definition: qgsfilewidget.h:70
@ GetFile
Select a single file.
Definition: qgsfilewidget.h:68
@ GetDirectory
Select a directory.
Definition: qgsfilewidget.h:69
@ SaveFile
Select a single new or pre-existing file.
Definition: qgsfilewidget.h:71
QString mFilePath
void setConfirmOverwrite(bool confirmOverwrite)
Sets whether a confirmation to overwrite an existing file will appear.
void setSelectedFilter(const QString &selectedFilter)
Sets the selected filter when the file dialog opens.
void fileChanged(const QString &path)
Emitted whenever the current file or directory path is changed.
QString selectedFilter() const
Returns the selected filter from the last opened file dialog.
bool confirmOverwrite() const
Returns whether a confirmation will be shown when overwriting an existing file.
QString mSelectedFilter
RelativeStorage
The RelativeStorage enum determines if path is absolute, relative to the current project path or rela...
Definition: qgsfilewidget.h:79
QString mDefaultRoot
QString mDialogTitle
QLineEdit subclass with built in support for clearing the widget's value and handling custom null val...
A QgsFilterLineEdit subclass with the ability to "highlight" the edges of the widget.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_END
Definition: qgis_sip.h:203