another indention update

This commit is contained in:
Juergen E. Fischer 2013-05-02 23:12:01 +02:00
parent 9ca7223e4a
commit d4542feedf
12 changed files with 668 additions and 664 deletions

View File

@ -31,14 +31,14 @@ QgsLoadStyleFromDBDialog::QgsLoadStyleFromDBDialog( QWidget *parent )
mOthersTable->setSelectionBehavior( QTableWidget::SelectRows ); mOthersTable->setSelectionBehavior( QTableWidget::SelectRows );
mOthersTable->verticalHeader()->setVisible( false ); mOthersTable->verticalHeader()->setVisible( false );
connect(mRelatedTable, SIGNAL( cellClicked( int,int ) ), this, SLOT( cellSelectedRelatedTable( int ) ) ); connect( mRelatedTable, SIGNAL( cellClicked( int, int ) ), this, SLOT( cellSelectedRelatedTable( int ) ) );
connect(mOthersTable, SIGNAL( cellClicked( int,int ) ), this, SLOT( cellSelectedOthersTable( int ) ) ); connect( mOthersTable, SIGNAL( cellClicked( int, int ) ), this, SLOT( cellSelectedOthersTable( int ) ) );
connect(mRelatedTable, SIGNAL( doubleClicked( QModelIndex ) ), connect( mRelatedTable, SIGNAL( doubleClicked( QModelIndex ) ),
this, SLOT( accept() ) ); this, SLOT( accept() ) );
connect(mOthersTable, SIGNAL( doubleClicked( QModelIndex ) ), connect( mOthersTable, SIGNAL( doubleClicked( QModelIndex ) ),
this, SLOT( accept() ) ); this, SLOT( accept() ) );
connect(mCancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) ); connect( mCancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
connect(mLoadButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( mLoadButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
setTabOrder( mRelatedTable, mOthersTable ); setTabOrder( mRelatedTable, mOthersTable );
setTabOrder( mOthersTable, mCancelButton ); setTabOrder( mOthersTable, mCancelButton );
@ -47,54 +47,54 @@ QgsLoadStyleFromDBDialog::QgsLoadStyleFromDBDialog( QWidget *parent )
} }
void QgsLoadStyleFromDBDialog::initializeLists( QVector<QString> ids, QVector<QString> names, void QgsLoadStyleFromDBDialog::initializeLists( QVector<QString> ids, QVector<QString> names,
QVector<QString> descriptions, int sectionLimit ) QVector<QString> descriptions, int sectionLimit )
{ {
mIds = ids; mIds = ids;
mNames = names; mNames = names;
mDescriptions = descriptions; mDescriptions = descriptions;
mSectionLimit = sectionLimit; mSectionLimit = sectionLimit;
int relatedTableNOfCols = ( sectionLimit > 0 ) ? 2 : 1; int relatedTableNOfCols = ( sectionLimit > 0 ) ? 2 : 1;
int othersTableNOfCols = ( ids.count() - sectionLimit > 0 ) ? 2 : 1; int othersTableNOfCols = ( ids.count() - sectionLimit > 0 ) ? 2 : 1;
QString twoColsHeader( "Name;Description" ); QString twoColsHeader( "Name;Description" );
QString oneColsHeader( "No styles found in the database" ); QString oneColsHeader( "No styles found in the database" );
QString relatedTableHeader = ( relatedTableNOfCols == 1 ) ? oneColsHeader : twoColsHeader; QString relatedTableHeader = ( relatedTableNOfCols == 1 ) ? oneColsHeader : twoColsHeader;
QString othersTableHeader = ( othersTableNOfCols == 1 ) ? oneColsHeader : twoColsHeader; QString othersTableHeader = ( othersTableNOfCols == 1 ) ? oneColsHeader : twoColsHeader;
mRelatedTable->setColumnCount( relatedTableNOfCols ); mRelatedTable->setColumnCount( relatedTableNOfCols );
mOthersTable->setColumnCount( othersTableNOfCols ); mOthersTable->setColumnCount( othersTableNOfCols );
mRelatedTable->setHorizontalHeaderLabels( relatedTableHeader.split( ";" ) ); mRelatedTable->setHorizontalHeaderLabels( relatedTableHeader.split( ";" ) );
mOthersTable->setHorizontalHeaderLabels( othersTableHeader.split( ";" ) ); mOthersTable->setHorizontalHeaderLabels( othersTableHeader.split( ";" ) );
mRelatedTable->setRowCount( sectionLimit ); mRelatedTable->setRowCount( sectionLimit );
mOthersTable->setRowCount( ids.count() - sectionLimit ); mOthersTable->setRowCount( ids.count() - sectionLimit );
mRelatedTable->setDisabled( ( relatedTableNOfCols == 1 ) ); mRelatedTable->setDisabled(( relatedTableNOfCols == 1 ) );
mOthersTable->setDisabled( ( othersTableNOfCols == 1 ) ); mOthersTable->setDisabled(( othersTableNOfCols == 1 ) );
for( int i=0; i<sectionLimit; i++ ) for ( int i = 0; i < sectionLimit; i++ )
{ {
mRelatedTable->setItem(i, 0, new QTableWidgetItem( names.value( i, "" ) ) ); mRelatedTable->setItem( i, 0, new QTableWidgetItem( names.value( i, "" ) ) );
mRelatedTable->setItem(i, 1, new QTableWidgetItem( descriptions.value( i, "" ) ) ); mRelatedTable->setItem( i, 1, new QTableWidgetItem( descriptions.value( i, "" ) ) );
} }
for( int i=sectionLimit; i<ids.count(); i++ ) for ( int i = sectionLimit; i < ids.count(); i++ )
{ {
int j = i-sectionLimit; int j = i - sectionLimit;
mOthersTable->setItem(j, 0, new QTableWidgetItem( names.value( i, "" ) ) ); mOthersTable->setItem( j, 0, new QTableWidgetItem( names.value( i, "" ) ) );
mOthersTable->setItem(j, 1, new QTableWidgetItem( descriptions.value( i, "" ) ) ); mOthersTable->setItem( j, 1, new QTableWidgetItem( descriptions.value( i, "" ) ) );
} }
} }
QString QgsLoadStyleFromDBDialog::getSelectedStyleId() QString QgsLoadStyleFromDBDialog::getSelectedStyleId()
{ {
return mSelectedStyleId; return mSelectedStyleId;
} }
void QgsLoadStyleFromDBDialog::cellSelectedRelatedTable( int r ) void QgsLoadStyleFromDBDialog::cellSelectedRelatedTable( int r )
{ {
mLoadButton->setEnabled( true ); mLoadButton->setEnabled( true );
mSelectedStyleId = mIds.value( r ); mSelectedStyleId = mIds.value( r );
} }
void QgsLoadStyleFromDBDialog::cellSelectedOthersTable( int r ) void QgsLoadStyleFromDBDialog::cellSelectedOthersTable( int r )
{ {
mLoadButton->setEnabled( true ); mLoadButton->setEnabled( true );
mSelectedStyleId = mIds.value( r + mSectionLimit ); mSelectedStyleId = mIds.value( r + mSectionLimit );
} }

View File

@ -26,14 +26,14 @@ class QgsLoadStyleFromDBDialog: public QDialog, private Ui::QgsLoadStyleFromDBDi
public: public:
explicit QgsLoadStyleFromDBDialog( QWidget *parent = 0 ); explicit QgsLoadStyleFromDBDialog( QWidget *parent = 0 );
void initializeLists( QVector<QString> ids, QVector<QString> names, QVector<QString> descriptions, int sectionLimit); void initializeLists( QVector<QString> ids, QVector<QString> names, QVector<QString> descriptions, int sectionLimit );
QString getSelectedStyleId(); QString getSelectedStyleId();
public slots: public slots:
void cellSelectedRelatedTable( int r ); void cellSelectedRelatedTable( int r );
void cellSelectedOthersTable( int r ); void cellSelectedOthersTable( int r );
private: private:
}; };

View File

@ -18,73 +18,74 @@
QgsSaveStyleToDbDialog::QgsSaveStyleToDbDialog( QWidget *parent ) : QgsSaveStyleToDbDialog::QgsSaveStyleToDbDialog( QWidget *parent ) :
QDialog( parent ) QDialog( parent )
{ {
setupUi( this ); setupUi( this );
setWindowTitle( "Save style in database" ); setWindowTitle( "Save style in database" );
mDescriptionEdit->setTabChangesFocus( true ); mDescriptionEdit->setTabChangesFocus( true );
setTabOrder( mNameEdit, mDescriptionEdit ); setTabOrder( mNameEdit, mDescriptionEdit );
setTabOrder( mDescriptionEdit, mUseAsDefault ); setTabOrder( mDescriptionEdit, mUseAsDefault );
setTabOrder( mUseAsDefault, buttonBox ); setTabOrder( mUseAsDefault, buttonBox );
} }
QString QgsSaveStyleToDbDialog::getName() QString QgsSaveStyleToDbDialog::getName()
{ {
return mNameEdit->text(); return mNameEdit->text();
} }
QString QgsSaveStyleToDbDialog::getDescription() QString QgsSaveStyleToDbDialog::getDescription()
{ {
return mDescriptionEdit->toPlainText(); return mDescriptionEdit->toPlainText();
} }
bool QgsSaveStyleToDbDialog::isDefault() bool QgsSaveStyleToDbDialog::isDefault()
{ {
return mUseAsDefault->isChecked(); return mUseAsDefault->isChecked();
} }
QString QgsSaveStyleToDbDialog::getUIFileContent() QString QgsSaveStyleToDbDialog::getUIFileContent()
{ {
return mUIFileContent; return mUIFileContent;
} }
void QgsSaveStyleToDbDialog::accept() void QgsSaveStyleToDbDialog::accept()
{ {
if( getName().isEmpty() ){ if ( getName().isEmpty() )
QMessageBox::information( this, tr( "Save style in database" ), tr( "A name is mandatory" ) ); {
return; QMessageBox::information( this, tr( "Save style in database" ), tr( "A name is mandatory" ) );
} return;
QDialog::accept(); }
QDialog::accept();
} }
void QgsSaveStyleToDbDialog::on_mFilePickButton_clicked() void QgsSaveStyleToDbDialog::on_mFilePickButton_clicked()
{ {
QSettings myQSettings; // where we keep last used filter in persistent state QSettings myQSettings; // where we keep last used filter in persistent state
QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString(); QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString();
QString myFileName = QFileDialog::getOpenFileName( this, tr( "Attach Qt Creator UI file" ), myLastUsedDir, tr( "Qt Creator UI file .ui" ) + " (*.ui)" ); QString myFileName = QFileDialog::getOpenFileName( this, tr( "Attach Qt Creator UI file" ), myLastUsedDir, tr( "Qt Creator UI file .ui" ) + " (*.ui)" );
if ( myFileName.isNull() ) if ( myFileName.isNull() )
{
return;
}
QFileInfo myFI( myFileName );
QFile uiFile( myFI.filePath() );
QString myPath = myFI.path();
myQSettings.setValue( "style/lastStyleDir", myPath );
if ( uiFile.open( QIODevice::ReadOnly ) )
{
QString content( uiFile.readAll() );
QDomDocument doc;
if ( !doc.setContent( content ) || doc.documentElement().tagName().compare( "ui" ) )
{ {
QMessageBox::warning( this, tr( "Wrong file" ),
tr( "The selected file does not appear to be a valid Qt Creator UI file." ) );
return; return;
} }
mUIFileContent = content;
mFileNameLabel->setText( myFI.fileName() );
QFileInfo myFI( myFileName ); }
QFile uiFile( myFI.filePath() );
QString myPath = myFI.path();
myQSettings.setValue( "style/lastStyleDir", myPath );
if(uiFile.open( QIODevice::ReadOnly ) )
{
QString content( uiFile.readAll() );
QDomDocument doc;
if( !doc.setContent(content) || doc.documentElement().tagName().compare( "ui" ) )
{
QMessageBox::warning(this, tr( "Wrong file" ),
tr( "The selected file does not appear to be a valid Qt Creator UI file."));
return;
}
mUIFileContent = content;
mFileNameLabel->setText( myFI.fileName() );
}
} }

View File

