Browse Source

Initial work for Claudia; some Catia fixes

tags/v0.9.0
falkTX 13 years ago
parent
commit
c76eeb8d77
18 changed files with 3685 additions and 83 deletions
  1. +16
    -1
      Makefile
  2. +137
    -0
      src/canvaspreviewframe.py
  3. +3
    -4
      src/catarina.py
  4. +65
    -59
      src/catia.py
  5. +1393
    -0
      src/claudia.py
  6. BIN
      src/icons/16x16/system-run.png
  7. BIN
      src/icons/48x48/claudia.png
  8. +3
    -0
      src/icons/icons.qrc
  9. +325
    -0
      src/icons/scalable/claudia.svg
  10. +1
    -1
      src/jackmeter.py
  11. +1
    -1
      src/jacksettings.py
  12. +0
    -1
      src/shared_canvas.py
  13. +16
    -12
      src/shared_jack.py
  14. +94
    -3
      src/shared_settings.py
  15. +1420
    -0
      src/ui/claudia.ui
  16. +111
    -0
      src/ui/claudia_studiolist.ui
  17. +76
    -0
      src/ui/claudia_studioname.ui
  18. +24
    -1
      src/ui/settings_app.ui

+ 16
- 1
Makefile View File

@@ -11,7 +11,7 @@ all: build


build: UI RES LANG build: UI RES LANG


UI: catarina catia tools
UI: catarina catia claudia tools


catarina: src/ui_catarina.py \ catarina: src/ui_catarina.py \
src/ui_catarina_addgroup.py src/ui_catarina_removegroup.py src/ui_catarina_renamegroup.py \ src/ui_catarina_addgroup.py src/ui_catarina_removegroup.py src/ui_catarina_renamegroup.py \
@@ -20,6 +20,12 @@ catarina: src/ui_catarina.py \


catia: src/ui_catia.py catia: src/ui_catia.py


claudia: src/ui_claudia.py \
src/ui_claudia_studioname.py src/ui_claudia_studiolist.py
# src/ui_claudia_createroom.py src/ui_claudia_addnew.py src/ui_claudia_addnew_klaudia.py \
# src/ui_claudia_runcustom.py src/ui_claudia_saveproject.py src/ui_claudia_projectproperties.py \
# src/ui_claudia_studiolist.py src/ui_claudia_studioname.py

tools: \ tools: \
src/ui_logs.py src/ui_render.py src/ui_xycontroller.py \ src/ui_logs.py src/ui_render.py src/ui_xycontroller.py \
src/ui_settings_app.py src/ui_settings_jack.py src/ui_settings_app.py src/ui_settings_jack.py
@@ -54,6 +60,15 @@ src/ui_catarina_disconnectports.py: src/ui/catarina_disconnectports.ui
src/ui_catia.py: src/ui/catia.ui src/ui_catia.py: src/ui/catia.ui
$(PYUIC) -o src/ui_catia.py $< $(PYUIC) -o src/ui_catia.py $<


src/ui_claudia.py: src/ui/claudia.ui
$(PYUIC) -o src/ui_claudia.py $<

src/ui_claudia_studioname.py: src/ui/claudia_studioname.ui
$(PYUIC) -o src/ui_claudia_studioname.py $<

src/ui_claudia_studiolist.py: src/ui/claudia_studiolist.ui
$(PYUIC) -o src/ui_claudia_studiolist.py $<

src/ui_logs.py: src/ui/logs.ui src/ui_logs.py: src/ui/logs.ui
$(PYUIC) -o src/ui_logs.py $< $(PYUIC) -o src/ui_logs.py $<




+ 137
- 0
src/canvaspreviewframe.py View File

@@ -0,0 +1,137 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Imports (Global)
from PyQt4.QtCore import Qt, QRectF, QTimer, SIGNAL, SLOT
from PyQt4.QtGui import QBrush, QColor, QCursor, QFrame, QPainter, QPen

iX = 0
iY = 1
iWidth = 2
iHeight = 3

# Custom Mini Canvas Preview, using a QFrame
class CanvasPreviewFrame(QFrame):
def __init__(self, parent):
super(CanvasPreviewFrame, self).__init__(parent)

self.m_mouseDown = False

self.scale = 1.0
self.scene = None
self.real_parent = None
self.fake_width = 0
self.fake_height = 0

self.render_source = self.getRenderSource()
self.render_target = QRectF(0, 0, 0, 0)

self.view_pad_x = 0.0
self.view_pad_y = 0.0
self.view_rect = [0.0, 0.0, 10.0, 10.0]

def init(self, scene, real_width, real_height):
self.scene = scene
self.fake_width = float(real_width)/15
self.fake_height = float(real_height)/15

self.setMinimumSize(self.fake_width/2, self.fake_height)
self.setMaximumSize(self.fake_width*4, self.fake_height)

self.render_target.setWidth(real_width)
self.render_target.setHeight(real_height)

def getRenderSource(self):
x_pad = (self.width()-self.fake_width)/2
y_pad = (self.height()-self.fake_height)/2
return QRectF(x_pad, y_pad, self.fake_width, self.fake_height)

def setViewPosX(self, xp):
x = xp*self.fake_width
x_ratio = (x/self.fake_width)*self.view_rect[iWidth]/self.scale
self.view_rect[iX] = x-x_ratio+self.render_source.x()
self.update()

def setViewPosY(self, yp):
y = yp*self.fake_height
y_ratio = (y/self.fake_height)*self.view_rect[iHeight]/self.scale
self.view_rect[iY] = y-y_ratio+self.render_source.y()
self.update()

def setViewScale(self, scale):
self.scale = scale
QTimer.singleShot(0, self.real_parent, SLOT("slot_miniCanvasCheckAll()"))

def setViewSize(self, width_p, height_p):
width = width_p*self.fake_width
height = height_p*self.fake_height
self.view_rect[iWidth] = width
self.view_rect[iHeight] = height
self.update()

def setRealParent(self, parent):
self.real_parent = parent

def handleMouseEvent(self, event_x, event_y):
x = float(event_x) - self.render_source.x() - (self.view_rect[iWidth]/self.scale/2)
y = float(event_y) - self.render_source.y() - (self.view_rect[iHeight]/self.scale/2)

max_width = self.view_rect[iWidth]/self.scale
max_height = self.view_rect[iHeight]/self.scale
if (max_width > self.fake_width): max_width = self.fake_width
if (max_height > self.fake_height): max_height = self.fake_height

if (x < 0.0): x = 0.0
elif (x > self.fake_width-max_width): x = self.fake_width-max_width

if (y < 0.0): y = 0.0
elif (y > self.fake_height-max_height): y = self.fake_height-max_height

self.view_rect[iX] = x+self.render_source.x()
self.view_rect[iY] = y+self.render_source.y()
self.update()

self.emit(SIGNAL("miniCanvasMoved(double, double)"), x*self.scale/self.fake_width, y*self.scale/self.fake_height)

def mousePressEvent(self, event):
if (event.button() == Qt.LeftButton):
self.m_mouseDown = True
self.setCursor(QCursor(Qt.SizeAllCursor))
self.handleMouseEvent(event.x(), event.y())
event.accept()

