Beispiel #1
0
class DBusAdaptor(QDBusAbstractAdaptor):
    Q_CLASSINFO("D-Bus Interface", "com.troshchinskiy.Heimdall")
    Q_CLASSINFO(
        "D-Bus Introspection",
        '<interface name="com.troshchinskiy.Heimdall">\n'
        '    <property name="Version" type="s" access="read"/>\n'
        '    <method name="Connect"/>\n'
        '    <method name="Disconnect"/>\n'
        '    <method name="Reset"/>\n'
        '    <method name="ContextualAction">\n'
        '        <arg direction="in" type="a{ss}" name="environment"/>\n'
        '        <arg direction="in" type="s" name="path"/>\n'
        '        <arg direction="in" type="s" name="command"/>\n'
        '    </method>\n'
        '    <method name="echo">\n'
        '        <arg direction="in" type="s" name="text"/>\n'
        '        <arg direction="out" type="s" name="return"/>\n'
        '    </method>\n'
        '</interface>\n')

    def __init__(self, parent):
        super().__init__(parent)

    @pyqtSlot(str, result=str, name="echo")
    def echo(self, text):
        print("Echo called!")
        return self.parent().echo(text)

    @pyqtProperty(str)
    def Version(self):
        print("Version called!")
        return self.parent().version()

    @pyqtSlot(name="Connect")
    def Connect(self):
        print("Connect called!")
        self.parent().start_tunnel()

    @pyqtSlot(name="Disconnect")
    def Disconnect(self):
        print("Disconnect called!")
        self.parent().stop_tunnel()

    @pyqtSlot('QVariantMap', str, str)
    def ContextualAction(self, environment, path, command):
        print("ContextualAction called!")
        self.parent().contextual_action(environment, path, command)

    @pyqtSlot(name="Reset")
    def Reset(self):
        print("Reset called!")
        self.parent().stop_tunnel()
        self.parent().start_tunnel()
Beispiel #2
0
class Ros(QQuickItem, QQmlParserStatus):
    Q_CLASSINFO('DefaultProperty', 'objects')

    def __init__(self, parent=None):
        super(Ros, self).__init__(parent)

        self._publishers = []
        self._subscribers = []

    @pyqtProperty(QQmlListProperty)
    def objects(self):
        return QQmlListProperty(QQuickItem, self, append=self.append_object)

    @pyqtProperty(bool)
    def isInitialized(self):
        return rospy.core.is_initialized()

    def append_object(self, node, object):
        if isinstance(object, Subscriber):
            self._subscribers.append(object)
        elif isinstance(object, Publisher):
            self._publishers.append(object)

    def componentComplete(self):
        for s in self._subscribers:
            s.subscribe()
            rospy.logdebug('Subscribed to: ' + s.topic.name)

        for p in self._publishers:
            rospy.logdebug('Will publish to: ' + p.topic.name)

        if not rospy.core.is_initialized():
            rospy.init_node("ros_qml", disable_signals=True)

    @pyqtSlot(name='now', result='QVariantMap')
    def now(self):
        now = rospy.Time.now()
        return {'secs': now.secs, 'nsecs': now.nsecs}

    @pyqtSlot(str, name='logdebug')
    def logdebug(self, s):
        rospy.logdebug(s)

    @pyqtSlot(str, name='loginfo')
    def loginfo(self, s):
        rospy.loginfo(s)

    @pyqtSlot(str, name='logwarn')
    def logwarn(self, s):
        rospy.logwarn(s)

    @pyqtSlot(str, name='logerr')
    def logerr(self, s):
        rospy.logerr(s)

    @pyqtSlot(str, name='logfatal')
    def logfatal(self, s):
        rospy.logfatal(s)