Browse Source

More Claudia work, fix room remove

tags/v0.9.0
falkTX 13 years ago
parent
commit
1c9bb7e377
1 changed files with 153 additions and 65 deletions
  1. +153
    -65
      src/claudia.py

+ 153
- 65
src/claudia.py View File

@@ -21,7 +21,7 @@ import dbus
from dbus.mainloop.qt import DBusQtMainLoop
from time import ctime
from PyQt4.QtCore import QPointF, QSettings
from PyQt4.QtGui import QApplication, QMainWindow, QTableWidgetItem, QTreeWidgetItem
from PyQt4.QtGui import QAction, QApplication, QMainWindow, QTableWidgetItem, QTreeWidgetItem

# Imports (Custom Stuff)
import ui_claudia
@@ -380,8 +380,11 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
self.connect(self.b_studio_load, SIGNAL("clicked()"), SLOT("slot_studio_load_b()"))
self.connect(self.b_studio_save, SIGNAL("clicked()"), SLOT("slot_studio_save()"))
self.connect(self.b_studio_save_as, SIGNAL("clicked()"), SLOT("slot_studio_save_as()"))
self.connect(self.menu_studio_load, SIGNAL("aboutToShow()"), SLOT("slot_updateMenuStudioList_Load()"))
self.connect(self.menu_studio_delete, SIGNAL("aboutToShow()"), SLOT("slot_updateMenuStudioList_Delete()"))

self.connect(self.act_room_create, SIGNAL("triggered()"), SLOT("slot_room_create()"))
self.connect(self.menu_room_delete, SIGNAL("aboutToShow()"), SLOT("slot_updateMenuRoomList()"))

#self.connect(self.act_project_new, SIGNAL("triggered()"), self.func_project_new)
#self.connect(self.act_project_save, SIGNAL("triggered()"), self.func_project_save)
@@ -392,17 +395,11 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
#self.connect(self.b_project_load, SIGNAL("clicked()"), self.func_project_load)
#self.connect(self.b_project_save, SIGNAL("clicked()"), self.func_project_save)
#self.connect(self.b_project_save_as, SIGNAL("clicked()"), self.func_project_save_as)
#self.connect(self.menu_project_load, SIGNAL("aboutToShow()"), self.updateMenuProjectList)

#self.connect(self.act_app_add_new, SIGNAL("triggered()"), self.func_app_add_new)
#self.connect(self.act_app_run_custom, SIGNAL("triggered()"), self.func_app_run_custom)

#self.connect(self.menu_studio_load, SIGNAL("aboutToShow()"), lambda menu=self.menu_studio_load,
#function=self.func_studio_load_m: self.updateMenuStudioList(menu, function))
#self.connect(self.menu_studio_delete, SIGNAL("aboutToShow()"), lambda menu=self.menu_studio_delete,
#function=self.func_studio_delete_m: self.updateMenuStudioList(menu, function))
#self.connect(self.menu_room_delete, SIGNAL("aboutToShow()"), self.updateMenuRoomList)
#self.connect(self.menu_project_load, SIGNAL("aboutToShow()"), self.updateMenuProjectList)

self.connect(self.treeWidget, SIGNAL("itemSelectionChanged()"), SLOT("slot_checkCurrentRoom()"))
##self.connect(self.treeWidget, SIGNAL("itemPressed(QTreeWidgetItem*, int)"), self.checkCurrentRoom)
#self.connect(self.treeWidget, SIGNAL("itemDoubleClicked(QTreeWidgetItem*, int)"), self.doubleClickedAppList)
@@ -447,7 +444,7 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
self.connect(self, SIGNAL("DBusStudioRenamedCallback(QString)"), SLOT("slot_DBusStudioRenamedCallback(QString)"))
self.connect(self, SIGNAL("DBusStudioCrashedCallback()"), SLOT("slot_DBusStudioCrashedCallback()"))
self.connect(self, SIGNAL("DBusRoomAppearedCallback(QString, QString)"), SLOT("slot_DBusRoomAppearedCallback(QString, QString)"))
self.connect(self, SIGNAL("DBusRoomDisappearedCallback(int)"), SLOT("slot_DBusRoomDisappearedCallback(int)"))
self.connect(self, SIGNAL("DBusRoomDisappearedCallback(QString)"), SLOT("slot_DBusRoomDisappearedCallback(QString)"))
self.connect(self, SIGNAL("DBusRoomChangedCallback()"), SLOT("slot_DBusRoomChangedCallback()"))

