ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/SIDPlayer/src/soundplay_includes/Playlist.h
Revision: 1.1
Committed: 2001-01-14T13:17:35Z (23 years, 3 months ago) by cebix
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
now also works as a SoundPlay plugin under BeOS

File Contents

# Content
1
2
3 #ifndef _PLAYLIST_H
4 #define _PLAYLIST_H
5
6 #include <List.h>
7 #include <Entry.h>
8 #include <SupportKit.h>
9 #include <Message.h>
10
11
12 // messages that you receive when watching a playlist
13 enum {
14 PLAYLIST_ADD = 'pl\0\1', // something was added to the playlist
15 PLAYLIST_REMOVE = 'pl\0\2', // something was removed from the playlist
16 PLAYLIST_EMPTY = 'pl\0\3', // playlist was emptied
17 PLAYLIST_DESTROYED = 'pl\0\4', // playlist no longer exists. Note that you can only
18 // receive this if a playlist goes away for which you
19 // registered as a listener, but didn't keep a PlaylistPtr
20 // for. Needless to say, this is a Bad Thing.
21 PLAYLIST_LOST_CONTROLS = 'pl\0\5', // playlist lost its set of controls
22 PLAYLIST_GAINED_CONTROLS = 'pl\0\6', // playlist gained a set of controls
23 PLAYLIST_CURRENT = 'pl\0\7', // the "current item" changed
24 PLAYLIST_SORTED = 'pl\1\0', // the playlist just got sorted. You'll want to rescan it now
25 PLAYLIST_ITEM_RENAMED = 'pl\1\1' // an item in the playlist got renamed
26 };
27
28
29 class _PlayListEntry;
30 class AudioFile;
31 struct file_info;
32
33
34 // Never EVER use this class directly!!!
35 // ALWAYS go through the PlaylistPtr class defined below.
36 class PrivatePlaylist
37 {
38 public:
39 status_t RestoreFromMessage(const BMessage *mes, int32 index=0);
40 void SaveToMessage(BMessage &mes) const;
41
42 void MakeEmpty();
43 int32 CountItems() const;
44 int32 Add(const entry_ref &ref, int32 index= -1);
45 int32 Add(const char *path, int32 index= -1);
46 status_t AddDir(const entry_ref &ref, int32 index=-1);
47 status_t AddDir(const char *path, int32 index=-1);
48 status_t InsertRefsFromMessage(BMessage *message, char *refname, int32 index);
49 status_t AddRefsFromMessage(BMessage *message, char *refname);
50 status_t SetName(int32 ID, const char *name);
51
52 int32 IDForItemAt(int32 index) const;
53 const char* PathForItem(int32 ID) const;
54 const char* NameForItem(int32 ID) const;
55 status_t Remove(int32 ID);
56
57 const char* CurrentPath() const;
58 const char* CurrentName() const;
59
60 status_t Shuffle();
61 status_t Sort();
62 status_t SortByPath();
63
64 int32 CurrentIndex() const;
65 int32 CurrentID() const;
66 status_t GetInfo(int32 id, file_info *info);
67
68 status_t AddListener(BHandler *handler);
69 status_t RemoveListener(BHandler *handler);
70
71 void Play(void);
72 void Pause(void);
73 float Pitch(void);
74 void SetPitch(float);
75 double Position(void);
76 void SetPosition(double);
77 float Volume(void);
78 void SetVolume(float);
79 void PlayFile(int32 ID);
80 void PlayNext();
81 void PlayPrevious(bool reverse=false);
82
83 bool Lock();
84 void Unlock();
85 bool IsLocked();
86
87 bool HasControls();
88 status_t AddControls();
89 bool IsValid();
90
91 private:
92 #ifdef PLAYLIST_SECRET_INNER_WORKINGS
93 PLAYLIST_SECRET_INNER_WORKINGS
94 #endif
95 PrivatePlaylist();
96 ~PrivatePlaylist();
97
98 void pInit();
99 void pAddDirToList(const entry_ref &ref, int32 index=-1);
100 void pAddPlayListToList(const entry_ref *ref, int32 index);
101 static const char* pNameForItem(_PlayListEntry *);
102 static const char* pPathForItem(_PlayListEntry *);
103 _PlayListEntry *pItemForID(int32 ID) const;
104 int32 pIndexForID(int32 ID) const;
105 status_t pAddPlaylistEntry(_PlayListEntry *pe, int32 index);
106 status_t pNotify(uint32 what, int32 who, int32 where);
107 status_t pDropNotification();
108 status_t pFlushNotification();
109 void pCheckLock() const;
110 void pSetControlSet(class audio*);
111 status_t SetCurrentIndex(int32 index);
112 static int pSortFunc(const void *item1,const void *item2);
113 static int pSortPathFunc(const void *item1,const void *item2);
114 static int pShuffleFunc(const void *item1,const void *item2);
115
116 sem_id locksem;
117 thread_id lockthread;
118 int32 lockcount;
119 bool isshuffled;
120 int32 numitems;
121 int32 currentindex;
122 BList entrylist;
123 BList listeners;
124 BMessage notification;
125 unsigned refcounter;
126 AudioFile *audiofile;
127 audio *controlset;
128 _PlayListEntry *cache;
129 };
130
131
132 // A PlaylistPtr acts as a pointer to a playlist. You dereference a
133 // PlaylistPtr using regular pointer semantics to access the playlist's functions.
134 // Note that as long as you have a PlaylistPtr for a playlist,
135 // that playlist will remain valid. Its associated controls might go
136 // away (i.e. the playlist gets removed from the controller/window),
137 // but you can still work with the files in the playlist, or add it
138 // to the controller again.
139 class PlaylistPtr
140 {
141 public:
142 PlaylistPtr(PrivatePlaylist* p=NULL);
143 PlaylistPtr(const PlaylistPtr& p);
144 PlaylistPtr(int32 ID);
145 ~PlaylistPtr();
146
147 PrivatePlaylist* operator-> () { return ppl; }
148 PrivatePlaylist& operator* () { return *ppl; }
149 PlaylistPtr& operator= (const PlaylistPtr& p);
150 bool operator==(const PlaylistPtr &p) const;
151 bool operator!=(const PlaylistPtr &p) const;
152
153 private:
154 PrivatePlaylist* ppl;
155 };
156
157 #endif