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/kicker-applets/mediacontrol/xmmsInterface.cpp

184 lines
4.6 KiB

/***************************************************************************
Interface to access XMMS
-------------------
begin : Tue Apr 25 11:53:11 CEST 2000
copyright : (C) 2000-2002 by Stefan Gehn
email : metz {AT} gehn {DOT} net
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef HAVE_XMMS // only use if there is xmms installed on compiletime
#include "xmmsInterface.h"
#include "xmmsInterface.moc"
#include <xmms/xmmsctrl.h>
#include <kdebug.h>
#define TIMER_SLOW 1000
#define TIMER_FAST 100
#define XMMS_SESSION 0
XmmsInterface::XmmsInterface() : PlayerInterface()
{
timervalue = TIMER_FAST;
bStartingXMMS = false;
xmms_timer = new TQTimer ( this, "xmms_timer" );
TQObject::connect( xmms_timer, TQ_SIGNAL(timeout()), TQ_SLOT(updateSlider()) );
// Better start the timer as late as possible in initialization
xmms_timer->start ( timervalue );
}
XmmsInterface::~XmmsInterface()
{
delete xmms_timer;
}
void XmmsInterface::updateSlider ( void )
{
if ( !xmms_remote_is_running(XMMS_SESSION) )
{ // XMMS not running
if (timervalue == TIMER_FAST) // timer is running fast
{
emit playerStopped();
timervalue = TIMER_SLOW; // timer does not need to run fast if XMMS is not running
xmms_timer->changeInterval(timervalue);
emit newSliderPosition(0,0);
}
return; // as XMMS is not running we can leave now
}
// huh, XMMS is running :)
if (timervalue == TIMER_SLOW) // what? Still running slow?
{
emit playerStarted();
timervalue = TIMER_FAST; // boost the timer to have better reaction-times for the applet
xmms_timer->changeInterval(timervalue);
}
int len = xmms_remote_get_playlist_time ( XMMS_SESSION, xmms_remote_get_playlist_pos(XMMS_SESSION) );
int time = xmms_remote_get_output_time(XMMS_SESSION);
if (len < 0)
{
len = 0;
time = 0;
}
emit newSliderPosition(len,time);
emit playingStatusChanged(playingStatus());
}
// Drag-n-Drop stuff =================================================================
void XmmsInterface::dragEnterEvent(TQDragEnterEvent* event)
{
event->accept( TQTextDrag::canDecode(event) );
}
void XmmsInterface::dropEvent(TQDropEvent* event)
{
TQString text;
// kdDebug(90200) << "XmmsInterface::dropEvent()" << endl;
if ( TQTextDrag::decode(event, text) )
{
xmms_remote_playlist_add_url_string(XMMS_SESSION,
(gchar *)text.local8Bit().data());
}
}
// ====================================================================================
void XmmsInterface::sliderStartDrag()
{
xmms_timer->stop();
}
void XmmsInterface::sliderStopDrag()
{
xmms_timer->start( timervalue );
}
void XmmsInterface::jumpToTime( int msec )
{
xmms_remote_jump_to_time(XMMS_SESSION, msec);
}
void XmmsInterface::playpause()
{
if (!xmms_remote_is_running(XMMS_SESSION))
{
if (bStartingXMMS)
return;
startPlayer("xmms");
bStartingXMMS = true;
TQTimer::singleShot(500, this, TQ_SLOT(playpause()));
}
else
{
bStartingXMMS = false;
xmms_remote_play_pause(XMMS_SESSION);
}
}
void XmmsInterface::stop()
{
xmms_remote_stop(XMMS_SESSION);
}
void XmmsInterface::next()
{
xmms_remote_playlist_next(XMMS_SESSION);
}
void XmmsInterface::prev()
{
xmms_remote_playlist_prev(XMMS_SESSION);
}
void XmmsInterface::volumeUp()
{
const int cur = xmms_remote_get_main_volume(XMMS_SESSION);
xmms_remote_set_main_volume(XMMS_SESSION, cur+1);
}
void XmmsInterface::volumeDown()
{
const int cur = xmms_remote_get_main_volume(XMMS_SESSION);
xmms_remote_set_main_volume(XMMS_SESSION, cur-1);
}
int XmmsInterface::playingStatus()
{
if (xmms_remote_is_paused(XMMS_SESSION))
return Paused;
if (xmms_remote_is_playing(XMMS_SESSION))
return Playing;
return Stopped;
}
const TQString XmmsInterface::getTrackTitle() const
{
return TQString::fromLocal8Bit(
xmms_remote_get_playlist_title(XMMS_SESSION,
xmms_remote_get_playlist_pos(XMMS_SESSION)));
}
#endif // HAVE_XMMS