Skip to content

Commit ba5b90a

Browse files
committedDec 31, 2012
Reinstate Save Active Layer Edits action
- Now enables/disables relative to vector layer isModified() state (gives feedback when save is finished) - Now works with active legend layer, regardless of whether a selection exists in legend - Add to legend contextual menu when right-clicked vector layer isModified()
1 parent d85ed32 commit ba5b90a

File tree

8 files changed

+57
-0
lines changed

8 files changed

+57
-0
lines changed
 

‎python/gui/qgisinterface.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,8 @@ class QgisInterface : QObject
344344
virtual QAction *actionOpenTable() = 0;
345345
virtual QAction *actionToggleEditing() = 0;
346346
/** @note added in 1.9 */
347+
virtual QAction *actionSaveActiveLayerEdits() = 0;
348+
/** @note added in 1.9 */
347349
virtual QAction *actionAllEdits() = 0;
348350
/** @note added in 1.9 */
349351
virtual QAction *actionSaveEdits() = 0;

‎src/app/legend/qgslegendlayer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ void QgsLegendLayer::addToPopupMenu( QMenu& theMenu )
415415
{
416416
QgsMapLayer *lyr = layer();
417417
QAction *toggleEditingAction = QgisApp::instance()->actionToggleEditing();
418+
QAction *saveLayerEditsAction = QgisApp::instance()->actionSaveActiveLayerEdits();
418419
QAction *allEditsAction = QgisApp::instance()->actionAllEdits();
419420

420421
// zoom to layer extent
@@ -469,6 +470,10 @@ void QgsLegendLayer::addToPopupMenu( QMenu& theMenu )
469470
theMenu.addAction( toggleEditingAction );
470471
toggleEditingAction->setChecked( vlayer->isEditable() );
471472
}
473+
if ( saveLayerEditsAction && vlayer->isModified() )
474+
{
475+
theMenu.addAction( saveLayerEditsAction );
476+
}
472477
}
473478

474479
if ( allEditsAction->isEnabled() )

‎src/app/qgisapp.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,7 @@ void QgisApp::createActions()
949949
connect( mActionAddWfsLayer, SIGNAL( triggered() ), this, SLOT( addWfsLayer() ) );
950950
connect( mActionOpenTable, SIGNAL( triggered() ), this, SLOT( attributeTable() ) );
951951
connect( mActionToggleEditing, SIGNAL( triggered() ), this, SLOT( toggleEditing() ) );
952+
connect( mActionSaveLayerEdits, SIGNAL( triggered() ), this, SLOT( saveActiveLayerEdits() ) );
952953
connect( mActionSaveEdits, SIGNAL( triggered() ), this, SLOT( saveEdits() ) );
953954
connect( mActionSaveAllEdits, SIGNAL( triggered() ), this, SLOT( saveAllEdits() ) );
954955
connect( mActionRollbackEdits, SIGNAL( triggered() ), this, SLOT( rollbackEdits() ) );
@@ -1670,6 +1671,7 @@ void QgisApp::setTheme( QString theThemeName )
16701671
mActionSponsors->setIcon( QgsApplication::getThemeIcon( "/mActionHelpSponsors.png" ) );
16711672
mActionDraw->setIcon( QgsApplication::getThemeIcon( "/mActionDraw.png" ) );
16721673
mActionToggleEditing->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.svg" ) );
1674+
mActionSaveLayerEdits->setIcon( QgsApplication::getThemeIcon( "/mActionSaveAllEdits.svg" ) );
16731675
mActionAllEdits->setIcon( QgsApplication::getThemeIcon( "/mActionAllEdits.svg" ) );
16741676
mActionSaveEdits->setIcon( QgsApplication::getThemeIcon( "/mActionSaveEdits.svg" ) );
16751677
mActionSaveAllEdits->setIcon( QgsApplication::getThemeIcon( "/mActionSaveAllEdits.svg" ) );
@@ -5206,6 +5208,11 @@ bool QgisApp::toggleEditing( QgsMapLayer *layer, bool allowCancel )
52065208
return res;
52075209
}
52085210

