3,440 changes: 1,888 additions & 1,552 deletions i18n/qgis_it.ts

Large diffs are not rendered by default.

171 changes: 86 additions & 85 deletions i18n/qgis_ja.ts

Large diffs are not rendered by default.

3,771 changes: 1,945 additions & 1,826 deletions i18n/qgis_ka_GE.ts

Large diffs are not rendered by default.

1,148 changes: 681 additions & 467 deletions i18n/qgis_km.ts

Large diffs are not rendered by default.

1,624 changes: 841 additions & 783 deletions i18n/qgis_ko_KR.ts

Large diffs are not rendered by default.

3,765 changes: 1,940 additions & 1,825 deletions i18n/qgis_lo.ts

Large diffs are not rendered by default.

3,765 changes: 1,936 additions & 1,829 deletions i18n/qgis_lt.ts

Large diffs are not rendered by default.

1,166 changes: 663 additions & 503 deletions i18n/qgis_lv.ts

Large diffs are not rendered by default.

3,757 changes: 1,932 additions & 1,825 deletions i18n/qgis_ml_IN.ts

Large diffs are not rendered by default.

3,778 changes: 1,953 additions & 1,825 deletions i18n/qgis_mn.ts

Large diffs are not rendered by default.

1,165 changes: 704 additions & 461 deletions i18n/qgis_nl.ts

Large diffs are not rendered by default.

3,765 changes: 1,936 additions & 1,829 deletions i18n/qgis_no.ts

Large diffs are not rendered by default.

3,081 changes: 1,708 additions & 1,373 deletions i18n/qgis_pl_PL.ts

Large diffs are not rendered by default.

3,441 changes: 1,889 additions & 1,552 deletions i18n/qgis_pt_BR.ts

Large diffs are not rendered by default.

3,748 changes: 1,984 additions & 1,764 deletions i18n/qgis_pt_PT.ts

Large diffs are not rendered by default.

3,755 changes: 1,952 additions & 1,803 deletions i18n/qgis_ro.ts

Large diffs are not rendered by default.

3,510 changes: 1,933 additions & 1,577 deletions i18n/qgis_ru.ts

Large diffs are not rendered by default.

3,858 changes: 2,090 additions & 1,768 deletions i18n/qgis_sk.ts

Large diffs are not rendered by default.

1,590 changes: 824 additions & 766 deletions i18n/qgis_sl_SI.ts

Large diffs are not rendered by default.

3,769 changes: 1,942 additions & 1,827 deletions i18n/qgis_sq_AL.ts

Large diffs are not rendered by default.

3,762 changes: 1,954 additions & 1,808 deletions i18n/qgis_sr_Cyrl.ts

Large diffs are not rendered by default.

3,762 changes: 1,954 additions & 1,808 deletions i18n/qgis_sr_Latn.ts

Large diffs are not rendered by default.

3,346 changes: 1,761 additions & 1,585 deletions i18n/qgis_sv.ts

Large diffs are not rendered by default.

3,757 changes: 1,932 additions & 1,825 deletions i18n/qgis_sw.ts

Large diffs are not rendered by default.

3,765 changes: 1,936 additions & 1,829 deletions i18n/qgis_ta.ts

Large diffs are not rendered by default.

3,766 changes: 1,956 additions & 1,810 deletions i18n/qgis_th.ts

Large diffs are not rendered by default.

3,770 changes: 1,953 additions & 1,817 deletions i18n/qgis_tr.ts

Large diffs are not rendered by default.

3,770 changes: 1,954 additions & 1,816 deletions i18n/qgis_uk.ts

Large diffs are not rendered by default.

3,765 changes: 1,944 additions & 1,821 deletions i18n/qgis_vi.ts

Large diffs are not rendered by default.

3,765 changes: 1,936 additions & 1,829 deletions i18n/qgis_xh.ts

Large diffs are not rendered by default.

3,745 changes: 1,989 additions & 1,756 deletions i18n/qgis_zh_CN.ts

Large diffs are not rendered by default.

1,462 changes: 753 additions & 709 deletions i18n/qgis_zh_TW.ts

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions images/images.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@
<file>themes/default/mActionHelpSponsors.png</file>
<file>themes/default/mActionHideAllLayers.png</file>
<file>themes/default/mActionIdentify.png</file>
<file>themes/default/mActionIdentify.svg</file>
<file>themes/default/mActionIncreaseBrightness.svg</file>
<file>themes/default/mActionIncreaseContrast.svg</file>
<file>themes/default/mActionInOverview.png</file>
Expand Down
Binary file modified images/themes/default/mActionIdentify.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
422 changes: 422 additions & 0 deletions images/themes/default/mActionIdentify.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion python/plugins/sextante/algs/ftools/Dissolve.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ def processAlgorithm(self, progress):
progress.setPercentage(int(nElement/nFeat * 100))
atMap = inFeat.attributes()
tempItem = atMap[ field ]
if tempItem.strip() == item.strip():
if unicode(tempItem).strip() == unicode(item).strip():
if first:
QgsGeometry( inFeat.geometry() )
tmpInGeom = QgsGeometry( inFeat.geometry() )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def processAlgorithm(self, progress):
for inFeat in features:
atMap = inFeat.attributes()
idVar = atMap[index]
if idVar.strip() == i.strip():
if unicode(idVar).strip() == unicode(i).strip():
if first:
attrs = atMap
print attrs
Expand Down
2 changes: 1 addition & 1 deletion python/plugins/sextante/gui/FileSelectionPanel.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,4 @@ def getValue(self):
return s

