Skip to content

Commit f78af8b

Browse files
committedNov 21, 2013
[saveas] Template for the driver options
1 parent 584aba7 commit f78af8b

File tree

5 files changed

+1312
-147
lines changed

5 files changed

+1312
-147
lines changed
 

‎src/app/ogr/qgsvectorlayersaveasdialog.cpp

Lines changed: 195 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
#include "qgsvectorlayersaveasdialog.h"
2020
#include "qgsgenericprojectionselector.h"
2121
#include "qgsvectordataprovider.h"
22-
#include "qgsvectorfilewriter.h"
2322
#include "qgscoordinatereferencesystem.h"
2423

2524
#include <QSettings>
@@ -90,6 +89,68 @@ void QgsVectorLayerSaveAsDialog::setup()
9089
on_mSymbologyExportComboBox_currentIndexChanged( mSymbologyExportComboBox->currentText() );
9190
}
9291

92+
QList<QPair<QLabel*, QWidget*> > QgsVectorLayerSaveAsDialog::createControls( const QMap<QString, QgsVectorFileWriter::Option*>& options )
93+
{
94+
QList<QPair<QLabel*, QWidget*> > controls;
95+
QMap<QString, QgsVectorFileWriter::Option*>::ConstIterator it;
96+
97+
for ( it = options.constBegin(); it != options.constEnd(); ++it )
98+
{
99+
QgsVectorFileWriter::Option* option = it.value();
100+
QLabel* label = new QLabel( it.key() );
101+
QWidget* control;
102+
switch ( option->type )
103+
{
104+
case QgsVectorFileWriter::Int:
105+
{
106+
QgsVectorFileWriter::IntOption* opt = dynamic_cast<QgsVectorFileWriter::IntOption*>( option );
107+
QSpinBox* sb = new QSpinBox();
108+
sb->setObjectName( it.key() );
109+
sb->setValue( opt->defaultValue );
110+
control = sb;
111+
break;
112+
}
113+
114+
case QgsVectorFileWriter::Set:
115+
{
116+
QgsVectorFileWriter::SetOption* opt = dynamic_cast<QgsVectorFileWriter::SetOption*>( option );
117+
QComboBox* cb = new QComboBox();
118+
cb->setObjectName( it.key() );
119+
Q_FOREACH( const QString& val, opt->values )
120+
{
121+
cb->addItem( val, val );
122+
}
123+
if ( opt->allowNone )
124+
cb->addItem( tr( "<Default>" ), QVariant( QVariant::String ) );
125+
int idx = cb->findText( opt->defaultValue );
126+
if ( idx == -1 )
127+
idx = cb->findData( QVariant( QVariant::String ) );
128+
cb->setCurrentIndex( idx );
129+
control = cb;
130+
break;
131+
}
132+
133+
case QgsVectorFileWriter::String:
134+
{
135+
QgsVectorFileWriter::StringOption* opt = dynamic_cast<QgsVectorFileWriter::StringOption*>( option );
136+
QLineEdit* le = new QLineEdit( opt->defaultValue );
137+
le->setObjectName( it.key() );
138+
control = le;
139+
break;
140+
}
141+
}
142+
143+
// Pack the tooltip in some html element, so it gets linebreaks.
144+
label->setToolTip( QString( "<p>%1</p>" ).arg( option->docString ) );
145+
control->setToolTip( QString( "<p>%1</p>" ).arg( option->docString ) );
146+
147+
controls << QPair<QLabel*, QWidget*>( label, control );
148+
149+
}
150+
151+
return controls;
152+
}
153+
93154
QgsVectorLayerSaveAsDialog::~QgsVectorLayerSaveAsDialog()
94155
{
95156
QSettings settings;
@@ -133,6 +194,62 @@ void QgsVectorLayerSaveAsDialog::on_mFormatComboBox_currentIndexChanged( int idx
133194
mEncodingComboBox->setEnabled( true );
134195
mSkipAttributeCreation->setEnabled( true );
135196
}
197+
198+
QgsVectorFileWriter::MetaData driverMetaData;
199+
200+
while ( mDatasourceOptionsGroupBox->layout()->count() )
201+
{
202+
QLayoutItem* item = mDatasourceOptionsGroupBox->layout()->takeAt( 0 );
203+
delete item->widget();
204+
delete item;
205+
}
206+
207+
while ( mLayerOptionsGroupBox->layout()->count() )
208+
{
209+
QLayoutItem* item = mLayerOptionsGroupBox->layout()->takeAt( 0 );
210+
delete item->widget();
211+
delete item;
212+
}
213+
214+
// workaround so the Q_FOREACH macro does not get confused by the ','
215+
typedef QPair<QLabel*, QWidget*> LabelControlPair;
216+
217+
if ( QgsVectorFileWriter::driverMetadata( format(), driverMetaData ) )
218+
{
219+
if ( driverMetaData.driverOptions.size() != 0 )
220+
{
221+
mDatasourceOptionsGroupBox->setVisible( true );
222+
QList<QPair<QLabel*, QWidget*> > controls = createControls( driverMetaData.driverOptions );
223+
224+
QFormLayout* datasourceLayout = dynamic_cast<QFormLayout*>( mDatasourceOptionsGroupBox->layout() );
225+
226+
Q_FOREACH( const LabelControlPair& control, controls )
227+
{
228+
datasourceLayout->addRow( control.first, control.second );
229+
}
230+
}
231+
else
232+
{
233+
mDatasourceOptionsGroupBox->setVisible( false );
234+
}
235+
236+
if ( driverMetaData.layerOptions.size() != 0 )
237+
{
238+
mLayerOptionsGroupBox->setVisible( true );
239+
QList<QPair<QLabel*, QWidget*> > controls = createControls( driverMetaData.layerOptions );
240+
241+
QFormLayout* layerOptionsLayout = dynamic_cast<QFormLayout*>( mLayerOptionsGroupBox->layout() );
242+
243+
Q_FOREACH( const LabelControlPair& control, controls )
244+
{
245+
layerOptionsLayout->addRow( control.first, control.second );
246+
}
247+
}
248+
else
249+
{
250+
mLayerOptionsGroupBox->setVisible( false );
251+
}
252+
}
136253
}
137254

