Skip to content

Commit 6e6b8fe

Browse files
committed
widget fixes:
- add sip bindings for new widgets (and some other missing pieces) - change Webview to WebView (like in QWebView) - use proxy settings also for webview widget - don't disable Photo and webview widget - use smooth transformation in photo widget - show disabled color button with dotted border in actual color instead of grayed-out
1 parent 45b931b commit 6e6b8fe

File tree

9 files changed

+125
-52
lines changed

9 files changed

+125
-52
lines changed

i18n/qgis_de.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11534,8 +11534,8 @@ Fehler war:%2</translation>
1153411534
</message>
1153511535
<message>
1153611536
<location filename="../src/ui/qgsattributetypeedit.ui" line="106"/>
11537-
<source>Webview</source>
11538-
<translation>Webview</translation>
11537+
<source>Web view</source>
11538+
<translation>Webansicht</translation>
1153911539
</message>
1154011540
<message>
1154111541
<location filename="../src/ui/qgsattributetypeedit.ui" line="137"/>

python/core/qgsvectorlayer.sip

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ class QgsVectorLayer : QgsMapLayer
115115
DialRange, /* dial range @added in 1.5 */
116116
ValueRelation, /* value map from an table @added in 1.8 */
117117
UuidGenerator, /* uuid generator - readonly and automatically intialized @added in 1.9 */
118+
Photo, /* phote widget @added in 1.9 */
119+
WebView, /* webview widget @added in 1.9 */
120+
Color, /* color @added in 1.9 */
118121
};
119122

120123
struct RangeData
@@ -595,6 +598,15 @@ class QgsVectorLayer : QgsMapLayer
595598
/** delete an attribute field (but does not commit it) */
596599
bool deleteAttribute( int attr );
597600

601+
/**
602+
* Deletes a list of attribute fields (but does not commit it)
603+
*
604+
* @param attrs the indices of the attributes to delete
605+
* @return true if at least one attribute has been deleted
606+
*
607+
*/
608+
bool deleteAttributes( QList<int> attrs );
609+
598610
/** Insert a copy of the given features into the layer (but does not commit it) */
599611
bool addFeatures( QList<QgsFeature> features, bool makeSelected = true );
600612

@@ -679,6 +691,11 @@ class QgsVectorLayer : QgsMapLayer
679691
*/
680692
QString &dateFormat( int idx );
681693

694+
/**access widget size for photo and webview widget
695+
* @note added in 1.9
696+
*/
697+
QSize &widgetSize( int idx );
698+
682699
/**is edit widget editable
683700
* @note added in 1.9
684701
**/
@@ -742,6 +759,10 @@ class QgsVectorLayer : QgsMapLayer
742759
@note public and static from version 1.4 */
743760
static void drawVertexMarker( double x, double y, QPainter& p, QgsVectorLayer::VertexMarkerType type, int vertexSize );
744761

762+
/** Assembles mUpdatedFields considering provider fields, joined fields and added fields
763+
@note added in 1.7 */
764+
void updateFields();
765+
745766
/** Caches joined attributes if required (and not already done)
746767
@note added in 1.7 */
747768
void createJoinCaches();

