Skip to content

Commit

Permalink
Add support for Add and Edit
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrew McClure committed Jun 16, 2015
1 parent d59b3f5 commit b2661b7
Show file tree
Hide file tree
Showing 19 changed files with 286 additions and 446 deletions.
12 changes: 8 additions & 4 deletions forms/ui_tladdfeature.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

# Form implementation generated from reading ui file 'forms/ui_tladdfeature.ui'
#
# Created: Fri Jun 5 17:24:26 2015
# Created: Tue Jun 16 22:13:35 2015
# by: PyQt4 UI code generator 4.10.4
#
# WARNING! All changes made in this file will be lost!
Expand Down Expand Up @@ -37,7 +37,7 @@ def setupUi(self, tlAddFeature):
self.setTopicLabel.setGeometry(QtCore.QRect(30, 40, 41, 16))
self.setTopicLabel.setObjectName(_fromUtf8("setTopicLabel"))
self.buttonAdd = QtGui.QPushButton(tlAddFeature)
self.buttonAdd.setGeometry(QtCore.QRect(170, 160, 101, 32))
self.buttonAdd.setGeometry(QtCore.QRect(170, 140, 91, 32))
self.buttonAdd.setObjectName(_fromUtf8("buttonAdd"))
self.selectQoS = QtGui.QComboBox(tlAddFeature)
self.selectQoS.setGeometry(QtCore.QRect(70, 96, 104, 26))
Expand All @@ -49,7 +49,7 @@ def setupUi(self, tlAddFeature):
self.selectQoSLabel.setGeometry(QtCore.QRect(30, 100, 51, 20))
self.selectQoSLabel.setObjectName(_fromUtf8("selectQoSLabel"))
self.chkBoxVisible = QtGui.QCheckBox(tlAddFeature)
self.chkBoxVisible.setGeometry(QtCore.QRect(190, 100, 85, 18))
self.chkBoxVisible.setGeometry(QtCore.QRect(180, 100, 85, 18))
self.chkBoxVisible.setChecked(True)
self.chkBoxVisible.setObjectName(_fromUtf8("chkBoxVisible"))
self.setTopic = QtGui.QLineEdit(tlAddFeature)
Expand All @@ -61,6 +61,9 @@ def setupUi(self, tlAddFeature):
self.setNameLabel = QtGui.QLabel(tlAddFeature)
self.setNameLabel.setGeometry(QtCore.QRect(30, 70, 41, 16))
self.setNameLabel.setObjectName(_fromUtf8("setNameLabel"))
self.buttonAddEdit = QtGui.QPushButton(tlAddFeature)
self.buttonAddEdit.setGeometry(QtCore.QRect(60, 140, 111, 32))
self.buttonAddEdit.setObjectName(_fromUtf8("buttonAddEdit"))

self.retranslateUi(tlAddFeature)
QtCore.QMetaObject.connectSlotsByName(tlAddFeature)
Expand All @@ -69,7 +72,7 @@ def retranslateUi(self, tlAddFeature):
tlAddFeature.setWindowTitle(_translate("tlAddFeature", "Add Feature", None))
self.setTopicLabel.setToolTip(_translate("tlAddFeature", "<html><head/><body><p>Enter the MQTT Topic pattern - see http://mosquitto.org/man/mqtt-7.html</p></body></html>", None))
self.setTopicLabel.setText(_translate("tlAddFeature", "Topic", None))
self.buttonAdd.setText(_translate("tlAddFeature", "Add Feature", None))
self.buttonAdd.setText(_translate("tlAddFeature", "Add Topic", None))
self.selectQoS.setToolTip(_translate("tlAddFeature", "<html><head/><body><p>Granted QoS (Not implemented by Mosquitto Library yet)</p></body></html>", None))
self.selectQoS.setItemText(0, _translate("tlAddFeature", "QoS0", None))
self.selectQoS.setItemText(1, _translate("tlAddFeature", "QoS1", None))
Expand All @@ -82,4 +85,5 @@ def retranslateUi(self, tlAddFeature):
self.setName.setToolTip(_translate("tlAddFeature", "<html><head/><body><p>Enter the MQTT Topic pattern - see http://mosquitto.org/man/mqtt-7.html</p></body></html>", None))
self.setNameLabel.setToolTip(_translate("tlAddFeature", "<html><head/><body><p>Enter the MQTT Topic pattern - see http://mosquitto.org/man/mqtt-7.html</p></body></html>", None))
self.setNameLabel.setText(_translate("tlAddFeature", "Name", None))
self.buttonAddEdit.setText(_translate("tlAddFeature", "Add and Edit", None))