def mouseMoveEvent(self, event):
if (self.m_mouseDown):
self.handleMouseEvent(event.x(), event.y())
event.accept()

def mouseReleaseEvent(self, event):
if (self.m_mouseDown):
self.setCursor(QCursor(Qt.ArrowCursor))
self.m_mouseDown = False
QFrame.mouseReleaseEvent(self, event)

def paintEvent(self, event):
painter = QPainter(self)

painter.setBrush(QBrush(Qt.darkBlue, Qt.DiagCrossPattern))
painter.drawRect(0, 0, self.width(), self.height())

self.scene.render(painter, self.render_source, self.render_target, Qt.KeepAspectRatio)

max_width = self.view_rect[iWidth]/self.scale
max_height = self.view_rect[iHeight]/self.scale
if (max_width > self.fake_width): max_width = self.fake_width
if (max_height > self.fake_height): max_height = self.fake_height

painter.setBrush(QBrush(QColor(75,75,255,30)))
painter.setPen(QPen(Qt.blue, 2))
painter.drawRect(self.view_rect[iX], self.view_rect[iY], max_width, max_height)

QFrame.paintEvent(self, event)

def resizeEvent(self, event):
self.render_source = self.getRenderSource()
if (self.real_parent):
QTimer.singleShot(0, self.real_parent, SLOT("slot_miniCanvasCheckAll()"))
QFrame.resizeEvent(self, event)

+ 3
- 4
src/catarina.py View File

@@ -118,7 +118,8 @@ class CatarinaRemoveGroupW(QDialog, ui_catarina_removegroup.Ui_CatarinaRemoveGro


@pyqtSlot() @pyqtSlot()
def slot_setReturn(self): def slot_setReturn(self):
self.ret_group_id = int(self.tw_group_list.item(self.tw_group_list.currentRow(), 0).text())
if (self.tw_group_list.rowCount() >= 0):
self.ret_group_id = int(self.tw_group_list.item(self.tw_group_list.currentRow(), 0).text())


# Rename Group Dialog # Rename Group Dialog
class CatarinaRenameGroupW(QDialog, ui_catarina_renamegroup.Ui_CatarinaRenameGroupW): class CatarinaRenameGroupW(QDialog, ui_catarina_renamegroup.Ui_CatarinaRenameGroupW):
@@ -759,9 +760,6 @@ class CatarinaMainW(QMainWindow, ui_catarina.Ui_CatarinaMainW):
self.m_connection_list.remove(connection) self.m_connection_list.remove(connection)
break break


def init_ports_prepare(self):
pass

def init_ports(self): def init_ports(self):
for group in self.m_group_list: for group in self.m_group_list:
patchcanvas.addGroup(group[iGroupId], group[iGroupName], patchcanvas.SPLIT_YES if (group[iGroupSplit]) else patchcanvas.SPLIT_NO, group[iGroupIcon]) patchcanvas.addGroup(group[iGroupId], group[iGroupName], patchcanvas.SPLIT_YES if (group[iGroupSplit]) else patchcanvas.SPLIT_NO, group[iGroupIcon])
@@ -1209,6 +1207,7 @@ class CatarinaMainW(QMainWindow, ui_catarina.Ui_CatarinaMainW):


def closeEvent(self, event): def closeEvent(self, event):
self.saveSettings() self.saveSettings()
patchcanvas.clear()
QMainWindow.closeEvent(self, event) QMainWindow.closeEvent(self, event)


#--------------- main ------------------ #--------------- main ------------------


+ 65
- 59
src/catia.py View File

@@ -119,17 +119,18 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
patchcanvas.setFeatures(p_features) patchcanvas.setFeatures(p_features)
patchcanvas.init(self.scene, self.canvasCallback, DEBUG) patchcanvas.init(self.scene, self.canvasCallback, DEBUG)


# DBus Stuff
# Try to connect to jack
self.jackStarted()

# DBus checks
if (haveDBus): if (haveDBus):
if (DBus.jack and DBus.jack.IsStarted()):
self.jackStarted()
if (DBus.jack):
pass
else: else:
self.jackStarted(autoStop=True)
if (jack.client):
self.act_tools_jack_start.setEnabled(False)
self.act_tools_jack_stop.setEnabled(False)
self.act_jack_configure.setEnabled(False)
self.b_jack_configure.setEnabled(False)
self.act_tools_jack_start.setEnabled(False)
self.act_tools_jack_stop.setEnabled(False)
self.act_jack_configure.setEnabled(False)
self.b_jack_configure.setEnabled(False)


if (DBus.a2j): if (DBus.a2j):
if (DBus.a2j.is_started()): if (DBus.a2j.is_started()):
@@ -142,7 +143,8 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.act_tools_a2j_export_hw.setEnabled(False) self.act_tools_a2j_export_hw.setEnabled(False)
self.menu_A2J_Bridge.setEnabled(False) self.menu_A2J_Bridge.setEnabled(False)


else: #No DBus
else:
# No DBus
self.act_tools_jack_start.setEnabled(False) self.act_tools_jack_start.setEnabled(False)
self.act_tools_jack_stop.setEnabled(False) self.act_tools_jack_stop.setEnabled(False)
self.act_jack_configure.setEnabled(False) self.act_jack_configure.setEnabled(False)
@@ -152,10 +154,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.act_tools_a2j_export_hw.setEnabled(False) self.act_tools_a2j_export_hw.setEnabled(False)
self.menu_A2J_Bridge.setEnabled(False) self.menu_A2J_Bridge.setEnabled(False)


self.jackStarted(autoStop=True)

self.cb_sample_rate.setEnabled(bool(DBus.jack != None))

self.m_timer120 = self.startTimer(self.m_savedSettings["Main/RefreshInterval"]) self.m_timer120 = self.startTimer(self.m_savedSettings["Main/RefreshInterval"])
self.m_timer600 = self.startTimer(self.m_savedSettings["Main/RefreshInterval"]*5) self.m_timer600 = self.startTimer(self.m_savedSettings["Main/RefreshInterval"]*5)


@@ -353,12 +351,9 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
jacklib.disconnect(jack.client, port_a_nameR, port_b_nameR) jacklib.disconnect(jack.client, port_a_nameR, port_b_nameR)


def init_jack(self): def init_jack(self):
if (not jack.client): # Jack Crash/Bug ?
self.menu_Transport.setEnabled(False)
self.group_transport.setEnabled(False)
return

self.m_xruns = 0 self.m_xruns = 0
self.m_next_sample_rate = 0

self.m_last_bpm = None self.m_last_bpm = None
self.m_last_transport_state = None self.m_last_transport_state = None


@@ -367,8 +362,8 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
realtime = bool(int(jacklib.is_realtime(jack.client))) realtime = bool(int(jacklib.is_realtime(jack.client)))


setBufferSize(self, buffer_size) setBufferSize(self, buffer_size)
setRealTime(self, realtime)
setSampleRate(self, sample_rate) setSampleRate(self, sample_rate)
setRealTime(self, realtime)
setXruns(self, 0) setXruns(self, 0)


refreshDSPLoad(self) refreshDSPLoad(self)
@@ -376,15 +371,13 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):