#self.connect(self, SIGNAL("DBus()"), SLOT("slot_DBus()"))
@@ -673,6 +670,46 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):

self.treeWidget.expandAll()

def init_ports(self):
if (not jack.client or not DBus.patchbay):
return

version, groups, conns = DBus.patchbay.GetGraph(0)

# Graph Ports
for group in groups:
group_id, group_name, ports = group
self.canvas_add_group(int(group_id), str(group_name))

for port in ports:
port_id, port_name, port_flags, port_type_jack = port

if (port_flags & JACKDBUS_PORT_FLAG_INPUT):
port_mode = patchcanvas.PORT_MODE_INPUT
elif (port_flags & JACKDBUS_PORT_FLAG_OUTPUT):
port_mode = patchcanvas.PORT_MODE_OUTPUT
else:
port_mode = patchcanvas.PORT_MODE_NULL

if (port_type_jack == JACKDBUS_PORT_TYPE_AUDIO):
port_type = patchcanvas.PORT_TYPE_AUDIO_JACK
elif (port_type_jack == JACKDBUS_PORT_TYPE_MIDI):
if (DBus.ladish_graph.Get(GRAPH_DICT_OBJECT_TYPE_PORT, port_id, URI_A2J_PORT) == "yes"):
port_type = patchcanvas.PORT_TYPE_MIDI_A2J
else:
port_type = patchcanvas.PORT_TYPE_MIDI_JACK
else:
port_type = patchcanvas.PORT_TYPE_NULL

self.canvas_add_port(int(group_id), int(port_id), str(port_name), port_mode, port_type)

# Graph Connections
for conn in conns:
source_group_id, source_group_name, source_port_id, source_port_name, target_group_id, target_group_name, target_port_id, target_port_name, conn_id = conn
self.canvas_connect_ports(int(conn_id), int(source_port_id), int(target_port_id))

QTimer.singleShot(1000 if (self.m_savedSettings['Canvas/EyeCandy']) else 0, self.miniCanvasPreview, SLOT("update()"))

def room_add(self, room_path, room_name):
room_index = int(room_path.replace("/org/ladish/Room",""))
room_object = DBus.bus.get_object("org.ladish", room_path)
@@ -714,46 +751,6 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
self.treeWidget.insertTopLevelItem(room_index, item)
return item

def init_ports(self):
if (not jack.client or not DBus.patchbay):
return

version, groups, conns = DBus.patchbay.GetGraph(0)

# Graph Ports
for group in groups:
group_id, group_name, ports = group
self.canvas_add_group(int(group_id), str(group_name))

for port in ports:
port_id, port_name, port_flags, port_type_jack = port

if (port_flags & JACKDBUS_PORT_FLAG_INPUT):
port_mode = patchcanvas.PORT_MODE_INPUT
elif (port_flags & JACKDBUS_PORT_FLAG_OUTPUT):
port_mode = patchcanvas.PORT_MODE_OUTPUT
else:
port_mode = patchcanvas.PORT_MODE_NULL

if (port_type_jack == JACKDBUS_PORT_TYPE_AUDIO):
port_type = patchcanvas.PORT_TYPE_AUDIO_JACK
elif (port_type_jack == JACKDBUS_PORT_TYPE_MIDI):
if (DBus.ladish_graph.Get(GRAPH_DICT_OBJECT_TYPE_PORT, port_id, URI_A2J_PORT) == "yes"):
port_type = patchcanvas.PORT_TYPE_MIDI_A2J
else:
port_type = patchcanvas.PORT_TYPE_MIDI_JACK
else:
port_type = patchcanvas.PORT_TYPE_NULL

