Skip to content

Commit 6a771b3

Browse files
author
mhugent
committedMay 8, 2006
stop editing if the current layer changes
git-svn-id: http://svn.osgeo.org/qgis/trunk@5426 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 9fea53c commit 6a771b3

File tree

5 files changed

+61
-15
lines changed

5 files changed

+61
-15
lines changed
 

‎src/gui/qgisapp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4818,6 +4818,7 @@ bool QgisApp::addRasterLayer(QgsRasterLayer * theRasterLayer, bool theForceRedra
48184818
{
48194819
// register this layer with the central layers registry
48204820
QgsMapLayerRegistry::instance()->addMapLayer(theRasterLayer);
4821+
theRasterLayer->refreshLegend();
48214822
// XXX doesn't the mMapCanvas->addLayer() do this?
48224823
// XXX now it does
48234824
// QObject::connect(theRasterLayer,
@@ -5070,7 +5071,6 @@ bool QgisApp::addRasterLayer(QStringList const &theFileNameQStringList, bool gui
50705071
layer->setVisible(mAddedLayersVisible);
50715072

50725073
addRasterLayer(layer);
5073-
layer->refreshLegend();
50745074

50755075
//only allow one copy of a ai grid file to be loaded at a
50765076
//time to prevent the user selecting all adfs in 1 dir which

‎src/gui/qgsmaplayer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ QgsMapLayer::QgsMapLayer(int type,
6666

6767
// Set the display name = internal name
6868
layerName = internalName;
69+
6970
QgsDebugMsg("QgsMapLayer::QgsMapLayer - layerName is '" + layerName);
7071

7172
// Generate the unique ID of this layer

‎src/legend/qgslegend.cpp

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const int AUTOSCROLL_MARGIN = 16;
5454
set mItemBeingMoved pointer to 0 to prevent SuSE 9.0 crash
5555
*/
5656
QgsLegend::QgsLegend(QgisApp* app, QWidget * parent, const char *name)
57-
: QTreeWidget(parent), mApp(app), mMousePressedFlag(false), mItemBeingMoved(0), mMapCanvas(0), mShowLegendLayerFiles(false), mMinimumIconSize(20, 20)
57+
: QTreeWidget(parent), mApp(app), mMousePressedFlag(false), mItemBeingMoved(0), mMapCanvas(0), mShowLegendLayerFiles(false), mMinimumIconSize(20, 20), mCurrentLayer(0)
5858
{
5959
connect( this, SIGNAL(itemChanged(QTreeWidgetItem*, int)),
6060
this, SLOT(handleItemChange(QTreeWidgetItem*, int)));
@@ -87,13 +87,23 @@ QgsLegend::~QgsLegend()
8787
void QgsLegend::handleCurrentItemChanged(QTreeWidgetItem* current, QTreeWidgetItem* previous)
8888
{
8989
QgsMapLayer *layer = currentLayer();
90-
if(mApp)
90+
if(layer != mCurrentLayer)
9191
{
92-
mApp->activateDeactivateLayerRelatedActions( layer );
93-
}
94-
if(mMapCanvas)
95-
{
96-
mMapCanvas->setCurrentLayer( layer );
92+
if(mApp)
93+
{
94+
mApp->activateDeactivateLayerRelatedActions( layer );
95+
}
96+
if(mMapCanvas)
97+
{
98+
mMapCanvas->setCurrentLayer( layer );
99+
}
100+
//stop editing for the old layer
101+
QgsVectorLayer* vlayer = dynamic_cast<QgsVectorLayer*>(mCurrentLayer);
102+
if(vlayer && vlayer->isEditable())
103+
{
104+
vlayer->stopEditing();
105+
}
106+
mCurrentLayer = layer;
97107
}
98108
emit currentLayerChanged ( layer );
99109
}
@@ -1368,6 +1378,7 @@ void QgsLegend::changeSymbologySettings(const QString& key, const std::list< std
13681378
//restore the current item again
13691379
setCurrentItem(theCurrentItem);
13701380
adjustIconSize();
1381+
setExpanded(indexFromItem(theLegendLayer), true);//make sure the symbology items are visible
13711382
}
13721383

13731384
void QgsLegend::addPixmapWidthValue(int width)

‎src/legend/qgslegend.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,9 @@ this item may be moved back to the original position with resetToInitialPosition
365365
/**QgsLegend does not set the icon with/height to values lower than the minimum icon size*/
366366
QSize mMinimumIconSize;
367367

368+
/**Stores a pointer to the current map layer. This is used to check when the current layer changes*/
369+
QgsMapLayer* mCurrentLayer;
370+
368371
signals:
369372
void zOrderChanged(QgsLegend * lv);
370373

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -817,14 +817,20 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
817817
OGRFeatureDefn* fdef=ogrLayer->GetLayerDefn();
818818
OGRFeature* feature=new OGRFeature(fdef);
819819
QGis::WKBTYPE ftype;
820+
OGRErr err;
820821
memcpy(&ftype, (f->getGeometry()+1), sizeof(int));
821822
switch(ftype)
822823
{
823824
case QGis::WKBPoint:
824825
{
825826
OGRPoint* p=new OGRPoint();
826827
p->importFromWkb(f->getGeometry(),1+sizeof(int)+2*sizeof(double));
827-
OGRErr err = feature->SetGeometry(p);
828+
err = feature->SetGeometry(p);
829+
if(err != OGRERR_NONE)
830+
{
831+
delete p;
832+
return false;
833+
}
828834
break;
829835
}
830836
case QGis::WKBLineString:
@@ -833,7 +839,12 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
833839
int length;
834840
memcpy(&length,f->getGeometry()+1+sizeof(int),sizeof(int));
835841
l->importFromWkb(f->getGeometry(),1+2*sizeof(int)+2*length*sizeof(double));
836-
feature->SetGeometry(l);
842+
err = feature->SetGeometry(l);
843+
if(err != OGRERR_NONE)
844+
{
845+
delete l;
846+
return false;
847+
}
837848
break;
838849
}
839850
case QGis::WKBPolygon:
@@ -853,7 +864,12 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
853864
ptr+=(2*sizeof(double));
854865
}
855866
pol->importFromWkb(f->getGeometry(),1+2*sizeof(int)+numrings*sizeof(int)+totalnumpoints*2*sizeof(double));
856-
feature->SetGeometry(pol);
867+
err = feature->SetGeometry(pol);
868+
if(err != OGRERR_NONE)
869+
{
870+
delete pol;
871+
return false;
872+
}
857873
break;
858874
}
859875
case QGis::WKBMultiPoint:
@@ -863,7 +879,12 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
863879
//determine how many points
864880
memcpy(&count,f->getGeometry()+1+sizeof(int),sizeof(int));
865881
multip->importFromWkb(f->getGeometry(),1+2*sizeof(int)+count*2*sizeof(double));
866-
feature->SetGeometry(multip);
882+
err = feature->SetGeometry(multip);
883+
if(err != OGRERR_NONE)
884+
{
885+
delete multip;
886+
return false;
887+
}
867888
break;
868889
}
869890
case QGis::WKBMultiLineString:
@@ -886,7 +907,12 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
886907
}
887908
int size=1+2*sizeof(int)+numlines*sizeof(int)+totalpoints*2*sizeof(double);
888909
multil->importFromWkb(f->getGeometry(),size);
889-
feature->SetGeometry(multil);
910+
err = feature->SetGeometry(multil);
911+
if(err != OGRERR_NONE)
912+
{
913+
delete multil;
914+
return false;
915+
}
890916
break;
891917
}
892918
case QGis::WKBMultiPolygon:
@@ -917,7 +943,12 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
917943
}
918944
int size=1+2*sizeof(int)+numpolys*sizeof(int)+totalrings*sizeof(int)+totalpoints*2*sizeof(double);
919945
multipol->importFromWkb(f->getGeometry(),size);
920-
feature->SetGeometry(multipol);
946+
err = feature->SetGeometry(multipol);
947+
if(err != OGRERR_NONE)
948+
{
949+
delete multipol;
950+
return false;
951+
}
921952
break;
922953
}
923954
}
@@ -953,7 +984,7 @@ bool QgsOgrProvider::addFeature(QgsFeature* f)
953984
returnValue = false;
954985
}
955986
++numberFeatures;
956-
delete feature;
987+
//delete feature;
957988
ogrLayer->SyncToDisk();
958989
return returnValue;
959990
}

0 commit comments

Comments
 (0)
Please sign in to comment.