self.init_callbacks() self.init_callbacks()
self.init_ports() self.init_ports()

self.scene.zoom_fit() self.scene.zoom_fit()
self.scene.zoom_reset() self.scene.zoom_reset()


jacklib.activate(jack.client) jacklib.activate(jack.client)


def init_callbacks(self): def init_callbacks(self):
if (not jack.client):
return

jacklib.set_buffer_size_callback(jack.client, self.JackBufferSizeCallback, None) jacklib.set_buffer_size_callback(jack.client, self.JackBufferSizeCallback, None)
jacklib.set_sample_rate_callback(jack.client, self.JackSampleRateCallback, None) jacklib.set_sample_rate_callback(jack.client, self.JackSampleRateCallback, None)
jacklib.set_xrun_callback(jack.client, self.JackXRunCallback, None) jacklib.set_xrun_callback(jack.client, self.JackXRunCallback, None)
@@ -396,9 +389,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
if (JACK2): if (JACK2):
jacklib.set_port_rename_callback(jack.client, self.JackPortRenameCallback, None) jacklib.set_port_rename_callback(jack.client, self.JackPortRenameCallback, None)


def init_ports_prepare(self):
pass

def init_ports(self): def init_ports(self):
if (not jack.client): if (not jack.client):
return return
@@ -536,9 +526,9 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.m_last_port_id += 1 self.m_last_port_id += 1


if (group_id not in self.m_group_split_list and port_flags & jacklib.JackPortIsPhysical): if (group_id not in self.m_group_split_list and port_flags & jacklib.JackPortIsPhysical):
patchcanvas.splitGroup(group_id)
patchcanvas.setGroupIcon(group_id, patchcanvas.ICON_HARDWARE)
self.m_group_split_list.append(group_id)
patchcanvas.splitGroup(group_id)
patchcanvas.setGroupIcon(group_id, patchcanvas.ICON_HARDWARE)
self.m_group_split_list.append(group_id)


return port_id return port_id


@@ -610,12 +600,11 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.m_connection_list.remove(connection) self.m_connection_list.remove(connection)
break break


def jackStarted(self, autoStop=False):
def jackStarted(self):
if (not jack.client): if (not jack.client):
jack.client = jacklib.client_open_uuid("catia", jacklib.JackNoStartServer, None, "")
if (autoStop and not jack.client):
self.jackStopped()
return
jack.client = jacklib.client_open_uuid("catia", jacklib.JackNoStartServer|jacklib.JackSessionID, None, "")
if (not jack.client):
return self.jackStopped()


self.act_jack_render.setEnabled(canRender) self.act_jack_render.setEnabled(canRender)
self.b_jack_render.setEnabled(canRender) self.b_jack_render.setEnabled(canRender)
@@ -623,8 +612,9 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.group_transport.setEnabled(True) self.group_transport.setEnabled(True)
self.menuJackServer(True) self.menuJackServer(True)


if (DBus.jack):
self.cb_sample_rate.setEnabled(True)
self.cb_buffer_size.setEnabled(True)
self.cb_sample_rate.setEnabled(True) # DBus.jack and jacksettings.getSampleRate() != -1
self.menu_Jack_Buffer_Size.setEnabled(True)


self.pb_dsp_load.setMaximum(100) self.pb_dsp_load.setMaximum(100)
self.pb_dsp_load.setValue(0) self.pb_dsp_load.setValue(0)
@@ -633,19 +623,34 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.init_jack() self.init_jack()


def jackStopped(self): def jackStopped(self):
if (haveDBus):
self.DBusReconnect()
#if (haveDBus):
#self.DBusReconnect()


# client already closed # client already closed
jack.client = None jack.client = None


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

if (DBus.jack): if (DBus.jack):
if (self.cb_buffer_size.isEnabled()):
setBufferSize(self, jacksettings.getBufferSize())
if (self.cb_sample_rate.isEnabled()):
setSampleRate(self, jacksettings.getSampleRate())
buffer_size = jacksettings.getBufferSize()
sample_rate = jacksettings.getSampleRate()
buffer_size_test = bool(buffer_size != -1)
sample_rate_test = bool(sample_rate != -1)

if (buffer_size_test):
setBufferSize(self, buffer_size)

if (sample_rate_test):
setSampleRate(self, sample_rate)

setRealTime(self, jacksettings.isRealtime()) setRealTime(self, jacksettings.isRealtime())
setXruns(self, -1) setXruns(self, -1)

self.cb_buffer_size.setEnabled(buffer_size_test)
self.cb_sample_rate.setEnabled(sample_rate_test)
self.menu_Jack_Buffer_Size.setEnabled(buffer_size_test)

else: else:
self.cb_buffer_size.setEnabled(False) self.cb_buffer_size.setEnabled(False)
self.cb_sample_rate.setEnabled(False) self.cb_sample_rate.setEnabled(False)
@@ -668,9 +673,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.pb_dsp_load.setMaximum(0) self.pb_dsp_load.setMaximum(0)
self.pb_dsp_load.update() self.pb_dsp_load.update()


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

patchcanvas.clear() patchcanvas.clear()


def a2jStarted(self): def a2jStarted(self):
@@ -719,6 +721,11 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
DBus.a2j = None DBus.a2j = None
a2j_client_name = None a2j_client_name = None


def JackXRunCallback(self, arg):
if (DEBUG): print("JackXRunCallback()")
self.emit(SIGNAL("XRunCallback()"))
return 0

def JackBufferSizeCallback(self, buffer_size, arg): def JackBufferSizeCallback(self, buffer_size, arg):
if (DEBUG): print("JackBufferSizeCallback(%i)" % (buffer_size)) if (DEBUG): print("JackBufferSizeCallback(%i)" % (buffer_size))
self.emit(SIGNAL("BufferSizeCallback(int)"), buffer_size) self.emit(SIGNAL("BufferSizeCallback(int)"), buffer_size)
@@ -729,11 +736,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.emit(SIGNAL("SampleRateCallback(int)"), sample_rate) self.emit(SIGNAL("SampleRateCallback(int)"), sample_rate)
return 0 return 0


def JackXRunCallback(self, arg):
if (DEBUG): print("JackXRunCallback()")
self.emit(SIGNAL("XRunCallback()"))
return 0

def JackPortRegistrationCallback(self, port_id, register_yesno, arg): def JackPortRegistrationCallback(self, port_id, register_yesno, arg):
if (DEBUG): print("JackPortRegistrationCallback(%i, %i)" % (port_id, register_yesno)) if (DEBUG): print("JackPortRegistrationCallback(%i, %i)" % (port_id, register_yesno))
self.emit(SIGNAL("PortRegistrationCallback(int, bool)"), port_id, bool(register_yesno)) self.emit(SIGNAL("PortRegistrationCallback(int, bool)"), port_id, bool(register_yesno))
@@ -744,7 +746,7 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
self.emit(SIGNAL("PortConnectCallback(int, int, bool)"), port_a, port_b, bool(connect_yesno)) self.emit(SIGNAL("PortConnectCallback(int, int, bool)"), port_a, port_b, bool(connect_yesno))
return 0 return 0