self.canvas_add_port(int(group_id), int(port_id), str(port_name), port_mode, port_type)

## Graph Connections
for conn in conns:
source_group_id, source_group_name, source_port_id, source_port_name, target_group_id, target_group_name, target_port_id, target_port_name, conn_id = conn
self.canvas_connect_ports(int(conn_id), int(source_port_id), int(target_port_id))

QTimer.singleShot(1000 if (self.m_savedSettings['Canvas/EyeCandy']) else 0, self.miniCanvasPreview, SLOT("update()"))

def canvas_add_group(self, group_id, group_name):
# TODO - get room list names, but not if we're inside a room
room_list_names = [] #self.get_room_list_names()
@@ -1037,8 +1034,7 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
elif (kwds['member'] == "RoomAppeared"):
self.emit(SIGNAL("DBusRoomAppearedCallback(QString, QString)"), args[iRoomAppearedPath], args[iRoomAppearedDict]['name'])
elif (kwds['member'] == "RoomDisappeared"):
print(args)
#self.emit(SIGNAL("DBusRoomDisappearedCallback(int)"))
self.emit(SIGNAL("DBusRoomDisappearedCallback(QString)"), args[iRoomAppearedPath])
elif (kwds['member'] == "RoomChanged"):
self.emit(SIGNAL("DBusRoomChangedCallback()"))
print(args)
@@ -1087,16 +1083,19 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
def slot_studio_new(self):
dialog = StudioNameW(self, StudioNameW.NEW)
if (dialog.exec_()):
DBus.ladish_control.NewStudio(dbus.String(dialog.ret_studio_name))

#def func_studio_load_m(self, studio_name):
#DBus.ladish_control.LoadStudio(studio_name)
DBus.ladish_control.NewStudio(dialog.ret_studio_name)

@pyqtSlot()
def slot_studio_load_b(self):
dialog = StudioListW(self)
if (dialog.exec_()):
DBus.ladish_control.LoadStudio(dbus.String(dialog.ret_studio_name))
DBus.ladish_control.LoadStudio(dialog.ret_studio_name)

@pyqtSlot()
def slot_studio_load_m(self):
studio_name = self.sender().text()
if (studio_name):
DBus.ladish_control.LoadStudio(studio_name)

@pyqtSlot()
def slot_studio_start(self):
@@ -1110,7 +1109,7 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
def slot_studio_rename(self):
dialog = StudioNameW(self, StudioNameW.RENAME)
if (dialog.exec_()):
DBus.ladish_studio.Rename(dbus.String(dialog.ret_studio_name))
DBus.ladish_studio.Rename(dialog.ret_studio_name)

@pyqtSlot()
def slot_studio_save(self):
@@ -1120,14 +1119,17 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
def slot_studio_save_as(self):
dialog = StudioNameW(self, StudioNameW.SAVE_AS)
if (dialog.exec_()):
DBus.ladish_studio.SaveAs(dbus.String(dialog.ret_studio_name))
DBus.ladish_studio.SaveAs(dialog.ret_studio_name)

@pyqtSlot()
def slot_studio_unload(self):
DBus.ladish_studio.Unload()

#def func_studio_delete_m(self, studio_name):
#DBus.ladish_control.DeleteStudio(dbus.String(studio_name))
@pyqtSlot()
def slot_studio_delete_m(self):
studio_name = self.sender().text()
if (studio_name):
DBus.ladish_control.DeleteStudio(studio_name)

@pyqtSlot()
def slot_room_create(self):
@@ -1135,8 +1137,11 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
if (dialog.exec_()):
DBus.ladish_studio.CreateRoom(dialog.ret_room_name, dialog.ret_room_template)

#def func_room_delete_m(self, room_name):
#DBus.ladish_studio.DeleteRoom(dbus.String(room_name))
@pyqtSlot()
def slot_room_delete_m(self):
room_name = self.sender().text()
if (room_name):
DBus.ladish_studio.DeleteRoom(room_name)

