summaryrefslogtreecommitdiff
path: root/grc/gui/Port.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/gui/Port.py')
-rw-r--r--grc/gui/Port.py65
1 files changed, 34 insertions, 31 deletions
diff --git a/grc/gui/Port.py b/grc/gui/Port.py
index 8c4500f960..62086c76e4 100644
--- a/grc/gui/Port.py
+++ b/grc/gui/Port.py
@@ -23,15 +23,10 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, PangoCairo
-from . import Actions, Colors, Utils
-from .Constants import (
- PORT_SEPARATION, PORT_SPACING, CONNECTOR_EXTENSION_MINIMAL,
- CONNECTOR_EXTENSION_INCREMENT, PORT_LABEL_PADDING, PORT_MIN_WIDTH,
- PORT_LABEL_HIDDEN_WIDTH, PORT_FONT
-)
+from . import Actions, Colors, Utils, Constants
from .Element import Element
-from ..core.Constants import DEFAULT_DOMAIN, GR_MESSAGE_DOMAIN
+from ..core.Constants import DEFAULT_DOMAIN, GR_MESSAGE_DOMAIN
from ..core.Port import Port as _Port
@@ -45,24 +40,42 @@ class Port(_Port, Element):
"""
_Port.__init__(self, block, n, dir)
Element.__init__(self)
- self.W = self.w = self.h = 0
- self.H = 20 # todo: fix
self._connector_coordinate = (0, 0)
- self._connector_length = 0
self._hovering = True
self._force_label_unhidden = False
+ self._bg_color = (0, 0, 0)
+
+ self.W = self.w = self.h = 0
+ self.H = 20 # todo: fix
+ self.connector_length = 0
+
self.layout = Gtk.DrawingArea().create_pango_layout('')
- self._bg_color = Colors.get_color(self.get_color())
+
+ def _get_color(self):
+ """
+ Get the color that represents this port's type.
+ Codes differ for ports where the vec length is 1 or greater than 1.
+
+ Returns:
+ a hex color code.
+ """
+ color = Colors.PORT_TYPE_TO_COLOR[self.get_type()]
+ vlen = self.get_vlen()
+ if vlen > 1:
+ dark = (0, 0, 30 / 255.0, 50 / 255.0, 70 / 255.0)[min(4, vlen)]
+ color = tuple(max(c - dark, 0) for c in color)
+ return color
def create_shapes(self):
"""Create new areas and labels for the port."""
Element.create_shapes(self)
- self._bg_color = Colors.get_color(self.get_color())
+ self._bg_color = self._get_color()
+
if self.get_hide():
return # this port is hidden, no need to create shapes
- if self.get_domain() == GR_MESSAGE_DOMAIN:
+ if self.get_domain() == Constants.GR_MESSAGE_DOMAIN:
pass
- elif self.get_domain() != DEFAULT_DOMAIN:
+ elif self.get_domain() != Constants.DEFAULT_DOMAIN:
self.line_attributes[0] = 2
#get current rotation
rotation = self.get_rotation()
@@ -71,22 +84,22 @@ class Port(_Port, Element):
if self.is_source else self.parent.get_sinks_gui()
ports = [p for p in ports if not p.get_hide()]
#get the max width
- self.W = max([port.W for port in ports] + [PORT_MIN_WIDTH])
- W = self.W if not self._label_hidden() else PORT_LABEL_HIDDEN_WIDTH
+ self.W = max([port.W for port in ports] + [Constants.PORT_MIN_WIDTH])
+ W = self.W if not self._label_hidden() else Constants.PORT_LABEL_HIDDEN_WIDTH
#get a numeric index for this port relative to its sibling ports
try:
index = ports.index(self)
except:
if hasattr(self, '_connector_length'):
- del self._connector_length
+ del self.connector_length
return
#reverse the order of ports for these rotations
if rotation in (180, 270):
index = len(ports)-index-1
- port_separation = PORT_SEPARATION \
+ port_separation = Constants.PORT_SEPARATION \
if not self.parent.has_busses[self.is_source] \
- else max([port.H for port in ports]) + PORT_SPACING
+ else max([port.H for port in ports]) + Constants.PORT_SPACING
offset = (self.parent.H - (len(ports)-1)*port_separation - self.H)/2
#create areas and connector coordinates
@@ -111,12 +124,12 @@ class Port(_Port, Element):
self.add_area((x, y), (self.H, W))
self._connector_coordinate = (x+self.H/2, y+1+W)
#the connector length
- self._connector_length = CONNECTOR_EXTENSION_MINIMAL + CONNECTOR_EXTENSION_INCREMENT*index
+ self.connector_length = Constants.CONNECTOR_EXTENSION_MINIMAL + Constants.CONNECTOR_EXTENSION_INCREMENT * index
def create_labels(self):
"""Create the labels for the socket."""
self.layout.set_markup("""<span foreground="black" font_desc="{font}">{name}</span>""".format(
- name=Utils.encode(self.get_name()), font=PORT_FONT
+ name=Utils.encode(self.get_name()), font=Constants.PORT_FONT
))
def draw(self, widget, cr):
@@ -169,16 +182,6 @@ class Port(_Port, Element):
if self.is_source: return self.get_rotation()
elif self.is_sink: return (self.get_rotation() + 180)%360
- def get_connector_length(self):
- """
- Get the length of the connector.
- The connector length increases as the port index changes.
-
- Returns:
- the length in pixels
- """
- return self._connector_length
-
def get_rotation(self):
"""
Get the parent's rotation rather than self.