[QGIS Commit] r12215 - in trunk/qgis: python/core src/app src/core
src/ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sat Nov 21 14:55:25 EST 2009
Author: jef
Date: 2009-11-21 14:55:25 -0500 (Sat, 21 Nov 2009)
New Revision: 12215
Modified:
trunk/qgis/python/core/qgsvectorlayer.sip
trunk/qgis/src/app/qgsattributedialog.cpp
trunk/qgis/src/app/qgsattributedialog.h
trunk/qgis/src/app/qgsattributeeditor.cpp
trunk/qgis/src/app/qgsvectorlayerproperties.cpp
trunk/qgis/src/core/qgsvectorlayer.cpp
trunk/qgis/src/core/qgsvectorlayer.h
trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui
Log:
add support for a python feature form initialization function
Modified: trunk/qgis/python/core/qgsvectorlayer.sip
===================================================================
--- trunk/qgis/python/core/qgsvectorlayer.sip 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/python/core/qgsvectorlayer.sip 2009-11-21 19:55:25 UTC (rev 12215)
@@ -425,6 +425,16 @@
*/
void setEditForm( QString ui );
+ /** get edit form init function
+ @note added in 1.4
+ */
+ QString editFormInit();
+
+ /** set edit form init function
+ @note added in 1.4
+ */
+ void setEditFormInit( QString function );
+
/**access value map*/
QMap<QString, QVariant> &valueMap(int idx);
Modified: trunk/qgis/src/app/qgsattributedialog.cpp
===================================================================
--- trunk/qgis/src/app/qgsattributedialog.cpp 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/app/qgsattributedialog.cpp 2009-11-21 19:55:25 UTC (rev 12215)
@@ -25,6 +25,8 @@
#include "qgssymbol.h"
#include "qgsattributeeditor.h"
+#include "qgisapp.h"
+
#include <QTableWidgetItem>
#include <QSettings>
#include <QLabel>
@@ -187,11 +189,34 @@
}
connect( buttonBox, SIGNAL( rejected() ), mDialog, SLOT( reject() ) );
- connect( buttonBox, SIGNAL( rejected() ), this, SLOT( rejected() ) );
}
QMetaObject::connectSlotsByName( mDialog );
+ connect( mDialog, SIGNAL( destroyed() ), this, SLOT( dialogDestroyed() ) );
+
+ if ( !vl->editFormInit().isEmpty() )
+ {
+#if 0
+ // would be nice if only PyQt's QVariant.toPyObject() wouldn't take ownership
+ vl->setProperty( "featureForm.dialog", QVariant::fromValue( qobject_cast<QObject*>( mDialog ) ) );
+ vl->setProperty( "featureForm.id", QVariant( mpFeature->id() ) );
+#endif
+
+ QString module = vl->editFormInit();
+ int pos = module.lastIndexOf( "." );
+ if ( pos >= 0 )
+ {
+ QgisApp::instance()->runPythonString( QString( "import %1" ).arg( module.left( pos ) ) );
+ }
+
+ QgisApp::instance()->runPythonString( QString( "_qgis_featureform_%1 = wrapinstance( %2, QtGui.QDialog )" ).arg( mLayer->getLayerID() ).arg(( unsigned long ) mDialog ) );
+
+ QString expr = QString( "%1(_qgis_featureform_%2,'%2',%3)" ).arg( vl->editFormInit() ).arg( vl->getLayerID() ).arg( mpFeature->id() );
+ QgsDebugMsg( QString( "running featureForm init: %1" ).arg( expr ) );
+ QgisApp::instance()->runPythonString( expr );
+ }
+
restoreGeometry();
}
@@ -223,17 +248,41 @@
int QgsAttributeDialog::exec()
{
- return mDialog->exec();
+ if ( mDialog )
+ {
+ return mDialog->exec();
+ }
+ else
+ {
+ QgsDebugMsg( "No dialog" );
+ return QDialog::Rejected;
+ }
}
void QgsAttributeDialog::saveGeometry()
{
- QSettings settings;
- settings.setValue( mSettingsPath + "geometry", mDialog->saveGeometry() );
+ if ( mDialog )
+ {
+ QSettings settings;
+ settings.setValue( mSettingsPath + "geometry", mDialog->saveGeometry() );
+ }
}
void QgsAttributeDialog::restoreGeometry()
{
- QSettings settings;
- mDialog->restoreGeometry( settings.value( mSettingsPath + "geometry" ).toByteArray() );
+ if ( mDialog )
+ {
+ QSettings settings;
+ mDialog->restoreGeometry( settings.value( mSettingsPath + "geometry" ).toByteArray() );
+ }
}
+
+void QgsAttributeDialog::dialogDestroyed()
+{
+#if 0
+ mLayer->setProperty( "featureForm.dialog", QVariant() );
+ mLayer->setProperty( "featureForm.id", QVariant() );
+#endif
+ QgisApp::instance()->runPythonString( QString( "del _qgis_featureform_%1" ).arg( mLayer->getLayerID() ) );
+ mDialog = NULL;
+}
Modified: trunk/qgis/src/app/qgsattributedialog.h
===================================================================
--- trunk/qgis/src/app/qgsattributedialog.h 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/app/qgsattributedialog.h 2009-11-21 19:55:25 UTC (rev 12215)
@@ -55,6 +55,8 @@
int exec();
+ void dialogDestroyed();
+
private:
QDialog *mDialog;
Modified: trunk/qgis/src/app/qgsattributeeditor.cpp
===================================================================
--- trunk/qgis/src/app/qgsattributeeditor.cpp 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/app/qgsattributeeditor.cpp 2009-11-21 19:55:25 UTC (rev 12215)
@@ -372,6 +372,10 @@
connect( pb, SIGNAL( clicked() ), new QgsAttributeEditor( pb ), SLOT( selectFileName() ) );
}
break;
+
+ case QgsVectorLayer::Immutable:
+ return NULL;
+
}
if ( editType == QgsVectorLayer::Immutable )
Modified: trunk/qgis/src/app/qgsvectorlayerproperties.cpp
===================================================================
--- trunk/qgis/src/app/qgsvectorlayerproperties.cpp 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/app/qgsvectorlayerproperties.cpp 2009-11-21 19:55:25 UTC (rev 12215)
@@ -132,6 +132,7 @@
leSpatialRefSys->setCursorPosition( 0 );
leEditForm->setText( layer->editForm() );
+ leEditFormInit->setText( layer->editFormInit() );
connect( sliderTransparency, SIGNAL( valueChanged( int ) ), this, SLOT( sliderTransparency_valueChanged( int ) ) );
@@ -568,6 +569,7 @@
layer->setDisplayField( displayFieldComboBox->currentText() );
layer->setEditForm( leEditForm->text() );
+ layer->setEditFormInit( leEditFormInit->text() );
actionDialog->apply();
Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp 2009-11-21 19:55:25 UTC (rev 12215)
@@ -102,14 +102,14 @@
mEditable( false ),
mModified( false ),
mMaxUpdatedIndex( -1 ),
+ mActiveCommand( NULL ),
mRenderer( 0 ),
+ mRendererV2( NULL ),
+ mUsingRendererV2( false ),
mLabel( 0 ),
mLabelOn( false ),
- mActiveCommand( NULL ),
mVertexMarkerOnlyForSelection( false ),
- mFetching( false ),
- mRendererV2( NULL ),
- mUsingRendererV2( false )
+ mFetching( false )
{
mActions = new QgsAttributeAction;
@@ -2687,6 +2687,12 @@
mEditForm = QgsProject::instance()->readPath( e.text() );
}
+ QDomNode editFormInitNode = node.namedItem( "editforminit" );
+ if ( !editFormInitNode.isNull() )
+ {
+ mEditFormInit = editFormInitNode.toElement().text();
+ }
+
mAttributeAliasMap.clear();
QDomNode aliasesNode = node.namedItem( "aliases" );
if ( !aliasesNode.isNull() )
@@ -2828,6 +2834,11 @@
efField.appendChild( efText );
node.appendChild( efField );
+ QDomElement efiField = doc.createElement( "editforminit" );
+ QDomText efiText = doc.createTextNode( mEditFormInit );
+ efiField.appendChild( efiText );
+ node.appendChild( efiField );
+
//attribute aliases
if ( mAttributeAliasMap.size() > 0 )
{
@@ -4026,6 +4037,16 @@
mEditForm = ui;
}
+QString QgsVectorLayer::editFormInit()
+{
+ return mEditFormInit;
+}
+
+void QgsVectorLayer::setEditFormInit( QString function )
+{
+ mEditFormInit = function;
+}
+
QMap< QString, QVariant > &QgsVectorLayer::valueMap( int idx )
{
const QgsFieldMap &fields = pendingFields();
Modified: trunk/qgis/src/core/qgsvectorlayer.h
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.h 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/core/qgsvectorlayer.h 2009-11-21 19:55:25 UTC (rev 12215)
@@ -477,6 +477,12 @@
/** set edit form (added in 1.4) */
void setEditForm( QString ui );
+ /** get python function for edit form initialization (added in 1.4) */
+ QString editFormInit();
+
+ /** set python function for edit form initialization (added in 1.4) */
+ void setEditFormInit( QString function );
+
/**access value map*/
QMap<QString, QVariant> &valueMap( int idx );
@@ -754,8 +760,9 @@
QMap< QString, QMap<QString, QVariant> > mValueMaps;
QMap< QString, RangeData > mRanges;
QMap< QString, QPair<QString, QString> > mCheckedStates;
- QString mEditForm;
+ QString mEditForm, mEditFormInit;
+
bool mFetching;
QgsRectangle mFetchRect;
QgsAttributeList mFetchAttributes;
Modified: trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui 2009-11-21 07:11:13 UTC (rev 12214)
+++ trunk/qgis/src/ui/qgsvectorlayerpropertiesbase.ui 2009-11-21 19:55:25 UTC (rev 12215)
@@ -74,7 +74,7 @@
<item row="0" column="2" colspan="3">
<widget class="QStackedWidget" name="stackedWidget">
<property name="currentIndex">
- <number>0</number>
+ <number>3</number>
</property>
<widget class="QWidget" name="page_3">
<layout class="QGridLayout" name="gridLayout_4">
@@ -172,7 +172,7 @@
<enum>QFrame::Sunken</enum>
</property>
<property name="currentIndex">
- <number>1</number>
+ <number>0</number>
</property>
<widget class="QWidget" name="page"/>
<widget class="QWidget" name="page_2"/>
@@ -355,8 +355,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>407</width>
- <height>394</height>
+ <width>554</width>
+ <height>397</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_3">
@@ -409,7 +409,7 @@
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item row="1" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLineEdit" name="leEditForm"/>
@@ -423,7 +423,24 @@
</item>
</layout>
</item>
- <item row="1" column="2">
+ <item row="1" column="3">
+ <widget class="QPushButton" name="pbnIndex">
+ <property name="text">
+ <string>Create Spatial Index</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="4">
+ <widget class="QLineEdit" name="leSpatialRefSys">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2">
+ <widget class="QLineEdit" name="leEditFormInit"/>
+ </item>
+ <item row="2" column="3">
<widget class="QPushButton" name="pbnChangeSpatialRefSys">
<property name="toolTip">
<string>Specify the coordinate reference system of the layer's geometry.</string>
@@ -436,20 +453,13 @@
</property>
</widget>
</item>
- <item row="1" column="3">
- <widget class="QPushButton" name="pbnIndex">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
<property name="text">
- <string>Create Spatial Index</string>
+ <string>Init function</string>
</property>
</widget>
</item>
- <item row="2" column="0" colspan="4">
- <widget class="QLineEdit" name="leSpatialRefSys">
- <property name="readOnly">
- <bool>true</bool>
- </property>
- </widget>
- </item>
</layout>
</widget>
</item>
@@ -650,7 +660,6 @@
<tabstop>displayFieldComboBox</tabstop>
<tabstop>leSpatialRefSys</tabstop>
<tabstop>pbnIndex</tabstop>
- <tabstop>pbnChangeSpatialRefSys</tabstop>
<tabstop>spinMinimumScale</tabstop>
<tabstop>spinMaximumScale</tabstop>
<tabstop>txtSubsetSQL</tabstop>
More information about the QGIS-commit
mailing list