[SCM] zynjacku packaging branch, master, updated. upstream/5-26-gabedb6d

mira-guest at users.alioth.debian.org mira-guest at users.alioth.debian.org
Mon Oct 12 12:58:32 UTC 2009


The following commit has been merged in the master branch:
commit 495ce04a345c114065bca8072dfb7e189cd2b776
Author: Jaromír Mikeš <mira.mikes at seznam.cz>
Date:   Mon Oct 12 14:56:47 2009 +0200

    Imported Upstream version 5.1

diff --git a/Makefile.am b/Makefile.am
index 19bb10b..f680f92 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -40,7 +40,7 @@ INCLUDES = $(PYTHON_INCLUDES) $(zynjacku_c_CFLAGS)
 pkgpyexecdir = $(pythondir)/zynworld/
 
 pkgpyexec_LTLIBRARIES = zynjacku_c.la zynjacku_ttl.la
-pkgpyexec_SCRIPTS = zynworld/lv2.py zynworld/__init__.py
+pkgpyexec_SCRIPTS = zynworld/__init__.py zynworld/lv2.py zynworld/host.py
 
 ZYNJACKU_LDFLAGS = @GTK_LIBS@
 ZYNJACKU_LDFLAGS += @PYGTK_LIBS@
@@ -122,20 +122,12 @@ zynjacku_ttl_la_SOURCES += flex_ttl.c
 zynjacku_ttl_la_SOURCES += flex_ttl.h
 
 CLEANFILES = zynjacku_wrap.c *.pyc zynjacku.defs
-EXTRA_DIST = zynjacku.override zynjacku.defs zynjacku.py lv2rack.py zynspect.py zynworld/__init__.py  zynworld/lv2.py
+EXTRA_DIST = zynjacku.override zynjacku.defs zynjacku lv2rack zynspect zynworld/__init__.py  zynworld/lv2.py zynworld/host.py
 
-bin_SCRIPTS = zynjacku.py lv2rack.py zynspect.py
+bin_SCRIPTS = zynjacku lv2rack zynspect
 
 zynjackudir = $(pkgdatadir)
 dist_zynjacku_DATA = gpl.txt zynjacku.glade art/logo/logo.png
 
-install-exec-hook:
-	ln -vfs zynjacku.py $(DESTDIR)$(bindir)/zynjacku
-	ln -vfs lv2rack.py $(DESTDIR)$(bindir)/lv2rack
-	ln -vfs zynspect.py $(DESTDIR)$(bindir)/zynspect
-
-uninstall-hook:
-	rm -vf $(DESTDIR)$(bindir)/zynjacku
-
 ttl_flex_regenerate:
 	flex --batch --nodefault -o flex_ttl.c --header-file=flex_ttl.h ttl.l
diff --git a/Makefile.in b/Makefile.in
index ddbc542..a31809a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -278,7 +278,7 @@ zynjacku_c_CFLAGS = -DDATA_DIR='"$(pkgdatadir)"' -Wall -g \
 	@LV2DYNPARAMHOST1_CFLAGS@ $(am__empty)
 INCLUDES = $(PYTHON_INCLUDES) $(zynjacku_c_CFLAGS)
 pkgpyexec_LTLIBRARIES = zynjacku_c.la zynjacku_ttl.la
-pkgpyexec_SCRIPTS = zynworld/lv2.py zynworld/__init__.py
+pkgpyexec_SCRIPTS = zynworld/__init__.py zynworld/lv2.py zynworld/host.py
 ZYNJACKU_LDFLAGS = @GTK_LIBS@ @PYGTK_LIBS@ @JACK_LIBS@ \
 	@LV2DYNPARAMHOST1_LIBS@ $(am__empty)
 zynjacku_c_la_LDFLAGS = -module -avoid-version $(ZYNJACKU_LDFLAGS)
@@ -301,8 +301,8 @@ zynjacku_ttl_la_LDFLAGS = -module -avoid-version
 zynjacku_ttl_la_SOURCES = zynjacku_ttl.c ttl_lexer.h flex_ttl.c \
 	flex_ttl.h
 CLEANFILES = zynjacku_wrap.c *.pyc zynjacku.defs
-EXTRA_DIST = zynjacku.override zynjacku.defs zynjacku.py lv2rack.py zynspect.py zynworld/__init__.py  zynworld/lv2.py
-bin_SCRIPTS = zynjacku.py lv2rack.py zynspect.py
+EXTRA_DIST = zynjacku.override zynjacku.defs zynjacku lv2rack zynspect zynworld/__init__.py  zynworld/lv2.py zynworld/host.py
+bin_SCRIPTS = zynjacku lv2rack zynspect
 zynjackudir = $(pkgdatadir)
 dist_zynjacku_DATA = gpl.txt zynjacku.glade art/logo/logo.png
 all: config.h
@@ -732,8 +732,6 @@ install-dvi: install-dvi-am
 
 install-exec-am: install-binSCRIPTS install-pkgpyexecLTLIBRARIES \
 	install-pkgpyexecSCRIPTS
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
 
 install-html: install-html-am
 
@@ -769,10 +767,8 @@ ps-am:
 
 uninstall-am: uninstall-binSCRIPTS uninstall-dist_zynjackuDATA \
 	uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecSCRIPTS
-	@$(NORMAL_INSTALL)
-	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
 
-.MAKE: install-am install-exec-am install-strip uninstall-am
+.MAKE: install-am install-strip
 
 .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
 	clean-generic clean-libtool clean-pkgpyexecLTLIBRARIES ctags \
@@ -783,17 +779,16 @@ uninstall-am: uninstall-binSCRIPTS uninstall-dist_zynjackuDATA \
 	dvi-am html html-am info info-am install install-am \
 	install-binSCRIPTS install-data install-data-am \
 	install-dist_zynjackuDATA install-dvi install-dvi-am \
