[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 19/37: grc: auto-hide port labels
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 19/37: grc: auto-hide port labels |
Date: |
Thu, 17 Jul 2014 20:23:41 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
trondeau pushed a commit to branch master
in repository gnuradio.
commit 02db08d26e992a0c9c90b382ce9809d39283a910
Author: Sebastian Koslowski <address@hidden>
Date: Fri Jul 4 21:58:26 2014 +0200
grc: auto-hide port labels
---
grc/gui/Element.py | 6 +++++
grc/gui/FlowGraph.py | 73 +++++++++++++++++++++++++++++++++-------------------
grc/gui/Port.py | 47 ++++++++++++++++++++++-----------
3 files changed, 85 insertions(+), 41 deletions(-)
diff --git a/grc/gui/Element.py b/grc/gui/Element.py
index 915bdfb..bca7a03 100644
--- a/grc/gui/Element.py
+++ b/grc/gui/Element.py
@@ -262,3 +262,9 @@ class Element(object):
if rotation not in POSSIBLE_ROTATIONS:
raise Exception('"%s" is not one of the possible rotations:
(%s)'%(rotation, POSSIBLE_ROTATIONS))
self.rotation = rotation
+
+ def mouse_over(self):
+ pass
+
+ def mouse_out(self):
+ pass
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py
index 1103aa1..2fb452f 100644
--- a/grc/gui/FlowGraph.py
+++ b/grc/gui/FlowGraph.py
@@ -51,6 +51,8 @@ class FlowGraph(Element):
#selected ports
self._old_selected_port = None
self._new_selected_port = None
+ # current mouse hover element
+ self.element_under_mouse = None
#context menu
self._context_menu = gtk.Menu()
for action in [
@@ -550,29 +552,48 @@ class FlowGraph(Element):
"""
#to perform a movement, the mouse must be pressed
# (no longer checking pending events via gtk.events_pending() - always
true in Windows)
- if not self.mouse_pressed: return
- #perform autoscrolling
- width, height = self.get_size()
- x, y = coordinate
- h_adj = self.get_scroll_pane().get_hadjustment()
- v_adj = self.get_scroll_pane().get_vadjustment()
- for pos, length, adj, adj_val, adj_len in (
- (x, width, h_adj, h_adj.get_value(), h_adj.page_size),
- (y, height, v_adj, v_adj.get_value(), v_adj.page_size),
- ):
- #scroll if we moved near the border
- if pos-adj_val > adj_len-SCROLL_PROXIMITY_SENSITIVITY and
adj_val+SCROLL_DISTANCE < length-adj_len:
- adj.set_value(adj_val+SCROLL_DISTANCE)
- adj.emit('changed')
- elif pos-adj_val < SCROLL_PROXIMITY_SENSITIVITY:
- adj.set_value(adj_val-SCROLL_DISTANCE)
- adj.emit('changed')
- #remove the connection if selected in drag event
- if len(self.get_selected_elements()) == 1 and
self.get_selected_element().is_connection():
- Actions.ELEMENT_DELETE()
- #move the selected elements and record the new coordinate
- X, Y = self.get_coordinate()
- if not self.get_ctrl_mask(): self.move_selected((int(x - X), int(y -
Y)))
- self.set_coordinate((x, y))
- #queue draw for animation
- self.queue_draw()
+ if not self.mouse_pressed:
+ redraw = False
+ for element in reversed(self.get_elements()):
+ over_element = element.what_is_selected(coordinate)
+ if not over_element: continue
+ if over_element != self.element_under_mouse: # over sth new
+ if self.element_under_mouse:
+ redraw |= self.element_under_mouse.mouse_out() or False
+ self.element_under_mouse = over_element
+ redraw |= over_element.mouse_over() or False
+ break
+ else:
+ if self.element_under_mouse:
+ redraw |= self.element_under_mouse.mouse_out() or False
+ self.element_under_mouse = None
+ if redraw:
+ #self.create_labels()
+ self.create_shapes()
+ self.queue_draw()
+ else:
+ #perform autoscrolling
+ width, height = self.get_size()
+ x, y = coordinate
+ h_adj = self.get_scroll_pane().get_hadjustment()
+ v_adj = self.get_scroll_pane().get_vadjustment()
+ for pos, length, adj, adj_val, adj_len in (
+ (x, width, h_adj, h_adj.get_value(), h_adj.page_size),
+ (y, height, v_adj, v_adj.get_value(), v_adj.page_size),
+ ):
+ #scroll if we moved near the border
+ if pos-adj_val > adj_len-SCROLL_PROXIMITY_SENSITIVITY and
adj_val+SCROLL_DISTANCE < length-adj_len:
+ adj.set_value(adj_val+SCROLL_DISTANCE)
+ adj.emit('changed')
+ elif pos-adj_val < SCROLL_PROXIMITY_SENSITIVITY:
+ adj.set_value(adj_val-SCROLL_DISTANCE)
+ adj.emit('changed')
+ #remove the connection if selected in drag event
+ if len(self.get_selected_elements()) == 1 and
self.get_selected_element().is_connection():
+ Actions.ELEMENT_DELETE()
+ #move the selected elements and record the new coordinate
+ X, Y = self.get_coordinate()
+ if not self.get_ctrl_mask(): self.move_selected((int(x - X), int(y
- Y)))
+ self.set_coordinate((x, y))
+ #queue draw for animation
+ self.queue_draw()
diff --git a/grc/gui/Port.py b/grc/gui/Port.py
index e542797..2b8facf 100644
--- a/grc/gui/Port.py
+++ b/grc/gui/Port.py
@@ -28,6 +28,8 @@ import pygtk
pygtk.require('2.0')
import gtk
+PORT_HIDDEN_MARKUP_TMPL="""\
+<span foreground="black" font_desc="Sans 7.5"> </span>"""
PORT_MARKUP_TMPL="""\
<span foreground="black" font_desc="Sans
7.5">$encode($port.get_name())</span>"""
@@ -40,7 +42,10 @@ class Port(Element):
Create list of connector coordinates.
"""
Element.__init__(self)
- self.connector_coordinates = dict()
+ self.W = self.H = self.w = self.h = 0
+ self._connector_coordinate = (0,0)
+ self._connector_length = 0
+ self._label_hidden = True
def create_shapes(self):
"""Create new areas and labels for the port."""
@@ -52,12 +57,13 @@ class Port(Element):
elif self.is_sink(): ports = self.get_parent().get_sinks_gui()
#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 10
#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
length = len(ports)
#reverse the order of ports for these rotations
@@ -65,27 +71,28 @@ class Port(Element):
offset = (self.get_parent().H - length*self.H -
(length-1)*PORT_SEPARATION)/2
#create areas and connector coordinates
if (self.is_sink() and rotation == 0) or (self.is_source() and
rotation == 180):
- x = -1*self.W
+ x = -1*W
y = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.W, self.H))
+ self.add_area((x, y), (W, self.H))
self._connector_coordinate = (x-1, y+self.H/2)
elif (self.is_source() and rotation == 0) or (self.is_sink() and
rotation == 180):
x = self.get_parent().W
y = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.W, self.H))
- self._connector_coordinate = (x+1+self.W, y+self.H/2)
+ self.add_area((x, y), (W, self.H))
+ self._connector_coordinate = (x+1+W, y+self.H/2)
elif (self.is_source() and rotation == 90) or (self.is_sink() and
rotation == 270):
- y = -1*self.W
+ y = -1*W
x = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.H, self.W))
+ self.add_area((x, y), (self.H, W))
self._connector_coordinate = (x+self.H/2, y-1)
elif (self.is_sink() and rotation == 90) or (self.is_source() and
rotation == 270):
y = self.get_parent().W
x = (PORT_SEPARATION+self.H)*index+offset
- self.add_area((x, y), (self.H, self.W))
- self._connector_coordinate = (x+self.H/2, y+1+self.W)
+ 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
+
def modify_height(self, start_height):
type_dict = {'bus':(lambda a: a * 3)};
@@ -102,8 +109,8 @@ class Port(Element):
layout = gtk.DrawingArea().create_pango_layout('')
layout.set_markup(Utils.parse_template(PORT_MARKUP_TMPL, port=self))
self.w, self.h = layout.get_pixel_size()
- self.W, self.H = 2*PORT_LABEL_PADDING+self.w,
2*PORT_LABEL_PADDING+self.h
- self.H = self.modify_height(self.H);
+ self.W, self.H = 2*PORT_LABEL_PADDING + self.w,
2*PORT_LABEL_PADDING+self.h
+ self.H = self.modify_height(self.H)
#create the pixmap
pixmap = self.get_parent().get_parent().new_pixmap(self.w, self.h)
gc = pixmap.new_gc()
@@ -129,6 +136,8 @@ class Port(Element):
border_color=self.is_highlighted() and Colors.HIGHLIGHT_COLOR or
self.get_parent().is_dummy_block() and
Colors.MISSING_BLOCK_BORDER_COLOR or Colors.BORDER_COLOR,
)
+ if self._label_hidden:
+ return
X,Y = self.get_coordinate()
(x,y),(w,h) = self._areas_list[0] #use the first area's sizes to place
the labels
if self.is_horizontal():
@@ -143,9 +152,9 @@ class Port(Element):
Returns:
the connector coordinate (x, y) tuple
"""
- x,y = self._connector_coordinate
- X,Y = self.get_coordinate()
- return (x+X, y+Y)
+ x, y = self._connector_coordinate
+ X, Y = self.get_coordinate()
+ return (x + X, y + Y)
def get_connector_direction(self):
"""
@@ -222,3 +231,11 @@ class Port(Element):
the parent's highlighting status
"""
return self.get_parent().is_highlighted()
+
+ def mouse_over(self):
+ self._label_hidden = False
+ return True
+
+ def mouse_out(self):
+ self._label_hidden = True
+ return True
\ No newline at end of file
- [Commit-gnuradio] [gnuradio] 23/37: qtgui: time raster display updates., (continued)
- [Commit-gnuradio] [gnuradio] 23/37: qtgui: time raster display updates., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 11/37: build: missed gnuradio-uhd in static libs build., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 15/37: grc: fixing some spacing issues in various xml files., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 13/37: Merge remote-tracking branch 'gnuradio-wg-grc/grc_hide_ports', git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 18/37: Merge branch 'maint', git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 24/37: qtgui: fixes waterfall plots., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 25/37: qtgui: adding menu item to frequency sink to set y min/max., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 14/37: grc: fixing xml files of some blocks with message control ports to be able to hide/show them as wanted., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 21/37: qtgui: updates number sink behavor., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 20/37: grc: toogle action to disable auto-hiding port labels, git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 19/37: grc: auto-hide port labels,
git <=
- [Commit-gnuradio] [gnuradio] 34/37: Merge remote-tracking branch 'mbant/uhd/msg_format' into qt_the_things, git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 30/37: qtgui: minor fix to how number sink handles autoscale., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 37/37: Merge branch 'qt_the_things', git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 29/37: Merge remote-tracking branch 'mbant/qtify-examples', git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 28/37: qtgui: adding a formatter to qtgui label widget to behave like formatter in the wxgui static text widget., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 32/37: zeromq: updated zeromq examples to use qtgui., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 35/37: fec: updated fecapi blocks in grc to use new var_value concept., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 36/37: Merge branch 'maint', git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 31/37: examples: minor tweaks to some examples., git, 2014/07/17
- [Commit-gnuradio] [gnuradio] 33/37: fcd: updating FCD examples to use qtgui., git, 2014/07/17