5211+
void QgisApp::saveActiveLayerEdits()
5212+
{
5213+
saveEdits( activeLayer() );
5214+
}
5215+
52095216
void QgisApp::saveEdits( QgsMapLayer *layer, bool leaveEditable )
52105217
{
52115218
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer );
@@ -5362,6 +5369,20 @@ bool QgisApp::verifyEditsActionDialog( QString act, QString upon )
53625369

53635370
void QgisApp::updateLayerModifiedActions()
53645371
{
5372+
bool enableSaveLayerEdits = false;
5373+
QgsVectorLayer* vlayer = qobject_cast<QgsVectorLayer *>( activeLayer() );
5374+
if ( vlayer )
5375+
{
5376+
QgsVectorDataProvider* dprovider = vlayer->dataProvider();
5377+
if ( dprovider )
5378+
{
5379+
enableSaveLayerEdits = ( dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues
5380+
&& vlayer->isEditable()
5381+
&& vlayer->isModified() );
5382+
}
5383+
}
5384+
mActionSaveLayerEdits->setEnabled( enableSaveLayerEdits );
5385+
53655386
mActionSaveEdits->setEnabled( mMapLegend && mMapLegend->selectedLayersEditable( true ) );
53665387
mActionRollbackEdits->setEnabled( mMapLegend && mMapLegend->selectedLayersEditable( true ) );
53675388
mActionCancelEdits->setEnabled( mMapLegend && mMapLegend->selectedLayersEditable() );
@@ -7322,6 +7343,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
73227343
mActionOpenTable->setEnabled( false );
73237344
mActionToggleEditing->setEnabled( false );
73247345
mActionToggleEditing->setChecked( false );
7346+
mActionSaveLayerEdits->setEnabled( false );
73257347
mActionLayerSaveAs->setEnabled( false );
73267348
mActionLayerSelectionSaveAs->setEnabled( false );
73277349
mActionLayerProperties->setEnabled( false );
@@ -7413,13 +7435,15 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
74137435
bool canChangeAttributes = dprovider->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
74147436
mActionToggleEditing->setEnabled( canChangeAttributes && !vlayer->isReadOnly() );
74157437
mActionToggleEditing->setChecked( vlayer->isEditable() );
7438+
mActionSaveLayerEdits->setEnabled( canChangeAttributes && vlayer->isEditable() && vlayer->isModified() );
74167439
mUndoWidget->dockContents()->setEnabled( vlayer->isEditable() );
74177440
updateUndoActions();
74187441
}
74197442
else
74207443
{
74217444
mActionToggleEditing->setEnabled( false );
74227445
mActionToggleEditing->setChecked( false );
7446+
mActionSaveLayerEdits->setEnabled( false );
74237447
mUndoWidget->dockContents()->setEnabled( false );
74247448
mActionUndo->setEnabled( false );
74257449
mActionRedo->setEnabled( false );
@@ -7588,6 +7612,7 @@ void QgisApp::activateDeactivateLayerRelatedActions( QgsMapLayer* layer )
75887612
mActionOpenTable->setEnabled( false );
75897613
mActionToggleEditing->setEnabled( false );
75907614
mActionToggleEditing->setChecked( false );
7615+
mActionSaveLayerEdits->setEnabled( false );
75917616
mUndoWidget->dockContents()->setEnabled( false );
75927617
mActionUndo->setEnabled( false );
75937618
mActionRedo->setEnabled( false );

‎src/app/qgisapp.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
291291
QAction *actionOpenTable() { return mActionOpenTable; }
292292
QAction *actionToggleEditing() { return mActionToggleEditing; }
293293
/** @note added in 1.9 */
294+
QAction *actionSaveActiveLayerEdits() { return mActionSaveLayerEdits; }
295+
/** @note added in 1.9 */
294296
QAction *actionAllEdits() { return mActionAllEdits; }
295297
QAction *actionSaveEdits() { return mActionSaveEdits; }
296298
/** @note added in 1.9 */
@@ -792,6 +794,10 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
792794
//! starts/stops editing mode of a layer
793795
bool toggleEditing( QgsMapLayer *layer, bool allowCancel = true );
794796

797+
/** Save edits for active vector layer and start new transactions
798+
* @note added in 1.9 */
799+
void saveActiveLayerEdits();
800+
795801
//! Save edits of a layer
796802
void saveEdits( QgsMapLayer *layer, bool leaveEditable = true );
797803

‎src/app/qgisappinterface.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,7 @@ QAction *QgisAppInterface::actionCopyLayerStyle() { return qgis->actionCopyLayer
436436
QAction *QgisAppInterface::actionPasteLayerStyle() { return qgis->actionPasteLayerStyle(); }
437437
QAction *QgisAppInterface::actionOpenTable() { return qgis->actionOpenTable(); }
438438
QAction *QgisAppInterface::actionToggleEditing() { return qgis->actionToggleEditing(); }
439+
QAction *QgisAppInterface::actionSaveActiveLayerEdits() { return qgis->actionSaveActiveLayerEdits(); }
439440
QAction *QgisAppInterface::actionAllEdits() { return qgis->actionAllEdits(); }
440441
QAction *QgisAppInterface::actionSaveEdits() { return qgis->actionSaveEdits(); }
441442
QAction *QgisAppInterface::actionSaveAllEdits() { return qgis->actionSaveAllEdits(); }

‎src/app/qgisappinterface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,8 @@ class QgisAppInterface : public QgisInterface
296296
virtual QAction *actionOpenTable();
297297
virtual QAction *actionToggleEditing();
298298
/** @note added in 1.9 */
299+
virtual QAction *actionSaveActiveLayerEdits();
300+
/** @note added in 1.9 */
299301
virtual QAction *actionAllEdits();
300302
/** @note added in 1.9 */
301303
virtual QAction *actionSaveEdits();

‎src/gui/qgisinterface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,8 @@ class GUI_EXPORT QgisInterface : public QObject
392392
virtual QAction *actionOpenTable() = 0;
393393
virtual QAction *actionToggleEditing() = 0;
394394
/** @note added in 1.9 */
395+
virtual QAction *actionSaveActiveLayerEdits() = 0;
396+
/** @note added in 1.9 */
395397
virtual QAction *actionAllEdits() = 0;
396398
/** @note added in 1.9 */
397399
virtual QAction *actionSaveEdits() = 0;

‎src/ui/qgisapp.ui

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
<addaction name="separator"/>
165165
<addaction name="mActionOpenTable"/>
166166
<addaction name="mActionToggleEditing"/>
167+
<addaction name="mActionSaveLayerEdits"/>
167168
<addaction name="mActionAllEdits"/>
168169
<addaction name="separator"/>
169170
<addaction name="mActionLayerSaveAs"/>
@@ -282,6 +283,7 @@
282283
</attribute>
283284
<addaction name="mActionAllEdits"/>
284285
<addaction name="mActionToggleEditing"/>
286+
<addaction name="mActionSaveLayerEdits"/>
285287
<addaction name="mActionAddFeature"/>
286288
<addaction name="mActionMoveFeature"/>
287289
<addaction name="mActionNodeTool"/>
@@ -1940,6 +1942,18 @@ Acts on currently active editable layer</string>
19401942
<string/>
19411943
</property>
19421944
</action>
1945+
<action name="mActionSaveLayerEdits">
1946+
<property name="icon">
1947+
<iconset resource="../../images/images.qrc">
1948+
<normaloff>:/images/themes/default/mActionSaveAllEdits.svg</normaloff>:/images/themes/default/mActionSaveAllEdits.svg</iconset>
1949+
</property>
1950+
<property name="text">
1951+
<string>Save Layer Edits</string>
1952+
</property>
1953+
<property name="toolTip">
1954+
<string>Save Layer Edits</string>
1955+
</property>
1956+
</action>
19431957
</widget>
19441958
<resources>
19451959
<include location="../../images/images.qrc"/>

0 commit comments

Comments
 (0)
Please sign in to comment.