mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Merge pull request #4982 from nyalldawson/drop_file_drop_file_drop_file_drop_file_drop
Remove QgsFileDropEdit widget and integrate functionality into QgsFileWidget
This commit is contained in:
commit
434bda725f
@ -267,6 +267,7 @@ should now call QgsCoordinateReferenceSystem::invalidateCache() and QgsCoordinat
|
||||
- QgsDataDefinedSymbolDialog was removed. Code using this dialog should be reworked to use QgsPropertyOverrideButton
|
||||
- QgsDefaultPluginLayerLegend was removed. Use QgsMapLayer::setLegend() to provide legend nodes for plugin layers.
|
||||
- QgsFileNameWidgetWrapper was removed. Use QgsExternalResourceWidgetWrapper instead.
|
||||
- QgsFileDropEdit was removed. Use QgsFileWidget instead.
|
||||
- QgsFormAnnotationItem. Use QgsFormAnnotation instead.
|
||||
- QgsHtmlAnnotationItem. Use QgsHtmlAnnotation instead.
|
||||
- QgsHttpTransaction. This class was outdated and code should be ported to native Qt or Python implementations.
|
||||
|
@ -4,7 +4,6 @@
|
||||
%Include qgscustomdrophandler.sip
|
||||
%Include qgsdetaileditemdata.sip
|
||||
%Include qgsexpressionbuilderdialog.sip
|
||||
%Include qgsfiledropedit.sip
|
||||
%Include qgsgeometryrubberband.sip
|
||||
%Include qgsgui.sip
|
||||
%Include qgshelp.sip
|
||||
|
@ -9,8 +9,6 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class QgsFileWidget : QWidget
|
||||
{
|
||||
%Docstring
|
||||
@ -149,6 +147,14 @@ returns if the relative path is with respect to the project path or the default
|
||||
determines if the relative path is with respect to the project path or the default path
|
||||
%End
|
||||
|
||||
QLineEdit *lineEdit();
|
||||
%Docstring
|
||||
Returns a pointer to the widget's line edit, which can be used to customize
|
||||
the appearance and behavior of the line edit portion of the widget.
|
||||
.. versionadded:: 3.0
|
||||
:rtype: QLineEdit
|
||||
%End
|
||||
|
||||
signals:
|
||||
void fileChanged( const QString & );
|
||||
%Docstring
|
||||
@ -157,6 +163,10 @@ emitted as soon as the current file or directory is changed
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/************************************************************************
|
||||
* This file has been generated automatically from *
|
||||
* *
|
||||
|
@ -243,7 +243,6 @@ SET(QGIS_GUI_SRCS
|
||||
qgsfieldexpressionwidget.cpp
|
||||
qgsfieldvalidator.cpp
|
||||
qgsfieldvalueslineedit.cpp
|
||||
qgsfiledropedit.cpp
|
||||
qgsfilewidget.cpp
|
||||
qgsfilterlineedit.cpp
|
||||
qgsfloatingwidget.cpp
|
||||
@ -408,7 +407,6 @@ SET(QGIS_GUI_MOC_HDRS
|
||||
qgsfieldexpressionwidget.h
|
||||
qgsfieldvalidator.h
|
||||
qgsfieldvalueslineedit.h
|
||||
qgsfiledropedit.h
|
||||
qgsfilewidget.h
|
||||
qgsfilterlineedit.h
|
||||
qgsfloatingwidget.h
|
||||
@ -691,7 +689,6 @@ SET(QGIS_GUI_HDRS
|
||||
qgscustomdrophandler.h
|
||||
qgsdetaileditemdata.h
|
||||
qgsexpressionbuilderdialog.h
|
||||
qgsfiledropedit.h
|
||||
qgsgeometryrubberband.h
|
||||
qgsgui.h
|
||||
qgsguiutils.h
|
||||
|
@ -1,121 +0,0 @@
|
||||
/***************************************************************************
|
||||
qgsfiledropedit.cpp - File Dropable LineEdit
|
||||
--------------------------------------
|
||||
Date : 31-Jan-2007
|
||||
Copyright : (C) 2007 by Tom Elwertowski
|
||||
Email : telwertowski at users dot sourceforge dot net
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "qgsfiledropedit.h"
|
||||
#include <QDropEvent>
|
||||
#include <QFileInfo>
|
||||
#include <QPainter>
|
||||
#include <QUrl>
|
||||
#include <QMimeData>
|
||||
|
||||
QgsFileDropEdit::QgsFileDropEdit( QWidget *parent )
|
||||
: QLineEdit( parent )
|
||||
{
|
||||
mDirOnly = false;
|
||||
mFileOnly = true;
|
||||
mDragActive = false;
|
||||
setAcceptDrops( true );
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::setDirOnly( bool isDirOnly )
|
||||
{
|
||||
mDirOnly = isDirOnly;
|
||||
if ( mDirOnly )
|
||||
{
|
||||
mFileOnly = false;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::setFileOnly( bool isFileOnly )
|
||||
{
|
||||
mFileOnly = isFileOnly;
|
||||
if ( mFileOnly )
|
||||
{
|
||||
mDirOnly = false;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::setSuffixFilter( const QString &suffix )
|
||||
{
|
||||
mSuffix = suffix;
|
||||
}
|
||||
|
||||
QString QgsFileDropEdit::acceptableFilePath( QDropEvent *event ) const
|
||||
{
|
||||
QString path;
|
||||
if ( event->mimeData()->hasUrls() )
|
||||
{
|
||||
QFileInfo file( event->mimeData()->urls().first().toLocalFile() );
|
||||
if ( !( ( mFileOnly && !file.isFile() ) ||
|
||||
( mDirOnly && !file.isDir() ) ||
|
||||
( !mSuffix.isEmpty() && mSuffix.compare( file.suffix(), Qt::CaseInsensitive ) ) ) )
|
||||
path = file.filePath();
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dragEnterEvent( QDragEnterEvent *event )
|
||||
{
|
||||
QString filePath = acceptableFilePath( event );
|
||||
if ( !filePath.isEmpty() )
|
||||
{
|
||||
event->acceptProposedAction();
|
||||
mDragActive = true;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
QLineEdit::dragEnterEvent( event );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dragLeaveEvent( QDragLeaveEvent *event )
|
||||
{
|
||||
QLineEdit::dragLeaveEvent( event );
|
||||
event->accept();
|
||||
mDragActive = false;
|
||||
update();
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dropEvent( QDropEvent *event )
|
||||
{
|
||||
QString filePath = acceptableFilePath( event );
|
||||
if ( !filePath.isEmpty() )
|
||||
{
|
||||
setText( filePath );
|
||||
selectAll();
|
||||
setFocus( Qt::MouseFocusReason );
|
||||
event->acceptProposedAction();
|
||||
mDragActive = false;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
QLineEdit::dropEvent( event );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::paintEvent( QPaintEvent *e )
|
||||
{
|
||||
QLineEdit::paintEvent( e );
|
||||
if ( mDragActive )
|
||||
{
|
||||
QPainter p( this );
|
||||
int width = 2; // width of highlight rectangle inside frame
|
||||
p.setPen( QPen( palette().highlight(), width ) );
|
||||
QRect r = rect().adjusted( width, width, -width, -width );
|
||||
p.drawRect( r );
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
/***************************************************************************
|
||||
qgsfiledropedit.h - File Dropable LineEdit
|
||||
--------------------------------------
|
||||
Date : 31-Jan-2007
|
||||
Copyright : (C) 2007 by Tom Elwertowski
|
||||
Email : telwertowski at users dot sourceforge dot net
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef QGSFILEDROPEDIT_H
|
||||
#define QGSFILEDROPEDIT_H
|
||||
|
||||
#include <QLineEdit>
|
||||
#include "qgis.h"
|
||||
#include "qgis_gui.h"
|
||||
|
||||
|
||||
/** \ingroup gui
|
||||
* A line edit for capturing file names that can have files dropped onto
|
||||
* it via drag & drop.
|
||||
*
|
||||
* Dropping can be limited to files only, files with a specific extension
|
||||
or directories only. By default, dropping is limited to files only.
|
||||
*/
|
||||
class GUI_EXPORT QgsFileDropEdit: public QLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QgsFileDropEdit( QWidget *parent SIP_TRANSFERTHIS = 0 );
|
||||
|
||||
bool isDirOnly() const { return mDirOnly; }
|
||||
|
||||
/**
|
||||
Limit drops to directories.
|
||||
*/
|
||||
void setDirOnly( bool isDirOnly );
|
||||
|
||||
bool isFileOnly() const { return mFileOnly; }
|
||||
|
||||
/**
|
||||
Limit drops to files.
|
||||
*/
|
||||
void setFileOnly( bool isFileOnly );
|
||||
|
||||
QString suffixFilter() const { return mSuffix; }
|
||||
|
||||
/**
|
||||
Limit drops to files with specified extension.
|
||||
*/
|
||||
void setSuffixFilter( const QString &suffix );
|
||||
|
||||
protected:
|
||||
|
||||
virtual void dragEnterEvent( QDragEnterEvent *event ) override;
|
||||
virtual void dragLeaveEvent( QDragLeaveEvent *event ) override;
|
||||
virtual void dropEvent( QDropEvent *event ) override;
|
||||
virtual void paintEvent( QPaintEvent *e ) override;
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
Return file name if object meets drop criteria.
|
||||
*/
|
||||
QString acceptableFilePath( QDropEvent *event ) const;
|
||||
|
||||
QString mSuffix;
|
||||
bool mDirOnly;
|
||||
bool mFileOnly;
|
||||
bool mDragActive;
|
||||
};
|
||||
|
||||
#endif
|
@ -22,6 +22,7 @@
|
||||
#include <QFileDialog>
|
||||
#include <QGridLayout>
|
||||
#include <QUrl>
|
||||
#include <QDropEvent>
|
||||
|
||||
#include "qgssettings.h"
|
||||
#include "qgsfilterlineedit.h"
|
||||
@ -44,8 +45,8 @@ QgsFileWidget::QgsFileWidget( QWidget *parent )
|
||||
setBackgroundRole( QPalette::Window );
|
||||
setAutoFillBackground( true );
|
||||
|
||||
QGridLayout *layout = new QGridLayout();
|
||||
layout->setMargin( 0 );
|
||||
mLayout = new QHBoxLayout();
|
||||
mLayout->setMargin( 0 );
|
||||
|
||||
// If displaying a hyperlink, use a QLabel
|
||||
mLinkLabel = new QLabel( this );
|
||||
@ -56,20 +57,19 @@ QgsFileWidget::QgsFileWidget( QWidget *parent )
|
||||
mLinkLabel->setEnabled( true );
|
||||
mLinkLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
|
||||
mLinkLabel->setTextFormat( Qt::RichText );
|
||||
layout->addWidget( mLinkLabel, 0, 0 );
|
||||
mLinkLabel->hide(); // do not show by default
|
||||
|
||||
// otherwise, use the traditional QLineEdit
|
||||
mLineEdit = new QgsFilterLineEdit( this );
|
||||
// otherwise, use the traditional QLineEdit subclass
|
||||
mLineEdit = new QgsFileDropEdit( this );
|
||||
connect( mLineEdit, &QLineEdit::textChanged, this, &QgsFileWidget::textEdited );
|
||||
layout->addWidget( mLineEdit, 1, 0 );
|
||||
mLayout->addWidget( mLineEdit );
|
||||
|
||||
mFileWidgetButton = new QToolButton( this );
|
||||
mFileWidgetButton->setText( QStringLiteral( "…" ) );
|
||||
connect( mFileWidgetButton, &QAbstractButton::clicked, this, &QgsFileWidget::openFileDialog );
|
||||
layout->addWidget( mFileWidgetButton, 0, 1, 2, 1 );
|
||||
mLayout->addWidget( mFileWidgetButton );
|
||||
|
||||
setLayout( layout );
|
||||
setLayout( mLayout );
|
||||
}
|
||||
|
||||
QString QgsFileWidget::filePath()
|
||||
@ -112,6 +112,7 @@ QString QgsFileWidget::filter() const
|
||||
void QgsFileWidget::setFilter( const QString &filters )
|
||||
{
|
||||
mFilter = filters;
|
||||
mLineEdit->setFilters( filters );
|
||||
}
|
||||
|
||||
bool QgsFileWidget::fileWidgetButtonVisible() const
|
||||
@ -142,6 +143,16 @@ void QgsFileWidget::setUseLink( bool useLink )
|
||||
mUseLink = useLink;
|
||||
mLinkLabel->setVisible( mUseLink );
|
||||
mLineEdit->setVisible( !mUseLink );
|
||||
if ( mUseLink )
|
||||
{
|
||||
mLayout->removeWidget( mLineEdit );
|
||||
mLayout->insertWidget( 0, mLinkLabel );
|
||||
}
|
||||
else
|
||||
{
|
||||
mLayout->removeWidget( mLinkLabel );
|
||||
mLayout->insertWidget( 0, mLineEdit );
|
||||
}
|
||||
}
|
||||
|
||||
bool QgsFileWidget::fullUrl() const
|
||||
@ -172,6 +183,7 @@ QgsFileWidget::StorageMode QgsFileWidget::storageMode() const
|
||||
void QgsFileWidget::setStorageMode( QgsFileWidget::StorageMode storageMode )
|
||||
{
|
||||
mStorageMode = storageMode;
|
||||
mLineEdit->setStorageMode( storageMode );
|
||||
}
|
||||
|
||||
QgsFileWidget::RelativeStorage QgsFileWidget::relativeStorage() const
|
||||
@ -184,6 +196,11 @@ void QgsFileWidget::setRelativeStorage( QgsFileWidget::RelativeStorage relativeS
|
||||
mRelativeStorage = relativeStorage;
|
||||
}
|
||||
|
||||
QLineEdit *QgsFileWidget::lineEdit()
|
||||
{
|
||||
return mLineEdit;
|
||||
}
|
||||
|
||||
void QgsFileWidget::openFileDialog()
|
||||
{
|
||||
QgsSettings settings;
|
||||
@ -307,3 +324,101 @@ QString QgsFileWidget::toUrl( const QString &path ) const
|
||||
|
||||
return rep;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
|
||||
QgsFileDropEdit::QgsFileDropEdit( QWidget *parent )
|
||||
: QgsFilterLineEdit( parent )
|
||||
{
|
||||
mDragActive = false;
|
||||
setAcceptDrops( true );
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::setFilters( const QString &filters )
|
||||
{
|
||||
mAcceptableExtensions.clear();
|
||||
|
||||
if ( filters.contains( QStringLiteral( "*.*" ) ) )
|
||||
return; // everything is allowed!
|
||||
|
||||
QRegularExpression rx( "\\*\\.(\\w+)" );
|
||||
QRegularExpressionMatchIterator i = rx.globalMatch( filters );
|
||||
while ( i.hasNext() )
|
||||
{
|
||||
QRegularExpressionMatch match = i.next();
|
||||
if ( match.hasMatch() )
|
||||
{
|
||||
mAcceptableExtensions << match.captured( 1 ).toLower();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString QgsFileDropEdit::acceptableFilePath( QDropEvent *event ) const
|
||||
{
|
||||
QString path;
|
||||
if ( event->mimeData()->hasUrls() )
|
||||
{
|
||||
QFileInfo file( event->mimeData()->urls().first().toLocalFile() );
|
||||
if ( ( mStorageMode == QgsFileWidget::GetFile && file.isFile() &&
|
||||
( mAcceptableExtensions.isEmpty() || mAcceptableExtensions.contains( file.suffix(), Qt::CaseInsensitive ) ) )
|
||||
|| ( mStorageMode == QgsFileWidget::GetDirectory && file.isDir() ) )
|
||||
path = file.filePath();
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dragEnterEvent( QDragEnterEvent *event )
|
||||
{
|
||||
QString filePath = acceptableFilePath( event );
|
||||
if ( !filePath.isEmpty() )
|
||||
{
|
||||
event->acceptProposedAction();
|
||||
mDragActive = true;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
event->ignore();
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dragLeaveEvent( QDragLeaveEvent *event )
|
||||
{
|
||||
QgsFilterLineEdit::dragLeaveEvent( event );
|
||||
event->accept();
|
||||
mDragActive = false;
|
||||
update();
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::dropEvent( QDropEvent *event )
|
||||
{
|
||||
QString filePath = acceptableFilePath( event );
|
||||
if ( !filePath.isEmpty() )
|
||||
{
|
||||
setText( filePath );
|
||||
selectAll();
|
||||
setFocus( Qt::MouseFocusReason );
|
||||
event->acceptProposedAction();
|
||||
mDragActive = false;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
void QgsFileDropEdit::paintEvent( QPaintEvent *e )
|
||||
{
|
||||
QgsFilterLineEdit::paintEvent( e );
|
||||
if ( mDragActive )
|
||||
{
|
||||
QPainter p( this );
|
||||
int width = 2; // width of highlight rectangle inside frame
|
||||
p.setPen( QPen( palette().highlight(), width ) );
|
||||
QRect r = rect().adjusted( width, width, -width, -width );
|
||||
p.drawRect( r );
|
||||
}
|
||||
}
|
||||
|
||||
///@endcond
|
||||
|
@ -20,13 +20,13 @@
|
||||
class QLabel;
|
||||
class QToolButton;
|
||||
class QVariant;
|
||||
|
||||
class QgsFilterLineEdit;
|
||||
|
||||
class QgsFileDropEdit;
|
||||
class QHBoxLayout;
|
||||
#include <QWidget>
|
||||
|
||||
#include "qgis_gui.h"
|
||||
#include "qgis.h"
|
||||
#include "qgsfilterlineedit.h"
|
||||
|
||||
/** \ingroup gui
|
||||
* \brief The QgsFileWidget class creates a widget for selecting a file or a folder.
|
||||
@ -137,6 +137,13 @@ class GUI_EXPORT QgsFileWidget : public QWidget
|
||||
//! determines if the relative path is with respect to the project path or the default path
|
||||
void setRelativeStorage( QgsFileWidget::RelativeStorage relativeStorage );
|
||||
|
||||
/**
|
||||
* Returns a pointer to the widget's line edit, which can be used to customize
|
||||
* the appearance and behavior of the line edit portion of the widget.
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
QLineEdit *lineEdit();
|
||||
|
||||
signals:
|
||||
//! emitted as soon as the current file or directory is changed
|
||||
void fileChanged( const QString & );
|
||||
@ -157,8 +164,9 @@ class GUI_EXPORT QgsFileWidget : public QWidget
|
||||
RelativeStorage mRelativeStorage;
|
||||
|
||||
QLabel *mLinkLabel = nullptr;
|
||||
QgsFilterLineEdit *mLineEdit = nullptr;
|
||||
QgsFileDropEdit *mLineEdit = nullptr;
|
||||
QToolButton *mFileWidgetButton = nullptr;
|
||||
QHBoxLayout *mLayout = nullptr;
|
||||
|
||||
//! returns a HTML code with a link to the given file path
|
||||
QString toUrl( const QString &path ) const;
|
||||
@ -169,4 +177,52 @@ class GUI_EXPORT QgsFileWidget : public QWidget
|
||||
friend class TestQgsFileWidget;
|
||||
};
|
||||
|
||||
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
#ifndef SIP_RUN
|
||||
|
||||
/** \ingroup gui
|
||||
* A line edit for capturing file names that can have files dropped onto
|
||||
* it via drag & drop.
|
||||
*
|
||||
* Dropping can be limited to files only, files with a specific extension
|
||||
* or directories only. By default, dropping is limited to files only.
|
||||
* \note not available in Python bindings
|
||||
*/
|
||||
class GUI_EXPORT QgsFileDropEdit: public QgsFilterLineEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QgsFileDropEdit( QWidget *parent SIP_TRANSFERTHIS = 0 );
|
||||
|
||||
void setStorageMode( QgsFileWidget::StorageMode storageMode ) { mStorageMode = storageMode; }
|
||||
|
||||
void setFilters( const QString &filters );
|
||||
|
||||
protected:
|
||||
|
||||
virtual void dragEnterEvent( QDragEnterEvent *event ) override;
|
||||
virtual void dragLeaveEvent( QDragLeaveEvent *event ) override;
|
||||
virtual void dropEvent( QDropEvent *event ) override;
|
||||
virtual void paintEvent( QPaintEvent *e ) override;
|
||||
|
||||
private:
|
||||
|
||||
/**
|
||||
Return file name if object meets drop criteria.
|
||||
*/
|
||||
QString acceptableFilePath( QDropEvent *event ) const;
|
||||
|
||||
QStringList mAcceptableExtensions;
|
||||
QgsFileWidget::StorageMode mStorageMode = QgsFileWidget::GetFile;
|
||||
bool mDragActive;
|
||||
friend class TestQgsFileWidget;
|
||||
};
|
||||
|
||||
#endif
|
||||
///@endcond
|
||||
|
||||
#endif // QGSFILEWIDGET_H
|
||||
|
@ -51,7 +51,7 @@ QgsGPSPluginGui::QgsGPSPluginGui( const BabelMap &importers,
|
||||
// click it
|
||||
pbnOK = buttonBox->button( QDialogButtonBox::Ok );
|
||||
pbnOK->setEnabled( false );
|
||||
connect( leGPXFile, &QLineEdit::textChanged,
|
||||
connect( mFileWidget, &QgsFileWidget::fileChanged,
|
||||
this, &QgsGPSPluginGui::enableRelevantControls );
|
||||
connect( leIMPInput, &QLineEdit::textChanged,
|
||||
this, &QgsGPSPluginGui::enableRelevantControls );
|
||||
@ -75,7 +75,7 @@ QgsGPSPluginGui::QgsGPSPluginGui( const BabelMap &importers,
|
||||
this, &QgsGPSPluginGui::enableRelevantControls );
|
||||
|
||||
// drag and drop filter
|
||||
leGPXFile->setSuffixFilter( QStringLiteral( "gpx" ) );
|
||||
mFileWidget->setFilter( tr( "GPX files (*.gpx)" ) );
|
||||
}
|
||||
|
||||
QgsGPSPluginGui::~QgsGPSPluginGui()
|
||||
@ -92,7 +92,7 @@ void QgsGPSPluginGui::on_buttonBox_accepted()
|
||||
{
|
||||
case 0:
|
||||
// add a GPX layer?
|
||||
emit loadGPXFile( leGPXFile->text(), cbGPXWaypoints->isChecked(),
|
||||
emit loadGPXFile( mFileWidget->filePath(), cbGPXWaypoints->isChecked(),
|
||||
cbGPXRoutes->isChecked(), cbGPXTracks->isChecked() );
|
||||
break;
|
||||
|
||||
@ -180,7 +180,7 @@ void QgsGPSPluginGui::enableRelevantControls()
|
||||
// load GPX
|
||||
if ( tabWidget->currentIndex() == 0 )
|
||||
{
|
||||
if ( ( leGPXFile->text() == QLatin1String( "" ) ) )
|
||||
if ( !mFileWidget->filePath().isEmpty() )
|
||||
{
|
||||
pbnOK->setEnabled( false );
|
||||
cbGPXWaypoints->setEnabled( false );
|
||||
@ -259,7 +259,7 @@ void QgsGPSPluginGui::on_pbnGPXSelectFile_clicked()
|
||||
tr( "GPS eXchange format" ) + " (*.gpx)" );
|
||||
if ( !myFileNameQString.isEmpty() )
|
||||
{
|
||||
leGPXFile->setText( myFileNameQString );
|
||||
mFileWidget->setFilePath( myFileNameQString );
|
||||
settings.setValue( QStringLiteral( "Plugin-GPS/gpxdirectory" ), QFileInfo( myFileNameQString ).absolutePath() );
|
||||
}
|
||||
}
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>647</width>
|
||||
<height>277</height>
|
||||
<width>1217</width>
|
||||
<height>504</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -15,8 +15,7 @@
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset>
|
||||
<normaloff/>
|
||||
</iconset>
|
||||
<normaloff>.</normaloff>.</iconset>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
@ -30,25 +29,15 @@
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,1">
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsFileWidget" name="mFileWidget" native="true"/>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="lblGPXFile">
|
||||
<property name="text">
|
||||
<string>File</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>pbnGPXSelectFile</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QgsFileDropEdit" name="leGPXFile"/>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="pbnGPXSelectFile">
|
||||
<property name="text">
|
||||
<string>Browse...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@ -655,15 +644,14 @@
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QgsFileDropEdit</class>
|
||||
<extends>QLineEdit</extends>
|
||||
<header>qgsfiledropedit.h</header>
|
||||
<class>QgsFileWidget</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>qgsfilewidget.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>tabWidget</tabstop>
|
||||
<tabstop>leGPXFile</tabstop>
|
||||
<tabstop>pbnGPXSelectFile</tabstop>
|
||||
<tabstop>cbGPXWaypoints</tabstop>
|
||||
<tabstop>cbGPXRoutes</tabstop>
|
||||
<tabstop>cbGPXTracks</tabstop>
|
||||
@ -693,8 +681,6 @@
|
||||
<tabstop>leCONVLayer</tabstop>
|
||||
<tabstop>buttonBox</tabstop>
|
||||
</tabstops>
|
||||
<resources>
|
||||
<include location="qgsgps_plugin.qrc"/>
|
||||
</resources>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "qgstest.h"
|
||||
|
||||
#include "qgsfilewidget.h"
|
||||
#include <memory>
|
||||
|
||||
class TestQgsFileWidget: public QObject
|
||||
{
|
||||
@ -29,6 +30,7 @@ class TestQgsFileWidget: public QObject
|
||||
|
||||
void relativePath();
|
||||
void toUrl();
|
||||
void testDroppedFiles();
|
||||
|
||||
};
|
||||
|
||||
@ -81,7 +83,62 @@ void TestQgsFileWidget::toUrl()
|
||||
QCOMPARE( w->toUrl( "../test2/file6.ext" ), QString( "<a href=\"file:///home/test2/file6.ext\">file6.ext</a>" ) );
|
||||
}
|
||||
|
||||
void TestQgsFileWidget::testDroppedFiles()
|
||||
{
|
||||
QgsFileWidget *w = new QgsFileWidget();
|
||||
w->setStorageMode( QgsFileWidget::GetFile );
|
||||
|
||||
// should not accept dropped folders
|
||||
std::unique_ptr< QMimeData > mime( new QMimeData() );
|
||||
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR ) );
|
||||
std::unique_ptr< QDropEvent > event( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
|
||||
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QVERIFY( w->lineEdit()->text().isEmpty() );
|
||||
|
||||
// but dropped files should be fine
|
||||
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) ) );
|
||||
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QCOMPARE( w->lineEdit()->text(), TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) );
|
||||
|
||||
// with file filter
|
||||
w->setFilter( QStringLiteral( "Data (*.shp)" ) );
|
||||
w->setFilePath( QString() );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QCOMPARE( w->lineEdit()->text(), TEST_DATA_DIR + QStringLiteral( "/bug5598.shp" ) );
|
||||
w->setFilePath( QString() );
|
||||
// should be rejected, not compatible with filter
|
||||
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/encoded_html.html" ) ) );
|
||||
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QVERIFY( w->lineEdit()->text().isEmpty() );
|
||||
// new filter, should be allowed now
|
||||
w->setFilter( QStringLiteral( "Data (*.shp);;HTML (*.HTML)" ) );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QCOMPARE( w->lineEdit()->text(), TEST_DATA_DIR + QStringLiteral( "/encoded_html.html" ) );
|
||||
|
||||
//try with wildcard filter
|
||||
w->setFilter( QStringLiteral( "All files (*.*);;Data (*.shp);;HTML (*.HTML)" ) );
|
||||
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR + QStringLiteral( "/bug5598.prj" ) ) );
|
||||
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QCOMPARE( w->lineEdit()->text(), TEST_DATA_DIR + QStringLiteral( "/bug5598.prj" ) );
|
||||
|
||||
// try with folders
|
||||
w->setStorageMode( QgsFileWidget::GetDirectory );
|
||||
w->setFilePath( QString() );
|
||||
// should be rejected
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QVERIFY( w->lineEdit()->text().isEmpty() );
|
||||
|
||||
// but dropping a folder should work
|
||||
mime->setUrls( QList<QUrl>() << QUrl::fromLocalFile( TEST_DATA_DIR ) );
|
||||
event.reset( new QDropEvent( QPointF( 1, 1 ), Qt::CopyAction, mime.get(), Qt::LeftButton, Qt::NoModifier ) );
|
||||
qobject_cast< QgsFileDropEdit * >( w->lineEdit() )->dropEvent( event.get() );
|
||||
QCOMPARE( w->lineEdit()->text(), QString( TEST_DATA_DIR ) );
|
||||
|
||||
}
|
||||
|
||||
QGSTEST_MAIN( TestQgsFileWidget )
|
||||
#include "testqgsfilewidget.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user