[SCM] calf/master: More jackvis.py/conndiagram.py cleanups

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:16 UTC 2013


The following commit has been merged in the master branch:
commit 3242e84c7597c52e1ca1d3593a6b14f882a46079
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Wed May 12 21:54:25 2010 +0100

    More jackvis.py/conndiagram.py cleanups

diff --git a/bigbull/conndiagram.py b/bigbull/conndiagram.py
index ddd9fa2..606239e 100644
--- a/bigbull/conndiagram.py
+++ b/bigbull/conndiagram.py
@@ -153,10 +153,10 @@ class PortView():
         return self.module.get_parser()
         
     def get_id(self):
-        return self.get_parser().get_port_id(self.model)
+        return self.model.get_id()
 
     def calc_width(self, ctx):
-        return calc_extents(ctx, self.fontName, self.get_parser().get_port_name(self.model))[0] + 4 * self.module.margin + 15
+        return calc_extents(ctx, self.fontName, self.model.get_name())[0] + 4 * self.module.margin + 15
 
     @staticmethod
     def input_arrow(x, y, w, h):
@@ -195,7 +195,7 @@ class PortView():
         return y
     
     def update_style(self):
-        color = self.get_parser().get_port_color(self)
+        color = self.model.get_port_color()
         self.box.props.fill_color_rgba = color.get_fill(self)
         self.box.props.stroke_color_rgba = color.get_stroke(self)
         self.box.props.line_width = 1
@@ -208,7 +208,7 @@ class PortView():
         
     def get_endpoint(self):
         bounds = self.box.get_bounds()
-        if self.model.is_port_input():
+        if self.isInput:
             x = bounds.x1
         else:
             x = bounds.x2
@@ -228,6 +228,7 @@ class ModuleView():
         self.parent = parent
         self.model = model
         self.group = goocanvas.Group(parent = self.parent)
+        self.ports = []
         self.wires = []
         self.create_items()
         
@@ -242,15 +243,15 @@ class ModuleView():
         self.title = self.model.get_name()
         self.portDict = {}
         width = self.get_title_width(ctx)
-        for (id, model) in self.model.get_port_list():
-            mport = self.create_port(id, model)
-            new_width = mport.calc_width(ctx)
+        for model in self.model.get_port_list():
+            view = self.create_port(model)
+            new_width = view.calc_width(ctx)
             if new_width > width:
                 width = new_width
         self.width = width
         y = self.render_title(ctx, 0.5)
-        for (id, model) in self.model.get_port_list():
-            y = self.render_port(ctx, id, y)
+        for view in self.ports:
+            y = self.render_port(ctx, view, y)
         self.rect = goocanvas.Rect(parent = self.group, x = 0.5, width = self.width, height = y, line_width = 1, stroke_color_rgba = Colors.frame, fill_color_rgba = Colors.box, antialias = cairo.ANTIALIAS_GRAY)
         self.rect.lower(self.titleItem)
         self.rect.type = "module"
@@ -258,10 +259,11 @@ class ModuleView():
         self.group.ensure_updated()
         self.wire = None
         
-    def create_port(self, portId, model):
-        mport = PortView(self, model)
-        self.portDict[portId] = mport
-        return mport
+    def create_port(self, model):
+        view = PortView(self, model)
+        self.ports.append(view)
+        self.portDict[model.get_id()] = view
+        return view
         
     def get_title_width(self, ctx):
         return calc_extents(ctx, self.fontName, self.title)[0] + 4 * self.margin
@@ -271,11 +273,10 @@ class ModuleView():
         y += self.titleItem.get_requested_height(ctx, self.width) + self.spacing
         return y
         
-    def render_port(self, ctx, portId, y):
-        mport = self.portDict[portId]
-        y = mport.render(ctx, self.group, y)
-        mport.box.connect_object("button-press-event", self.port_button_press, mport)
-        mport.title.connect_object("button-press-event", self.port_button_press, mport)        
+    def render_port(self, ctx, port_view, y):
+        y = port_view.render(ctx, self.group, y)
+        port_view.box.connect_object("button-press-event", self.port_button_press, port_view)
+        port_view.title.connect_object("button-press-event", self.port_button_press, port_view)        
         return y
         
     def delete_items(self):