def setText(self, text):
self.text.setText(text)
self.text.setText(text)
4 changes: 2 additions & 2 deletions python/plugins/sextante/modeler/ModelerParametersDialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ def setParamNumberValue(self, param, widget):
except:
return False
else:
value = widget.itemData(widget.currentIndex()).toPyObject()
value = widget.itemData(widget.currentIndex())
self.params[param.name] = value
return True

Expand All @@ -756,7 +756,7 @@ def setParamExtentValue(self, param, widget):
return False
self.values[name] = s
else:
value = widget.itemData(widget.currentIndex()).toPyObject()
value = widget.itemData(widget.currentIndex())
self.params[param.name] = value
return True

Expand Down
2 changes: 1 addition & 1 deletion src/app/qgisapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1753,7 +1753,7 @@ void QgisApp::setTheme( QString theThemeName )
mActionZoomNext->setIcon( QgsApplication::getThemeIcon( "/mActionZoomNext.png" ) );
mActionZoomToLayer->setIcon( QgsApplication::getThemeIcon( "/mActionZoomToLayer.png" ) );
mActionZoomActualSize->setIcon( QgsApplication::getThemeIcon( "/mActionZoomActual.png" ) );
mActionIdentify->setIcon( QgsApplication::getThemeIcon( "/mActionIdentify.png" ) );
mActionIdentify->setIcon( QgsApplication::getThemeIcon( "/mActionIdentify.svg" ) );
mActionFeatureAction->setIcon( QgsApplication::getThemeIcon( "/mAction.png" ) );
mActionSelect->setIcon( QgsApplication::getThemeIcon( "/mActionSelect.png" ) );
mActionSelectRectangle->setIcon( QgsApplication::getThemeIcon( "/mActionSelectRectangle.png" ) );
Expand Down
12 changes: 6 additions & 6 deletions src/plugins/heatmap/heatmapgui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ void HeatmapGui::on_rowsSpinBox_valueChanged()
mRows = rowsSpinBox->value();
mYcellsize = mBBox.height() / mRows;
mXcellsize = mYcellsize;
mColumns = max( round( mBBox.width() / mXcellsize ), 1 );
mColumns = max( qRound( mBBox.width() / mXcellsize ), 1 );

updateSize();
}
Expand All @@ -295,7 +295,7 @@ void HeatmapGui::on_columnsSpinBox_valueChanged()
mColumns = columnsSpinBox->value();
mXcellsize = mBBox.width() / mColumns;
mYcellsize = mXcellsize;
mRows = max( round( mBBox.height() / mYcellsize ), 1 );
mRows = max( qRound( mBBox.height() / mYcellsize ), 1 );

updateSize();
}
Expand All @@ -304,8 +304,8 @@ void HeatmapGui::on_cellXLineEdit_editingFinished()
{
mXcellsize = cellXLineEdit->text().toDouble();
mYcellsize = mXcellsize;
mRows = max( round( mBBox.height() / mYcellsize ), 1 );
mColumns = max( round( mBBox.width() / mXcellsize ), 1 );
mRows = max( qRound( mBBox.height() / mYcellsize ), 1 );
mColumns = max( qRound( mBBox.width() / mXcellsize ), 1 );

updateSize();
}
Expand All @@ -314,8 +314,8 @@ void HeatmapGui::on_cellYLineEdit_editingFinished()
{
mYcellsize = cellYLineEdit->text().toDouble();
mXcellsize = mYcellsize;
mRows = max( round( mBBox.height() / mYcellsize ), 1 );
mColumns = max( round( mBBox.width() / mXcellsize ), 1 );
mRows = max( qRound( mBBox.height() / mYcellsize ), 1 );
mColumns = max( qRound( mBBox.width() / mXcellsize ), 1 );

updateSize();
}
Expand Down
19 changes: 3 additions & 16 deletions src/plugins/topology/checkDock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,8 @@ void checkDock::deleteErrors()
mErrorList.clear();
mErrorListModel->resetModel();

QList<QgsRubberBand*>::const_iterator rit;

