Skip to content
This repository has been archived by the owner on Dec 17, 2017. It is now read-only.

Commit

Permalink
The Volume plugin was ported
Browse files Browse the repository at this point in the history
  • Loading branch information
SokoloffA committed Feb 7, 2013
1 parent aa48350 commit 651e007
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 117 deletions.
2 changes: 1 addition & 1 deletion razorqt-panel/CMakeLists.txt
Expand Up @@ -34,7 +34,7 @@ setByDefault(CPULOAD_PLUGIN No)
setByDefault(NETWORKMONITOR_PLUGIN No)
setByDefault(SENSORS_PLUGIN No)

setByDefault(VOLUME_PLUGIN No)
setByDefault(VOLUME_PLUGIN Yes)
# Options for the volume plugin.
setByDefault(VOLUME_USE_PULSEAUDIO Yes)
setByDefault(VOLUME_USE_ALSA Yes)
Expand Down
69 changes: 42 additions & 27 deletions razorqt-panel/plugin-volume/razorvolume.cpp
Expand Up @@ -44,22 +44,18 @@
#include <razorqxt/qxtglobalshortcut.h>
#include <razorqt/razornotification.h>

EXPORT_RAZOR_PANEL_PLUGIN_CPP(RazorVolume)
Q_EXPORT_PLUGIN2(volume, RazorVolumePluginLibrary)

