[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