for ( rit = mRbErrorMarkers.begin(); rit != mRbErrorMarkers.end(); ++rit )
{
QgsRubberBand* rb = *rit;
rb->reset();
delete rb;
}
qDeleteAll( mRbErrorMarkers );
mRbErrorMarkers.clear();
}

void checkDock::parseErrorListByLayer( QString layerId )
Expand Down Expand Up @@ -397,14 +391,7 @@ void checkDock::validate( ValidateType type )
{
mErrorList.clear();

QList<QgsRubberBand*>::const_iterator it;
for ( it = mRbErrorMarkers.begin(); it != mRbErrorMarkers.end(); ++it )
{
QgsRubberBand* rb = *it;
rb->reset();
delete rb;
}

qDeleteAll( mRbErrorMarkers );
mRbErrorMarkers.clear();

runTests( type );
Expand Down
139 changes: 82 additions & 57 deletions src/providers/mssql/qgsmssqlprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -568,52 +568,55 @@ void QgsMssqlProvider::uniqueValues( int index, QList<QVariant> &uniqueValues, i
}


// update the extent, feature count, wkb type and srid for this layer
// update the extent, wkb type and srid for this layer
void QgsMssqlProvider::UpdateStatistics( bool estimate )
{
mNumberFeatures = 0;
// get features to calculate the statistics
QString statement;

QSqlQuery query = QSqlQuery( mDatabase );
query.setForwardOnly( true );

// Get the extents from the geometry_columns table to speed up load times.
statement = QString( "SELECT min_x, min_y, max_x, max_y from geometry_columns where f_table_schema = '%1' and f_table_name = '%2'" ).arg( mSchemaName ).arg( mTableName );
// Get the extents from the spatial index table to speed up load times.
// We have to use max() and min() because you can have more then one index but the biggest area is what we want to use.
QString sql = "SELECT min(bounding_box_xmin), min(bounding_box_ymin), max(bounding_box_xmax), max(bounding_box_ymax)"
" FROM sys.spatial_index_tessellations WHERE object_id = OBJECT_ID('[%1].[%2]')";

statement = QString (sql).arg( mSchemaName )
.arg( mTableName );

if ( query.exec( statement ) )
{
QgsDebugMsg("Found extents in spatial index");
if ( query.next() )
{
if ( !query.value( 0 ).isNull() || !query.value( 1 ).isNull() ||
!query.value( 2 ).isNull() || !query.value( 3 ).isNull() )
{
mExtent.setXMinimum( query.value( 0 ).toDouble() );
mExtent.setYMinimum( query.value( 1 ).toDouble() );
mExtent.setXMaximum( query.value( 2 ).toDouble() );
mExtent.setYMaximum( query.value( 3 ).toDouble() );
return;
}
}
}

// If we can't find the extents in the geometry_columns table just do what we normally do.
bool readAll = false;
QgsDebugMsg(query.lastError().text());

// If we can't find the extents in the spatial index table just do what we normally do.
bool readAllGeography = false;
if ( estimate )
{
if ( mGeometryColType == "geometry" )
statement = QString( "select min([%1].STPointN(1).STX), min([%1].STPointN(1).STY), max([%1].STPointN(1).STX), max([%1].STPointN(1).STY), COUNT([%1])" ).arg( mGeometryColName );
statement = QString( "select min([%1].STPointN(1).STX), min([%1].STPointN(1).STY), max([%1].STPointN(1).STX), max([%1].STPointN(1).STY)" ).arg( mGeometryColName );
else
statement = QString( "select min([%1].STPointN(1).Long), min([%1].STPointN(1).Lat), max([%1].STPointN(1).Long), max([%1].STPointN(1).Lat), COUNT([%1])" ).arg( mGeometryColName );
statement = QString( "select min([%1].STPointN(1).Long), min([%1].STPointN(1).Lat), max([%1].STPointN(1).Long), max([%1].STPointN(1).Lat)" ).arg( mGeometryColName );
}
else
{
if ( mGeometryColType == "geometry" )
statement = QString( "select min([%1].STEnvelope().STPointN(1).STX), min([%1].STEnvelope().STPointN(1).STY), max([%1].STEnvelope().STPointN(3).STX), max([%1].STEnvelope().STPointN(3).STY), count([%1])" ).arg( mGeometryColName );
statement = QString( "select min([%1].STEnvelope().STPointN(1).STX), min([%1].STEnvelope().STPointN(1).STY), max([%1].STEnvelope().STPointN(3).STX), max([%1].STEnvelope().STPointN(3).STY)" ).arg( mGeometryColName );
else
{
statement = QString( "select [%1]" ).arg( mGeometryColName );
readAll = true;
readAllGeography = true;
}
}

Expand All @@ -633,52 +636,45 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate )
QgsDebugMsg( msg );
}