138255
void QgsVectorLayerSaveAsDialog::on_browseFilename_clicked()
@@ -199,12 +316,87 @@ long QgsVectorLayerSaveAsDialog::crs() const
199316

200317
QStringList QgsVectorLayerSaveAsDialog::datasourceOptions() const
201318
{
202-
return mOgrDatasourceOptions->toPlainText().split( "\n" );
319+
QStringList options;
320+
321+
QgsVectorFileWriter::MetaData driverMetaData;
322+
323+
if ( QgsVectorFileWriter::driverMetadata( format(), driverMetaData ) )
324+
{
325+
QMap<QString, QgsVectorFileWriter::Option*>::ConstIterator it;
326+
327+
for ( it = driverMetaData.driverOptions.constBegin(); it != driverMetaData.driverOptions.constEnd(); ++it )
328+
{
329+
switch ( it.value()->type )
330+
{
331+
case QgsVectorFileWriter::Int:
332+
{
333+
QSpinBox* sb = mDatasourceOptionsGroupBox->findChild<QSpinBox*>( it.key() );
334+
if ( sb )
335+
options << QString( "%1=%2" ).arg( it.key() ).arg( sb->value() );
336+
break;
337+
}
338+
339+
case QgsVectorFileWriter::Set:
340+
{
341+
QComboBox* cb = mDatasourceOptionsGroupBox->findChild<QComboBox*>( it.key() );
342+
if ( cb && !cb->itemData( cb->currentIndex() ).isNull() )
343+
options << QString( "%1=%2" ).arg( it.key() ).arg( cb->currentText() );
344+
break;
345+
}
346+
347+
case QgsVectorFileWriter::String:
348+
{
349+
QLineEdit* le = mDatasourceOptionsGroupBox->findChild<QLineEdit*>( it.key() );
350+
if ( le )
351+
options << QString( "%1=%2" ).arg( it.key() ).arg( le->text() );
352+
break;
353+
}
354+
}
355+
}
356+
}
357+
358+
return options + mOgrDatasourceOptions->toPlainText().split( "\n" );
203359
}
204360

