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.
amarok/amarok/src/moodbar.h

184 lines
4.8 KiB

/*************************************************************************** -*- c++ -*-
moodbar.h - description
-------------------
begin : 6th Nov 2005
copyright : (C) 2006 by Joseph Rabinoff
copyright : (C) 2005 by Gav Wood
email : bobqwatson@yahoo.com
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
// Aug 5 2006 (Joe Rabinoff): Rewrote everything. This file bears
// no resemblance to Gav's original code.
// See moodbar.cpp for usage and implementation notes.
#ifndef MOODBAR_H
#define MOODBAR_H
#include <tqobject.h>
#include <tqvaluevector.h>
#include <tqcolor.h>
#include <tqpixmap.h>
#include <tqmutex.h>
#include <tqvaluelist.h>
#include <kurl.h>
class MetaBundle;
class Moodbar : public TQObject
{
Q_OBJECT
public:
typedef TQValueVector<TQColor> ColorList;
typedef enum
{
Unloaded, // Haven't tried to load yet
CantLoad, // For some reason we'll never be able to load
JobQueued, // An analysis job is pending
JobRunning, // An analysis job is running
JobFailed, // Our job has returned and failed
Loaded // Can draw()
} State;
// These are the state changes we emit in jobEvent
enum
{
JobStateRunning,
JobStateSucceeded,
JobStateFailed
};
// Construct an empty, small-footprint instance
Moodbar( MetaBundle *mb );
// This is for de-queueing jobs
~Moodbar( void );
Moodbar& operator=( const Moodbar &mood );
void reset( void );
void detach( void );
bool dataExists( void );
bool canHaveMood( void );
void load( void );
TQPixmap draw( int width, int height );
int hueSort( void ) const
{ return m_hueSort; }
State state( void ) const
{ return m_state; }
// Where are we storing the .mood file?
static TQString moodFilename( const KURL &url );
static TQString moodFilename( const KURL &url, bool withMusic );
static bool copyFile( const TQString &srcPath, const TQString &dstPath );
static bool executableExists( void );
public slots:
void slotJobEvent( KURL url, int newState );
signals:
void jobEvent( int newState );
private:
// Undefined! We can't construct unless we know what
// *our* parent bundle is.
Moodbar( const Moodbar& );
bool readFile( void );
MetaBundle *m_bundle; // Parent bundle
ColorList m_data; // .mood file contents
TQPixmap m_pixmap; // Cached from the last time draw() was called
KURL m_url; // Keep a copy of this, mainly for dtor
mutable TQMutex m_mutex; // Locks the whole object
int m_hueSort; // For PlaylistItem sorting
State m_state;
};
class TDEProcess;
// For internal use only (well, mostly)
class MoodServer : public TQObject
{
Q_OBJECT
public:
static MoodServer *instance( void );
bool queueJob( MetaBundle *bundle );
void deQueueJob( KURL url );
bool moodbarBroken( void ) const
{ return m_moodbarBroken; }
signals:
void jobEvent( KURL url, int newState );
private slots:
void slotJobCompleted( TDEProcess *proc );
void slotNewJob( void );
void slotMoodbarPrefs( bool show, bool moodier, int alter, bool withMusic );
public slots:
// Moodbar file organization slots
void slotFileDeleted( const TQString &absPath );
void slotFileMoved( const TQString &srcPath, const TQString &dstPath );
private:
class ProcData
{
public:
ProcData( KURL url, TQString infile, TQString outfile )
: m_url( url ), m_infile( infile ), m_outfile( outfile )
, m_refcount( 1 )
{}
ProcData( void ) : m_refcount( 0 ) {}
KURL m_url;
TQString m_infile;
TQString m_outfile;
// Keep track of how many Moodbars are waiting on this URL
int m_refcount;
};
typedef enum
{
Crash = -1,
Success = 0,
NoPlugin = 1,
NoFile = 2,
CommandLine = 3
} ReturnStatus;
MoodServer( void );
void setMoodbarBroken( void );
void clearJobs( void );
TQValueList<ProcData> m_jobQueue;
bool m_moodbarBroken;
TDEProcess *m_currentProcess;
ProcData m_currentData;
mutable TQMutex m_mutex;
};
#endif // MOODBAR_H