29
29
#include < QFileInfo>
30
30
#include < QDir>
31
31
#include < QLabel>
32
+ #include < QObject>
32
33
33
34
// ----------------------- QgsGrassLocationItem ------------------------------
34
35
@@ -212,11 +213,8 @@ bool QgsGrassMapsetItem::handleDrop( const QMimeData * data, Qt::DropAction )
212
213
213
214
QStringList errors;
214
215
QgsMimeDataUtils::UriList lst = QgsMimeDataUtils::decodeUriList ( data );
215
- #ifdef WIN32
216
- Qt::CaseSensitivity caseSensitivity = Qt::CaseInsensitive;
217
- #else
218
- Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive;
219
- #endif
216
+ Qt::CaseSensitivity caseSensitivity = QgsGrass::caseSensitivity ();
217
+
220
218
foreach ( const QgsMimeDataUtils::Uri& u, lst )
221
219
{
222
220
if ( u.layerType != " raster" && u.layerType != " vector" )
@@ -229,17 +227,20 @@ bool QgsGrassMapsetItem::handleDrop( const QMimeData * data, Qt::DropAction )
229
227
QgsDataProvider* provider = 0 ;
230
228
QStringList extensions;
231
229
QStringList existingNames;
230
+ QRegExp regExp;
232
231
if ( u.layerType == " raster" )
233
232
{
234
233
rasterProvider = qobject_cast<QgsRasterDataProvider*>( QgsProviderRegistry::instance ()->provider ( u.providerKey , u.uri ) );
235
234
provider = rasterProvider;
236
235
existingNames = existingRasters;
236
+ regExp = QgsGrassObject::newNameRegExp ( QgsGrassObject::Raster );
237
237
}
238
238
else if ( u.layerType == " vector" )
239
239
{
240
240
vectorProvider = qobject_cast<QgsVectorDataProvider*>( QgsProviderRegistry::instance ()->provider ( u.providerKey , u.uri ) );
241
241
provider = vectorProvider;
242
242
existingNames = existingVectors;
243
+ regExp = QgsGrassObject::newNameRegExp ( QgsGrassObject::Vector );
243
244
}
244
245
QgsDebugMsg ( " existingNames = " + existingNames.join ( " ," ) );
245
246
@@ -263,7 +264,7 @@ bool QgsGrassMapsetItem::handleDrop( const QMimeData * data, Qt::DropAction )
263
264
QString newName = u.name ;
264
265
if ( QgsNewNameDialog::exists ( u.name , extensions, existingNames, caseSensitivity ) )
265
266
{
266
- QgsNewNameDialog dialog ( u.name , u.name , extensions, existingNames, QRegExp () , caseSensitivity );
267
+ QgsNewNameDialog dialog ( u.name , u.name , extensions, existingNames, regExp , caseSensitivity );
267
268
if ( dialog.exec () != QDialog::Accepted )
268
269
{
269
270
delete provider;
@@ -374,10 +375,9 @@ bool QgsGrassMapsetItem::handleDrop( const QMimeData * data, Qt::DropAction )
374
375
375
376
if ( !errors.isEmpty () )
376
377
{
377
- QgsMessageOutput *output = QgsMessageOutput::createMessageOutput ();
378
- output->setTitle ( tr ( " Import to GRASS mapset" ) );
379
- output->setMessage ( tr ( " Failed to import some layers!\n\n " ) + errors.join ( " \n " ), QgsMessageOutput::MessageText );
380
- output->showMessage ();
378
+ QgsMessageOutput::showMessage ( tr ( " Import to GRASS mapset" ),
379
+ tr ( " Failed to import some layers!\n\n " ) + errors.join ( " \n " ),
380
+ QgsMessageOutput::MessageText );
381
381
}
382
382
383
383
return true ;
@@ -407,6 +407,54 @@ QgsGrassObjectItemBase::QgsGrassObjectItemBase( QgsGrassObject grassObject ) :
407
407
{
408
408
}
409
409
410
+ void QgsGrassObjectItemBase::renameGrassObject ( QgsDataItem* parent )
411
+ {
412
+ QgsDebugMsg ( " Entered" );
413
+
414
+ QStringList existingNames = QgsGrass::grassObjects ( mGrassObject .mapsetPath (), mGrassObject .type () );
415
+ // remove current name to avoid warning that exists
416
+ existingNames.removeOne ( mGrassObject .name () );
417
+ QgsDebugMsg ( " existingNames = " + existingNames.join ( " ," ) );
418
+ QRegExp regExp = QgsGrassObject::newNameRegExp ( mGrassObject .type () );
419
+ Qt::CaseSensitivity caseSensitivity = QgsGrass::caseSensitivity ();
420
+ QgsNewNameDialog dialog ( mGrassObject .name (), mGrassObject .name (), QStringList (), existingNames, regExp, caseSensitivity );
421
+
422
+ if ( dialog.exec () != QDialog::Accepted || dialog.name () == mGrassObject .name () )
423
+ {
424
+ return ;
425
+ }
426
+
427
+ QgsDebugMsg ( " rename " + mGrassObject .name () + " -> " + dialog.name () );
428
+
429
+ QgsGrassObject obj ( mGrassObject );
430
+ obj.setName ( dialog.name () );
431
+ QString errorTitle = QObject::tr ( " Rename GRASS %1" ).arg ( mGrassObject .elementName () );
432
+ if ( QgsGrass::objectExists ( obj ) )
433
+ {
434
+ QgsDebugMsg ( obj.name () + " exists -> delete" );
435
+ if ( !QgsGrass::deleteObject ( obj ) )
436
+ {
437
+ QgsMessageOutput::showMessage ( errorTitle, QObject::tr ( " Cannot delete %1" ).arg ( obj.name () ), QgsMessageOutput::MessageText );
438
+ return ;
439
+ }
440
+ }
441
+
442
+ try
443
+ {
444
+ QgsGrass::renameObject ( mGrassObject , obj.name () );
445
+ if ( parent )
446
+ {
447
+ parent->refresh ();
448
+ }
449
+ }
450
+ catch ( QgsGrass::Exception &e )
451
+ {
452
+ QgsMessageOutput::showMessage ( errorTitle,
453
+ QObject::tr ( " Cannot rename %1 to %2" ).arg ( mGrassObject .name () ).arg ( obj.name () ) + " \n " + e.what (),
454
+ QgsMessageOutput::MessageText );
455
+ }
456
+ }
457
+
410
458
void QgsGrassObjectItemBase::deleteGrassObject ( QgsDataItem* parent )
411
459
{
412
460
QgsDebugMsg ( " Entered" );
@@ -426,10 +474,10 @@ void QgsGrassObjectItemBase::deleteGrassObject( QgsDataItem* parent )
426
474
QgsGrassObjectItem::QgsGrassObjectItem ( QgsDataItem* parent, QgsGrassObject grassObject,
427
475
QString name, QString path, QString uri,
428
476
LayerType layerType, QString providerKey,
429
- bool deleteAction )
477
+ bool showObjectActions )
430
478
: QgsLayerItem( parent, name, path, uri, layerType, providerKey )
431
479
, QgsGrassObjectItemBase( grassObject )
432
- , mDeleteAction( deleteAction )
480
+ , mShowObjectActions( showObjectActions )
433
481
{
434
482
setState ( Populated ); // no children, to show non expandable in browser
435
483
}
@@ -438,8 +486,12 @@ QList<QAction*> QgsGrassObjectItem::actions()
438
486
{
439
487
QList<QAction*> lst;
440
488
441
- if ( mDeleteAction )
489
+ if ( mShowObjectActions )
442
490
{
491
+ QAction* actionRename = new QAction ( tr ( " Rename" ), this );
492
+ connect ( actionRename, SIGNAL ( triggered () ), this , SLOT ( renameGrassObject () ) );
493
+ lst.append ( actionRename );
494
+
443
495
QAction* actionDelete = new QAction ( tr ( " Delete" ), this );
444
496
connect ( actionDelete, SIGNAL ( triggered () ), this , SLOT ( deleteGrassObject () ) );
445
497
lst.append ( actionDelete );
@@ -448,6 +500,11 @@ QList<QAction*> QgsGrassObjectItem::actions()
448
500
return lst;
449
501
}
450
502
503
+ void QgsGrassObjectItem::renameGrassObject ()
504
+ {
505
+ QgsGrassObjectItemBase::renameGrassObject ( parent () );
506
+ }
507
+
451
508
void QgsGrassObjectItem::deleteGrassObject ()
452
509
{
453
510
QgsGrassObjectItemBase::deleteGrassObject ( parent () );
@@ -467,13 +524,22 @@ QList<QAction*> QgsGrassVectorItem::actions()
467
524
{
468
525
QList<QAction*> lst;
469
526
527
+ QAction* actionRename = new QAction ( tr ( " Rename" ), this );
528
+ connect ( actionRename, SIGNAL ( triggered () ), this , SLOT ( renameGrassObject () ) );
529
+ lst.append ( actionRename );
530
+
470
531
QAction* actionDelete = new QAction ( tr ( " Delete" ), this );
471
532
connect ( actionDelete, SIGNAL ( triggered () ), this , SLOT ( deleteGrassObject () ) );
472
533
lst.append ( actionDelete );
473
534
474
535
return lst;
475
536
}
476
537
538
+ void QgsGrassVectorItem::renameGrassObject ()
539
+ {
540
+ QgsGrassObjectItemBase::renameGrassObject ( parent () );
541
+ }
542
+
477
543
void QgsGrassVectorItem::deleteGrassObject ()
478
544
{
479
545
QgsGrassObjectItemBase::deleteGrassObject ( parent () );
@@ -484,7 +550,7 @@ void QgsGrassVectorItem::deleteGrassObject()
484
550
QgsGrassVectorLayerItem::QgsGrassVectorLayerItem ( QgsDataItem* parent, QgsGrassObject grassObject, QString layerName,
485
551
QString path, QString uri,
486
552
LayerType layerType, bool singleLayer )
487
- : QgsGrassObjectItem( parent, grassObject, layerName, path, uri, layerType, " grass" )
553
+ : QgsGrassObjectItem( parent, grassObject, layerName, path, uri, layerType, " grass" , mSingleLayer )
488
554
, mSingleLayer( singleLayer )
489
555
{
490
556
}
0 commit comments