1,048 changes: 1,048 additions & 0 deletions src/core/qgsvectorfilewriter.cpp

Large diffs are not rendered by default.

107 changes: 106 additions & 1 deletion src/core/qgsvectorfilewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,105 @@ class QTextCodec;
class CORE_EXPORT QgsVectorFileWriter
{
public:
enum OptionType
{
Set,
String,
Int,
Hidden
};

class Option
{
public:
Option( const QString& docString, OptionType type )
: docString( docString )
, type( type )
{}

virtual ~Option() {}

QString docString;
OptionType type;
};

class SetOption : public Option
{
public:
SetOption( const QString& docString, QStringList values, const QString& defaultValue, bool allowNone = false )
: Option( docString, Set )
, values( values.toSet() )
, defaultValue( defaultValue )
, allowNone( allowNone )
{}

QSet<QString> values;
QString defaultValue;
bool allowNone;
};

class StringOption: public Option
{
public:
StringOption( const QString& docString, const QString& defaultValue = QString() )
: Option( docString, String )
, defaultValue( defaultValue )
{}

QString defaultValue;
};

class IntOption: public Option
{
public:
IntOption( const QString& docString, int defaultValue )
: Option( docString, Int )
, defaultValue( defaultValue )
{}

int defaultValue;
};

class BoolOption : public SetOption
{
public:
BoolOption( const QString& docString, bool defaultValue )
: SetOption( docString, QStringList() << "YES" << "NO", defaultValue ? "YES" : "NO" )
{}
};

class HiddenOption: public Option
{
public:
HiddenOption( const QString& value )
: Option( "", Hidden )
, mValue( value )
{}

QString mValue;
};

struct MetaData
{
MetaData()
{}

MetaData( QString longName, QString trLongName, QString glob, QString ext, QMap<QString, Option*> driverOptions, QMap<QString, Option*> layerOptions )
: longName( longName )
, trLongName( trLongName )
, glob( glob )
, ext( ext )
, driverOptions( driverOptions )
, layerOptions( layerOptions )
{}

QString longName;
QString trLongName;
QString glob;
QString ext;
QMap<QString, Option*> driverOptions;
QMap<QString, Option*> layerOptions;
};

enum WriterError
{
Expand Down Expand Up @@ -170,6 +269,8 @@ class CORE_EXPORT QgsVectorFileWriter
double symbologyScaleDenominator() const { return mSymbologyScaleDenominator; }
void setSymbologyScaleDenominator( double d ) { mSymbologyScaleDenominator = d; }

static bool driverMetadata( const QString& driverName, MetaData& driverMetadata );

protected:
//! @note not available in python bindings
OGRGeometryH createEmptyGeometry( QGis::WkbType wkbType );
Expand Down Expand Up @@ -202,6 +303,10 @@ class CORE_EXPORT QgsVectorFileWriter
double mSymbologyScaleDenominator;

private:
static QMap<QString, MetaData> initMetaData();
/**
* @deprecated
*/
static bool driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext );
void createSymbolLayerTable( QgsVectorLayer* vl, const QgsCoordinateTransform* ct, OGRDataSourceH ds );
OGRFeatureH createFeature( QgsFeature& feature );
Expand All @@ -217,7 +322,7 @@ class CORE_EXPORT QgsVectorFileWriter
QgsFeatureRendererV2* symbologyRenderer( QgsVectorLayer* vl ) const;
/**Adds attributes needed for classification*/
void addRendererAttributes( QgsVectorLayer* vl, QgsAttributeList& attList );

static QMap<QString, MetaData> sDriverMetadata;
};

#endif
576 changes: 331 additions & 245 deletions src/ui/qgsvectorlayersaveasdialogbase.ui

Large diffs are not rendered by default.