From 3c0d124041de25bc47b52b07440dee4901cbcd40 Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke <grumbel@gmx.de> Date: Tue, 29 Apr 2008 16:20:07 +0200 Subject: [PATCH] Some work on making controls drag&dropable --- gui/inputcfg.py | 67 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 55 insertions(+), 12 deletions(-) diff --git a/gui/inputcfg.py b/gui/inputcfg.py index 29eb333..3e621d7 100755 --- a/gui/inputcfg.py +++ b/gui/inputcfg.py @@ -12,13 +12,21 @@ class Port: self.control = control self.name = name self.isInPort = isInPort - self.ellipse = goocanvas.Ellipse(parent=control.get_port_parent(), - center_y=40, + self.group = goocanvas.Group(parent=control.get_port_parent()) + + self.rect = goocanvas.Rect(parent=self.group, + width=60, + height=18, + radius_x=5, radius_y=5, + line_width=1, + fill_color="darkgrey") + + self.ellipse = goocanvas.Ellipse(parent=self.group, radius_x=5, radius_y=5, stroke_color="black", line_width=1) - self.text = goocanvas.Text(parent=control.get_port_parent(), + self.text = goocanvas.Text(parent=self.group, antialias=cairo.ANTIALIAS_SUBPIXEL, text=name, font="sans 9", @@ -34,17 +42,24 @@ class Port: self.text.set_properties(anchor=gtk.ANCHOR_EAST, alignment=pango.ALIGN_RIGHT) - self.ellipse.connect("enter-notify-event", self.on_enter) - self.ellipse.connect("leave-notify-event", self.on_leave) + self.group.connect("button-press-event", self.on_button_press) + self.group.connect("enter-notify-event", self.on_enter) + self.group.connect("leave-notify-event", self.on_leave) + + def on_button_press(self, item, target_item, event): + pass def on_enter(self, *rest): + self.is_active = True + self.rect.set_properties(fill_color="lightgrey") if self.isInPort: self.ellipse.set_properties(fill_color="white") else: self.ellipse.set_properties(fill_color="white") def on_leave(self, *rest): - pass + self.is_active = False + self.rect.set_properties(fill_color="darkgrey") if self.isInPort: self.ellipse.set_properties(fill_color="red") else: @@ -54,9 +69,11 @@ class Port: if self.isInPort: self.ellipse.set_properties(center_x=x, center_y=y) self.text.set_properties(x=x+10, y=y) + self.rect.set_properties(x=x-10, y=y-9) else: self.ellipse.set_properties(center_x=x+self.control.get_width(), center_y=y) self.text.set_properties(x=x+self.control.get_width()-10, y=y) + self.rect.set_properties(x=x-50+self.control.get_width(), y=y-9) class InPort(Port): def __init__(self, name, control): @@ -77,6 +94,8 @@ class Control: self.width = 200 self.height = 200 + self.drag = None + self.group = goocanvas.Group(parent=root) self.mainbox = goocanvas.Rect(parent=self.group, @@ -88,8 +107,9 @@ class Control: self.titlebox = goocanvas.Rect(parent=self.group, width=200-10, height=30-10, radius_x=5, radius_y=5, - stroke_color="black", - fill_color="black") + stroke_color=None, + line_width = 0, + fill_color="darkgray") self.title = goocanvas.Text(parent=root, antialias=cairo.ANTIALIAS_SUBPIXEL, text=self.title, @@ -102,8 +122,30 @@ class Control: self.layout() self.set_pos(100, 100) + self.group.connect("button-press-event", self.button_press) + self.group.connect("button-release-event", self.button_release) + self.group.connect("motion-notify-event", self.motion) + # self.group.connect("enter-notify-event", self.on_enter) + # self.group.connect("leave-notify-event", self.on_leave) + + def button_press(self, item, target_item, event): + self.drag = (self.x - event.x, self.y - event.y) + + def motion(self, item, target_item, event): + if self.drag: + self.set_pos(event.x + self.drag[0], event.y + self.drag[1]) + + def on_enter(self, *rest): + self.titlebox.set_properties(fill_color="black") + + def on_leave(self, *rest): + self.titlebox.set_properties(fill_color="darkgrey") + + def button_release(self, *rest): + self.drag = None + def get_port_parent(self): - return self.group + return self.group.get_parent() def get_width(self): return self.width @@ -180,11 +222,12 @@ class InputCfg: root = self.canvas.get_root_item() - self.canvas.connect("button-press-event", self.button_down) - self.canvas.connect("button-release-event", self.button_up) + # self.canvas.connect("button-press-event", self.button_down) + # self.canvas.connect("button-release-event", self.button_up) self.canvas.connect("motion-notify-event", self.motion) - self.path = goocanvas.Path(parent=root, data="M 100,100 C 200,100 200,200 300,200") + self.path = goocanvas.Path(parent=root, data="M 100,100 C 200,100 200,200 300,200", + line_width=2, stroke_color="black") self.control1 = Control("EvDev", root) self.control1.add_out_port("abs1")