-	install-exec install-exec-am install-exec-hook install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-pkgpyexecLTLIBRARIES \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-pkgpyexecLTLIBRARIES \
 	install-pkgpyexecSCRIPTS install-ps install-ps-am \
 	install-strip installcheck installcheck-am installdirs \
 	maintainer-clean maintainer-clean-generic mostlyclean \
 	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
 	pdf pdf-am ps ps-am tags uninstall uninstall-am \
 	uninstall-binSCRIPTS uninstall-dist_zynjackuDATA \
-	uninstall-hook uninstall-pkgpyexecLTLIBRARIES \
-	uninstall-pkgpyexecSCRIPTS
+	uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecSCRIPTS
 
 
 zynjacku.defs: engine.h rack.h plugin.h enum.h hints.h midi_cc_map.h lv2.h
@@ -814,14 +809,6 @@ zynjacku_wrap.c: zynjacku.defs zynjacku.override
 	--override zynjacku.override \
 	zynjacku.defs > $@
 
-install-exec-hook:
-	ln -vfs zynjacku.py $(DESTDIR)$(bindir)/zynjacku
-	ln -vfs lv2rack.py $(DESTDIR)$(bindir)/lv2rack
-	ln -vfs zynspect.py $(DESTDIR)$(bindir)/zynspect
-
-uninstall-hook:
-	rm -vf $(DESTDIR)$(bindir)/zynjacku
-
 ttl_flex_regenerate:
 	flex --batch --nodefault -o flex_ttl.c --header-file=flex_ttl.h ttl.l
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
diff --git a/configure b/configure
index b3c58d5..bbef504 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for zynjacku 5.
+# Generated by GNU Autoconf 2.61 for zynjacku 5.1.
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
 # 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
@@ -726,8 +726,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='zynjacku'
 PACKAGE_TARNAME='zynjacku'
-PACKAGE_VERSION='5'
-PACKAGE_STRING='zynjacku 5'
+PACKAGE_VERSION='5.1'
+PACKAGE_STRING='zynjacku 5.1'
 PACKAGE_BUGREPORT=''
 
 # Factoring default headers for most tests.
