mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
another indention update
This commit is contained in:
parent
9ca7223e4a
commit
d4542feedf
@ -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 );
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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() );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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 ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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( "" );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user