@@ -412,6 +413,11 @@ class ConnectionGraphEditor:
         src.module.wires.append(wire)
         dest.module.wires.append(wire)
         
+    def blow_up(self):
+        GraphDetonator().blow_up(self)
+        
+# I broke this at some point, and not in mood to fix it now
+class GraphDetonator:
     def seg_distance(self, min1, max1, min2, max2):
         if min1 > min2:
             return self.seg_distance(min2, max2, min1, max1)
@@ -446,29 +452,30 @@ class ConnectionGraphEditor:
             return k * 8 * sign * (b1.x2 - (b2.x1 - 40) + 1j * (b1.y1 - b2.y1))
         return k * sign * (b1.x2 - b2.x1 + 1j * (b1.y1 - b2.y1))
         
-    def blow_up(self):
-        return
-        for m in self.modules:
+    def blow_up(self, graph):
+        modules = graph.modules
+        canvas = graph.canvas
+        for m in modules:
             m.velocity = 0+0j
             m.bounds = m.group.get_bounds()
         damping = 0.5
         step = 2.0
-        cr = self.canvas.create_cairo_context()
-        w, h = self.canvas.allocation.width, self.canvas.allocation.height
+        cr = canvas.create_cairo_context()
+        w, h = canvas.allocation.width, graph.canvas.allocation.height
         temperature = 100
         while True:
             energy = 0.0
             x = y = 0
-            for m1 in self.modules:
+            for m1 in modules:
                 x += (m1.bounds.x1 + m1.bounds.x2) / 2
                 y += (m1.bounds.y1 + m1.bounds.y2) / 2
-            x /= len(self.modules)
-            y /= len(self.modules)
+            x /= len(modules)
+            y /= len(modules)
             gforce = w / 2 - x + 1j * (h / 2 - y)
-            for m1 in self.modules:
+            for m1 in modules:
                 force = gforce
                 force += temperature * random.random()
-                for m2 in self.modules:
+                for m2 in modules:
                     if m1 == m2:
                         continue
                     force += self.repulsion(m1.bounds, m2.bounds)
@@ -480,7 +487,7 @@ class ConnectionGraphEditor:
                 if m1.bounds.y2 > h: force -= (m1.bounds.y2 - h) * 1j
                 m1.velocity = (m1.velocity + force) * damping
                 energy += abs(m1.velocity) ** 2
-            for m1 in self.modules:
+            for m1 in modules:
                 print "Velocity is (%s, %s)" % (m1.velocity.real, m1.velocity.imag)
                 m1.group.translate(step * m1.velocity.real, step * m1.velocity.imag)
                 m1.group.update(True, cr)
@@ -488,7 +495,7 @@ class ConnectionGraphEditor:
                 m1.update_wires()
             damping *= 0.99
             temperature *= 0.99
-            self.canvas.draw(gtk.gdk.Rectangle(0, 0, w, h))
+            canvas.draw(gtk.gdk.Rectangle(0, 0, w, h))
             print "Energy is %s" % energy
             if energy < 0.1:
                 break
diff --git a/bigbull/jackvis.py b/bigbull/jackvis.py
index eab24c9..ccba8cb 100755
--- a/bigbull/jackvis.py
+++ b/bigbull/jackvis.py
@@ -13,10 +13,10 @@ class JACKPortInfo(object):
     flags = 0
     format = 0
     
-    def __init__(self, full_name, id, name, flags, format):
+    def __init__(self, full_name, port_id, name, flags, format):
         self.full_name = full_name
         self.client_name = full_name.split(":", 1)[0]
-        self.id = int(id)
+        self.port_id = int(port_id)
         self.name = str(name)
         self.flags = int(flags)
         self.format = int(format)
@@ -24,7 +24,7 @@ class JACKPortInfo(object):
     def get_name(self):
         return self.name
         
-    def get_full_name(self):
+    def get_id(self):
         return self.full_name
         
     def is_audio(self):
@@ -39,6 +39,15 @@ class JACKPortInfo(object):
     def is_port_output(self):
         return (self.flags & 2) != 0
     
+    def get_port_color(self):
+        if self.is_audio():
+            return Colors.audioPort
+        elif self.is_midi():
+            return Colors.eventPort
+        else:
+            print "Unknown type %s" % self.format
+            return Colors.controlPort
+
 class JACKClientInfo(object):
     id = 0
     name = ""