205361
QStringList QgsVectorLayerSaveAsDialog::layerOptions() const
206362
{
207-
return mOgrLayerOptions->toPlainText().split( "\n" );
363+
QStringList options;
364+
365+
QgsVectorFileWriter::MetaData driverMetaData;
366+
367+
if ( QgsVectorFileWriter::driverMetadata( format(), driverMetaData ) )
368+
{
369+
QMap<QString, QgsVectorFileWriter::Option*>::ConstIterator it;
370+
371+
for ( it = driverMetaData.layerOptions.constBegin(); it != driverMetaData.layerOptions.constEnd(); ++it )
372+
{
373+
switch ( it.value()->type )
374+
{
375+
case QgsVectorFileWriter::Int:
376+
{
377+
QSpinBox* sb = mLayerOptionsGroupBox->findChild<QSpinBox*>( it.key() );
378+
options << QString( "%1=%2" ).arg( it.key() ).arg( sb->value() );
379+
break;
380+
}
381+
382+
case QgsVectorFileWriter::Set:
383+
{
384+
QComboBox* cb = mLayerOptionsGroupBox->findChild<QComboBox*>( it.key() );
385+
options << QString( "%1=%2" ).arg( it.key() ).arg( cb->currentText() );
386+
break;
387+
}
388+
389+
case QgsVectorFileWriter::String:
390+
{
391+
QLineEdit* le = mLayerOptionsGroupBox->findChild<QLineEdit*>( it.key() );
392+
options << QString( "%1=%2" ).arg( it.key() ).arg( le->text() );
393+
break;
394+
}
395+
}
396+
}
397+
}
398+
399+
return options + mOgrLayerOptions->toPlainText().split( "\n" );
208400
}
209401

210402
bool QgsVectorLayerSaveAsDialog::skipAttributeCreation() const

‎src/app/ogr/qgsvectorlayersaveasdialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <ui_qgsvectorlayersaveasdialogbase.h>
2222
#include <QDialog>
2323
#include "qgscontexthelp.h"
24+
#include "qgsvectorfilewriter.h"
2425

