[QGIS Commit] r13337 - in trunk/qgis: resources/context_help
src/app src/ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Tue Apr 20 15:17:42 EDT 2010
Author: jef
Date: 2010-04-20 15:17:41 -0400 (Tue, 20 Apr 2010)
New Revision: 13337
Added:
trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-de_DE
Modified:
trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-en_US
trunk/qgis/src/app/qgisapp.cpp
trunk/qgis/src/app/qgsnewspatialitelayerdialog.cpp
trunk/qgis/src/app/qgsnewspatialitelayerdialog.h
trunk/qgis/src/ui/qgsnewspatialitelayerdialogbase.ui
Log:
allow creation of multiple layers in spatialite creation dialog
Added: trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-de_DE
===================================================================
--- trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-de_DE (rev 0)
+++ trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-de_DE 2010-04-20 19:17:41 UTC (rev 13337)
@@ -0,0 +1,29 @@
+<h3>Einen neuen SpatiaLite-Layer erzeugen</h3>
+In diesem Dialog können Sie eine neue SpatiaLite-Datenbank und/oder einen leeren SpatiaLite Layer zur Bearbeitung erzeugen. Unten werden die Eingabemöglichkeiten des Dialogs beschrieben.
+<h4>Datenbank</h4>
+Wählen Sie die Datenbank aus der Liste. Diese Liste wird aus den gespeicherten
+SpatiaLite-Verbindungen erzeugt. Wenn sie keine gespeicherten Verbindungen
+haben oder oder eine neue Datenbank erzeugen wollen Klicken Sie auf
+<label>...</label> rechts der Liste.
+<h4>Layername</h4>
+Geben Sie dem Layer, den Sie erzeugen wollen, einen Namen. Der Name sollte nur ein Wort sein. Wenn Sie wollen, können Sie auch Unterstriche verwenden
+<h4>Geometriespalte</h4>
+Geben Sie der Geometriespalte einen Namen oder übernehmen Sie die Voreinstellung.
+<h4>Typ</h4>
+Legen Sie den Layertyp fest, den Sie erzeugen wollen.
+<h4>EPSG-SRID</h4>
+Geben Sie einen EPSG-Code für die SRID (räumliche Bezugskennung) an. Für die SRID wird Ihnen WGS 84 vorgeschlagen.
+Klicken Sie auf den Knopf <label>SRID finden</label> um das Koordinatenbezugssystem ggf. zu ändern.
+Die SRID muss in der Tabelle spatial_ref_sys in Ihre Datenbank existieren. Sie können SRIDs suchen indem Sie Suchbegriffe verwenden, die
+ganz oder teilweise zu Namen oder SRIDs passen.
+<h4>Einen automatisch inkrementierenden Primärschlüssel erzeugen</h4>
+Das Anwählen dieses Kontrolkästchen fügt dem Layer einen Primärschlüssel hinzu. Diese Feld wird automatisch inkrementiert, sodaß Sie keinen
+keinen Wert dafür beim Hinzufügen von Objekten zum Layer eingeben müssen.
+<h4>Neues Attribute</h4>
+Fügen Sie die gewünschten Attribute durch Klicken auf den Knopf <label>Attribute zur Liste hinzufügen</label> nachdem Sie Namen und Type des Attributes festgelegt haben. Nur Fließkomma-, ganzzahlige und Zeichenkettenattribute werden unterstützt.<br/>
+Breite und Genauigkeit sind irrelevant in einer SpatiaLite-Datenbank, daher brauchen Sie sie nicht anzugeben.
+<h4>Attributliste</h4>
+In diesem Abschnitt sehen Sie die Attributliste. Um eins davon zu löschen, klicken Sie auf den Knopf <label>Gewähltes Attribut löschen</label>.
+
+<p>
+Klicken Sie auf <label>Ok</label> um den Layer anzulegen und den Dialog zu schließen. Ein Klick auf <label>Anwenden</label> erzeugt den Layer auch, aber hält den Dialog auf und erlaubt so mehr ähnliche Layer zu erzeugen. <label>Abbruch</label> schließt den Dialog ohne weitere Änderung.
Modified: trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-en_US
===================================================================
--- trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-en_US 2010-04-20 14:54:50 UTC (rev 13336)
+++ trunk/qgis/resources/context_help/QgsNewSpatialiteLayerDialog-en_US 2010-04-20 19:17:41 UTC (rev 13337)
@@ -1,7 +1,7 @@
<h3>Create a New Spatialite Layer</h3>
You can use this dialog to create a new Spatialite database and/or an empty Spatialite layer for editing. See below for an explanation of the dialog inputs.
<h4>Database</h4>
-Choose the database from the drop-down list. This list is created from your saved Spatialite connections. If you don't have a saved connection or want to create a new database, click on the button (<label>...</label>) to the right of the drop-down. If you create a new database you will have to add it to your Spatialite connections in the <i>Add Spatialite Table(s)</i> dialog.
+Choose the database from the drop-down list. This list is created from your saved Spatialite connections. If you don't have a saved connection or want to create a new database, click on the button (<label>...</label>) to the right of the drop-down.
<h4>Layer name</h4>
Enter a name for the layer you want to create. The name should be one word. You can use underscores in the name if you like.
<h4>Geometry column</h4>
@@ -19,4 +19,4 @@
In this section you can see the list of attributes. To delete one of them, click on it and choose <label>Remove selected attribute</label> button.
<p>
-To create the layer, click on <label>Apply</label>. The layer will be created and you will be returned to the dialog. From here you can click <label>Close</label> or change the parameters to create additional layers.
+Click on <label>Ok</label> to create the layer and close the dialog. Clicking <label>Apply</label> also creates the layer, but keeps the dialog open, thereby allowing you to create more similar layers. <label>Cancel</label> will close the layer without further changes.
Modified: trunk/qgis/src/app/qgisapp.cpp
===================================================================
--- trunk/qgis/src/app/qgisapp.cpp 2010-04-20 14:54:50 UTC (rev 13336)
+++ trunk/qgis/src/app/qgisapp.cpp 2010-04-20 19:17:41 UTC (rev 13337)
@@ -3098,18 +3098,6 @@
addVectorLayers( fileNames, enc, "file" );
}
-static QString quotedIdentifier( QString id )
-{
- id.replace( "\"", "\"\"" );
- return id.prepend( "\"" ).append( "\"" );
-}
-
-static QString quotedValue( QString value )
-{
- value.replace( "'", "''" );
- return value.prepend( "'" ).append( "'" );
-}
-
#ifdef HAVE_SPATIALITE
void QgisApp::newSpatialiteLayer()
{
@@ -3118,120 +3106,7 @@
return;
}
QgsNewSpatialiteLayerDialog spatialiteDialog( this );
- if ( spatialiteDialog.exec() == QDialog::Rejected )
- {
- return;
- }
-
- QString geometrytype = spatialiteDialog.selectedType();
- //QString fileformat = geomDialog.selectedFileFormat();
- QString crsId = spatialiteDialog.selectedCrsId();
- QString databaseName = spatialiteDialog.databaseName();
- QString newLayerName = spatialiteDialog.layerName();
- QString newGeometryColumn = spatialiteDialog.geometryColumn();
- //QgsDebugMsg( QString( "New file format will be: %1" ).arg( fileformat ) );
-
- // Get the list containing the name/type pairs for each attribute
- QList<QStringList> * items = spatialiteDialog.attributes( );
-
- // Build up the sql statement for creating the table
- //
- QString baseSQL;
- if ( spatialiteDialog.includePrimaryKey() )
- {
- baseSQL = "create table %1(pkuid integer primary key autoincrement, ";
- }
- else
- {
- baseSQL = "create table %1(";
- }
- QString sql = baseSQL.arg( quotedIdentifier( newLayerName ) );
- // iterate through the field names and add them to the create statement
- // (use indexed access since this is just as fast as iterators
- for ( int i = 0; i < items->size(); ++i )
- {
- QStringList field = items->at( i );
- if ( i > 0 )
- sql += ",";
- sql += QString( "%1 %2" ).arg( quotedIdentifier( field.at( 0 ) ) ).arg( field.at( 1 ) );
- }
- // complete the create table statement
- sql += ")";
- QgsDebugMsg( QString( "Creating table in database %1" ).arg( databaseName ) );
- QgsDebugMsg( sql ); // OK
-
- QString sqlAddGeom = QString( "select AddGeometryColumn(%1,%2,%3,%4,2)" )
- .arg( quotedValue( newLayerName ) )
- .arg( quotedValue( newGeometryColumn ) )
- .arg( crsId )
- .arg( quotedValue( geometrytype ) );
- QgsDebugMsg( sqlAddGeom ); // OK
-
- QString sqlCreateIndex = QString( "select CreateSpatialIndex(%1,%2)" ).arg( quotedValue( newLayerName ) ).arg( quotedValue( newGeometryColumn ) );
- QgsDebugMsg( sqlCreateIndex ); // OK
-
- spatialite_init( 0 );
-
- sqlite3 *db;
- int rc = sqlite3_open( databaseName.toUtf8(), &db );
- if ( rc != SQLITE_OK )
- {
- QMessageBox::warning( this,
- tr( "SpatiaLite Database" ),
- tr( "Unable to open the database: %1" ).arg( databaseName ) );
- }
- else
- {
- char * errmsg;
- rc = sqlite3_exec( db, sql.toUtf8(), NULL, NULL, &errmsg );
- if ( rc != SQLITE_OK )
- {
- QMessageBox::warning( this,
- tr( "Error Creating SpatiaLite Table" ),
- tr( "Failed to create the SpatiaLite table %1. The database returned:\n%2" ).arg( newLayerName ).arg( errmsg ) );
- sqlite3_free( errmsg );
- }
- else
- {
- // create the geometry column and the spatial index
- rc = sqlite3_exec( db, sqlAddGeom.toUtf8(), NULL, NULL, &errmsg );
- if ( rc != SQLITE_OK )
- {
- QMessageBox::warning( this,
- tr( "Error Creating Geometry Column" ),
- tr( "Failed to create the geometry column. The database returned:\n%1" ).arg( errmsg ) );
- sqlite3_free( errmsg );
- }
- else
- {
- // create the spatial index
- rc = sqlite3_exec( db, sqlCreateIndex.toUtf8(), NULL, NULL, &errmsg );
- if ( rc != SQLITE_OK )
- {
- QMessageBox::warning( this,
- tr( "Error Creating Spatial Index" ),
- tr( "Failed to create the spatial index. The database returned:\n%1" ).arg( errmsg ) );
- sqlite3_free( errmsg );
- }
-
- QgsVectorLayer *layer = new QgsVectorLayer( QString( "dbname='%1' table='%2'(%3) sql=" )
- .arg( databaseName )
- .arg( newLayerName )
- .arg( newGeometryColumn ), newLayerName, "spatialite" );
- if ( layer->isValid() )
- {
- // register this layer with the central layers registry
- QgsMapLayerRegistry::instance()->addMapLayer( layer );
- }
- else
- {
- QgsDebugMsg( newLayerName + " is an invalid layer - not loaded" );
- QMessageBox::critical( this, tr( "Invalid Layer" ), tr( "%1 is an invalid layer and cannot be loaded." ).arg( newLayerName ) );
- delete layer;
- }
- }
- }
- }
+ spatialiteDialog.exec();
}
#endif
Modified: trunk/qgis/src/app/qgsnewspatialitelayerdialog.cpp
===================================================================
--- trunk/qgis/src/app/qgsnewspatialitelayerdialog.cpp 2010-04-20 14:54:50 UTC (rev 13336)
+++ trunk/qgis/src/app/qgsnewspatialitelayerdialog.cpp 2010-04-20 19:17:41 UTC (rev 13337)
@@ -24,6 +24,9 @@
#include "qgsspatialitesridsdialog.h"
#include "qgsapplication.h"
#include "qgisapp.h" // <- for theme icons
+#include <qgsvectorlayer.h>
+#include <qgsmaplayerregistry.h>
+
#include "qgslogger.h"
#include <QPushButton>
@@ -32,8 +35,8 @@
#include <QMessageBox>
#include <QFileDialog>
+#include <spatialite.h>
-
QgsNewSpatialiteLayerDialog::QgsNewSpatialiteLayerDialog( QWidget *parent, Qt::WFlags fl )
: QDialog( parent, fl )
{
@@ -54,42 +57,28 @@
while ( it != keys.end() )
{
// retrieving the SQLite DB name and full path
- //QString text = *it + tr( "@" );
QString text = settings.value( *it + "/sqlitepath", "###unknown###" ).toString();
mDatabaseComboBox->addItem( text );
++it;
}
settings.endGroup();
- mOkButton = buttonBox->button( QDialogButtonBox::Ok );
- mOkButton->setEnabled( false );
- mOkButton->setDefault( true );
+ buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false );
+ buttonBox->button( QDialogButtonBox::Apply )->setEnabled( false );
+
+ connect( buttonBox->button( QDialogButtonBox::Apply ), SIGNAL( clicked() ), this, SLOT( apply() ) );
+
+ buttonBox->button( QDialogButtonBox::Ok )->setDefault( true );
+
// Set the SRID box to a default of WGS84
leSRID->setText( "4326" );
-
- // flag to indicate if we need to create a new db before adding a layer
- needNewDb = false;
+ pbnFindSRID->setEnabled( mDatabaseComboBox->count() );
}
QgsNewSpatialiteLayerDialog::~QgsNewSpatialiteLayerDialog()
{
}
-void QgsNewSpatialiteLayerDialog::createNewDb()
-{
-// QMessageBox::information( 0, tr( "Spatialite Layer" ), tr( "Create new db clicked" ) );
- QString fileName = QFileDialog::getSaveFileName( this, tr( "New SpatiaLite Database File" ),
- ".",
- tr( "SpatiaLite (*.sqlite *.db )" ) );
-
- if ( !fileName.isEmpty() )
- {
- mDatabaseComboBox->insertItem( 0, fileName );
- mDatabaseComboBox->setCurrentIndex( 0 );
- createDb();
- needNewDb = true;
- }
-}
void QgsNewSpatialiteLayerDialog::on_mTypeBox_currentIndexChanged( int index )
{
// This isn't used since widths are irrelevant in sqlite3
@@ -103,6 +92,20 @@
}
}
+void QgsNewSpatialiteLayerDialog::on_toolButtonNewDatabase_clicked()
+{
+ QString fileName = QFileDialog::getSaveFileName( this, tr( "New SpatiaLite Database File" ),
+ ".",
+ tr( "SpatiaLite (*.sqlite *.db )" ) );
+
+ if ( fileName.isEmpty() )
+ return;
+
+ mDatabaseComboBox->insertItem( 0, fileName );
+ mDatabaseComboBox->setCurrentIndex( 0 );
+ createDb();
+}
+
QString QgsNewSpatialiteLayerDialog::selectedType() const
{
if ( mPointRadioButton->isChecked() )
@@ -134,17 +137,11 @@
return "";
}
-QString QgsNewSpatialiteLayerDialog::selectedCrsId() const
-{
- return leSRID->text();
-}
-
void QgsNewSpatialiteLayerDialog::on_leLayerName_textChanged( QString text )
{
- if ( leLayerName->text().length() > 0 && mAttributeView->topLevelItemCount() > 0 )
- {
- mOkButton->setEnabled( true );
- }
+ bool created = leLayerName->text().length() > 0 && mAttributeView->topLevelItemCount() > 0 && createDb();
+ buttonBox->button( QDialogButtonBox::Ok )->setEnabled( created );
+ buttonBox->button( QDialogButtonBox::Apply )->setEnabled( created );
}
void QgsNewSpatialiteLayerDialog::on_mAddAttributeButton_clicked()
@@ -157,7 +154,9 @@
mAttributeView->addTopLevelItem( new QTreeWidgetItem( QStringList() << myName << myType ) );
if ( mAttributeView->topLevelItemCount() > 0 && leLayerName->text().length() > 0 )
{
- mOkButton->setEnabled( true );
+ bool created = createDb();
+ buttonBox->button( QDialogButtonBox::Ok )->setEnabled( created );
+ buttonBox->button( QDialogButtonBox::Apply )->setEnabled( created );
}
mNameEdit->clear();
}
@@ -168,19 +167,13 @@
delete mAttributeView->currentItem();
if ( mAttributeView->topLevelItemCount() == 0 )
{
- mOkButton->setEnabled( false );
+ buttonBox->button( QDialogButtonBox::Ok )->setEnabled( false );
+ buttonBox->button( QDialogButtonBox::Apply )->setEnabled( false );
}
}
void QgsNewSpatialiteLayerDialog::on_pbnFindSRID_clicked()
{
- /* hold on to this for a bit
- int rc = sqlite3_open( mDatabaseComboBox->currentText().toUtf8().data(), &db );
- if ( rc != SQLITE_OK )
- {
- QMessageBox::warning( this, tr( "Spatialite Database" ), tr( "Unable to open the database: %1").arg(mDatabaseComboBox->currentText() ) );
- }
- */
// set the SRID from a list returned from the selected Spatialite database
QgsSpatialiteSridsDialog *sridDlg = new QgsSpatialiteSridsDialog( this );
if ( sridDlg->load( mDatabaseComboBox->currentText() ) )
@@ -195,78 +188,190 @@
}
}
-// Create a QList of QStringList objects that define the layer attributes.
-// Each QStringList contains the field name and its type.
-QList<QStringList> * QgsNewSpatialiteLayerDialog::attributes() const
+bool QgsNewSpatialiteLayerDialog::createDb()
{
- QTreeWidgetItemIterator it( mAttributeView );
- QList<QStringList> *list = new QList<QStringList>;
- while ( *it )
- {
- QTreeWidgetItem *item = *it;
- QStringList items;
- items << item->text( 0 );
- items << item->text( 1 );
- list->append( items );
+ QSettings settings;
- //QString type = QString( "%1;%2;%3" ).arg( item->text( 1 ) ).arg( item->text( 2 ) ).arg( item->text( 3 ) );
- //at.push_back( std::make_pair( item->text( 0 ), type ) );
- //QgsDebugMsg( QString( "appending %1//%2" ).arg( item->text( 0 ) ).arg( type ) );
- ++it;
- }
- return list;
-}
+ if ( mDatabaseComboBox->currentText().isEmpty() )
+ return false;
-QString QgsNewSpatialiteLayerDialog::databaseName() const
-{
- return mDatabaseComboBox->currentText();
-}
-
-QString QgsNewSpatialiteLayerDialog::layerName() const
-{
- return leLayerName->text();
-}
-
-QString QgsNewSpatialiteLayerDialog::geometryColumn() const
-{
- return leGeometryColumn->text();
-}
-
-bool QgsNewSpatialiteLayerDialog::includePrimaryKey() const
-{
- return checkBoxPrimaryKey->isChecked();
-}
-
-bool QgsNewSpatialiteLayerDialog::createDb()
-{
QFile newDb( mDatabaseComboBox->currentText() );
if ( !newDb.exists() )
{
- qWarning( "creating a new db" );
+ QgsDebugMsg( "creating a new db" );
+
// copy the spatilite template to the user specified path
QString spatialiteTemplate = QgsApplication::qgisSpatialiteDbTemplatePath();
QFile spatialiteTemplateDb( spatialiteTemplate );
QFileInfo fullPath = QFileInfo( mDatabaseComboBox->currentText() );
QDir path = fullPath.dir();
- qWarning( "making this dir: %s", path.absolutePath().toUtf8().data() );
+ QgsDebugMsg( QString( "making this dir: %1" ).arg( path.absolutePath() ) );
// Must be sure there is destination directory ~/.qgis
QDir().mkpath( path.absolutePath( ) );
- qWarning( "Copying %s ", spatialiteTemplate.toUtf8().data() );
- qWarning( "to %s", newDb.fileName().toUtf8().data() );
+ QgsDebugMsg( QString( "Copying %1 to %2" ).arg( spatialiteTemplate ).arg( newDb.fileName() ) );
//now copy the template db file into the chosen location
if ( !spatialiteTemplateDb.copy( newDb.fileName() ) )
{
QMessageBox::warning( 0, tr( "SpatiaLite Database" ), tr( "Could not copy the template database to new location" ) );
+ pbnFindSRID->setEnabled( false );
return false;
}
+ }
+
+ QFileInfo fi( newDb );
+ if ( !fi.exists() )
+ {
+ pbnFindSRID->setEnabled( false );
+ return false;
+ }
+
+ QString key = "/SpatiaLite/connections/" + fi.fileName() + "/sqlitepath";
+
+ if ( !settings.contains( key ) )
+ {
+ settings.setValue( "/SpatiaLite/connections/selected", fi.fileName() );
+ settings.setValue( key, fi.canonicalFilePath() );
+
+ QMessageBox::information( 0, tr( "SpatiaLite Database" ), tr( "Registered new database!" ) );
+ }
+
+ pbnFindSRID->setEnabled( true );
+
+ return true;
+}
+
+void QgsNewSpatialiteLayerDialog::on_buttonBox_accepted()
+{
+ if ( apply() )
+ accept();
+}
+
+void QgsNewSpatialiteLayerDialog::on_buttonBox_rejected()
+{
+ reject();
+}
+
+bool QgsNewSpatialiteLayerDialog::apply()
+{
+ // Build up the sql statement for creating the table
+ QString sql = QString( "create table %1(" ).arg( quotedIdentifier( leLayerName->text() ) );
+ QString delim = "";
+
+ if ( checkBoxPrimaryKey->isChecked() )
+ {
+ sql += "pkuid integer primary key autoincrement,";
+ }
+
+ QTreeWidgetItemIterator it( mAttributeView );
+ while ( *it )
+ {
+ sql += delim + QString( "%1 %2" ).arg( quotedIdentifier(( *it )->text( 0 ) ) ).arg(( *it )->text( 1 ) );
+
+ delim = ",";
+
+ ++it;
+ }
+
+ // complete the create table statement
+ sql += ")";
+
+ QgsDebugMsg( QString( "Creating table in database %1" ).arg( mDatabaseComboBox->currentText() ) );
+
+ QgsDebugMsg( sql ); // OK
+
+ QString sqlAddGeom = QString( "select AddGeometryColumn(%1,%2,%3,%4,2)" )
+ .arg( quotedValue( leLayerName->text() ) )
+ .arg( quotedValue( leGeometryColumn->text() ) )
+ .arg( leSRID->text().toInt() )
+ .arg( quotedValue( selectedType() ) );
+ QgsDebugMsg( sqlAddGeom ); // OK
+
+ QString sqlCreateIndex = QString( "select CreateSpatialIndex(%1,%2)" )
+ .arg( quotedValue( leLayerName->text() ) )
+ .arg( quotedValue( leGeometryColumn->text() ) );
+ QgsDebugMsg( sqlCreateIndex ); // OK
+
+ spatialite_init( 0 );
+
+ sqlite3 *db;
+ int rc = sqlite3_open( mDatabaseComboBox->currentText().toUtf8(), &db );
+ if ( rc != SQLITE_OK )
+ {
+ QMessageBox::warning( this,
+ tr( "SpatiaLite Database" ),
+ tr( "Unable to open the database: %1" ).arg( mDatabaseComboBox->currentText() ) );
+ }
+ else
+ {
+ char * errmsg;
+ rc = sqlite3_exec( db, sql.toUtf8(), NULL, NULL, &errmsg );
+ if ( rc != SQLITE_OK )
+ {
+ QMessageBox::warning( this,
+ tr( "Error Creating SpatiaLite Table" ),
+ tr( "Failed to create the SpatiaLite table %1. The database returned:\n%2" ).arg( leLayerName->text() ).arg( errmsg ) );
+ sqlite3_free( errmsg );
+ }
else
{
- QMessageBox::information( 0, tr( "SpatiaLite Database" ), tr( "Created new database!" ) );
+ // create the geometry column and the spatial index
+ rc = sqlite3_exec( db, sqlAddGeom.toUtf8(), NULL, NULL, &errmsg );
+ if ( rc != SQLITE_OK )
+ {
+ QMessageBox::warning( this,
+ tr( "Error Creating Geometry Column" ),
+ tr( "Failed to create the geometry column. The database returned:\n%1" ).arg( errmsg ) );
+ sqlite3_free( errmsg );
+ }
+ else
+ {
+ // create the spatial index
+ rc = sqlite3_exec( db, sqlCreateIndex.toUtf8(), NULL, NULL, &errmsg );
+ if ( rc != SQLITE_OK )
+ {
+ QMessageBox::warning( this,
+ tr( "Error Creating Spatial Index" ),
+ tr( "Failed to create the spatial index. The database returned:\n%1" ).arg( errmsg ) );
+ sqlite3_free( errmsg );
+ }
+
+ QgsVectorLayer *layer = new QgsVectorLayer( QString( "dbname='%1' table='%2'(%3) sql=" )
+ .arg( mDatabaseComboBox->currentText() )
+ .arg( leLayerName->text() )
+ .arg( leGeometryColumn->text() ), leLayerName->text(), "spatialite" );
+ if ( layer->isValid() )
+ {
+ // register this layer with the central layers registry
+ if ( QgsMapLayerRegistry::instance()->addMapLayer( layer ) )
+ return true;
+ }
+ else
+ {
+ QgsDebugMsg( leLayerName->text() + " is an invalid layer - not loaded" );
+ QMessageBox::critical( this, tr( "Invalid Layer" ), tr( "%1 is an invalid layer and cannot be loaded." ).arg( leLayerName->text() ) );
+ delete layer;
+ }
+ }
}
}
- return true;
+
+ return false;
}
+
+QString QgsNewSpatialiteLayerDialog::quotedIdentifier( QString id )
+{
+ id.replace( "\"", "\"\"" );
+ return id.prepend( "\"" ).append( "\"" );
+}
+
+QString QgsNewSpatialiteLayerDialog::quotedValue( QString value )
+{
+ value.replace( "'", "''" );
+ return value.prepend( "'" ).append( "'" );
+}
+
+
Modified: trunk/qgis/src/app/qgsnewspatialitelayerdialog.h
===================================================================
--- trunk/qgis/src/app/qgsnewspatialitelayerdialog.h 2010-04-20 14:54:50 UTC (rev 13336)
+++ trunk/qgis/src/app/qgsnewspatialitelayerdialog.h 2010-04-20 19:17:41 UTC (rev 13337)
@@ -15,8 +15,8 @@
* *
***************************************************************************/
/* $Id$ */
-#ifndef qgsnewspatialitelayerdialog_H
-#define qgsnewspatialitelayerdialog_H
+#ifndef QGSNEWSPATIALITELAYERDIALOG_H
+#define QGSNEWSPATIALITELAYERDIALOG_H
#include "ui_qgsnewspatialitelayerdialogbase.h"
#include "qgisgui.h"
@@ -27,6 +27,7 @@
extern "C"
{
#include <sqlite3.h>
+#include <spatialite.h>
}
class QgsNewSpatialiteLayerDialog: public QDialog, private Ui::QgsNewSpatialiteLayerDialogBase
@@ -36,23 +37,6 @@
public:
QgsNewSpatialiteLayerDialog( QWidget *parent = 0, Qt::WFlags fl = QgisGui::ModalDialogFlags );
~QgsNewSpatialiteLayerDialog();
- /**Returns the selected geometry type*/
- QString selectedType() const;
- /**Appends the chosen attribute names and types to at*/
- //void attributes( std::list<std::pair<QString, QString> >& at ) const;
- QList<QStringList> * attributes() const;
- /**Returns the database name */
- QString databaseName() const;
- /**Returns the layer name to be created */
- QString layerName() const;
- /**Returns the geometry column name */
- QString geometryColumn() const;
- /**Returns the selected crs id*/
- QString selectedCrsId() const;
- /**Returns the state of the primary key checkbox*/
- bool includePrimaryKey() const;
- /** Create a new database */
- bool createDb();
protected slots:
void on_mAddAttributeButton_clicked();
@@ -60,15 +44,23 @@
void on_mTypeBox_currentIndexChanged( int index );
void on_pbnFindSRID_clicked();
void on_leLayerName_textChanged( QString text );
- void createNewDb();
+ void on_toolButtonNewDatabase_clicked();
void on_buttonBox_helpRequested() { QgsContextHelp::run( metaObject()->className() ); }
+ void on_buttonBox_accepted();
+ void on_buttonBox_rejected();
+ bool apply();
+
private:
- QPushButton *mOkButton;
- int mCrsId;
- sqlite3 *db;
- bool needNewDb;
+ /**Returns the selected geometry type*/
+ QString selectedType() const;
+
+ /** Create a new database */
+ bool createDb();
+
+ static QString quotedIdentifier( QString id );
+ static QString quotedValue( QString value );
};
-#endif //qgsnewvectorlayerdialog_H
+#endif // QGSNEWVECTORLAYERDIALOG_H
Modified: trunk/qgis/src/ui/qgsnewspatialitelayerdialogbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsnewspatialitelayerdialogbase.ui 2010-04-20 14:54:50 UTC (rev 13336)
+++ trunk/qgis/src/ui/qgsnewspatialitelayerdialogbase.ui 2010-04-20 19:17:41 UTC (rev 13337)
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>431</width>
- <height>648</height>
+ <width>477</width>
+ <height>596</height>
</rect>
</property>
<property name="sizePolicy">
@@ -413,7 +413,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok|QDialogButtonBox::Apply</set>
</property>
</widget>
</item>
@@ -440,8 +440,8 @@
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
- <x>355</x>
- <y>568</y>
+ <x>364</x>
+ <y>585</y>
</hint>
<hint type="destinationlabel">
<x>387</x>
@@ -456,8 +456,8 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
- <x>281</x>
- <y>568</y>
+ <x>290</x>
+ <y>585</y>
</hint>
<hint type="destinationlabel">
<x>242</x>
@@ -465,24 +465,5 @@
</hint>
</hints>
</connection>
- <connection>
- <sender>toolButtonNewDatabase</sender>
- <signal>clicked()</signal>
- <receiver>QgsNewSpatialiteLayerDialogBase</receiver>
- <slot>createNewDb()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>403</x>
- <y>28</y>
- </hint>
- <hint type="destinationlabel">
- <x>52</x>
- <y>39</y>
- </hint>
- </hints>
- </connection>
</connections>
- <slots>
- <slot>createNewDb()</slot>
- </slots>
</ui>
More information about the QGIS-commit
mailing list