def JackPortRenameCallback(self, port_id, old_name, new_name, arg=None):
def JackPortRenameCallback(self, port_id, old_name, new_name, arg):
if (DEBUG): print("JackPortRenameCallback(%i, %s, %s)" % (port_id, old_name, new_name)) if (DEBUG): print("JackPortRenameCallback(%i, %s, %s)" % (port_id, old_name, new_name))
self.emit(SIGNAL("PortRenameCallback(int, QString, QString)"), port_id, str(old_name, encoding="ascii"), str(new_name, encoding="ascii")) self.emit(SIGNAL("PortRenameCallback(int, QString, QString)"), port_id, str(old_name, encoding="ascii"), str(new_name, encoding="ascii"))
return 0 return 0
@@ -766,7 +768,7 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):


#jacklib.session_event_free(event) #jacklib.session_event_free(event)


def JackShutdownCallback(self, arg=None):
def JackShutdownCallback(self, arg):
if (DEBUG): print("JackShutdownCallback()") if (DEBUG): print("JackShutdownCallback()")
self.emit(SIGNAL("ShutdownCallback()")) self.emit(SIGNAL("ShutdownCallback()"))
return 0 return 0
@@ -774,9 +776,13 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
@pyqtSlot() @pyqtSlot()
def slot_JackServerStart(self): def slot_JackServerStart(self):
if (DBus.jack): if (DBus.jack):
return DBus.jack.StartServer()
else:
return False
try:
ret = bool(DBus.jack.StartServer())
return ret
except:
QMessageBox.warning(self, self.tr("Warning"), self.tr("Failed to start JACK, please check the logs for more information."))
self.jackStopped()
return False


@pyqtSlot() @pyqtSlot()
def slot_JackServerStop(self): def slot_JackServerStop(self):
@@ -787,8 +793,9 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):


@pyqtSlot() @pyqtSlot()
def slot_JackClearXruns(self): def slot_JackClearXruns(self):
self.m_xruns = 0
setXruns(self, 0)
if (jack.client):
self.m_xruns = 0
setXruns(self, 0)


@pyqtSlot() @pyqtSlot()
def slot_A2JBridgeStart(self): def slot_A2JBridgeStart(self):
@@ -881,7 +888,6 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
@pyqtSlot() @pyqtSlot()
def slot_ShutdownCallback(self): def slot_ShutdownCallback(self):
self.jackStopped() self.jackStopped()
jack.client = None


@pyqtSlot() @pyqtSlot()
def slot_configureCatia(self): def slot_configureCatia(self):
@@ -938,7 +944,7 @@ class CatiaMainW(QMainWindow, ui_catia.Ui_CatiaMainW):
setTransportView(self, self.settings.value("TransportView", TRANSPORT_VIEW_HMS, type=int)) setTransportView(self, self.settings.value("TransportView", TRANSPORT_VIEW_HMS, type=int))