2526
/**
2627
* Class to select destination file, type and CRS for ogr layrs
@@ -67,6 +68,7 @@ class QgsVectorLayerSaveAsDialog : public QDialog, private Ui::QgsVectorLayerSav
6768

6869
private:
6970
void setup();
71+
QList< QPair< QLabel*, QWidget* > > createControls( const QMap<QString, QgsVectorFileWriter::Option*>& options );
7072

7173
long mCRS;
7274
};

‎src/core/qgsvectorfilewriter.cpp

Lines changed: 851 additions & 0 deletions
Large diffs are not rendered by default.

‎src/core/qgsvectorfilewriter.h

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,94 @@ class QTextCodec;
4242
class CORE_EXPORT QgsVectorFileWriter
4343
{
4444
public:
45+
enum OptionType
46+
{
47+
Set,
48+
String,
49+
Int
50+
};
51+
52+
class Option
53+
{
54+
public:
55+
Option( const QString& docString, OptionType type )
56+
: docString( docString )
57+
, type( type )
58+
{}
59+
60+
virtual ~Option() {}
61+
62+
QString docString;
63+
OptionType type;
64+
};
65+
66+
class SetOption : public Option
67+
{
68+
public:
69+
SetOption( const QString& docString, QStringList values, const QString& defaultValue, bool allowNone = false )
70+
: Option( docString, Set )
71+
, values( values.toSet() )
72+
, defaultValue( defaultValue )
73+
, allowNone( allowNone )
74+
{}
75+
76+
QSet<QString> values;
77+
QString defaultValue;
78+
bool allowNone;
79+
};
80+
81+
class StringOption: public Option
82+
{
83+
public:
84+
StringOption( const QString& docString, const QString& defaultValue = QString() )
85+
: Option( docString, String )
86+
, defaultValue( defaultValue )
87+
{}
88+
89+
QString defaultValue;
90+
};
91+
92+
class IntOption: public Option
93+
{
94+
public:
95+
IntOption( const QString& docString, int defaultValue )
96+
: Option( docString, Int )
97+
, defaultValue( defaultValue )
98+
{}
99+
100+
int defaultValue;
101+
};
102+
103+
class BoolOption : public SetOption
104+
{
105+
public:
106+
BoolOption( const QString& docString, bool defaultValue )
107+
: SetOption( docString, QStringList() << "YES" << "NO", defaultValue ? "YES" : "NO" )
108+
{}
109+
};
110+
111+
112+
struct MetaData
113+
{
114+
MetaData()
115+
{}
116+
117+
MetaData( QString longName, QString trLongName, QString glob, QString ext, QMap<QString, Option*> driverOptions, QMap<QString, Option*> layerOptions )
118+
: longName( longName )
119+
, trLongName( trLongName )
120+
, glob( glob )
121+
, ext( ext )
122+
, driverOptions( driverOptions )
123+
, layerOptions( layerOptions )
124+
{}
125+
126+
QString longName;
127+
QString trLongName;
128+
QString glob;
129+
QString ext;
130+
QMap<QString, Option*> driverOptions;
131+
QMap<QString, Option*> layerOptions;
132+
};
45133

46134
enum WriterError
47135
{
@@ -170,6 +258,8 @@ class CORE_EXPORT QgsVectorFileWriter
170258
double symbologyScaleDenominator() const { return mSymbologyScaleDenominator; }
171259
void setSymbologyScaleDenominator( double d ) { mSymbologyScaleDenominator = d; }
172260

261+
static bool driverMetadata( const QString& driverName, MetaData& driverMetadata );
262+
173263
protected:
174264
//! @note not available in python bindings
175265
OGRGeometryH createEmptyGeometry( QGis::WkbType wkbType );
@@ -202,6 +292,10 @@ class CORE_EXPORT QgsVectorFileWriter
202292
double mSymbologyScaleDenominator;
203293

204294
private:
295+
static QMap<QString, MetaData> initMetaData();
296+
/**
297+
* @deprecated
298+
*/
205299
static bool driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext );
206300
void createSymbolLayerTable( QgsVectorLayer* vl, const QgsCoordinateTransform* ct, OGRDataSourceH ds );
207301
OGRFeatureH createFeature( QgsFeature& feature );
@@ -217,7 +311,7 @@ class CORE_EXPORT QgsVectorFileWriter
217311
QgsFeatureRendererV2* symbologyRenderer( QgsVectorLayer* vl ) const;
218312
/**Adds attributes needed for classification*/
219313
void addRendererAttributes( QgsVectorLayer* vl, QgsAttributeList& attList );
220-
314+
static QMap<QString, MetaData> sDriverMetadata;
221315
};
222316

223317
#endif

‎src/ui/qgsvectorlayersaveasdialogbase.ui

