Browse Source

Catia almost finished now, only missing JACK2 rename callback

tags/v0.9.0
falkTX 13 years ago
parent
commit
696685ba4b
5 changed files with 171 additions and 225 deletions
  1. +1
    -1
      src/catarina.py
  2. +17
    -31
      src/catia.py
  3. +7
    -2
      src/shared.py
  4. +133
    -190
      src/shared_jack.py
  5. +13
    -1
      src/ui/catia.ui

+ 1
- 1
src/catarina.py View File

@@ -863,7 +863,7 @@ class CatarinaMainW(QMainWindow, ui_catarina.Ui_CatarinaMainW):
elif (tag == "data"):
group_data = text.split(":")
if (len(group_data) == 7 and group_data[0].isdigit() and group_data[1].isdigit() and group_data[2].isdigit() and
is_number(group_data[3]) and is_number(group_data[4]) and is_number(group_data[5]) and is_number(group_data[6])):
isNumber(group_data[3]) and isNumber(group_data[4]) and isNumber(group_data[5]) and isNumber(group_data[6])):
group_obj = [None, None, None, None]
group_obj[iGroupId] = int(group_data[0])
group_obj[iGroupName] = group_name


+ 17
- 31
src/catia.py View File

@@ -76,8 +76,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.m_xruns = 0
self.m_buffer_size = 0
self.m_sample_rate = 0
self.m_last_buffer_size = 0
self.m_last_sample_rate = 0
self.m_next_sample_rate = 0

self.m_last_bpm = None
@@ -275,17 +273,22 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
"<tr><td align='right'><b>Port Latency:</b></td><td>&nbsp;%s</td></tr>"
"<tr><td align='right'><b>Total Port Latency:</b></td><td>&nbsp;%s</td></tr>"
"</table>"
% (group_name, port_short_name, port_nameR, alias1text, alias1text, flags_text, type_text, latency_text, latency_total_text))
% (group_name, port_short_name, port_nameR, alias1text, alias2text, flags_text, type_text, latency_text, latency_total_text))

QMessageBox.information(self, self.tr("Port Information"), info)

elif (action == patchcanvas.ACTION_PORT_RENAME):
port_id = value1
new_name = value_str
port_id = value1
port_short_name = unicode2ascii(value_str)

for port in self.m_port_list:
if (port[iPortId] == port_id):
port_nameR = port[iPortNameR]
if (port_nameR.split(":", 1)[0] == a2j_client_name):
a2j_split = port_nameR.split(":", 3)
port_name = "%s:%s: %s" % (a2j_split[0], a2j_split[1], port_short_name)
else:
port_name = "%s:%s" % (port[iPortGroupName], port_short_name)
break
else:
return
@@ -304,12 +307,12 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
elif (aliases[0] == 1 and self.m_savedSettings["Main/JackPortAlias"] == 1):
jacklib.port_unset_alias(port_ptr, aliases[1])

elif (aliases[0] == 0 and self.m_savedSettings["Main/JackPortAlias"] == 2):
if (aliases[0] == 0 and self.m_savedSettings["Main/JackPortAlias"] == 2):
# If 2nd alias is enabled and port had no previous aliases, set the 1st alias now
jacklib.port_set_alias(port_ptr, new_name)
jacklib.port_set_alias(port_ptr, port_name)

if (jacklib.port_set_alias(port_ptr, new_name) == 0):
patchcanvas.renamePort(port_id, new_name)
if (jacklib.port_set_alias(port_ptr, port_name) == 0):
patchcanvas.renamePort(port_id, port_short_name)

elif (action == patchcanvas.ACTION_PORTS_CONNECT):
port_a_id = value1
@@ -474,7 +477,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
port_id = self.m_last_port_id
group_id = -1

# Use the real port_name on m_port_list
port_nameR = port_name

alias_n = self.m_savedSettings["Main/JackPortAlias"]
@@ -486,11 +488,7 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
port_name = aliases[1]

