[SCM] zynjacku packaging branch, master, updated. upstream/5-28-g8610ab7
mira-guest at users.alioth.debian.org
mira-guest at users.alioth.debian.org
Mon Oct 12 16:31:54 UTC 2009
The following commit has been merged in the master branch:
commit ccaf4f6692ea6f53716160cf609354ecdd4965e5
Author: Jaromír Mikeš <mira.mikes at seznam.cz>
Date: Mon Oct 12 18:28:31 2009 +0200
Imported Upstream version 5.2
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..405fb58 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.2.
#
# 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.2'
+PACKAGE_STRING='zynjacku 5.2'
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.2 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.2:";;
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.2
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.2, 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.2'
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.2, 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.2
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..759de4e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
#
AC_PREREQ(2.61)
-AC_INIT(zynjacku, 5)
+AC_INIT(zynjacku, 5.2)
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..9e87a09
--- a/zynjacku.py
+++ b/zynworld/host.py
@@ -30,35 +30,11 @@ 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
+import lv2, zynjacku_c
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
hint_uris = { "hidden": "http://home.gna.org/zynjacku/hints#hidden",
@@ -1508,9 +1484,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 +1936,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 +2278,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 +2360,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 +2450,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 +2491,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 +2590,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 +2734,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 +2753,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 +2814,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