Lines changed: 169 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>383</width>
10-
<height>444</height>
9+
<width>574</width>
10+
<height>652</height>
1111
</rect>
1212
</property>
1313
<property name="sizePolicy">
@@ -23,86 +23,23 @@
2323
<property name="sizeConstraint">
2424
<enum>QLayout::SetMinAndMaxSize</enum>
2525
</property>
26-
<item row="1" column="1">
27-
<widget class="QLineEdit" name="leFilename">
28-
<property name="enabled">
29-
<bool>false</bool>
30-
</property>
31-
</widget>
32-
</item>
33-
<item row="6" column="2">
34-
<widget class="QPushButton" name="browseCRS">
35-
<property name="text">
36-
<string>Browse</string>
37-
</property>
38-
</widget>
39-
</item>
40-
<item row="4" column="0">
41-
<widget class="QLabel" name="label_4">
42-
<property name="text">
43-
<string>Encoding</string>
44-
</property>
45-
<property name="buddy">
46-
<cstring>mEncodingComboBox</cstring>
47-
</property>
48-
</widget>
49-
</item>
50-
<item row="5" column="0" rowspan="2">
51-
<widget class="QLabel" name="label_3">
52-
<property name="text">
53-
<string>CRS</string>
54-
</property>
55-
<property name="buddy">
56-
<cstring>leCRS</cstring>
57-
</property>
58-
</widget>
59-
</item>
60-
<item row="4" column="1" colspan="2">
61-
<widget class="QComboBox" name="mEncodingComboBox"/>
62-
</item>
6326
<item row="7" column="0">
6427
<widget class="QLabel" name="mSymbologyExportLabel">
6528
<property name="text">
6629
<string>Symbology export</string>
6730
</property>
6831
</widget>
6932
</item>
70-
<item row="1" column="0">
71-
<widget class="QLabel" name="label">
72-
<property name="text">
73-
<string>Save as</string>
74-
</property>
75-
<property name="buddy">
76-
<cstring>leFilename</cstring>
77-
</property>
78-
</widget>
79-
</item>
80-
<item row="7" column="1" colspan="2">
81-
<widget class="QComboBox" name="mSymbologyExportComboBox"/>
82-
</item>
83-
<item row="1" column="2">
84-
<widget class="QPushButton" name="browseFilename">
85-
<property name="enabled">
86-
<bool>false</bool>
33+
<item row="12" column="0">
34+
<widget class="QCheckBox" name="mSkipAttributeCreation">
35+
<property name="toolTip">
36+
<string>This allows one to surpress attribute creation as some OGR drivers (eg. DGN, DXF) don't support it.</string>
8737
</property>
8838
<property name="text">
89-
<string>Browse</string>
90-
</property>
91-
</widget>
92-
</item>
93-
<item row="6" column="1">
94-
<widget class="QLineEdit" name="leCRS">
95-
<property name="enabled">
96-
<bool>false</bool>
97-
</property>
98-
<property name="readOnly">
99-
<bool>true</bool>
39+
<string>Skip attribute creation</string>
10040
</property>
10141
</widget>
10242
</item>
103-
<item row="5" column="1" colspan="2">
104-
<widget class="QComboBox" name="mCRSSelection"/>
105-
</item>
10643
<item row="0" column="0">
10744
<widget class="QLabel" name="label_2">
10845
<property name="text">
@@ -113,49 +50,32 @@
11350
</property>
11451
</widget>
11552
</item>
116-
<item row="12" column="0" colspan="3">
117-
<widget class="QDialogButtonBox" name="buttonBox">
118-
<property name="orientation">
119-
<enum>Qt::Horizontal</enum>
53+
<item row="1" column="2">
54+
<widget class="QPushButton" name="browseFilename">
55+
<property name="enabled">
56+
<bool>false</bool>
12057
</property>
121-
<property name="standardButtons">
122-
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
58+
<property name="text">
59+
<string>Browse</string>
12360
</property>
12461
</widget>
12562
</item>
126-
<item row="0" column="1" colspan="2">
127-
<widget class="QComboBox" name="mFormatComboBox"/>
128-
</item>
129-
<item row="9" column="0" colspan="3">
130-
<widget class="QgsCollapsibleGroupBox" name="mOgrOptionsGroupBox" native="true">
131-
<property name="sizePolicy">
132-
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
133-
<horstretch>0</horstretch>
134-
<verstretch>0</verstretch>
135-
</sizepolicy>
63+
<item row="11" column="0" colspan="3">
64+
<widget class="QgsCollapsibleGroupBox" name="mOgrOptionsGroupBox">
65+
<property name="title">
66+
<string>Custom Options</string>
13667
</property>
137-
<property name="minimumSize">
138-
<size>
139-
<width>0</width>
140-
<height>0</height>
141-
</size>
142-
</property>
143-
<property name="maximumSize">
144-
<size>
145-
<width>16777215</width>
146-
<height>16777215</height>
147-
</size>
148-
</property>
149-
<property name="baseSize">
150-
<size>
151-
<width>0</width>
152-
<height>0</height>
153-
</size>
154-
</property>
155-
<property name="title" stdset="0">
156-
<string>OGR creation options</string>
157-
</property>
158-
<layout class="QGridLayout" name="gridLayout_2">
68+
<layout class="QGridLayout" name="gridLayout_3">
69+
<item row="0" column="0">
70+
<widget class="QLabel" name="label_5">
71+
<property name="text">
72+
<string>Data source</string>
73+
</property>
74+
<property name="buddy">
75+
<cstring>mOgrDatasourceOptions</cstring>
76+
</property>
77+
</widget>
78+
</item>
15979
<item row="0" column="1">
16080
<widget class="QTextEdit" name="mOgrDatasourceOptions">
16181
<property name="sizePolicy">
@@ -184,6 +104,16 @@
184104
</property>
185105
</widget>
186106
</item>
107+
<item row="1" column="0">
108+
<widget class="QLabel" name="label_6">
109+
<property name="text">
110+
<string>Layer</string>
111+
</property>
112+
<property name="buddy">
113+
<cstring>mOgrLayerOptions</cstring>
114+
</property>
115+
</widget>
116+
</item>
187117
<item row="1" column="1">
188118
<widget class="QTextEdit" name="mOgrLayerOptions">
189119
<property name="sizePolicy">
@@ -212,27 +142,81 @@
212142
</property>
213143
</widget>
214144
</item>
215-
<item row="0" column="0">
216-
<widget class="QLabel" name="label_5">
217-
<property name="text">
218-
<string>Data source</string>
219-
</property>
220-
<property name="buddy">
221-
<cstring>mOgrDatasourceOptions</cstring>
222-
</property>
223-
</widget>
224-
</item>
225-
<item row="1" column="0">
226-
<widget class="QLabel" name="label_6">
227-
<property name="text">
228-
<string>Layer</string>
229-
</property>
230-
<property name="buddy">
231-
<cstring>mOgrLayerOptions</cstring>
232-
</property>
233-
</widget>
234-
</item>
235145
</layout>
146+
<zorder>label_6</zorder>
147+
<zorder>label_5</zorder>
148+
<zorder>mOgrDatasourceOptions</zorder>
149+
<zorder>mOgrLayerOptions</zorder>
150+
</widget>
151+
</item>
152+
<item row="13" column="0">
153+
<widget class="QCheckBox" name="mAddToCanvas">
154+
<property name="text">
155+
<string>Add saved file to map</string>
156+
</property>
157+
</widget>
158+
</item>
159+
<item row="6" column="1">
160+
<widget class="QLineEdit" name="leCRS">
161+
<property name="enabled">
162+
<bool>false</bool>
163+
</property>
164+
<property name="readOnly">
165+
<bool>true</bool>
166+
</property>
167+
</widget>
168+
</item>
169+
<item row="5" column="0" rowspan="2">
170+
<widget class="QLabel" name="label_3">
171+
<property name="text">
172+
<string>CRS</string>
173+
</property>
174+
<property name="buddy">
175+
<cstring>leCRS</cstring>
176+
</property>
177+
</widget>
178+
</item>
179+
<item row="1" column="0">
180+
<widget class="QLabel" name="label">
181+
<property name="text">
182+
<string>Save as</string>
183+
</property>
184+
<property name="buddy">
185+
<cstring>leFilename</cstring>
186+
</property>
187+
</widget>
188+
</item>
189+
<item row="14" column="0" colspan="3">
190+
<widget class="QDialogButtonBox" name="buttonBox">
191+
<property name="orientation">
192+
<enum>Qt::Horizontal</enum>
193+
</property>
194+
<property name="standardButtons">
195+
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
196+
</property>
197+
</widget>
198+
</item>
199+
<item row="4" column="1" colspan="2">
200+
<widget class="QComboBox" name="mEncodingComboBox"/>
201+
</item>
202+
<item row="8" column="0">
203+
<widget class="QLabel" name="mScaleLabel">
204+
<property name="text">
205+
<string>Scale</string>
206+
</property>
207+
</widget>
208+
</item>
209+
<item row="0" column="1" colspan="2">
210+
<widget class="QComboBox" name="mFormatComboBox"/>
211+
</item>
212+
<item row="4" column="0">
213+
<widget class="QLabel" name="label_4">
214+
<property name="text">
215+
<string>Encoding</string>
216+
</property>
217+
<property name="buddy">
218+
<cstring>mEncodingComboBox</cstring>
219+
</property>
236220
</widget>
237221
</item>
238222
<item row="8" column="1" colspan="2">
@@ -248,37 +232,79 @@
248232
</property>
249233
</widget>
250234
</item>
251-
<item row="8" column="0">
252-
<widget class="QLabel" name="mScaleLabel">
253-
<property name="text">
254-
<string>Scale</string>
235+
<item row="1" column="1">
236+
<widget class="QLineEdit" name="leFilename">
237+
<property name="enabled">
238+
<bool>false</bool>
255239
</property>
256240
</widget>
257241
</item>
258-
<item row="11" column="0">
259-
<widget class="QCheckBox" name="mAddToCanvas">
260-
<property name="text">
261-
<string>Add saved file to map</string>
242+
<item row="10" column="0" colspan="3">
243+
<widget class="QgsCollapsibleGroupBox" name="mLayerOptionsGroupBox">
244+
<property name="title">
245+
<string>Layer Options</string>
262246
</property>
247+
<layout class="QFormLayout" name="formLayout_2">
248+
<property name="fieldGrowthPolicy">
249+
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
250+
</property>
251+
</layout>
263252
</widget>
264253
</item>
265-
<item row="10" column="0">
266-
<widget class="QCheckBox" name="mSkipAttributeCreation">
267-
<property name="toolTip">
268-
<string>This allows one to surpress attribute creation as some OGR drivers (eg. DGN, DXF) don't support it.</string>
269-
</property>
254+
<item row="6" column="2">
255+
<widget class="QPushButton" name="browseCRS">
270256
<property name="text">
271-
<string>Skip attribute creation</string>
257+
<string>Browse</string>
258+
</property>
259+
</widget>
260+
</item>
261+
<item row="5" column="1" colspan="2">
262+
<widget class="QComboBox" name="mCRSSelection"/>
263+
</item>
264+
<item row="7" column="1" colspan="2">
265+
<widget class="QComboBox" name="mSymbologyExportComboBox"/>
266+
</item>
267+
<item row="9" column="0" colspan="3">
268+
<widget class="QgsCollapsibleGroupBox" name="mDatasourceOptionsGroupBox">
269+
<property name="title">
270+
<string>Datasource Options</string>
272271
</property>
272+
<layout class="QFormLayout" name="formLayout">
273+
<property name="fieldGrowthPolicy">
274+
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
275+
</property>
276+
</layout>
273277
</widget>
274278
</item>
275279
</layout>
280+
<zorder>mDatasourceOptionsGroupBox</zorder>
281+
<zorder>mLayerOptionsGroupBox</zorder>
282+
<zorder>mFormatComboBox</zorder>
283+
<zorder>mScaleSpinBox</zorder>
284+
<zorder>mScaleLabel</zorder>
285+
<zorder>mAddToCanvas</zorder>
286+
<zorder>mSkipAttributeCreation</zorder>
287+
<zorder>leFilename</zorder>
288+
<zorder>browseCRS</zorder>
289+
<zorder>label_4</zorder>
290+
<zorder>label_3</zorder>
291+
<zorder>mEncodingComboBox</zorder>
292+
<zorder>mSymbologyExportLabel</zorder>
293+
<zorder>label</zorder>
294+
<zorder>mSymbologyExportComboBox</zorder>
295+
<zorder>browseFilename</zorder>
296+
<zorder>leCRS</zorder>
297+
<zorder>mCRSSelection</zorder>
298+
<zorder>label_2</zorder>
299+
<zorder>buttonBox</zorder>
300+
<zorder>mOgrOptionsGroupBox</zorder>
276301
</widget>
277302
<customwidgets>
278303
<customwidget>
279304
<class>QgsCollapsibleGroupBox</class>
280-
<extends>QWidget</extends>
305+
<extends>QGroupBox</extends>
281306
<header>qgscollapsiblegroupbox.h</header>
307+
<container>1</container>
282308
</customwidget>
283309
</customwidgets>
284310
<tabstops>

0 commit comments

Comments
 (0)
Please sign in to comment.