if ( query.isActive() )
if ( !query.isActive() )
{
return;
}

QgsGeometry geom;
if ( !readAllGeography )
{
QgsGeometry geom;
if ( !readAll )
if ( query.next() )
{
if ( query.next() )
{
mExtent.setXMinimum( query.value( 0 ).toDouble() );
mExtent.setYMinimum( query.value( 1 ).toDouble() );
mExtent.setXMaximum( query.value( 2 ).toDouble() );
mExtent.setYMaximum( query.value( 3 ).toDouble() );
mNumberFeatures = query.value( 4 ).toInt();
}
mExtent.setXMinimum( query.value( 0 ).toDouble() );
mExtent.setYMinimum( query.value( 1 ).toDouble() );
mExtent.setXMaximum( query.value( 2 ).toDouble() );
mExtent.setYMaximum( query.value( 3 ).toDouble() );
return;
}
else
{
// read all features
while ( query.next() )
{
QByteArray ar = query.value( 0 ).toByteArray();
unsigned char* wkb = parser.ParseSqlGeometry(( unsigned char* )ar.data(), ar.size() );
if ( wkb )
{
geom.fromWkb( wkb, parser.GetWkbLen() );
QgsRectangle rect = geom.boundingBox();
}

if ( mNumberFeatures > 0 )
{
if ( rect.xMinimum() < mExtent.xMinimum() )
mExtent.setXMinimum( rect.xMinimum() );
if ( rect.yMinimum() < mExtent.yMinimum() )
mExtent.setYMinimum( rect.yMinimum() );
if ( rect.xMaximum() > mExtent.xMaximum() )
mExtent.setXMaximum( rect.xMaximum() );
if ( rect.yMaximum() > mExtent.yMaximum() )
mExtent.setYMaximum( rect.yMaximum() );
}
else
{
mExtent = rect;
mWkbType = geom.wkbType();
mSRId = parser.GetSRSId();
}
++mNumberFeatures;
}
}
// We have to read all the geometry if readAllGeography is true.
while ( query.next() )
{
QByteArray ar = query.value( 0 ).toByteArray();
unsigned char* wkb = parser.ParseSqlGeometry(( unsigned char* )ar.data(), ar.size() );
if ( wkb )
{
geom.fromWkb( wkb, parser.GetWkbLen() );
QgsRectangle rect = geom.boundingBox();

if ( rect.xMinimum() < mExtent.xMinimum() )
mExtent.setXMinimum( rect.xMinimum() );
if ( rect.yMinimum() < mExtent.yMinimum() )
mExtent.setYMinimum( rect.yMinimum() );
if ( rect.xMaximum() > mExtent.xMaximum() )
mExtent.setXMaximum( rect.xMaximum() );
if ( rect.yMaximum() > mExtent.yMaximum() )
mExtent.setYMaximum( rect.yMaximum() );

mWkbType = geom.wkbType();
mSRId = parser.GetSRSId();
}
}
}
Expand All @@ -704,7 +700,36 @@ QGis::WkbType QgsMssqlProvider::geometryType() const
*/
long QgsMssqlProvider::featureCount() const
{
return mNumberFeatures;
// Return the count that we get from the subset.
if ( !mSqlWhereClause.isEmpty() )
return mNumberFeatures;

// If there is no subset set we can get the count from the system tables.
// Which is faster then doing select count(*)
QSqlQuery query = QSqlQuery( mDatabase );
query.setForwardOnly( true );

QString sql = "SELECT rows"
" FROM sys.tables t"
" JOIN sys.partitions p ON t.object_id = p.object_id AND p.index_id IN (0,1)"
" WHERE SCHEMA_NAME(t.schema_id) = '%1' AND OBJECT_NAME(t.OBJECT_ID) = '%2'";

QString statement = QString (sql).arg( mSchemaName )
.arg( mTableName );

if ( query.exec( statement ) )
{
if ( query.next() )
{
return query.value(0).toInt();
}
}
else
{
// We couldn't get the rows from the sys tables. Can that ever happen?
// Should just do a select count(*) here.
return -1;
}
}

const QgsFields & QgsMssqlProvider::fields() const
Expand Down
2 changes: 1 addition & 1 deletion src/ui/qgisapp.ui
Original file line number Diff line number Diff line change
Expand Up @@ -910,7 +910,7 @@
</property>
<property name="icon">
<iconset resource="../../images/images.qrc">
<normaloff>:/images/themes/default/mActionIdentify.png</normaloff>:/images/themes/default/mActionIdentify.png</iconset>
<normaloff>:/images/themes/default/mActionIdentify.svg</normaloff>:/images/themes/default/mActionIdentify.svg</iconset>
</property>
<property name="text">
<string>Identify Features</string>
Expand Down