835 changes: 424 additions & 411 deletions i18n/qgis_et_EE.ts

Large diffs are not rendered by default.

1,300 changes: 654 additions & 646 deletions i18n/qgis_fa.ts

Large diffs are not rendered by default.

1,302 changes: 653 additions & 649 deletions i18n/qgis_fi.ts

Large diffs are not rendered by default.

1,300 changes: 662 additions & 638 deletions i18n/qgis_fr.ts

Large diffs are not rendered by default.

861 changes: 431 additions & 430 deletions i18n/qgis_gl_ES.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_he.ts

Large diffs are not rendered by default.

1,294 changes: 657 additions & 637 deletions i18n/qgis_hr_HR.ts

Large diffs are not rendered by default.

1,043 changes: 530 additions & 513 deletions i18n/qgis_hu.ts

Large diffs are not rendered by default.

1,298 changes: 661 additions & 637 deletions i18n/qgis_id.ts

Large diffs are not rendered by default.

1,302 changes: 653 additions & 649 deletions i18n/qgis_is.ts

Large diffs are not rendered by default.

1,066 changes: 545 additions & 521 deletions i18n/qgis_it.ts

Large diffs are not rendered by default.

859 changes: 436 additions & 423 deletions i18n/qgis_ja.ts

Large diffs are not rendered by default.

1,298 changes: 655 additions & 643 deletions i18n/qgis_ka_GE.ts

Large diffs are not rendered by default.

3,916 changes: 1,997 additions & 1,919 deletions i18n/qgis_ko_KR.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_lo.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_lt.ts

Large diffs are not rendered by default.

228 changes: 118 additions & 110 deletions i18n/qgis_lv.ts

Large diffs are not rendered by default.

1,306 changes: 657 additions & 649 deletions i18n/qgis_mn.ts

Large diffs are not rendered by default.

6 changes: 5 additions & 1 deletion i18n/qgis_nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8539,7 +8539,7 @@ Neem alstublieft contact op met de ontwikkelaars.
</message>
<message>
<source>&amp;Window</source>
<translation>&amp;Venster</translation>
<translation type="obsolete">&amp;Venster</translation>
</message>
<message>
<source>Toggle extents and mouse position display</source>
Expand Down Expand Up @@ -9785,6 +9785,10 @@ QWT Version: %1.</source>
<source>Cannot read style: %1</source>
<translation>Kan stijl niet inlezen: %1</translation>
</message>
<message>
<source>Window</source>
<translation>Venster</translation>
</message>
</context>
<context>
<name>QgisAppBase</name>
Expand Down
1,304 changes: 652 additions & 652 deletions i18n/qgis_no.ts

Large diffs are not rendered by default.

1,341 changes: 685 additions & 656 deletions i18n/qgis_pl_PL.ts

Large diffs are not rendered by default.

857 changes: 435 additions & 422 deletions i18n/qgis_pt_BR.ts

Large diffs are not rendered by default.

1,298 changes: 661 additions & 637 deletions i18n/qgis_pt_PT.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_ro.ts

Large diffs are not rendered by default.

1,062 changes: 541 additions & 521 deletions i18n/qgis_ru.ts

Large diffs are not rendered by default.

1,298 changes: 655 additions & 643 deletions i18n/qgis_sk.ts

Large diffs are not rendered by default.

1,298 changes: 661 additions & 637 deletions i18n/qgis_sl_SI.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_sq_AL.ts

Large diffs are not rendered by default.

1,294 changes: 657 additions & 637 deletions i18n/qgis_sr_CS-Latn.ts

Large diffs are not rendered by default.

1,298 changes: 655 additions & 643 deletions i18n/qgis_sv.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_ta.ts

Large diffs are not rendered by default.

1,294 changes: 657 additions & 637 deletions i18n/qgis_th.ts

Large diffs are not rendered by default.

1,302 changes: 659 additions & 643 deletions i18n/qgis_tr.ts

