1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3
4import globdef as G
5from PyQt5 import QtGui, QtCore, QtWidgets
6
7
8# Base class for the input and output windows.
9# These contain a gain control, mute and solo
10# buttons, and a channel label.
11# This class defines common functionality.
12# The GUI layout is defined in the derived classes.
13
14
15class Gmsbase (QtWidgets.QWidget):
16
17    def __init__(self, parent, callb, index):
18        super (Gmsbase, self).__init__(parent)
19        self.callb = callb
20        self.index = index
21
22    def value_event (self, args):
23        self.redraw ()
24        self.callb (self.index, G.ACT_GAIN, args.get_value (), 0)
25
26    def mute_event (self):
27        s = self.bmute.get_state () ^ 2
28        b = self.bmute.mousebutt
29        self.bmute.set_state (s)
30        self.callb (self.index, G.ACT_MUTE, s > 0, b)
31
32    def solo_event (self):
33        s = self.bsolo.get_state () ^ 1
34        b = self.bsolo.mousebutt
35        self.bsolo.set_state (s)
36        self.callb (self.index, G.ACT_SOLO, s > 0, b)
37
38    def redraw (self):
39        gaindb = self.gainctl.get_value ()
40        if (gaindb > -200):
41            self.gaintxt.setText('%5.1f' % (gaindb,))
42            self.gainctl.set_state (1)
43        else:
44            self.gaintxt.setText('Off')
45            self.gainctl.set_state (0)
46
47    def get_state (self):
48        m = bmute.get_state () > 0
49        return self.gainctl.get_value (), m
50
51    def set_state (self, gaindb, mute):
52        self.gainctl.set_value (gaindb)
53        self.bmute.set_state (2 if mute else 0)
54        self.redraw ()
55
56    def get_solo (self):
57        return self.bsolo.get_state () > 0
58
59    def solo_off (self):
60        self.bsolo.set_state (0)
61
62