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