Skip to content

Commit 923aa5f

Browse files
committed
Minimize canvas refreshes during save/rollback/cancel current edits actions
1 parent 814d8e0 commit 923aa5f

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

src/app/qgisapp.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5271,10 +5271,10 @@ bool QgisApp::toggleEditing( QgsMapLayer *layer, bool allowCancel )
52715271

52725272
void QgisApp::saveActiveLayerEdits()
52735273
{
5274-
saveEdits( activeLayer() );
5274+
saveEdits( activeLayer(), true, true );
52755275
}
52765276

5277-
void QgisApp::saveEdits( QgsMapLayer *layer, bool leaveEditable )
5277+
void QgisApp::saveEdits( QgsMapLayer *layer, bool leaveEditable, bool triggerRepaint )
52785278
{
52795279
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
52805280
if ( !vlayer || !vlayer->isEditable() || !vlayer->isModified() )
@@ -5297,10 +5297,13 @@ void QgisApp::saveEdits( QgsMapLayer *layer, bool leaveEditable )
52975297
{
52985298
vlayer->startEditing();
52995299
}
5300-
vlayer->triggerRepaint();
5300+
if ( triggerRepaint )
5301+
{
5302+
vlayer->triggerRepaint();
5303+
}
53015304
}
53025305

5303-
void QgisApp::cancelEdits( QgsMapLayer *layer, bool leaveEditable )
5306+
void QgisApp::cancelEdits( QgsMapLayer *layer, bool leaveEditable, bool triggerRepaint )
53045307
{
53055308
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
53065309
if ( !vlayer || !vlayer->isEditable() )
@@ -5326,7 +5329,10 @@ void QgisApp::cancelEdits( QgsMapLayer *layer, bool leaveEditable )
53265329
{
53275330
vlayer->startEditing();
53285331
}
5329-
vlayer->triggerRepaint();
5332+
if ( triggerRepaint )
5333+
{
5334+
vlayer->triggerRepaint();
5335+
}
53305336
}
53315337

53325338
void QgisApp::saveEdits()
@@ -5336,8 +5342,9 @@ void QgisApp::saveEdits()
53365342

53375343
foreach ( QgsMapLayer * layer, mMapLegend->selectedLayers() )
53385344
{
5339-
saveEdits( layer );
5345+
saveEdits( layer, true, false );
53405346
}
5347+
mMapCanvas->refresh();
53415348
activateDeactivateLayerRelatedActions( activeLayer() );
53425349
}
53435350

@@ -5354,8 +5361,9 @@ void QgisApp::saveAllEdits( bool verifyAction )
53545361

53555362
foreach ( QgsMapLayer * layer, editableLayers( true ) )
53565363
{
5357-
saveEdits( layer );
5364+
saveEdits( layer, true, false );
53585365
}
5366+
mMapCanvas->refresh();
53595367
activateDeactivateLayerRelatedActions( activeLayer() );
53605368
}
53615369

@@ -5366,8 +5374,9 @@ void QgisApp::rollbackEdits()
53665374

53675375
foreach ( QgsMapLayer * layer, mMapLegend->selectedLayers() )
53685376
{
5369-
cancelEdits( layer );
5377+
cancelEdits( layer, true, false );
53705378
}
5379+
mMapCanvas->refresh();
53715380
activateDeactivateLayerRelatedActions( activeLayer() );
53725381
}
53735382

@@ -5384,8 +5393,9 @@ void QgisApp::rollbackAllEdits( bool verifyAction )
53845393

53855394
foreach ( QgsMapLayer * layer, editableLayers( true ) )
53865395
{
5387-
cancelEdits( layer );
5396+
cancelEdits( layer, true, false );
53885397
}
5398+
mMapCanvas->refresh();
53895399
activateDeactivateLayerRelatedActions( activeLayer() );
53905400
}
53915401

@@ -5396,8 +5406,9 @@ void QgisApp::cancelEdits()
53965406

53975407
foreach ( QgsMapLayer * layer, mMapLegend->selectedLayers() )
53985408
{
5399-
cancelEdits( layer, false );
5409+
cancelEdits( layer, false, false );
54005410
}
5411+
mMapCanvas->refresh();
54015412
activateDeactivateLayerRelatedActions( activeLayer() );
54025413
}
54035414

@@ -5414,12 +5425,13 @@ void QgisApp::cancelAllEdits( bool verifyAction )
54145425

54155426
foreach ( QgsMapLayer * layer, editableLayers() )
54165427
{
5417-
cancelEdits( layer, false );
5428+
cancelEdits( layer, false, false );
54185429
}
5430+
mMapCanvas->refresh();
54195431
activateDeactivateLayerRelatedActions( activeLayer() );
54205432
}
54215433

5422-
bool QgisApp::verifyEditsActionDialog( QString act, QString upon )
5434+
bool QgisApp::verifyEditsActionDialog( const QString& act, const QString& upon )
54235435
{
54245436
bool res = false;
54255437
switch ( QMessageBox::information( 0,

src/app/qgisapp.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -456,12 +456,18 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
456456
* @note added in 1.9 */
457457
void saveActiveLayerEdits();
458458

459-
//! Save edits of a layer
460-
void saveEdits( QgsMapLayer *layer, bool leaveEditable = true );
459+
/** Save edits of a layer
460+
* @param leaveEditable leave the layer in editing mode when done (added in QGIS 1.9)
461+
* @param triggerRepaint send layer signal to repaint canvas when done (added in QGIS 1.9)
462+
*/
463+
void saveEdits( QgsMapLayer *layer, bool leaveEditable = true, bool triggerRepaint = true );
461464

462465
/** Cancel edits for a layer
463-
* @note added in 1.9 */
464-
void cancelEdits( QgsMapLayer *layer, bool leaveEditable = true );
466+
* @param leaveEditable leave the layer in editing mode when done
467+
* @param triggerRepaint send layer signal to repaint canvas when done
468+
* @note added in 1.9
469+
*/
470+
void cancelEdits( QgsMapLayer *layer, bool leaveEditable = true, bool triggerRepaint = true );
465471

466472
//! Save current edits for selected layer(s) and start new transaction(s)
467473
void saveEdits();
@@ -839,7 +845,7 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
839845

840846
/** Dialog for verification of action on many edits
841847
* @note added in 1.9 */
842-
bool verifyEditsActionDialog( QString act, QString upon );
848+
bool verifyEditsActionDialog( const QString& act, const QString& upon );
843849

844850
/** Update gui actions/menus when layers are modified
845851
* @note added in 1.9 */

0 commit comments

Comments
 (0)