From b07ebc27dfa2bc72d6c6b76caea5c0a2de238505 Mon Sep 17 00:00:00 2001 From: falkTX Date: Fri, 13 Aug 2010 10:06:49 +0100 Subject: [PATCH] Start 'katia', more jacklib functions, some fixes --- Makefile | 12 +-- katia | 21 ++++ klaudia | 12 +-- src/jacklib.py | 232 ++++++++++++++++++++++++++++++++++++++------ src/katia.py | 39 ++++++++ src/katia.rc | 30 ++++++ src/{main.py => klaudia.py} | 0 src/ui/katia.ui | 226 ++++++++++++++++++++++++++++++++++++++++++ src/ui/katia_audio.ui | 167 +++++++++++++++++++++++++++++++ src/w_katia.py | 208 +++++++++++++++++++++++++++++++++++++++ 10 files changed, 904 insertions(+), 43 deletions(-) create mode 100755 katia create mode 100644 src/katia.py create mode 100755 src/katia.rc rename src/{main.py => klaudia.py} (100%) create mode 100644 src/ui/katia.ui create mode 100644 src/ui/katia_audio.ui create mode 100644 src/w_katia.py diff --git a/Makefile b/Makefile index 2869b0b..58e4bd0 100755 --- a/Makefile +++ b/Makefile @@ -11,15 +11,9 @@ all: build build: # Generate python code from QtDesigner UI files -# pykdeuic4 -o ./src/ui_mainw.py ./ui/mainw.ui -# pykdeuic4 -o ./src/ui_renderw.py ./ui/renderw.ui + pykdeuic4 -o ./src/ui_katia.py ./src/ui/katia.ui + pykdeuic4 -o ./src/ui_katia_audio.py ./src/ui/katia_audio.ui pykdeuic4 -o ./src/ui_wizard.py ./src/ui/wizard.ui -# pykdeuic4 -o ./src/ui_dia_properties.py ./ui/dia_properties.ui -# pykdeuic4 -o ./src/ui_dia_studios.py ./ui/dia_studios.ui -# pykdeuic4 -o ./src/ui_tb_main.py ./ui/tb_main.ui -# pykdeuic4 -o ./src/ui_tb_apps.py ./ui/tb_apps.ui -# pykdeuic4 -o ./src/ui_tb_connections.py ./ui/tb_connections.ui -# pykdeuic4 -o ./src/ui_tb_mixer.py ./ui/tb_mixer.ui # Wizard Hacks (read: bug in KDE) sed "s/from PyKDE4 import kdeui/from PyKDE4 import kdeui, kio/" -i src/ui_wizard.py sed "s/QtGui.KFile/kio.KFile/" -i src/ui_wizard.py @@ -55,7 +49,7 @@ install: install -d $(DESTDIR)/$(PREFIX)/share/klaudia/templates/ install -d $(DESTDIR)/$(PREFIX)/share/klaudia/templates/Ardour/ # Install files - install -m 655 klaudia $(DESTDIR)/$(PREFIX)/bin/ + install -m 655 klaudia katia $(DESTDIR)/$(PREFIX)/bin/ install -m 644 klaudia.desktop $(DESTDIR)/$(PREFIX)/share/applications/ install -m 655 bins/* $(DESTDIR)/$(PREFIX)/share/klaudia/bins/ install -m 655 src/*.py src/*.rc $(DESTDIR)/$(PREFIX)/share/klaudia/src/ diff --git a/katia b/katia new file mode 100755 index 0000000..5c8ff43 --- /dev/null +++ b/katia @@ -0,0 +1,21 @@ +#!/bin/bash + +export APPMENU_DISPLAY_BOTH=1 + +PYTHON_FILE="" + +if [ -f ./src/katia.py ]; then + PYTHON_FILE="./src/katia.py" +else if [ -f /usr/local/share/klaudia/src/katia.py ]; then + PYTHON_FILE="/usr/local/share/klaudia/src/katia.py" +else if [ -f /usr/share/klaudia/src/katia.py ]; then + PYTHON_FILE="/usr/share/klaudia/src/katia.py" +else + echo "Katia is not installed correctly!" + exit +fi +fi +fi + +python "$PYTHON_FILE" "$@" + diff --git a/klaudia b/klaudia index 40d5c74..58d6f9d 100755 --- a/klaudia +++ b/klaudia @@ -12,12 +12,12 @@ export APPMENU_DISPLAY_BOTH=1 PYTHON_FILE="" -if [ -f ./src/main.py ]; then - PYTHON_FILE="./src/main.py" -else if [ -f /usr/local/share/klaudia/src/main.py ]; then - PYTHON_FILE="/usr/local/share/klaudia/src/main.py" -else if [ -f /usr/share/klaudia/src/main.py ]; then - PYTHON_FILE="/usr/share/klaudia/src/main.py" +if [ -f ./src/klaudia.py ]; then + PYTHON_FILE="./src/klaudia.py" +else if [ -f /usr/local/share/klaudia/src/klaudia.py ]; then + PYTHON_FILE="/usr/local/share/klaudia/src/klaudia.py" +else if [ -f /usr/share/klaudia/src/klaudia.py ]; then + PYTHON_FILE="/usr/share/klaudia/src/klaudia.py" else echo "Klaudia is not installed correctly!" exit diff --git a/src/jacklib.py b/src/jacklib.py index 997c796..0544307 100644 --- a/src/jacklib.py +++ b/src/jacklib.py @@ -3,7 +3,7 @@ # Imports -from ctypes import cdll, c_char_p +from ctypes import * # Load Jack shared library @@ -11,86 +11,262 @@ jacklib = cdll.LoadLibrary("libjack.so.0") # Functions + def get_version_string(): jacklib.jack_get_version_string.restype = c_char_p - return str(jacklib.jack_get_version_string()) - + return jacklib.jack_get_version_string() def client_open(client_name, options, status): return jacklib.jack_client_open(client_name, options, status) def client_close(client): - return int(jacklib.jack_client_close(client)) + jacklib.jack_client_close.restype = c_int + return jacklib.jack_client_close(client) def client_name_size(): - return int(jacklib.jack_client_name_size()) + jacklib.jack_client_name_size.restype = c_int + return jacklib.jack_client_name_size() def client_name(client): jacklib.jack_get_client_name.restype = c_char_p - return str(jacklib.jack_get_client_name(client)) - + return jacklib.jack_get_client_name(client) def activate(client): - return int(jacklib.jack_activate(client)) + jacklib.jack_activate.restype = c_int + return jacklib.jack_activate(client) def deactivate(client): - return int(jacklib.jack_deactivate(client)) + jacklib.jack_deactivate.restype = c_int + return jacklib.jack_deactivate(client) def get_client_pid(client): - return int(jacklib.jack_get_client_pid(client)) + jacklib.jack_get_client_pid.restype = c_int + return jacklib.jack_get_client_pid(client) + +def get_client_thread_id(client): + return jacklib.jack_get_client_thread_id(client) + +def is_realtime(client): + jacklib.jack_is_realtime.restype = c_bool + return jacklib.jack_is_realtime(client) + + + +# NOTE - NonCallbackAPI functions were skipped, not really useful here + + + +# ClientCallbacks + +def set_thread_init_callback(client, thread_init_callback, arg=None): + jacklib.jack_set_thread_init_callback.restype = c_int + return jacklib.jack_set_thread_init_callback(client, thread_init_callback, arg) + +def on_shutdown(client, shutdown_callback, arg=None): + jacklib.jack_on_shutdown(client, shutdown_callback, arg) + +def on_info_shutdown(client, shutdown_callback, arg=None): + jacklib.jack_on_info_shutdown(client, shutdown_callback, arg) + +def set_process_callback(client, process_callback, arg=None): + jacklib.jack_set_process_callback.restype = c_int + return jacklib.jack_set_(client, process_callback, arg) +def set_freewheel_callback(client, freewheel_callback, arg=None): + jacklib.jack_set_freewheel_callback.restype = c_int + return jacklib.jack_set_(client, freewheel_callback, arg) -def is_realtime(): - return bool(jacklib.jack_is_realtime()) +def set_buffer_size_callback(client, buffer_size_callback, arg=None): + jacklib.jack_set_buffer_size_callback.restype = c_int + return jacklib.jack_set_(client, buffer_size_callback, arg) + +def set_sample_rate_callback(client, srate_callback, arg=None): + jacklib.jack_set_sample_rate_callback.restype = c_int + return jacklib.jack_set_sample_rate_callback(client, srate_callback, arg) + +def set_client_registration_callback(client, registration_callback, arg=None): + jacklib.jack_set_client_registration_callback.restype = c_int + return jacklib.jack_set_client_registration_callback(client, registration_callback, arg) + +def set_port_registration_callback(client, registration_callback, arg=None): + jacklib.jack_set_port_registration_callback.restype = c_int + return jacklib.jack_set_port_registration_callback(client, registration_callback, arg) + +def set_port_connect_callback(client, connect_callback, arg=None): + jacklib.jack_set_port_connect_callback.restype = c_int + return jacklib.jack_set_port_connect_callback(client, connect_callback, arg) + +def set_port_rename_callback(client, rename_callback, arg=None): + jacklib.jack_set_port_rename_callback.restype = c_int + return jacklib.jack_set_port_rename_callback(client, rename_callback, arg) + +def set_graph_order_callback(client, graph_callback, arg=None): + jacklib.jack_set_graph_order_callback.restype = c_int + return jacklib.jack_set_graph_order_callback(client, graph_callback, arg) + +def set_xrun_callback(client, xrun_callback, arg=None): + jacklib.jack_set_xrun_callback.restype = c_int + return jacklib.jack_set_(client, xrun_callback, arg) + + + +# ServerClientControl def set_freewheel(client, onoff): - return int(jacklib.jack_set_freewheel(onoff)) + jacklib.jack_set_freewheel.restype = c_int + return jacklib.jack_set_freewheel(onoff) def set_buffer_size(client, nframes): - return int(jacklib.jack_set_buffer_size(nframes)) - + jacklib.jack_set_buffer_size.restype = c_int + return jacklib.jack_set_buffer_size(nframes) def get_sample_rate(client): - return int(jacklib.jack_get_sample_rate(client)) + return jacklib.jack_get_sample_rate(client) def get_buffer_size(client): - return int(jacklib.jack_get_buffer_size(client)) + return jacklib.jack_get_buffer_size(client) + +def cpu_load(client): + jacklib.jack_cpu_load.restype = c_float + return jacklib.jack_cpu_load(client) + + + +# PortFunctions -def get_cpu_load(client): - return float(jacklib.jack_get_cpu_load(client)) +def port_register(client, port_name, port_type, flags, buffer_size): + return jacklib.jack_port_register(client, port_name, port_type, flags, buffer_size) +def port_unregister(client, port): + jacklib.jack_port_unregister.restype = c_int + return jacklib.jack_port_unregister(client, port) def port_name(port): jacklib.jack_port_name.restype = c_char_p - return str(jacklib.jack_port_name(port)) + return jacklib.jack_port_name(port) def port_short_name(port): jacklib.jack_port_short_name.restype = c_char_p - return str(jacklib.jack_port_short_name(port)) + return jacklib.jack_port_short_name(port) def port_flags(port): - return int(jacklib.jack_port_flags(port)) + jacklib.jack_port_flags.restype = c_int + return jacklib.jack_port_flags(port) def port_type(port): jacklib.jack_port_type.restype = c_char_p - return str(jacklib.jack_port_type(port)) + return jacklib.jack_port_type(port) def port_type_id(port): return jacklib.jack_port_type_id(port) def port_is_mine(client, port): - return int(jacklib.jack_port_is_mine(client, port)) + jacklib.jack_port_is_mine.restype = c_int + return jacklib.jack_port_is_mine(client, port) def port_connected(port): - return int(jacklib.jack_port_connected(port)) + jacklib.jack_port_connected.restype = c_int + return jacklib.jack_port_connected(port) def port_connected_to(port, port_name): - return int(jacklib.jack_port_connected_to(port, port_name)) + jacklib.jack_port_connected_to.restype = c_int + return jacklib.jack_port_connected_to(port, port_name) -def port_get_connections(port): +def port_get_connections(port): # TODO - char** return jacklib.jack_port_get_connections(client, port) -def port_get_all_connections(client, port): +def port_get_all_connections(client, port): # TODO - char** return jacklib.jack_port_get_all_connections(client, port) +def port_get_latency(port): + return jacklib.jack_port_get_latency(port) + +def port_get_total_latency(client, port): + return jacklib.jack_port_get_total_latency(client, port) + +def port_set_latency(port, nframes): + jacklib.jack_port_set_latency(port, nframes) + +def recompute_total_latency(client, port): + jacklib.jack_recompute_total_latency.restype = c_int + return jacklib.jack_recompute_total_latency(client, port) + +def jack_recompute_total_latencies(): + jacklib.jack_recompute_total_latencies.restype = c_int + return jacklib.jack_jack_recompute_total_latencies() + +def port_set_name(port, port_name): + jacklib.jack_port_set_name.restype = c_int + return jacklib.jack_port_set_name(port, port_name) + +def port_set_alias(port, alias): + jacklib.jack_port_set_alias.restype = c_int + return jacklib.jack_port_set_alias(port, alias) + +def port_unset_alias(port, alias): + jacklib.jack_port_unset_alias.restype = c_int + return jacklib.jack_port_unset_alias(port, alias) + +def port_get_aliases(port, aliases): + jacklib.jack_port_get_aliases.restype = c_int + return jacklib.jack_port_get_aliases(port, aliases) + +def port_request_monitor(port, onoff): + jacklib.jack_port_request_monitor.restype = c_int + return jacklib.jack_port_request_monitor(port, onoff) + +def port_request_monitor_by_name(client, port_name, onoff): + jacklib.jack_port_request_monitor_by_name.restype = c_int + return jacklib.jack_port_request_monitor_by_name(client, port_name, onoff) + +def port_ensure_monitor(port, onoff): + jacklib.jack_port_ensure_monitor.restype = c_int + return jacklib.jack_port_ensure_monitor(port, onoff) + +def port_monitoring_input(port): + jacklib.jack_port_monitoring_input.restype = c_int + return jacklib.jack_port_monitoring_input(port) + +def jack_connect(client, source_port, destination_port): + jacklib.jack_connect.restype = c_int + return jacklib.jack_jack_connect(client, source_port, destination_port) + +def disconnect(client, source_port, destination_port): + jacklib.jack_disconnect.restype = c_int + return jacklib.jack_disconnect(client, source_port, destination_port) + +def port_disconnect(client, port): + jacklib.jack_port_disconnect.restype = c_int + return jacklib.jack_port_disconnect(client, port) + +def port_name_size(): + jacklib.jack_port_name_size.restype = c_int + return jacklib.jack_port_name_size() + +def port_type_size(): + jacklib.jack_port_type_size.restype = c_int + return jacklib.jack_port_type_size() + + + +# PortSearching + +def get_ports(client, port_name_pattern=None, type_name_pattern=None, flags=None): # TODO - char** + #jacklib.jack_get_ports.restype = ??? + return jacklib.jack_get_ports(client, port_name_pattern, type_name_pattern, flags) + +def port_by_name(client, port_name): + return jacklib.jack_port_by_name(client, port_name) + +def port_by_id(client, port_id): + return jacklib.jack_port_by_id(client, port_id) + + + +# TimeFunctions + +# TODO - write the rest of the stuff... + + + diff --git a/src/katia.py b/src/katia.py new file mode 100644 index 0000000..0e51995 --- /dev/null +++ b/src/katia.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +# Imports +import sys +from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineArgs +from PyKDE4.kdeui import KApplication +import w_katia + + +#--------------- main ------------------ +if __name__ == '__main__': + + # Application description + appName = "katia" + catalog = "" + programName = ki18n("Katia") + version = "0.2" + description = ki18n("Jack Audio Patchbay") + license = KAboutData.License_GPL_V2 + copyright = ki18n("(c) 2010 falkTX") + text = ki18n("Katia is a Patchbay for the Jack Audio Connection Kit, writen in Python (and KDE)") + homePage = "http://klaudia.sourceforge.net" + bugEmail = "falktx@gmail.com" + + aboutData = KAboutData(appName, catalog, programName, version, description, license, copyright, text, homePage, bugEmail) + aboutData.addAuthor(ki18n("falkTX"), ki18n("Main Developer"), "falktx@gmail.com", "") + + # Set Command-Line Options + KCmdLineArgs.init(sys.argv, aboutData) + + # App initialization + app = KApplication() + + # Show GUI + gui = w_katia.KatiaMainW() + gui.show() + sys.exit(app.exec_()) diff --git a/src/katia.rc b/src/katia.rc new file mode 100755 index 0000000..aa5051e --- /dev/null +++ b/src/katia.rc @@ -0,0 +1,30 @@ + + + + + + &View + + + + + + &Tools + + + + Set &Buffer Size + + + + + + + + + + + + + + diff --git a/src/main.py b/src/klaudia.py similarity index 100% rename from src/main.py rename to src/klaudia.py diff --git a/src/ui/katia.ui b/src/ui/katia.ui new file mode 100644 index 0000000..f7124ff --- /dev/null +++ b/src/ui/katia.ui @@ -0,0 +1,226 @@ + + + KatiaMainW + + + + 0 + 0 + 600 + 400 + + + + Katia + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Audio + + + true + + + true + + + + + + + MIDI + + + true + + + true + + + + + + + Canvas + + + true + + + true + + + + + + + + + + + + + + + 16777215 + 16 + + + + + 0 + + + + + + 0 + + + + + + + + + + + + + + + Qt::Vertical + + + + + + + + 0 + + + + + Jack Settings: + + + + + + + ????? Hz + + + + + + + ??? + + + + + + + ? + + + + + + + + + + Qt::Vertical + + + + + + + + 0 + + + + + 0 + + + DSP Load: %p% + + + + + + + + + + Qt::Vertical + + + + + + + + 0 + + + + + Drop-outs: + + + + + + + ?? + + + + + + + + + + + + + + + + KPushButton + QPushButton +
kpushbutton.h
+
+
+ + +
diff --git a/src/ui/katia_audio.ui b/src/ui/katia_audio.ui new file mode 100644 index 0000000..8a47752 --- /dev/null +++ b/src/ui/katia_audio.ui @@ -0,0 +1,167 @@ + + + AudioW + + + + 0 + 0 + 645 + 401 + + + + Form + + + + + + + + false + + + true + + + true + + + true + + + + Audio Outputs + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + + + + + 150 + 0 + + + + QFrame::NoFrame + + + QFrame::Raised + + + + + + + false + + + true + + + true + + + true + + + + Audio Inputs + + + AlignHCenter|AlignVCenter|AlignCenter + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Connect + + + + + + + &Disconnect + + + + + + + Disconnect &All + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Refresh + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + KPushButton + QPushButton +
kpushbutton.h
+
+
+ + +
diff --git a/src/w_katia.py b/src/w_katia.py new file mode 100644 index 0000000..bdfcbc4 --- /dev/null +++ b/src/w_katia.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + + +# Imports +from sys import path +from functools import partial +from PyQt4.QtCore import Qt, QSize, QTimer, SIGNAL, SLOT +from PyQt4.QtGui import QWidget +from PyKDE4.kdecore import i18n +from PyKDE4.kdeui import KAction, KIcon, KMessageBox, KStandardAction, KXmlGuiWindow +import jacklib, ui_katia, ui_katia_audio + + +# Audio Tab +class AudioW(QWidget, ui_katia_audio.Ui_AudioW): + def __init__(self, *args): + QWidget.__init__(self, *args) + self.setupUi(self) + + self.b_connect.setIcon(KIcon("network-connect")) + self.b_disconnect.setIcon(KIcon("network-disconnect")) + self.b_disconnect_all.setIcon(KIcon("network-disconnect")) + self.b_refresh.setIcon(KIcon("view-refresh")) + + self.b_connect.setEnabled(False) + self.b_disconnect.setEnabled(False) + self.b_disconnect_all.setEnabled(False) + + + + +# Main Window +class KatiaMainW(KXmlGuiWindow, ui_katia.Ui_KatiaMainW): + def __init__(self, *args): + KXmlGuiWindow.__init__(self, *args) + self.setupUi(self) + + # Connect to Jack + self.jack_client = jacklib.client_open("Katia", 0, 0) + + # Set-up actions + self.act_tw_audio = KAction(i18n("Audio"), self) + self.act_tw_midi = KAction(i18n("MIDI"), self) + self.act_tw_canvas = KAction(i18n("Canvas"), self) + self.act_bf_16 = KAction(i18n("16"), self) + self.act_bf_32 = KAction(i18n("32"), self) + self.act_bf_64 = KAction(i18n("64"), self) + self.act_bf_128 = KAction(i18n("128"), self) + self.act_bf_256 = KAction(i18n("256"), self) + self.act_bf_512 = KAction(i18n("512"), self) + self.act_bf_1024 = KAction(i18n("1024"), self) + self.act_bf_2048 = KAction(i18n("2048"), self) + self.act_bf_4096 = KAction(i18n("4096"), self) + self.act_bf_8192 = KAction(i18n("8192"), self) + + self.act_bf_list = ( self.act_bf_16, self.act_bf_32, self.act_bf_64, self.act_bf_128, self.act_bf_256, self.act_bf_512, + self.act_bf_1024, self.act_bf_2048, self.act_bf_4096, self.act_bf_8192 ) + + buffer_size = str(jacklib.get_buffer_size(self.jack_client)) + for i in range(len(self.act_bf_list)): + self.act_bf_list[i].setCheckable(True) + if (self.act_bf_list[i].text().replace("&","") == buffer_size): + self.act_bf_list[i].setChecked(True) + + self.act_tw_audio.setCheckable(True) + self.act_tw_midi.setCheckable(True) + self.act_tw_canvas.setCheckable(True) + + # Standard actions + KStandardAction.close(self.close, self.actionCollection()) + + # Add actions + self.actionCollection().addAction("tw_audio", self.act_tw_audio) + self.actionCollection().addAction("tw_midi", self.act_tw_midi) + self.actionCollection().addAction("tw_canvas", self.act_tw_canvas) + self.actionCollection().addAction("bf_16", self.act_bf_16) + self.actionCollection().addAction("bf_32", self.act_bf_32) + self.actionCollection().addAction("bf_64", self.act_bf_64) + self.actionCollection().addAction("bf_128", self.act_bf_128) + self.actionCollection().addAction("bf_256", self.act_bf_256) + self.actionCollection().addAction("bf_512", self.act_bf_512) + self.actionCollection().addAction("bf_1024", self.act_bf_1024) + self.actionCollection().addAction("bf_2048", self.act_bf_2048) + self.actionCollection().addAction("bf_4096", self.act_bf_4096) + self.actionCollection().addAction("bf_4096", self.act_bf_8192) + + # Connect actions to functions + self.connect(self.act_tw_audio, SIGNAL("triggered()"), partial(self.changeTabButton, "audio")) + self.connect(self.act_tw_midi, SIGNAL("triggered()"), partial(self.changeTabButton, "midi")) + self.connect(self.act_tw_canvas, SIGNAL("triggered()"), partial(self.changeTabButton, "canvas")) + self.connect(self.act_bf_16, SIGNAL("triggered()"), partial(self.setBufferSize, 16)) + self.connect(self.act_bf_32, SIGNAL("triggered()"), partial(self.setBufferSize, 32)) + self.connect(self.act_bf_64, SIGNAL("triggered()"), partial(self.setBufferSize, 64)) + self.connect(self.act_bf_128, SIGNAL("triggered()"), partial(self.setBufferSize, 128)) + self.connect(self.act_bf_256, SIGNAL("triggered()"), partial(self.setBufferSize, 256)) + self.connect(self.act_bf_512, SIGNAL("triggered()"), partial(self.setBufferSize, 512)) + self.connect(self.act_bf_1024, SIGNAL("triggered()"), partial(self.setBufferSize, 1024)) + self.connect(self.act_bf_2048, SIGNAL("triggered()"), partial(self.setBufferSize, 2048)) + self.connect(self.act_bf_4096, SIGNAL("triggered()"), partial(self.setBufferSize, 4096)) + self.connect(self.act_bf_4096, SIGNAL("triggered()"), partial(self.setBufferSize, 8192)) + + # Connect tab-buttons to pages + self.connect(self.tb_audio, SIGNAL("clicked()"), partial(self.changeTabButton, "audio")) + self.connect(self.tb_midi, SIGNAL("clicked()"), partial(self.changeTabButton, "midi")) + self.connect(self.tb_canvas, SIGNAL("clicked()"), partial(self.changeTabButton, "canvas")) + + # Set-up the GUI (Part 1, create the KDE stuff) + self.setupGUI(QSize(600, 400), KXmlGuiWindow.Default, path[0]+"/katia.rc") + + # Set-up the GUI (Part 2, set custom menu and status-bar, delete toolbar) + self.menuLayout.addWidget(self.menuBar()) + self.toolBar().deleteLater() + self.statusBar().setVisible(False) + self.actionCollection().action(u'options_configure_toolbars').setVisible(False) + self.actionCollection().action(u'options_show_statusbar').setVisible(False) + self.connect(self.statusBar(), SIGNAL("messageChanged(QString)"), self.sbW_msg_label, SLOT("setText(QString)")) + + # Set-up the GUI (Part 3, Load pages) + self.tw_audio = AudioW() + #self.tw_midi = w_katia_midi.MidiW() + #self.tw_canvas = w_katia_canvas.CanvasW() + self.tw_audio.setVisible(False) + #self.tw_midi.setVisible(False) + #self.tw_canvas.setVisible(False) + + # Set-up the GUI (Part 4, set default page) + self.tw_audio.setVisible(True) + self.tb_audio.setChecked(True) + self.act_tw_audio.setChecked(True) + self.act_tw_audio.setEnabled(False) + self.centralW.layout().addWidget(self.tw_audio) + self.currentTabPage = "audio" + + # Set-up the GUI (Part 5, update variables) + self.sbW_jack_SampleRate.setText(str(jacklib.get_sample_rate(self.jack_client))+" Hz") + self.sbW_jack_BufferSize.setText(str(jacklib.get_buffer_size(self.jack_client))) + + if (jacklib.is_realtime(self.jack_client)): + self.sbW_jack_RT.setText("RT") + else: + self.sbW_jack_RT.setText("") + + self.initPorts() + + + def initPorts(self): + print "going for ports" + + def setBufferSize(self, buffer_size): + if (jacklib.set_buffer_size(self.jack_client, buffer_size) > 0): + for i in range(len(self.act_bf_list)): + if (self.act_bf_list[i].text().replace("&","") == str(buffer_size)): + self.act_bf_list[i].setChecked(True) + else: + self.act_bf_list[i].setChecked(False) + else: + KMessageBox.error(self, i18n("Failed to set buffer size!"), i18n("Katia - Error")) + + def changeTabButton(self, button): + if (button != self.currentTabPage): + self.currentTabPage = button + # Remove central widget + #self.centralW.layout().takeAt(0) + # Restore all button states + self.tb_audio.setChecked(False) + self.tb_midi.setChecked(False) + self.tb_canvas.setChecked(False) + # Hide all pages (we only need one) + #self.tw_audio.setVisible(False) + #self.tw_midi.setVisible(False) + #self.tw_canvas.setVisible(False) + # For the menu too + self.act_tw_audio.setChecked(False) + self.act_tw_audio.setEnabled(True) + self.act_tw_midi.setChecked(False) + self.act_tw_midi.setEnabled(True) + self.act_tw_canvas.setChecked(False) + self.act_tw_canvas.setEnabled(True) + if (button == "audio"): + self.tb_audio.setChecked(True) + wToLoad = self.tw_audio + selMenu = self.act_tw_audio + elif (button == "midi"): + self.tb_midi.setChecked(True) + #wToLoad = self.tw_midi + selMenu = self.act_tw_midi + elif (button == "canvas"): + self.tb_canvas.setChecked(True) + #wToLoad = self.tw_canvas + selMenu = self.act_tw_canvas + #self.centralW.layout().addWidget(wToLoad) + #wToLoad.setVisible(True) + selMenu.setChecked(True) + selMenu.setEnabled(False) + + def updateSizes(self): + self.sbW_msg.setMinimumSize(self.width()/4, 16) + self.sbW_msg.setMaximumSize(self.width()/4, 16) + self.sbW_jack.setMaximumSize(self.width()/3, 16) + self.sbW_cpu.setMaximumSize(self.width()/4, 16) + self.sbW_drops.setMaximumSize(self.width()/8, 16) + + def resizeEvent(self, event): + self.updateSizes() + event.ignore() + + -- 2.11.4.GIT