port_flags = jacklib.port_flags(port_ptr)

if (":" in port_name):
group_name = port_name.split(":")[0]
else:
group_name = port_nameR.split(":")[0]
group_name = port_name.split(":", 1)[0]

if (port_flags & jacklib.JackPortIsInput):
port_mode = patchcanvas.PORT_MODE_INPUT
@@ -501,9 +499,8 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):

if (group_name == a2j_client_name):
haveA2J = True
port_name = str(jacklib.port_short_name(port_ptr), encoding="ascii")
port_type = patchcanvas.PORT_TYPE_MIDI_A2J
group_name = port_name.split(" [", 1)[0]
group_name = port_name.replace("%s:" % (a2j_client_name), "", 1).split(" [", 1)[0]
port_short_name = port_name.split("): ", 1)[1]

else:
@@ -519,17 +516,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
port_type = patchcanvas.PORT_TYPE_NULL

for group in self.m_group_list:
#if (haveA2J):
#if (" VST" in group_name and group_name[0].isdigit()):
#group_name = group_name.replace(group_name[0], "", 1) # <- TESTING (useful for vsthost/dssi-vst)

#if (group_name.lower() == group[1].lower() or # <- TESTING (useful for LMMS)
#group_name.split(" ")[0].lower() == group[1].split(" ")[0].lower() or # <- TESTING (useful for Renoise and Loomer plugins)
#"vst_"+group_name.rsplit(" ",1)[0].replace(" ","").lower() == group[1] # <- TESTING (useful for vsthost/dssi-vst)
#):
#group_id = group[0]
#break

if (group[iGroupName] == group_name):
group_id = group[iGroupId]
break
@@ -681,8 +667,8 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.pb_dsp_load.setMaximum(0)
self.pb_dsp_load.update()

#if (self.next_sample_rate):
#jack_sample_rate(self, self.next_sample_rate)
if (self.m_next_sample_rate):
jack_sample_rate(self, self.m_next_sample_rate)

patchcanvas.clear()

@@ -915,7 +901,7 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.act_settings_show_statusbar.setChecked(show_statusbar)
self.frame_statusbar.setVisible(show_statusbar)

transport_set_view(self, self.settings.value("TransportView", TRANSPORT_VIEW_HMS, type=int))
setTransportView(self, self.settings.value("TransportView", TRANSPORT_VIEW_HMS, type=int))