@@ -74,24 +83,10 @@ class JACKGraphParser(object):
         self.patchbay = dbus.Interface(self.service, "org.jackaudio.JackPatchbay")
         self.graph = None
         self.fetch_graph()
-    def get_port_color(self, portData):
-        if portData.model.is_audio():
-            return Colors.audioPort
-        elif portData.model.is_midi():
-            return Colors.eventPort
-        else:
-            print "Unknown type %s" % portData.model.format
-            return Colors.controlPort
-    def is_port_input(self, portData):
-        return portData.is_port_input()
-    def get_port_name(self, portData):
-        return portData.get_name()
-    def get_port_id(self, portData):
-        return portData.get_full_name()
     def fetch_graph(self):
         self.graph = JACKGraphInfo(*self.patchbay.GetGraph(self.graph.known_version if self.graph is not None else 0))
     def can_connect(self, first, second):
-        if self.is_port_input(first) == self.is_port_input(second):
+        if first.is_port_input() == second.is_port_input():
             return False
         if first.is_audio() and second.is_audio():
             return True
@@ -100,10 +95,8 @@ class JACKGraphParser(object):
         return False
     def connect(self, first, second):
         self.patchbay.ConnectPortsByName(first.client_name, first.name, second.client_name, second.name)
-    def disconnect(self, name_first, name_second):
-        first = name_first.split(":", 1)
-        second = name_second.split(":", 1)
-        self.patchbay.DisconnectPortsByName(first[0], first[1], second[0], second[1])
+    def disconnect(self, first, second):
+        self.patchbay.DisconnectPortsByName(first.client_name, first.name, second.client_name, second.name)
         
 class ClientModuleModel():
     def __init__(self, client, checker):
@@ -111,7 +104,7 @@ class ClientModuleModel():
     def get_name(self):
         return self.client.get_name()
     def get_port_list(self):
-        return [(port.get_full_name(), port) for port in self.client.ports if self.checker(port)]
+        return filter(self.checker, self.client.ports)
 
 class App:
     def __init__(self):
@@ -142,7 +135,7 @@ class App:
         menu.popup(None, None, None, 3, time)
         
     def disconnect(self, wire):
-        self.parser.disconnect(wire.src.get_id(), wire.dest.get_id())
+        self.parser.disconnect(wire.src.model, wire.dest.model)
         wire.delete()
         
     def create(self):
@@ -159,13 +152,22 @@ class App:
         self.window.show_all()
         self.main_vbox.connect("popup-menu", self.canvas_popup_menu_handler)
         self.cgraph.canvas.connect("button-press-event", self.canvas_button_press_handler)
+        self.add_all()
         self.cgraph.canvas.update()
+        #this is broken
+        #self.cgraph.blow_up()
+        
+    def add_all(self):    
         width = self.add_clients(0.0, 0.0, lambda port: port.is_port_output())
         self.add_clients(width + 10, 0.0, lambda port: port.is_port_input())
-        self.cgraph.canvas.update()
-        self.add_wires()
-        self.cgraph.blow_up()
-        
+        pmap = self.cgraph.get_port_map()
+        for (c, p) in self.parser.graph.connections_name:
+            if p in pmap and c in pmap:
+                print "Connect %s to %s" % (c, p)
+                self.cgraph.connect(pmap[c], pmap[p])
+            else:
+                print "Connect %s to %s - not found" % (c, p)
+    
     def add_clients(self, x, y, checker):
         margin = 10
         mwidth = 0
@@ -176,15 +178,6 @@ class App:
                 mwidth = mod.rect.props.width
         return mwidth
         
-    def add_wires(self):
-        pmap = self.cgraph.get_port_map()
-        for (c, p) in self.parser.graph.connections_name:
-            if p in pmap and c in pmap:
-                print "Connect %s to %s" % (c, p)
-                self.cgraph.connect(pmap[c], pmap[p])
-            else:
-                print "Connect %s to %s - not found" % (c, p)
-
     def create_main_menu(self):
         self.menu_bar = gtk.MenuBar()
         self.file_menu = add_submenu(self.menu_bar, "_File")

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list