Changeset 1654

Show
Ignore:
Timestamp:
09/04/09 12:44:45 (15 years ago)
Author:
arnonym
Message:

Implement the vu-meters for the router.

Files:

Legend:

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

    r1649 r1654  
    2222import dbus 
    2323 
     24class VuMeter(QtGui.QFrame): 
     25    def __init__(self, interface, output, input=None, parent=None): 
     26        QtGui.QFrame.__init__(self, parent) 
     27        self.setLineWidth(1) 
     28        self.setFrameStyle(QtGui.QFrame.Panel|QtGui.QFrame.Sunken) 
     29        self.setMinimumSize(20, 20) 
     30 
     31        self.level = 0 
     32 
     33        self.interface = interface 
     34 
     35        self.output = output 
     36        if input is None: 
     37            input = int(self.interface.getSourceForDestination(output)) 
     38        self.setInput(input) 
     39 
     40    def setInput(self, input): 
     41        #print "VuMeter.setInput() %i->%i" % (self.output, input) 
     42        self.input = input 
     43 
     44    def updateLevel(self, value): 
     45        self.level = value 
     46        self.update() 
     47 
     48    def paintEvent(self, event): 
     49        p = QtGui.QPainter(self) 
     50        value = self.level/4096 
     51        r = self.rect() 
     52        r.setHeight(r.height() * value) 
     53        r.moveBottom(self.rect().height()) 
     54        p.fillRect(r, self.palette().highlight()) 
     55 
    2456class OutputSwitcher(QtGui.QFrame): 
    2557    """ 
     
    3668 
    3769        self.setLineWidth(1) 
     70        self.setFrameStyle(QtGui.QFrame.Sunken|QtGui.QFrame.Panel) 
    3871 
    3972        self.layout = QtGui.QGridLayout(self) 
     
    4174 
    4275        self.lbl = QtGui.QLabel(self.outname, self) 
    43         self.layout.addWidget(self.lbl, 0, 0, 1, 2) 
     76        self.layout.addWidget(self.lbl, 0, 0) 
     77 
     78        self.vu = VuMeter(self.interface, self.interface.getDestinationIndex(outname), parent=self) 
     79        self.layout.addWidget(self.vu, 0, 1, 2, 1) 
    4480 
    4581        self.btn = QtGui.QPushButton("Sel.", self) 
     
    6399            submenu = InGroupMenu(self.interface, self.outname, group, self.ingroups[group], self, self.exclusiveGroup) 
    64100            self.menu.addMenu(submenu) 
     101 
     102    def peakValue(self, value): 
     103        self.vu.updateLevel(value) 
     104 
    65105 
    66106class InGroupMenu(QtGui.QMenu): 
     
    123163        self.setLayout(self.layout) 
    124164 
     165        self.switchers = {} 
    125166        for out in destinations: 
    126167            btn = OutputSwitcher(self.interface, out, self) 
    127168            self.layout.addWidget(btn, int(out.split(":")[-1]), self.outgroups.index(out.split(":")[0])) 
     169            self.switchers[self.interface.getDestinationIndex(out)] = btn 
     170 
     171        self.timer = QtCore.QTimer(self) 
     172        self.timer.setInterval(200) 
     173        self.connect(self.timer, QtCore.SIGNAL("timeout()"), self.updateLevels) 
     174        self.timer.start() 
     175 
     176    def updateLevels(self): 
     177        #print "CrossbarRouter.updateLevels()" 
     178        peakvalues = self.interface.getPeakValues() 
     179        #print "Got %i peaks" % len(peakvalues) 
     180        for peak in peakvalues: 
     181            self.switchers[peak[0]].peakValue(peak[1]) 
    128182 
    129183#