Large diffs are not rendered by default.

1,294 changes: 657 additions & 637 deletions i18n/qgis_uk.ts

Large diffs are not rendered by default.

1,296 changes: 656 additions & 640 deletions i18n/qgis_vi.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_xh.ts

Large diffs are not rendered by default.

1,304 changes: 652 additions & 652 deletions i18n/qgis_zh_CN.ts

Large diffs are not rendered by default.

1,298 changes: 655 additions & 643 deletions i18n/qgis_zh_TW.ts

Large diffs are not rendered by default.

5 changes: 0 additions & 5 deletions python/plugins/GdalTools/GdalTools.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,11 +264,6 @@ def initGui( self ):
QObject.connect( self.settings, SIGNAL( "triggered()" ), self.doSettings )
self.menu.addAction( self.settings )

menu_bar = self.iface.mainWindow().menuBar()
actions = menu_bar.actions()
lastAction = actions[ len( actions ) - 1 ]
menu_bar.insertMenu( lastAction, self.menu )

def unload( self ):
if not valid: return
pass
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/db_manager/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def description():
return "Manage your databases within QGis"

def version():
return "0.1.19"
return "0.1.20"

def qgisMinimumVersion():
return "1.5.0"
Expand Down
14 changes: 10 additions & 4 deletions python/plugins/db_manager/db_plugins/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,8 @@ def uri(self):
uri = self.database().uri()
schema = self.schemaName() if self.schemaName() else ''
geomCol = self.geomColumn if self.type in [Table.VectorType, Table.RasterType] else QString()
uri.setDataSource(schema, self.name, geomCol if geomCol else QString())
uniqueCol = self.getValidQGisUniqueFields(True) if self.isView else None
uri.setDataSource(schema, self.name, geomCol if geomCol else QString(), QString(), uniqueCol.name if uniqueCol else QString() )
return uri

