From 3eda4c86365ee1143b8723aff5b6d1de3c4ce767 Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke <grumbel@gmx.de> Date: Tue, 29 Apr 2008 13:18:40 +0200 Subject: [PATCH] Added Control box to inputcfg --- gui/inputcfg.py | 135 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 112 insertions(+), 23 deletions(-) diff --git a/gui/inputcfg.py b/gui/inputcfg.py index a848dfe..78ce404 100755 --- a/gui/inputcfg.py +++ b/gui/inputcfg.py @@ -5,7 +5,100 @@ pygtk.require('2.0') import gtk import cairo import goocanvas +import pango + +class Control: + def __init__(self, root): + self.title = "EvDev" + self.in_ports = [] + self.out_ports = [] + + self.group = goocanvas.Group(parent=root) + self.mainbox = goocanvas.Rect(parent=self.group, + radius_x=10, radius_y=10, + width=200, + stroke_color="black", + fill_color="lightgrey", + line_width=1) + 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") + self.title = goocanvas.Text(parent=root, + antialias=cairo.ANTIALIAS_SUBPIXEL, + text="EvDev", + width=180, + font="sans bold 12", + x=100,y=5, + anchor=gtk.ANCHOR_NORTH, + alignment=pango.ALIGN_CENTER, + fill_color="white") + + self.add_in_port("btn0") + self.add_in_port("btn1") + + self.add_out_port("abs1") + self.add_out_port("abs2") + self.add_out_port("abs3") + self.add_out_port("abs4") + self.add_out_port("abs5") + self.add_out_port("abs6") + self.set_pos(100, 100) + + def layout(self): + height = 40 + max(len(self.in_ports), len(self.out_ports)) * 20 + self.mainbox.set_properties(height=height) + + def add_in_port(self, name): + in_port = goocanvas.Ellipse(parent=self.group, + center_x=0, center_y=40, + radius_x=5, radius_y=5, + stroke_color="black", + line_width=1, + fill_color="red") + in_port_title = goocanvas.Text(parent=self.group, + antialias=cairo.ANTIALIAS_SUBPIXEL, + text=name, + font="sans 9", + x=10,y=0, + anchor=gtk.ANCHOR_WEST, + alignment=pango.ALIGN_LEFT, + fill_color="black") + self.in_ports.append((in_port, in_port_title)) + self.layout() + + def add_out_port(self, name): + out_port = goocanvas.Ellipse(parent=self.group, + center_x=0, center_y=40, + radius_x=5, radius_y=5, + stroke_color="black", + line_width=1, + fill_color="green") + out_port_title = goocanvas.Text(parent=self.group, + antialias=cairo.ANTIALIAS_SUBPIXEL, + text=name, + font="sans 9", + x=190,y=0, + anchor=gtk.ANCHOR_EAST, + alignment=pango.ALIGN_RIGHT, + fill_color="black") + self.out_ports.append((out_port, out_port_title)) + self.layout() + + def set_pos(self, x, y): + self.mainbox.set_properties(x=x, y=y) + self.titlebox.set_properties(x=x+5, y=y+5) + self.title.set_properties(x=x+100, y=y+5) + for i in range(len(self.in_ports)): + self.in_ports[i][0].set_properties(center_x=x, center_y=y+40+20*i) + self.in_ports[i][1].set_properties(x=x+10, y=y+40+20*i) + for i in range(len(self.out_ports)): + self.out_ports[i][0].set_properties(center_x=x+200, center_y=y+40+20*i) + self.out_ports[i][1].set_properties(x=x+190, y=y+40+20*i) + + class InputCfg: def delete_event(self, widget, event, data=None): return False @@ -13,10 +106,20 @@ class InputCfg: def destroy(self, widget, data=None): gtk.main_quit() - def click(self, item, target_item, event, *rest): - print item, target_item, event, rest + def button_down(self, item, event): + self.drag = True + self.motion(item, event) + + def button_up(self, item, event): + self.drag = False + + def motion(self, item, event): + if self.drag: + self.control.set_pos(event.x, event.y) def __init__(self): + self.drag = False + # create a new window self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.connect("delete_event", self.delete_event) @@ -36,32 +139,18 @@ class InputCfg: root = self.canvas.get_root_item() - ellipse = goocanvas.Ellipse(parent=root, - center_x=300, center_y=300, - radius_x=100, radius_y=100, - stroke_color="black", - fill_color="lightgrey") - rect = goocanvas.Rect(parent=root, - antialias=cairo.ANTIALIAS_SUBPIXEL, - x=100, y=100, - radius_x=10, radius_y=10, - width=200, height=100, - stroke_color="black", - fill_color="lightgrey") - text = goocanvas.Text(parent=root, - antialias=cairo.ANTIALIAS_SUBPIXEL, - text="FoobarItem Really Long Description", - width=180, - font="serif bold 10", - x=110,y=110) - rect.connect("button-press-event", self.click) + 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.control = Control(root) def main(self): gtk.main() - + if __name__ == "__main__": inputcfg = InputCfg() inputcfg.main() - + # EOF #