Changeset 1796

Show
Ignore:
Timestamp:
02/02/10 14:31:11 (11 years ago)
Author:
arnonym
Message:

Re-factor the generic-dice parts of the mixer into its own gui.

For devices that have a dice EAP but are not focusrite, using 'mixer = "Generic_Dice_EAP"' in the configuration should give a nice mixer and router.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/support/mixer-qt4/ffado/mixer/generic_dice_eap.py

    r1794 r1796  
    11# 
    2 # Copyright (C) 2009 by Arnold Krille 
     2# Copyright (C) 2009-2010 by Arnold Krille 
    33# 
    44# This file is part of FFADO 
     
    2727from ffado.config import * 
    2828 
    29 class BooleanControl: 
    30     def __init__(self, hw, path): 
    31         self.iface = dbus.Interface( 
    32                 hw.bus.get_object(hw.servername, path), 
    33                 dbus_interface="org.ffado.Control.Element.Boolean") 
    34         self.value = self.iface.selected() 
    35  
    36     def selected(self): 
    37         return self.value 
    38  
    39     def select(self, n): 
    40         if self.iface.select(n): 
    41             self.value = n 
    42             return True 
    43         return False 
    44  
    45 class DiscreteControl: 
    46     def __init__(self, hw, path): 
    47         self.iface = dbus.Interface( 
    48                 hw.bus.get_object(hw.servername, path), 
    49                 dbus_interface="org.ffado.Control.Element.Discrete") 
    50         self.value = self.iface.getValue() 
    51  
    52     def getvalue(self): 
    53         return self.value 
    54  
    55     def setvalue(self, v): 
    56         if v != self.value: 
    57             self.iface.setValue(v) 
    58             self.value = v 
    59  
    60 class MonitoringModel(QtCore.QAbstractTableModel): 
    61     def __init__(self, hw, parent): 
    62         QtCore.QAbstractTableModel.__init__(self, parent) 
    63  
    64         self.hw = hw 
    65  
    66         self.mutestates = ("Global", "True", "False") 
    67  
    68         self.globaldims = [] 
    69         self.globalmutes = [] 
    70         self.perchannelmutes = [] 
    71         self.globalvolumes = [] 
    72         self.perchannelvolumes = [] 
    73         for i in range(10): 
    74             self.globaldims.append(BooleanControl(self.hw, self.hw.basepath + ("/EAP/Monitoring/GlobalDim/AffectsCh%i" % i))) 
    75             self.globalmutes.append(BooleanControl(self.hw, self.hw.basepath + ("/EAP/Monitoring/GlobalMute/AffectsCh%i" % i))) 
    76             self.perchannelmutes.append(BooleanControl(self.hw, self.hw.basepath + ("/EAP/Monitoring/PerChannel/Mute%i" % i))) 
    77             self.globalvolumes.append(BooleanControl(self.hw, self.hw.basepath + ("/EAP/Monitoring/GlobalVolume/AffectsCh%i" % i))) 
    78             self.perchannelvolumes.append(DiscreteControl(self.hw, self.hw.basepath + ("/EAP/Monitoring/PerChannel/Volume%i" % i))) 
    79  
    80     def rowCount(self, parent): 
    81         return 3 
    82  
    83     def columnCount(self, parent): 
    84         return 10 
    85  
    86     def headerData(self, section, orientation, role=Qt.Qt.DisplayRole): 
    87         if role != Qt.Qt.DisplayRole: 
    88             #print "headerData will return nothing" 
    89             return None 
    90         #print "headerData() Will return a label" 
    91         if orientation == Qt.Qt.Horizontal: 
    92             return "Ch. %i" % section 
    93         if orientation == Qt.Qt.Vertical: 
    94             return ("Mute", "Dim", "Volume")[section] 
    95         return None 
    96  
    97     def data(self, index, role): 
    98         if not role in (Qt.Qt.DisplayRole, Qt.Qt.EditRole): 
    99             return None 
    100         row = index.row() 
    101         col = index.column() 
    102         if role == Qt.Qt.DisplayRole: 
    103             if row is 0: 
    104                 if self.perchannelmutes[col].selected(): 
    105                     return self.mutestates[1] 
    106                 else: 
    107                     if self.globalmutes[col].selected(): 
    108                         return self.mutestates[0] 
    109                 return self.mutestates[2] 
    110             if row is 1: 
    111                 if self.globaldims[col].selected(): 
    112                     return "Enabled" 
    113                 else: 
    114                     return "Disabled" 
    115             if row is 2: 
    116                 if self.globalvolumes[col].selected(): 
    117                     return "Global" 
    118                 else: 
    119                     return self.perchannelvolumes[col].getvalue() 
    120         if role == Qt.Qt.EditRole: 
    121             if row is 0: 
    122                 return QtCore.QStringList(self.mutestates) 
    123             if row is 1: 
    124                 return QtCore.QStringList(("Enabled","Disabled")) 
    125             if row is 2: 
    126                 if self.globalvolumes[col].selected(): 
    127                     return 1 
    128                 return self.perchannelvolumes[col].getvalue() 
    129         return "%i,%i" % (row,col) 
    130  
    131     def setData(self, index, value, role=Qt.Qt.EditRole): 
    132         col = index.column() 
    133         row = index.row() 
    134         if row == 0: 
    135             if value == "Global": 
    136                 self.globalmutes[col].select(True) 
    137                 self.perchannelmutes[col].select(False) 
    138             else: 
    139                 self.globalmutes[col].select(False) 
    140                 if value == "True": value = True 
    141                 if value == "False": value = False 
    142                 self.perchannelmutes[col].select(value) 
    143             return True 
    144         if row == 1: 
    145             if value == "Enabled": value = True 
    146             if value == "Disabled": value = False 
    147             return self.globaldims[col].select(value) 
    148         if row == 2: 
    149             #print "setData() value=%s" % value.toString() 
    150             v = int(value.toString()) 
    151             #print " integer is %i" % v 
    152             if v > 0: 
    153                 return self.globalvolumes[col].select(True) 
    154             else: 
    155                 self.globalvolumes[col].select(False) 
    156                 self.perchannelvolumes[col].setvalue(v) 
    157         return False 
    158  
    159     def flags(self, index): 
    160         ret = QtCore.QAbstractTableModel.flags(self, index) 
    161         if index.row() in (0,1,2): 
    162             ret |= Qt.Qt.ItemIsEditable 
    163         return ret 
    164  
    165  
    166  
    167 class MonitoringDelegate(QtGui.QStyledItemDelegate): 
    168     def __init__(self, parent): 
    169         QtGui.QStyledItemDelegate.__init__(self, parent) 
    170  
    171     def createEditor(self, parent, option, index): 
    172         if index.data(Qt.Qt.EditRole).type() == QtCore.QVariant.StringList: 
    173             combo = QtGui.QComboBox(parent) 
    174             self.connect(combo, QtCore.SIGNAL("activated(int)"), self.currentChanged) 
    175             return combo 
    176         else: 
    177             return QtGui.QStyledItemDelegate.createEditor(self, parent, option, index) 
    178  
    179     def setEditorData(self, editor, index): 
    180         if isinstance(editor, QtGui.QComboBox): 
    181             list = index.data(Qt.Qt.EditRole).toStringList() 
    182             editor.addItems(list) 
    183             editor.setCurrentIndex(list.indexOf(index.data(Qt.Qt.DisplayRole).toString())) 
    184         else: 
    185             QtGui.QStyledItemDelegate.setEditorData(self, editor, index) 
    186  
    187     def setModelData(self, editor, model, index): 
    188         if isinstance(editor, QtGui.QComboBox): 
    189             model.setData(index, editor.currentText(), Qt.Qt.EditRole) 
    190         else: 
    191             QtGui.QStyledItemDelegate.setModelData(self, editor, model, index) 
    192  
    193     def currentChanged(self): 
    194         #print "currentChanged() sender=%s" % (str(self.sender())) 
    195         editor = self.sender() 
    196         self.emit(QtCore.SIGNAL("commitData(QWidget*)"), editor) 
    197         self.emit(QtCore.SIGNAL("closeEditor(QWidget*)"), editor) 
    198  
    199 class Saffire_Dice(QtGui.QWidget): 
     29class Generic_Dice_EAP(QtGui.QWidget): 
    20030    def __init__(self, parent=None): 
    20131        QtGui.QWidget.__init__(self, parent) 
     
    22050        self.tabs.addTab(scrollarea, "Routing") 
    22151 
    222         model = MonitoringModel(self.hw, self) 
    22352 
    224         widget = QtGui.QWidget() 
    225         uicLoad("ffado/mixer/saffire_dice_monitoring.ui", widget) 
    226         widget.monitoringView.setModel(model) 
    227         widget.monitoringView.setItemDelegate(MonitoringDelegate(self)) 
    228         self.tabs.addTab(widget, "Monitoring") 
    229  
    230         self.muteInterface = BooleanControl(self.hw, self.hw.basepath+"/EAP/Monitoring/GlobalMute/State") 
    231         widget.btnMute.setChecked(self.muteInterface.selected()) 
    232         self.connect(widget.btnMute, QtCore.SIGNAL("toggled(bool)"), self.muteToggle) 
    233         self.dimInterface = BooleanControl(self.hw, self.hw.basepath+"/EAP/Monitoring/GlobalDim/State") 
    234         widget.btnDim.setChecked(self.dimInterface.selected()) 
    235         self.connect(widget.btnDim, QtCore.SIGNAL("toggled(bool)"), self.dimToggle) 
    236  
    237         self.dimLevelInterface = DiscreteControl(self.hw, self.hw.basepath+"/EAP/Monitoring/GlobalDim/Level") 
    238         widget.dimLevel.setValue(self.dimLevelInterface.getvalue()) 
    239         self.connect(widget.dimLevel, QtCore.SIGNAL("valueChanged(int)"), self.dimLevelChanged) 
    240         self.volumeInterface = DiscreteControl(self.hw, self.hw.basepath+"/EAP/Monitoring/GlobalVolume/Level") 
    241         widget.volumeKnob.setValue(self.volumeInterface.getvalue()) 
    242         self.connect(widget.volumeKnob, QtCore.SIGNAL("valueChanged(int)"), self.volumeChanged) 
    243  
    244         if self.configrom.getModelName() == "SAFFIRE_PRO_24": 
    245             self.ch1inst = BooleanControl(self.hw, self.hw.basepath + "/EAP/Ch1LineInst") 
    246             widget.chkInst1.setChecked(self.ch1inst.selected()) 
    247             self.connect(widget.chkInst1, QtCore.SIGNAL("toggled(bool)"), self.ch1inst.select) 
    248             self.ch2inst = BooleanControl(self.hw, self.hw.basepath + "/EAP/Ch2LineInst") 
    249             widget.chkInst2.setChecked(self.ch2inst.selected()) 
    250             self.connect(widget.chkInst2, QtCore.SIGNAL("toggled(bool)"), self.ch2inst.select) 
    251             self.ch3level = BooleanControl(self.hw, self.hw.basepath + "/EAP/Ch3Level") 
    252             widget.chkLevel3.setChecked(self.ch3level.selected()) 
    253             self.connect(widget.chkLevel3, QtCore.SIGNAL("toggled(bool)"), self.ch3level.select) 
    254             self.ch4level = BooleanControl(self.hw, self.hw.basepath + "/EAP/Ch4Level") 
    255             widget.chkLevel4.setChecked(self.ch4level.selected()) 
    256             self.connect(widget.chkLevel4, QtCore.SIGNAL("toggled(bool)"), self.ch4level.select) 
    257             widget.chkSpdif.deleteLater() 
    258             widget.btnPad.deleteLater() 
    259         else: 
    260             widget.chkInst1.deleteLater() 
    261             widget.chkInst2.deleteLater() 
    262             widget.chkLevel3.deleteLater() 
    263             widget.chkLevel4.deleteLater() 
    264  
    265  
    266     def muteToggle(self, mute): 
    267         self.muteInterface.select(mute) 
    268     def dimToggle(self, mute): 
    269         self.dimInterface.select(mute) 
    270  
    271     def dimLevelChanged(self, value): 
    272         self.dimLevelInterface.setvalue(value) 
    273     def volumeChanged(self, value): 
    274         self.volumeInterface.setvalue(value) 
    275  
    276     def getDisplayTitle(self): 
    277         return "Saffire PRO40/PRO24 Mixer" 
     53    #def getDisplayTitle(self): 
     54    #    return "Saffire PRO40/PRO24 Mixer" 
    27855 
    27956# 
  • trunk/libffado/support/mixer-qt4/ffado/mixer/saffire_dice.py

    r1794 r1796  
    11# 
    2 # Copyright (C) 2009 by Arnold Krille 
     2# Copyright (C) 2009-2010 by Arnold Krille 
    33# 
    44# This file is part of FFADO 
     
    2424from ffado.widgets.matrixmixer import MatrixMixer 
    2525from ffado.widgets.crossbarrouter import * 
     26from ffado.mixer.generic_dice_eap import * 
    2627 
    2728from ffado.config import * 
     
    197198        self.emit(QtCore.SIGNAL("closeEditor(QWidget*)"), editor) 
    198199 
    199 class Saffire_Dice(QtGui.QWidget): 
     200class Saffire_Dice(Generic_Dice_EAP): 
    200201    def __init__(self, parent=None): 
    201         QtGui.QWidget.__init__(self, parent) 
    202         self.layout = QtGui.QGridLayout(self) 
    203         self.setLayout(self.layout) 
    204         self.tabs = QtGui.QTabWidget(self) 
    205         self.layout.addWidget(self.tabs) 
     202        Generic_Dice_EAP.__init__(self, parent) 
    206203 
    207204    def buildMixer(self): 
    208205        #print self.hw 
    209206        #print self.hw.getText("/Generic/Nickname") 
    210         self.matrix = MatrixMixer(self.hw.servername, self.hw.basepath+"/EAP/MatrixMixer", self) 
    211         scrollarea = QtGui.QScrollArea(self.tabs) 
    212         scrollarea.setWidgetResizable(True) 
    213         scrollarea.setWidget(self.matrix) 
    214         self.tabs.addTab(scrollarea, "Matrix") 
    215  
    216         self.router = CrossbarRouter(self.hw.servername, self.hw.basepath+"/EAP/Router", self) 
    217         scrollarea = QtGui.QScrollArea(self.tabs) 
    218         scrollarea.setWidgetResizable(True) 
    219         scrollarea.setWidget(self.router) 
    220         self.tabs.addTab(scrollarea, "Routing") 
     207        Generic_Dice_EAP.buildMixer(self) 
    221208 
    222209        model = MonitoringModel(self.hw, self) 
     
    243230 
    244231        if self.configrom.getModelName() == "SAFFIRE_PRO_24": 
     232            widget.stacked.setCurrentWidget(widget.pagePro24) 
    245233            self.ch1inst = BooleanControl(self.hw, self.hw.basepath + "/EAP/Ch1LineInst") 
    246234            widget.chkInst1.setChecked(self.ch1inst.selected()) 
     
    255243            widget.chkLevel4.setChecked(self.ch4level.selected()) 
    256244            self.connect(widget.chkLevel4, QtCore.SIGNAL("toggled(bool)"), self.ch4level.select) 
    257             widget.chkSpdif.deleteLater() 
    258             widget.btnPad.deleteLater() 
    259         else: 
    260             widget.chkInst1.deleteLater() 
    261             widget.chkInst2.deleteLater() 
    262             widget.chkLevel3.deleteLater() 
    263             widget.chkLevel4.deleteLater() 
     245            #widget.chkSpdif.deleteLater() 
     246            #widget.btnPad.deleteLater() 
     247        elif self.configrom.getModelName() == "SAFFIRE_PRO_40": 
     248            widget.stacked.setCurrentWidget(widget.pagePro40) 
     249            #widget.chkInst1.deleteLater() 
     250            #widget.chkInst2.deleteLater() 
     251            #widget.chkLevel3.deleteLater() 
     252            #widget.chkLevel4.deleteLater() 
     253        else: 
     254            self.stacked.deleteLater() 
    264255 
    265256 
  • trunk/libffado/support/mixer-qt4/ffado/mixer/saffire_dice_monitoring.ui

    r1794 r1796  
    88    <y>0</y> 
    99    <width>599</width> 
    10     <height>657</height> 
     10    <height>406</height> 
    1111   </rect> 
    1212  </property> 
     
    2828      </property> 
    2929     </widget> 
    30      <widget class="QWidget" name="layoutWidget"> 
     30     <widget class="QWidget" name=""> 
    3131      <layout class="QGridLayout" name="gridLayout"> 
    32        <item row="3" column="0"> 
    33         <widget class="QLabel" name="label"> 
    34          <property name="text"> 
    35           <string>Dim Level:</string> 
    36          </property> 
    37          <property name="alignment"> 
    38           <set>Qt::AlignCenter</set> 
    39          </property> 
    40          <property name="buddy"> 
    41           <cstring>dimLevel</cstring> 
    42          </property> 
    43         </widget> 
    44        </item> 
    45        <item row="3" column="1"> 
    46         <widget class="QSpinBox" name="dimLevel"> 
    47          <property name="sizePolicy"> 
    48           <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> 
    49            <horstretch>0</horstretch> 
    50            <verstretch>0</verstretch> 
    51           </sizepolicy> 
    52          </property> 
    53          <property name="alignment"> 
    54           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
    55          </property> 
    56          <property name="suffix"> 
    57           <string> dB</string> 
    58          </property> 
    59          <property name="minimum"> 
    60           <number>-127</number> 
    61          </property> 
    62          <property name="maximum"> 
     32       <item row="0" column="0" rowspan="2" colspan="2"> 
     33        <widget class="QStackedWidget" name="stacked"> 
     34         <property name="currentIndex"> 
    6335          <number>0</number> 
    6436         </property> 
    65         </widget> 
    66        </item> 
    67        <item row="0" column="2" rowspan="6"> 
     37         <widget class="QWidget" name="pagePro24"> 
     38          <layout class="QGridLayout" name="gridLayout_3"> 
     39           <item row="0" column="0"> 
     40            <widget class="QCheckBox" name="chkInst1"> 
     41             <property name="sizePolicy"> 
     42              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     43               <horstretch>0</horstretch> 
     44               <verstretch>0</verstretch> 
     45              </sizepolicy> 
     46             </property> 
     47             <property name="text"> 
     48              <string>Ch 1 Instrument</string> 
     49             </property> 
     50            </widget> 
     51           </item> 
     52           <item row="1" column="1"> 
     53            <widget class="QCheckBox" name="chkLevel4"> 
     54             <property name="sizePolicy"> 
     55              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     56               <horstretch>0</horstretch> 
     57               <verstretch>0</verstretch> 
     58              </sizepolicy> 
     59             </property> 
     60             <property name="text"> 
     61              <string>Ch 4 High Level</string> 
     62             </property> 
     63            </widget> 
     64           </item> 
     65           <item row="1" column="0"> 
     66            <widget class="QCheckBox" name="chkInst2"> 
     67             <property name="sizePolicy"> 
     68              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     69               <horstretch>0</horstretch> 
     70               <verstretch>0</verstretch> 
     71              </sizepolicy> 
     72             </property> 
     73             <property name="text"> 
     74              <string>Ch 2 Instrument</string> 
     75             </property> 
     76            </widget> 
     77           </item> 
     78           <item row="0" column="1"> 
     79            <widget class="QCheckBox" name="chkLevel3"> 
     80             <property name="sizePolicy"> 
     81              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     82               <horstretch>0</horstretch> 
     83               <verstretch>0</verstretch> 
     84              </sizepolicy> 
     85             </property> 
     86             <property name="text"> 
     87              <string>Ch 3 High Level</string> 
     88             </property> 
     89            </widget> 
     90           </item> 
     91          </layout> 
     92         </widget> 
     93         <widget class="QWidget" name="pagePro40"> 
     94          <layout class="QHBoxLayout" name="horizontalLayout"> 
     95           <item> 
     96            <widget class="QCheckBox" name="chkSpdif"> 
     97             <property name="sizePolicy"> 
     98              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     99               <horstretch>0</horstretch> 
     100               <verstretch>0</verstretch> 
     101              </sizepolicy> 
     102             </property> 
     103             <property name="text"> 
     104              <string>Use ADAT-Out as S/PDIF</string> 
     105             </property> 
     106            </widget> 
     107           </item> 
     108           <item> 
     109            <widget class="QPushButton" name="btnPad"> 
     110             <property name="sizePolicy"> 
     111              <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
     112               <horstretch>0</horstretch> 
     113               <verstretch>0</verstretch> 
     114              </sizepolicy> 
     115             </property> 
     116             <property name="text"> 
     117              <string>Pad Output</string> 
     118             </property> 
     119            </widget> 
     120           </item> 
     121          </layout> 
     122         </widget> 
     123        </widget> 
     124       </item> 
     125       <item row="0" column="2" rowspan="5"> 
    68126        <widget class="QGroupBox" name="groupBox"> 
    69127         <property name="sizePolicy"> 
     
    118176        </widget> 
    119177       </item> 
    120        <item row="4" column="0" colspan="2"> 
     178       <item row="2" column="0"> 
     179        <widget class="QLabel" name="label"> 
     180         <property name="text"> 
     181          <string>Dim Level:</string> 
     182         </property> 
     183         <property name="alignment"> 
     184          <set>Qt::AlignCenter</set> 
     185         </property> 
     186         <property name="buddy"> 
     187          <cstring>dimLevel</cstring> 
     188         </property> 
     189        </widget> 
     190       </item> 
     191       <item row="2" column="1"> 
     192        <widget class="QSpinBox" name="dimLevel"> 
     193         <property name="sizePolicy"> 
     194          <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> 
     195           <horstretch>0</horstretch> 
     196           <verstretch>0</verstretch> 
     197          </sizepolicy> 
     198         </property> 
     199         <property name="alignment"> 
     200          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
     201         </property> 
     202         <property name="suffix"> 
     203          <string> dB</string> 
     204         </property> 
     205         <property name="minimum"> 
     206          <number>-127</number> 
     207         </property> 
     208         <property name="maximum"> 
     209          <number>0</number> 
     210         </property> 
     211        </widget> 
     212       </item> 
     213       <item row="3" column="0" colspan="2"> 
    121214        <widget class="QPushButton" name="btnDim"> 
    122215         <property name="sizePolicy"> 
     
    140233        </widget> 
    141234       </item> 
    142        <item row="5" column="0" colspan="2"> 
     235       <item row="4" column="0" colspan="2"> 
    143236        <widget class="QPushButton" name="btnMute"> 
    144237         <property name="sizePolicy"> 
     
    159252         <property name="checkable"> 
    160253          <bool>true</bool> 
    161          </property> 
    162         </widget> 
    163        </item> 
    164        <item row="0" column="0"> 
    165         <widget class="QCheckBox" name="chkInst1"> 
    166          <property name="sizePolicy"> 
    167           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    168            <horstretch>0</horstretch> 
    169            <verstretch>0</verstretch> 
    170           </sizepolicy> 
    171          </property> 
    172          <property name="text"> 
    173           <string>Ch 1 Instrument</string> 
    174          </property> 
    175         </widget> 
    176        </item> 
    177        <item row="0" column="1"> 
    178         <widget class="QCheckBox" name="chkLevel3"> 
    179          <property name="sizePolicy"> 
    180           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    181            <horstretch>0</horstretch> 
    182            <verstretch>0</verstretch> 
    183           </sizepolicy> 
    184          </property> 
    185          <property name="text"> 
    186           <string>Ch 3 High Level</string> 
    187          </property> 
    188         </widget> 
    189        </item> 
    190        <item row="1" column="0"> 
    191         <widget class="QCheckBox" name="chkInst2"> 
    192          <property name="sizePolicy"> 
    193           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    194            <horstretch>0</horstretch> 
    195            <verstretch>0</verstretch> 
    196           </sizepolicy> 
    197          </property> 
    198          <property name="text"> 
    199           <string>Ch 2 Instrument</string> 
    200          </property> 
    201         </widget> 
    202        </item> 
    203        <item row="1" column="1"> 
    204         <widget class="QCheckBox" name="chkLevel4"> 
    205          <property name="sizePolicy"> 
    206           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    207            <horstretch>0</horstretch> 
    208            <verstretch>0</verstretch> 
    209           </sizepolicy> 
    210          </property> 
    211          <property name="text"> 
    212           <string>Ch 4 High Level</string> 
    213          </property> 
    214         </widget> 
    215        </item> 
    216        <item row="2" column="0"> 
    217         <widget class="QCheckBox" name="chkSpdif"> 
    218          <property name="sizePolicy"> 
    219           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    220            <horstretch>0</horstretch> 
    221            <verstretch>0</verstretch> 
    222           </sizepolicy> 
    223          </property> 
    224          <property name="text"> 
    225           <string>Use ADAT-Out as S/PDIF</string> 
    226          </property> 
    227         </widget> 
    228        </item> 
    229        <item row="2" column="1"> 
    230         <widget class="QPushButton" name="btnPad"> 
    231          <property name="sizePolicy"> 
    232           <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> 
    233            <horstretch>0</horstretch> 
    234            <verstretch>0</verstretch> 
    235           </sizepolicy> 
    236          </property> 
    237          <property name="text"> 
    238           <string>Pad Output</string> 
    239254         </property> 
    240255        </widget> 
  • trunk/libffado/support/mixer-qt4/ffado/widgets/crossbarrouter.py

    r1780 r1796  
    7171 
    7272        self.lbl = QtGui.QLabel(self.outname, self) 
     73        self.lbl.setToolTip("The name of the destination that is to be controlled here.") 
    7374        self.layout.addWidget(self.lbl, 0, 0) 
    7475 
     
    7980 
    8081        self.combo = QtGui.QComboBox(self) 
     82        self.combo.setToolTip("<qt>Select the source for this destination.<br>Each destination can only receive sound from one source at a time. But one source can send sound to multiple destinations.</qt>") 
    8183        self.layout.addWidget(self.combo, 1, 0, 1, 2) 
    8284        self.combo.addItem("Disconnected")