Skip to content

Commit

Permalink
allow editing of links in file widget (#36190)
Browse files Browse the repository at this point in the history
  • Loading branch information
3nids committed May 6, 2020
1 parent 7e0c438 commit 0d5ea7d
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 14 deletions.
73 changes: 59 additions & 14 deletions src/gui/qgsfilewidget.cpp
Expand Up @@ -51,6 +51,9 @@ QgsFileWidget::QgsFileWidget( QWidget *parent )
mLinkLabel->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
mLinkLabel->setTextFormat( Qt::RichText );
mLinkLabel->hide(); // do not show by default
mLinkEditButton = new QToolButton( this );
mLinkEditButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionToggleEditing.svg" ) ) );
connect( mLinkEditButton, &QToolButton::clicked, this, &QgsFileWidget::editLink );

// otherwise, use the traditional QLineEdit subclass
mLineEdit = new QgsFileDropEdit( this );
Expand Down Expand Up @@ -100,8 +103,12 @@ void QgsFileWidget::setFilePath( QString path )

void QgsFileWidget::setReadOnly( bool readOnly )
{
mFileWidgetButton->setEnabled( !readOnly );
mLineEdit->setEnabled( !readOnly );
if ( mReadOnly == readOnly )
return;

mReadOnly = readOnly;

updateLayout();
}

QString QgsFileWidget::dialogTitle() const
Expand Down Expand Up @@ -152,26 +159,27 @@ void QgsFileWidget::textEdited( const QString &path )
emit fileChanged( mFilePath );
}

void QgsFileWidget::editLink()
{
if ( !mUseLink || mReadOnly )
return;

mIsLinkEdited = !mIsLinkEdited;
updateLayout();
}

bool QgsFileWidget::useLink() const
{
return mUseLink;
}

void QgsFileWidget::setUseLink( bool useLink )
{
if ( mUseLink == useLink )
return;

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 );
}
updateLayout();
}

bool QgsFileWidget::fullUrl() const
Expand Down Expand Up @@ -220,6 +228,43 @@ QgsFilterLineEdit *QgsFileWidget::lineEdit()
return mLineEdit;
}

void QgsFileWidget::updateLayout()
{
mLayout->removeWidget( mLineEdit );
mLayout->removeWidget( mLinkLabel );
mLayout->removeWidget( mLinkEditButton );

mLinkEditButton->setVisible( mUseLink && !mReadOnly );

mFileWidgetButton->setEnabled( !mReadOnly );
mLineEdit->setEnabled( !mReadOnly );

if ( mUseLink && !mIsLinkEdited )
{
mLayout->insertWidget( 0, mLinkLabel );
mLineEdit->setVisible( false );
mLinkLabel->setVisible( true );

if ( !mReadOnly )
{
mLayout->insertWidget( 1, mLinkEditButton );
mLinkEditButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionToggleEditing.svg" ) ) );
}
}
else
{
mLayout->insertWidget( 0, mLineEdit );
mLineEdit->setVisible( true );
mLinkLabel->setVisible( false );

if ( mIsLinkEdited )
{
mLayout->insertWidget( 1, mLinkEditButton );
mLinkEditButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionSaveEdits.svg" ) ) );
}
}
}

void QgsFileWidget::openFileDialog()
{
QgsSettings settings;
Expand Down
6 changes: 6 additions & 0 deletions src/gui/qgsfilewidget.h
Expand Up @@ -200,12 +200,17 @@ class GUI_EXPORT QgsFileWidget : public QWidget
private slots:
void openFileDialog();
void textEdited( const QString &path );
void editLink();

private:
void updateLayout();

QString mFilePath;
bool mButtonVisible = true;
bool mUseLink = false;
bool mFullUrl = false;
bool mReadOnly = false;
bool mIsLinkEdited = false;
QString mDialogTitle;
QString mFilter;
QString mSelectedFilter;
Expand All @@ -216,6 +221,7 @@ class GUI_EXPORT QgsFileWidget : public QWidget

QLabel *mLinkLabel = nullptr;
QgsFileDropEdit *mLineEdit = nullptr;
QToolButton *mLinkEditButton = nullptr;
QToolButton *mFileWidgetButton = nullptr;
QHBoxLayout *mLayout = nullptr;

Expand Down

0 comments on commit 0d5ea7d

Please sign in to comment.