src/app/qgsattributetypedialog.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ void QgsAttributeTypeDialog::setPageForEditType( QgsVectorLayer::EditType editTy
335335
setPage( 14 );
336336
break;
337337

338-
case QgsVectorLayer::Webview:
338+
case QgsVectorLayer::WebView:
339339
setPage( 15 );
340340
break;
341341

@@ -527,7 +527,7 @@ void QgsAttributeTypeDialog::setIndex( int index, QgsVectorLayer::EditType editT
527527
case QgsVectorLayer::Hidden:
528528
case QgsVectorLayer::TextEdit:
529529
case QgsVectorLayer::UuidGenerator:
530-
case QgsVectorLayer::Webview:
530+
case QgsVectorLayer::WebView:
531531
case QgsVectorLayer::Color:
532532
break;
533533
}
@@ -702,7 +702,7 @@ void QgsAttributeTypeDialog::accept()
702702
mWidgetSize = QSize( sbWidgetWidth->value(), sbWidgetHeight->value() );
703703
break;
704704
case 15:
705-
mEditType = QgsVectorLayer::Webview;
705+
mEditType = QgsVectorLayer::WebView;
706706
break;
707707
case 16:
708708
mEditType = QgsVectorLayer::Color;

src/app/qgsfieldsproperties.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ void QgsFieldsProperties::attributeTypeDialog()
534534
case QgsVectorLayer::Immutable:
535535
case QgsVectorLayer::Hidden:
536536
case QgsVectorLayer::UuidGenerator:
537-
case QgsVectorLayer::Webview:
537+
case QgsVectorLayer::WebView:
538538
case QgsVectorLayer::Color:
539539
break;
540540
}
@@ -746,7 +746,7 @@ void QgsFieldsProperties::setupEditTypes()
746746
editTypeMap.insert( QgsVectorLayer::ValueRelation, tr( "Value relation" ) );
747747
editTypeMap.insert( QgsVectorLayer::UuidGenerator, tr( "UUID generator" ) );
748748
editTypeMap.insert( QgsVectorLayer::Photo, tr( "Photo" ) );
749-
editTypeMap.insert( QgsVectorLayer::Webview, tr( "Webview" ) );
749+
editTypeMap.insert( QgsVectorLayer::WebView, tr( "Web view" ) );
750750
editTypeMap.insert( QgsVectorLayer::Color, tr( "Color" ) );
751751
}
752752

@@ -892,7 +892,7 @@ void QgsFieldsProperties::apply()
892892
case QgsVectorLayer::Hidden:
893893
case QgsVectorLayer::TextEdit:
894894
case QgsVectorLayer::UuidGenerator:
895-
case QgsVectorLayer::Webview:
895+
case QgsVectorLayer::WebView:
896896
case QgsVectorLayer::Color:
897897
break;
898898
}

src/core/qgsvectorlayer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2424,7 +2424,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
24242424
case UniqueValues:
24252425
case UniqueValuesEditable:
24262426
case UuidGenerator:
2427-
case Webview:
2427+
case WebView:
24282428
case Color:
24292429
break;
24302430
}
@@ -2750,7 +2750,7 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
27502750
case Enumeration:
27512751
case Immutable:
27522752
case UuidGenerator:
2753-
case Webview:
2753+
case WebView:
27542754
case Color:
27552755
break;
27562756
}

src/core/qgsvectorlayer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer
178178
ValueRelation, /* value map from an table @added in 1.8 */
179179
UuidGenerator, /* uuid generator - readonly and automatically intialized @added in 1.9 */
180180
Photo, /* phote widget @added in 1.9 */
181-
Webview, /* webview widget @added in 1.9 */
181+
WebView, /* webview widget @added in 1.9 */
182182
Color, /* color @added in 1.9 */
183183
};
184184

src/gui/qgsattributedialog.cpp

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#include <QDialog>
4242
#include <QVBoxLayout>
4343
#include <QLineEdit>
44+
#include <QWebView>
4445

4546
int QgsAttributeDialog::smFormCounter = 0;
4647

@@ -202,7 +203,28 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
202203

203204
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
204205
{
205-
myWidget->setEnabled( vl->isEditable() && vl->fieldEditable( fldIdx ) );
206+
if ( vl->isEditable() && vl->fieldEditable( fldIdx ) )
207+
{
208+
myWidget->setEnabled( true );
209+
}
210+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::Photo )
211+
{
212+
foreach ( QWidget *w, myWidget->findChildren<QWidget *>() )
213+
{
214+
w->setEnabled( qobject_cast<QLabel *>( w ) ? true : false );
215+
}
216+
}
217+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::WebView )
218+
{
219+
foreach ( QWidget *w, myWidget->findChildren<QWidget *>() )
220+
{
221+
w->setEnabled( qobject_cast<QWebView *>( w ) ? true : false );
222+
}
223+
}
224+
else
225+
{
226+
myWidget->setEnabled( false );
227+
}
206228
}
207229

