diff --git a/src/cadence.py b/src/cadence.py index 84cfafa..5de6d40 100755 --- a/src/cadence.py +++ b/src/cadence.py @@ -25,7 +25,7 @@ except: # Imports (Global) from platform import architecture from PyQt4.QtCore import QSettings -from PyQt4.QtGui import QApplication, QMainWindow +from PyQt4.QtGui import QApplication, QLabel, QMainWindow, QSizePolicy # Imports (Custom Stuff) import ui_cadence @@ -240,6 +240,112 @@ def smartHex(value, length): # --------------------------------------------------------------------- +cadenceSystemChecks = [] + +class CadenceSystemCheck(object): + ICON_ERROR = 0 + ICON_WARN = 1 + ICON_OK = 2 + + def __init__(self): + object.__init__(self) + + self.name = self.tr("check") + self.icon = self.ICON_OK + self.result = self.tr("yes") + + self.moreInfo = self.tr("nothing to report") + + def tr(self, text): + return app.translate("CadenceSystemCheck", text) + +class CadenceSystemCheck_audioGroup(CadenceSystemCheck): + def __init__(self): + CadenceSystemCheck.__init__(self) + + self.name = self.tr("User in audio group") + + user = getoutput("whoami").strip() + groups = getoutput("groups").strip().split(" ") + + if "audio" in groups: + self.icon = self.ICON_OK + self.result = self.tr("Yes") + self.moreInfo = None + + else: + fd = open("/etc/group", "r") + groupRead = fd.read().strip().split("\n") + fd.close() + + onAudioGroup = False + for lineRead in groupRead: + if lineRead.startswith("audio:"): + groups = lineRead.split(":")[-1].split(",") + if user in groups: + onAudioGroup = True + break + + if onAudioGroup: + self.icon = self.ICON_WARN + self.result = self.tr("Yes, but needs relogin") + self.moreInfo = None + else: + self.icon = self.ICON_ERROR + self.result = self.tr("No") + self.moreInfo = None + +class CadenceSystemCheck_kernel(CadenceSystemCheck): + def __init__(self): + CadenceSystemCheck.__init__(self) + + self.name = self.tr("Current kernel") + + uname3 = os.uname()[2] + + versionInt = [] + versionStr = uname3.split("-",1)[0] + versionSplit = versionStr.split(".") + + for split in versionSplit: + if split.isdigit(): + versionInt.append(int(split)) + else: + versionInt = [0, 0, 0] + break + + self.result = versionStr + " " + + if "-" not in uname3: + self.icon = self.ICON_WARN + self.result += self.tr("Vanilla") + self.moreInfo = None + + else: + if uname3.endswith("-pae"): + kernelType = uname3.split("-")[-2].lower() + self.result += kernelType.title() + " (PAE)" + else: + kernelType = uname3.split("-")[-1].lower() + self.result += kernelType.title() + + if kernelType in ("rt", "realtime") or (kernelType == "lowlatency" and versionInt >= [2, 6, 39]): + self.icon = self.ICON_WARN + self.moreInfo = None + elif versionInt >= [2, 6, 39]: + self.icon = self.ICON_WARN + self.moreInfo = None + else: + self.icon = self.ICON_ERROR + self.moreInfo = None + +def initSystemChecks(): + if LINUX: + cadenceSystemChecks.append(CadenceSystemCheck_kernel()) + cadenceSystemChecks.append(CadenceSystemCheck_audioGroup()) + +# --------------------------------------------------------------------- + # Main Window class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): def __init__(self, parent=None): @@ -288,6 +394,47 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): self.label_info_version.setText(info[1]) self.label_info_arch.setText(get_architecture()) + # ------------------------------------------------------------- + # Set-up GUI (System Checks) + + #self.label_check_helper1.setVisible(False) + #self.label_check_helper2.setVisible(False) + #self.label_check_helper3.setVisible(False) + + index = 2 + checksLayout = self.groupBox_checks.layout() + + for check in cadenceSystemChecks: + widgetName = QLabel("%s:" % check.name) + widgetIcon = QLabel("") + widgetResult = QLabel(check.result) + + if check.moreInfo: + widgetName.setToolTip(check.moreInfo) + widgetIcon.setToolTip(check.moreInfo) + widgetResult.setToolTip(check.moreInfo) + + #widgetName.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + #widgetIcon.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) + #widgetIcon.setMinimumSize(16, 16) + #widgetIcon.setMaximumSize(16, 16) + #widgetResult.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) + + if check.icon == check.ICON_ERROR: + widgetIcon.setPixmap(self.pix_error) + elif check.icon == check.ICON_WARN: + widgetIcon.setPixmap(self.pix_warning) + elif check.icon == check.ICON_OK: + widgetIcon.setPixmap(self.pix_apply) + else: + widgetIcon.setPixmap(self.pix_cancel) + + checksLayout.addWidget(widgetName, index, 0, Qt.AlignRight) + checksLayout.addWidget(widgetIcon, index, 1, Qt.AlignHCenter) + checksLayout.addWidget(widgetResult, index, 2, Qt.AlignLeft) + + index += 1 + # ------------------------------------------------------------- # Set-up GUI (Tweaks) @@ -428,10 +575,10 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): if haveWine: ins = int(getWineAsioKeyValue("Number of inputs", "00000010"), 16) outs = int(getWineAsioKeyValue("Number of outputs", "00000010"), 16) - hw = bool(int(getWineAsioKeyValue("Connect to hardware", "00000001"))) + hw = bool(int(getWineAsioKeyValue("Connect to hardware", "00000001"), 10)) - autostart = bool(int(getWineAsioKeyValue("Autostart server", "00000000"))) - fixed_bsize = bool(int(getWineAsioKeyValue("Fixed buffersize", "00000001"))) + autostart = bool(int(getWineAsioKeyValue("Autostart server", "00000000"), 10)) + fixed_bsize = bool(int(getWineAsioKeyValue("Fixed buffersize", "00000001"), 10)) prefer_bsize = int(getWineAsioKeyValue("Preferred buffersize", "00000400"), 16) for bsize in buffer_sizes: @@ -521,7 +668,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): self.m_last_xruns = None self.m_last_buffer_size = None - self.m_timer120 = None + self.m_timer250 = None self.m_timer1000 = self.startTimer(1000) self.DBusReconnect() @@ -609,12 +756,12 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): self.label_jack_srate.setText("%i Hz" % DBus.jack.GetSampleRate()) self.label_jack_latency.setText("%.1f ms" % DBus.jack.GetLatency()) - self.m_timer120 = self.startTimer(120) + self.m_timer250 = self.startTimer(250) def jackStopped(self): - if self.m_timer120: - self.killTimer(self.m_timer120) - self.m_timer120 = None + if self.m_timer250: + self.killTimer(self.m_timer250) + self.m_timer250 = None self.m_last_dsp_load = None self.m_last_xruns = None @@ -1145,7 +1292,7 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): } def timerEvent(self, event): - if event.timerId() == self.m_timer120: + if event.timerId() == self.m_timer250: if DBus.jack and self.m_last_dsp_load != None: next_dsp_load = DBus.jack.GetLoad() next_xruns = DBus.jack.GetXruns() @@ -1181,15 +1328,17 @@ class CadenceMainW(QMainWindow, ui_cadence.Ui_CadenceMainW): if __name__ == '__main__': # App initialization app = QApplication(sys.argv) - app.setApplicationName("Catia") + app.setApplicationName("Cadence") app.setApplicationVersion(VERSION) app.setOrganizationName("Cadence") - app.setWindowIcon(QIcon(":/scalable/catia.svg")) + app.setWindowIcon(QIcon(":/scalable/cadence.svg")) if haveDBus: DBus.loop = DBusQtMainLoop(set_as_default=True) DBus.bus = dbus.SessionBus(mainloop=DBus.loop) + initSystemChecks() + # Show GUI gui = CadenceMainW() diff --git a/src/ui/cadence.ui b/src/ui/cadence.ui index 20e8c5b..db2e1f1 100644 --- a/src/ui/cadence.ui +++ b/src/ui/cadence.ui @@ -7,7 +7,7 @@ 0 0 732 - 527 + 483 @@ -42,13 +42,6 @@ - - - - Qt::Horizontal - - - @@ -113,38 +106,44 @@ + + + 0 + 0 + + System Checks - - - - - 0 - 0 - - - - Test Name: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - + :/16x16/dialog-information.png + + Qt::AlignCenter + - + + + + 0 + 0 + + + + Result + + + + + 0 @@ -152,7 +151,17 @@ - Label + Test Name: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal @@ -174,13 +183,6 @@ - - - - Qt::Vertical - - - @@ -487,6 +489,20 @@ + + + + Qt::Vertical + + + + + + + Qt::Horizontal + + + @@ -1043,8 +1059,8 @@ 0 0 - 412 - 282 + 76 + 76