|
|
|
/***************************************************************************
|
|
|
|
* copyright : (C) 2005-2006 Seb Ruiz <me@sebruiz.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. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
#ifndef AMAROK_STATISTICS_H
|
|
|
|
#define AMAROK_STATISTICS_H
|
|
|
|
|
|
|
|
#include "playlistwindow.h"
|
|
|
|
|
|
|
|
#include <kdialogbase.h> //baseclass
|
|
|
|
#include <klistview.h> //baseclass
|
|
|
|
|
|
|
|
#include <tqtimer.h>
|
|
|
|
|
|
|
|
class ClickLineEdit;
|
|
|
|
class TQColor;
|
|
|
|
class TQTimer;
|
|
|
|
|
|
|
|
class StatisticsList;
|
|
|
|
class StatisticsItem;
|
|
|
|
class StatisticsDetailedItem;
|
|
|
|
|
|
|
|
class Statistics : public KDialogBase
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
Statistics( TQWidget *parent = 0, const char *name = 0 );
|
|
|
|
~Statistics();
|
|
|
|
|
|
|
|
static Statistics *instance() { return s_instance; }
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void slotSetFilter();
|
|
|
|
void slotSetFilterTimeout();
|
|
|
|
|
|
|
|
private:
|
|
|
|
StatisticsList *m_listView;
|
|
|
|
ClickLineEdit *m_lineEdit;
|
|
|
|
TQTimer *m_timer;
|
|
|
|
|
|
|
|
static Statistics *s_instance;
|
|
|
|
};
|
|
|
|
|
|
|
|
class StatisticsList : public KListView
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
StatisticsList( TQWidget *parent, const char *name=0 );
|
|
|
|
~StatisticsList() {};
|
|
|
|
|
|
|
|
TQString filter() { return m_filter; }
|
|
|
|
void setFilter( const TQString &filter ) { m_filter = filter; }
|
|
|
|
void renderView();
|
|
|
|
void refreshView();
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void clearHover();
|
|
|
|
void itemClicked( TQListViewItem *item );
|
|
|
|
void showContextMenu( TQListViewItem *item, const TQPoint &p, int );
|
|
|
|
void startHover( TQListViewItem *item );
|
|
|
|
|
|
|
|
private:
|
|
|
|
void startDrag();
|
|
|
|
void viewportPaintEvent( TQPaintEvent* );
|
|
|
|
void expandInformation( StatisticsItem *item, bool refresh=false );
|
|
|
|
static TQString subText( const TQString &score, const TQString &rating );
|
|
|
|
|
|
|
|
StatisticsItem *m_trackItem;
|
|
|
|
StatisticsItem *m_mostplayedItem;
|
|
|
|
StatisticsItem *m_artistItem;
|
|
|
|
StatisticsItem *m_albumItem;
|
|
|
|
StatisticsItem *m_genreItem;
|
|
|
|
StatisticsItem *m_newestItem;
|
|
|
|
|
|
|
|
TQListViewItem *m_currentItem;
|
|
|
|
TQString m_filter;
|
|
|
|
bool m_expanded;
|
|
|
|
};
|
|
|
|
|
|
|
|
/// The listview items which are the headers for the categories
|
|
|
|
class StatisticsItem : public TQObject, public KListViewItem
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
TQ_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
StatisticsItem( TQString text, StatisticsList *parent, KListViewItem *after=0, const char *name=0 );
|
|
|
|
~StatisticsItem() {};
|
|
|
|
|
|
|
|
void paintCell( TQPainter *p, const TQColorGroup &cg, int column, int width, int align );
|
|
|
|
void paintFocus( TQPainter*, const TQColorGroup& , const TQRect& ) {}; //reimp
|
|
|
|
void setIcon( const TQString &icon );
|
|
|
|
|
|
|
|
void enterHover();
|
|
|
|
void leaveHover();
|
|
|
|
|
|
|
|
void setExpanded( const bool b ) { m_isExpanded = b; }
|
|
|
|
const bool isExpanded() { return m_isExpanded; }
|
|
|
|
|
|
|
|
void setSubtext( TQString t ) { m_subText = t; }
|
|
|
|
|
|
|
|
int rtti() const { return RTTI; }
|
|
|
|
static const int RTTI = 1000; //header item
|
|
|
|
|
|
|
|
protected:
|
|
|
|
static const int ANIM_INTERVAL = 18;
|
|
|
|
static const int ANIM_MAX = 20;
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void slotAnimTimer();
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQColor blendColors( const TQColor& color1, const TQColor& color2, int percent );
|
|
|
|
|
|
|
|
TQTimer *m_animTimer;
|
|
|
|
bool m_animEnter;
|
|
|
|
int m_animCount;
|
|
|
|
|
|
|
|
bool m_isActive;
|
|
|
|
bool m_isExpanded;
|
|
|
|
|
|
|
|
TQString m_subText;
|
|
|
|
};
|
|
|
|
|
|
|
|
/// Listview items for the tqchildren of expanded items (the actual results)
|
|
|
|
class StatisticsDetailedItem : public KListViewItem
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
StatisticsDetailedItem( const TQString &text, const TQString &subtext, StatisticsItem *parent,
|
|
|
|
StatisticsDetailedItem *after=0, const char *name=0 );
|
|
|
|
~StatisticsDetailedItem() {};
|
|
|
|
|
|
|
|
enum ItemType { NONE, TRACK, ARTIST, ALBUM, GENRE, HISTORY };
|
|
|
|
|
|
|
|
void setup();
|
|
|
|
void paintCell( TQPainter *p, const TQColorGroup &cg, int column, int width, int align );
|
|
|
|
|
|
|
|
void setItemType( const ItemType t ) { m_type = t; }
|
|
|
|
const ItemType itemType() { return m_type; }
|
|
|
|
|
|
|
|
void setUrl( TQString &url ) { m_url = url; }
|
|
|
|
const TQString url() { return m_url; }
|
|
|
|
|
|
|
|
void setSubtext( TQString t ) { m_subText = t; }
|
|
|
|
TQString getSQL(); //get the sql query for all the urls the item represents
|
|
|
|
KURL::List getURLs();
|
|
|
|
|
|
|
|
void paintFocus( TQPainter*, const TQColorGroup& , const TQRect& ) {}; //reimp
|
|
|
|
|
|
|
|
int rtti() const { return RTTI; }
|
|
|
|
static const int RTTI = 1001; //detailed item
|
|
|
|
|
|
|
|
private:
|
|
|
|
ItemType m_type;
|
|
|
|
TQString m_url;
|
|
|
|
TQString m_subText;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* AMAROK_STATISTICS_H */
|