RazorVolume::RazorVolume(const RazorPanelPluginStartInfo* startInfo, QWidget* parent):
RazorPanelPlugin(startInfo, parent),
RazorVolume::RazorVolume(const IRazorPanelPluginStartupInfo &startupInfo):
QObject(),
IRazorPanelPlugin(startupInfo),
m_engine(0),
m_defaultSinkIndex(0),
m_defaultSink(0)
{
setObjectName("Volume");

layout()->setAlignment(Qt::AlignCenter);
m_volumeButton = new VolumeButton(panel(), this);
addWidget(m_volumeButton);
m_volumeButton = new VolumeButton(this);

m_notification = new RazorNotification("", this);
m_configWindow = new RazorVolumeConfiguration(settings(), this);

// global key shortcuts
m_keyVolumeUp = new QxtGlobalShortcut(this);
Expand Down Expand Up @@ -101,6 +97,11 @@ RazorVolume::RazorVolume(const RazorPanelPluginStartInfo* startInfo, QWidget* pa
settingsChanged();
}

RazorVolume::~RazorVolume()
{
delete m_volumeButton;
}

void RazorVolume::setAudioEngine(AudioEngine *engine)
{
if (m_engine) {
Expand All @@ -120,18 +121,12 @@ void RazorVolume::setAudioEngine(AudioEngine *engine)
updateConfigurationSinkList();
}

void RazorVolume::showConfigureDialog()
{
m_configWindow->show();
m_configWindow->raise();
m_configWindow->activateWindow();
}

void RazorVolume::settingsChanged()
{
#if defined(USE_PULSEAUDIO) && defined(USE_ALSA)
if (!m_engine || m_engine->backendName() != settings().value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString()) {
if (settings().value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString() == "PulseAudio")
if (!m_engine || m_engine->backendName() != settings()->value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString()) {
if (settings()->value(SETTINGS_AUDIO_ENGINE, SETTINGS_DEFAULT_AUDIO_ENGINE).toString() == "PulseAudio")
setAudioEngine(new PulseAudioEngine(this));
else
setAudioEngine(new AlsaEngine(this));
Expand All @@ -144,33 +139,32 @@ void RazorVolume::settingsChanged()
setAudioEngine(new AlsaEngine(this));
#endif

m_volumeButton->setShowOnClicked(settings().value(SETTINGS_SHOW_ON_LEFTCLICK, SETTINGS_DEFAULT_SHOW_ON_LEFTCLICK).toBool());
m_volumeButton->setMuteOnMiddleClick(settings().value(SETTINGS_MUTE_ON_MIDDLECLICK, SETTINGS_DEFAULT_MUTE_ON_MIDDLECLICK).toBool());
m_volumeButton->setMixerCommand(settings().value(SETTINGS_MIXER_COMMAND, SETTINGS_DEFAULT_MIXER_COMMAND).toString());
m_volumeButton->volumePopup()->setSliderStep(settings().value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
m_volumeButton->setShowOnClicked(settings()->value(SETTINGS_SHOW_ON_LEFTCLICK, SETTINGS_DEFAULT_SHOW_ON_LEFTCLICK).toBool());
m_volumeButton->setMuteOnMiddleClick(settings()->value(SETTINGS_MUTE_ON_MIDDLECLICK, SETTINGS_DEFAULT_MUTE_ON_MIDDLECLICK).toBool());
m_volumeButton->setMixerCommand(settings()->value(SETTINGS_MIXER_COMMAND, SETTINGS_DEFAULT_MIXER_COMMAND).toString());
m_volumeButton->volumePopup()->setSliderStep(settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());

m_defaultSinkIndex = settings().value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt();
m_defaultSinkIndex = settings()->value(SETTINGS_DEVICE, SETTINGS_DEFAULT_DEVICE).toInt();
if (m_engine && m_engine->sinks().count() > 0) {
m_defaultSinkIndex = qBound(0, m_defaultSinkIndex, m_engine->sinks().count()-1);

m_defaultSink = m_engine->sinks().at(m_defaultSinkIndex);
m_volumeButton->volumePopup()->setDevice(m_defaultSink);

m_engine->setIgnoreMaxVolume(settings().value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool());
m_engine->setIgnoreMaxVolume(settings()->value(SETTINGS_IGNORE_MAX_VOLUME, SETTINGS_DEFAULT_IGNORE_MAX_VOLUME).toBool());
}
}

void RazorVolume::updateConfigurationSinkList()
{
if (m_engine)
m_configWindow->setSinkList(m_engine->sinks());

}

void RazorVolume::handleShortcutVolumeUp()
{
if (m_defaultSink)
{
m_defaultSink->setVolume(m_defaultSink->volume() + settings().value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
m_defaultSink->setVolume(m_defaultSink->volume() + settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
m_notification->setSummary(tr("Volume: %1").arg(QString::number(m_defaultSink->volume())));
m_notification->update();
}
Expand All @@ -180,7 +174,7 @@ void RazorVolume::handleShortcutVolumeDown()
{
if (m_defaultSink)
{
m_defaultSink->setVolume(m_defaultSink->volume() - settings().value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
m_defaultSink->setVolume(m_defaultSink->volume() - settings()->value(SETTINGS_STEP, SETTINGS_DEFAULT_STEP).toInt());
m_notification->setSummary(tr("Volume: %1").arg(QString::number(m_defaultSink->volume())));
m_notification->update();
}
Expand All @@ -191,3 +185,24 @@ void RazorVolume::handleShortcutVolumeMute()
if (m_defaultSink)
m_defaultSink->toggleMute();
}

QWidget *RazorVolume::widget()
{
return m_volumeButton;
}

void RazorVolume::realign()
{
m_volumeButton->hideVolumeSlider();
}

QDialog *RazorVolume::configureDialog()
{
RazorVolumeConfiguration *configWindow = new RazorVolumeConfiguration(*settings());
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);

if (m_engine)
configWindow->setSinkList(m_engine->sinks());

return configWindow;
}
30 changes: 21 additions & 9 deletions razorqt-panel/plugin-volume/razorvolume.h
Expand Up @@ -28,29 +28,32 @@
#ifndef RAZORVOLUME_H
#define RAZORVOLUME_H

#include "../panel/razorpanelplugin.h"
#include "../panel/irazorpanelplugin.h"
#include <QtGui/QToolButton>

#include <QtGui/QSlider>

class VolumeButton;
class AudioEngine;
class AudioDevice;
class RazorVolumeConfiguration;
class RazorNotification;
class QxtGlobalShortcut;

class RazorVolume : public RazorPanelPlugin
class RazorVolume : public QObject, public IRazorPanelPlugin
{
Q_OBJECT
public:
RazorVolume(const RazorPanelPluginStartInfo* startInfo, QWidget* parent = 0);
RazorVolume(const IRazorPanelPluginStartupInfo &startupInfo);
~RazorVolume();

virtual RazorPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog ; }
virtual QWidget *widget();
virtual QString themeId() const { return "Volume"; }
virtual IRazorPanelPlugin::Flags flags() const { return PreferRightAlignment | HaveConfigDialog ; }
void realign();
QDialog *configureDialog();

void setAudioEngine(AudioEngine *engine);

protected slots:
virtual void showConfigureDialog();
virtual void settingsChanged();
void updateConfigurationSinkList();
void handleShortcutVolumeUp();
Expand All @@ -62,13 +65,22 @@ protected slots:
VolumeButton *m_volumeButton;
int m_defaultSinkIndex;
AudioDevice *m_defaultSink;
RazorVolumeConfiguration *m_configWindow;
QxtGlobalShortcut *m_keyVolumeUp;
QxtGlobalShortcut *m_keyVolumeDown;
QxtGlobalShortcut *m_keyMuteToggle;
RazorNotification *m_notification;
};

EXPORT_RAZOR_PANEL_PLUGIN_H

class RazorVolumePluginLibrary: public QObject, public IRazorPanelPluginLibrary
{
Q_OBJECT
Q_INTERFACES(IRazorPanelPluginLibrary)
public:
IRazorPanelPlugin *instance(const IRazorPanelPluginStartupInfo &startupInfo)
{
return new RazorVolume(startupInfo);
}
};

#endif // RAZORVOLUME_H
89 changes: 18 additions & 71 deletions razorqt-panel/plugin-volume/volumebutton.cpp
Expand Up @@ -35,12 +35,13 @@
#include <QtCore/QProcess>

#include <qtxdg/xdgicon.h>
#include "../panel/razorpanel.h"
#include "../panel/irazorpanel.h"
#include "../panel/irazorpanelplugin.h"

VolumeButton::VolumeButton(RazorPanel *panel, QWidget* parent):
VolumeButton::VolumeButton(IRazorPanelPlugin *plugin, QWidget* parent):
QToolButton(parent),
m_panel(panel),
m_popupHideTimerDuration(1000),
mPlugin(plugin),
m_panel(plugin->panel()),
m_showOnClick(true),
m_muteOnMiddleClick(true)
{
Expand All @@ -50,12 +51,12 @@ VolumeButton::VolumeButton(RazorPanel *panel, QWidget* parent):
handleStockIconChanged("dialog-error");
m_volumePopup = new VolumePopup();

m_popupHideTimer.setInterval(1000);
connect(this, SIGNAL(clicked()), this, SLOT(toggleVolumeSlider()));
connect(m_panel, SIGNAL(positionChanged()), this, SLOT(hideVolumeSlider()));
connect(&m_popupHideTimer, SIGNAL(timeout()), this, SLOT(handlePopupHideTimeout()));
connect(&m_popupHideTimer, SIGNAL(timeout()), this, SLOT(hideVolumeSlider()));

connect(m_volumePopup, SIGNAL(mouseEntered()), this, SLOT(popupHideTimerStop()));
connect(m_volumePopup, SIGNAL(mouseLeft()), this, SLOT(popupHideTimerStart()));
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)));
Expand Down Expand Up @@ -90,12 +91,12 @@ void VolumeButton::enterEvent(QEvent *event)
if (!m_showOnClick)
showVolumeSlider();

popupHideTimerStop();
m_popupHideTimer.stop();
}

void VolumeButton::leaveEvent(QEvent *event)
{
popupHideTimerStart();
m_popupHideTimer.stop();
}

void VolumeButton::wheelEvent(QWheelEvent *event)
Expand All @@ -118,83 +119,29 @@ void VolumeButton::mouseReleaseEvent(QMouseEvent *event)
void VolumeButton::toggleVolumeSlider()
{
if (m_volumePopup->isVisible()) {
popupHideTimerStop();
handlePopupHideTimeout();
hideVolumeSlider();
} else {
showVolumeSlider();
}
}

void VolumeButton::showVolumeSlider()
{

if (m_volumePopup->isVisible())
return;

popupHideTimerStop();
m_popupHideTimer.stop();
m_volumePopup->updateGeometry();

if (isLeftToRight())
{
switch (m_panel->position())
{
case RazorPanel::PositionTop:
m_volumePopup->open(mapToGlobal(geometry().bottomLeft()), Qt::TopLeftCorner);
break;

case RazorPanel::PositionBottom:
m_volumePopup->open(mapToGlobal(geometry().topLeft()), Qt::BottomLeftCorner);
break;

case RazorPanel::PositionLeft:
m_volumePopup->open(mapToGlobal(geometry().topRight()), Qt::TopLeftCorner);
break;

case RazorPanel::PositionRight:
m_volumePopup->open(mapToGlobal(geometry().topLeft()), Qt::TopLeftCorner);
break;
}
}
else
{
switch (m_panel->position())
{
case RazorPanel::PositionTop:
m_volumePopup->open(mapToGlobal(geometry().bottomRight()), Qt::TopRightCorner);
break;

case RazorPanel::PositionBottom:
m_volumePopup->open(mapToGlobal(geometry().topRight()), Qt::BottomRightCorner);
break;

case RazorPanel::PositionLeft:
m_volumePopup->open(mapToGlobal(geometry().topRight()), Qt::TopLeftCorner);
break;

case RazorPanel::PositionRight:
m_volumePopup->open(mapToGlobal(geometry().topLeft()), Qt::TopLeftCorner);
break;
}
}
m_volumePopup->adjustSize();
QRect pos = mPlugin->calculatePopupWindowPos(m_volumePopup->size());
m_volumePopup->open(pos.topLeft(), Qt::TopLeftCorner);
}

void VolumeButton::hideVolumeSlider()
{
popupHideTimerStart();
}

void VolumeButton::handlePopupHideTimeout()
{
m_volumePopup->hide();
}

void VolumeButton::popupHideTimerStart()
{
m_popupHideTimer.start(m_popupHideTimerDuration);
}

void VolumeButton::popupHideTimerStop()
{
m_popupHideTimer.stop();
m_volumePopup->hide();
}

void VolumeButton::handleMixerLaunch()
Expand Down

0 comments on commit 651e007

Please sign in to comment.