self.m_savedSettings = { self.m_savedSettings = {
"Main/RefreshInterval": self.settings.value("Main/RefreshInterval", 100, type=int),
"Main/RefreshInterval": self.settings.value("Main/RefreshInterval", 120, type=int),
"Main/JackPortAlias": self.settings.value("Main/JackPortAlias", 2, type=int), "Main/JackPortAlias": self.settings.value("Main/JackPortAlias", 2, type=int),
"Canvas/Theme": self.settings.value("Canvas/Theme", patchcanvas.getDefaultThemeName(), type=str), "Canvas/Theme": self.settings.value("Canvas/Theme", patchcanvas.getDefaultThemeName(), type=str),
"Canvas/AutoHideGroups": self.settings.value("Canvas/AutoHideGroups", False, type=bool), "Canvas/AutoHideGroups": self.settings.value("Canvas/AutoHideGroups", False, type=bool),


+ 1393
- 0
src/claudia.py
File diff suppressed because it is too large
View File


BIN
src/icons/16x16/system-run.png View File

Before After
Width: 16  |  Height: 16  |  Size: 869B

BIN
src/icons/48x48/claudia.png View File

Before After
Width: 48  |  Height: 48  |  Size: 3.2KB

+ 3
- 0
src/icons/icons.qrc View File

@@ -20,6 +20,7 @@
<file>16x16/media-seek-forward.png</file> <file>16x16/media-seek-forward.png</file>
<file>16x16/network-connect.png</file> <file>16x16/network-connect.png</file>
<file>16x16/network-disconnect.png</file> <file>16x16/network-disconnect.png</file>
<file>16x16/system-run.png</file>
<file>16x16/user-trash.png</file> <file>16x16/user-trash.png</file>
<file>16x16/view-refresh.png</file> <file>16x16/view-refresh.png</file>
<file>16x16/view-sort-ascending.png</file> <file>16x16/view-sort-ascending.png</file>
@@ -31,6 +32,7 @@


<file>48x48/catarina.png</file> <file>48x48/catarina.png</file>
<file>48x48/catia.png</file> <file>48x48/catia.png</file>
<file>48x48/claudia.png</file>
<file>48x48/canvas.png</file> <file>48x48/canvas.png</file>
<file>48x48/exec.png</file> <file>48x48/exec.png</file>
<file>48x48/jack.png</file> <file>48x48/jack.png</file>
@@ -39,6 +41,7 @@


<file>scalable/catarina.svg</file> <file>scalable/catarina.svg</file>
<file>scalable/catia.svg</file> <file>scalable/catia.svg</file>
<file>scalable/claudia.svg</file>
<file>scalable/jack.svg</file> <file>scalable/jack.svg</file>
<file>scalable/pb_generic.svg</file> <file>scalable/pb_generic.svg</file>
<file>scalable/pb_hardware.svg</file> <file>scalable/pb_hardware.svg</file>


+ 325
- 0
src/icons/scalable/claudia.svg View File

@@ -0,0 +1,325 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="256"
id="svg6140"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="New document 6">
<defs
id="defs6142">
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter7476">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="5.2386819"
id="feGaussianBlur7478" />
</filter>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter6286-7-6"
x="-0.13600001"
width="1.272"
y="-0.153"
height="1.306">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="4.08"
id="feGaussianBlur6288-2-1" />
</filter>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient10261"
id="radialGradient4872"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.77330692,0,-17.992775)"
cx="620.23364"
cy="-79.370644"
fx="620.23364"
fy="-79.370644"
r="30.274588" />
<linearGradient
id="linearGradient10261">
<stop
style="stop-color:#677b94;stop-opacity:0.63846153;"
offset="0"
id="stop10263" />
<stop
style="stop-color:#677b94;stop-opacity:0;"
offset="1"
id="stop10265" />
</linearGradient>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter10233-5">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="1.6710923"
id="feGaussianBlur10235-2" />
</filter>
<filter
color-interpolation-filters="sRGB"
inkscape:collect="always"
id="filter8786-73">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="8.96"
id="feGaussianBlur8788-2" />
</filter>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4657-1"
id="linearGradient4868"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.83385449,0,0,0.83385449,-12.083733,130.8065)"
x1="241.21584"
y1="795.42145"
x2="-21.002575"
y2="516.61938" />
<linearGradient
id="linearGradient4657-1">
<stop
style="stop-color:#000000;stop-opacity:1"
offset="0"
id="stop4659-5" />
<stop
id="stop4661-33"
offset="0.29307336"
style="stop-color:#500000;stop-opacity:1" />
<stop
id="stop4663-82"
offset="0.80562556"
style="stop-color:#a00000;stop-opacity:1" />
<stop
style="stop-color:#d40000;stop-opacity:1"
offset="1"
id="stop4665-8" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3902-8"
id="linearGradient4870"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.83385449,0,0,0.83385449,-12.083733,130.8065)"
x1="320.00772"
y1="662.08124"
x2="-128.07874"
y2="629.75647" />
<linearGradient
id="linearGradient3902-8">
<stop
style="stop-color:#783c00;stop-opacity:1"
offset="0"
id="stop3904-0" />
<stop
id="stop3936-8"
offset="0.07563529"
style="stop-color:#d4a41c;stop-opacity:1" />
<stop
id="stop3934-6"
offset="0.14044002"
style="stop-color:#743800;stop-opacity:1" />
<stop
id="stop3932-9"
offset="0.20430526"
style="stop-color:#fcf87c;stop-opacity:1" />
<stop
id="stop3930-33"
offset="0.26901498"
style="stop-color:#a86c00;stop-opacity:1" />
<stop
id="stop3928-743"
offset="0.3417097"
style="stop-color:#9c6000;stop-opacity:1" />
<stop
id="stop3926-71"
offset="0.41261438"
style="stop-color:#fcfc80;stop-opacity:1" />
<stop
id="stop3924-3"
offset="0.48499879"
style="stop-color:#8c5000;stop-opacity:1" />
<stop
id="stop3922-9"
offset="0.54586536"
style="stop-color:#fcfc80;stop-opacity:1" />
<stop
id="stop3920-6"
offset="0.62692177"
style="stop-color:#d09c14;stop-opacity:1" />
<stop
id="stop3918-42"
offset="0.68774176"
style="stop-color:#804400;stop-opacity:1" />
<stop
id="stop3916-02"
offset="0.75042593"
style="stop-color:#d0a014;stop-opacity:0.9372549;" />
<stop
id="stop3914-9"
offset="0.81777459"
style="stop-color:#743800;stop-opacity:1" />
<stop
id="stop3912-5"
offset="0.87812954"
style="stop-color:#d0a014;stop-opacity:0.74901961;" />
<stop
id="stop3910-7"
offset="0.94099933"
style="stop-color:#743800;stop-opacity:1" />
<stop
style="stop-color:#fcfc80;stop-opacity:1"
offset="1"
id="stop3906-4" />
</linearGradient>
<linearGradient
y2="516.61938"
x2="-21.002575"
y1="795.42145"
x1="241.21584"
gradientTransform="matrix(0.83385449,0,0,0.83385449,-12.083733,130.8065)"
gradientUnits="userSpaceOnUse"
id="linearGradient6136"
xlink:href="#linearGradient4657-1"
inkscape:collect="always" />
<linearGradient
y2="629.75647"
x2="-128.07874"
y1="662.08124"
x1="320.00772"
gradientTransform="matrix(0.83385449,0,0,0.83385449,-12.083733,130.8065)"
gradientUnits="userSpaceOnUse"
id="linearGradient6138"
xlink:href="#linearGradient3902-8"
inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.35"
inkscape:cx="303.02687"
inkscape:cy="56.571424"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="483"
inkscape:window-height="423"
inkscape:window-x="877"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata6145">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(142.28571,-332.93361)">
<g
transform="translate(-79.695445,-198.36742)"
style="display:inline"
id="g8790-9"
inkscape:export-filename="/home/pj/Documents/svg/path10192-9.png"
inkscape:export-xdpi="89.989967"
inkscape:export-ydpi="89.989967">
<rect
transform="matrix(0.83385449,0,0,0.83385449,-10.399092,130.80653)"
ry="32"
rx="32"
y="505.79703"
x="-37.086269"
height="256"
width="256"
id="rect3756-4-1-0-1"
style="opacity:0.93280634;fill:#1a1a1a;fill-opacity:1;stroke:#1a1a1a;stroke-width:8;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter8786-73)" />
<rect
ry="26.683344"
rx="26.683344"
y="552.56763"
x="-41.323643"
height="213.46675"
width="213.46675"
id="rect3756-4-1-23"
style="fill:url(#linearGradient6136);fill-opacity:1;stroke:url(#linearGradient6138);stroke-width:6.67083597;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
</g>
<g
style="display:inline"
id="g6595"
transform="translate(-718.28571,-467.67953)">
<path
transform="matrix(1,0,0,-0.52854237,3.4921479e-6,1451.231)"
id="path7634"
d="m 701.5017,849.84619 c -18.84485,0.14924 -36.98433,7.54935 -50.6875,21.0625 -28.98716,28.58523 -29.34991,76.99794 -0.75,106 28.59991,29.00211 74.35659,29.33521 103.34376,0.75 23.8148,-23.48454 28.2687,-60.35424 13.25,-88.84375 l 12.5,-11.84375 c -15.9007,-4.62645 -35.2494,-10.60827 -49.625,-14.1875 l 15.5625,46.5 10.7812,-10.25 c 10.8194,21.79185 6.9041,48.25994 -11.6875,66.59375 -23.31944,22.99612 -61.76851,22.74209 -84.74996,-0.5625 -22.98144,-23.30459 -22.75698,-59.16012 0.5625,-82.15625 11.70695,-11.54462 27.96738,-17.85638 44.71875,-17.125 a 7.0168265,7.9572264 0 1 0 0.5625,-15.875 c -1.26147,-0.0551 -2.52493,-0.0725 -3.78125,-0.0625 z"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.52569167;color:#000000;fill:#ff0000;fill-opacity:1;stroke:#ffff00;stroke-width:3.63681793;stroke-miterlimit:4;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter7476);enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
inkscape:connector-curvature="0" />
<path
inkscape:connector-curvature="0"
id="path7632"
d="m 701.50171,1002.0513 c -18.84485,-0.079 -36.98433,-3.99017 -50.6875,-11.13244 -28.98716,-15.10851 -29.34991,-40.69668 -0.75,-56.02549 28.59991,-15.32885 74.35659,-15.50491 103.34375,-0.39641 23.81476,12.41257 28.26869,31.89977 13.25,46.95769 l 12.5,6.25992 c -15.9007,2.44527 -35.24939,5.60692 -49.625,7.49869 l 15.5625,-24.57722 10.78125,5.41756 c 10.81931,-11.51791 6.9041,-25.50742 -11.6875,-35.19762 -23.31948,-12.15442 -61.76855,-12.02015 -84.75,0.29731 -22.98144,12.31746 -22.75698,31.26863 0.5625,43.42306 11.70695,6.10182 27.96738,9.43785 44.71875,9.05129 a 7.0168265,4.2057313 0 1 1 0.5625,8.39056 c -1.26147,0.029 -2.52493,0.038 -3.78125,0.033 z"
style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:3.71435571;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
<path
inkscape:export-ydpi="89.989967"
inkscape:export-xdpi="89.989967"
transform="matrix(0.97098472,-0.23914152,0.19131322,0.77678778,116.94726,1171.5074)"
d="m 646.49761,-79.370644 c 0,11.157837 -11.75878,20.203051 -26.26397,20.203051 -14.50519,0 -26.26396,-9.045214 -26.26396,-20.203051 0,-11.157836 11.75877,-20.20305 26.26396,-20.20305 14.50519,0 26.26397,9.045214 26.26397,20.20305 z"
sodipodi:ry="20.203051"
sodipodi:rx="26.263966"
sodipodi:cy="-79.370644"
sodipodi:cx="620.23364"
id="path10192"
style="opacity:0.74703555;color:#000000;fill:none;stroke:#cccccc;stroke-width:4.64385748;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter6286-7-6);enable-background:accumulate"
sodipodi:type="arc" />
<path
inkscape:export-ydpi="89.989967"
inkscape:export-xdpi="89.989967"
inkscape:export-filename="/home/pj/Documents/svg/path10192-9.png"
inkscape:connector-curvature="0"
id="path10192-2"
d="m 724.98649,848.5283 c -2.51831,0 -4.5625,2.23 -4.5625,5 l 0,92.09372 c -5.48963,-2.1546 -12.88129,-2.548 -20.5625,-0.6562 -14.08432,3.4688 -23.79089,13.3015 -21.65625,21.9687 2.13464,8.6673 15.29068,12.8751 29.375,9.4063 13.44178,-3.3106 22.86633,-12.4224 21.84375,-20.7813 0.0499,-0.2977 0.0937,-0.5921 0.0937,-0.9062 l 0,-101.12502 c 0,-2.77 -2.01294,-5 -4.53125,-5 z"
style="color:#000000;fill:#385680;fill-opacity:1;fill-rule:nonzero;stroke:#677b94;stroke-width:2.64400005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<path
inkscape:export-ydpi="89.989967"
inkscape:export-xdpi="89.989967"
transform="matrix(0.97098472,-0.23914152,0.19131322,0.77678778,116.94727,1170.9216)"
d="m 646.49761,-79.370644 c 0,11.157837 -11.75878,20.203051 -26.26397,20.203051 -14.50519,0 -26.26396,-9.045214 -26.26396,-20.203051 0,-11.157836 11.75877,-20.20305 26.26396,-20.20305 14.50519,0 26.26397,9.045214 26.26397,20.20305 z"
sodipodi:ry="20.203051"
sodipodi:rx="26.263966"
sodipodi:cy="-79.370644"
sodipodi:cx="620.23364"
id="path10192-9"
style="color:#000000;fill:url(#radialGradient4872);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.95608187;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter10233-5);enable-background:accumulate"
sodipodi:type="arc" />
</g>
</g>
</svg>

