Update for 12.04
[klaudia.git] / src / klaudia_launcher.py
blob4e5372009c65c0244b9f020caa9bfacb759dc897
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
4 # Imports (Global)
5 import os, sys
6 from commands import getoutput
7 from random import randint
8 from PyQt4.QtCore import Qt, QVariant, SIGNAL
9 from PyQt4.QtGui import QIcon, QTableWidgetItem
11 # Imports (Custom)
12 import database
13 from xicon import XIcon
15 # Debug Mode
16 SHOW_ALL = False
18 # Tab Indexes
19 TAB_INDEX_DAW = 0
20 TAB_INDEX_HOST = 1
21 TAB_INDEX_INSTRUMENT = 2
22 TAB_INDEX_GHOSTESS = 3
23 TAB_INDEX_BRISTOL = 4
24 TAB_INDEX_EFFECT = 5
25 TAB_INDEX_TOOL = 6
27 # Properly convert QString to str
28 def QStringStr(string):
29 return str(unicode(string).encode('utf-8'))
31 # Launcher object
32 class KlaudiaLauncher(object):
33 def __init__(self, parent=None, settings=None, ladish_only=False):
34 super(KlaudiaLauncher, self).__init__()
36 self._parent = parent
37 self._settings = settings
38 self.ladish_only = ladish_only
40 # For the custom icons
41 self.MyIcons = XIcon()
42 self.MyIcons.addIconPath(os.path.join(sys.path[0], "../icons"))
43 self.MyIcons.addThemeName(QStringStr(QIcon.themeName()))
44 self.MyIcons.addThemeName("oxygen") # Just in case...
46 if (self.settings() != None and self.settings().contains("SplitterDAW") and self.settings().contains("SplitterGhostess")):
47 self.loadSettings()
48 else: # First-Run
49 self.parent().splitter_DAW.setSizes([500,200])
50 self.parent().splitter_Host.setSizes([500,200])
51 self.parent().splitter_Instrument.setSizes([500,200])
52 self.parent().splitter_Ghostess.setSizes([500,200])
53 self.parent().splitter_Bristol.setSizes([500,200])
54 self.parent().splitter_Effect.setSizes([500,200])
55 self.parent().splitter_Tool.setSizes([500,200])
57 self.parent().listDAW.setColumnWidth(0, 22)
58 self.parent().listDAW.setColumnWidth(1, 150)
59 self.parent().listDAW.setColumnWidth(2, 125)
60 self.parent().listHost.setColumnWidth(0, 22)
61 self.parent().listHost.setColumnWidth(1, 150)
62 self.parent().listInstrument.setColumnWidth(0, 22)
63 self.parent().listInstrument.setColumnWidth(1, 150)
64 self.parent().listInstrument.setColumnWidth(2, 125)
65 self.parent().listGhostess.setColumnWidth(0, 22)
66 self.parent().listGhostess.setColumnWidth(1, 280)
67 self.parent().listBristol.setColumnWidth(0, 22)
68 self.parent().listBristol.setColumnWidth(1, 100)
69 self.parent().listEffect.setColumnWidth(0, 22)
70 self.parent().listEffect.setColumnWidth(1, 225)
71 self.parent().listEffect.setColumnWidth(2, 125)
72 self.parent().listTool.setColumnWidth(0, 22)
73 self.parent().listTool.setColumnWidth(1, 225)
74 self.parent().listTool.setColumnWidth(2, 125)
76 self.clearInfo_DAW()
77 self.clearInfo_Host()
78 self.clearInfo_Intrument()
79 self.clearInfo_Ghostess()
80 self.clearInfo_Bristol()
81 self.clearInfo_Effect()
82 self.clearInfo_Tool()
84 self.refreshAll()
86 self.connect(self.parent().tabWidget, SIGNAL("currentChanged(int)"), self.checkSelectedTab)
88 self.connect(self.parent().listDAW, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedDAW)
89 self.connect(self.parent().listHost, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedHost)
90 self.connect(self.parent().listInstrument, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedInstrument)
91 self.connect(self.parent().listGhostess, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedGhostess)
92 self.connect(self.parent().listBristol, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedBristol)
93 self.connect(self.parent().listEffect, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedEffect)
94 self.connect(self.parent().listTool, SIGNAL("currentCellChanged(int, int, int, int)"), self.checkSelectedTool)
95 self.connect(self.parent().listDAW, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListDAW)
96 self.connect(self.parent().listHost, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListHost)
97 self.connect(self.parent().listInstrument, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListInstrument)
98 self.connect(self.parent().listGhostess, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListGhostess)
99 self.connect(self.parent().listBristol, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListBristol)
100 self.connect(self.parent().listEffect, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListEffect)
101 self.connect(self.parent().listTool, SIGNAL("cellDoubleClicked(int, int)"), self.doubleClickedListTool)
103 self.connect(self.parent().url_documentation_daw, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
104 self.connect(self.parent().url_website_daw, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
105 self.connect(self.parent().url_documentation_host, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
106 self.connect(self.parent().url_website_host, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
107 self.connect(self.parent().url_documentation_ins, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
108 self.connect(self.parent().url_website_ins, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
109 self.connect(self.parent().url_documentation_ghostess, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
110 self.connect(self.parent().url_website_ghostess, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
111 self.connect(self.parent().url_documentation_bristol, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
112 self.connect(self.parent().url_website_bristol, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
113 self.connect(self.parent().url_documentation_effect, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
114 self.connect(self.parent().url_website_effect, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
115 self.connect(self.parent().url_documentation_tool, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
116 self.connect(self.parent().url_website_tool, SIGNAL("leftClickedUrl(QString)"), self.openUrl)
118 def parent(self):
119 return self._parent
121 def settings(self):
122 return self._settings
124 def connect(self, widget, signal, func):
125 self.parent().connect(widget, signal, func)
127 def getIcon(self, icon, size=48):
128 return QIcon.fromTheme(icon, QIcon(self.MyIcons.getIconPath(icon, size)))
130 def getIconForYesNo(self, yesno, size=16):
131 return self.getIcon("dialog-ok-apply" if (yesno) else "dialog-cancel", size)
133 def getSelectedApp(self):
134 tab_index = self.parent().tabWidget.currentIndex()
135 column_name = 2 if (tab_index == TAB_INDEX_BRISTOL) else 1
137 if (tab_index == TAB_INDEX_DAW):
138 listSel = self.parent().listDAW
139 elif (tab_index == TAB_INDEX_HOST):
140 listSel = self.parent().listHost
141 elif (tab_index == TAB_INDEX_INSTRUMENT):
142 listSel = self.parent().listInstrument
143 elif (tab_index == TAB_INDEX_GHOSTESS):
144 listSel = self.parent().listGhostess
145 elif (tab_index == TAB_INDEX_BRISTOL):
146 listSel = self.parent().listBristol
147 elif (tab_index == TAB_INDEX_EFFECT):
148 listSel = self.parent().listEffect
149 elif (tab_index == TAB_INDEX_TOOL):
150 listSel = self.parent().listTool
151 else:
152 return ""
154 return QStringStr(listSel.item(listSel.currentRow(), column_name).text())
156 def getBinaryFromAppName(self, appname):
157 list_DAW = database.list_DAW
158 for Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs in list_DAW:
159 if (appname == AppName):
160 return Binary
162 list_Host = database.list_Host
163 for Package, AppName, Instruments, Effects, Binary, Icon, Save, Level, License, Features, Docs in list_Host:
164 if (appname == AppName):
165 return Binary
167 list_Instrument = database.list_Instrument
168 for Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs in list_Instrument:
169 if (appname == AppName):
170 return Binary
172 list_Ghostess = database.list_Ghostess
173 for Package, PluginName, Type, PluginBinaryLabel, Icon, Save, Level, License, Features, Docs in list_Ghostess:
174 if (appname == PluginName):
175 ghname = PluginBinaryLabel.split(":")[1].replace(" ","_")
176 binary = "ghostess "+PluginBinaryLabel+" -hostname "+ghname
177 return binary
179 list_Bristol = database.list_Bristol
180 for Package, AppName, Type, ShortName, Icon, Save, Level, License, Features, Docs in list_Bristol:
181 if (appname == AppName):
182 binary = "startBristol -audio jack -midi jack -"+ShortName
183 return binary
185 list_Effect = database.list_Effect
186 for Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs in list_Effect:
187 if (appname == AppName):
188 return Binary
190 list_Tool = database.list_Tool
191 for Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs in list_Tool:
192 if (appname == AppName):
193 return Binary
195 print "Failed to find binary from App name"
196 return ""
198 def doubleClickedListDAW(self, row, column):
199 app = QStringStr(self.parent().listDAW.item(row, 1).text())
200 if (self.ladish_only):
201 self.addAppToLADISH(app)
202 else:
203 self.startApp(app)
205 def doubleClickedListHost(self, row, column):
206 app = QStringStr(self.parent().listHost.item(row, 1).text())
207 if (self.ladish_only):
208 self.addAppToLADISH(app)
209 else:
210 self.startApp(app)
212 def doubleClickedListInstrument(self, row, column):
213 app = QStringStr(self.parent().listInstrument.item(row, 1).text())
214 if (self.ladish_only):
215 self.addAppToLADISH(app)
216 else:
217 self.startApp(app)
219 def doubleClickedListGhostess(self, row, column):
220 app = QStringStr(self.parent().listGhostess.item(row, 1).text())
221 if (self.ladish_only):
222 self.addAppToLADISH(app)
223 else:
224 self.startApp(app)
226 def doubleClickedListBristol(self, row, column):
227 app = QStringStr(self.parent().listBristol.item(row, 2).text())
228 if (self.ladish_only):
229 self.addAppToLADISH(app)
230 else:
231 self.startApp(app)
233 def doubleClickedListEffect(self, row, column):
234 app = QStringStr(self.parent().listEffect.item(row, 1).text())
235 if (self.ladish_only):
236 self.addAppToLADISH(app)
237 else:
238 self.startApp(app)
240 def doubleClickedListTool(self, row, column):
241 app = QStringStr(self.parent().listTool.item(row, 1).text())
242 if (self.ladish_only):
243 self.addAppToLADISH(app)
244 else:
245 self.startApp(app)
247 def startApp(self, app=None):
248 if (not app):
249 app = self.getSelectedApp()
250 binary = self.getBinaryFromAppName(app)
251 os.system("cd '%s' && %s &" % (QStringStr(self.parent().getProjectFolder()), binary))
253 def addAppToLADISH(self, app=None):
254 if (not app):
255 app = self.getSelectedApp()
256 binary = self.getBinaryFromAppName(app)
258 if (binary.startswith("startBristol")):
259 self.createAppTemplate("bristol", app, binary)
261 elif (app in ["Ardour", "Ardour (32bit)", "ArdourVST", "ArdourVST (32bit)"]):
262 self.createAppTemplate("ardour2", app, binary)
264 elif (app == "Calf Jack Host (GIT)"):
265 self.createAppTemplate("calfjackhost", app, binary)
267 #elif (app == "FeSTige"):
268 #self.createAppTemplate("festige", app, binary)
270 elif (app in ["Hydrogen", "Hydrogen (SVN)"]):
271 self.createAppTemplate("hydrogen", app, binary)
273 elif (app == "Jack Mixer"):
274 self.createAppTemplate("jack-mixer", app, binary)
276 elif (app == "Jack Rack"):
277 self.createAppTemplate("jack-rack", app, binary)
279 elif (app == "Jacker"):
280 self.createAppTemplate("jacker", app, binary)
282 elif (app == "Jamin"):
283 self.createAppTemplate("jamin", app, binary)
285 elif (app in ["MusE", "MusE (SVN)"]):
286 self.createAppTemplate("muse", app, binary)
288 elif (app == "Non-DAW"):
289 self.createAppTemplate("non-daw", app, binary)
291 elif (app == "Non-Mixer"):
292 self.createAppTemplate("non-mixer", app, binary)
294 elif (app == "Non-Sequencer"):
295 self.createAppTemplate("non-sequencer", app, binary)
297 elif (app in ["Qsampler", "Qsampler (SVN)"]):
298 self.createAppTemplate("qsampler", app, binary)
300 elif (app in ["Qtractor", "Qtractor (SVN)", "Qtractor (32bit)"]):
301 self.createAppTemplate("qtractor", app, binary)
303 elif (app in ["Renoise", "Renoise (32bit)"]):
304 self.createAppTemplate("renoise", app, binary)
306 elif (app == "Rosegarden"):
307 self.createAppTemplate("rosegarden", app, binary)
309 elif (app == "Seq24"):
310 self.createAppTemplate("seq24", app, binary)
312 elif (app == "Yoshimi"):
313 self.createAppTemplate("yoshimi", app, binary)
315 else:
316 appBus = self.parent().getAppBus()
317 appBus.RunCustom(False, binary, str(app), 0)
319 def createAppTemplate(self, app, app_name, binary):
320 rand_check = randint(1, 99999)
321 proj_srate = str(self.parent().getSampleRate())
322 proj_bpm = str(self.parent().getBPM())
323 proj_folder = QStringStr(self.parent().getProjectFolder())
325 tmplte_file = None
326 tmplte_cmd = ""
327 tmplte_lvl = "0"
329 if (not os.path.exists(proj_folder)):
330 os.mkdir(proj_folder)
332 if (app == "ardour2"):
333 tmplte_folder = os.path.join(proj_folder, "Ardour2_%i" % (rand_check))
334 tmplte_file = os.path.join(tmplte_folder, "Ardour2_%i.ardour" % (rand_check))
335 os.mkdir(tmplte_folder)
337 # Create template
338 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Ardour2", "Ardour2.ardour"), tmplte_file))
339 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Ardour2", "instant.xml"), tmplte_folder))
340 os.mkdir(os.path.join(tmplte_folder, "analysis"))
341 os.mkdir(os.path.join(tmplte_folder, "dead_sounds"))
342 os.mkdir(os.path.join(tmplte_folder, "export"))
343 os.mkdir(os.path.join(tmplte_folder, "interchange"))
344 os.mkdir(os.path.join(tmplte_folder, "interchange", "Ardour"))
345 os.mkdir(os.path.join(tmplte_folder, "interchange", "Ardour", "audiofiles"))
346 os.mkdir(os.path.join(tmplte_folder, "peaks"))
348 tmplte_cmd = binary
349 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_folder) if self.parent().isRoom() else tmplte_folder)
351 tmplte_lvl = "0" # FIXME - detect this
353 elif (app == "bristol"):
354 module = binary.replace("startBristol -audio jack -midi jack -", "")
355 tmplte_folder = os.path.join(proj_folder, "bristol_%s_%i" % (module, rand_check))
356 os.mkdir(tmplte_folder)
358 if (self.parent().isRoom()):
359 tmplte_folder = os.path.basename(tmplte_folder)
361 tmplte_cmd = binary
362 tmplte_cmd += " -emulate %s" % (module)
363 tmplte_cmd += " -cache '%s'" % (tmplte_folder)
364 tmplte_cmd += " -memdump '%s'" % (tmplte_folder)
365 tmplte_cmd += " -import '%s'" % (os.path.join(tmplte_folder, "memory"))
366 tmplte_cmd += " -exec"
368 tmplte_lvl = "1"
370 elif (app == "calfjackhost"):
371 tmplte_file_r = os.path.join(proj_folder, "CalfJackHost_%i" % (rand_check))
373 # Create template
374 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "CalfJackHost"), tmplte_file_r))
376 tmplte_cmd = binary
377 tmplte_cmd += " --load '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
379 tmplte_lvl = "1"
381 elif (app == "hydrogen"):
382 tmplte_file = os.path.join(proj_folder, "Hydrogen_%i.h2song" % (rand_check))
384 # Create template
385 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Hydrogen.h2song"), tmplte_file))
387 tmplte_cmd = binary
388 tmplte_cmd += " -s '%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
390 tmplte_lvl = "1"
392 elif (app == "jack-mixer"):
393 tmplte_file_r = os.path.join(proj_folder, "Jack-Mixer_%i.xml" % (rand_check))
395 # Create template
396 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Jack-Mixer.xml"), tmplte_file_r))
398 tmplte_cmd = binary
399 tmplte_cmd += " -c '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
401 tmplte_lvl = "1"
403 elif (app == "jack-rack"):
404 tmplte_file = os.path.join(proj_folder, "Jack-Rack_%i.xml" % (rand_check))
406 # Create template
407 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Jack-Rack.xml"), tmplte_file))
409 tmplte_cmd = binary
410 tmplte_cmd += " -s '%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
412 elif (app == "jacker"):
413 tmplte_file = os.path.join(proj_folder, "Jacker_%i.jsong" % (rand_check))
415 # Create template
416 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Jacker.jsong"), tmplte_file))
418 tmplte_cmd = binary
419 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
421 # No decimal bpm support
422 proj_bpm = proj_bpm.split(".")[0]
424 tmplte_lvl = "1"
426 elif (app == "jamin"):
427 tmplte_file_r = os.path.join(proj_folder, "Jamin_%i.jam" % (rand_check))
429 # Create template
430 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Jamin.jam"), tmplte_file_r))
432 tmplte_cmd = binary
433 tmplte_cmd += " -f '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
435 elif (app == "muse"):
436 tmplte_file_r = os.path.join(proj_folder, "MusE_%i.med" % (rand_check))
438 # Create template
439 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "MusE.med"), tmplte_file_r))
441 tmplte_cmd = binary
442 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
444 elif (app == "non-daw"):
445 tmplte_folder = os.path.join(proj_folder, "Non-DAW_%i" % (rand_check))
447 # Create template
448 os.system("cp -r '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Non-DAW"), tmplte_folder))
449 os.mkdir(os.path.join(tmplte_folder, "sources"))
451 os.system('sed -i "s/X_SR_X-KLAUDIA-X_SR_X/%s/" "%s"' % (proj_srate, os.path.join(tmplte_folder, "info")))
452 os.system('sed -i "s/X_BPM_X-KLAUDIA-X_BPM_X/%s/" "%s"' % (proj_bpm, os.path.join(tmplte_folder, "history")))
454 tmplte_cmd = binary
455 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_folder) if self.parent().isRoom() else tmplte_folder)
457 elif (app == "non-mixer"):
458 tmplte_folder = os.path.join(proj_folder, "Non-Mixer_%i" % (rand_check))
460 # Create template
461 os.system("cp -r '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Non-Mixer"), tmplte_folder))
463 tmplte_cmd = binary
464 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_folder) if self.parent().isRoom() else tmplte_folder)
466 elif (app == "non-sequencer"):
467 tmplte_file_r = os.path.join(proj_folder, "Non-Sequencer_%i.non" % (rand_check))
469 # Create template
470 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Non-Sequencer.non"), tmplte_file_r))
472 tmplte_cmd = binary
473 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
475 elif (app == "qsampler"):
476 tmplte_file_r = os.path.join(proj_folder, "Qsampler_%i.lscp" % (rand_check))
478 # Create template
479 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Qsampler.lscp"), tmplte_file_r))
481 tmplte_cmd = binary
482 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
484 tmplte_lvl = "1" if (app_name == "Qsampler (SVN)") else "0"
486 elif (app == "qtractor"):
487 tmplte_file = os.path.join(proj_folder, "Qtractor_%i.qtr" % (rand_check))
489 # Create template
490 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Qtractor.qtr"), tmplte_file))
492 tmplte_cmd = binary
493 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
495 tmplte_lvl = "1"
497 elif (app == "renoise"):
498 tmplte_file_r = os.path.join(proj_folder, "Renoise_%i.xrns" % (rand_check))
499 tmplte_folder = os.path.join(proj_folder, "tmp_renoise_%i" % (rand_check))
501 # Create template
502 os.mkdir(tmplte_folder)
503 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Renoise.xml"), tmplte_folder))
504 os.system('sed -i "s/X_SR_X-KLAUDIA-X_SR_X/%s/" "%s"' % (proj_srate, os.path.join(tmplte_folder, "Renoise.xml")))
505 os.system("cd '%s' && mv Renoise.xml Song.xml && zip '%s' Song.xml" % (tmplte_folder, tmplte_file_r))
506 os.system("rm -rf '%s'" % (tmplte_folder))
508 tmplte_cmd = binary
509 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
511 elif (app == "rosegarden"):
512 tmplte_file = os.path.join(proj_folder, "Rosegarden_%i.rg" % (rand_check))
514 # Create template
515 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Rosegarden.rg"), tmplte_file))
517 tmplte_cmd = binary
518 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
520 tmplte_lvl = "1"
522 elif (app == "seq24"):
523 tmplte_file_r = os.path.join(proj_folder, "Seq24_%i.midi" % (rand_check))
525 # Create template
526 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Seq24.midi"), tmplte_file_r))
528 tmplte_cmd = binary
529 tmplte_cmd += " '%s'" % (os.path.basename(tmplte_file_r) if self.parent().isRoom() else tmplte_file_r)
531 tmplte_lvl = "1"
533 elif (app == "yoshimi"):
534 tmplte_file = os.path.join(proj_folder, "Yoshimi_%i.state" % (rand_check))
536 # Create template
537 os.system("cp '%s' '%s'" % (os.path.join(sys.path[0], "..", "templates", "Yoshimi.state"), tmplte_file))
539 tmplte_cmd = binary
540 tmplte_cmd += " --state='%s'" % (os.path.basename(tmplte_file) if self.parent().isRoom() else tmplte_file)
542 tmplte_lvl = "1"
544 else:
545 print "ERROR: Failed to parse app name"
546 return
548 if (tmplte_file != None):
549 os.system('sed -i "s/X_SR_X-KLAUDIA-X_SR_X/%s/" "%s"' % (proj_srate, tmplte_file))
550 os.system('sed -i "s/X_BPM_X-KLAUDIA-X_BPM_X/%s/" "%s"' % (proj_bpm, tmplte_file))
551 os.system('sed -i "s/X_FOLDER_X-KLAUDIA-X_FOLDER_X/%s/" "%s"' % (proj_folder.replace("/", "\/").replace("$", "\$"), tmplte_file))
553 appBus = self.parent().getAppBus()
554 appBus.RunCustom(False, tmplte_cmd, app_name, int(tmplte_lvl))
556 def openUrl(self, qurl):
557 os.system("xdg-open '%s' &" % (QStringStr(qurl)))
559 def clearInfo_DAW(self):
560 self.parent().ico_app_daw.setPixmap(self.getIcon("start-here").pixmap(48, 48))
561 self.parent().label_name_daw.setText("App Name")
562 self.parent().ico_ladspa_daw.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
563 self.parent().ico_dssi_daw.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
564 self.parent().ico_lv2_daw.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
565 self.parent().ico_vst_daw.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
566 self.parent().label_vst_mode_daw.setText("")
567 self.parent().ico_jack_transport_daw.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
568 self.parent().label_midi_mode_daw.setText("---")
569 self.parent().label_ladish_level_daw.setText("0")
570 self.parent().frame_DAW.setEnabled(False)
571 self.showDoc_DAW("", "")
573 def clearInfo_Host(self):
574 self.parent().ico_app_host.setPixmap(self.getIcon("start-here").pixmap(48, 48))
575 self.parent().label_name_host.setText("App Name")
576 self.parent().ico_ladspa_host.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
577 self.parent().ico_dssi_host.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
578 self.parent().ico_lv2_host.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
579 self.parent().ico_vst_host.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
580 self.parent().label_vst_mode_host.setText("")
581 self.parent().label_midi_mode_host.setText("---")
582 self.parent().label_ladish_level_host.setText("0")
583 self.parent().frame_Host.setEnabled(False)
584 self.showDoc_Host("", "")
586 def clearInfo_Intrument(self):
587 self.parent().ico_app_ins.setPixmap(self.getIcon("start-here").pixmap(48, 48))
588 self.parent().label_name_ins.setText("App Name")
589 self.parent().ico_builtin_fx_ins.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
590 self.parent().ico_audio_input_ins.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
591 self.parent().label_midi_mode_ins.setText("---")
592 self.parent().label_ladish_level_ins.setText("0")
593 self.parent().frame_Instrument.setEnabled(False)
594 self.showDoc_Instrument("", "")
596 def clearInfo_Ghostess(self):
597 self.parent().ico_app_ghostess.setPixmap(self.getIcon("start-here").pixmap(48, 48))
598 self.parent().label_name_ghostess.setText("Plugin Name")
599 self.parent().ico_builtin_fx_ghostess.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
600 self.parent().ico_stereo_ghostess.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
601 self.parent().label_midi_mode_ghostess.setText("---")
602 self.parent().label_ladish_level_ghostess.setText("0")
603 self.parent().frame_Ghostess.setEnabled(False)
604 self.showDoc_Ghostess("", "")
606 def clearInfo_Bristol(self):
607 self.parent().ico_app_bristol.setPixmap(self.getIcon("start-here").pixmap(48, 48))
608 self.parent().label_name_bristol.setText("App Name")
609 self.parent().ico_builtin_fx_bristol.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
610 self.parent().ico_audio_input_bristol.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
611 self.parent().label_midi_mode_bristol.setText("---")
612 self.parent().label_ladish_level_bristol.setText("0")
613 self.parent().frame_Bristol.setEnabled(False)
614 self.showDoc_Bristol("", "")
616 def clearInfo_Effect(self):
617 self.parent().ico_app_effect.setPixmap(self.getIcon("start-here").pixmap(48, 48))
618 self.parent().label_name_effect.setText("App Name")
619 self.parent().ico_stereo_effect.setPixmap(self.getIconForYesNo(False).pixmap(16, 16))
620 self.parent().label_midi_mode_effect.setText("---")
621 self.parent().label_ladish_level_effect.setText("0")
622 self.parent().frame_Effect.setEnabled(False)
623 self.showDoc_Effect("", "")
625 def clearInfo_Tool(self):
626 self.parent().ico_app_tool.setPixmap(self.getIcon("start-here").pixmap(48, 48))
627 self.parent().label_name_tool.setText("App Name")
628 self.parent().label_midi_mode_tool.setText("---")
629 self.parent().label_ladish_level_tool.setText("0")
630 self.parent().frame_Tool.setEnabled(False)
631 self.showDoc_Tool("", "")
633 def checkSelectedTab(self, tab_index):
634 test_selected = False
635 if (tab_index == TAB_INDEX_DAW):
636 if (len(self.parent().listDAW.selectedItems()) > 0):
637 test_selected = True
638 elif (tab_index == TAB_INDEX_HOST):
639 if (len(self.parent().listHost.selectedItems()) > 0):
640 test_selected = True
641 elif (tab_index == TAB_INDEX_INSTRUMENT):
642 if (len(self.parent().listInstrument.selectedItems()) > 0):
643 test_selected = True
644 elif (tab_index == TAB_INDEX_GHOSTESS):
645 if (len(self.parent().listGhostess.selectedItems()) > 0):
646 test_selected = True
647 elif (tab_index == TAB_INDEX_BRISTOL):
648 if (len(self.parent().listBristol.selectedItems()) > 0):
649 test_selected = True
650 elif (tab_index == TAB_INDEX_EFFECT):
651 if (len(self.parent().listEffect.selectedItems()) > 0):
652 test_selected = True
653 elif (tab_index == TAB_INDEX_TOOL):
654 if (len(self.parent().listTool.selectedItems()) > 0):
655 test_selected = True
657 self.parent().checkGUI(test_selected)
659 def checkSelectedDAW(self, row, column, p_row, p_column):
660 if (row >= 0):
661 test_selected = True
663 app_name = QStringStr(self.parent().listDAW.item(row, 1).text())
664 list_DAW = database.list_DAW
666 for i in range(len(list_DAW)):
667 if (app_name == list_DAW[i][1]):
668 app_info = list_DAW[i]
669 break
670 else:
671 print "ERROR: Failed to retrieve app info from database"
672 return
674 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = app_info
676 self.parent().frame_DAW.setEnabled(True)
677 self.parent().ico_app_daw.setPixmap(QIcon(self.getIcon(Icon)).pixmap(48, 48))
678 self.parent().ico_ladspa_daw.setPixmap(QIcon(self.getIconForYesNo(Features[0])).pixmap(16, 16))
679 self.parent().ico_dssi_daw.setPixmap(QIcon(self.getIconForYesNo(Features[1])).pixmap(16, 16))
680 self.parent().ico_lv2_daw.setPixmap(QIcon(self.getIconForYesNo(Features[2])).pixmap(16, 16))
681 self.parent().ico_vst_daw.setPixmap(QIcon(self.getIconForYesNo(Features[3])).pixmap(16, 16))
682 self.parent().ico_jack_transport_daw.setPixmap(QIcon(self.getIconForYesNo(Features[5])).pixmap(16, 16))
683 self.parent().label_name_daw.setText(AppName)
684 self.parent().label_vst_mode_daw.setText(Features[4])
685 self.parent().ico_midi_mode_daw.setPixmap(QIcon(self.getIconForYesNo(Features[6])).pixmap(16, 16))
686 self.parent().label_midi_mode_daw.setText(Features[7])
687 self.parent().label_ladish_level_daw.setText(str(Level))
689 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
690 self.showDoc_DAW(Docs0, Docs[1])
692 else:
693 test_selected = False
694 self.clearInfo_DAW()
696 self.parent().checkGUI(test_selected)
698 def checkSelectedHost(self, row, column, p_row, p_column):
699 if (row >= 0):
700 test_selected = True
702 app_name = QStringStr(self.parent().listHost.item(row, 1).text())
703 list_Host = database.list_Host
705 for i in range(len(list_Host)):
706 if (app_name == list_Host[i][1]):
707 app_info = list_Host[i]
708 break
709 else:
710 print "ERROR: Failed to retrieve app info from database"
711 return
713 Package, AppName, Instruments, Effects, Binary, Icon, Save, Level, License, Features, Docs = app_info
715 self.parent().frame_Host.setEnabled(True)
716 self.parent().ico_app_host.setPixmap(self.getIcon(Icon).pixmap(48, 48))
717 self.parent().ico_internal_host.setPixmap(self.getIconForYesNo(Features[0]).pixmap(16, 16))
718 self.parent().ico_ladspa_host.setPixmap(self.getIconForYesNo(Features[1]).pixmap(16, 16))
719 self.parent().ico_dssi_host.setPixmap(self.getIconForYesNo(Features[2]).pixmap(16, 16))
720 self.parent().ico_lv2_host.setPixmap(self.getIconForYesNo(Features[3]).pixmap(16, 16))
721 self.parent().ico_vst_host.setPixmap(self.getIconForYesNo(Features[4]).pixmap(16, 16))
722 self.parent().label_name_host.setText(AppName)
723 self.parent().label_vst_mode_host.setText(Features[5])
724 self.parent().label_midi_mode_host.setText(Features[6])
725 self.parent().label_ladish_level_host.setText(str(Level))
727 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
728 self.showDoc_Host(Docs0, Docs[1])
730 else:
731 test_selected = False
732 self.clearInfo_DAW()
734 self.parent().checkGUI(test_selected)
736 def checkSelectedInstrument(self, row, column, p_row, p_column):
737 if (row >= 0):
738 test_selected = True
740 app_name = QStringStr(self.parent().listInstrument.item(row, 1).text())
741 list_Instrument = database.list_Instrument
743 for i in range(len(list_Instrument)):
744 if (app_name == list_Instrument[i][1]):
745 app_info = list_Instrument[i]
746 break
747 else:
748 print "ERROR: Failed to retrieve app info from database"
749 return
751 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = app_info
753 self.parent().frame_Instrument.setEnabled(True)
754 self.parent().ico_app_ins.setPixmap(self.getIcon(Icon).pixmap(48, 48))
755 self.parent().ico_builtin_fx_ins.setPixmap(self.getIconForYesNo(Features[0]).pixmap(16, 16))
756 self.parent().ico_audio_input_ins.setPixmap(self.getIconForYesNo(Features[1]).pixmap(16, 16))
757 self.parent().label_name_ins.setText(AppName)
758 self.parent().label_midi_mode_ins.setText(Features[2])
759 self.parent().label_ladish_level_ins.setText(str(Level))
761 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
762 self.showDoc_Instrument(Docs0, Docs[1])
764 else:
765 test_selected = False
766 self.clearInfo_Intrument()
768 self.parent().checkGUI(test_selected)
770 def checkSelectedGhostess(self, row, column, p_row, p_column):
771 if (row >= 0):
772 test_selected = True
774 app_name = QStringStr(self.parent().listGhostess.item(row, 1).text())
775 list_Ghostess = database.list_Ghostess
777 for i in range(len(list_Ghostess)):
778 if (app_name == list_Ghostess[i][1]):
779 app_info = list_Ghostess[i]
780 break
781 else:
782 print "ERROR: Failed to retrieve app info from database"
783 return
785 Package, PluginName, Type, PluginBinaryLabel, Icon, Save, Level, License, Features, Docs = app_info
787 self.parent().frame_Ghostess.setEnabled(True)
788 self.parent().ico_app_ghostess.setPixmap(self.getIcon(Icon).pixmap(48, 48))
789 self.parent().ico_builtin_fx_ghostess.setPixmap(self.getIconForYesNo(Features[0]).pixmap(16, 16))
790 self.parent().ico_stereo_ghostess.setPixmap(self.getIconForYesNo(Features[1]).pixmap(16, 16))
791 self.parent().label_name_ghostess.setText(PluginName)
792 self.parent().label_midi_mode_ghostess.setText(Features[2])
793 self.parent().label_ladish_level_ghostess.setText(str(Level))
795 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
796 self.showDoc_Ghostess(Docs0, Docs[1])
798 else:
799 test_selected = False
800 self.clearInfo_Ghostess()
802 self.parent().checkGUI(test_selected)
804 def checkSelectedBristol(self, row, column, p_row, p_column):
805 if (row >= 0):
806 test_selected = True
808 app_name = QStringStr(self.parent().listBristol.item(row, 2).text())
809 list_Bristol = database.list_Bristol
811 for i in range(len(list_Bristol)):
812 if (app_name == list_Bristol[i][1]):
813 app_info = list_Bristol[i]
814 break
815 else:
816 print "ERROR: Failed to retrieve app info from database"
817 return
819 Package, AppName, Type, ShortName, Icon, Save, Level, License, Features, Docs = app_info
821 self.parent().frame_Bristol.setEnabled(True)
822 self.parent().ico_app_bristol.setPixmap(self.getIcon(Icon).pixmap(48, 48))
823 self.parent().ico_builtin_fx_bristol.setPixmap(self.getIconForYesNo(Features[0]).pixmap(16, 16))
824 self.parent().ico_audio_input_bristol.setPixmap(self.getIconForYesNo(Features[1]).pixmap(16, 16))
825 self.parent().label_name_bristol.setText(AppName)
826 self.parent().label_midi_mode_bristol.setText(Features[2])
827 self.parent().label_ladish_level_bristol.setText(str(Level))
829 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
830 self.showDoc_Bristol(Docs0, Docs[1])
832 else:
833 test_selected = False
834 self.clearInfo_Bristol()
836 self.parent().checkGUI(test_selected)
838 def checkSelectedEffect(self, row, column, p_row, p_column):
839 if (row >= 0):
840 test_selected = True
842 app_name = QStringStr(self.parent().listEffect.item(row, 1).text())
843 list_Effect = database.list_Effect
845 for i in range(len(list_Effect)):
846 if (app_name == list_Effect[i][1]):
847 app_info = list_Effect[i]
848 break
849 else:
850 print "ERROR: Failed to retrieve app info from database"
851 return
853 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = app_info
855 self.parent().frame_Effect.setEnabled(True)
856 self.parent().ico_app_effect.setPixmap(self.getIcon(Icon).pixmap(48, 48))
857 self.parent().ico_stereo_effect.setPixmap(self.getIconForYesNo(Features[0]).pixmap(16, 16))
858 self.parent().label_name_effect.setText(AppName)
859 self.parent().label_midi_mode_effect.setText(Features[1])
860 self.parent().label_ladish_level_effect.setText(str(Level))
862 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
863 self.showDoc_Effect(Docs0, Docs[1])
865 else:
866 test_selected = False
867 self.clearInfo_Effect()
869 self.parent().checkGUI(test_selected)
871 def checkSelectedTool(self, row, column, p_row, p_column):
872 if (row >= 0):
873 test_selected = True
875 app_name = QStringStr(self.parent().listTool.item(row, 1).text())
876 list_Tool = database.list_Tool
878 for i in range(len(list_Tool)):
879 if (app_name == list_Tool[i][1]):
880 app_info = list_Tool[i]
881 break
882 else:
883 print "ERROR: Failed to retrieve app info from database"
884 return
886 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = app_info
888 self.parent().frame_Tool.setEnabled(True)
889 self.parent().ico_app_tool.setPixmap(self.getIcon(Icon).pixmap(48, 48))
890 self.parent().label_name_tool.setText(AppName)
891 self.parent().label_midi_mode_tool.setText(Features[0])
892 self.parent().ico_jack_transport_tool.setPixmap(self.getIconForYesNo(Features[1]).pixmap(16, 16))
893 self.parent().label_ladish_level_tool.setText(str(Level))
895 Docs0 = Docs[0] if (os.path.exists(Docs[0].replace("file://",""))) else ""
896 self.showDoc_Tool(Docs0, Docs[1])
898 else:
899 test_selected = False
900 self.clearInfo_Tool()
902 self.parent().checkGUI(test_selected)
904 def showDoc_DAW(self, doc, web):
905 self.parent().url_documentation_daw.setVisible(bool(doc))
906 self.parent().url_website_daw.setVisible(bool(web))
907 self.parent().label_no_help_daw.setVisible(not(doc or web))
909 if (doc): self.setDocUrl(self.parent().url_documentation_daw, doc)
910 if (web): self.setWebUrl(self.parent().url_website_daw, web)
912 def showDoc_Host(self, doc, web):
913 self.parent().url_documentation_host.setVisible(bool(doc))
914 self.parent().url_website_host.setVisible(bool(web))
915 self.parent().label_no_help_host.setVisible(not(doc or web))
917 if (doc): self.setDocUrl(self.parent().url_documentation_host, doc)
918 if (web): self.setWebUrl(self.parent().url_website_host, web)
920 def showDoc_Instrument(self, doc, web):
921 self.parent().url_documentation_ins.setVisible(bool(doc))
922 self.parent().url_website_ins.setVisible(bool(web))
923 self.parent().label_no_help_ins.setVisible(not(doc or web))
925 if (doc): self.setDocUrl(self.parent().url_documentation_ins, doc)
926 if (web): self.setWebUrl(self.parent().url_website_ins, web)
928 def showDoc_Ghostess(self, doc, web):
929 self.parent().url_documentation_ghostess.setVisible(bool(doc))
930 self.parent().url_website_ghostess.setVisible(bool(web))
931 self.parent().label_no_help_ghostess.setVisible(not(doc or web))
933 if (doc): self.setDocUrl(self.parent().url_documentation_ghostess, doc)
934 if (web): self.setWebUrl(self.parent().url_website_ghostess, web)
936 def showDoc_Bristol(self, doc, web):
937 self.parent().url_documentation_bristol.setVisible(bool(doc))
938 self.parent().url_website_bristol.setVisible(bool(web))
939 self.parent().label_no_help_bristol.setVisible(not(doc or web))
941 if (doc): self.setDocUrl(self.parent().url_documentation_bristol, doc)
942 if (web): self.setWebUrl(self.parent().url_website_bristol, web)
944 def showDoc_Effect(self, doc, web):
945 self.parent().url_documentation_effect.setVisible(bool(doc))
946 self.parent().url_website_effect.setVisible(bool(web))
947 self.parent().label_no_help_effect.setVisible(not(doc or web))
949 if (doc): self.setDocUrl(self.parent().url_documentation_effect, doc)
950 if (web): self.setWebUrl(self.parent().url_website_effect, web)
952 def showDoc_Tool(self, doc, web):
953 self.parent().url_documentation_tool.setVisible(bool(doc))
954 self.parent().url_website_tool.setVisible(bool(web))
955 self.parent().label_no_help_tool.setVisible(not(doc or web))
957 if (doc): self.setDocUrl(self.parent().url_documentation_tool, doc)
958 if (web): self.setWebUrl(self.parent().url_website_tool, web)
960 def setDocUrl(self, item, link):
961 item.setText(self.parent().tr("<a href='%1'>Documentation</a>").arg(link))
963 def setWebUrl(self, item, link):
964 item.setText(self.parent().tr("<a href='%1'>WebSite</a>").arg(link))
966 def clearAll(self):
967 self.parent().listDAW.clearContents()
968 self.parent().listHost.clearContents()
969 self.parent().listInstrument.clearContents()
970 self.parent().listGhostess.clearContents()
971 self.parent().listBristol.clearContents()
972 self.parent().listEffect.clearContents()
973 self.parent().listTool.clearContents()
974 for i in range(self.parent().listDAW.rowCount()):
975 self.parent().listDAW.removeRow(0)
976 for i in range(self.parent().listHost.rowCount()):
977 self.parent().listHost.removeRow(0)
978 for i in range(self.parent().listInstrument.rowCount()):
979 self.parent().listInstrument.removeRow(0)
980 for i in range(self.parent().listGhostess.rowCount()):
981 self.parent().listGhostess.removeRow(0)
982 for i in range(self.parent().listBristol.rowCount()):
983 self.parent().listBristol.removeRow(0)
984 for i in range(self.parent().listEffect.rowCount()):
985 self.parent().listEffect.removeRow(0)
986 for i in range(self.parent().listTool.rowCount()):
987 self.parent().listTool.removeRow(0)
989 def refreshAll(self):
990 self.clearAll()
992 if (not SHOW_ALL):
993 pkglist = []
995 if (os.path.exists("/usr/bin/yaourt")):
996 pkg_out = getoutput("/usr/bin/yaourt -Qsq").split("\n")
997 for package in pkg_out:
998 pkglist.append(package)
1000 elif (os.path.exists("/usr/bin/pacman")):
1001 pkg_out = getoutput("/usr/bin/pacman -Qsq").split("\n")
1002 for package in pkg_out:
1003 pkglist.append(package)
1005 elif (os.path.exists("/usr/bin/dpkg-query")):
1006 pkg_out = getoutput("/usr/bin/dpkg-query -W --showformat='${Package}\n'").split("\n")
1007 for package in pkg_out:
1008 pkglist.append(package)
1010 elif (os.path.exists("/usr/bin/equery")):
1011 pkg_out = getoutput("/usr/bin/equery list").split("\n")
1013 for pkg_info in pkg_out:
1014 if pkg_info.startswith("[I--] "):
1015 pkg_info_small = pkg_info.replace("[I--] ","",1).split("]",1)[1].split("/",1)[1].split("(",1)[0]
1017 # Find '-' that splits package's name-version
1018 pkg_info_split = pkg_info_small.split("-")
1019 pkg_info_word_count = 0
1021 for i in range(len(pkg_info_split)):
1022 if (i == 0): continue
1023 else: pkg_info_word_count += len(pkg_info_split[i-1])
1025 if (pkg_info_split[i][0].isdigit()):
1026 pkg_info_sep = i + pkg_info_word_count -1
1027 break
1029 else:
1030 # Could not find info separator
1031 continue
1033 package = pkg_info_small[0:pkg_info_sep]
1034 pkglist.append(package)
1036 if (not SHOW_ALL and not "ghostess" in pkglist):
1037 self.parent().tabWidget.setTabEnabled(TAB_INDEX_GHOSTESS, False)
1039 if (not SHOW_ALL and not "bristol" in pkglist):
1040 self.parent().tabWidget.setTabEnabled(TAB_INDEX_BRISTOL, False)
1042 last_pos = 0
1043 list_DAW = database.list_DAW
1044 for i in range(len(list_DAW)):
1045 if (SHOW_ALL or list_DAW[i][0] in pkglist):
1046 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = list_DAW[i]
1048 w_icon = QTableWidgetItem("")
1049 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1050 w_name = QTableWidgetItem(AppName)
1051 w_type = QTableWidgetItem(Type)
1052 w_save = QTableWidgetItem(Save)
1053 w_licc = QTableWidgetItem(License)
1055 self.parent().listDAW.insertRow(last_pos)
1056 self.parent().listDAW.setItem(last_pos, 0, w_icon)
1057 self.parent().listDAW.setItem(last_pos, 1, w_name)
1058 self.parent().listDAW.setItem(last_pos, 2, w_type)
1059 self.parent().listDAW.setItem(last_pos, 3, w_save)
1060 self.parent().listDAW.setItem(last_pos, 4, w_licc)
1062 last_pos += 1
1064 last_pos = 0
1065 list_Host = database.list_Host
1066 for i in range(len(list_Host)):
1067 if (SHOW_ALL or list_Host[i][0] in pkglist):
1068 Package, AppName, Instruments, Effects, Binary, Icon, Save, Level, License, Features, Docs = list_Host[i]
1070 w_icon = QTableWidgetItem("")
1071 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1072 w_name = QTableWidgetItem(AppName)
1073 w_h_in = QTableWidgetItem(Instruments)
1074 w_h_ef = QTableWidgetItem(Effects)
1075 w_save = QTableWidgetItem(Save)
1076 w_licc = QTableWidgetItem(License)
1078 self.parent().listHost.insertRow(last_pos)
1079 self.parent().listHost.setItem(last_pos, 0, w_icon)
1080 self.parent().listHost.setItem(last_pos, 1, w_name)
1081 self.parent().listHost.setItem(last_pos, 2, w_h_in)
1082 self.parent().listHost.setItem(last_pos, 3, w_h_ef)
1083 self.parent().listHost.setItem(last_pos, 4, w_save)
1084 self.parent().listHost.setItem(last_pos, 5, w_licc)
1086 last_pos += 1
1088 last_pos = 0
1089 list_Instrument = database.list_Instrument
1090 for i in range(len(list_Instrument)):
1091 if (SHOW_ALL or list_Instrument[i][0] in pkglist):
1092 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = list_Instrument[i]
1094 w_icon = QTableWidgetItem("")
1095 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1096 w_name = QTableWidgetItem(AppName)
1097 w_type = QTableWidgetItem(Type)
1098 w_save = QTableWidgetItem(Save)
1099 w_licc = QTableWidgetItem(License)
1101 self.parent().listInstrument.insertRow(last_pos)
1102 self.parent().listInstrument.setItem(last_pos, 0, w_icon)
1103 self.parent().listInstrument.setItem(last_pos, 1, w_name)
1104 self.parent().listInstrument.setItem(last_pos, 2, w_type)
1105 self.parent().listInstrument.setItem(last_pos, 3, w_save)
1106 self.parent().listInstrument.setItem(last_pos, 4, w_licc)
1108 last_pos += 1
1110 last_pos = 0
1111 list_Ghostess = database.list_Ghostess
1112 for i in range(len(list_Ghostess)):
1113 if (SHOW_ALL or list_Ghostess[i][0] in pkglist):
1114 Package, PluginName, Type, PluginBinaryLabel, Icon, Save, Level, License, Features, Docs = list_Ghostess[i]
1116 w_icon = QTableWidgetItem("")
1117 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1118 w_name = QTableWidgetItem(PluginName)
1119 w_type = QTableWidgetItem(Type)
1120 w_save = QTableWidgetItem(Save)
1121 w_licc = QTableWidgetItem(License)
1123 self.parent().listGhostess.insertRow(last_pos)
1124 self.parent().listGhostess.setItem(last_pos, 0, w_icon)
1125 self.parent().listGhostess.setItem(last_pos, 1, w_name)
1126 self.parent().listGhostess.setItem(last_pos, 2, w_type)
1127 self.parent().listGhostess.setItem(last_pos, 3, w_save)
1128 self.parent().listGhostess.setItem(last_pos, 4, w_licc)
1130 last_pos += 1
1132 last_pos = 0
1133 list_Bristol = database.list_Bristol
1134 for i in range(len(list_Bristol)):
1135 if (SHOW_ALL or list_Bristol[i][0] in pkglist):
1136 Package, FullName, Type, ShortName, Icon, Save, Level, License, Features, Docs = list_Bristol[i]
1138 w_icon = QTableWidgetItem("")
1139 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1140 w_fullname = QTableWidgetItem(FullName)
1141 w_shortname = QTableWidgetItem(ShortName)
1143 self.parent().listBristol.insertRow(last_pos)
1144 self.parent().listBristol.setItem(last_pos, 0, w_icon)
1145 self.parent().listBristol.setItem(last_pos, 1, w_shortname)
1146 self.parent().listBristol.setItem(last_pos, 2, w_fullname)
1148 last_pos += 1
1150 last_pos = 0
1151 list_Effect = database.list_Effect
1152 for i in range(len(list_Effect)):
1153 if (SHOW_ALL or list_Effect[i][0] in pkglist):
1154 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = list_Effect[i]
1156 w_icon = QTableWidgetItem("")
1157 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1158 w_name = QTableWidgetItem(AppName)
1159 w_type = QTableWidgetItem(Type)
1160 w_save = QTableWidgetItem(Save)
1161 w_licc = QTableWidgetItem(License)
1163 self.parent().listEffect.insertRow(last_pos)
1164 self.parent().listEffect.setItem(last_pos, 0, w_icon)
1165 self.parent().listEffect.setItem(last_pos, 1, w_name)
1166 self.parent().listEffect.setItem(last_pos, 2, w_type)
1167 self.parent().listEffect.setItem(last_pos, 3, w_save)
1168 self.parent().listEffect.setItem(last_pos, 4, w_licc)
1170 last_pos += 1
1172 last_pos = 0
1173 list_Tool = database.list_Tool
1174 for i in range(len(list_Tool)):
1175 if (SHOW_ALL or list_Tool[i][0] in pkglist):
1176 Package, AppName, Type, Binary, Icon, Save, Level, License, Features, Docs = list_Tool[i]
1178 w_icon = QTableWidgetItem("")
1179 w_icon.setIcon(QIcon(self.getIcon(Icon, 16)))
1180 w_name = QTableWidgetItem(AppName)
1181 w_type = QTableWidgetItem(Type)
1182 w_save = QTableWidgetItem(Save)
1183 w_licc = QTableWidgetItem(License)
1185 self.parent().listTool.insertRow(last_pos)
1186 self.parent().listTool.setItem(last_pos, 0, w_icon)
1187 self.parent().listTool.setItem(last_pos, 1, w_name)
1188 self.parent().listTool.setItem(last_pos, 2, w_type)
1189 self.parent().listTool.setItem(last_pos, 3, w_save)
1190 self.parent().listTool.setItem(last_pos, 4, w_licc)
1192 last_pos += 1
1194 self.parent().listDAW.setCurrentCell(-1, -1)
1195 self.parent().listHost.setCurrentCell(-1, -1)
1196 self.parent().listInstrument.setCurrentCell(-1, -1)
1197 self.parent().listGhostess.setCurrentCell(-1, -1)
1198 self.parent().listBristol.setCurrentCell(-1, -1)
1199 self.parent().listEffect.setCurrentCell(-1, -1)
1200 self.parent().listTool.setCurrentCell(-1, -1)
1202 self.parent().listDAW.sortByColumn(1, Qt.AscendingOrder)
1203 self.parent().listHost.sortByColumn(1, Qt.AscendingOrder)
1204 self.parent().listInstrument.sortByColumn(1, Qt.AscendingOrder)
1205 self.parent().listGhostess.sortByColumn(1, Qt.AscendingOrder)
1206 self.parent().listBristol.sortByColumn(2, Qt.AscendingOrder)
1207 self.parent().listEffect.sortByColumn(1, Qt.AscendingOrder)
1208 self.parent().listTool.sortByColumn(1, Qt.AscendingOrder)
1210 def saveSettings(self):
1211 self.settings().setValue("SplitterDAW", QVariant(self.parent().splitter_DAW.saveState()))
1212 self.settings().setValue("SplitterHost", QVariant(self.parent().splitter_Host.saveState()))
1213 self.settings().setValue("SplitterInstrument", QVariant(self.parent().splitter_Instrument.saveState()))
1214 self.settings().setValue("SplitterGhostess", QVariant(self.parent().splitter_Ghostess.saveState()))
1215 self.settings().setValue("SplitterBristol", QVariant(self.parent().splitter_Bristol.saveState()))
1216 self.settings().setValue("SplitterEffect", QVariant(self.parent().splitter_Effect.saveState()))
1217 self.settings().setValue("SplitterTool", QVariant(self.parent().splitter_Tool.saveState()))
1219 def loadSettings(self):
1220 self.parent().splitter_DAW.restoreState(self.settings().value("SplitterDAW").toByteArray())
1221 self.parent().splitter_Host.restoreState(self.settings().value("SplitterHost").toByteArray())
1222 self.parent().splitter_Instrument.restoreState(self.settings().value("SplitterInstrument").toByteArray())
1223 self.parent().splitter_Ghostess.restoreState(self.settings().value("SplitterGhostess").toByteArray())
1224 self.parent().splitter_Bristol.restoreState(self.settings().value("SplitterBristol").toByteArray())
1225 self.parent().splitter_Effect.restoreState(self.settings().value("SplitterEffect").toByteArray())
1226 self.parent().splitter_Tool.restoreState(self.settings().value("SplitterTool").toByteArray())