You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeaddons/noatun-plugins/alsaplayer/userinterface.cpp

340 lines
6.7 KiB

/*
* Copyright (C) 2001 Rik Hemsley (rikkus) <rik@kde.org>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#include "seeker.h"
#include "userinterface.h"
#include <noatun/app.h>
#include <noatun/player.h>
#include <noatun/controls.h>
#include <noatun/effects.h>
#include <noatun/engine.h>
#include <qtoolbutton.h>
#include <qdragobject.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qframe.h>
#include <kstatusbar.h>
#include <kpopupmenu.h>
#include <kurldrag.h>
#include <kglobal.h>
#include <kconfig.h>
#include <klocale.h>
#include <kiconloader.h>
#include <kurldrag.h>
#include <noatun/playlist.h>
#include <noatun/stdaction.h>
#include <arts/artsmodules.h>
#include <arts/reference.h>
#include <arts/soundserver.h>
#include <arts/kmedia2.h>
#include "configmodule.h"
AlsaPlayer::AlsaPlayer()
: APMainWindow (0, "AlsaPlayer"),
UserInterface (),
speed_ (100)
{
connect
(
playlistButton,
SIGNAL(clicked()),
napp->player(),
SLOT(toggleListView())
);
connect
(
previousButton,
SIGNAL(clicked()),
napp->player(),
SLOT(back())
);
connect
(
nextButton,
SIGNAL(clicked()),
napp->player(),
SLOT(forward())
);
connect
(
stopButton,
SIGNAL(clicked()),
napp->player(),
SLOT(stop())
);
connect
(
playButton,
SIGNAL(clicked()),
napp->player(),
SLOT(playpause())
);
connect(napp, SIGNAL(hideYourself()), SLOT(hide()));
connect(napp, SIGNAL(showYourself()), SLOT(show()));
connect(napp->player(), SIGNAL(playlistShown()), SLOT(slotPlayListShown()));
connect(napp->player(), SIGNAL(playlistHidden()), SLOT(slotPlayListHidden()));
connect(napp->player(), SIGNAL(playing()), SLOT(slotPlaying()));
connect(napp->player(), SIGNAL(stopped()), SLOT(slotStopped()));
connect(napp->player(), SIGNAL(paused()), SLOT(slotPaused()));
connect(napp->player(), SIGNAL(timeout()), SLOT(slotTimeout()));
connect(napp->player(), SIGNAL(changed()), SLOT(slotTrackChanged()));
connect
(
napp->player(),
SIGNAL(volumeChanged(int)),
SLOT(slotVolumeChanged(int))
);
connect
(
new AlsaPlayerConfigModule(this),
SIGNAL(saved()),
SLOT(slotConfigChanged())
);
connect
(
volumeSlider,
SIGNAL(valueChanged(int)),
napp->player(),
SLOT(setVolume(int))
);
connect
(
forwardButton,
SIGNAL(clicked()),
SLOT(slotForward())
);
connect
(
pauseButton,
SIGNAL(clicked()),
SLOT(slotPause())
);
connect(speedSlider, SIGNAL(valueChanged(int)), SLOT(slotSetSpeed(int)));
menuButton->setPopup(NoatunStdAction::ContextMenu::contextMenu());
setIcon(BarIcon("noatun"));
napp->player()->handleButtons();
loadConfig();
resize(sizeHint().width(), minimumSizeHint().height());
show();
}
AlsaPlayer::~AlsaPlayer()
{
// Empty.
}
void AlsaPlayer::closeEvent(QCloseEvent *)
{
unload();
}
void AlsaPlayer::dragEnterEvent(QDragEnterEvent *event)
{
event->accept(KURLDrag::canDecode(event));
}
void AlsaPlayer::dropEvent(QDropEvent *event)
{
KURL::List uri;
if (KURLDrag::decode(event, uri))
{
for (KURL::List::Iterator i = uri.begin(); i != uri.end(); ++i)
napp->player()->openFile(*i, false);
}
}
void AlsaPlayer::setTitleText(const QString & s)
{
QString titleText
(s.isNull() ? napp->player()->current().title() : s);
if (titleLabel->text() != titleText)
titleLabel->setText(titleText);
}
void AlsaPlayer::slotPlaying()
{
setTitleText(QString::null);
playButton->setOn(true);
stopButton->setEnabled(true);
}
void AlsaPlayer::slotStopped()
{
setTitleText(i18n("No File Loaded"));
stopButton->setEnabled(false);
playButton->setOn(false);
}
void AlsaPlayer::slotPaused()
{
setTitleText(QString::null);
stopButton->setEnabled(true);
playButton->setOn(false);
}
bool AlsaPlayer::eventFilter(QObject *o, QEvent *e)
{
switch (e->type())
{
case QEvent::MouseButtonPress:
mousePressEvent(static_cast<QMouseEvent *>(e));
break;
case QEvent::Wheel:
wheelEvent(static_cast<QWheelEvent*>(e));
return true;
break;
default:
break;
}
return QWidget::eventFilter(o, e);
}
void AlsaPlayer::slotPlayListShown()
{
playlistButton->setOn(true);
}
void AlsaPlayer::slotPlayListHidden()
{
playlistButton->setOn(false);
}
void AlsaPlayer::mousePressEvent(QMouseEvent * e)
{
if (e->button() == RightButton)
{
NoatunStdAction::ContextMenu::showContextMenu();
return;
}
return QWidget::mousePressEvent(e);
}
void AlsaPlayer::wheelEvent(QWheelEvent * e)
{
int newVolume = napp->player()->volume() + (e->delta() / 120);
napp->player()->setVolume(newVolume);
}
void AlsaPlayer::slotConfigChanged()
{
loadConfig();
}
void AlsaPlayer::slotVolumeChanged(int i)
{
QString text("%1%");
volumeLabel->setText(text.arg(i));
volumeSlider->setValue(i);
}
void AlsaPlayer::slotTimeout()
{
// noatun bug: napp->player()->lengthString() will crash if there's
// no 'current track'.
if (!napp->player()->current())
return;
setTitleText(QString::null);
QString lengthText(napp->player()->lengthString());
if (timeLabel->text() != lengthText)
timeLabel->setText(lengthText);
}
void AlsaPlayer::loadConfig()
{
// Empty.
}
void AlsaPlayer::slotRestart()
{
napp->player()->skipTo(0);
}
void AlsaPlayer::slotTrackChanged()
{
slotSetSpeed(speed_);
}
void AlsaPlayer::slotSetSpeed(int newSpeed)
{
speed_ = newSpeed;
pauseButton->setEnabled(0 != speed_);
speedLabel->setText(QString("%1%").arg(speed_));
Arts::PlayObject playobject(napp->player()->engine()->playObject());
Arts::PitchablePlayObject pitchable = Arts::DynamicCast(playobject);
if (!pitchable.isNull())
{
float f = (float(speed_) / 100.f);
pitchable.speed(f);
}
}
void AlsaPlayer::slotPause()
{
speedSlider->setValue(0);
pauseButton->setEnabled(false);
}
void AlsaPlayer::slotForward()
{
speedSlider->setValue(100);
}
#include "userinterface.moc"
// vim:ts=2:sw=2:tw=78:noet