@@ -436,31 +436,58 @@ QgsSvgMarkerSymbolLayerV2Widget::QgsSvgMarkerSymbolLayerV2Widget( QWidget* paren
436
436
connect ( spinOffsetY, SIGNAL ( valueChanged ( double ) ), this , SLOT ( setOffset () ) );
437
437
}
438
438
439
- void QgsSvgMarkerSymbolLayerV2Widget::populateList ()
439
+ #include < QTime>
440
+ #include < QAbstractListModel>
441
+
442
+ class QgsSvgListModel : public QAbstractListModel
440
443
{
441
- QStandardItemModel* m = new QStandardItemModel ( viewImages );
442
- viewImages->setModel ( m );
444
+ public:
445
+ QgsSvgListModel ( QObject* parent ) : QAbstractListModel( parent )
446
+ {
447
+ mSvgFiles = QgsSvgMarkerSymbolLayerV2::listSvgFiles ();
448
+ }
443
449
444
- QSvgRenderer renderer;
445
- QPainter painter;
450
+ int rowCount ( const QModelIndex & parent = QModelIndex() ) const
451
+ {
452
+ return mSvgFiles .count ();
453
+ }
446
454
447
- foreach ( QString entry, QgsSvgMarkerSymbolLayerV2::listSvgFiles () )
448
- {
449
- // render SVG file
450
- renderer.load ( entry );
451
- QPixmap pixmap ( renderer.defaultSize () );
452
- pixmap.fill ();
453
- painter.begin ( &pixmap );
454
- renderer.render ( &painter );
455
- painter.end ();
456
-
457
- // add item
458
- QStandardItem* item = new QStandardItem ( QIcon ( pixmap ), QString () );
459
- item->setData ( entry, Qt::UserRole );
460
- item->setToolTip ( entry );
461
- m->appendRow ( item );
462
- }
455
+ QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
456
+ {
457
+ QString entry = mSvgFiles .at ( index .row () );
458
+
459
+ if ( role == Qt::DecorationRole ) // icon
460
+ {
461
+ QSvgRenderer renderer;
462
+ QPainter painter;
463
+
464
+ // render SVG file
465
+ renderer.load ( entry );
466
+ QPixmap pixmap ( QSize ( 24 , 24 ) );
467
+ pixmap.fill ();
468
+ painter.begin ( &pixmap );
469
+ renderer.render ( &painter );
470
+ painter.end ();
471
+
472
+ return pixmap;
473
+ }
474
+ else if ( role == Qt::UserRole || role == Qt::ToolTipRole )
475
+ {
476
+ return entry;
477
+ }
478
+
479
+ return QVariant ();
480
+ }
463
481
482
+ protected:
483
+ QStringList mSvgFiles ;
484
+ };
485
+
486
+ void QgsSvgMarkerSymbolLayerV2Widget::populateList ()
487
+ {
488
+ QgsSvgListModel* m = new QgsSvgListModel ( viewImages );
489
+
490
+ viewImages->setModel ( m );
464
491
}
465
492
466
493
@@ -474,19 +501,21 @@ void QgsSvgMarkerSymbolLayerV2Widget::setSymbolLayer( QgsSymbolLayerV2* layer )
474
501
475
502
// set values
476
503
477
- QStandardItemModel* m = static_cast <QStandardItemModel*>( viewImages->model () );
504
+ QAbstractItemModel* m = viewImages->model ();
505
+ QItemSelectionModel* selModel = viewImages->selectionModel ();
478
506
for ( int i = 0 ; i < m->rowCount (); i++ )
479
507
{
480
- QStandardItem* item = m->item ( i, 0 );
481
- if ( item ->data ( Qt::UserRole ).toString () == mLayer ->path () )
508
+ QModelIndex idx ( m->index ( i, 0 ) );
509
+ if ( m ->data ( idx ).toString () == mLayer ->path () )
482
510
{
483
- viewImages-> selectionModel ()-> select ( item-> index () , QItemSelectionModel::SelectCurrent );
484
- viewImages-> selectionModel ()-> setCurrentIndex ( item-> index () , QItemSelectionModel::SelectCurrent );
511
+ selModel-> select ( idx , QItemSelectionModel::SelectCurrent );
512
+ selModel-> setCurrentIndex ( idx , QItemSelectionModel::SelectCurrent );
485
513
break ;
486
514
}
487
515
}
488
516
489
517
518
+
490
519
spinSize->setValue ( mLayer ->size () );
491
520
spinAngle->setValue ( mLayer ->angle () );
492
521
@@ -578,6 +607,8 @@ QgsSVGFillSymbolLayerWidget::QgsSVGFillSymbolLayerWidget( QWidget* parent ): Qgs
578
607
setupUi ( this );
579
608
insertIcons ();
580
609
updateOutlineIcon ();
610
+
611
+ connect ( mSvgListView ->selectionModel (), SIGNAL ( currentChanged ( const QModelIndex&, const QModelIndex& ) ), this , SLOT ( setFile ( const QModelIndex& ) ) );
581
612
}
582
613
583
614
void QgsSVGFillSymbolLayerWidget::setSymbolLayer ( QgsSymbolLayerV2* layer )
@@ -642,34 +673,15 @@ void QgsSVGFillSymbolLayerWidget::on_mSVGLineEdit_textChanged( const QString & t
642
673
emit changed ();
643
674
}
644
675
645
- void QgsSVGFillSymbolLayerWidget::on_mSvgListWidget_currentItemChanged ( QListWidgetItem* item, QListWidgetItem* previous )
676
+ void QgsSVGFillSymbolLayerWidget::setFile ( const QModelIndex& item )
646
677
{
647
- mSVGLineEdit ->setText ( item-> data ( Qt::UserRole ).toString () );
678
+ mSVGLineEdit ->setText ( item. data ( Qt::UserRole ).toString () );
648
679
}
649
680
650
681
void QgsSVGFillSymbolLayerWidget::insertIcons ()
651
682
{
652
- mSvgListWidget ->clear ();
653
-
654
- QStringList svgFiles = QgsSvgMarkerSymbolLayerV2::listSvgFiles ();
655
- QSvgRenderer renderer;
656
- QPainter painter;
657
-
658
- QStringList::const_iterator it = svgFiles.constBegin ();
659
- for ( ; it != svgFiles.constEnd (); ++it )
660
- {
661
- renderer.load ( *it );
662
- QPixmap pixmap ( renderer.defaultSize () );
663
- pixmap.fill ();
664
- painter.begin ( &pixmap );
665
- renderer.render ( &painter );
666
- painter.end ();
667
-
668
- QListWidgetItem* item = new QListWidgetItem ( mSvgListWidget );
669
- item->setData ( Qt::UserRole, *it );
670
- item->setIcon ( QIcon ( pixmap ) );
671
- item->setToolTip ( *it );
672
- }
683
+ QgsSvgListModel* m = new QgsSvgListModel ( mSvgListView );
684
+ mSvgListView ->setModel ( m );
673
685
}
674
686
675
687
void QgsSVGFillSymbolLayerWidget::on_mChangeOutlinePushButton_clicked ()
0 commit comments