+ 1
- 1
src/jackmeter.py View File

@@ -134,7 +134,7 @@ if __name__ == '__main__':
client = jacklib.client_open_uuid("M", jacklib.JackSessionID, jacklib.pointer(jack_status), "") client = jacklib.client_open_uuid("M", jacklib.JackSessionID, jacklib.pointer(jack_status), "")


if not client: if not client:
QMessageBox.critical(None, app.translate("XYControllerW", "Error"), app.translate("XYControllerW", "Could not connect to JACK, possible errors:\n%s" % (get_jack_status_error_string(jack_status))))
QMessageBox.critical(None, app.translate("MeterW", "Error"), app.translate("MeterW", "Could not connect to JACK, possible errors:\n%s" % (get_jack_status_error_string(jack_status))))
sys.exit(1) sys.exit(1)


port_1 = jacklib.port_register(client, "in1", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsInput, 0) port_1 = jacklib.port_register(client, "in1", jacklib.JACK_DEFAULT_AUDIO_TYPE, jacklib.JackPortIsInput, 0)


+ 1
- 1
src/jacksettings.py View File

@@ -487,7 +487,7 @@ class JackSettingsW(QDialog, ui_settings_jack.Ui_JackSettingsW):
setDriverParameter("snoop", value, True) setDriverParameter("snoop", value, True)


if (self.obj_driver_channels.isEnabled()): if (self.obj_driver_channels.isEnabled()):
value = dbus.UInt32(self.obj_driver_channels.value())
value = dbus.Int32(self.obj_driver_channels.value())
setDriverParameter("channels", value, True) setDriverParameter("channels", value, True)


def loadDriverSettings(self, reset=False, forceReset=False): def loadDriverSettings(self, reset=False, forceReset=False):


+ 0
- 1
src/shared_canvas.py View File

@@ -28,7 +28,6 @@ def canvas_arrange(self):
patchcanvas.arrange() patchcanvas.arrange()


def canvas_refresh(self): def canvas_refresh(self):
self.init_ports_prepare()
patchcanvas.clear() patchcanvas.clear()
self.init_ports() self.init_ports()




+ 16
- 12
src/shared_jack.py View File

@@ -295,18 +295,18 @@ def setBufferSize(self, buffer_size, forced=False):
elif (buffer_size == 8192): elif (buffer_size == 8192):
self.cb_buffer_size.setCurrentIndex(9) self.cb_buffer_size.setCurrentIndex(9)
else: else:
QMessageBox.warning(self, self.tr("Warning"), self.tr("Invalid JACK buffer-size requested"))
#if ("act_jack_bf_list" in dir(self)):
if (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):
act_bf.setChecked(True)
else:
if (act_bf.isChecked()):
act_bf.setChecked(False)
QMessageBox.warning(self, self.tr("Warning"), self.tr("Invalid JACK buffer-size requested: %i" % (buffer_size)))
if ("act_jack_bf_list" in dir(self)):
if (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):
act_bf.setChecked(True)
else:
if (act_bf.isChecked()):
act_bf.setChecked(False)
#else: #else:
#for i in range(len(self.act_jack_bf_list)): #for i in range(len(self.act_jack_bf_list)):
#self.act_jack_bf_list[i].setEnabled(False) #self.act_jack_bf_list[i].setEnabled(False)
@@ -358,6 +358,10 @@ def setXruns(self, xruns):
def slot_showJackSettings(self): def slot_showJackSettings(self):
jacksettings.JackSettingsW(self).exec_() jacksettings.JackSettingsW(self).exec_()


if (not jack.client):
# Force update of gui widgets
self.jackStopped()

@pyqtSlot() @pyqtSlot()
def slot_showLogs(self): def slot_showLogs(self):
logs.LogsW(self).show() logs.LogsW(self).show()


+ 94
- 3
src/shared_settings.py View File

