[QGIS Commit] r14331 - in trunk/qgis/src: app/gps core core/gps ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Mon Oct 4 17:37:05 EDT 2010
Author: jef
Date: 2010-10-04 21:37:05 +0000 (Mon, 04 Oct 2010)
New Revision: 14331
Added:
trunk/qgis/src/core/gps/qgsgpsdconnection.cpp
trunk/qgis/src/core/gps/qgsgpsdconnection.h
Modified:
trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp
trunk/qgis/src/core/CMakeLists.txt
trunk/qgis/src/core/gps/qgsgpsdetector.cpp
trunk/qgis/src/core/gps/qgsnmeaconnection.h
trunk/qgis/src/ui/qgsgpsinformationwidgetbase.ui
Log:
[FEATURE] add gpsd support to live gps tracking
Modified: trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp
===================================================================
--- trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp 2010-10-04 20:05:12 UTC (rev 14330)
+++ trunk/qgis/src/app/gps/qgsgpsinformationwidget.cpp 2010-10-04 21:37:05 UTC (rev 14331)
@@ -152,15 +152,24 @@
mSliderMarkerSize->setValue( mySettings.value( "/gps/markerSize", "12" ).toInt() );
mSpinTrackWidth->setValue( mySettings.value( "/gps/trackWidth", "2" ).toInt() );
QString myPortMode = mySettings.value( "/gps/portMode", "scanPorts" ).toString();
+
+ mGpsdHost->setText( mySettings.value( "/gps/gpsdHost", "localhost" ).toString() );
+ mGpsdPort->setText( mySettings.value( "/gps/gpsdPort", 2947 ).toString() );
+ mGpsdDevice->setText( mySettings.value( "/gps/gpsdDevice" ).toString() );
+
//port mode
if ( myPortMode == "scanPorts" )
{
mRadAutodetect->setChecked( true );
}
- else
+ else if ( myPortMode == "explicitPort" )
{
mRadUserPath->setChecked( true );
}
+ else if ( myPortMode == "gpsd" )
+ {
+ mRadGpsd->setChecked( true );
+ }
//auto digitising behaviour
bool myAutoAddVertexFlag = mySettings.value( "/gps/autoAddVertices", "false" ).toBool();
mCbxAutoAddVertices->setChecked( myAutoAddVertexFlag );
@@ -198,16 +207,24 @@
mySettings.setValue( "/gps/trackWidth", mSpinTrackWidth->value() );
mySettings.setValue( "/gps/markerSize", mSliderMarkerSize->value() );
mySettings.setValue( "/gps/autoAddVertices", mCbxAutoAddVertices->isChecked() );
- // scan or explicit port
+ // scan, explicit port or gpsd
if ( mRadAutodetect->isChecked() )
{
mySettings.setValue( "/gps/portMode", "scanPorts" );
}
- else
+ else if ( mRadUserPath->isChecked() )
{
mySettings.setValue( "/gps/portMode", "explicitPort" );
}
+ else
+ {
+ mySettings.setValue( "/gps/portMode", "gpsd" );
+ }
+ mySettings.setValue( "/gps/gpsdHost", mGpsdHost->text() );
+ mySettings.setValue( "/gps/gpsdPort", mGpsdPort->text().toInt() );
+ mySettings.setValue( "/gps/gpsdDevice", mGpsdDevice->text() );
+
// pan mode
if ( radRecenterMap->isChecked() )
{
@@ -317,6 +334,10 @@
return;
}
}
+ else if ( mRadGpsd->isChecked() )
+ {
+ port = QString( "%1:%2:%3" ).arg( mGpsdHost->text() ).arg( mGpsdPort->text() ).arg( mGpsdDevice->text() );
+ }
mGPSTextEdit->append( tr( "Connecting..." ) );
Modified: trunk/qgis/src/core/CMakeLists.txt
===================================================================
--- trunk/qgis/src/core/CMakeLists.txt 2010-10-04 20:05:12 UTC (rev 14330)
+++ trunk/qgis/src/core/CMakeLists.txt 2010-10-04 21:37:05 UTC (rev 14331)
@@ -11,6 +11,7 @@
gps/qgsgpsconnection.cpp
gps/qgsgpsconnectionregistry.cpp
gps/qgsnmeaconnection.cpp
+ gps/qgsgpsdconnection.cpp
gps/qgsgpsdetector.cpp
gps/parse.c
gps/sentence.c
@@ -257,6 +258,7 @@
gps/qgsgpsconnection.h
gps/qgsgpsdetector.h
gps/qgsnmeaconnection.h
+ gps/qgsgpsdconnection.h
gps/qextserialport/qextserialport.h
gps/qextserialport/qextserialenumerator.h
)
Added: trunk/qgis/src/core/gps/qgsgpsdconnection.cpp
===================================================================
--- trunk/qgis/src/core/gps/qgsgpsdconnection.cpp (rev 0)
+++ trunk/qgis/src/core/gps/qgsgpsdconnection.cpp 2010-10-04 21:37:05 UTC (rev 14331)
@@ -0,0 +1,51 @@
+/***************************************************************************
+ qgsgpsdconnection.cpp - description
+ ---------------------
+ begin : October 4th, 2010
+ copyright : (C) 2010 by Jürgen E. Fischer, norBIT GmbH
+ email : jef at norbit dot de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "qgsgpsdconnection.h"
+#include "qgslogger.h"
+
+#include <QTcpSocket>
+
+QgsGpsdConnection::QgsGpsdConnection( QString host, qint16 port, QString device )
+ : QgsNMEAConnection( new QTcpSocket() )
+ , mDevice( device )
+{
+ QTcpSocket *socket = qobject_cast< QTcpSocket * >( mSource );
+
+ QObject::connect( socket, SIGNAL( connected() ), this, SLOT( connected() ) );
+ QObject::connect( socket, SIGNAL( error( QAbstractSocket::SocketError ) ), this, SLOT( error( QAbstractSocket::SocketError ) ) );
+ socket->connectToHost( host, port );
+}
+
+QgsGpsdConnection::~QgsGpsdConnection()
+{
+ //connection will be closed by base class
+ QgsDebugMsg( "entered." );
+}
+
+void QgsGpsdConnection::connected()
+{
+ QgsDebugMsg( "connected!" );
+ QTcpSocket *socket = qobject_cast< QTcpSocket * >( mSource );
+ socket->write( QString( "?WATCH={\"enable\":true,\"nmea\":true%1};" ).arg( mDevice.isEmpty() ? mDevice : QString( "\"device\":%1" ).arg( mDevice ) ).toUtf8() );
+}
+
+void QgsGpsdConnection::error( QAbstractSocket::SocketError socketError )
+{
+ QTcpSocket *socket = qobject_cast< QTcpSocket * >( mSource );
+ QgsDebugMsg( QString( "error: %1 %2" ).arg( socketError ).arg( socket->errorString() ) );
+}
Added: trunk/qgis/src/core/gps/qgsgpsdconnection.h
===================================================================
--- trunk/qgis/src/core/gps/qgsgpsdconnection.h (rev 0)
+++ trunk/qgis/src/core/gps/qgsgpsdconnection.h 2010-10-04 21:37:05 UTC (rev 14331)
@@ -0,0 +1,42 @@
+/***************************************************************************
+ qgsgpsdconnection.h - description
+ -------------------
+ begin : October 4th, 2010
+ copyright : (C) 2010 by Jürgen E. Fischer, norBIT GmbH
+ email : jef at norbit dot de
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef QGSGPSDCONNECTION_H
+#define QGSGPSDCONNECTION_H
+
+#include "qgsgpsdconnection.h"
+#include "qgsnmeaconnection.h"
+
+#include <QAbstractSocket>
+
+/**Evaluates NMEA sentences coming from gpsd*/
+class CORE_EXPORT QgsGpsdConnection: public QgsNMEAConnection
+{
+ Q_OBJECT
+ public:
+ QgsGpsdConnection( QString host, qint16 port, QString device );
+ ~QgsGpsdConnection();
+
+ private slots:
+ void connected();
+ void error( QAbstractSocket::SocketError );
+
+ private:
+ QString mDevice;
+};
+
+#endif // QGSGPSDCONNECTION_H
Modified: trunk/qgis/src/core/gps/qgsgpsdetector.cpp
===================================================================
--- trunk/qgis/src/core/gps/qgsgpsdetector.cpp 2010-10-04 20:05:12 UTC (rev 14330)
+++ trunk/qgis/src/core/gps/qgsgpsdetector.cpp 2010-10-04 21:37:05 UTC (rev 14331)
@@ -20,6 +20,7 @@
#include "qgslogger.h"
#include "qgsgpsconnection.h"
#include "qgsnmeaconnection.h"
+#include "qgsgpsdconnection.h"
#include <QStringList>
#include <QFileInfo>
@@ -29,6 +30,9 @@
{
QList< QPair<QString, QString> > devs;
+ // try local gpsd first
+ devs << QPair<QString, QString>( "localhost:2947:", tr( "local gpsd" ) );
+
#ifdef linux
// look for linux serial devices
foreach( QString linuxDev, QStringList() << "/dev/ttyS%1" << "/dev/ttyUSB%1" << "/dev/rfcomm%1" )
@@ -115,9 +119,9 @@
delete mConn;
}
- QextSerialPort *port = 0;
+ mConn = 0;
- do
+ while ( !mConn )
{
mBaudIndex++;
if ( mBaudIndex == mBaudList.size() )
@@ -133,19 +137,37 @@
return;
}
- if ( port )
- delete port;
+ if ( mPortList[ mPortIndex ].first.contains( ":" ) )
+ {
+ mBaudIndex = mBaudList.size() - 1;
- port = new QextSerialPort( mPortList[ mPortIndex ].first, QextSerialPort::EventDriven );
- port->setBaudRate( mBaudList[ mBaudIndex ] );
- port->setFlowControl( FLOW_OFF );
- port->setParity( PAR_NONE );
- port->setDataBits( DATA_8 );
- port->setStopBits( STOP_1 );
+ QStringList gpsParams = mPortList[ mPortIndex ].first.split( ":" );
+
+ Q_ASSERT( gpsParams.size() == 3 );
+
+ mConn = new QgsGpsdConnection( gpsParams[0], gpsParams[1].toInt(), gpsParams[2] );
+ }
+ else
+ {
+ QextSerialPort *serial = new QextSerialPort( mPortList[ mPortIndex ].first, QextSerialPort::EventDriven );
+
+ serial->setBaudRate( mBaudList[ mBaudIndex ] );
+ serial->setFlowControl( FLOW_OFF );
+ serial->setParity( PAR_NONE );
+ serial->setDataBits( DATA_8 );
+ serial->setStopBits( STOP_1 );
+
+ if ( serial->open( QIODevice::ReadOnly | QIODevice::Unbuffered ) )
+ {
+ mConn = new QgsNMEAConnection( serial );
+ }
+ else
+ {
+ delete serial;
+ }
+ }
}
- while ( !port->open( QIODevice::ReadOnly | QIODevice::Unbuffered ) );
- mConn = new QgsNMEAConnection( port );
connect( mConn, SIGNAL( stateChanged( const QgsGPSInformation & ) ), this, SLOT( detected( const QgsGPSInformation & ) ) );
connect( mConn, SIGNAL( destroyed( QObject * ) ), this, SLOT( connDestroyed( QObject * ) ) );
Modified: trunk/qgis/src/core/gps/qgsnmeaconnection.h
===================================================================
--- trunk/qgis/src/core/gps/qgsnmeaconnection.h 2010-10-04 20:05:12 UTC (rev 14330)
+++ trunk/qgis/src/core/gps/qgsnmeaconnection.h 2010-10-04 21:37:05 UTC (rev 14331)
@@ -34,7 +34,7 @@
/**Parse available data source content*/
void parseData();
- private:
+ protected:
/**Store data from the device before it is processed*/
QString mStringBuffer;
/**Splits mStringBuffer into sentences and calls libnmea*/
Modified: trunk/qgis/src/ui/qgsgpsinformationwidgetbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsgpsinformationwidgetbase.ui 2010-10-04 20:05:12 UTC (rev 14330)
+++ trunk/qgis/src/ui/qgsgpsinformationwidgetbase.ui 2010-10-04 21:37:05 UTC (rev 14331)
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>273</width>
- <height>331</height>
+ <width>279</width>
+ <height>723</height>
</rect>
</property>
<property name="windowTitle">
@@ -283,8 +283,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>168</width>
- <height>505</height>
+ <width>272</width>
+ <height>684</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_7">
@@ -294,7 +294,7 @@
<item row="0" column="0">
<widget class="QGroupBox" name="mDeviceGroupBox">
<property name="title">
- <string>GPS device port</string>
+ <string>GPS connection</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
@@ -307,31 +307,41 @@
</property>
</widget>
</item>
- <item row="1" column="0">
+ <item row="2" column="0">
<widget class="QRadioButton" name="mRadUserPath">
<property name="text">
<string>Use path / port below</string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="mPathLabel">
<property name="text">
<string>Path to serial device</string>
</property>
+ <property name="buddy">
+ <cstring>mCboDevices</cstring>
+ </property>
</widget>
</item>
</layout>
</item>
- <item row="3" column="0">
+ <item row="4" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
- <widget class="QComboBox" name="mCboDevices"/>
+ <widget class="QComboBox" name="mCboDevices">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
</item>
<item>
<widget class="QToolButton" name="mBtnRefreshDevices">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
<property name="text">
<string>...</string>
</property>
@@ -343,6 +353,74 @@
</item>
</layout>
</item>
+ <item row="6" column="0">
+ <layout class="QGridLayout" name="gridLayout_12">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Port</string>
+ </property>
+ <property name="buddy">
+ <cstring>mGpsdPort</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Host</string>
+ </property>
+ <property name="buddy">
+ <cstring>mGpsdHost</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Device</string>
+ </property>
+ <property name="buddy">
+ <cstring>mGpsdDevice</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="mGpsdDevice">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="mGpsdHost">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="mGpsdPort">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="inputMask">
+ <string>ddddd; </string>
+ </property>
+ <property name="maxLength">
+ <number>5</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="5" column="0">
+ <widget class="QRadioButton" name="mRadGpsd">
+ <property name="text">
+ <string>Connection to gpsd</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
@@ -538,12 +616,12 @@
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>100</x>
- <y>-176</y>
+ <x>114</x>
+ <y>65</y>
</hint>
<hint type="destinationlabel">
- <x>86</x>
- <y>-100</y>
+ <x>101</x>
+ <y>122</y>
</hint>
</hints>
</connection>
@@ -554,12 +632,12 @@
<slot>setDisabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>153</x>
- <y>-176</y>
+ <x>167</x>
+ <y>65</y>
</hint>
<hint type="destinationlabel">
- <x>142</x>
- <y>-65</y>
+ <x>157</x>
+ <y>147</y>
</hint>
</hints>
</connection>
@@ -570,12 +648,12 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>194</x>
- <y>-138</y>
+ <x>208</x>
+ <y>93</y>
</hint>
<hint type="destinationlabel">
- <x>192</x>
- <y>-100</y>
+ <x>207</x>
+ <y>122</y>
</hint>
</hints>
</connection>
@@ -586,14 +664,238 @@
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
- <x>217</x>
- <y>-138</y>
+ <x>231</x>
+ <y>93</y>
</hint>
<hint type="destinationlabel">
- <x>188</x>
- <y>-65</y>
+ <x>203</x>
+ <y>147</y>
</hint>
</hints>
</connection>
+ <connection>
+ <sender>mRadAutodetect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdHost</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>172</x>
+ <y>79</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>253</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadAutodetect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdPort</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>86</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>282</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadAutodetect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdDevice</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>86</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>311</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadUserPath</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdHost</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>60</x>
+ <y>104</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>142</x>
+ <y>253</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadUserPath</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdPort</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>114</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>282</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadUserPath</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdDevice</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>114</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>311</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadUserPath</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mCboDevices</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>114</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>235</x>
+ <y>169</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadUserPath</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mBtnRefreshDevices</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>114</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>168</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadAutodetect</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mBtnRefreshDevices</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>86</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>168</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadGpsd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdHost</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>56</x>
+ <y>190</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>196</x>
+ <y>253</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadGpsd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdPort</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>198</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>282</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadGpsd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mGpsdDevice</receiver>
+ <slot>setEnabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>198</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>311</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadGpsd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mCboDevices</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>198</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>235</x>
+ <y>169</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>mRadGpsd</sender>
+ <signal>toggled(bool)</signal>
+ <receiver>mBtnRefreshDevices</receiver>
+ <slot>setDisabled(bool)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>265</x>
+ <y>198</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>264</x>
+ <y>168</y>
+ </hint>
+ </hints>
+ </connection>
</connections>
</ui>
More information about the QGIS-commit
mailing list