[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