Advertisement
yayopoint

Listado de Puertos Jack

Jun 19th, 2012
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.61 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. ####################################
  5. ###           Módulos            ###
  6. ####################################
  7. import dbus
  8. from gi.repository import Gtk
  9. from dbus.mainloop.glib import DBusGMainLoop
  10.  
  11.  
  12. # Hay que hacer este llamado antes de definir el bus
  13. dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
  14.  
  15. ####################################
  16. ###             Bus              ###
  17. ####################################
  18. bus = dbus.SessionBus()
  19. jack_control_obj = bus.get_object("org.jackaudio.service", "/org/jackaudio/Controller")
  20. jack_control_ifa = dbus.Interface(jack_control_obj, "org.jackaudio.JackPatchbay")
  21.  
  22. graph = jack_control_ifa.GetGraph(0)
  23.  
  24. ####################################
  25. ###             GUI              ###
  26. ####################################
  27. class MainWindow(Gtk.Window):
  28.   def __init__(self):
  29.     Gtk.Window.__init__(self, title="Listado de Puertos Jack")
  30.     self.set_default_size(200, 200)
  31.     self.ports = []
  32.     self.clients = []
  33.     self.model = Gtk.TreeStore(int, str)
  34.     self.__create_model(graph[1])
  35.  
  36.     box = Gtk.VBox(False, 3)
  37.     self.add(box)
  38.  
  39.     sw = Gtk.ScrolledWindow()
  40.     self.treeView = Gtk.TreeView(self.model)
  41.  
  42.     cellRenderer = Gtk.CellRendererText()
  43.     column = Gtk.TreeViewColumn("ID", cellRenderer, text=0)
  44.     column1 = Gtk.TreeViewColumn("Puertos", cellRenderer, text=1)
  45.     self.treeView.append_column(column)
  46.     self.treeView.append_column(column1)
  47.  
  48.     sw.add(self.treeView)
  49.     box.add(sw)
  50.  
  51.     button = Gtk.Button("Hola Mundo!")
  52.     button.connect("clicked", self.printMSJ)
  53.  
  54.     box.pack_start(button, False, False, 0)
  55.  
  56.     jack_control_ifa.connect_to_signal("ClientAppeared", self.__add_client)
  57.     jack_control_ifa.connect_to_signal("PortAppeared", self.__add_port)
  58.     jack_control_ifa.connect_to_signal("ClientDisappeared", self.__del_client)
  59.     jack_control_ifa.connect_to_signal("PortDisappeared", self.__del_port)
  60.  
  61.   def __create_model(self, item_list):
  62.     for client in item_list:
  63.       iter = self.model.append(None)
  64.       self.model.set(iter,
  65.                 0, client[0],
  66.                 1, client[1])
  67.       self.clients.append([client[0], client[1]])
  68.       print("Agregando Cliente:", self.model.get_path(iter), ", ID:", client[0])
  69.       print("  Name:", client[1])
  70.       for port in client[2]:
  71.         child_iter = self.model.append(iter)
  72.         self.model.set(child_iter,
  73.                   0, port[0],
  74.                   1, port[1])
  75.         self.ports.append([client[0], port[0], port[1], port[2], port[3]])
  76.         print("--> Puerto:", self.model.get_path(child_iter), ", Port ID: ", port[0])
  77.         print("     Port Name: ", port[1], ["output", "input"][port[2] % 2], ["Audio", "MIDI"][port[3]])
  78.  
  79.   def __add_client (self, new_graph_version, client_id, client_name):
  80.     iter = self.model.append(None)
  81.     self.model.set(iter,
  82.               0, client_id,
  83.               1, client_name)
  84.     self.clients.append([client_id, client_name])
  85.     print("Agregando Cliente:", self.model.get_path(iter), ", ID:", client_id)
  86.     print("   Name:", client_name)
  87.  
  88.   def __add_port (self, new_graph_version, client_id, client_name, port_id, port_name, port_flags, port_type):
  89.     in_client = search_tree(self.model, self.model.iter_children(None), match_func_tree, (0, client_id))
  90.     child_iter = self.model.append(in_client)
  91.     self.model.set(child_iter,
  92.               0, port_id,
  93.               1, port_name)
  94.     self.ports.append([client_id, port_id, port_name, port_flags, port_type])
  95.     print("--> Puerto:", self.model.get_path(in_client), ", Port ID: ", port_id)
  96.     print("      Port Name: ", port_name, ["output", "input"][port_flags % 2], ["Audio", "MIDI"][port_type])
  97.  
  98.   def __del_client(self, new_graph_version, client_id, client_name):
  99.     dissapeared_client = search_tree(self.model, self.model.iter_children(None), match_func_tree, (0, client_id))
  100.     self.model.remove(dissapeared_client)
  101.     i = 0
  102.     while i < len(self.clients):
  103.       if self.clients[i][0] == client_id:
  104.         del self.clients[i]
  105.         break
  106.       i += 1
  107.     print("Ha desaparecido el cliente:", client_name)
  108.  
  109.   def __del_port(self, new_graph_version, client_id, client_name, port_id, port_name):
  110.     in_client = search_tree(self.model, self.model.iter_children(None), match_func_tree, (0, client_id))
  111.     if in_client:
  112.       dissapeared_port = search_tree(self.model, self.model.iter_children(in_client), match_func_tree, (0, port_id))
  113.       self.model.remove(dissapeared_port)
  114.     i = 0
  115.     while i < len(self.ports):
  116.       if self.ports[i][1] == port_id:
  117.         del self.ports[i]
  118.         break
  119.       i += 1
  120.     print("Ha desaparecido el puerto:", port_name)
  121.  
  122.   def printMSJ(self, widget):
  123.     treeselection = self.treeView.get_selection()
  124.     (sel_model, sel_iter) = treeselection.get_selected()
  125.     seleccion = self.model.get_value(sel_iter, 1)
  126.     print("Hola Mundo seleccionando:", seleccion)
  127.  
  128. ####################################
  129. ###          Funciones           ###
  130. ####################################
  131. def match_func_tree(model, iter, data):
  132.   column, key = data # data es una tupla que contiene número de columna, clave (key)
  133.   value = model.get_value(iter, column)
  134.   return value == key
  135. def search_tree(model, iter, func, data, include_children = False):
  136.   while iter:
  137.     if func(model, iter, data):
  138.       return iter
  139.     if include_children:
  140.       result = search(model, model.iter_children(iter), func, data)
  141.       if result: return result
  142.     iter = model.iter_next(iter)
  143.   return None
  144.  
  145.  
  146. win = MainWindow()
  147. win.connect("delete-event", Gtk.main_quit)
  148. win.show_all()
  149. Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement