VolumePopup::VolumePopup(QWidget* parent): QDialog(parent, Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint), m_pos(0,0), m_anchor(Qt::TopLeftCorner), m_device(0) { m_mixerButton = new QPushButton(this); m_mixerButton->setObjectName("MixerLink"); m_mixerButton->setMinimumWidth(1); m_mixerButton->setFlat(true); m_mixerButton->setToolTip(tr("Launch mixer")); m_mixerButton->setText(tr("Mixer")); QSize textSize = m_mixerButton->fontMetrics().size(Qt::TextShowMnemonic, m_mixerButton->text()); QStyleOptionButton opt; opt.initFrom(m_mixerButton); opt.rect.setSize(textSize); m_mixerButton->setMaximumSize(m_mixerButton->style()->sizeFromContents(QStyle::CT_PushButton, &opt, textSize, m_mixerButton)); m_mixerButton->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); m_volumeSlider = new QSlider(Qt::Vertical, this); m_volumeSlider->setTickPosition(QSlider::TicksBothSides); m_volumeSlider->setTickInterval(10); // the volume slider shows 0-100 and volumes of all devices // should be converted to percentages. m_volumeSlider->setRange(0, 100); m_muteToggleButton = new QPushButton(this); m_muteToggleButton->setIcon(XdgIcon::fromTheme(QStringList() << "audio-volume-muted")); m_muteToggleButton->setCheckable(true); m_muteToggleButton->setFlat(true); QVBoxLayout *l = new QVBoxLayout(this); l->setSpacing(0); l->setMargin(2); l->addWidget(m_mixerButton, 0, Qt::AlignHCenter); l->addWidget(m_volumeSlider, 0, Qt::AlignHCenter); l->addWidget(m_muteToggleButton, 0, Qt::AlignHCenter); connect(m_mixerButton, SIGNAL(released()), this, SIGNAL(launchMixer())); connect(m_volumeSlider, SIGNAL(valueChanged(int)), this, SLOT(handleSliderValueChanged(int))); connect(m_muteToggleButton, SIGNAL(clicked()), this, SLOT(handleMuteToggleClicked())); }
VolumePopup::VolumePopup(QWidget* parent): QDialog(parent, Qt::Dialog | Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::Popup | Qt::X11BypassWindowManagerHint), m_pos(0,0), m_anchor(Qt::TopLeftCorner), m_device(0) { m_mixerButton = new QPushButton(this); m_mixerButton->setObjectName("MixerLink"); m_mixerButton->setMinimumWidth(1); m_mixerButton->setToolTip(tr("Launch mixer")); m_mixerButton->setText(tr("Mi&xer")); m_mixerButton->setAutoDefault(false); m_volumeSlider = new QSlider(Qt::Vertical, this); m_volumeSlider->setTickPosition(QSlider::TicksBothSides); m_volumeSlider->setTickInterval(10); // the volume slider shows 0-100 and volumes of all devices // should be converted to percentages. m_volumeSlider->setRange(0, 100); m_volumeSlider->installEventFilter(this); m_muteToggleButton = new QPushButton(this); m_muteToggleButton->setIcon(XdgIcon::fromTheme(QLatin1String("audio-volume-muted-panel"))); m_muteToggleButton->setCheckable(true); m_muteToggleButton->setAutoDefault(false); QVBoxLayout *l = new QVBoxLayout(this); l->setSpacing(0); l->setMargin(0); l->addWidget(m_mixerButton, 0, Qt::AlignHCenter); l->addWidget(m_volumeSlider, 0, Qt::AlignHCenter); l->addWidget(m_muteToggleButton, 0, Qt::AlignHCenter); connect(m_mixerButton, SIGNAL(released()), this, SIGNAL(launchMixer())); connect(m_volumeSlider, SIGNAL(valueChanged(int)), this, SLOT(handleSliderValueChanged(int))); connect(m_muteToggleButton, SIGNAL(clicked()), this, SLOT(handleMuteToggleClicked())); }
VolumeButton::VolumeButton(ILxQtPanelPlugin *plugin, QWidget* parent): QToolButton(parent), mPlugin(plugin), m_panel(plugin->panel()), m_showOnClick(true), m_muteOnMiddleClick(true) { // initial icon for button. It will be replaced after devices scan. // In the worst case - no soundcard/pulse - is found it remains // in the button but at least the button is not blank ("invisible") handleStockIconChanged("dialog-error"); m_volumePopup = new VolumePopup(); m_popupHideTimer.setInterval(1000); connect(this, SIGNAL(clicked()), this, SLOT(toggleVolumeSlider())); connect(&m_popupHideTimer, SIGNAL(timeout()), this, SLOT(hideVolumeSlider())); connect(m_volumePopup, SIGNAL(mouseEntered()), &m_popupHideTimer, SLOT(stop())); connect(m_volumePopup, SIGNAL(mouseLeft()), &m_popupHideTimer, SLOT(start())); connect(m_volumePopup, SIGNAL(launchMixer()), this, SLOT(handleMixerLaunch())); connect(m_volumePopup, SIGNAL(stockIconChanged(QString)), this, SLOT(handleStockIconChanged(QString))); }