25
25
#include < QFileDialog>
26
26
#include < QFileInfo>
27
27
#include < QMessageBox>
28
-
29
-
30
-
28
+ #include < QPushButton>
31
29
32
30
QgsEmbeddedLayerTreeModel::QgsEmbeddedLayerTreeModel ( QgsLayerTree *rootNode, QObject *parent )
33
31
: QgsLayerTreeModel( rootNode, parent )
@@ -49,22 +47,34 @@ QgsProjectLayerGroupDialog::QgsProjectLayerGroupDialog( QWidget *parent, const Q
49
47
, mRootGroup( new QgsLayerTree )
50
48
{
51
49
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 );
55
50
56
51
QgsSettings settings;
57
- restoreGeometry ( settings.value ( QStringLiteral ( " Windows/EmbedLayer/geometry" ) ).toByteArray () );
58
52
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 () );
59
57
if ( !projectFile.isEmpty () )
60
58
{
61
- mProjectFileLineEdit -> setText ( projectFile );
59
+ mProjectFileWidget -> setFilePath ( projectFile );
62
60
mProjectFileLabel ->hide ();
63
- mProjectFileLineEdit ->hide ();
64
- mBrowseFileToolButton ->hide ();
61
+ mProjectFileWidget ->hide ();
65
62
mShowEmbeddedContent = true ;
63
+ mPresetProjectMode = true ;
66
64
changeProjectFile ();
65
+ mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( true );
67
66
}
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
+
68
78
69
79
connect ( mButtonBox , &QDialogButtonBox::rejected, this , &QDialog::reject );
70
80
connect ( mButtonBox , &QDialogButtonBox::helpRequested, this , &QgsProjectLayerGroupDialog::showHelp );
@@ -119,53 +129,30 @@ QStringList QgsProjectLayerGroupDialog::selectedLayerNames() const
119
129
120
130
QString QgsProjectLayerGroupDialog::selectedProjectFile () const
121
131
{
122
- return mProjectFileLineEdit -> text ();
132
+ return mProjectFileWidget -> filePath ();
123
133
}
124
134
125
135
bool QgsProjectLayerGroupDialog::isValid () const
126
136
{
127
137
return nullptr != mTreeView ->layerTreeModel ();
128
138
}
129
139
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
-
153
140
void QgsProjectLayerGroupDialog::changeProjectFile ()
154
141
{
155
- QFile projectFile ( mProjectFileLineEdit -> text () );
142
+ QFile projectFile ( mProjectFileWidget -> filePath () );
156
143
if ( !projectFile.exists () )
157
144
{
158
145
return ;
159
146
}
160
147
161
- if ( mProjectPath == mProjectFileLineEdit -> text () )
148
+ if ( mProjectPath == mProjectFileWidget -> filePath () )
162
149
{
163
150
// already up to date
164
151
return ;
165
152
}
166
153
167
154
// 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 () )
169
156
{
170
157
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." ) );
171
158
return ;
@@ -203,7 +190,7 @@ void QgsProjectLayerGroupDialog::changeProjectFile()
203
190
204
191
connect ( mTreeView ->selectionModel (), &QItemSelectionModel::selectionChanged, this , &QgsProjectLayerGroupDialog::onTreeViewSelectionChanged );
205
192
206
- mProjectPath = mProjectFileLineEdit -> text ();
193
+ mProjectPath = mProjectFileWidget -> filePath ();
207
194
}
208
195
209
196
@@ -228,6 +215,9 @@ void QgsProjectLayerGroupDialog::onTreeViewSelectionChanged()
228
215
{
229
216
deselectChildren ( index );
230
217
}
218
+
219
+ if ( !mPresetProjectMode )
220
+ mButtonBox ->button ( QDialogButtonBox::Ok )->setEnabled ( !mTreeView ->selectionModel ()->selectedIndexes ().empty () );
231
221
}
232
222
233
223
0 commit comments