@pyqtSlot()
def slot_checkCurrentRoom(self):
@@ -1201,6 +1206,60 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
self.m_last_item_type = ITEM_TYPE
self.m_last_room_path = room_path

@pyqtSlot()
def slot_updateMenuStudioList_Load(self):
self.menu_studio_load.clear()

studio_list = DBus.ladish_control.GetStudioList()
if (len(studio_list) == 0):
act_no_studio = QAction(self.tr("Empty studio list"), self.menu_studio_load)
act_no_studio.setEnabled(False)
self.menu_studio_load.addAction(act_no_studio)
else:
for studio in studio_list:
studio_name = str(studio[iStudioListName])
act_x_studio = QAction(studio_name, self.menu_studio_load)
self.menu_studio_load.addAction(act_x_studio)
self.connect(act_x_studio, SIGNAL("triggered()"), SLOT("slot_studio_load_m()"))

@pyqtSlot()
def slot_updateMenuStudioList_Delete(self):
self.menu_studio_delete.clear()

studio_list = DBus.ladish_control.GetStudioList()
if (len(studio_list) == 0):
act_no_studio = QAction(self.tr("Empty studio list"), self.menu_studio_delete)
act_no_studio.setEnabled(False)
self.menu_studio_delete.addAction(act_no_studio)
else:
for studio in studio_list:
studio_name = str(studio[iStudioListName])
act_x_studio = QAction(studio_name, self.menu_studio_delete)
self.menu_studio_delete.addAction(act_x_studio)
self.connect(act_x_studio, SIGNAL("triggered()"), SLOT("slot_studio_delete_m()"))

@pyqtSlot()
def slot_updateMenuRoomList(self):
self.menu_room_delete.clear()
if (DBus.ladish_control.IsStudioLoaded()):
room_list = DBus.ladish_studio.GetRoomList()
if (len(room_list) == 0):
self.createEmptyMenuRoomActon()
else:
for room_path, room_dict in room_list:
ladish_room = DBus.bus.get_object("org.ladish", room_path)
room_name = ladish_room.GetName()
act_x_room = QAction(room_name, self.menu_room_delete)
self.menu_room_delete.addAction(act_x_room)
self.connect(act_x_room, SIGNAL("triggered()"), SLOT("slot_room_delete_m()"))
else:
self.createEmptyMenuRoomActon()

def createEmptyMenuRoomActon(self):
act_no_room = QAction(self.tr("Empty room list"), self.menu_room_delete)
act_no_room.setEnabled(False)
self.menu_room_delete.addAction(act_no_room)

@pyqtSlot(float)
def slot_canvasScaleChanged(self, scale):
self.miniCanvasPreview.setViewScale(scale)
@@ -1374,9 +1433,38 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
def slot_DBusRoomAppearedCallback(self, room_path, room_name):
self.room_add(room_path, room_name)

@pyqtSlot(int)
def slot_DBusRoomDisappearedCallback(self, room_index):
pass # TODO
@pyqtSlot(str)
def slot_DBusRoomDisappearedCallback(self, room_path):
for i in range(self.treeWidget.topLevelItemCount()):
item = self.treeWidget.topLevelItem(i)
print(i, item, item.type() if item else None)

if (i == 0):
continue

if (item and item.type() == ITEM_TYPE_ROOM and item.properties[iItemPropRoomPath] == room_path):
for j in range(item.childCount()):
top_level_item.takeChild(j)

self.treeWidget.takeTopLevelItem(i)
break

else:
print("Claudia - room delete failed")

#room_index = int(room_path.replace("/org/ladish/Room",""))

#top_level_item = self.treeWidget.topLevelItem(room_index)

#if not top_level_item:
#while (True):
#room_index -= 1
#top_level_item = self.treeWidget.topLevelItem(room_index)
#if (top_level_item != None):
#break

#if (top_level_item):

@pyqtSlot()
def slot_DBusRoomChangedCallback(self):


Loading…
Cancel
Save