@@ -22,12 +22,34 @@ from PyQt4.QtGui import QDialog, QDialogButtonBox, QIcon, QPixmap


# Imports (Custom Stuff) # Imports (Custom Stuff)
import ui_settings_app import ui_settings_app
from shared import *
from patchcanvas_theme import * from patchcanvas_theme import *


# Define values here so we don't have to import fully patchcanvas here
# Define values here so we don't have to import full patchcanvas here
CANVAS_ANTIALIASING_SMALL = 1 CANVAS_ANTIALIASING_SMALL = 1
CANVAS_EYECANDY_SMALL = 1 CANVAS_EYECANDY_SMALL = 1


# ladish defines
LADISH_CONF_KEY_DAEMON_NOTIFY = "/org/ladish/daemon/notify"
LADISH_CONF_KEY_DAEMON_SHELL = "/org/ladish/daemon/shell"
LADISH_CONF_KEY_DAEMON_TERMINAL = "/org/ladish/daemon/terminal"
LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART = "/org/ladish/daemon/studio_autostart"
LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY = "/org/ladish/daemon/js_save_delay"

LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT = True
LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT = "sh"
LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT = "x-terminal-emulator"
LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT = True
LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY_DEFAULT = 0

# Internal defines
global SETTINGS_DEFAULT_PROJECT_FOLDER
SETTINGS_DEFAULT_PROJECT_FOLDER = "/tmp"

def setDefaultProjectFolder(folder):
global SETTINGS_DEFAULT_PROJECT_FOLDER
SETTINGS_DEFAULT_PROJECT_FOLDER = folder

# Settings Dialog # Settings Dialog
class SettingsW(QDialog, ui_settings_app.Ui_SettingsW): class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):
def __init__(self, parent, appName, hasGL): def __init__(self, parent, appName, hasGL):
@@ -36,6 +58,8 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):


# Load app-specific settings # Load app-specific settings
self.ms_AutoHideGroups = True self.ms_AutoHideGroups = True
self.ms_UseSystemTray = True
self.ms_CloseToTray = False


if (appName == "catarina"): if (appName == "catarina"):
self.ms_AutoHideGroups = False self.ms_AutoHideGroups = False
@@ -45,11 +69,17 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):
self.lw_page.setCurrentCell(1, 0) self.lw_page.setCurrentCell(1, 0)


elif (appName == "catia"): elif (appName == "catia"):
self.ms_UseSystemTray = False
self.group_main_paths.setVisible(False) self.group_main_paths.setVisible(False)
self.lw_page.hideRow(2) self.lw_page.hideRow(2)
self.lw_page.hideRow(3) self.lw_page.hideRow(3)
self.lw_page.setCurrentCell(0, 0) self.lw_page.setCurrentCell(0, 0)


elif (appName == "claudia"):
self.cb_jack_port_alias.setVisible(False)
self.label_jack_port_alias.setVisible(False)
self.lw_page.setCurrentCell(0, 0)

self.settings = self.parent().settings self.settings = self.parent().settings
self.loadSettings() self.loadSettings()


@@ -59,18 +89,25 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):


self.label_icon.setPixmap(QPixmap(":/48x48/%s" % (appName))) self.label_icon.setPixmap(QPixmap(":/48x48/%s" % (appName)))
self.lw_page.item(0, 0).setIcon(QIcon(":/48x48/%s" % (appName))) self.lw_page.item(0, 0).setIcon(QIcon(":/48x48/%s" % (appName)))
self.lw_page.item(3, 0).setIcon(QIcon.fromTheme("application-x-executable", QIcon(":/48x48/exec.png")))


self.connect(self.buttonBox.button(QDialogButtonBox.Reset), SIGNAL("clicked()"), SLOT("slot_resetSettings()"))
self.connect(self, SIGNAL("accepted()"), SLOT("slot_saveSettings()")) self.connect(self, SIGNAL("accepted()"), SLOT("slot_saveSettings()"))
self.connect(self.b_main_def_folder_open, SIGNAL("clicked()"), SLOT("slot_getAndSetPath()"))
self.connect(self.buttonBox.button(QDialogButtonBox.Reset), SIGNAL("clicked()"), SLOT("slot_resetSettings()"))


def loadSettings(self): def loadSettings(self):
# ------------------------ # ------------------------
# Page 0 # Page 0

self.le_main_def_folder.setText(self.settings.value("Main/DefaultProjectFolder", SETTINGS_DEFAULT_PROJECT_FOLDER, type=str))
self.cb_tray_enable.setChecked(self.settings.value("Main/UseSystemTray", self.ms_UseSystemTray, type=bool))
self.cb_tray_close_to.setChecked(self.settings.value("Main/CloseToTray", self.ms_CloseToTray, type=bool))
self.sb_gui_refresh.setValue(self.settings.value("Main/RefreshInterval", 120, type=int)) self.sb_gui_refresh.setValue(self.settings.value("Main/RefreshInterval", 120, type=int))
self.cb_jack_port_alias.setCurrentIndex(self.settings.value("Main/JackPortAlias", 2, type=int)) self.cb_jack_port_alias.setCurrentIndex(self.settings.value("Main/JackPortAlias", 2, type=int))


# ------------------------ # ------------------------
# Page 1 # Page 1

self.cb_canvas_hide_groups.setChecked(self.settings.value("Canvas/AutoHideGroups", self.ms_AutoHideGroups, type=bool)) self.cb_canvas_hide_groups.setChecked(self.settings.value("Canvas/AutoHideGroups", self.ms_AutoHideGroups, type=bool))
self.cb_canvas_bezier_lines.setChecked(self.settings.value("Canvas/UseBezierLines", True, type=bool)) self.cb_canvas_bezier_lines.setChecked(self.settings.value("Canvas/UseBezierLines", True, type=bool))
self.cb_canvas_eyecandy.setCheckState(self.settings.value("Canvas/EyeCandy", CANVAS_EYECANDY_SMALL, type=int)) self.cb_canvas_eyecandy.setCheckState(self.settings.value("Canvas/EyeCandy", CANVAS_EYECANDY_SMALL, type=int))
@@ -87,15 +124,47 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):
if (this_theme_name == theme_name): if (this_theme_name == theme_name):
self.cb_canvas_theme.setCurrentIndex(i) self.cb_canvas_theme.setCurrentIndex(i)


# ------------------------
# Page 2

self.cb_ladish_notify.setChecked(self.settings.value(LADISH_CONF_KEY_DAEMON_NOTIFY, LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT, type=bool))
self.le_ladish_shell.setText(self.settings.value(LADISH_CONF_KEY_DAEMON_SHELL, LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT, type=str))
self.le_ladish_terminal.setText(self.settings.value(LADISH_CONF_KEY_DAEMON_TERMINAL, LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT, type=str))
self.cb_ladish_studio_autostart.setChecked(self.settings.value(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT, type=bool))
self.sb_ladish_jsdelay.setValue(self.settings.value(LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY, LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY_DEFAULT, type=int))

# ------------------------
# Page 3

