@@ -738,7 +738,24 @@ QgisApp::QgisApp( QSplashScreen *splash, bool restorePlugins, QWidget * parent,
738
738
739
739
} // QgisApp ctor
740
740
741
-
741
+ QgisApp::QgisApp ( )
742
+ : QMainWindow( 0 , 0 )
743
+ , mOverviewMapCursor( 0 )
744
+ , mQgisInterface( 0 )
745
+ , mInternalClipboard( 0 )
746
+ , mpMaptip( 0 )
747
+ , mPythonUtils( 0 )
748
+ , mpGpsWidget( 0 )
749
+ {
750
+ smInstance = this ;
751
+ setupUi ( this );
752
+ mInternalClipboard = new QgsClipboard;
753
+ mMapCanvas = new QgsMapCanvas ();
754
+ mMapCanvas ->freeze ();
755
+ mMapLegend = new QgsLegend ( mMapCanvas );
756
+ mUndoWidget = new QgsUndoWidget ( NULL , mMapCanvas );
757
+ // More tests may need more members to be initialized
758
+ }
742
759
743
760
QgisApp::~QgisApp ()
744
761
{
@@ -5564,24 +5581,29 @@ void QgisApp::pasteAsNewVector()
5564
5581
delete layer;
5565
5582
}
5566
5583
5567
- void QgisApp::pasteAsNewMemoryVector ()
5584
+ QgsVectorLayer * QgisApp::pasteAsNewMemoryVector ( const QString & theLayerName )
5568
5585
{
5569
- if ( mMapCanvas && mMapCanvas ->isDrawing () ) return ;
5586
+ if ( mMapCanvas && mMapCanvas ->isDrawing () ) return 0 ;
5570
5587
5571
- bool ok;
5572
- QString defaultName = tr ( " Pasted" );
5573
- QString layerName = QInputDialog::getText ( this , tr ( " New memory layer name" ),
5574
- tr ( " Layer name" ), QLineEdit::Normal,
5575
- defaultName, &ok );
5576
- if ( !ok ) return ;
5588
+ QString layerName = theLayerName;
5577
5589
5578
5590
if ( layerName.isEmpty () )
5579
5591
{
5580
- layerName = defaultName;
5592
+ bool ok;
5593
+ QString defaultName = tr ( " Pasted" );
5594
+ layerName = QInputDialog::getText ( this , tr ( " New memory layer name" ),
5595
+ tr ( " Layer name" ), QLineEdit::Normal,
5596
+ defaultName, &ok );
5597
+ if ( !ok ) return 0 ;
5598
+
5599
+ if ( layerName.isEmpty () )
5600
+ {
5601
+ layerName = defaultName;
5602
+ }
5581
5603
}
5582
5604
5583
5605
QgsVectorLayer * layer = pasteToNewMemoryVector ();
5584
- if ( !layer ) return ;
5606
+ if ( !layer ) return 0 ;
5585
5607
5586
5608
layer->setLayerName ( layerName );
5587
5609
@@ -5593,6 +5615,8 @@ void QgisApp::pasteAsNewMemoryVector()
5593
5615
mMapCanvas ->refresh ();
5594
5616
5595
5617
qApp->processEvents ();
5618
+
5619
+ return layer;
5596
5620
}
5597
5621
5598
5622
QgsVectorLayer * QgisApp::pasteToNewMemoryVector ()
@@ -5634,6 +5658,8 @@ QgsVectorLayer * QgisApp::pasteToNewMemoryVector()
5634
5658
5635
5659
QString typeName = QString ( QGis::featureType ( wkbType ) ).replace ( " WKB" , " " );
5636
5660
5661
+ QgsDebugMsg ( QString ( " output wkbType = %1 typeName = %2" ).arg ( wkbType ).arg ( typeName ) );
5662
+
5637
5663
QString message;
5638
5664
5639
5665
if ( features.size () == 0 )
@@ -5668,7 +5694,14 @@ QgsVectorLayer * QgisApp::pasteToNewMemoryVector()
5668
5694
5669
5695
foreach ( QgsField f, clipboard ()->fields ().toList () )
5670
5696
{
5671
- layer->addAttribute ( f );
5697
+ if ( !layer->addAttribute ( f ) )
5698
+ {
5699
+ QMessageBox::warning ( this , tr ( " Warning" ),
5700
+ tr ( " Cannot create field %1 (%2,%3)" ).arg ( f.name () ).arg ( f.typeName () ).arg ( QVariant::typeToName ( f.type () ) ),
5701
+ QMessageBox::Ok );
5702
+ delete layer;
5703
+ return 0 ;
5704
+ }
5672
5705
}
5673
5706
5674
5707
// Convert to multi if necessary
@@ -5679,8 +5712,6 @@ QgsVectorLayer * QgisApp::pasteToNewMemoryVector()
5679
5712
QGis::WkbType type = QGis::flatType ( feature.geometry ()->wkbType () );
5680
5713
if ( type == QGis::WKBUnknown || type == QGis::WKBNoGeometry ) continue ;
5681
5714
5682
- QgsDebugMsg ( QString ( " type = %1" ).arg ( type ) );
5683
-
5684
5715
if ( QGis::singleType ( wkbType ) != QGis::singleType ( type ) )
5685
5716
{
5686
5717
feature.setGeometry ( 0 );
@@ -5691,9 +5722,15 @@ QgsVectorLayer * QgisApp::pasteToNewMemoryVector()
5691
5722
feature.geometry ()->convertToMultiType ();
5692
5723
}
5693
5724
}
5694
- layer->addFeatures ( features );
5695
- layer->commitChanges ();
5725
+ if ( ! layer->addFeatures ( features ) || ! layer->commitChanges () )
5726
+ {
5727
+ QgsDebugMsg ( " Cannot add features or commit changes" );
5728
+ delete layer;
5729
+ return 0 ;
5730
+ }
5731
+ layer->removeSelection ();
5696
5732
5733
+ QgsDebugMsg ( QString ( " %1 features pasted to memory layer" ).arg ( layer->featureCount () ) );
5697
5734
return layer;
5698
5735
}
5699
5736
0 commit comments