/* * Copyright (C) 2001 Rik Hemsley (rikkus) * * 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #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(e)); break; case QEvent::Wheel: wheelEvent(static_cast(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