208230
mypInnerLayout->addWidget( myWidget, index, 1 );
@@ -232,13 +254,34 @@ QgsAttributeDialog::QgsAttributeDialog( QgsVectorLayer *vl, QgsFeature *thepFeat
232254
if ( myWidgets.isEmpty() )
233255
continue;
234256

235-
foreach ( QWidget *w, myWidgets )
257+
foreach ( QWidget *myWidget, myWidgets )
236258
{
237-
QgsAttributeEditor::createAttributeEditor( mDialog, w, vl, fldIdx, myAttributes[fldIdx], mProxyWidgets );
259+
QgsAttributeEditor::createAttributeEditor( mDialog, myWidget, vl, fldIdx, myAttributes[fldIdx], mProxyWidgets );
238260

239-
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable && w->isEnabled() )
261+
if ( vl->editType( fldIdx ) != QgsVectorLayer::Immutable )
240262
{
241-
w->setEnabled( vl->isEditable() && vl->fieldEditable( fldIdx ) );
263+
if ( vl->isEditable() && vl->fieldEditable( fldIdx ) )
264+
{
265+
myWidget->setEnabled( true );
266+
}
267+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::Photo )
268+
{
269+
foreach ( QWidget *w, myWidget->findChildren<QWidget *>() )
270+
{
271+
w->setEnabled( qobject_cast<QLabel *>( w ) ? true : false );
272+
}
273+
}
274+
else if ( vl->editType( fldIdx ) == QgsVectorLayer::WebView )
275+
{
276+
foreach ( QWidget *w, myWidget->findChildren<QWidget *>() )
277+
{
278+
w->setEnabled( qobject_cast<QWebView *>( w ) ? true : false );
279+
}
280+
}
281+
else
282+
{
283+
myWidget->setEnabled( false );
284+
}
242285
}
243286
}
244287
}

src/gui/qgsattributeeditor.cpp

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <qgsexpression.h>
2929
#include <qgsfilterlineedit.h>
3030
#include <qgscolorbutton.h>
31+
#include <qgsnetworkaccessmanager.h>
3132

3233
#include <QScrollArea>
3334
#include <QPushButton>
@@ -159,7 +160,7 @@ void QgsAttributeEditor::loadPixmap( const QString &name )
159160
size.setHeight( size.width() * pm.size().height() / pm.size().width() );
160161
}
161162

162-
pm = pm.scaled( size, Qt::KeepAspectRatio );
163+
pm = pm.scaled( size, Qt::KeepAspectRatio, Qt::SmoothTransformation );
163164

