summaryrefslogtreecommitdiff
path: root/src/ui/devicewidget.cpp
blob: 420d5fdd74b799dfa3382936d3370854f9d878ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "devicewidget.h"
#include "../model/audiodevice.h"

#include <tqlabel.h>
#include <tqlayout.h>
#include <tqslider.h>
#include <tqtoolbutton.h>

DeviceWidget::DeviceWidget( AudioDevice *device, TQWidget *parent )
    : TQWidget(parent), m_device(device)
{
    TQVBoxLayout *layout = new TQVBoxLayout( this, 4, 2 );

    m_label = new TQLabel( device->name(), this );
    m_label->setAlignment( TQLabel::AlignHCenter );

    m_slider = new TQSlider( 0, 100, 5, device->volume(), TQt::Vertical, this );
    m_slider->setTickmarks( TQSlider::NoMarks );

    m_muteButton = new TQToolButton( this );
    m_muteButton->setToggleButton( true );
    m_muteButton->setTextLabel( "M" );
    m_muteButton->setOn( device->muted() );

    layout->addWidget( m_label );
    layout->addWidget( m_slider,      1 );
    layout->addWidget( m_muteButton,  0, TQt::AlignHCenter );

    // slider → device
    connect( m_slider,     TQ_SIGNAL(valueChanged(int)), this, TQ_SLOT(onVolumeChanged(int)) );
    connect( m_muteButton, TQ_SIGNAL(clicked()),         this, TQ_SLOT(onMuteToggled()) );

    // device → widget
    connect( device, TQ_SIGNAL(volumeChanged(int)),        this, TQ_SLOT(onDeviceVolume(int)) );
    connect( device, TQ_SIGNAL(muteChanged(bool)),         this, TQ_SLOT(onDeviceMute(bool)) );
    connect( device, TQ_SIGNAL(nameChanged(const TQString&)), this, TQ_SLOT(onDeviceName(const TQString&)) );
}

void DeviceWidget::onVolumeChanged( int v )
{
    m_device->setVolume( v );
}

void DeviceWidget::onMuteToggled()
{
    m_device->setMuted( !m_device->muted() );
}

void DeviceWidget::onDeviceVolume( int v )
{
    // Block signal to avoid feedback loop back to device.
    m_slider->blockSignals( true );
    m_slider->setValue( v );
    m_slider->blockSignals( false );
}

void DeviceWidget::onDeviceMute( bool m )
{
    m_muteButton->blockSignals( true );
    m_muteButton->setOn( m );
    m_muteButton->blockSignals( false );
}

void DeviceWidget::onDeviceName( const TQString &name )
{
    m_label->setText( name );
}

#include "devicewidget.moc"