21 changes: 17 additions & 4 deletions forms/ui_tladdfeature.ui
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@
<property name="geometry">
<rect>
<x>170</x>
<y>160</y>
<width>101</width>
<y>140</y>
<width>91</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string>Add Feature</string>
<string>Add Topic</string>
</property>
</widget>
<widget class="QComboBox" name="selectQoS">
Expand Down Expand Up @@ -101,7 +101,7 @@
<widget class="QCheckBox" name="chkBoxVisible">
<property name="geometry">
<rect>
<x>190</x>
<x>180</x>
<y>100</y>
<width>85</width>
<height>18</height>
Expand Down Expand Up @@ -159,6 +159,19 @@
<string>Name</string>
</property>
</widget>
<widget class="QPushButton" name="buttonAddEdit">
<property name="geometry">
<rect>
<x>60</x>
<y>140</y>
<width>111</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string>Add and Edit</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
Expand Down
6 changes: 6 additions & 0 deletions sampleplugin/sampleplugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@ def featureUpdated(self,tlayer,feat):
# do what you need here. Draw it yourself if required!
super(MyFeatureDock,self).featureUpdated(tlayer,feat)
Log.debug("MyFeatureDock - featureUpdated: " + str(feat['payload']))
layer = tlayer.layer()
fieldId = layer.dataProvider().fieldNameIndex("context")
layer.startEditing()
layer.changeAttributeValue(feat.id(), fieldId, "fubar")
layer.commitChanges()

except Exception as e:
Log.debug("Error on MyFeatureDock - featureUpdated: " + str(e))
pass
Expand Down
9 changes: 9 additions & 0 deletions telemetrylayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,15 @@ def show(self, broker=None):
broker = Brokers.instance().find(broker.id()) # reload from file
self._updateBroker(broker, True)

def showEditFeature(self,layer,fid):
layer = QgsMapLayerRegistry.instance().mapLayer(layer.id())
layer.commitChanges()
layer.startEditing()
feature = next(layer.getFeatures(QgsFeatureRequest(fid)), None)
if feature:
self.iface.openFeatureForm(layer, feature, True,False)
#self.triggerRepaint()


def hide(self):
if self.dockWidget.isVisible():
Expand Down
38 changes: 23 additions & 15 deletions telemetrylayermanager.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ class layerManager(QObject):
_this = None
_rebuildingLegend = False


@staticmethod
def getLayers():
layers = []
Expand Down Expand Up @@ -251,7 +250,7 @@ def readMapLayer(self,layer,dom):

def rebuildLegend(self):

if layerManager._rebuildingLegend:
if layerManager._rebuildingLegend :
return

layerManager._rebuildingLegend = True
Expand Down Expand Up @@ -428,18 +427,18 @@ def delTLayer(self, lid):
except:
pass

def initLayer(self, layer, broker=None, topicType=None):
def initLayer(self, layer, broker=None, topicManager=None):

tLayer = None
if broker is not None and topicType is not None:
if broker is not None and topicManager is not None:

QgsMapLayerRegistry.instance().addMapLayer(layer) # API >= 1.9
lid = layer.id()

tLayer = TLayer(self,
QgsMapLayerRegistry.instance().mapLayer(lid),
broker,
topicType)
topicManager)

if tLayer is None:
Log.debug("Unable to create Telemetry Layer")
Expand Down Expand Up @@ -601,6 +600,7 @@ def featureAdded(self, fid):
# Log.debug("feature Added" + str(fid))
request = QgsFeatureRequest(fid)
layer = self._iface.activeLayer()
tLayer = self.getTLayer(layer.id())
feature = next(layer.getFeatures(request), None)
try:
featureExists = feature and feature['topic']
Expand All @@ -613,22 +613,30 @@ def featureAdded(self, fid):
#if fid >0:
# return

layer = self._iface.activeLayer()
if layer is None:
return
tLayer = self.getTLayer(layer.id())

if featureExists:
Log.debug("feature Exists")
tLayer.applyFeature(feature)
return