self.m_savedSettings = {
"Main/RefreshInterval": self.settings.value("Main/RefreshInterval", 100, type=int),


+ 7
- 2
src/shared.py View File

@@ -18,6 +18,7 @@

# Imports (Global)
import os, sys
from unicodedata import normalize
from PyQt4.QtCore import qWarning, SIGNAL, SLOT
from PyQt4.QtGui import QIcon, QMessageBox, QFileDialog

@@ -155,8 +156,8 @@ MIDI_CC_LIST = (
"0x5F FX 5 Depth [Phaser]"
)

# Check if a string is a number (floats support)
def is_number(string):
# Check if a string is a number (float support)
def isNumber(string):
if (string):
if (string.startswith("-")):
string = string.replace("-", "", 1)
@@ -179,6 +180,10 @@ def toList(value):
else:
return value

# Remove/convert non-ascii chars from a string
def unicode2ascii(string):
return normalize('NFKD', string).encode("ascii", "ignore").decode("utf-8")

# Get Icon from user theme, using our own as backup (Oxygen)
def getIcon(icon, size=16):
return QIcon.fromTheme(icon, QIcon(":/%ix%i/%s.png" % (size, size, icon)))


+ 133
- 190
src/shared_jack.py View File

@@ -90,93 +90,44 @@ jack.client = None
# -------------------------------------------------------------
# Property change calls

#def jack_buffer_size(self, buffer_size):
#if (buffer_size != self.buffer_size):
#if (jack.client):
#jacklib.set_buffer_size(jack.client, buffer_size)
#else:
#jacksettings.setBufferSize(buffer_size)
def jack_buffer_size(self, buffer_size):
if (self.m_buffer_size != buffer_size):
if (jack.client):
failed = bool(jacklib.set_buffer_size(jack.client, buffer_size) != 0)
else:
failed = bool(jacksettings.setBufferSize(buffer_size))

#else:
## Make GUIs show previous value
#if ("setBufferSize" in dir(self)):
#QTimer.singleShot(100, lambda bf=buffer_size: self.setBufferSize(bf))
#else:
#QTimer.singleShot(100, lambda parent=self, bf=buffer_size: setBufferSize(parent, bf))
if (failed):
print("Failed to change buffer-size as %i, reset to %i" % (buffer_size, self.m_buffer_size))
setBufferSize(self, self.m_buffer_size, True)

#def jack_sample_rate(self, sample_rate):
#if (jack.client):
#setSampleRate(self, sample_rate, True)
#else:
#jacksettings.setSampleRate(sample_rate)
#setSampleRate(self, sample_rate)
def jack_sample_rate(self, sample_rate):
if (jack.client):
setSampleRate(self, sample_rate, True)
else:
if (jacksettings.setSampleRate(sample_rate)):
setSampleRate(self, sample_rate)

#def jack_buffer_size_cb(self, text):
#if (text.isEmpty()): return
#jack_buffer_size(self, int(QStringStr(text).replace("*","")))
@pyqtSlot(str)
def slot_jackBufferSize_ComboBox(self, text):
if (not text or text.isdigit() == False):
return
jack_buffer_size(self, int(text))

#def jack_buffer_size_m(self, buffer_size):
#jack_buffer_size(self, buffer_size)
@pyqtSlot(int)
def slot_jackBufferSize_Menu(self, buffer_size):
jack_buffer_size(self, buffer_size)

#def jack_sample_rate_cb(self, text):
#if (text.isEmpty()): return
#jack_sample_rate(self, int(QStringStr(text).replace("*","")))
@pyqtSlot(str)
def slot_jackSampleRate_ComboBox(self, text):
if (not text or text.isdigit() == False):
return
jack_sample_rate(self, int(text))

# -------------------------------------------------------------
# Transport calls

#def transport_playpause(self, play):
#if (not jack.client): return
#if (play):
#jacklib.transport_start(jack.client)
#else:
#jacklib.transport_stop(jack.client)
#refreshTransport(self)

#def transport_stop(self):
#if (not jack.client): return
#jacklib.transport_stop(jack.client)
#jacklib.transport_locate(jack.client, 0)
#refreshTransport(self)

#def transport_backwards(self):
#if (not jack.client): return
#new_frame = int(jacklib.get_current_transport_frame(jack.client))-100000
#if (new_frame < 0): new_frame = 0
#jacklib.transport_locate(jack.client, new_frame)

#def transport_forwards(self):
#if (not jack.client): return
#new_frame = int(jacklib.get_current_transport_frame(jack.client))+100000
#jacklib.transport_locate(jack.client, new_frame)

#def transport_view_menu(self):
#menu = QMenu(self)
#act_t_hms = menu.addAction("Hours:Minutes:Seconds")
#act_t_bbt = menu.addAction("Beat:Bar:Tick")
#act_t_fr = menu.addAction("Frames")

#act_t_hms.setCheckable(True)
#act_t_bbt.setCheckable(True)
#act_t_fr.setCheckable(True)

#if (self.selected_transport_view == TRANSPORT_VIEW_HMS):
#act_t_hms.setChecked(True)
#elif (self.selected_transport_view == TRANSPORT_VIEW_BBT):
#act_t_bbt.setChecked(True)
#elif (self.selected_transport_view == TRANSPORT_VIEW_FRAMES):
#act_t_fr.setChecked(True)

#act_selected = menu.exec_(QCursor().pos())

#if (act_selected == act_t_hms):
#transport_set_view(self, TRANSPORT_VIEW_HMS)
#elif (act_selected == act_t_bbt):
#transport_set_view(self, TRANSPORT_VIEW_BBT)
#elif (act_selected == act_t_fr):
#transport_set_view(self, TRANSPORT_VIEW_FRAMES)

def transport_set_view(self, view):
def setTransportView(self, view):
if (view == TRANSPORT_VIEW_HMS):
self.m_selected_transport_view = TRANSPORT_VIEW_HMS
self.label_time.setMinimumWidth(QFontMetrics(self.label_time.font()).width("00:00:00")+3)
@@ -189,50 +140,64 @@ def transport_set_view(self, view):
else:
self.m_selected_transport_view = None

#def transport_bpm_set(self, bpm):
#if (not jack.client): return
#if (self.last_bpm != bpm):
#pos = jacklib.jack_position_t
#pos.valid = 0
#state = jacklib.transport_query(jack.client, pos)

#pos.beats_per_minute = bpm

#if (state > jacklib.TransportStopped):
#pos.frame += self.buffer_size
@pyqtSlot(bool)
def slot_transportPlayPause(self, play):
if (not jack.client): return
if (play):
jacklib.transport_start(jack.client)
else:
jacklib.transport_stop(jack.client)
refreshTransport(self)

#if (not pos.valid & jacklib.PositionBBT):
#pos.bar = 1
#pos.beat = 1
#pos.tick = 0
#pos.valid = jacklib.PositionBBT
#QTimer.singleShot(self.buffer_size, transport_fix)
@pyqtSlot()
def slot_transportStop(self):
if (not jack.client): return
jacklib.transport_stop(jack.client)
jacklib.transport_locate(jack.client, 0)
refreshTransport(self)

#jacklib.transport_reposition(jack.client, pos)
@pyqtSlot()
def slot_transportBackwards(self):
if (not jack.client): return
new_frame = jacklib.get_current_transport_frame(jack.client)-100000
if (new_frame < 0): new_frame = 0
jacklib.transport_locate(jack.client, new_frame)

#self.last_bpm = bpm
@pyqtSlot()
def slot_transportForwards(self):
if (not jack.client): return
new_frame = jacklib.get_current_transport_frame(jack.client)+100000
jacklib.transport_locate(jack.client, new_frame)

#def transport_fix():
#pos = jacklib.jack_position_t
#pos.valid = 0
#jacklib.transport_query(jack.client, pos)
#pos.frame += jacklib.get_buffer_size(jack.client)
#jacklib.transport_reposition(jack.client, pos)
@pyqtSlot()
def slot_transportViewMenu(self):
menu = QMenu(self)
act_t_hms = menu.addAction("Hours:Minutes:Seconds")
act_t_bbt = menu.addAction("Beat:Bar:Tick")
act_t_fr = menu.addAction("Frames")

# -------------------------------------------------------------
# Refresh GUI stuff
act_t_hms.setCheckable(True)
act_t_bbt.setCheckable(True)
act_t_fr.setCheckable(True)

#def refreshBufferSize(self):
#if (self.last_buffer_size != self.buffer_size):
#setBufferSize(self, self.buffer_size)
if (self.m_selected_transport_view == TRANSPORT_VIEW_HMS):
act_t_hms.setChecked(True)
elif (self.m_selected_transport_view == TRANSPORT_VIEW_BBT):
act_t_bbt.setChecked(True)
elif (self.m_selected_transport_view == TRANSPORT_VIEW_FRAMES):
act_t_fr.setChecked(True)

#self.last_buffer_size = self.buffer_size
act_selected = menu.exec_(QCursor().pos())

#def refreshSampleRate(self):
#if (self.last_sample_rate != self.sample_rate):
#setSampleRate(self, self.sample_rate)
if (act_selected == act_t_hms):
setTransportView(self, TRANSPORT_VIEW_HMS)
elif (act_selected == act_t_bbt):
setTransportView(self, TRANSPORT_VIEW_BBT)
elif (act_selected == act_t_fr):
setTransportView(self, TRANSPORT_VIEW_FRAMES)

#self.last_sample_rate = self.sample_rate
# -------------------------------------------------------------
# Refresh GUI stuff

def refreshDSPLoad(self):
if (not jack.client): return
@@ -250,44 +215,26 @@ def refreshTransport(self):
secs = time % 60
mins = (time / 60) % 60
hrs = (time / 3600) % 60
secH = minH = hrsH = ""
if secs < 10: secH = "0"
if mins < 10: minH = "0"
if hrs < 10: hrsH = "0"
self.label_time.setText("%s%i:%s%i:%s%i" % (hrsH, hrs, minH, mins, secH, secs))

#elif (self.m_selected_transport_view == TRANSPORT_VIEW_BBT):
#if (pos.valid & jacklib.PositionBBT):
#bar = pos.bar
#beat = pos.beat
#tick = pos.tick
#barH = beatH = tickH = ""
#if (bar == 0):
#beat = 0
#tick = 0
#barH = "00"
#elif bar < 10: barH = "00"
#elif bar < 100: barH = "0"
#if tick < 10: tickH = "000"
#elif tick < 100: tickH = "00"
#elif tick < 1000: tickH = "0"
#self.label_time.setText(barH+str(bar)+"|"+beatH+str(beat)+"|"+tickH+str(tick))
#else:
#self.label_time.setText("000|00|0000")

#elif (self.m_selected_transport_view == TRANSPORT_VIEW_FRAMES):
#frame = pos.frame
#frame1 = pos.frame % 1000
#frame2 = (pos.frame / 1000) % 1000
#frame3 = (pos.frame / 1000000) % 1000
#frame1h = frame2h = frame3h = ""
#if frame1 < 10: frame1h = "00"
#elif frame1 < 100: frame1h = "0"
#if frame2 < 10: frame2h = "00"
#elif frame2 < 100: frame2h = "0"
#if frame3 < 10: frame3h = "00"
#elif frame3 < 100: frame3h = "0"
#self.label_time.setText(frame3h+str(frame3)+"'"+frame2h+str(frame2)+"'"+frame1h+str(frame1))
self.label_time.setText("%02i:%02i:%02i" % (hrs, mins, secs))

elif (self.m_selected_transport_view == TRANSPORT_VIEW_BBT):
if (pos.valid & jacklib.JackPositionBBT):
bar = pos.bar
beat = pos.beat
tick = pos.tick
if (bar == 0):
beat = 0
tick = 0
self.label_time.setText("%03i|%02i|%04i" % (bar, beat, tick))
else:
self.label_time.setText("000|00|0000")

elif (self.m_selected_transport_view == TRANSPORT_VIEW_FRAMES):
frame = pos.frame
frame1 = pos.frame % 1000
frame2 = (pos.frame / 1000) % 1000
frame3 = (pos.frame / 1000000) % 1000
self.label_time.setText("%03i'%03i'%03i" % (frame3, frame2, frame1))

if (pos.valid & jacklib.JackPositionBBT):
if (self.m_last_bpm != pos.beats_per_minute):
@@ -320,8 +267,8 @@ def refreshTransport(self):
# -------------------------------------------------------------
# Set GUI stuff

def setBufferSize(self, buffer_size):
if (self.m_buffer_size == buffer_size):
def setBufferSize(self, buffer_size, forced=False):
if (self.m_buffer_size == buffer_size and not forced):
return

self.m_buffer_size = buffer_size
@@ -354,7 +301,7 @@ def setBufferSize(self, buffer_size):
for act_bf in self.act_jack_bf_list:
act_bf.setEnabled(True)
if (act_bf.text().replace("&","") == str(buffer_size)):
#if (act_bf.isChecked() == False):
if (act_bf.isChecked() == False):
act_bf.setChecked(True)
else:
if (act_bf.isChecked()):
@@ -371,13 +318,13 @@ def setSampleRate(self, sample_rate, future=False):

if (future):
pass
#if (self.sender() == self.cb_sample_rate): # Changed using GUI
#ask = QMessageBox.question(self, self.tr("Change Sample Rate"), self.tr("It's not possible to change Sample Rate while JACK is running.\n"
#"Do you want to change as soon as JACK stops?"), QMessageBox.Ok|QMessageBox.Cancel)
#if (ask == QMessageBox.Ok):
#self.next_sample_rate = sample_rate
#else:
#self.next_sample_rate = 0
if (self.sender() == self.cb_sample_rate): # Changed using GUI
ask = QMessageBox.question(self, self.tr("Change Sample Rate"), self.tr("It's not possible to change Sample Rate while JACK is running.\n"
"Do you want to change as soon as JACK stops?"), QMessageBox.Ok|QMessageBox.Cancel)
if (ask == QMessageBox.Ok):
self.m_next_sample_rate = sample_rate
else:
self.m_next_sample_rate = 0

# not future
else:
@@ -388,9 +335,6 @@ def setSampleRate(self, sample_rate, future=False):
sample_rate = sample_rates[i]
sample_rate_str = str(sample_rate)

#if (self.m_next_sample_rate != 0 and self.m_next_sample_rate != self.m_sample_rate and self.m_sample_rate == sample_rate):
#text += "*"

self.cb_sample_rate.setItemText(i, sample_rate_str)

if (self.m_sample_rate == sample_rate):
@@ -404,7 +348,7 @@ def setDSPLoad(self, dsp_load):
self.pb_dsp_load.setValue(dsp_load)

def setXruns(self, xruns):
self.b_xruns.setText("%s Xrun%s" % ((str(xruns) if (xruns >= 0) else "--"), ("" if (xruns == 1) else "s")))
self.b_xruns.setText("%s Xrun%s" % (str(xruns) if (xruns >= 0) else "--", "" if (xruns == 1) else "s"))

# -------------------------------------------------------------
# External Dialogs
@@ -433,33 +377,32 @@ def setJackConnections(self, modes):
self.connect(self.b_jack_clear_xruns, SIGNAL("clicked()"), SLOT("slot_JackClearXruns()"))
self.connect(self.b_jack_configure, SIGNAL("clicked()"), lambda: slot_showJackSettings(self))
self.connect(self.b_jack_render, SIGNAL("clicked()"), lambda: slot_showRender(self))
#self.connect(self.cb_buffer_size, SIGNAL("currentIndexChanged(QString)"), lambda: jack_buffer_size_cb(self, self.cb_buffer_size.currentText()))
#self.connect(self.cb_sample_rate, SIGNAL("currentIndexChanged(QString)"), lambda: jack_sample_rate_cb(self, self.cb_sample_rate.currentText()))
self.connect(self.cb_buffer_size, SIGNAL("currentIndexChanged(QString)"), lambda: slot_jackBufferSize_ComboBox(self, self.cb_buffer_size.currentText()))
self.connect(self.cb_sample_rate, SIGNAL("currentIndexChanged(QString)"), lambda: slot_jackSampleRate_ComboBox(self, self.cb_sample_rate.currentText()))
self.connect(self.b_xruns, SIGNAL("clicked()"), SLOT("slot_JackClearXruns()"))

#if ("buffer-size" in modes):
#self.connect(self.act_jack_bf_16, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 16))
#self.connect(self.act_jack_bf_32, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 32))
#self.connect(self.act_jack_bf_64, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 64))
#self.connect(self.act_jack_bf_128, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 128))
#self.connect(self.act_jack_bf_256, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 256))
#self.connect(self.act_jack_bf_512, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 512))
#self.connect(self.act_jack_bf_1024, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 1024))
#self.connect(self.act_jack_bf_2048, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 2048))
#self.connect(self.act_jack_bf_4096, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 4096))
#self.connect(self.act_jack_bf_8192, SIGNAL("triggered(bool)"), lambda: jack_buffer_size_m(self, 8192))

#if ("transport" in modes):
#self.connect(self.act_transport_play, SIGNAL("triggered(bool)"), lambda: transport_playpause(self, self.act_transport_play.isChecked()))
#self.connect(self.act_transport_stop, SIGNAL("triggered()"), lambda: transport_stop(self))
#self.connect(self.act_transport_backwards, SIGNAL("triggered()"), lambda: transport_backwards(self))
#self.connect(self.act_transport_forwards, SIGNAL("triggered()"), lambda: transport_forwards(self))
#self.connect(self.b_transport_play, SIGNAL("clicked(bool)"), lambda: transport_playpause(self, self.b_transport_play.isChecked()))
#self.connect(self.b_transport_stop, SIGNAL("clicked()"), lambda: transport_stop(self))
#self.connect(self.b_transport_backwards, SIGNAL("clicked()"), lambda: transport_backwards(self))
#self.connect(self.b_transport_forwards, SIGNAL("clicked()"), lambda: transport_forwards(self))
#self.connect(self.sb_bpm, SIGNAL("valueChanged(double)"), lambda: transport_bpm_set(self, self.sb_bpm.value()))
#self.connect(self.label_time, SIGNAL("customContextMenuRequested(QPoint)"), lambda: transport_view_menu(self))
if ("buffer-size" in modes):
self.connect(self.act_jack_bf_16, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 16))
self.connect(self.act_jack_bf_32, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 32))
self.connect(self.act_jack_bf_64, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 64))
self.connect(self.act_jack_bf_128, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 128))
self.connect(self.act_jack_bf_256, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 256))
self.connect(self.act_jack_bf_512, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 512))
self.connect(self.act_jack_bf_1024, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 1024))
self.connect(self.act_jack_bf_2048, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 2048))
self.connect(self.act_jack_bf_4096, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 4096))
self.connect(self.act_jack_bf_8192, SIGNAL("triggered(bool)"), lambda: slot_jackBufferSize_Menu(self, 8192))

