1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3# 4# Copyright 2017, Data61 5# Commonwealth Scientific and Industrial Research Organisation (CSIRO) 6# ABN 41 687 119 230. 7# 8# This software may be distributed and modified according to the terms of 9# the BSD 2-Clause license. Note that NO WARRANTY is provided. 10# See "LICENSE_BSD2.txt" for details. 11# 12# @TAG(DATA61_BSD) 13 14from PyQt5 import QtWidgets 15 16import Instance_Widget 17from Interface.Property import PropertyInterface 18import Connection_Widget 19 20class InstancePropertyWidget(QtWidgets.QGroupBox): 21 """ 22 ConnectionPropertyWidget - shows the properties of a connection. 23 """ 24 25 # Connection Widget that this widget represent 26 @property 27 def instance_widget(self): 28 assert self._instance_widget is not None 29 return self._instance_widget 30 31 @instance_widget.setter 32 def instance_widget(self, value): 33 assert isinstance(value, Instance_Widget.InstanceWidget) 34 self._instance_widget = value 35 36 # views 37 38 @property 39 def name_widget(self): 40 if self._name_widget is None: 41 self._name_widget = QtWidgets.QLabel(self.instance_widget.name) 42 return self._name_widget 43 44 @property 45 def type_widget(self): 46 # When this becomes editable 47 # This will be not a label, but a drop down menu 48 if self._type_widget is None: 49 self._type_widget = QtWidgets.QLabel(self.instance_widget.component_type) 50 return self._type_widget 51 52 @property 53 def hardware_widget(self): 54 if self._hardware_widget is None and self.instance_widget.hardware: 55 self._hardware_widget = QtWidgets.QLabel("Hardware") 56 return self._hardware_widget 57 58 @property 59 def control_widget(self): 60 if self._control_widget is None and self.instance_widget.control: 61 self._control_widget = QtWidgets.QLabel("Control") 62 return self._control_widget 63 64 # --- INITIALISATION --- 65 66 def __init__(self, instance_widget): 67 self._instance_widget = None 68 self._name_widget = None 69 self._type_widget = None 70 self._hardware_widget = None 71 self._control_widget = None 72 73 self.instance_widget = instance_widget 74 75 super(InstancePropertyWidget, self).__init__() 76 77 grid_layout = QtWidgets.QGridLayout() 78 79 row = 0 80 # Following must be done after setting instance widget 81 # Name 82 grid_layout.addWidget(QtWidgets.QLabel("Name: "), row, 0) 83 grid_layout.addWidget(self.name_widget, row, 1) 84 row = row + 1 85 86 # Type 87 grid_layout.addWidget(QtWidgets.QLabel("Type: "), row, 0) 88 grid_layout.addWidget(self.type_widget, row, 1) 89 row = row + 1 90 91 # Hardware 92 if self.hardware_widget: 93 grid_layout.addWidget(self.hardware_widget, row, 0, 1, -1) 94 row = row + 1 95 96 # Control 97 if self.control_widget: 98 grid_layout.addWidget(self.control_widget, row, 0, 1, -1) 99 row = row + 1 100 101 # Separator 102 separator = QtWidgets.QFrame() 103 separator.setFrameStyle(QtWidgets.QFrame.HLine | QtWidgets.QFrame.Plain) 104 grid_layout.addWidget(separator, row, 0, 1, -1) 105 row = row + 1 106 107 # List all connection 108 grid_layout.addWidget(QtWidgets.QLabel("Connections"), row, 0, 1, -1) 109 row = row + 1 110 111 for provide_dict in self.instance_widget.provides: 112 grid_layout.addWidget(QtWidgets.QLabel("Procedure"), row, 0) 113 grid_layout.addWidget(QtWidgets.QLabel("%s : %s" % (provide_dict["Interface_type"], provide_dict["Name"]) ), row, 1) 114 row = row + 1 115 116 for use_dict in self.instance_widget.uses: 117 grid_layout.addWidget(QtWidgets.QLabel("Procedure"), row, 0) 118 grid_layout.addWidget(QtWidgets.QLabel("%s : %s" % (use_dict["Interface_type"], use_dict["Name"]) ), row, 1) 119 row = row + 1 120 121 for emit_dict in self.instance_widget.emits: 122 grid_layout.addWidget(QtWidgets.QLabel("Event"), row, 0) 123 grid_layout.addWidget(QtWidgets.QLabel("%s : %s" % (emit_dict["Interface_type"], emit_dict["Name"]) ), row, 1) 124 row = row + 1 125 126 for consume_dict in self.instance_widget.consumes: 127 grid_layout.addWidget(QtWidgets.QLabel("Event"), row, 0) 128 grid_layout.addWidget(QtWidgets.QLabel("%s : %s" % (consume_dict["Interface_type"], consume_dict["Name"]) ), row, 1) 129 row = row + 1 130 131 for dataport_dict in self.instance_widget.dataport: 132 grid_layout.addWidget(QtWidgets.QLabel("Dataport"), row, 0) 133 grid_layout.addWidget(QtWidgets.QLabel("%s : %s" % (dataport_dict["Interface_type"], dataport_dict["Name"]) ), row, 1) 134 row = row + 1 135 136 self.setLayout(grid_layout) 137