164165
lw->setPixmap( pm );
165166
lw->setMinimumSize( size );
@@ -652,7 +653,9 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
652653
if ( myWidget )
653654
{
654655
if ( editType == QgsVectorLayer::Immutable )
656+
{
655657
myWidget->setDisabled( true );
658+
}
656659

657660
QgsStringRelay* relay = NULL;
658661

@@ -708,7 +711,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
708711
case QgsVectorLayer::FileName:
709712
case QgsVectorLayer::Calendar:
710713
case QgsVectorLayer::Photo:
711-
case QgsVectorLayer::Webview:
714+
case QgsVectorLayer::WebView:
712715
case QgsVectorLayer::Color:
713716
{
714717
QCalendarWidget *cw = qobject_cast<QCalendarWidget *>( editor );
@@ -721,6 +724,12 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
721724
QWebView *ww = qobject_cast<QWebView *>( editor );
722725
if ( ww )
723726
{
727+
ww->page()->setNetworkAccessManager( QgsNetworkAccessManager::instance() );
728+
ww->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
729+
ww->settings()->setAttribute( QWebSettings::LocalContentCanAccessRemoteUrls, true );
730+
#ifdef QGISDEBUG
731+
ww->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, true );
732+
#endif
724733
myWidget = ww;
725734
break;
726735
}
@@ -753,47 +762,55 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
753762
}
754763
else
755764
{
756-
le = new QgsFilterLineEdit();
765+
myWidget = new QWidget( parent );
766+
myWidget->setBackgroundRole( QPalette::Window );
767+
myWidget->setAutoFillBackground( true );
768+
769+
le = new QgsFilterLineEdit( myWidget );
757770
switch ( editType )
758771
{
759772
case QgsVectorLayer::FileName:
760773
case QgsVectorLayer::Photo:
761-
pb = new QPushButton( tr( "..." ) );
774+
pb = new QPushButton( tr( "..." ), myWidget );
762775
break;
763776

764-
case QgsVectorLayer::Webview:
765-
pb = new QPushButton( tr( "<" ) );
777+
case QgsVectorLayer::WebView:
778+
pb = new QPushButton( tr( "<" ), myWidget );
766779
break;
767780

768781
case QgsVectorLayer::Color:
769-
pb = new QgsColorButton();
782+
pb = new QgsColorButton( myWidget );
770783
break;
771784

772785
default:
773786
break;
774787
}
775788

789+
776790
int row = 0;
777-
QGridLayout *layout = new QGridLayout();
791+
QGridLayout *layout = new QGridLayout( myWidget );
778792
if ( editType == QgsVectorLayer::Photo )
779793
{
780-
lw = new QLabel();
794+
lw = new QLabel( myWidget );
781795
layout->addWidget( lw, 0, 0, 1, 2 );
782796
row++;
783797
}
784-
else if ( editType == QgsVectorLayer::Webview )
798+
else if ( editType == QgsVectorLayer::WebView )
785799
{
786-
ww = new QWebView();
800+
ww = new QWebView( myWidget );
801+
ww->page()->setNetworkAccessManager( QgsNetworkAccessManager::instance() );
802+
ww->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
803+
ww->settings()->setAttribute( QWebSettings::LocalContentCanAccessRemoteUrls, true );
804+
#ifdef QGISDEBUG
805+
ww->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, true );
806+
#endif
787807
layout->addWidget( ww, 0, 0, 1, 2 );
788808
row++;
789809
}
790810

791811
layout->addWidget( le, row, 0 );
792812
layout->addWidget( pb, row, 1 );
793813

794-
myWidget = new QWidget( parent );
795-
myWidget->setBackgroundRole( QPalette::Window );
796-
myWidget->setAutoFillBackground( true );
797814
myWidget->setLayout( layout );
798815
}
799816

@@ -813,7 +830,7 @@ QWidget *QgsAttributeEditor::createAttributeEditor( QWidget *parent, QWidget *ed
813830
{
814831
if ( editType == QgsVectorLayer::FileName || editType == QgsVectorLayer::Photo )
815832
connect( pb, SIGNAL( clicked() ), new QgsAttributeEditor( pb ), SLOT( selectFileName() ) );
816-
if ( editType == QgsVectorLayer::Webview )
833+
if ( editType == QgsVectorLayer::WebView )
817834
connect( pb, SIGNAL( clicked() ), new QgsAttributeEditor( pb ), SLOT( updateUrl() ) );
818835
if ( editType == QgsVectorLayer::Calendar )
819836
connect( pb, SIGNAL( clicked() ), new QgsAttributeEditor( pb ), SLOT( selectDate() ) );
@@ -1197,7 +1214,7 @@ bool QgsAttributeEditor::setValue( QWidget *editor, QgsVectorLayer *vl, int idx,
11971214
case QgsVectorLayer::FileName:
11981215
case QgsVectorLayer::Calendar:
11991216
case QgsVectorLayer::Photo:
1200-
case QgsVectorLayer::Webview:
1217+
case QgsVectorLayer::WebView:
12011218
case QgsVectorLayer::Color:
12021219
{
12031220
QCalendarWidget *cw = qobject_cast<QCalendarWidget *>( editor );

0 commit comments

Comments
 (0)