53
53
#include < QDesktopServices>
54
54
#include < QMessageBox>
55
55
#include < QComboBox>
56
+ #include < QTextDocument>
56
57
57
58
// graph
58
59
#include < qwt_plot.h>
61
62
#include < qwt_legend.h>
62
63
#include " qgsvectorcolorrampv2.h" // for random colors
63
64
65
+ static QString& insertLinkAnchors ( QString& value )
66
+ {
67
+ // http://alanstorm.com/url_regex_explained
68
+ static QRegExp urlRegEx ( " (\\ b(([\\ w-]+://?|www[.])[^\\ s()<>]+(?:\\ ([\\ w\\ d]+\\ )|([^!\" #$%&'()*+,\\ -./:;<=>?@[\\\\\\ ]^_`{|}~\\ s]|/))))" );
69
+ static QRegExp protoRegEx ( " ^(?:f|ht)tps?://" );
70
+
71
+ int offset = 0 ;
72
+ while ( urlRegEx.indexIn ( value, offset ) != -1 )
73
+ {
74
+ QString url = urlRegEx.cap ( 1 );
75
+ QString protoUrl = url;
76
+ if ( protoRegEx.indexIn ( protoUrl ) == -1 )
77
+ {
78
+ protoUrl.prepend ( " http://" );
79
+ }
80
+ QString anchor = QString ( " <a href=\" %1\" >%2</a>" ).arg ( Qt::escape ( protoUrl ) ).arg ( Qt::escape ( url ) );
81
+ value.replace ( urlRegEx.pos ( 1 ), url.length (), anchor );
82
+ offset = urlRegEx.pos ( 1 ) + anchor.length ();
83
+ }
84
+ return value;
85
+ }
64
86
65
87
QgsIdentifyResultsWebView::QgsIdentifyResultsWebView ( QWidget *parent ) : QgsWebView( parent )
66
88
{
@@ -471,12 +493,16 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
471
493
if ( i >= fields.count () )
472
494
continue ;
473
495
496
+ if ( vlayer->editorWidgetV2 ( i ) == " Hidden" )
497
+ continue ;
498
+
474
499
QString defVal;
475
500
if ( fields.fieldOrigin ( i ) == QgsFields::OriginProvider && vlayer->dataProvider () )
476
501
defVal = vlayer->dataProvider ()->defaultValue ( fields.fieldOriginIndex ( i ) ).toString ();
477
502
478
503
QString value = defVal == attrs.at ( i ) ? defVal : fields.at ( i ).displayString ( attrs.at ( i ) );
479
504
QTreeWidgetItem *attrItem = new QTreeWidgetItem ( QStringList () << QString::number ( i ) << value );
505
+ featItem->addChild ( attrItem );
480
506
481
507
attrItem->setData ( 0 , Qt::DisplayRole, vlayer->attributeDisplayName ( i ) );
482
508
attrItem->setData ( 0 , Qt::UserRole, fields[i].name () );
@@ -490,18 +516,19 @@ void QgsIdentifyResultsDialog::addFeature( QgsVectorLayer *vlayer, const QgsFeat
490
516
continue ;
491
517
}
492
518
493
- value = representValue ( vlayer, fields[i].name (), attrs.at ( i ) );
519
+ value = representValue ( vlayer, fields[i].name (), attrs[i] );
520
+ QLabel* valueLabel = new QLabel ( insertLinkAnchors ( value ) );
521
+ valueLabel->setOpenExternalLinks ( true );
522
+ attrItem->treeWidget ()->setItemWidget ( attrItem, 1 , valueLabel );
494
523
495
- attrItem->setData ( 1 , Qt::DisplayRole, value );
524
+ attrItem->setData ( 1 , Qt::DisplayRole, QString () );
496
525
497
526
if ( fields[i].name () == vlayer->displayField () )
498
527
{
499
528
featItem->setText ( 0 , attrItem->text ( 0 ) );
500
529
featItem->setText ( 1 , attrItem->text ( 1 ) );
501
530
featureLabeled = true ;
502
531
}
503
-
504
- featItem->addChild ( attrItem );
505
532
}
506
533
507
534
if ( !featureLabeled )
@@ -1480,7 +1507,9 @@ void QgsIdentifyResultsDialog::attributeValueChanged( QgsFeatureId fid, int idx,
1480
1507
if ( item->data ( 0 , Qt::UserRole + 1 ).toInt () == idx )
1481
1508
{
1482
1509
value = representValue ( vlayer, fld.name (), val );
1483
- item->setData ( 1 , Qt::DisplayRole, value );
1510
+ QLabel* valueLabel = new QLabel ( insertLinkAnchors ( value ) );
1511
+ valueLabel->setOpenExternalLinks ( true );
1512
+ item->treeWidget ()->setItemWidget ( item, 1 , valueLabel );
1484
1513
return ;
1485
1514
}
1486
1515
}
0 commit comments