[QGIS Commit] r14164 - in trunk/qgis/python: core gui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Aug 28 05:49:54 EDT 2010


Author: jef
Date: 2010-08-28 09:49:54 +0000 (Sat, 28 Aug 2010)
New Revision: 14164

Modified:
   trunk/qgis/python/core/conversions.sip
   trunk/qgis/python/gui/qgslegendinterface.sip
Log:
add sip bindings for groupLayerRelationship (fixes #2969)

Modified: trunk/qgis/python/core/conversions.sip
===================================================================
--- trunk/qgis/python/core/conversions.sip	2010-08-28 08:26:49 UTC (rev 14163)
+++ trunk/qgis/python/core/conversions.sip	2010-08-28 09:49:54 UTC (rev 14164)
@@ -1035,3 +1035,88 @@
     return sipGetState(sipTransferObj);
 %End
 };
+
+%MappedType QList < QPair< QString, QList<QString> > >
+{
+%TypeHeaderCode
+#include <QPair>
+#include <QList>
+#if (SIP_VERSION >= 0x040900)
+#define sipClass_QString ((sipWrapperType *) sipTypeAsPyTypeObject (sipType_QString))
+#endif
+%End
+
+%ConvertFromTypeCode
+//convert map to a python dictionary
+    PyObject *d;
+
+    if ((d = PyList_New( sipCpp->size() )) == NULL)
+      return NULL;
+
+    for ( int i = 0; i<sipCpp->size(); i++ )
+    {
+      PyObject *p;
+      if ((p = PyList_New(2) ) == NULL)
+      {
+	Py_DECREF(d);
+	return NULL;
+      }
+
+      PyObject *l;
+      if ((l = PyList_New( sipCpp->at(i).second.size() )) == NULL)
+      {
+	Py_DECREF(d);
+	Py_DECREF(p);
+	return NULL;
+      }
+
+      for( int j = 0; j<sipCpp->at(i).second.size(); j++ )
+      {
+        PyObject *t1obj = sipConvertFromNewInstance(new QString(sipCpp->at(i).second.at(j)), sipClass_QString, sipTransferObj);
+        PyList_SetItem( l, j, t1obj);
+      }
+
+      PyObject *t1obj = sipConvertFromNewInstance(new QString(sipCpp->at(i).first), sipClass_QString, sipTransferObj);
+      PyList_SetItem( p, 0, t1obj );
+      PyList_SetItem( p, 1, l);
+
+      PyList_SetItem( d, i, p );
+    }
+
+    return d;
+%End
+%ConvertToTypeCode
+#if PY_VERSION_HEX >= 0x02050000
+    Py_ssize_t i = 0;
+#else
+    int i = 0;
+#endif
+    QList < QPair< QString, QList<QString> > > *qm = new QList < QPair< QString, QList<QString> > >;
+
+    for ( i = 0; i < PyList_GET_SIZE(sipPy); i++ )
+    {
+      PyObject *sipPair = PyList_GetItem( sipPy, i );
+      PyObject *sipKey  = PyList_GetItem( sipPair, 0 );
+      PyObject *sipList = PyList_GetItem( sipPair, 1 );
+
+      QList< QString > l;
+      int state;
+      int j;
+      for ( j = 0; j < PyList_GET_SIZE( sipList ); j++ )
+      {
+        PyObject *sipString = PyList_GetItem( sipList, j );
+        QString *t1 = reinterpret_cast<QString *>(sipConvertToInstance(sipString, sipClass_QString, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+	l << *t1;
+        sipReleaseInstance(t1, sipClass_QString, state);
+      }
+
+      QString *t1 = reinterpret_cast<QString *>(sipConvertToInstance(sipKey, sipClass_QString, sipTransferObj, SIP_NOT_NONE, &state, sipIsErr));
+      qm->append( qMakePair( *t1, l ) );
+      sipReleaseInstance(t1, sipClass_QString, state);
+    }
+
+    *sipCppPtr = qm;
+
+    return sipGetState(sipTransferObj);
+%End
+};

Modified: trunk/qgis/python/gui/qgslegendinterface.sip
===================================================================
--- trunk/qgis/python/gui/qgslegendinterface.sip	2010-08-28 08:26:49 UTC (rev 14163)
+++ trunk/qgis/python/gui/qgslegendinterface.sip	2010-08-28 09:49:54 UTC (rev 14164)
@@ -19,6 +19,9 @@
     //! Return a string list of groups
     virtual QStringList groups() =0;
 
+    //! Return the relationship between groups and layers in the legend
+    virtual QList< QPair< QString, QList<QString> > > groupLayerRelationship();
+
     //! Return all layers in the project in legend order
     //! @note added in 1.5
     virtual QList< QgsMapLayer * > layers() const =0;



More information about the QGIS-commit mailing list