@@ -1439,7 +1439,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures zynjacku 5 to adapt to many kinds of systems.
+\`configure' configures zynjacku 5.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1509,7 +1509,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of zynjacku 5:";;
+     short | recursive ) echo "Configuration of zynjacku 5.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1634,7 +1634,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-zynjacku configure 5
+zynjacku configure 5.1
 generated by GNU Autoconf 2.61
 
 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1648,7 +1648,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by zynjacku $as_me 5, which was
+It was created by zynjacku $as_me 5.1, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   $ $0 $@
@@ -2338,7 +2338,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='zynjacku'
- VERSION='5'
+ VERSION='5.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -21086,7 +21086,7 @@ exec 6>&1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by zynjacku $as_me 5, which was
+This file was extended by zynjacku $as_me 5.1, which was
 generated by GNU Autoconf 2.61.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21139,7 +21139,7 @@ Report bugs to <bug-autoconf at gnu.org>."
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-zynjacku config.status 5
+zynjacku config.status 5.1
 configured by $0, generated by GNU Autoconf 2.61,
   with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
 
diff --git a/configure.ac b/configure.ac
index e3ae26b..2c122e9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
 #
 
 AC_PREREQ(2.61)
-AC_INIT(zynjacku, 5)
+AC_INIT(zynjacku, 5.1)
 AC_CONFIG_AUX_DIR(config)
 AM_INIT_AUTOMAKE
 AC_CONFIG_HEADER([config.h])
diff --git a/lv2rack.py b/lv2rack
similarity index 97%
copy from lv2rack.py
copy to lv2rack
index 3a4c792..29a8a42 100755
--- a/lv2rack.py
+++ b/lv2rack
@@ -39,6 +39,7 @@ try:
         import zynjacku_c
     else:
         from zynworld import zynjacku_c
+    from zynworld import host as zynhost
 except Exception, e:
     print "Failed to import zynjacku internal python modules"
     print repr(e)
@@ -49,19 +50,17 @@ except Exception, e:
 
 sys.path = old_path
 
-import zynjacku as zynjacku
-
 try:
     import lash
 except:
     print "Cannot load LASH python bindings, you want LASH unless you enjoy manual jack plumbing each time you use this app"
     lash = None
 
-class lv2rack(zynjacku.host):
+class lv2rack(zynhost.host):
     def __init__(self, client_name, preset_extension=None, preset_name=None, lash_client=None):
         #print "lv2rack constructor called."
 
-        zynjacku.host.__init__(self, zynjacku_c.Rack(), client_name, preset_extension, preset_name, lash_client)
+        zynhost.host.__init__(self, zynjacku_c.Rack(), client_name, preset_extension, preset_name, lash_client)
 
 class lv2rack_multi(lv2rack):
     def __init__(self, program_data, client_name, uris, lash_client):
@@ -226,7 +225,7 @@ class lv2rack_multi(lv2rack):
                 self.statusbar.push(statusbar_context_id, "Failed to construct show effect UI")
 
     def on_about(self, widget):
-        zynjacku.run_about_dialog(self.main_window, self.program_data)
+        zynhost.run_about_dialog(self.main_window, self.program_data)
 
     def on_preset_load(self, widget):
         self.preset_load_ask()
@@ -304,9 +303,9 @@ class lv2rack_single(lv2rack):
         lv2rack.__del__(self)
 
 def main():
-    program_data = zynjacku.get_program_data('lv2rack')
+    program_data = zynhost.get_program_data('lv2rack')
 
-    zynjacku.register_types()
+    zynhost.register_types()
 
     client_name = "lv2rack"
 
diff --git a/lv2rack.py b/zynjacku
similarity index 54%
rename from lv2rack.py
rename to zynjacku
index 3a4c792..941b068 100755
--- a/lv2rack.py
+++ b/zynjacku
@@ -2,7 +2,8 @@
 #
 # This file is part of zynjacku
 #
-# Copyright (C) 2008,2009 Nedko Arnaudov <nedko at arnaudov.name>
+# Copyright (C) 2006 Leonard Ritter <contact at leonard-ritter.com>
+# Copyright (C) 2006,2007,2008,2009 Nedko Arnaudov <nedko at arnaudov.name>
 #  
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -39,6 +40,7 @@ try:
         import zynjacku_c
     else:
         from zynworld import zynjacku_c
+    from zynworld import host as zynhost
 except Exception, e:
     print "Failed to import zynjacku internal python modules"
     print repr(e)
@@ -49,40 +51,45 @@ except Exception, e:
 
 sys.path = old_path
 
-import zynjacku as zynjacku
-
 try:
     import lash
 except:
     print "Cannot load LASH python bindings, you want LASH unless you enjoy manual jack plumbing each time you use this app"
     lash = None
 
-class lv2rack(zynjacku.host):
+class ZynjackuHost(zynhost.host):
     def __init__(self, client_name, preset_extension=None, preset_name=None, lash_client=None):
-        #print "lv2rack constructor called."
+        #print "ZynjackuHost constructor called."
 
-        zynjacku.host.__init__(self, zynjacku_c.Rack(), client_name, preset_extension, preset_name, lash_client)
+        zynhost.host.__init__(self, zynjacku_c.Engine(), client_name, preset_extension, preset_name, lash_client)
 
-class lv2rack_multi(lv2rack):
+class ZynjackuHostMulti(ZynjackuHost):
     def __init__(self, program_data, client_name, uris, lash_client):
-        #print "lv2rack_multi constructor called."
-        lv2rack.__init__(self, client_name, "lv2rack", "effect stack", lash_client)
-
+        #print "ZynjackuHostMulti constructor called."
+        ZynjackuHost.__init__(self, client_name, "zynjacku", "synth stack", lash_client)
+        
         self.program_data = program_data
         self.glade_xml = program_data['glade_xml']
 
-        self.main_window = self.glade_xml.get_widget("lv2rack")
+        self.main_window = self.glade_xml.get_widget("zynjacku_main")
         self.main_window.set_title(client_name)
 
-        self.statusbar = self.glade_xml.get_widget("lv2rack_statusbar")
+        self.statusbar = self.glade_xml.get_widget("statusbar")
+
+        self.hbox_menubar = self.glade_xml.get_widget("hbox_menubar")
+        self.midi_led = zynhost.midi_led()
+        self.midi_led_frame = gtk.Frame()
+        self.midi_led_frame.set_shadow_type(gtk.SHADOW_OUT)
+        self.midi_led_frame.add(self.midi_led);
+        self.hbox_menubar.pack_start(self.midi_led_frame, False, False)
 
 	# Create our dictionary and connect it
-        dic = {"lv2rack_quit_menuitem" : self.on_quit,
-               "lv2rack_help_about_menuitem" : self.on_about,
-               "lv2rack_preset_load_menuitem" : self.on_preset_load,
-               "lv2rack_preset_save_as_menuitem" : self.on_preset_save_as,
-               "lv2rack_effect_load_menuitem" : self.on_effect_load,
-               "lv2rack_effect_clear_menuitem" : self.on_effect_clear,
+        dic = {"quit" : self.on_quit,
+               "about" : self.on_about,
+               "preset_load" : self.on_preset_load,
+               "preset_save_as" : self.on_preset_save_as,
+               "synth_load" : self.on_synth_load,
+               "synth_clear" : self.on_synth_clear,
                }
 
         self.signal_ids = []
@@ -93,9 +100,15 @@ class lv2rack_multi(lv2rack):
                 continue
             self.signal_ids.append([w, w.connect("activate", v)])
 
-        self.effects_widget = self.glade_xml.get_widget("lv2rack_treeview_effects")
+        self.synths_widget = self.glade_xml.get_widget("treeview_synths")
+
+        self.store = gtk.ListStore(
+            gobject.TYPE_BOOLEAN,       # UI visible
+            gobject.TYPE_STRING,        # Instance name
+            gobject.TYPE_STRING,        # Plugin name
+            gobject.TYPE_STRING,        # Plugin URI
+            gobject.TYPE_PYOBJECT)      # Plugin object
 
-        self.store = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)
         text_renderer = gtk.CellRendererText()
         self.toggle_renderer = gtk.CellRendererToggle()
         self.toggle_renderer.set_property('activatable', True)
@@ -106,17 +119,17 @@ class lv2rack_multi(lv2rack):
         column_name = gtk.TreeViewColumn("Name", text_renderer, text=2)
         #column_uri = gtk.TreeViewColumn("URI", text_renderer, text=3)
 
-        self.effects_widget.append_column(column_ui_visible)
-        self.effects_widget.append_column(column_instance)
-        self.effects_widget.append_column(column_name)
-        #self.effects_widget.append_column(column_uri)
+        self.synths_widget.append_column(column_ui_visible)
+        self.synths_widget.append_column(column_instance)
+        self.synths_widget.append_column(column_name)
+        #self.synths_widget.append_column(column_uri)
 
-        self.effects_widget.set_model(self.store)
+        self.synths_widget.set_model(self.store)
 
         self.main_window.show_all()
         self.signal_ids.append([self.main_window, self.main_window.connect("destroy", self.on_quit)])
 
-        if len(uris) == 1 and uris[0][-8:] == ".lv2rack":
+        if len(uris) == 1 and uris[0][-9:] == ".zynjacku":
             self.preset_load(uris[0])
         else:
             for uri in uris:
@@ -132,56 +145,85 @@ class lv2rack_multi(lv2rack):
         gtk.main_quit()
 
     def __del__(self):
-        #print "lv2rack destructor called."
+        #print "ZynjackuHostMulti destructor called."
 
         self.store.clear()
 
-        lv2rack.__del__(self)
+        ZynjackuHost.__del__(self)
 
     def new_plugin(self, uri, parameters=[], maps={}):
         self.progress_window.show(uri)
-        plugin = lv2rack.new_plugin(self, uri, parameters, maps)
+        plugin = ZynjackuHost.new_plugin(self, uri, parameters, maps)
         return plugin
 
     def on_plugin_progress(self, engine, name, progress, message):
         self.progress_window.progress(name, progress, message)
 
+    def update_midi_led(self):
+        self.midi_led.set(self.engine.get_midi_activity())
+        return True
+
     def check_plugin(self, plugin):
+        ports_count = len(plugin.ports)
         audio_in_ports_count = 0
         audio_out_ports_count = 0
+        midi_in_ports_count = 0
+        control_ports_count = 0
+        string_ports_count = 0
+        event_ports_count = 0
+        midi_event_in_ports_count = 0
 
         for port in plugin.ports:
-            if port.__dict__["isAudio"]:
-                if port.__dict__["isInput"]:
+            if port.isAudio:
+                if port.isInput:
                     audio_in_ports_count += 1
                     continue
-                if port.__dict__["isOutput"]:
+                if port.isOutput:
                     audio_out_ports_count += 1
                     continue
                 continue
+            if port.isLarslMidi:
+                if port.isInput:
+                    midi_in_ports_count += 1
+                    continue
+                continue
+            if port.isEvent:
+                event_ports_count += 1
+                if port.isInput and "http://lv2plug.in/ns/ext/midi#MidiEvent" in port.events:
+                    midi_event_in_ports_count += 1
+                    continue
+                continue
+            if port.isControl:
+                control_ports_count += 1
+                continue
+            if port.isString:
+                string_ports_count += 1
+                continue
 
-        if audio_in_ports_count == 0 or audio_out_ports_count == 0:
-#             print "Skipping %s (%s), [effect] plugin with unsupported port configuration" % (plugin.name, plugin.uri)
-#             #print "  midi input ports: %d" % midi_in_ports_count
-#             #print "  control ports: %d" % control_ports_count
-#             #print "  string ports: %d" % string_ports_count
-#             #print "  event ports: %d" % event_ports_count
-#             #print "  event midi input ports: %d" % midi_event_in_ports_count
-#             print "  audio input ports: %d" % audio_in_ports_count
-#             print "  audio output ports: %d" % audio_out_ports_count
-#             #print "  total ports %d" % ports_count
-            return False;
-
-#         print "Found effect plugin '%s' %s", (plugin.name, plugin.uri)
-#         #print "  midi input ports: %d" % midi_in_ports_count
-#         #print "  control ports: %d" % control_ports_count
-#         #print "  string ports: %d" % string_ports_count
-#         #print "  event ports: %d" % event_ports_count
-#         #print "  event midi input ports: %d" % midi_event_in_ports_count
+        # TODO: we must be smarter and check for "optional connect" property
+        if (midi_in_ports_count + control_ports_count + string_ports_count + event_ports_count + audio_out_ports_count != ports_count) or \
+               (midi_in_ports_count + midi_event_in_ports_count != 1) or \
+               (audio_out_ports_count == 0):
+            #print "Skipping %s (%s), [synth] plugin with unsupported port configuration" % (plugin.name, plugin.uri)
+            #print "  midi input ports: %d" % midi_in_ports_count
+            #print "  control ports: %d" % control_ports_count
+            #print "  string ports: %d" % string_ports_count
+            #print "  event ports: %d" % event_ports_count
+            #print "  event midi input ports: %d" % midi_event_in_ports_count
+            #print "  audio input ports: %d" % audio_in_ports_count
+            #print "  audio output ports: %d" % audio_out_ports_count
+            #print "  total ports %d" % ports_count
+            return False
+
+#         print "Found \"simple\" synth plugin '%s' %s" % (plugin.name, plugin.uri)
+#         print "  midi input ports: %d" % midi_in_ports_count
+#         print "  control ports: %d" % control_ports_count
+#         print "  event ports: %d" % event_ports_count
+#         print "  event midi input ports: %d" % midi_event_in_ports_count
 #         print "  audio input ports: %d" % audio_in_ports_count
 #         print "  audio output ports: %d" % audio_out_ports_count
-#         #print "  total ports %d" % ports_count
-        return True;
+#         print "  total ports %d" % ports_count
+        return True
 
     def load_plugin(self, uri, parameters=[], maps={}):
         statusbar_context_id = self.statusbar.get_context_id("loading plugin")
@@ -189,24 +231,28 @@ class lv2rack_multi(lv2rack):
         while gtk.events_pending():
             gtk.main_iteration()
         self.statusbar.pop(statusbar_id)
-        effect = self.new_plugin(uri, parameters, maps)
-        if not effect:
+        synth = self.new_plugin(uri, parameters, maps)
+        if not synth:
             self.statusbar.push(statusbar_context_id, "Failed to construct %s" % uri)
         else:
-            row = False, effect.get_instance_name(), effect.get_name(), effect.get_uri(), effect
+            row = False, synth.get_instance_name(), synth.get_name(), synth.uri, synth
             self.store.append(row)
             self.statusbar.remove(statusbar_context_id, statusbar_id)
 
     def run(self):
         toggled_connect_id = self.toggle_renderer.connect('toggled', self.on_ui_visible_toggled, self.store)
 
-        lv2rack.run(self)
+        update_midi_led_callback_id = gobject.timeout_add(100, self.update_midi_led)
+
+        ZynjackuHost.run(self)
+
+        gobject.source_remove(update_midi_led_callback_id)
 
         self.toggle_renderer.disconnect(toggled_connect_id)
 
-    def on_plugin_ui_window_destroyed(self, window, effect, row):
-        effect.ui_win.disconnect(effect.ui_win.destroy_connect_id) # signal connection holds reference to effect object...
-        effect.ui_win = None
+    def on_plugin_ui_window_destroyed(self, window, synth, row):
+        synth.ui_win.disconnect(synth.ui_win.destroy_connect_id) # signal connection holds reference to synth object...
+        synth.ui_win = None
         row[0] = False
 
     def on_ui_visible_toggled(self, cell, path, model):
@@ -223,64 +269,51 @@ class lv2rack_multi(lv2rack):
             if model[path][4].ui_win.show():
                 model[path][0] = True
             else:
-                self.statusbar.push(statusbar_context_id, "Failed to construct show effect UI")
+                self.statusbar.push(statusbar_context_id, "Failed to show synth UI")
 
     def on_about(self, widget):
-        zynjacku.run_about_dialog(self.main_window, self.program_data)
+        zynhost.run_about_dialog(self.main_window, self.program_data)
 
     def on_preset_load(self, widget):
         self.preset_load_ask()
 
     def preset_get_pre_plugins_xml(self):
-        xml = "<lv2rack>\n"
+        xml = "<zynjacku>\n"
         xml += "  <plugins>\n"
         return xml
 
     def preset_get_post_plugins_xml(self):
         xml = "  </plugins>\n"
-        xml += "</lv2rack>\n"
+        xml += "</zynjacku>\n"
         return xml
 
     def on_preset_save_as(self, widget):
         self.preset_save_ask()
 
-    def on_plugin_repo_tick(self, repo, progress, uri, progressbar):
-        if progress == 1.0:
-            progressbar.hide()
-            return
-
-        progressbar.show()
-        progressbar.set_fraction(progress)
-        progressbar.set_text("Checking %s" % uri)
-        while gtk.events_pending():
-            gtk.main_iteration()
-
-    def on_effect_load(self, widget):
-        self.plugins_load("LV2 effect plugins")
+    def on_synth_load(self, widget):
+        self.plugins_load("LV2 synth plugins")
 
-    def on_effect_clear(self, widget):
+    def on_synth_clear(self, widget):
         self.store.clear()
         self.clear_plugins()
 
-class lv2rack_single(lv2rack):
+class ZynjackuHostOne(ZynjackuHost):
     def __init__(self, program_data, client_name, uri):
         #print "ZynjackuHostOne constructor called."
-        lv2rack.__init__(self, client_name, "lv2rack")
-
-        self.glade_xml = program_data['glade_xml']
+        ZynjackuHost.__init__(self, client_name, "zynjacku")
 
         self.plugin = self.new_plugin(uri)
         if not self.plugin:
             print"Failed to construct %s" % uri
             return
 
-        if not lv2rack.create_plugin_ui(self, self.plugin):
+        if not ZynjackuHost.create_plugin_ui(self, self.plugin):
             print"Failed to create synth window"
             return
 
     def new_plugin(self, uri, parameters=[], maps={}):
         self.progress_window.show(uri)
-        plugin = lv2rack.new_plugin(self, uri, parameters, maps)
+        plugin = ZynjackuHost.new_plugin(self, uri, parameters, maps)
         self.progress_window.hide()
         return plugin
 
@@ -296,23 +329,23 @@ class lv2rack_single(lv2rack):
             return
 
         self.plugin.ui_win.show()
-        lv2rack.run(self)
+        ZynjackuHost.run(self)
 
     def __del__(self):
-        #print "lv2rack_single destructor called."
+        #print "ZynjackuHostOne destructor called."
 
-        lv2rack.__del__(self)
+        ZynjackuHost.__del__(self)
 
 def main():
-    program_data = zynjacku.get_program_data('lv2rack')
+    program_data = zynhost.get_program_data('zynjacku')
 
-    zynjacku.register_types()
+    zynhost.register_types()
 
-    client_name = "lv2rack"
+    client_name = "zynjacku"
 
     if lash:                        # If LASH python bindings are available
         # sys.argv is modified by this call
-        lash_client = lash.init(sys.argv, "lv2rack", lash.LASH_Config_File)
+        lash_client = lash.init(sys.argv, "zynjacku", lash.LASH_Config_File)
     else:
         lash_client = None
 
@@ -323,13 +356,14 @@ def main():
     if lash_client:
         print "Successfully connected to LASH server at " +  lash.lash_get_server_name(lash_client)
 
-    if len(sys.argv) == 2 and sys.argv[1][-9:] != ".lv2rack":
-        host = lv2rack_single(program_data, client_name, sys.argv[1])
+    if len(sys.argv) == 2 and sys.argv[1][-9:] != ".zynjacku":
+        host = ZynjackuHostOne(program_data, client_name, sys.argv[1])
     else:
-        host = lv2rack_multi(program_data, client_name, sys.argv[1:], lash_client)
+        host = ZynjackuHostMulti(program_data, client_name, sys.argv[1:], lash_client)
 
     host.run()
 
+    #print "stone after host.run(), host object refcount is %u" % sys.getrefcount(host)
     sys.stdout.flush()
     sys.stderr.flush()
 
diff --git a/zynspect.py b/zynspect
similarity index 100%
rename from zynspect.py
rename to zynspect
diff --git a/zynjacku.py b/zynworld/host.py
old mode 100755
new mode 100644
similarity index 88%
rename from zynjacku.py
rename to zynworld/host.py
index 9472b71..b2274ea
--- a/zynjacku.py
+++ b/zynworld/host.py
@@ -30,36 +30,7 @@ import cairo
 from math import pi, sin, cos, atan2
 from colorsys import hls_to_rgb, rgb_to_hls
 from distutils import sysconfig
-
-old_path = sys.path
-
-inplace_libs = os.path.join(os.path.dirname(sys.argv[0]), ".libs")
-if os.access(inplace_libs, os.R_OK):
-    sys.path.append(inplace_libs)
-else:
-    inplace_libs = None
-
-try:
-    if inplace_libs:
-        import zynjacku_c as zynjacku
-    else:
-        from zynworld import zynjacku_c as zynjacku
-    from zynworld import lv2
-except Exception, e:
-    print "Failed to import zynjacku internal python modules"
-    print repr(e)
-    print "These directories were searched"
-    for path in sys.path:
-        print "    " + path
-    sys.exit(1)
-
-sys.path = old_path
-
-try:
-    import lash
-except:
-    print "Cannot load LASH python bindings, you want LASH unless you enjoy manual jack plumbing each time you use this app"
-    lash = None
+import lv2, zynjacku_c
 
 hint_uris = { "hidden": "http://home.gna.org/zynjacku/hints#hidden",
               "togglefloat": "http://home.gna.org/zynjacku/hints#togglefloat",
@@ -1508,9 +1479,16 @@ class PluginUIUniversal(PluginUI):
         self.layout_type = layout_type
 
         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
-        self.window.set_size_request(600,300)
+
+        # nasty workaround: we assume that dynparam plugins have bigger layout and
+        # non-dynparam plugins have no port grouping and thus their layout is vertical
+        if plugin.dynparams_supported:
+            self.window.set_size_request(600,300)
+        else:
+            self.window.set_size_request(200,400)
+
         self.window.set_title(plugin.get_instance_name())
-        self.window.set_role("zynjacku_synth_ui")
+        self.window.set_role("plugin_ui")
 
         self.window.connect("destroy", self.on_window_destroy)
 
@@ -1953,7 +1931,7 @@ class PluginUIUniversalParameterFloat(PluginUIUniversalParameter):
         if not map:
             #print "new map"
             new_map = True
-            map = zynjacku.MidiCcMap()
+            map = zynjacku_c.MidiCcMap()
             map.point_create(0, self.adjustment.lower)
             map.point_create(127, self.adjustment.upper)
             if not self.window.plugin.set_midi_cc_map(self.context, map):
@@ -2295,7 +2273,7 @@ class host:
             print 'Cannot get info for plugin "%s"' % uri
             return False
 
-        plugin = zynjacku.Plugin(
+        plugin = zynjacku_c.Plugin(
             uri = uri,
             name = info.name,
             dlpath = info.binary,
@@ -2377,8 +2355,12 @@ class host:
             #    for sp in splist:
             #        print "       Scale point %s: %s" % (sp[1], sp[0])
 
+        plugin.dynparams_supported = False
+
         for feature in info.requiredFeatures + info.optionalFeatures:
             plugin.add_supported_feature(feature)
+            if feature == "http://home.gna.org/lv2dynparam/v1":
+                plugin.dynparams_supported = True
 
         if not self.engine.construct_plugin(plugin):
             return False
@@ -2463,6 +2445,7 @@ class host:
                     license_map = {
                         "http://usefulinc.com/doap/licenses/gpl": "GNU General Public License",
                         "http://usefulinc.com/doap/licenses/lgpl":"GNU Lesser General Public License",
+                        "http://usefulinc.com/doap/licenses/unknown":"unknown", # fake doap license that is used by NASPRO
                         }
                     if license_map.has_key(plugin.license):
                         plugin.license_decoded = license_map[plugin.license]
@@ -2503,17 +2486,17 @@ class host:
             column_name = gtk.TreeViewColumn("Name", text_renderer, text=0)
             column_uri = gtk.TreeViewColumn("URI", text_renderer, text=1)
             column_license = gtk.TreeViewColumn("License", text_renderer, text=2)
-            column_author = gtk.TreeViewColumn("Author", text_renderer, text=3)
+            column_maintainer = gtk.TreeViewColumn("Maintainer", text_renderer, text=3)
 
             column_name.set_sort_column_id(0)
             column_uri.set_sort_column_id(1)
             column_license.set_sort_column_id(2)
-            column_author.set_sort_column_id(3)
+            column_maintainer.set_sort_column_id(3)
 
             plugin_repo_widget.append_column(column_name)
             plugin_repo_widget.append_column(column_uri)
             plugin_repo_widget.append_column(column_license)
-            plugin_repo_widget.append_column(column_author)
+            plugin_repo_widget.append_column(column_maintainer)
 
             store.set_sort_column_id(0, gtk.SORT_ASCENDING)
 
@@ -2602,7 +2585,7 @@ class host:
                         #print "%s='%f'" % (name, value)
                         parameters.append([name, value, node.getAttribute("mapid")])
                     elif node.nodeName == 'midi_cc_map':
-                        mapobj = zynjacku.MidiCcMap()
+                        mapobj = zynjacku_c.MidiCcMap()
                         mapid = node.getAttribute("id")
                         mapobj.cc_no_assign(int(node.getAttribute("cc_no")))
 
@@ -2746,12 +2729,6 @@ class host:
         print repr(obj1)
         print repr(obj2)
 
-class ZynjackuHost(host):
-    def __init__(self, client_name, preset_extension=None, preset_name=None, lash_client=None):
-        #print "ZynjackuHost constructor called."
-
-        host.__init__(self, zynjacku.Engine(), client_name, preset_extension, preset_name, lash_client)
-
 def run_about_dialog(transient_for, program_data):
     about = gtk.AboutDialog()
     about.set_transient_for(transient_for)
@@ -2771,287 +2748,14 @@ def run_about_dialog(transient_for, program_data):
     about.run()
     about.hide()
 
-class ZynjackuHostMulti(ZynjackuHost):
-    def __init__(self, program_data, client_name, uris, lash_client):
-        #print "ZynjackuHostMulti constructor called."
-        ZynjackuHost.__init__(self, client_name, "zynjacku", "synth stack", lash_client)
-        
-        self.program_data = program_data
-        self.glade_xml = program_data['glade_xml']
-
-        self.main_window = self.glade_xml.get_widget("zynjacku_main")
-        self.main_window.set_title(client_name)
-
-        self.statusbar = self.glade_xml.get_widget("statusbar")
-
-        self.hbox_menubar = self.glade_xml.get_widget("hbox_menubar")
-        self.midi_led = midi_led()
-        self.midi_led_frame = gtk.Frame()
-        self.midi_led_frame.set_shadow_type(gtk.SHADOW_OUT)
-        self.midi_led_frame.add(self.midi_led);
-        self.hbox_menubar.pack_start(self.midi_led_frame, False, False)
-
-	# Create our dictionary and connect it
-        dic = {"quit" : self.on_quit,
-               "about" : self.on_about,
-               "preset_load" : self.on_preset_load,
-               "preset_save_as" : self.on_preset_save_as,
-               "synth_load" : self.on_synth_load,
-               "synth_clear" : self.on_synth_clear,
-               }
-
-        self.signal_ids = []
-        for k, v in dic.items():
-            w = self.glade_xml.get_widget(k)
-            if not w:
-                print "failed to get glade widget '%s'" % k
-                continue
-            self.signal_ids.append([w, w.connect("activate", v)])
-
-        self.synths_widget = self.glade_xml.get_widget("treeview_synths")
-
-        self.store = gtk.ListStore(
-            gobject.TYPE_BOOLEAN,       # UI visible
-            gobject.TYPE_STRING,        # Instance name
-            gobject.TYPE_STRING,        # Plugin name
-            gobject.TYPE_STRING,        # Plugin URI
-            gobject.TYPE_PYOBJECT)      # Plugin object
-
-        text_renderer = gtk.CellRendererText()
-        self.toggle_renderer = gtk.CellRendererToggle()
-        self.toggle_renderer.set_property('activatable', True)
-
-        column_ui_visible = gtk.TreeViewColumn("UI", self.toggle_renderer)
-        column_ui_visible.add_attribute(self.toggle_renderer, "active", 0)
-        column_instance = gtk.TreeViewColumn("Instance", text_renderer, text=1)
-        column_name = gtk.TreeViewColumn("Name", text_renderer, text=2)
-        #column_uri = gtk.TreeViewColumn("URI", text_renderer, text=3)
-
-        self.synths_widget.append_column(column_ui_visible)
-        self.synths_widget.append_column(column_instance)
-        self.synths_widget.append_column(column_name)
-        #self.synths_widget.append_column(column_uri)
-
-        self.synths_widget.set_model(self.store)
-
-        self.main_window.show_all()
-        self.signal_ids.append([self.main_window, self.main_window.connect("destroy", self.on_quit)])
-
-        if len(uris) == 1 and uris[0][-9:] == ".zynjacku":
-            self.preset_load(uris[0])
-        else:
-            for uri in uris:
-                self.load_plugin(uri)
-            self.progress_window.hide()
-
-    def on_quit(self, window=None):
-        #print "ZynjackuHostMulti::on_quit() called"
-        for cid in self.signal_ids:
-            #print "disconnecting %u" % cid[1]
-            cid[0].disconnect(cid[1])
-            #print "host object refcount is %u" % sys.getrefcount(self)
-        gtk.main_quit()
-
-    def __del__(self):
-        #print "ZynjackuHostMulti destructor called."
-
-        self.store.clear()
-
-        ZynjackuHost.__del__(self)
-
-    def new_plugin(self, uri, parameters=[], maps={}):
-        self.progress_window.show(uri)
-        plugin = ZynjackuHost.new_plugin(self, uri, parameters, maps)
-        return plugin
-
-    def on_plugin_progress(self, engine, name, progress, message):
-        self.progress_window.progress(name, progress, message)
-
-    def update_midi_led(self):
-        self.midi_led.set(self.engine.get_midi_activity())
-        return True
-
-    def check_plugin(self, plugin):
-        ports_count = len(plugin.ports)
-        audio_in_ports_count = 0
-        audio_out_ports_count = 0
-        midi_in_ports_count = 0
-        control_ports_count = 0
-        string_ports_count = 0
-        event_ports_count = 0
-        midi_event_in_ports_count = 0
-
-        for port in plugin.ports:
-            if port.isAudio:
-                if port.isInput:
-                    audio_in_ports_count += 1
-                    continue
-                if port.isOutput:
-                    audio_out_ports_count += 1
-                    continue
-                continue
-            if port.isLarslMidi:
-                if port.isInput:
-                    midi_in_ports_count += 1
-                    continue
-                continue
-            if port.isEvent:
-                event_ports_count += 1
-                if port.isInput and "http://lv2plug.in/ns/ext/midi#MidiEvent" in port.events:
-                    midi_event_in_ports_count += 1
-                    continue
-                continue
-            if port.isControl:
-                control_ports_count += 1
-                continue
-            if port.isString:
-                string_ports_count += 1
-                continue
-
-        # TODO: we must be smarter and check for "optional connect" property
-        if (midi_in_ports_count + control_ports_count + string_ports_count + event_ports_count + audio_out_ports_count != ports_count) or \
-               (midi_in_ports_count + midi_event_in_ports_count != 1) or \
-               (audio_out_ports_count == 0):
-            #print "Skipping %s (%s), [synth] plugin with unsupported port configuration" % (plugin.name, plugin.uri)
-            #print "  midi input ports: %d" % midi_in_ports_count
-            #print "  control ports: %d" % control_ports_count
-            #print "  string ports: %d" % string_ports_count
-            #print "  event ports: %d" % event_ports_count
-            #print "  event midi input ports: %d" % midi_event_in_ports_count
-            #print "  audio input ports: %d" % audio_in_ports_count
-            #print "  audio output ports: %d" % audio_out_ports_count
-            #print "  total ports %d" % ports_count
-            return False
-
-#         print "Found \"simple\" synth plugin '%s' %s" % (plugin.name, plugin.uri)
-#         print "  midi input ports: %d" % midi_in_ports_count
-#         print "  control ports: %d" % control_ports_count
-#         print "  event ports: %d" % event_ports_count
-#         print "  event midi input ports: %d" % midi_event_in_ports_count
-#         print "  audio input ports: %d" % audio_in_ports_count
-#         print "  audio output ports: %d" % audio_out_ports_count
-#         print "  total ports %d" % ports_count
-        return True
-
-    def load_plugin(self, uri, parameters=[], maps={}):
-        statusbar_context_id = self.statusbar.get_context_id("loading plugin")
-        statusbar_id = self.statusbar.push(statusbar_context_id, "Loading %s" % uri)
-        while gtk.events_pending():
-            gtk.main_iteration()
-        self.statusbar.pop(statusbar_id)
-        synth = self.new_plugin(uri, parameters, maps)
-        if not synth:
-            self.statusbar.push(statusbar_context_id, "Failed to construct %s" % uri)
-        else:
-            row = False, synth.get_instance_name(), synth.get_name(), synth.uri, synth
-            self.store.append(row)
-            self.statusbar.remove(statusbar_context_id, statusbar_id)
-
-    def run(self):
-        toggled_connect_id = self.toggle_renderer.connect('toggled', self.on_ui_visible_toggled, self.store)
-
-        update_midi_led_callback_id = gobject.timeout_add(100, self.update_midi_led)
-
-        ZynjackuHost.run(self)
-
-        gobject.source_remove(update_midi_led_callback_id)
-
-        self.toggle_renderer.disconnect(toggled_connect_id)
-
-    def on_plugin_ui_window_destroyed(self, window, synth, row):
-        synth.ui_win.disconnect(synth.ui_win.destroy_connect_id) # signal connection holds reference to synth object...
-        synth.ui_win = None
-        row[0] = False
-
-    def on_ui_visible_toggled(self, cell, path, model):
-        #print "on_ui_visible_toggled() called."
-        if model[path][0]:
-            model[path][4].ui_win.hide()
-            model[path][0] = False
-        else:
-            if not model[path][4].ui_win:
-                if not self.create_plugin_ui(model[path][4], model[path]):
-                    return
-
-            statusbar_context_id = self.statusbar.get_context_id("loading plugin UI")
-            if model[path][4].ui_win.show():
-                model[path][0] = True
-            else:
-                self.statusbar.push(statusbar_context_id, "Failed to show synth UI")
-
-    def on_about(self, widget):
-        run_about_dialog(self.main_window, self.program_data)
-
-    def on_preset_load(self, widget):
-        self.preset_load_ask()
-
-    def preset_get_pre_plugins_xml(self):
-        xml = "<zynjacku>\n"
-        xml += "  <plugins>\n"
-        return xml
-
-    def preset_get_post_plugins_xml(self):
-        xml = "  </plugins>\n"
-        xml += "</zynjacku>\n"
-        return xml
-
-    def on_preset_save_as(self, widget):
-        self.preset_save_ask()
-
-    def on_synth_load(self, widget):
-        self.plugins_load("LV2 synth plugins")
-
-    def on_synth_clear(self, widget):
-        self.store.clear()
-        self.clear_plugins()
-
-class ZynjackuHostOne(ZynjackuHost):
-    def __init__(self, program_data, client_name, uri):
-        #print "ZynjackuHostOne constructor called."
-        ZynjackuHost.__init__(self, client_name, "zynjacku")
-
-        self.plugin = self.new_plugin(uri)
-        if not self.plugin:
-            print"Failed to construct %s" % uri
-            return
-
-        if not ZynjackuHost.create_plugin_ui(self, self.plugin):
-            print"Failed to create synth window"
-            return
-
-    def new_plugin(self, uri, parameters=[], maps={}):
-        self.progress_window.show(uri)
-        plugin = ZynjackuHost.new_plugin(self, uri, parameters, maps)
-        self.progress_window.hide()
-        return plugin
-
-    def on_plugin_progress(self, engine, name, progress, message):
-        self.progress_window.progress(name, progress, message)
-
-    def on_plugin_ui_window_destroyed(self, window, synth, row):
-        gtk.main_quit()
-
-    def run(self):
-        if not self.plugin:
-            self.run_done()
-            return
-
-        self.plugin.ui_win.show()
-        ZynjackuHost.run(self)
-
-    def __del__(self):
-        #print "ZynjackuHostOne destructor called."
-
-        ZynjackuHost.__del__(self)
-
 def get_program_data(program_name):
     program_data = {}
 
     program_data['name'] = program_name
-    if zynjacku.zynjacku_get_version() == "dev":
+    if zynjacku_c.zynjacku_get_version() == "dev":
         program_data['comments'] = "(development snapshot)"
     else:
-        program_data['version'] = zynjacku.zynjacku_get_version()
+        program_data['version'] = zynjacku_c.zynjacku_get_version()
 
     data_dir = os.path.dirname(sys.argv[0])
 
@@ -3105,37 +2809,3 @@ def register_types():
     gobject.type_register(PluginUIUniversalGroupToggleFloat)
     gobject.type_register(PluginUIUniversalParameterFloat)
     gobject.type_register(PluginUIUniversalParameterBool)
-
-def main():
-    program_data = get_program_data('zynjacku')
-
-    register_types()
-
-    client_name = "zynjacku"
-
-    if lash:                        # If LASH python bindings are available
-        # sys.argv is modified by this call
-        lash_client = lash.init(sys.argv, "zynjacku", lash.LASH_Config_File)
-    else:
-        lash_client = None
-
-    # TODO: generic argument processing goes here
-
-    # Yeah , this sounds stupid, we connected earlier, but we dont want to show this if we got --help option
-    # This issue should be fixed in pylash, there is a reason for having two functions for initialization after all
-    if lash_client:
-        print "Successfully connected to LASH server at " +  lash.lash_get_server_name(lash_client)
-
-    if len(sys.argv) == 2 and sys.argv[1][-9:] != ".zynjacku":
-        host = ZynjackuHostOne(program_data, client_name, sys.argv[1])
-    else:
-        host = ZynjackuHostMulti(program_data, client_name, sys.argv[1:], lash_client)
-
-    host.run()
-
-    #print "stone after host.run(), host object refcount is %u" % sys.getrefcount(host)
-    sys.stdout.flush()
-    sys.stderr.flush()
-
-if __name__ == '__main__':
-    main()

-- 
zynjacku packaging



More information about the pkg-multimedia-commits mailing list