diff options
Diffstat (limited to 'juk/playlistcollection.h')
-rw-r--r-- | juk/playlistcollection.h | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/juk/playlistcollection.h b/juk/playlistcollection.h new file mode 100644 index 00000000..1ee4dea2 --- /dev/null +++ b/juk/playlistcollection.h @@ -0,0 +1,270 @@ +/*************************************************************************** + copyright : (C) 2004 by Scott Wheeler + email : wheeler@kde.org + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 PLAYLIST_COLLECTION_H +#define PLAYLIST_COLLECTION_H + +#include "playlistinterface.h" +#include "stringhash.h" +#include "jukIface.h" + +#include <kshortcut.h> +#include <klocale.h> +#include <kdirlister.h> + +#include <qguardedptr.h> + +class QWidgetStack; +class KAction; +class Playlist; +class PlaylistItem; +class HistoryPlaylist; +class UpcomingPlaylist; +class SearchPlaylist; +class DynamicPlaylist; + +typedef QValueList<Playlist *> PlaylistList; +typedef QValueList<PlaylistItem *> PlaylistItemList; + +class PlaylistCollection : public PlaylistInterface, CollectionIface +{ + friend class Playlist; + friend class CollectionList; + friend class DynamicPlaylist; + + static PlaylistCollection *m_instance; + +public: + PlaylistCollection(QWidgetStack *playlistStack); + virtual ~PlaylistCollection(); + + static PlaylistCollection *instance() { return m_instance; } + + virtual QString name() const; + virtual FileHandle currentFile() const; + virtual int count() const; + virtual int time() const; + virtual void playNext(); + virtual void playPrevious(); + virtual void stop(); + virtual bool playing() const; + + void playFirst(); + void playNextAlbum(); + + virtual QStringList playlists() const; + virtual void createPlaylist(const QString &name); + virtual void createDynamicPlaylist(const PlaylistList &playlists); + virtual void showMore(const QString &artist, const QString &album = QString::null); + virtual void removeTrack(const QString &playlist, const QStringList &files); + + virtual QString playlist() const; + virtual QString playingPlaylist() const; + virtual void setPlaylist(const QString &playlist); + + virtual QStringList playlistTracks(const QString &playlist) const; + virtual QString trackProperty(const QString &file, const QString &property) const; + virtual QPixmap trackCover(const QString &file, const QString &size = "Small") const; + + virtual void open(const QStringList &files = QStringList()); + virtual void open(const QString &playlist, const QStringList &files); + virtual void addFolder(); + virtual void rename(); + virtual void duplicate(); + virtual void save(); + virtual void saveAs(); + virtual void remove() = 0; + virtual void reload(); + virtual void editSearch(); + virtual void setDynamicListsFrozen(bool) = 0; + + bool showMoreActive() const; + void clearShowMore(bool raise = true); + void enableDirWatch(bool enable); + + void removeItems(); + void refreshItems(); + void renameItems(); + void addCovers(bool fromFile); + void removeCovers(); + void viewCovers(); + void showCoverManager(); + + virtual PlaylistItemList selectedItems(); + + void scanFolders(); + + void createPlaylist(); + void createSearchPlaylist(); + void createFolderPlaylist(); + + void guessTagFromFile(); + void guessTagFromInternet(); + + void setSearchEnabled(bool enable); + + HistoryPlaylist *historyPlaylist() const; + void setHistoryPlaylistEnabled(bool enable); + + UpcomingPlaylist *upcomingPlaylist() const; + void setUpcomingPlaylistEnabled(bool enable); + + void dirChanged(const QString &path); + + /** + * Returns a pointer to the action handler. + */ + QObject *object() const; + + void newItems(const KFileItemList &list) const; + + /** + * This is the current playlist in all things relating to the player. It + * represents the playlist that either should be played from or is currently + * playing. + */ + virtual Playlist *currentPlaylist() const; + + /** + * This is the currently visible playlist and should be used for all user + * interaction elements. + */ + virtual Playlist *visiblePlaylist() const; + + /** + * Makes \a playlist the currently visible playlist. + */ + virtual void raise(Playlist *playlist); + + /** + * This is used to put up a temporary widget over the top of the playlist + * stack. This is part of a trick to significantly speed up painting by + * hiding the playlist to which items are being added. + */ + void raiseDistraction(); + void lowerDistraction(); + + class ActionHandler; + +protected: + virtual QWidgetStack *playlistStack() const; + virtual void setupPlaylist(Playlist *playlist, const QString &iconName); + virtual void removePlaylist(Playlist *playlist) = 0; + + bool importPlaylists() const; + bool containsPlaylistFile(const QString &file) const; + + QString playlistNameDialog(const QString &caption = i18n("Create New Playlist"), + const QString &suggest = QString::null, + bool forceUnique = true) const; + QString uniquePlaylistName(const QString &suggest = i18n("Playlist")) const; + + void addNameToDict(const QString &name); + void addFileToDict(const QString &file); + void removeNameFromDict(const QString &name); + void removeFileFromDict(const QString &file); + + Playlist *playlistByName(const QString &name) const; + +private: + void readConfig(); + void saveConfig(); + + QWidgetStack *m_playlistStack; + HistoryPlaylist *m_historyPlaylist; + UpcomingPlaylist *m_upcomingPlaylist; + ActionHandler *m_actionHandler; + + KDirLister m_dirLister; + StringHash m_playlistNames; + StringHash m_playlistFiles; + QStringList m_folderList; + bool m_importPlaylists; + bool m_searchEnabled; + bool m_playing; + + QGuardedPtr<SearchPlaylist> m_showMorePlaylist; + QGuardedPtr<Playlist> m_belowShowMorePlaylist; + QGuardedPtr<DynamicPlaylist> m_dynamicPlaylist; + QGuardedPtr<Playlist> m_belowDistraction; + + QWidget *m_distraction; +}; + +/** + * This class is just used as a proxy to handle the signals coming from action + * activations without requiring PlaylistCollection to be a QObject. + */ + +class PlaylistCollection::ActionHandler : public QObject +{ + Q_OBJECT +public: + ActionHandler(PlaylistCollection *collection); + +private: + KAction *createAction(const QString &text, + const char *slot, + const char *name, + const QString &icon = QString::null, + const KShortcut &shortcut = KShortcut()); +private slots: + void slotPlayFirst() { m_collection->playFirst(); } + void slotPlayNextAlbum() { m_collection->playNextAlbum(); } + + void slotOpen() { m_collection->open(); } + void slotAddFolder() { m_collection->addFolder(); } + void slotRename() { m_collection->rename(); } + void slotDuplicate() { m_collection->duplicate(); } + void slotSave() { m_collection->save(); } + void slotSaveAs() { m_collection->saveAs(); } + void slotReload() { m_collection->reload(); } + void slotRemove() { m_collection->remove(); } + void slotEditSearch() { m_collection->editSearch(); } + + void slotRemoveItems() { m_collection->removeItems(); } + void slotRefreshItems() { m_collection->refreshItems(); } + void slotRenameItems() { m_collection->renameItems(); } + void slotScanFolders() { m_collection->scanFolders(); } + + void slotViewCovers() { m_collection->viewCovers(); } + void slotRemoveCovers() { m_collection->removeCovers(); } + void slotAddLocalCover() { m_collection->addCovers(true); } + void slotAddInternetCover() { m_collection->addCovers(false); } + + void slotCreatePlaylist() { m_collection->createPlaylist(); } + void slotCreateSearchPlaylist() { m_collection->createSearchPlaylist(); } + void slotCreateFolderPlaylist() { m_collection->createFolderPlaylist(); } + + void slotGuessTagFromFile() { m_collection->guessTagFromFile(); } + void slotGuessTagFromInternet() { m_collection->guessTagFromInternet(); } + + void slotSetSearchEnabled(bool enable) { m_collection->setSearchEnabled(enable); } + void slotSetHistoryPlaylistEnabled(bool enable) { m_collection->setHistoryPlaylistEnabled(enable); } + void slotSetUpcomingPlaylistEnabled(bool enable) { m_collection->setUpcomingPlaylistEnabled(enable); } + void slotShowCoverManager() { m_collection->showCoverManager(); } + void slotEnableDirWatch(bool enable) { m_collection->enableDirWatch(enable); } + void slotDirChanged(const QString &path) { m_collection->dirChanged(path); } + + void slotNewItems(const KFileItemList &list) { m_collection->newItems(list); } + +signals: + void signalSelectedItemsChanged(); + void signalCountChanged(); + +private: + PlaylistCollection *m_collection; +}; + +#endif |