summaryrefslogtreecommitdiff
path: root/grc/gui/Connection.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/gui/Connection.py')
-rw-r--r--grc/gui/Connection.py78
1 files changed, 40 insertions, 38 deletions
diff --git a/grc/gui/Connection.py b/grc/gui/Connection.py
index 50361c19d0..d893060aa6 100644
--- a/grc/gui/Connection.py
+++ b/grc/gui/Connection.py
@@ -17,14 +17,15 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
-import gtk
+from __future__ import absolute_import
-import Colors
-import Utils
-from Constants import CONNECTOR_ARROW_BASE, CONNECTOR_ARROW_HEIGHT
-from Element import Element
+from six.moves import map
+
+from . import Colors
+from . import Utils
+from .Constants import CONNECTOR_ARROW_BASE, CONNECTOR_ARROW_HEIGHT
+from .Element import Element
-from ..core.Constants import GR_MESSAGE_DOMAIN
from ..core.Connection import Connection as _Connection
@@ -73,27 +74,31 @@ class Connection(Element, _Connection):
self._source_coor = None
#get the source coordinate
try:
- connector_length = self.get_source().get_connector_length()
+ connector_length = self.source_port.get_connector_length()
except:
return
- self.x1, self.y1 = Utils.get_rotated_coordinate((connector_length, 0), self.get_source().get_rotation())
+ self.x1, self.y1 = Utils.get_rotated_coordinate((connector_length, 0), self.source_port.get_rotation())
#get the sink coordinate
- connector_length = self.get_sink().get_connector_length() + CONNECTOR_ARROW_HEIGHT
- self.x2, self.y2 = Utils.get_rotated_coordinate((-connector_length, 0), self.get_sink().get_rotation())
+ connector_length = self.sink_port.get_connector_length() + CONNECTOR_ARROW_HEIGHT
+ self.x2, self.y2 = Utils.get_rotated_coordinate((-connector_length, 0), self.sink_port.get_rotation())
#build the arrow
self.arrow = [(0, 0),
- Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, -CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()),
- Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()),
+ Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, -CONNECTOR_ARROW_BASE/2), self.sink_port.get_rotation()),
+ Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, CONNECTOR_ARROW_BASE/2), self.sink_port.get_rotation()),
]
- source_domain = self.get_source().get_domain()
- sink_domain = self.get_sink().get_domain()
- self.line_attributes[0] = 2 if source_domain != sink_domain else 0
- self.line_attributes[1] = gtk.gdk.LINE_DOUBLE_DASH \
- if not source_domain == sink_domain == GR_MESSAGE_DOMAIN \
- else gtk.gdk.LINE_ON_OFF_DASH
- get_domain_color = lambda d: Colors.get_color((
- self.get_parent().get_parent().domains.get(d, {})
- ).get('color') or Colors.DEFAULT_DOMAIN_COLOR_CODE)
+ source_domain = self.source_port.get_domain()
+ sink_domain = self.sink_port.get_domain()
+ # self.line_attributes[0] = 2 if source_domain != sink_domain else 0
+ # self.line_attributes[1] = Gdk.LINE_DOUBLE_DASH \
+ # if not source_domain == sink_domain == GR_MESSAGE_DOMAIN \
+ # else Gdk.LINE_ON_OFF_DASH
+
+ def get_domain_color(domain_name):
+ domain = self.parent_platform.domains.get(domain_name, {})
+ color_spec = domain.get('color')
+ return Colors.get_color(color_spec) if color_spec else \
+ Colors.DEFAULT_DOMAIN_COLOR
+
self._color = get_domain_color(source_domain)
self._bg_color = get_domain_color(sink_domain)
self._arrow_color = self._bg_color if self.is_valid() else Colors.CONNECTION_ERROR_COLOR
@@ -103,12 +108,12 @@ class Connection(Element, _Connection):
"""Calculate coordinates."""
self.clear() #FIXME do i want this here?
#source connector
- source = self.get_source()
+ source = self.source_port
X, Y = source.get_connector_coordinate()
x1, y1 = self.x1 + X, self.y1 + Y
self.add_line((x1, y1), (X, Y))
#sink connector
- sink = self.get_sink()
+ sink = self.sink_port
X, Y = sink.get_connector_coordinate()
x2, y2 = self.x2 + X, self.y2 + Y
self.add_line((x2, y2), (X, Y))
@@ -126,7 +131,7 @@ class Connection(Element, _Connection):
#points[0][0] -> source connector should not be in the direction of source
if Utils.get_angle_from_coordinates(points[0][0], (x1, y1)) == source.get_connector_direction(): points.reverse()
#create 3-line connector
- p1, p2 = map(int, points[0][0]), map(int, points[0][1])
+ p1, p2 = list(map(int, points[0][0])), list(map(int, points[0][1]))
self.add_line((x1, y1), p1)
self.add_line(p1, p2)
self.add_line((x2, y2), p2)
@@ -143,16 +148,12 @@ class Connection(Element, _Connection):
self.add_line((x1, y1), points[0])
self.add_line((x2, y2), points[0])
- def draw(self, gc, window):
+ def draw(self, widget, cr):
"""
Draw the connection.
-
- Args:
- gc: the graphics context
- window: the gtk window to draw on
"""
- sink = self.get_sink()
- source = self.get_source()
+ sink = self.sink_port
+ source = self.source_port
#check for changes
if self._sink_rot != sink.get_rotation() or self._source_rot != source.get_rotation(): self.create_shapes()
elif self._sink_coor != sink.get_coordinate() or self._source_coor != source.get_coordinate():
@@ -171,11 +172,12 @@ class Connection(Element, _Connection):
Colors.CONNECTION_DISABLED_COLOR if not self.get_enabled() else
color
)
- Element.draw(self, gc, window, mod_color(self._color), mod_color(self._bg_color))
+ Element.draw(self, widget, cr, mod_color(self._color), mod_color(self._bg_color))
# draw arrow on sink port
- try:
- gc.set_foreground(mod_color(self._arrow_color))
- gc.set_line_attributes(0, gtk.gdk.LINE_SOLID, gtk.gdk.CAP_BUTT, gtk.gdk.JOIN_MITER)
- window.draw_polygon(gc, True, self._arrow)
- except:
- pass
+ cr.set_source_rgb(*self._arrow_color)
+ # TODO: gc.set_line_attributes(0, Gdk.LINE_SOLID, Gdk.CAP_BUTT, Gdk.JOIN_MITER)
+ cr.move_to(*self._arrow[0])
+ cr.line_to(*self._arrow[1])
+ cr.line_to(*self._arrow[2])
+ cr.close_path()
+ cr.fill()