def mimeUri(self):
Expand All @@ -567,23 +568,28 @@ def toMapLayer(self):
def getValidQGisUniqueFields(self, onlyOne=False):
""" list of fields valid to load the table as layer in QGis canvas.
QGis automatically search for a valid unique field, so it's
needed only for queries (e.g. SELECT * FROM table LIMIT 1)"""
needed only for queries and views """

ret = []

# add the pk
pkcols = filter(lambda x: x.primaryKey, self.fields())
if len(pkcols) == 1: ret.append( pkcols[0] )

# add both serial and int4 fields with an unique index
# then add both oid, serial and int fields with an unique index
indexes = self.indexes()
if indexes != None:
for idx in indexes:
if idx.isUnique and len(idx.columns) == 1:
fld = idx.fields()[ idx.columns[0] ]
if fld and fld not in ret and fld.dataType in ["oid", "serial", "int4"]:
if fld.dataType in ["oid", "serial", "int4", "int8"] and fld not in ret:
ret.append( fld )

# and finally append the other suitable fields
for fld in self.fields():
if fld.dataType in ["oid", "serial", "int4", "int8"] and fld not in ret:
ret.append( fld )

if onlyOne:
return ret[0] if len(ret) > 0 else None
return ret
Expand Down
4 changes: 3 additions & 1 deletion python/plugins/db_manager/dlg_add_geometry_column.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@

class DlgAddGeometryColumn(QDialog, Ui_DlgAddGeometryColumn):

GEOM_TYPES = ["POINT", "LINESTRING", "POLYGON", "MULTIPOINT", "MULTILINESTRING", "MULTIPOLYGON", "GEOMETRYCOLLECTION"]

def __init__(self, parent=None, table=None, db=None):
QDialog.__init__(self, parent)
self.table = table
Expand All @@ -48,7 +50,7 @@ def createGeomColumn(self):
return

name = self.editName.text()
geom_type = self.cboType.currentText()
geom_type = self.GEOM_TYPES[ self.cboType.currentIndex() ]
dim = self.spinDim.value()
try:
srid = int(self.editSrid.text())
Expand Down
4 changes: 3 additions & 1 deletion python/plugins/db_manager/dlg_create_table.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ def setModelData(self, editor, model, index):

class DlgCreateTable(QDialog, Ui_DlgCreateTable):

GEOM_TYPES = ["POINT", "LINESTRING", "POLYGON", "MULTIPOINT", "MULTILINESTRING", "MULTIPOLYGON", "GEOMETRYCOLLECTION"]

def __init__(self, item, parent=None):
QDialog.__init__(self, parent)
self.item = item
Expand Down Expand Up @@ -284,7 +286,7 @@ def createTable(self):
QMessageBox.information(self, "sorry", "set geometry column name")
return

geomType = str(self.cboGeomType.currentText())
geomType = self.GEOM_TYPES[ self.cboGeomType.currentIndex() ]
geomDim = self.spinGeomDim.value()
try:
geomSrid = int(self.editGeomSrid.text())
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/db_manager/dlg_import_vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ def importLayer(self):
QMessageBox.warning(self, "Import to database", u"Error %d\n%s" % (ret, errMsg) )
return

if self.chkGeomColumn.isChecked() and self.chkSpatialIndex.isChecked():
if self.chkSpatialIndex.isChecked():
self.db.connector.createSpatialIndex( (schema, table), geom )

QMessageBox.information(self, "Import to database", "Import was successful.")
Expand Down
4 changes: 2 additions & 2 deletions scripts/tsstat.pl
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@
bg => 'Захари Савов, Jordan Tzvetkov',
ca_ES => 'Xavi',
cs_CZ => 'Martin Landa, Peter Antolik, Martin Dzurov, Jan Helebrant',
da_DK => 'Henriette Roued',
da_DK => 'vacant ',
de => 'Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho',
es => 'Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann',
el_GR => 'Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves',
et_EE => 'Veiko Viil',
fa => 'Mola Pahnadayan',
fi => 'Marko Jarvenpaa',
fr => 'Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui',
fr => 'Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui, Robin Cura, Etienne Tourigny, Mathieu Bossaert',
gl_ES => 'Xan Vieiro',
hu => 'Zoltan Siki',
hr_HR => 'Zoran Jankovic',
Expand Down
11 changes: 6 additions & 5 deletions src/app/composer/qgscomposer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -240,14 +240,14 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
setTabPosition( Qt::AllDockWidgetAreas, QTabWidget::North );
mGeneralDock = new QDockWidget( tr( "Composition" ), this );
mGeneralDock->setObjectName( "CompositionDock" );
mItemDock = new QDockWidget( tr( "Item Properties" ) );
mItemDock = new QDockWidget( tr( "Item Properties"), this );
mItemDock->setObjectName( "ItemDock" );
mUndoDock = new QDockWidget( tr( "Command history" ), this );
mUndoDock->setObjectName( "CommandDock" );

mGeneralDock->setFeatures( QDockWidget::DockWidgetMovable );
mItemDock->setFeatures( QDockWidget::DockWidgetMovable );
mUndoDock->setFeatures( QDockWidget::DockWidgetMovable );
mGeneralDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable );
mItemDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable );
mUndoDock->setFeatures( QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable );


QgsCompositionWidget* compositionWidget = new QgsCompositionWidget( mGeneralDock, mComposition );
Expand All @@ -264,9 +264,10 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )

mItemDock->show();
mGeneralDock->show();
mUndoDock->hide();
mUndoDock->show();

tabifyDockWidget( mGeneralDock, mUndoDock );
tabifyDockWidget( mItemDock, mUndoDock );
tabifyDockWidget( mGeneralDock, mItemDock );

mGeneralDock->raise();
Expand Down
15 changes: 12 additions & 3 deletions src/app/qgisapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1151,16 +1151,25 @@ void QgisApp::createMenus()
}

#ifdef Q_WS_MAC

// keep plugins from hijacking About and Preferences application menus
// these duplicate actions will be moved to application menus by Qt
mFileMenu->addAction( mActionAbout );
mFileMenu->addAction( mActionOptions );

// Window Menu

mWindowMenu = menuBar()->addMenu( tr( "&Window" ) );
mWindowMenu = new QMenu( tr( "Window" ), this );

mWindowMenu->addAction( mActionWindowMinimize );
mWindowMenu->addAction( mActionWindowZoom );
mWindowMenu->addSeparator();

mWindowMenu->addAction( mActionWindowAllToFront );
mWindowMenu->addSeparator();

// insert before Help menu, as per Mac OS convention
menuBar()->insertMenu( mHelpMenu->menuAction(), mWindowMenu );
#endif

// Database Menu
Expand Down Expand Up @@ -5740,7 +5749,7 @@ void QgisApp::addPluginToDatabaseMenu( QString name, QAction* action )
before = actions.at( i );
break;
}
else if ( actions.at( i )->menu() == mHelpMenu )
else if ( actions.at( i )->menu() == firstRightStandardMenu() )
{
before = actions.at( i );
break;
Expand Down Expand Up @@ -5802,7 +5811,7 @@ void QgisApp::addPluginToWebMenu( QString name, QAction* action )
{
if ( actions.at( i )->menu() == mWebMenu )
return;
if ( actions.at( i )->menu() == mHelpMenu )
if ( actions.at( i )->menu() == firstRightStandardMenu() )
{
before = actions.at( i );
break;
Expand Down
2 changes: 2 additions & 0 deletions src/core/qgsproviderregistry.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,8 @@ QgsDataProvider *QgsProviderRegistry::provider( QString const & providerKey, QSt
// necessarily a reflection on the data provider itself
QgsDebugMsg( "Invalid data provider" );

delete dataProvider;

myLib->unload();
delete myLib;
return 0;
Expand Down
10 changes: 9 additions & 1 deletion src/gui/attributetable/qgsattributetablemodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,15 @@ void QgsAttributeTableModel::attributeDeleted( int idx )
Q_UNUSED( idx );
QgsDebugMsg( "entered." );
loadAttributes();
loadLayer();
for ( int row = 0; row <= mRowIdMap.size(); row++ )
{
QgsFeatureId fid = rowToId( row );

if( !mFeatureMap.contains( fid ) )
continue;

mFeatureMap[ fid ].deleteAttribute( idx );
}
emit modelChanged();
}

Expand Down
4 changes: 3 additions & 1 deletion src/providers/postgres/qgspostgresprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -221,11 +221,13 @@ void QgsPostgresProvider::disconnectDb()
if ( mConnectionRO )
{
mConnectionRO->disconnect();
mConnectionRO = 0;
}

if ( mConnectionRW )
{
mConnectionRW->disconnect();
mConnectionRW = 0;
}
}

Expand Down Expand Up @@ -2870,7 +2872,7 @@ bool QgsPostgresProvider::getGeometryDetails()
mEnabledCapabilities &= ~( QgsVectorDataProvider::ChangeGeometries | QgsVectorDataProvider::AddFeatures );
}

QgsDebugMsg( QString( "Feature type name is %1" ).arg( QGis::qgisFeatureTypes[ geometryType()] ) );
QgsDebugMsg( QString( "Feature type name is %1" ).arg( QGis::qgisFeatureTypes[ geometryType() ] ) );
QgsDebugMsg( QString( "Geometry is geography %1" ).arg( mIsGeography ) );

return mValid;
Expand Down
3 changes: 3 additions & 0 deletions src/ui/qgisapp.ui
Original file line number Diff line number Diff line change
Expand Up @@ -1372,6 +1372,9 @@
<property name="text">
<string>Configure shortcuts...</string>
</property>
<property name="menuRole">
<enum>QAction::NoRole</enum>
</property>
</action>
<action name="mActionLocalHistogramStretch">
<property name="icon">
Expand Down