Skip to content

Commit 03151f8

Browse files
committed
Embed Layers Dialog UI fixes
- Use a QgsFileWidget - Disable OK button when no layers are selected
1 parent 6ea79e3 commit 03151f8

3 files changed

+40
-50
lines changed

src/app/qgsprojectlayergroupdialog.cpp

+28-38
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
#include <QFileDialog>
2626
#include <QFileInfo>
2727
#include <QMessageBox>
28-
29-
30-
28+
#include <QPushButton>
3129

3230
QgsEmbeddedLayerTreeModel::QgsEmbeddedLayerTreeModel( QgsLayerTree *rootNode, QObject *parent )
3331
: QgsLayerTreeModel( rootNode, parent )
@@ -49,22 +47,34 @@ QgsProjectLayerGroupDialog::QgsProjectLayerGroupDialog( QWidget *parent, const Q
4947
, mRootGroup( new QgsLayerTree )
5048
{
5149
setupUi( this );
52-
connect( mBrowseFileToolButton, &QToolButton::clicked, this, &QgsProjectLayerGroupDialog::mBrowseFileToolButton_clicked );
53-
connect( mProjectFileLineEdit, &QLineEdit::editingFinished, this, &QgsProjectLayerGroupDialog::mProjectFileLineEdit_editingFinished );
54-
connect( mButtonBox, &QDialogButtonBox::accepted, this, &QgsProjectLayerGroupDialog::mButtonBox_accepted );
5550

5651
QgsSettings settings;
57-
restoreGeometry( settings.value( QStringLiteral( "Windows/EmbedLayer/geometry" ) ).toByteArray() );
5852

53+
mProjectFileWidget->setStorageMode( QgsFileWidget::GetFile );
54+
mProjectFileWidget->setFilter( tr( "QGIS files" ) + QStringLiteral( " (*.qgs *.QGS)" ) );
55+
mProjectFileWidget->setDialogTitle( tr( "Select Project File" ) );
56+
mProjectFileWidget->setDefaultRoot( settings.value( QStringLiteral( "/qgis/last_embedded_project_path" ), QDir::homePath() ).toString() );
5957
if ( !projectFile.isEmpty() )
6058
{
61-
mProjectFileLineEdit->setText( projectFile );
59+
mProjectFileWidget->setFilePath( projectFile );
6260
mProjectFileLabel->hide();
63-
mProjectFileLineEdit->hide();
64-
mBrowseFileToolButton->hide();
61+
mProjectFileWidget->hide();
6562
mShowEmbeddedContent = true;
63+
mPresetProjectMode = true;
6664
changeProjectFile();
65+
mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( true );
6766
}
67+
else
68+
{
69+
mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( false );
70+
}
71+
72+
connect( mProjectFileWidget, &QgsFileWidget::fileChanged, this, &QgsProjectLayerGroupDialog::changeProjectFile );
73+
74+
connect( mButtonBox, &QDialogButtonBox::accepted, this, &QgsProjectLayerGroupDialog::mButtonBox_accepted );
75+
76+
restoreGeometry( settings.value( QStringLiteral( "Windows/EmbedLayer/geometry" ) ).toByteArray() );
77+
6878

6979
connect( mButtonBox, &QDialogButtonBox::rejected, this, &QDialog::reject );
7080
connect( mButtonBox, &QDialogButtonBox::helpRequested, this, &QgsProjectLayerGroupDialog::showHelp );
@@ -119,53 +129,30 @@ QStringList QgsProjectLayerGroupDialog::selectedLayerNames() const
119129

120130
QString QgsProjectLayerGroupDialog::selectedProjectFile() const
121131
{
122-
return mProjectFileLineEdit->text();
132+
return mProjectFileWidget->filePath();
123133
}
124134

125135
bool QgsProjectLayerGroupDialog::isValid() const
126136
{
127137
return nullptr != mTreeView->layerTreeModel();
128138
}
129139

130-
void QgsProjectLayerGroupDialog::mBrowseFileToolButton_clicked()
131-
{
132-
//line edit might emit editingFinished signal when losing focus
133-
mProjectFileLineEdit->blockSignals( true );
134-
135-
QgsSettings s;
136-
QString projectFile = QFileDialog::getOpenFileName( this,
137-
tr( "Select project file" ),
138-
s.value( QStringLiteral( "/qgis/last_embedded_project_path" ), QDir::homePath() ).toString(),
139-
tr( "QGIS files" ) + " (*.qgs *.QGS)" );
140-
if ( !projectFile.isEmpty() )
141-
{
142-
mProjectFileLineEdit->setText( projectFile );
143-
}
144-
changeProjectFile();
145-
mProjectFileLineEdit->blockSignals( false );
146-
}
147-
148-
void QgsProjectLayerGroupDialog::mProjectFileLineEdit_editingFinished()
149-
{
150-
changeProjectFile();
151-
}
152-
153140
void QgsProjectLayerGroupDialog::changeProjectFile()
154141
{
155-
QFile projectFile( mProjectFileLineEdit->text() );
142+
QFile projectFile( mProjectFileWidget->filePath() );
156143
if ( !projectFile.exists() )
157144
{
158145
return;
159146
}
160147

161-
if ( mProjectPath == mProjectFileLineEdit->text() )
148+
if ( mProjectPath == mProjectFileWidget->filePath() )
162149
{
163150
//already up to date
164151
return;
165152
}
166153

167154
//check we are not embedding from/to the same project
168-
if ( mProjectFileLineEdit->isVisible() && mProjectFileLineEdit->text() == QgsProject::instance()->fileName() )
155+
if ( mProjectFileWidget->isVisible() && mProjectFileWidget->filePath() == QgsProject::instance()->fileName() )
169156
{
170157
QMessageBox::critical( nullptr, tr( "Embed Layers and Groups" ), tr( "Recursive embedding is not supported. It is not possible to embed layers / groups from the current project." ) );
171158
return;
@@ -203,7 +190,7 @@ void QgsProjectLayerGroupDialog::changeProjectFile()
203190

204191
connect( mTreeView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &QgsProjectLayerGroupDialog::onTreeViewSelectionChanged );
205192

206-
mProjectPath = mProjectFileLineEdit->text();
193+
mProjectPath = mProjectFileWidget->filePath();
207194
}
208195

209196

@@ -228,6 +215,9 @@ void QgsProjectLayerGroupDialog::onTreeViewSelectionChanged()
228215
{
229216
deselectChildren( index );
230217
}
218+
219+
if ( !mPresetProjectMode )
220+
mButtonBox->button( QDialogButtonBox::Ok )->setEnabled( !mTreeView->selectionModel()->selectedIndexes().empty() );
231221
}
232222

233223

src/app/qgsprojectlayergroupdialog.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,6 @@ class APP_EXPORT QgsProjectLayerGroupDialog: public QDialog, private Ui::QgsProj
6060
bool isValid() const;
6161

6262
private slots:
63-
void mBrowseFileToolButton_clicked();
64-
void mProjectFileLineEdit_editingFinished();
6563
void onTreeViewSelectionChanged();
6664
void mButtonBox_accepted();
6765
void showHelp();
@@ -72,6 +70,7 @@ class APP_EXPORT QgsProjectLayerGroupDialog: public QDialog, private Ui::QgsProj
7270
void deselectChildren( const QModelIndex &index );
7371
QString mProjectPath;
7472
bool mShowEmbeddedContent = false;
73+
bool mPresetProjectMode = false;
7574

7675
QgsLayerTree *mRootGroup = nullptr;
7776
};

src/ui/qgsprojectlayergroupdialogbase.ui

+11-10
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</property>
1616
<layout class="QGridLayout" name="gridLayout">
1717
<item row="0" column="0">
18-
<layout class="QHBoxLayout" name="horizontalLayout">
18+
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
1919
<item>
2020
<widget class="QLabel" name="mProjectFileLabel">
2121
<property name="text">
@@ -24,12 +24,9 @@
2424
</widget>
2525
</item>
2626
<item>
27-
<widget class="QLineEdit" name="mProjectFileLineEdit"/>
28-
</item>
29-
<item>
30-
<widget class="QToolButton" name="mBrowseFileToolButton">
31-
<property name="text">
32-
<string>…</string>
27+
<widget class="QgsFileWidget" name="mProjectFileWidget" native="true">
28+
<property name="focusPolicy">
29+
<enum>Qt::StrongFocus</enum>
3330
</property>
3431
</widget>
3532
</item>
@@ -63,12 +60,16 @@
6360
<extends>QTreeView</extends>
6461
<header>qgslayertreeview.h</header>
6562
</customwidget>
63+
<customwidget>
64+
<class>QgsFileWidget</class>
65+
<extends>QWidget</extends>
66+
<header>qgsfilewidget.h</header>
67+
<container>1</container>
68+
</customwidget>
6669
</customwidgets>
6770
<tabstops>
68-
<tabstop>mProjectFileLineEdit</tabstop>
69-
<tabstop>mBrowseFileToolButton</tabstop>
71+
<tabstop>mProjectFileWidget</tabstop>
7072
<tabstop>mTreeView</tabstop>
71-
<tabstop>mButtonBox</tabstop>
7273
</tabstops>
7374
<resources/>
7475
<connections/>

0 commit comments

Comments
 (0)