49
49
#include < QGroupBox>
50
50
#include < QLabel>
51
51
#include < QWebView>
52
+ #include < QDesktopServices>
52
53
53
54
void QgsAttributeEditor::selectFileName ()
54
55
{
@@ -187,6 +188,23 @@ void QgsAttributeEditor::updateUrl()
187
188
le->blockSignals ( false );
188
189
}
189
190
191
+ void QgsAttributeEditor::openUrl ()
192
+ {
193
+ QPushButton *pb = qobject_cast<QPushButton *>( sender () );
194
+ if ( !pb )
195
+ return ;
196
+
197
+ QWidget *hbox = qobject_cast<QWidget *>( pb->parent () );
198
+ if ( !hbox )
199
+ return ;
200
+
201
+ QWebView *ww = hbox->findChild <QWebView *>();
202
+ if ( !ww )
203
+ return ;
204
+
205
+ QDesktopServices::openUrl ( ww->url ().toString () );
206
+ }
207
+
190
208
void QgsAttributeEditor::updateColor ()
191
209
{
192
210
QString color;
@@ -706,8 +724,9 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
706
724
if ( ww )
707
725
{
708
726
ww->page ()->setNetworkAccessManager ( QgsNetworkAccessManager::instance () );
709
- ww->page ()->setLinkDelegationPolicy ( QWebPage::DelegateAllLinks );
727
+ // ww->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
710
728
ww->settings ()->setAttribute ( QWebSettings::LocalContentCanAccessRemoteUrls, true );
729
+ ww->settings ()->setAttribute ( QWebSettings::JavascriptCanOpenWindows, true );
711
730
#ifdef QGISDEBUG
712
731
ww->settings ()->setAttribute ( QWebSettings::DeveloperExtrasEnabled, true );
713
732
#endif
@@ -729,7 +748,8 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
729
748
break ;
730
749
}
731
750
732
- QPushButton *pb = 0 ;
751
+ QPushButton *pb0 = 0 ;
752
+ QPushButton *pb1 = 0 ;
733
753
QLineEdit *le = qobject_cast<QLineEdit *>( editor );
734
754
if ( le )
735
755
{
@@ -738,7 +758,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
738
758
739
759
if ( editor->parent () )
740
760
{
741
- pb = editor->parent ()->findChild <QPushButton *>();
761
+ pb0 = editor->parent ()->findChild <QPushButton *>();
742
762
}
743
763
}
744
764
else
@@ -753,15 +773,18 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
753
773
case QgsVectorLayer::FileName:
754
774
case QgsVectorLayer::Photo:
755
775
case QgsVectorLayer::Calendar:
756
- pb = new QPushButton ( tr ( " ..." ), myWidget );
776
+ pb0 = new QPushButton ( tr ( " ..." ), myWidget );
757
777
break ;
758
778
759
779
case QgsVectorLayer::WebView:
760
- pb = new QPushButton ( tr ( " <" ), myWidget );
780
+ pb0 = new QPushButton ( tr ( " <" ), myWidget );
781
+ pb0->setObjectName ( " saveUrl" );
782
+ pb1 = new QPushButton ( tr ( " ..." ), myWidget );
783
+ pb1->setObjectName ( " openUrl" );
761
784
break ;
762
785
763
786
case QgsVectorLayer::Color:
764
- pb = new QgsColorButton ( myWidget );
787
+ pb0 = new QgsColorButton ( myWidget );
765
788
break ;
766
789
767
790
default :
@@ -780,9 +803,11 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
780
803
else if ( editType == QgsVectorLayer::WebView )
781
804
{
782
805
ww = new QWebView ( myWidget );
806
+ ww->setObjectName ( " webview" );
783
807
ww->page ()->setNetworkAccessManager ( QgsNetworkAccessManager::instance () );
784
- ww->page ()->setLinkDelegationPolicy ( QWebPage::DelegateAllLinks );
808
+ // ww->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
785
809
ww->settings ()->setAttribute ( QWebSettings::LocalContentCanAccessRemoteUrls, true );
810
+ ww->settings ()->setAttribute ( QWebSettings::JavascriptCanOpenWindows, true );
786
811
#ifdef QGISDEBUG
787
812
ww->settings ()->setAttribute ( QWebSettings::DeveloperExtrasEnabled, true );
788
813
#endif
@@ -791,7 +816,9 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
791
816
}
792
817
793
818
layout->addWidget ( le, row, 0 );
794
- layout->addWidget ( pb, row, 1 );
819
+ layout->addWidget ( pb0, row, 1 );
820
+ if ( pb1 )
821
+ layout->addWidget ( pb1, row, 2 );
795
822
796
823
myWidget->setLayout ( layout );
797
824
}
@@ -808,16 +835,37 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
808
835
connect ( le, SIGNAL ( textChanged ( const QString & ) ), new QgsAttributeEditor ( le ), SLOT ( updateColor () ) );
809
836
}
810
837
811
- if ( pb )
838
+ if ( pb0 )
812
839
{
813
840
if ( editType == QgsVectorLayer::FileName || editType == QgsVectorLayer::Photo )
814
- connect ( pb, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb ), SLOT ( selectFileName () ) );
841
+ {
842
+ connect ( pb0, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb0 ), SLOT ( selectFileName () ) );
843
+ pb0->setToolTip ( tr ( " Select filename..." ) );
844
+ }
815
845
if ( editType == QgsVectorLayer::WebView )
816
- connect ( pb, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb ), SLOT ( updateUrl () ) );
846
+ {
847
+ connect ( pb0, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb0 ), SLOT ( updateUrl () ) );
848
+ pb0->setToolTip ( tr ( " Save current page url in attribute" ) );
849
+ }
817
850
if ( editType == QgsVectorLayer::Calendar )
818
- connect ( pb, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb ), SLOT ( selectDate () ) );
851
+ {
852
+ connect ( pb0, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb0 ), SLOT ( selectDate () ) );
853
+ pb0->setToolTip ( tr ( " Select date in calendar" ) );
854
+ }
819
855
if ( editType == QgsVectorLayer::Color )
820
- connect ( pb, SIGNAL ( colorChanged ( const QColor & ) ), new QgsAttributeEditor ( pb ), SLOT ( updateColor () ) );
856
+ {
857
+ connect ( pb0, SIGNAL ( colorChanged ( const QColor & ) ), new QgsAttributeEditor ( pb0 ), SLOT ( updateColor () ) );
858
+ pb0->setToolTip ( tr ( " Select color in browser" ) );
859
+ }
860
+ }
861
+
862
+ if ( pb1 )
863
+ {
864
+ if ( editType == QgsVectorLayer::WebView )
865
+ {
866
+ connect ( pb1, SIGNAL ( clicked () ), new QgsAttributeEditor ( pb1 ), SLOT ( openUrl () ) );
867
+ pb1->setToolTip ( tr ( " Open current page in default browser" ) );
868
+ }
821
869
}
822
870
}
823
871
break ;
0 commit comments