if ("transport" in modes):
self.connect(self.act_transport_play, SIGNAL("triggered(bool)"), lambda: slot_transportPlayPause(self, self.act_transport_play.isChecked()))
self.connect(self.act_transport_stop, SIGNAL("triggered()"), lambda: slot_transportStop(self))
self.connect(self.act_transport_backwards, SIGNAL("triggered()"), lambda: slot_transportBackwards(self))
self.connect(self.act_transport_forwards, SIGNAL("triggered()"), lambda: slot_transportForwards(self))
self.connect(self.b_transport_play, SIGNAL("clicked(bool)"), lambda: slot_transportPlayPause(self, self.b_transport_play.isChecked()))
self.connect(self.b_transport_stop, SIGNAL("clicked()"), lambda: slot_transportStop(self))
self.connect(self.b_transport_backwards, SIGNAL("clicked()"), lambda: slot_transportBackwards(self))
self.connect(self.b_transport_forwards, SIGNAL("clicked()"), lambda: slot_transportForwards(self))
self.connect(self.label_time, SIGNAL("customContextMenuRequested(QPoint)"), lambda: slot_transportViewMenu(self))

if ("misc" in modes):
if (LINUX):


+ 13
- 1
src/ui/catia.ui View File

@@ -150,6 +150,18 @@
<property name="toolTip">
<string>Beats per Minute</string>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="prefix">
<string/>
</property>
<property name="suffix">
<string> BPM</string>
</property>
<property name="decimals">
<number>2</number>
</property>
@@ -446,7 +458,7 @@
<x>0</x>
<y>0</y>
<width>702</width>
<height>18</height>
<height>20</height>
</rect>
</property>
<widget class="QMenu" name="menu_File">


Loading…
Cancel
Save