if tLayer is None:
Log.debug("Error Loading tLayer")
return
result = tLayer.addFeature(fid)
feat = tLayer.addFeature(fid)
Log.debug("Adding Feature")
if result is not None:
tLayer.restart()

if feat is not None:
feature = next(layer.getFeatures(QgsFeatureRequest(tLayer._lastFid)), None)
if not feature:
return
if tLayer.isRunning():
tLayer.subscribe(feature['topic'],feature['qos'])
if tLayer._deferredEdit:
tLayer._deferredEdit = False
self._deferredTimer = QTimer()
self._deferredTimer.setSingleShot(True)
self._deferredTimer.timeout.connect(lambda:telemetryLayer.instance().showEditFeature(tLayer.layer(),tLayer._lastFid))
self._deferredTimer.start()


def featureDeleted(self, fid):
Expand All @@ -655,7 +663,7 @@ def currentLayerChanged(self):


def tearDownTLayers(self):

Log.debug("Tear down layers")
for lid, tLayer in self.getTLayers(False).iteritems():
QApplication.instance().focusChanged.disconnect(tLayer.focusChange)
# if 0:
Expand Down Expand Up @@ -698,9 +706,10 @@ def tearDownDocks(self,layerId = None):

def tearDown(self):

self._iface.mapCanvas().renderStarting.disconnect(self.renderStarting)
self.tearDownTLayers()
self.tearDownDocks()
self._iface.legendInterface().groupRelationsChanged.disconnect(self.legendRelationsChanged)
self.tearDownTLayers()
if 0:
self._iface.legendInterface().removeLegendLayerAction(self.actions['config'])
self._iface.legendInterface().removeLegendLayerAction(self.actions['pause'])
Expand All @@ -713,7 +722,6 @@ def tearDown(self):

self._iface.legendInterface().currentLayerChanged.disconnect(
self.currentLayerChanged) # change to when layer is loaded also!
self._iface.mapCanvas().renderStarting.disconnect(self.renderStarting)


def __del__(self):
Expand Down
3 changes: 1 addition & 2 deletions telemetrylayerplugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,11 +185,9 @@ def unload(self):
self.iface.projectRead.disconnect(self.layerManager.rebuildLegend)
self.iface.newProjectCreated.disconnect(self.layerManager.rebuildLegend)

TopicManagerFactory.unregisterAll()
#Brokers.instance().brokersLoaded.disconnect(self.layerManager.brokersLoaded)
except Exception as e:
Log.debug(e)
TopicManagerFactory.unregisterAll()
pass
finally:
if self.layerManager:
Expand All @@ -198,6 +196,7 @@ def unload(self):
self.telemetryLayer.deleteLater()
if Brokers:
Brokers.instance().deleteLater()
TopicManagerFactory.tearDown()
gc.collect()
Log.debug("Plugin unloaded")

Expand Down
11 changes: 9 additions & 2 deletions tladdfeature.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def __init__(self, topicManager):
super(tlAddFeature, self).__init__()
self._topicManager = topicManager
self._nameChanged = False

self._edit = False
self.setupUi()
pass

Expand All @@ -52,7 +52,9 @@ def setupUi(self):
self.setName.setValidator(QRegExpValidator(QRegExp("^[\ \$a-zA-Z0-9\-\_\/\-\#\+]+"), self))
self.setName.textEdited.connect(self._setNameChanged)

self.buttonAddEdit.clicked.connect(lambda:self._validateApply(True))
self.buttonAdd.clicked.connect(self._validateApply)
self.buttonAddEdit.setEnabled(False)
self.buttonAdd.setEnabled(False)
self.setTopic.setFocus()

Expand All @@ -69,15 +71,20 @@ def getTopic(self):
self.setName.setText(self.setTopic.text())
return {'topic':self.setTopic.text(),'name':self.setName.text()}

def getEdit(self):
return self._edit

def _setNameChanged(self,txt):
self._nameChanged = len(txt) >0

def _topicChanged(self, txt):
self.buttonAdd.setEnabled(len(txt) >0)
self.buttonAddEdit.setEnabled(len(txt) >0)
if len(txt) >0 and not self._nameChanged:
self.setName.setText(txt.replace("/"," "))

def _validateApply(self):
def _validateApply(self,edit=False):
self._edit = edit
self.accept()


Expand Down
Loading

0 comments on commit b2661b7

Please sign in to comment.