database = self.settings.value("Apps/Database", "LADISH", type=str)
if (database == "LADISH"):
self.rb_database_ladish.setChecked(True)
elif (database == "Klaudia"):
self.rb_database_kxstudio.setChecked(True)

@pyqtSlot()
def slot_getAndSetPath(self):
getAndSetPath(self, self.le_main_def_folder.text(), self.le_main_def_folder)

@pyqtSlot() @pyqtSlot()
def slot_saveSettings(self): def slot_saveSettings(self):
# TODO - check if page is visible
# ------------------------ # ------------------------
# Page 0 # Page 0

self.settings.setValue("Main/UseSystemTray", self.cb_tray_enable.isChecked())
self.settings.setValue("Main/CloseToTray", self.cb_tray_close_to.isChecked())
self.settings.setValue("Main/RefreshInterval", self.sb_gui_refresh.value()) self.settings.setValue("Main/RefreshInterval", self.sb_gui_refresh.value())
self.settings.setValue("Main/JackPortAlias", self.cb_jack_port_alias.currentIndex())

if (self.group_main_paths.isVisible()):
self.settings.setValue("Main/DefaultProjectFolder", self.le_main_def_folder.text())

if (self.cb_jack_port_alias.isVisible()):
self.settings.setValue("Main/JackPortAlias", self.cb_jack_port_alias.currentIndex())


# ------------------------ # ------------------------
# Page 1 # Page 1

self.settings.setValue("Canvas/Theme", self.cb_canvas_theme.currentText()) self.settings.setValue("Canvas/Theme", self.cb_canvas_theme.currentText())
self.settings.setValue("Canvas/AutoHideGroups", self.cb_canvas_hide_groups.isChecked()) self.settings.setValue("Canvas/AutoHideGroups", self.cb_canvas_hide_groups.isChecked())
self.settings.setValue("Canvas/UseBezierLines", self.cb_canvas_bezier_lines.isChecked()) self.settings.setValue("Canvas/UseBezierLines", self.cb_canvas_bezier_lines.isChecked())
@@ -107,10 +176,31 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):
self.settings.setValue("Canvas/EyeCandy", self.cb_canvas_eyecandy.checkState()) self.settings.setValue("Canvas/EyeCandy", self.cb_canvas_eyecandy.checkState())
self.settings.setValue("Canvas/Antialiasing", self.cb_canvas_render_aa.checkState()) self.settings.setValue("Canvas/Antialiasing", self.cb_canvas_render_aa.checkState())


# ------------------------
# Page 2

self.settings.setValue(LADISH_CONF_KEY_DAEMON_NOTIFY, self.cb_ladish_notify.isChecked())
self.settings.setValue(LADISH_CONF_KEY_DAEMON_SHELL, self.le_ladish_shell.text())
self.settings.setValue(LADISH_CONF_KEY_DAEMON_TERMINAL, self.le_ladish_terminal.text())
self.settings.setValue(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART, self.cb_ladish_studio_autostart.isChecked())
self.settings.setValue(LADISH_CONF_KEY_DAEMON_JS_SAVE_DELAY, self.sb_ladish_jsdelay.value())

# ------------------------
# Page 3

self.settings.setValue("Apps/Database", "LADISH" if self.rb_database_ladish.isChecked() else "Klaudia")

@pyqtSlot() @pyqtSlot()
def slot_resetSettings(self): def slot_resetSettings(self):
self.le_main_def_folder.setText(SETTINGS_DEFAULT_PROJECT_FOLDER)
self.cb_tray_enable.setChecked(self.ms_UseSystemTray)
self.cb_tray_close_to.setChecked(self.ms_CloseToTray)
self.sb_gui_refresh.setValue(120) self.sb_gui_refresh.setValue(120)
self.cb_jack_port_alias.setCurrentIndex(1) self.cb_jack_port_alias.setCurrentIndex(1)
self.cb_ladish_notify.setChecked(LADISH_CONF_KEY_DAEMON_NOTIFY_DEFAULT)
self.cb_ladish_studio_autostart.setChecked(LADISH_CONF_KEY_DAEMON_STUDIO_AUTOSTART_DEFAULT)
self.le_ladish_shell.setText(LADISH_CONF_KEY_DAEMON_SHELL_DEFAULT)
self.le_ladish_terminal.setText(LADISH_CONF_KEY_DAEMON_TERMINAL_DEFAULT)
self.cb_canvas_theme.setCurrentIndex(0) self.cb_canvas_theme.setCurrentIndex(0)
self.cb_canvas_hide_groups.setChecked(self.ms_AutoHideGroups) self.cb_canvas_hide_groups.setChecked(self.ms_AutoHideGroups)
self.cb_canvas_bezier_lines.setChecked(True) self.cb_canvas_bezier_lines.setChecked(True)
@@ -119,3 +209,4 @@ class SettingsW(QDialog, ui_settings_app.Ui_SettingsW):
self.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked) self.cb_canvas_render_aa.setCheckState(Qt.PartiallyChecked)
self.cb_canvas_render_text_aa.setChecked(True) self.cb_canvas_render_text_aa.setChecked(True)
self.cb_canvas_render_hq_aa.setChecked(False) self.cb_canvas_render_hq_aa.setChecked(False)
self.rb_database_ladish.setChecked(True)

+ 1420
- 0
src/ui/claudia.ui
File diff suppressed because it is too large
View File


+ 111
- 0
src/ui/claudia_studiolist.ui View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>StudioListW</class>
<widget class="QDialog" name="StudioListW">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>345</width>
<height>362</height>
</rect>
</property>
<property name="windowTitle">
<string>Load Studio</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Studio list</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="tableWidget">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
</property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>22</number>
</attribute>
<column>
<property name="text">
<string>Name</string>
</property>
</column>
<column>
<property name="text">
<string>Date</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>StudioListW</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>StudioListW</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

+ 76
- 0
src/ui/claudia_studioname.ui View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>StudioNameW</class>
<widget class="QDialog" name="StudioNameW">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>312</width>
<height>106</height>
</rect>
</property>
<property name="windowTitle">
<string>Set name</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Studio name</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLineEdit" name="le_name"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>StudioNameW</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>StudioNameW</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

+ 24
- 1
src/ui/settings_app.ui View File

@@ -675,6 +675,29 @@
<item row="1" column="1"> <item row="1" column="1">
<widget class="QLineEdit" name="le_ladish_terminal"/> <widget class="QLineEdit" name="le_ladish_terminal"/>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>JS delay:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QSpinBox" name="sb_ladish_jsdelay">
<property name="suffix">
<string> seconds</string>
</property>
<property name="prefix">
<string/>
</property>
<property name="maximum">
<number>1000</number>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
<item> <item>
@@ -728,7 +751,7 @@
<string notr="true"/> <string notr="true"/>
</property> </property>
<property name="pixmap"> <property name="pixmap">
<pixmap>:/48x48/claudia.png</pixmap>
<pixmap resource="../icons/icons.qrc">:/48x48/exec.png</pixmap>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set> <set>Qt::AlignHCenter|Qt::AlignTop</set>


Loading…
Cancel
Save