@ -18,12 +18,12 @@ class QgsSaveStyleToDbDialog : public QDialog, private Ui::QgsSaveToDBDialog
{ {
QString mUIFileContent; QString mUIFileContent;
Q_OBJECT Q_OBJECT
public: public:
explicit QgsSaveStyleToDbDialog(QWidget *parent = 0); explicit QgsSaveStyleToDbDialog( QWidget *parent = 0 );
signals: signals:
public slots: public slots:
QString getUIFileContent(); QString getUIFileContent();
QString getName(); QString getName();
QString getDescription(); QString getDescription();

View File

@ -143,20 +143,20 @@ QgsVectorLayerProperties::QgsVectorLayerProperties(
mSaveAsMenu->addAction( tr( "SLD File" ) ); mSaveAsMenu->addAction( tr( "SLD File" ) );
//Only if the provider support loading & saving styles to db add new choices //Only if the provider support loading & saving styles to db add new choices
if( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() ) if ( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() )
{ {
//for loading //for loading
mLoadStyleMenu = new QMenu(); mLoadStyleMenu = new QMenu();
mLoadStyleMenu->addAction( tr( "Load from file" ) ); mLoadStyleMenu->addAction( tr( "Load from file" ) );
mLoadStyleMenu->addAction( tr( "Load from database" ) ); mLoadStyleMenu->addAction( tr( "Load from database" ) );
pbnLoadStyle->setContextMenuPolicy( Qt::PreventContextMenu ); pbnLoadStyle->setContextMenuPolicy( Qt::PreventContextMenu );
pbnLoadStyle->setMenu( mLoadStyleMenu ); pbnLoadStyle->setMenu( mLoadStyleMenu );
QObject::connect( mLoadStyleMenu, SIGNAL( triggered( QAction * ) ), QObject::connect( mLoadStyleMenu, SIGNAL( triggered( QAction * ) ),
this, SLOT( loadStyleMenuTriggered( QAction * ) ) ) ; this, SLOT( loadStyleMenuTriggered( QAction * ) ) ) ;
//for saving //for saving
mSaveAsMenu->addAction( tr( "Save on database (%1)" ).arg( layer->providerType() ) ); mSaveAsMenu->addAction( tr( "Save on database (%1)" ).arg( layer->providerType() ) );
} }
QObject::connect( mSaveAsMenu, SIGNAL( triggered( QAction * ) ), QObject::connect( mSaveAsMenu, SIGNAL( triggered( QAction * ) ),
@ -555,44 +555,45 @@ void QgsVectorLayerProperties::on_pbnLoadDefaultStyle_clicked()
QString msg; QString msg;
bool defaultLoadedFlag = false; bool defaultLoadedFlag = false;
if( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() ) if ( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() )
{ {
QMessageBox askToUser; QMessageBox askToUser;
askToUser.setText( tr( "Load default style from: " ) ); askToUser.setText( tr( "Load default style from: " ) );
askToUser.setIcon( QMessageBox::Question ); askToUser.setIcon( QMessageBox::Question );
askToUser.addButton( tr( "Cancel" ), QMessageBox::RejectRole); askToUser.addButton( tr( "Cancel" ), QMessageBox::RejectRole );
askToUser.addButton( tr( "Local database" ), QMessageBox::NoRole ); askToUser.addButton( tr( "Local database" ), QMessageBox::NoRole );
askToUser.addButton( tr( "Datasource database" ), QMessageBox::YesRole ); askToUser.addButton( tr( "Datasource database" ), QMessageBox::YesRole );
switch ( askToUser.exec() ) switch ( askToUser.exec() )
{ {
case (0): case( 0 ):
return; return;
break; break;
case (2): case( 2 ):
msg = layer->loadNamedStyle( layer->styleURI(), defaultLoadedFlag ); msg = layer->loadNamedStyle( layer->styleURI(), defaultLoadedFlag );
if( !defaultLoadedFlag ) if ( !defaultLoadedFlag )
{ {
//something went wrong - let them know why //something went wrong - let them know why
QMessageBox::information( this, tr( "Default Style" ), msg ); QMessageBox::information( this, tr( "Default Style" ), msg );
} }
if( msg.compare( tr( "Loaded from Provider" ) ) ) if ( msg.compare( tr( "Loaded from Provider" ) ) )
{ {
QMessageBox::information( this, tr( "Default Style" ), QMessageBox::information( this, tr( "Default Style" ),
tr( "No default style was found for this layer" ) ); tr( "No default style was found for this layer" ) );
} }
else{ else
reset(); {
} reset();
}
return; return;
break; break;
default: default:
break; break;
} }
} }
QString myMessage = layer->loadNamedStyle(layer->styleURI(), defaultLoadedFlag, true); QString myMessage = layer->loadNamedStyle( layer->styleURI(), defaultLoadedFlag, true );
// QString myMessage = layer->loadDefaultStyle( defaultLoadedFlag ); // QString myMessage = layer->loadDefaultStyle( defaultLoadedFlag );
//reset if the default style was loaded ok only //reset if the default style was loaded ok only
if ( defaultLoadedFlag ) if ( defaultLoadedFlag )
@ -609,40 +610,40 @@ void QgsVectorLayerProperties::on_pbnLoadDefaultStyle_clicked()
void QgsVectorLayerProperties::on_pbnSaveDefaultStyle_clicked() void QgsVectorLayerProperties::on_pbnSaveDefaultStyle_clicked()
{ {
apply(); apply();
QString errorMsg; QString errorMsg;
if( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() ) if ( layer->dataProvider()->isSaveAndLoadStyleToDBSupported() )
{ {
QMessageBox askToUser; QMessageBox askToUser;
askToUser.setText( tr( "Save default style to: " ) ); askToUser.setText( tr( "Save default style to: " ) );
askToUser.setIcon( QMessageBox::Question ); askToUser.setIcon( QMessageBox::Question );
askToUser.addButton( tr( "Cancel" ), QMessageBox::RejectRole); askToUser.addButton( tr( "Cancel" ), QMessageBox::RejectRole );
askToUser.addButton( tr( "Local database" ), QMessageBox::NoRole ); askToUser.addButton( tr( "Local database" ), QMessageBox::NoRole );
askToUser.addButton( tr( "Datasource database" ), QMessageBox::YesRole ); askToUser.addButton( tr( "Datasource database" ), QMessageBox::YesRole );
switch ( askToUser.exec() ) switch ( askToUser.exec() )
{
case( 0 ):
return;
break;
case( 2 ):
layer->saveStyleToDatabase( "", "", true, "", errorMsg );
if ( errorMsg.isNull() )
{ {
case (0): return;
return;
break;
case (2):
layer->saveStyleToDatabase("", "", true, "", errorMsg );
if( errorMsg.isNull() )
{
return;
}
break;
default:
break;
} }
break;
default:
break;
} }
}
bool defaultSavedFlag = false; bool defaultSavedFlag = false;
errorMsg = layer->saveDefaultStyle( defaultSavedFlag ); errorMsg = layer->saveDefaultStyle( defaultSavedFlag );
if ( !defaultSavedFlag ) if ( !defaultSavedFlag )
{ {
QMessageBox::warning( this, tr( "Default Style" ), errorMsg ); QMessageBox::warning( this, tr( "Default Style" ), errorMsg );
} }
} }
@ -711,95 +712,95 @@ void QgsVectorLayerProperties::saveStyleAs( StyleType styleType )
QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString(); QString myLastUsedDir = myQSettings.value( "style/lastStyleDir", "." ).toString();
QString format, extension; QString format, extension;
if( styleType == DB ) if ( styleType == DB )
{ {
QString infoWindowTitle = QObject::tr( "Save style to DB (%1)" ).arg( layer->providerType() ); QString infoWindowTitle = QObject::tr( "Save style to DB (%1)" ).arg( layer->providerType() );
QString msgError; QString msgError;
QgsSaveStyleToDbDialog askToUser; QgsSaveStyleToDbDialog askToUser;
//Ask the user for a name and a description about the style //Ask the user for a name and a description about the style
if( askToUser.exec() == QDialog::Accepted ) if ( askToUser.exec() == QDialog::Accepted )
{ {
QString styleName = askToUser.getName(); QString styleName = askToUser.getName();
QString styleDesc = askToUser.getDescription(); QString styleDesc = askToUser.getDescription();
QString uiFileContent = askToUser.getUIFileContent(); QString uiFileContent = askToUser.getUIFileContent();
bool isDefault = askToUser.isDefault(); bool isDefault = askToUser.isDefault();
apply(); apply();
layer->saveStyleToDatabase( styleName, styleDesc, isDefault, uiFileContent, msgError ); layer->saveStyleToDatabase( styleName, styleDesc, isDefault, uiFileContent, msgError );
if( !msgError.isNull() ) if ( !msgError.isNull() )
{ {
QMessageBox::warning( this, infoWindowTitle, msgError ); QMessageBox::warning( this, infoWindowTitle, msgError );
} }
else else
{ {
QMessageBox::information( this, infoWindowTitle, tr( "Style saved" ) ); QMessageBox::information( this, infoWindowTitle, tr( "Style saved" ) );
} }
} }
else else
{ {
return; return;
} }
} }
else else
{ {
QString format, extension; QString format, extension;
if ( styleType == SLD ) if ( styleType == SLD )
{ {
format = tr( "SLD File" ) + " (*.sld)"; format = tr( "SLD File" ) + " (*.sld)";
extension = ".sld"; extension = ".sld";
} }
else else
{ {
format = tr( "QGIS Layer Style File" ) + " (*.qml)"; format = tr( "QGIS Layer Style File" ) + " (*.qml)";
extension = ".qml"; extension = ".qml";
} }
QString myOutputFileName = QFileDialog::getSaveFileName( this, tr( "Save layer properties as style file" ), QString myOutputFileName = QFileDialog::getSaveFileName( this, tr( "Save layer properties as style file" ),
myLastUsedDir, format ); myLastUsedDir, format );
if ( myOutputFileName.isNull() ) //dialog canceled if ( myOutputFileName.isNull() ) //dialog canceled
{ {
return; return;
} }
apply(); // make sure the style to save is uptodate apply(); // make sure the style to save is uptodate
QString myMessage; QString myMessage;
bool defaultLoadedFlag = false; bool defaultLoadedFlag = false;
//ensure the user never omitted the extension from the file name //ensure the user never omitted the extension from the file name
if ( !myOutputFileName.endsWith( extension, Qt::CaseInsensitive ) ) if ( !myOutputFileName.endsWith( extension, Qt::CaseInsensitive ) )
{ {
myOutputFileName += extension; myOutputFileName += extension;
} }
if ( styleType == SLD ) if ( styleType == SLD )
{ {
// convert to SLD // convert to SLD
myMessage = layer->saveSldStyle( myOutputFileName, defaultLoadedFlag ); myMessage = layer->saveSldStyle( myOutputFileName, defaultLoadedFlag );
} }
else else
{ {
myMessage = layer->saveNamedStyle( myOutputFileName, defaultLoadedFlag ); myMessage = layer->saveNamedStyle( myOutputFileName, defaultLoadedFlag );
} }
//reset if the default style was loaded ok only //reset if the default style was loaded ok only
if ( defaultLoadedFlag ) if ( defaultLoadedFlag )
{ {
reset(); reset();
} }
else else
{ {
//let the user know what went wrong //let the user know what went wrong
QMessageBox::information( this, tr( "Saved Style" ), myMessage ); QMessageBox::information( this, tr( "Saved Style" ), myMessage );
} }
QFileInfo myFI( myOutputFileName ); QFileInfo myFI( myOutputFileName );
QString myPath = myFI.path(); QString myPath = myFI.path();
// Persist last used dir // Persist last used dir
myQSettings.setValue( "style/lastStyleDir", myPath ); myQSettings.setValue( "style/lastStyleDir", myPath );
} }
} }
@ -813,53 +814,53 @@ void QgsVectorLayerProperties::loadStyleMenuTriggered( QAction *action )
if ( index == 0 ) //Load from filesystem if ( index == 0 ) //Load from filesystem
{ {
this->on_pbnLoadStyle_clicked(); this->on_pbnLoadStyle_clicked();
} }
else if( index == 1 ) //Load from database else if ( index == 1 ) //Load from database
{ {
this->showListOfStylesFromDatabase(); this->showListOfStylesFromDatabase();
} }
} }
void QgsVectorLayerProperties::showListOfStylesFromDatabase() void QgsVectorLayerProperties::showListOfStylesFromDatabase()
{ {
QString errorMsg; QString errorMsg;
QVector<QString> ids, names, descriptions; QVector<QString> ids, names, descriptions;
//get the list of styles in the db //get the list of styles in the db
int sectionLimit = layer->listStylesInDatabase(ids, names, descriptions, errorMsg); int sectionLimit = layer->listStylesInDatabase( ids, names, descriptions, errorMsg );
if( !errorMsg.isNull() ) if ( !errorMsg.isNull() )
{
QMessageBox::warning( this, tr( "Error occured retrievning styles from database " ), errorMsg );
return;
}
QgsLoadStyleFromDBDialog dialog;
dialog.initializeLists( ids, names, descriptions, sectionLimit );
if ( dialog.exec() == QDialog::Accepted )
{
QString selectedStyleId = dialog.getSelectedStyleId();
QString qmlStyle = layer->getStyleFromDatabase( selectedStyleId, errorMsg );
if ( !errorMsg.isNull() )
{ {
QMessageBox::warning( this, tr( "Error occured retrievning styles from database "), errorMsg ); QMessageBox::warning( this, tr( "Error occured retrievning styles from database " ), errorMsg );
return; return;
}
if ( layer->applyNamedStyle( qmlStyle, errorMsg ) )
{
reset();
}
else
{
QMessageBox::warning( this, tr( "Error occured retrievning styles from database " ),
tr( "The style retriev is not a valid named style. Error message: %1" )
.arg( errorMsg ) );
} }
QgsLoadStyleFromDBDialog dialog; }
dialog.initializeLists(ids, names, descriptions, sectionLimit);
if( dialog.exec() == QDialog::Accepted )
{
QString selectedStyleId = dialog.getSelectedStyleId();
QString qmlStyle = layer->getStyleFromDatabase( selectedStyleId, errorMsg );
if( !errorMsg.isNull() )
{
QMessageBox::warning( this, tr( "Error occured retrievning styles from database "), errorMsg );
return;
}
if( layer->applyNamedStyle( qmlStyle, errorMsg) )
{
reset();
}
else
{
QMessageBox::warning( this, tr( "Error occured retrievning styles from database "),
tr( "The style retriev is not a valid named style. Error message: %1" )
.arg( errorMsg ) );
}
}
} }

View File

@ -840,34 +840,34 @@ QString QgsMapLayer::loadNamedStyle( const QString theURI, bool &theResultFlag )
return ""; return "";
} }
void QgsMapLayer::exportNamedStyle(QDomDocument &doc, QString &errorMsg) void QgsMapLayer::exportNamedStyle( QDomDocument &doc, QString &errorMsg )
{ {
QDomImplementation DomImplementation; QDomImplementation DomImplementation;
QDomDocumentType documentType = DomImplementation.createDocumentType( "qgis", "http://mrcc.com/qgis.dtd", "SYSTEM" ); QDomDocumentType documentType = DomImplementation.createDocumentType( "qgis", "http://mrcc.com/qgis.dtd", "SYSTEM" );
QDomDocument myDocument( documentType ); QDomDocument myDocument( documentType );
QDomElement myRootNode = myDocument.createElement( "qgis" ); QDomElement myRootNode = myDocument.createElement( "qgis" );
myRootNode.setAttribute( "version", QString( "%1" ).arg( QGis::QGIS_VERSION ) ); myRootNode.setAttribute( "version", QString( "%1" ).arg( QGis::QGIS_VERSION ) );
myDocument.appendChild( myRootNode ); myDocument.appendChild( myRootNode );
myRootNode.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 ); myRootNode.setAttribute( "hasScaleBasedVisibilityFlag", hasScaleBasedVisibility() ? 1 : 0 );
myRootNode.setAttribute( "minimumScale", QString::number( minimumScale() ) ); myRootNode.setAttribute( "minimumScale", QString::number( minimumScale() ) );
myRootNode.setAttribute( "maximumScale", QString::number( maximumScale() ) ); myRootNode.setAttribute( "maximumScale", QString::number( maximumScale() ) );
#if 0 #if 0
// <transparencyLevelInt> // <transparencyLevelInt>
QDomElement transparencyLevelIntElement = myDocument.createElement( "transparencyLevelInt" ); QDomElement transparencyLevelIntElement = myDocument.createElement( "transparencyLevelInt" );
QDomText transparencyLevelIntText = myDocument.createTextNode( QString::number( getTransparency() ) ); QDomText transparencyLevelIntText = myDocument.createTextNode( QString::number( getTransparency() ) );
transparencyLevelIntElement.appendChild( transparencyLevelIntText ); transparencyLevelIntElement.appendChild( transparencyLevelIntText );
myRootNode.appendChild( transparencyLevelIntElement ); myRootNode.appendChild( transparencyLevelIntElement );
#endif #endif
if ( !writeSymbology( myRootNode, myDocument, errorMsg ) ) if ( !writeSymbology( myRootNode, myDocument, errorMsg ) )
{ {
errorMsg = QObject::tr( "Could not save symbology because:\n%1" ).arg( errorMsg ); errorMsg = QObject::tr( "Could not save symbology because:\n%1" ).arg( errorMsg );
return; return;
} }
doc = myDocument; doc = myDocument;
} }
QString QgsMapLayer::saveDefaultStyle( bool & theResultFlag ) QString QgsMapLayer::saveDefaultStyle( bool & theResultFlag )
@ -1012,41 +1012,42 @@ QString QgsMapLayer::saveNamedStyle( const QString theURI, bool & theResultFlag
return myErrorMessage; return myErrorMessage;
} }
void QgsMapLayer::exportSldStyle( QDomDocument &doc, QString &errorMsg ){ void QgsMapLayer::exportSldStyle( QDomDocument &doc, QString &errorMsg )
QDomDocument myDocument = QDomDocument(); {
QDomDocument myDocument = QDomDocument();
QDomNode header = myDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" ); QDomNode header = myDocument.createProcessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\"" );
myDocument.appendChild( header ); myDocument.appendChild( header );
// Create the root element // Create the root element
QDomElement root = myDocument.createElementNS( "http://www.opengis.net/sld", "StyledLayerDescriptor" ); QDomElement root = myDocument.createElementNS( "http://www.opengis.net/sld", "StyledLayerDescriptor" );
root.setAttribute( "version", "1.1.0" ); root.setAttribute( "version", "1.1.0" );
root.setAttribute( "xsi:schemaLocation", "http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" ); root.setAttribute( "xsi:schemaLocation", "http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd" );
root.setAttribute( "xmlns:ogc", "http://www.opengis.net/ogc" ); root.setAttribute( "xmlns:ogc", "http://www.opengis.net/ogc" );
root.setAttribute( "xmlns:se", "http://www.opengis.net/se" ); root.setAttribute( "xmlns:se", "http://www.opengis.net/se" );
root.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" ); root.setAttribute( "xmlns:xlink", "http://www.w3.org/1999/xlink" );
root.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" ); root.setAttribute( "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance" );
myDocument.appendChild( root ); myDocument.appendChild( root );
// Create the NamedLayer element // Create the NamedLayer element
QDomElement namedLayerNode = myDocument.createElement( "NamedLayer" ); QDomElement namedLayerNode = myDocument.createElement( "NamedLayer" );
root.appendChild( namedLayerNode ); root.appendChild( namedLayerNode );
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this ); QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( this );
if ( !vlayer ) if ( !vlayer )
{ {
errorMsg = tr( "Could not save symbology because:\n%1" ) errorMsg = tr( "Could not save symbology because:\n%1" )
.arg( "Non-vector layers not supported yet" ); .arg( "Non-vector layers not supported yet" );
return; return;
} }
if ( !vlayer->writeSld( namedLayerNode, myDocument, errorMsg ) ) if ( !vlayer->writeSld( namedLayerNode, myDocument, errorMsg ) )
{ {
errorMsg = tr( "Could not save symbology because:\n%1" ).arg( errorMsg ); errorMsg = tr( "Could not save symbology because:\n%1" ).arg( errorMsg );
return; return;
} }
doc = myDocument; doc = myDocument;
} }
QString QgsMapLayer::saveSldStyle( const QString theURI, bool & theResultFlag ) QString QgsMapLayer::saveSldStyle( const QString theURI, bool & theResultFlag )
@ -1054,7 +1055,7 @@ QString QgsMapLayer::saveSldStyle( const QString theURI, bool & theResultFlag )
QString errorMsg; QString errorMsg;
QDomDocument myDocument; QDomDocument myDocument;
exportSldStyle( myDocument, errorMsg ); exportSldStyle( myDocument, errorMsg );
if( !errorMsg.isNull() ) if ( !errorMsg.isNull() )
{ {
theResultFlag = false; theResultFlag = false;
return errorMsg; return errorMsg;

View File

@ -79,33 +79,33 @@
#endif #endif
typedef bool saveStyle_t( typedef bool saveStyle_t(
const QString& uri, const QString& uri,
const QString& qmlStyle, const QString& qmlStyle,
const QString& sldStyle, const QString& sldStyle,
const QString& styleName, const QString& styleName,
const QString& styleDescription, const QString& styleDescription,
const QString& uiFileContent, const QString& uiFileContent,
bool useAsDefault, bool useAsDefault,
QString& errCause QString& errCause
); );
typedef QString loadStyle_t( typedef QString loadStyle_t(
const QString& uri, const QString& uri,
QString& errCause QString& errCause
); );
typedef int listStyles_t( typedef int listStyles_t(
const QString& uri, const QString& uri,
QVector<QString> &ids, QVector<QString> &ids,
QVector<QString> &names, QVector<QString> &names,
QVector<QString> &descriptions, QVector<QString> &descriptions,
QString& errCause QString& errCause
); );
typedef QString getStyleById_t( typedef QString getStyleById_t(
const QString& uri, const QString& uri,
QString styleID, QString styleID,
QString& errCause QString& errCause
); );
@ -3732,84 +3732,85 @@ QDomElement QgsAttributeEditorField::toDomElement( QDomDocument& doc ) const
int QgsVectorLayer::listStylesInDatabase( QVector<QString> &ids, QVector<QString> &names, QVector<QString> &descriptions, QString &msgError ) int QgsVectorLayer::listStylesInDatabase( QVector<QString> &ids, QVector<QString> &names, QVector<QString> &descriptions, QString &msgError )
{ {
QgsProviderRegistry * pReg = QgsProviderRegistry::instance(); QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
QLibrary *myLib = pReg->providerLibrary( mProviderKey ); QLibrary *myLib = pReg->providerLibrary( mProviderKey );
if ( !myLib ) if ( !myLib )
{ {
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey ); msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
return -1; return -1;
} }
listStyles_t* listStylesExternalMethod = ( listStyles_t * ) cast_to_fptr(myLib->resolve("listStyles")); listStyles_t* listStylesExternalMethod = ( listStyles_t * ) cast_to_fptr( myLib->resolve( "listStyles" ) );
if ( !listStylesExternalMethod ) if ( !listStylesExternalMethod )
{ {
delete myLib; delete myLib;
msgError = QObject::tr( "Provider %1 has no listStyles method" ).arg( mProviderKey ); msgError = QObject::tr( "Provider %1 has no listStyles method" ).arg( mProviderKey );
return -1; return -1;
} }
return listStylesExternalMethod(mDataSource, ids, names, descriptions, msgError); return listStylesExternalMethod( mDataSource, ids, names, descriptions, msgError );
} }
QString QgsVectorLayer::getStyleFromDatabase(QString styleId, QString &msgError) QString QgsVectorLayer::getStyleFromDatabase( QString styleId, QString &msgError )
{ {
QgsProviderRegistry * pReg = QgsProviderRegistry::instance(); QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
QLibrary *myLib = pReg->providerLibrary( mProviderKey ); QLibrary *myLib = pReg->providerLibrary( mProviderKey );
if ( !myLib ) if ( !myLib )
{ {
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey ); msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
return QObject::tr( "" ); return QObject::tr( "" );
} }
getStyleById_t* getStyleByIdMethod = ( getStyleById_t * ) cast_to_fptr(myLib->resolve("getStyleById")); getStyleById_t* getStyleByIdMethod = ( getStyleById_t * ) cast_to_fptr( myLib->resolve( "getStyleById" ) );
if ( !getStyleByIdMethod ) if ( !getStyleByIdMethod )
{ {
delete myLib; delete myLib;
msgError = QObject::tr( "Provider %1 has no getStyleById method" ).arg( mProviderKey ); msgError = QObject::tr( "Provider %1 has no getStyleById method" ).arg( mProviderKey );
return QObject::tr( "" ); return QObject::tr( "" );
} }
return getStyleByIdMethod( mDataSource, styleId, msgError ); return getStyleByIdMethod( mDataSource, styleId, msgError );
} }
void QgsVectorLayer::saveStyleToDatabase(QString name, QString description, void QgsVectorLayer::saveStyleToDatabase( QString name, QString description,
bool useAsDefault, QString uiFileContent, QString &msgError){ bool useAsDefault, QString uiFileContent, QString &msgError )
{
QString sldStyle, qmlStyle; QString sldStyle, qmlStyle;
QgsProviderRegistry * pReg = QgsProviderRegistry::instance(); QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
QLibrary *myLib = pReg->providerLibrary( mProviderKey ); QLibrary *myLib = pReg->providerLibrary( mProviderKey );
if ( !myLib ) if ( !myLib )
{ {
msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey ); msgError = QObject::tr( "Unable to load %1 provider" ).arg( mProviderKey );
return; return;
} }
saveStyle_t* saveStyleExternalMethod = ( saveStyle_t * ) cast_to_fptr(myLib->resolve("saveStyle")); saveStyle_t* saveStyleExternalMethod = ( saveStyle_t * ) cast_to_fptr( myLib->resolve( "saveStyle" ) );
if ( !saveStyleExternalMethod ) if ( !saveStyleExternalMethod )
{ {
delete myLib; delete myLib;
msgError = QObject::tr( "Provider %1 has no saveStyle method" ).arg( mProviderKey ); msgError = QObject::tr( "Provider %1 has no saveStyle method" ).arg( mProviderKey );
return; return;
} }
QDomDocument qmlDocument, sldDocument; QDomDocument qmlDocument, sldDocument;
this->exportNamedStyle(qmlDocument, msgError); this->exportNamedStyle( qmlDocument, msgError );
if( !msgError.isNull() ) if ( !msgError.isNull() )
{ {
return; return;
} }
qmlStyle = qmlDocument.toString(); qmlStyle = qmlDocument.toString();
this->exportSldStyle(sldDocument, msgError); this->exportSldStyle( sldDocument, msgError );
if( !msgError.isNull() ) if ( !msgError.isNull() )
{ {
return; return;
} }
sldStyle = sldDocument.toString(); sldStyle = sldDocument.toString();
saveStyleExternalMethod(mDataSource, qmlStyle, sldStyle, name, saveStyleExternalMethod( mDataSource, qmlStyle, sldStyle, name,
description, uiFileContent, useAsDefault, msgError); description, uiFileContent, useAsDefault, msgError );
} }
@ -3817,60 +3818,60 @@ void QgsVectorLayer::saveStyleToDatabase(QString name, QString description,
QString QgsVectorLayer::loadNamedStyle( const QString theURI, bool &theResultFlag , bool loadFromLocalDB ) QString QgsVectorLayer::loadNamedStyle( const QString theURI, bool &theResultFlag , bool loadFromLocalDB )
{ {
QgsDataSourceURI dsUri( theURI ); QgsDataSourceURI dsUri( theURI );
if ( !loadFromLocalDB && !dsUri.database().isEmpty() ) if ( !loadFromLocalDB && !dsUri.database().isEmpty() )
{
QgsProviderRegistry * pReg = QgsProviderRegistry::instance();
QLibrary *myLib = pReg->providerLibrary( mProviderKey );
if ( myLib )
{ {
QgsProviderRegistry * pReg = QgsProviderRegistry::instance(); loadStyle_t* loadStyleExternalMethod = ( loadStyle_t * ) cast_to_fptr( myLib->resolve( "loadStyle" ) );
QLibrary *myLib = pReg->providerLibrary( mProviderKey ); if ( loadStyleExternalMethod )
if ( myLib )
{
loadStyle_t* loadStyleExternalMethod = ( loadStyle_t * ) cast_to_fptr( myLib->resolve( "loadStyle" ) );
if ( loadStyleExternalMethod )
{
QString qml, errorMsg;
qml = loadStyleExternalMethod( mDataSource, errorMsg );
if( !qml.isEmpty() )
{
theResultFlag = this->applyNamedStyle( qml, errorMsg );
}
}
}
}
if( !theResultFlag )
{
return QgsMapLayer::loadNamedStyle( theURI, theResultFlag );
}
return QObject::tr( "Loaded from Provider" );
}
bool QgsVectorLayer::applyNamedStyle(QString namedStyle, QString errorMsg )
{
QDomDocument myDocument( "qgis" );
myDocument.setContent( namedStyle );
QDomElement myRoot = myDocument.firstChildElement( "qgis" );
if( myRoot.isNull() )
{
errorMsg = tr( "Error: qgis element could not be found" );
return false;
}
toggleScaleBasedVisibility( myRoot.attribute( "hasScaleBasedVisibilityFlag" ).toInt() == 1 );
setMinimumScale( myRoot.attribute( "minimumScale" ).toFloat() );
setMaximumScale( myRoot.attribute( "maximumScale" ).toFloat() );
#if 0
//read transparency level
QDomNode transparencyNode = myRoot.namedItem( "transparencyLevelInt" );
if ( ! transparencyNode.isNull() )
{ {
// set transparency level only if it's in project QString qml, errorMsg;
// (otherwise it sets the layer transparent) qml = loadStyleExternalMethod( mDataSource, errorMsg );
QDomElement myElement = transparencyNode.toElement(); if ( !qml.isEmpty() )
setTransparency( myElement.text().toInt() ); {
theResultFlag = this->applyNamedStyle( qml, errorMsg );
}
} }
#endif }
return readSymbology( myRoot, errorMsg ); }
if ( !theResultFlag )
{
return QgsMapLayer::loadNamedStyle( theURI, theResultFlag );
}
return QObject::tr( "Loaded from Provider" );
}
bool QgsVectorLayer::applyNamedStyle( QString namedStyle, QString errorMsg )
{
QDomDocument myDocument( "qgis" );
myDocument.setContent( namedStyle );
QDomElement myRoot = myDocument.firstChildElement( "qgis" );
if ( myRoot.isNull() )
{
errorMsg = tr( "Error: qgis element could not be found" );
return false;
}
toggleScaleBasedVisibility( myRoot.attribute( "hasScaleBasedVisibilityFlag" ).toInt() == 1 );
setMinimumScale( myRoot.attribute( "minimumScale" ).toFloat() );
setMaximumScale( myRoot.attribute( "maximumScale" ).toFloat() );
#if 0
//read transparency level
QDomNode transparencyNode = myRoot.namedItem( "transparencyLevelInt" );
if ( ! transparencyNode.isNull() )
{
// set transparency level only if it's in project
// (otherwise it sets the layer transparent)
QDomElement myElement = transparencyNode.toElement();
setTransparency( myElement.text().toInt() );
}
#endif
return readSymbology( myRoot, errorMsg );
} }

View File

@ -714,15 +714,15 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
* @return the number of styles related to current layer * @return the number of styles related to current layer
*/ */
virtual int listStylesInDatabase( QVector<QString> &ids, QVector<QString> &names, virtual int listStylesInDatabase( QVector<QString> &ids, QVector<QString> &names,
QVector<QString> &descriptions, QString &msgError ); QVector<QString> &descriptions, QString &msgError );
/** /**
* Will return the named style corresponding to style id provided * Will return the named style corresponding to style id provided
*/ */
virtual QString getStyleFromDatabase( QString styleId, QString &msgError ); virtual QString getStyleFromDatabase( QString styleId, QString &msgError );
virtual QString loadNamedStyle( const QString theURI, bool &theResultFlag, bool loadFromLocalDb=false ); virtual QString loadNamedStyle( const QString theURI, bool &theResultFlag, bool loadFromLocalDb = false );
virtual bool applyNamedStyle(QString namedStyle , QString errorMsg); virtual bool applyNamedStyle( QString namedStyle , QString errorMsg );
/** convert a saved attribute editor element into a AttributeEditor structure as it's used internally. /** convert a saved attribute editor element into a AttributeEditor structure as it's used internally.
* @param elem the DOM element * @param elem the DOM element

View File

@ -3242,38 +3242,38 @@ QGISEXTERN bool saveStyle( const QString& uri, const QString& qmlStyle, const QS
return false; return false;
} }
QString checkExitingTableQuery = QObject::tr( "SELECT COUNT(*) FROM information_schema.tables WHERE table_name='%1'" ).arg( styleTableName ); QString checkExitingTableQuery = QObject::tr( "SELECT COUNT(*) FROM information_schema.tables WHERE table_name='%1'" ).arg( styleTableName );
PGresult* result = conn->PQexec( checkExitingTableQuery ); PGresult* result = conn->PQexec( checkExitingTableQuery );
char* c = PQgetvalue( result, 0, 0 ); char* c = PQgetvalue( result, 0, 0 );
if( *c == '0' ) if ( *c == '0' )
{
QString createTabeQuery = QObject::tr( "CREATE TABLE public.%1 (id SERIAL PRIMARY KEY, f_table_catalog varchar(256), f_table_schema varchar(256), f_table_name varchar(256), f_geometry_column varchar(256), styleName varchar(30), styleQML xml, styleSLD xml, useAsDefault boolean, description text, owner varchar(30), ui xml, update_time timestamp DEFAULT CURRENT_TIMESTAMP );" ).arg( styleTableName );
res = conn->PQexec( createTabeQuery );
if ( res.PQresultStatus() != PGRES_COMMAND_OK )
{ {
QString createTabeQuery = QObject::tr( "CREATE TABLE public.%1 (id SERIAL PRIMARY KEY, f_table_catalog varchar(256), f_table_schema varchar(256), f_table_name varchar(256), f_geometry_column varchar(256), styleName varchar(30), styleQML xml, styleSLD xml, useAsDefault boolean, description text, owner varchar(30), ui xml, update_time timestamp DEFAULT CURRENT_TIMESTAMP );" ).arg( styleTableName ); errCause = QObject::tr( "Unable to save layer style. It's not possible to create the destination table on the database. Maybe this is due to table permissions (user=%1). Please contact your database admin" ).arg( dsUri.username() );
conn->disconnect();
res = conn->PQexec( createTabeQuery ); return false;
if ( res.PQresultStatus() != PGRES_COMMAND_OK )
{
errCause = QObject::tr( "Unable to save layer style. It's not possible to create the destination table on the database. Maybe this is due to table permissions (user=%1). Please contact your database admin" ).arg( dsUri.username() );
conn->disconnect();
return false;
}
} }
}
f_table_catalog = dsUri.database(); f_table_catalog = dsUri.database();
f_table_schema = dsUri.schema(); f_table_schema = dsUri.schema();
f_table_name = dsUri.table(); f_table_name = dsUri.table();
f_geometry_column = dsUri.geometryColumn(); f_geometry_column = dsUri.geometryColumn();
owner = dsUri.username(); owner = dsUri.username();
isdef = (useAsDefault) ? QObject::tr( "true" ) : QObject::tr( "false" ); isdef = ( useAsDefault ) ? QObject::tr( "true" ) : QObject::tr( "false" );
name = ( styleName.isEmpty() ) ? dsUri.table() : styleName; name = ( styleName.isEmpty() ) ? dsUri.table() : styleName;
desc = ( styleDescription.isEmpty() ) ? QDateTime::currentDateTime().toString() : styleDescription; desc = ( styleDescription.isEmpty() ) ? QDateTime::currentDateTime().toString() : styleDescription;
QString uiFileColumn( "" ); QString uiFileColumn( "" );
QString uiFileValue( "" ); QString uiFileValue( "" );
if( !uiFileContent.isEmpty() ) if ( !uiFileContent.isEmpty() )
{ {
uiFileColumn.append( QObject::tr( ", ui" ) ); uiFileColumn.append( QObject::tr( ", ui" ) );
uiFileValue.append( QObject::tr( ",XMLPARSE(DOCUMENT %1)" ).arg( QgsPostgresConn::quotedValue( uiFileContent ) ) ); uiFileValue.append( QObject::tr( ",XMLPARSE(DOCUMENT %1)" ).arg( QgsPostgresConn::quotedValue( uiFileContent ) ) );
} }
QString sql = QObject::tr( "INSERT INTO %1 ( f_table_catalog, " QString sql = QObject::tr( "INSERT INTO %1 ( f_table_catalog, "
@ -3282,56 +3282,56 @@ QGISEXTERN bool saveStyle( const QString& uri, const QString& qmlStyle, const QS
"description, owner %12) " "description, owner %12) "
"VALUES(%2,%3,%4,%5,%6,XMLPARSE(DOCUMENT %7)," "VALUES(%2,%3,%4,%5,%6,XMLPARSE(DOCUMENT %7),"
"XMLPARSE(DOCUMENT %8),%9,%10,%11 %13);" ) "XMLPARSE(DOCUMENT %8),%9,%10,%11 %13);" )
.arg( styleTableName ) .arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) ) .arg( QgsPostgresConn::quotedValue( f_geometry_column ) )
.arg( QgsPostgresConn::quotedValue( name ) ) .arg( QgsPostgresConn::quotedValue( name ) )
.arg( QgsPostgresConn::quotedValue( qmlStyle ) ) .arg( QgsPostgresConn::quotedValue( qmlStyle ) )
.arg( QgsPostgresConn::quotedValue( sldStyle ) ) .arg( QgsPostgresConn::quotedValue( sldStyle ) )
.arg( isdef ) .arg( isdef )
.arg( QgsPostgresConn::quotedValue( desc ) ) .arg( QgsPostgresConn::quotedValue( desc ) )
.arg( QgsPostgresConn::quotedValue( owner ) ) .arg( QgsPostgresConn::quotedValue( owner ) )
.arg( uiFileColumn ) .arg( uiFileColumn )
.arg( uiFileValue ); .arg( uiFileValue );
QString checkQuery = QObject::tr( "SELECT styleName FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5 AND styleName=%6" ) QString checkQuery = QObject::tr( "SELECT styleName FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5 AND styleName=%6" )
.arg( styleTableName ) .arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue(f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue(f_geometry_column ) ) .arg( QgsPostgresConn::quotedValue( f_geometry_column ) )
.arg( QgsPostgresConn::quotedValue( name ) ); .arg( QgsPostgresConn::quotedValue( name ) );
result = conn->PQexec( checkQuery ); result = conn->PQexec( checkQuery );
if( PQntuples( result ) > 0 ) if ( PQntuples( result ) > 0 )
{ {
sql = QObject::tr( "UPDATE %1 SET useAsDefault=%2, styleQML=XMLPARSE(DOCUMENT %3), styleSLD=XMLPARSE(DOCUMENT %4), description=%5, owner=%6 WHERE f_table_catalog=%7 AND f_table_schema=%8 AND f_table_name=%9 AND f_geometry_column=%10 AND styleName=%11;") sql = QObject::tr( "UPDATE %1 SET useAsDefault=%2, styleQML=XMLPARSE(DOCUMENT %3), styleSLD=XMLPARSE(DOCUMENT %4), description=%5, owner=%6 WHERE f_table_catalog=%7 AND f_table_schema=%8 AND f_table_name=%9 AND f_geometry_column=%10 AND styleName=%11;" )
.arg( styleTableName ) .arg( styleTableName )
.arg( isdef ) .arg( isdef )
.arg( QgsPostgresConn::quotedValue( qmlStyle .arg( QgsPostgresConn::quotedValue( qmlStyle
) ) ) )
.arg( QgsPostgresConn::quotedValue( sldStyle ) ) .arg( QgsPostgresConn::quotedValue( sldStyle ) )
.arg( QgsPostgresConn::quotedValue( desc ) ) .arg( QgsPostgresConn::quotedValue( desc ) )
.arg( QgsPostgresConn::quotedValue( owner ) ) .arg( QgsPostgresConn::quotedValue( owner ) )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) ) .arg( QgsPostgresConn::quotedValue( f_geometry_column ) )
.arg( QgsPostgresConn::quotedValue( name ) ); .arg( QgsPostgresConn::quotedValue( name ) );
} }
if( useAsDefault ) if ( useAsDefault )
{ {
QString removeDefaultSql = QObject::tr( "UPDATE %1 SET useAsDefault=false WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5;") QString removeDefaultSql = QObject::tr( "UPDATE %1 SET useAsDefault=false WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5;" )
.arg( styleTableName ) .arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue(f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue(f_geometry_column ) ); .arg( QgsPostgresConn::quotedValue( f_geometry_column ) );
sql = QObject::tr("BEGIN; %1 %2 COMMIT;") sql = QObject::tr( "BEGIN; %1 %2 COMMIT;" )
.arg( removeDefaultSql ).arg( sql ); .arg( removeDefaultSql ).arg( sql );
} }
res = conn->PQexec( sql ); res = conn->PQexec( sql );
@ -3347,135 +3347,135 @@ QGISEXTERN bool saveStyle( const QString& uri, const QString& qmlStyle, const QS
QGISEXTERN QString loadStyle( const QString& uri, QString& errCause ) QGISEXTERN QString loadStyle( const QString& uri, QString& errCause )
{ {
QgsDataSourceURI dsUri( uri ); QgsDataSourceURI dsUri( uri );
QString styleTableName = QObject::tr( "layer_styles" ); QString styleTableName = QObject::tr( "layer_styles" );
QString f_table_catalog, f_table_schema, f_table_name, f_geometry_column; QString f_table_catalog, f_table_schema, f_table_name, f_geometry_column;
QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false );
if ( !conn )
{
errCause = QObject::tr( "Connection to database failed" );
return QObject::tr( "" );
}
f_table_catalog = dsUri.database();
f_table_schema = dsUri.schema();
f_table_name = dsUri.table();
f_geometry_column = dsUri.geometryColumn();
QString selectQmlQuery = QObject::tr( "SELECT styleQML FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5 ORDER BY (CASE WHEN useAsDefault THEN 1 ELSE 2 END), update_time DESC LIMIT 1;")
.arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) );
PGresult* result = conn->PQexec( selectQmlQuery );
if( PQntuples(result) == 1 )
{
char* c = PQgetvalue( result, 0, 0 );
return QObject::tr( c );;
}
QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false );
if ( !conn )
{
errCause = QObject::tr( "Connection to database failed" );
return QObject::tr( "" ); return QObject::tr( "" );
}
f_table_catalog = dsUri.database();
f_table_schema = dsUri.schema();
f_table_name = dsUri.table();
f_geometry_column = dsUri.geometryColumn();
QString selectQmlQuery = QObject::tr( "SELECT styleQML FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5 ORDER BY (CASE WHEN useAsDefault THEN 1 ELSE 2 END), update_time DESC LIMIT 1;" )
.arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) );
PGresult* result = conn->PQexec( selectQmlQuery );
if ( PQntuples( result ) == 1 )
{
char* c = PQgetvalue( result, 0, 0 );
return QObject::tr( c );;
}
return QObject::tr( "" );
} }
QGISEXTERN int listStyles( const QString& uri, QVector<QString> &ids, QVector<QString> &names, QGISEXTERN int listStyles( const QString& uri, QVector<QString> &ids, QVector<QString> &names,
QVector<QString> &descriptions, QString& errCause ) QVector<QString> &descriptions, QString& errCause )
{ {
QgsDataSourceURI dsUri( uri ); QgsDataSourceURI dsUri( uri );
QString styleTableName = QObject::tr( "layer_styles" ); QString styleTableName = QObject::tr( "layer_styles" );
QString f_table_catalog, f_table_schema, f_table_name, f_geometry_column; QString f_table_catalog, f_table_schema, f_table_name, f_geometry_column;
QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false ); QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false );
if ( !conn ) if ( !conn )
{ {
errCause = QObject::tr( "Connection to database failed using username: %1" ).arg( dsUri.username() ); errCause = QObject::tr( "Connection to database failed using username: %1" ).arg( dsUri.username() );
return -1; return -1;
} }
f_table_catalog = dsUri.database(); f_table_catalog = dsUri.database();
f_table_schema = dsUri.schema(); f_table_schema = dsUri.schema();
f_table_name = dsUri.table(); f_table_name = dsUri.table();
f_geometry_column = dsUri.geometryColumn(); f_geometry_column = dsUri.geometryColumn();
// ORDER BY (CASE WHEN useAsDefault THEN 1 ELSE 2 END), update_time DESC;") // ORDER BY (CASE WHEN useAsDefault THEN 1 ELSE 2 END), update_time DESC;")
QString selectRelatedQuery = QObject::tr( "SELECT id, styleName, description FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5;" ) QString selectRelatedQuery = QObject::tr( "SELECT id, styleName, description FROM %1 WHERE f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5;" )
.arg( styleTableName ) .arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) ); .arg( QgsPostgresConn::quotedValue( f_geometry_column ) );
PGresult* result = conn->PQexec( selectRelatedQuery ); PGresult* result = conn->PQexec( selectRelatedQuery );
if ( PQresultStatus( result ) != PGRES_TUPLES_OK ) if ( PQresultStatus( result ) != PGRES_TUPLES_OK )
{ {
QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectRelatedQuery ) ); QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectRelatedQuery ) );
errCause = QObject::tr( "Error executing the select query for related styles. The query was logged" ); errCause = QObject::tr( "Error executing the select query for related styles. The query was logged" );
return -1; return -1;
} }
int numberOfRelatedStyles = PQntuples( result ); int numberOfRelatedStyles = PQntuples( result );
for( int i=0; i<numberOfRelatedStyles; i++ ) for ( int i = 0; i < numberOfRelatedStyles; i++ )
{ {
ids.append( QObject::tr( PQgetvalue( result, i, 0 ) ) ); ids.append( QObject::tr( PQgetvalue( result, i, 0 ) ) );
names.append( QObject::tr( PQgetvalue( result, i, 1 ) ) ); names.append( QObject::tr( PQgetvalue( result, i, 1 ) ) );
descriptions.append( QObject::tr( PQgetvalue( result, i, 2 ) ) ); descriptions.append( QObject::tr( PQgetvalue( result, i, 2 ) ) );
} }
QString selectOthersQuery = QObject::tr( "SELECT id, styleName, description FROM %1 WHERE NOT(f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5) ORDER BY update_time DESC;") QString selectOthersQuery = QObject::tr( "SELECT id, styleName, description FROM %1 WHERE NOT(f_table_catalog=%2 AND f_table_schema=%3 AND f_table_name=%4 AND f_geometry_column=%5) ORDER BY update_time DESC;" )
.arg( styleTableName ) .arg( styleTableName )
.arg( QgsPostgresConn::quotedValue( f_table_catalog ) ) .arg( QgsPostgresConn::quotedValue( f_table_catalog ) )
.arg( QgsPostgresConn::quotedValue( f_table_schema ) ) .arg( QgsPostgresConn::quotedValue( f_table_schema ) )
.arg( QgsPostgresConn::quotedValue( f_table_name ) ) .arg( QgsPostgresConn::quotedValue( f_table_name ) )
.arg( QgsPostgresConn::quotedValue( f_geometry_column ) ); .arg( QgsPostgresConn::quotedValue( f_geometry_column ) );
result = conn->PQexec( selectOthersQuery ); result = conn->PQexec( selectOthersQuery );
if ( PQresultStatus( result ) != PGRES_TUPLES_OK ) if ( PQresultStatus( result ) != PGRES_TUPLES_OK )
{ {
QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectOthersQuery ) ); QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectOthersQuery ) );
errCause = QObject::tr( "Error executing the select query for unrelated styles. The query was logged" ); errCause = QObject::tr( "Error executing the select query for unrelated styles. The query was logged" );
return -1; return -1;
} }
for( int i=0; i<PQntuples( result ); i++ ) for ( int i = 0; i < PQntuples( result ); i++ )
{ {
ids.append( QObject::tr( PQgetvalue( result, i, 0 ) ) ); ids.append( QObject::tr( PQgetvalue( result, i, 0 ) ) );
names.append( QObject::tr( PQgetvalue( result, i, 1 ) ) ); names.append( QObject::tr( PQgetvalue( result, i, 1 ) ) );
descriptions.append( QObject::tr( PQgetvalue( result, i, 2 ) ) ); descriptions.append( QObject::tr( PQgetvalue( result, i, 2 ) ) );
} }
return numberOfRelatedStyles; return numberOfRelatedStyles;
} }
QGISEXTERN QString getStyleById(const QString& uri, QString styleId, QString& errCause ) QGISEXTERN QString getStyleById( const QString& uri, QString styleId, QString& errCause )
{ {
QgsDataSourceURI dsUri( uri ); QgsDataSourceURI dsUri( uri );
QString styleTableName = QObject::tr( "layer_styles" ); QString styleTableName = QObject::tr( "layer_styles" );
QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false ); QgsPostgresConn* conn = QgsPostgresConn::connectDb( dsUri.connectionInfo(), false );
if ( !conn ) if ( !conn )
{ {
errCause = QObject::tr( "Connection to database failed using username: %1" ).arg( dsUri.username() ); errCause = QObject::tr( "Connection to database failed using username: %1" ).arg( dsUri.username() );
return QObject::tr( "" ); return QObject::tr( "" );
} }
QString selectQmlQuery = QObject::tr( "SELECT styleQml FROM %1 WHERE id=%2") QString selectQmlQuery = QObject::tr( "SELECT styleQml FROM %1 WHERE id=%2" )
.arg( styleTableName ) .arg( styleTableName )
.arg( styleId ); .arg( styleId );
PGresult* result = conn->PQexec( selectQmlQuery ); PGresult* result = conn->PQexec( selectQmlQuery );
if ( PQresultStatus( result ) != PGRES_TUPLES_OK ) if ( PQresultStatus( result ) != PGRES_TUPLES_OK )
{ {
QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectQmlQuery ) ); QgsMessageLog::logMessage( QObject::tr( "Error executing query: %1" ).arg( selectQmlQuery ) );
errCause = QObject::tr( "Error executing the select query. The query was logged" ); errCause = QObject::tr( "Error executing the select query. The query was logged" );
return QObject::tr( "" ); return QObject::tr( "" );
} }
if( PQntuples( result ) == 1) if ( PQntuples( result ) == 1 )
{ {
return PQgetvalue( result, 0, 0 ); return PQgetvalue( result, 0, 0 );
} }
else else
{ {
errCause = QObject::tr( "Consistence error in table '%1'. Style id should be unique" ).arg( styleTableName ); errCause = QObject::tr( "Consistence error in table '%1'. Style id should be unique" ).arg( styleTableName );
return QObject::tr( "" ); return QObject::tr( "" );
} }
} }

View File

@ -167,7 +167,7 @@ class QgsPostgresProvider : public QgsVectorDataProvider
/** /**
* It returns true. Saving style to db is supported by this provider * It returns true. Saving style to db is supported by this provider
*/ */
virtual bool isSaveAndLoadStyleToDBSupported(){ return true; } virtual bool isSaveAndLoadStyleToDBSupported() { return true; }
QgsAttributeList attributeIndexes(); QgsAttributeList attributeIndexes();