1 /******************************************************************************* 2 * Goggles Music Manager * 3 ******************************************************************************** 4 * Copyright (C) 2006-2021 by Sander Jansen. All Rights Reserved * 5 * --- * 6 * This program is free software: you can redistribute it and/or modify * 7 * it under the terms of the GNU General Public License as published by * 8 * the Free Software Foundation, either version 3 of the License, or * 9 * (at your option) any later version. * 10 * * 11 * This program is distributed in the hope that it will be useful, * 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 14 * GNU General Public License for more details. * 15 * * 16 * You should have received a copy of the GNU General Public License * 17 * along with this program. If not, see http://www.gnu.org/licenses. * 18 ********************************************************************************/ 19 #ifndef GMSOURCE_H 20 #define GMSOURCE_H 21 22 #ifndef GMTRACKLIST_H 23 #include "GMTrackList.h" 24 #endif 25 26 class GMList; 27 class GMAlbumList; 28 class GMCoverCache; 29 30 /* 31 enum { 32 FLAG_CAN_AUTOPLAY =0x1, 33 FLAG_CAN_FILTER =0x2, 34 FLAG_CAN_BROWSE =0x4, 35 FLAG_DEFAULT_BROWSE=0x8 36 }; 37 */ 38 39 enum { 40 FILTER_TRACK = 0x1, 41 FILTER_ARTIST = 0x2, 42 FILTER_ALBUM = 0x4, 43 FILTER_TAG = 0x8, 44 FILTER_ALL = (FILTER_TRACK|FILTER_ARTIST|FILTER_ALBUM|FILTER_TAG), 45 FILTER_DEFAULT = (FILTER_TRACK|FILTER_ARTIST|FILTER_ALBUM) 46 }; 47 48 enum { 49 SOURCE_UNKNOWN = -1, 50 SOURCE_INVALID = -1, 51 SOURCE_PLAYQUEUE, 52 SOURCE_DATABASE, 53 SOURCE_DATABASE_FILTER, 54 SOURCE_DATABASE_PLAYLIST, 55 SOURCE_FILESYSTEM, 56 SOURCE_INTERNET_RADIO, 57 SOURCE_PODCAST, 58 SOURCE_ALBUM, 59 SOURCE_ARTIST, 60 SOURCE_AUDIOCD 61 }; 62 63 enum { 64 HEADER_DEFAULT=0, 65 HEADER_SHUFFLE=1, 66 HEADER_BROWSE, 67 HEADER_QUEUE, 68 HEADER_TRACK, 69 HEADER_TITLE, 70 HEADER_ALBUM, 71 HEADER_ARTIST, 72 HEADER_TIME, 73 HEADER_TAG, /// WAS HEADER_GENRE 74 HEADER_BITRATE, 75 HEADER_RATING, 76 HEADER_YEAR, 77 HEADER_DISC, 78 HEADER_ALBUM_ARTIST, 79 HEADER_PLAYCOUNT, 80 HEADER_PLAYDATE, 81 HEADER_FILENAME, 82 HEADER_FILETYPE, 83 HEADER_COMPOSER, 84 HEADER_CONDUCTOR, 85 HEADER_DATE, 86 HEADER_STATUS, 87 HEADER_AUDIOFORMAT, 88 HEADER_NONE 89 }; 90 91 92 /// Sort Function 93 class GMTrackItem; 94 typedef FXint (*GMTrackListSortFunc)(const GMTrackItem*,const GMTrackItem*); 95 96 97 98 99 100 class GMSource : public FXObject { 101 FXDECLARE(GMSource) 102 protected: 103 FXint current_track = -1; 104 private: 105 GMSource(const GMSource&); 106 GMSource& operator=(const GMSource&); 107 public: 108 enum { 109 ID_TRACK_PLAYED = 1, 110 ID_EDIT_GENRE, 111 ID_EDIT_ARTIST, 112 ID_EDIT_ALBUM, 113 ID_EDIT_TRACK, 114 ID_COPY_ARTIST, 115 ID_COPY_ALBUM, 116 ID_COPY_TRACK, 117 ID_DELETE_TAG, 118 ID_DELETE_ARTIST, 119 ID_DELETE_ALBUM, 120 ID_DELETE_TRACK, 121 ID_DELETE_TAG_ADV, 122 ID_DELETE_ARTIST_ADV, 123 ID_DELETE_ALBUM_ADV, 124 ID_DELETE_TRACK_ADV, 125 ID_PASTE, 126 ID_DROP, 127 ID_EXPORT, 128 ID_TIP_TEXT, 129 ID_LAST 130 }; 131 public: 132 GMSource(); 133 134 /// Configure the columns in the tracklist configure(GMColumnList &)135 virtual void configure(GMColumnList&) {} 136 shuffle(GMTrackList *,FXuint)137 virtual void shuffle(GMTrackList*,FXuint) const{} 138 getSortBrowse(FXbool)139 virtual GMTrackListSortFunc getSortBrowse(FXbool /*album_list_mode=false*/) const { return nullptr; } 140 getSortColumn(FXbool browse)141 virtual FXint getSortColumn(FXbool browse) const { if (browse) return HEADER_BROWSE; else return HEADER_ARTIST; } 142 setCurrentTrack(FXint t)143 void setCurrentTrack(FXint t) { current_track=t; } 144 getCurrentTrack()145 FXint getCurrentTrack() const { return current_track; } 146 hasCurrentTrack(GMSource *)147 virtual FXbool hasCurrentTrack(GMSource * ) const { return false; } 148 hasTrack(const FXString &,FXint &)149 virtual FXbool hasTrack(const FXString &,FXint &) { return false; } 150 resetCurrent()151 virtual void resetCurrent() { current_track=-1; } 152 153 virtual void markCurrent(const GMTrackItem*); 154 155 virtual FXbool findCurrent(GMTrackList * tracklist,GMSource * src); 156 157 virtual FXbool findCurrentArtist(GMList * tracklist,GMSource * src); 158 159 virtual FXbool findCurrentAlbum(GMAlbumList *,GMSource * src); 160 161 virtual FXint getNumTracks() const; 162 163 virtual FXbool getTrack(GMTrack & info) const; 164 setTrack(GMTrack &)165 virtual FXbool setTrack(GMTrack &) const { return false; } 166 getType()167 virtual FXint getType() const { return SOURCE_INVALID; } 168 getQueueColumn(FXbool)169 virtual FXbool getQueueColumn(FXbool) const { return false; } 170 canBrowse()171 virtual FXbool canBrowse() const { return true; } 172 canFilter()173 virtual FXbool canFilter() const { return false; } 174 defaultBrowse()175 virtual FXbool defaultBrowse() const { return true; } 176 defaultTags()177 virtual FXbool defaultTags() const { return false; } 178 autoPlay()179 virtual FXbool autoPlay() const { return true; } 180 hasArtistList()181 virtual FXbool hasArtistList() const { return true; } 182 getName()183 virtual FXString getName() const { return FXString::null; } 184 getAlbumName()185 virtual const FXchar * getAlbumName() const { return fxtr("Albums"); } 186 187 virtual FXIcon* getAlbumIcon() const; 188 getCoverCache()189 virtual GMCoverCache * getCoverCache() const { return nullptr; } 190 loadCovers()191 virtual void loadCovers() {} 192 updateCovers()193 virtual void updateCovers() {} 194 195 /// Items have been dragged around. 196 virtual void dragged(GMTrackList*); 197 198 /// Sorting is about to be changed. sorted(GMTrackList *,FXint)199 virtual void sorted(GMTrackList*,FXint) {} 200 settingKey()201 virtual FXString settingKey() const { return "nokey"; } 202 203 // unhide to keep compiler happy over hiding virtual 204 using FXObject::load; 205 using FXObject::save; 206 load(FXSettings &)207 virtual void load(FXSettings&) {} 208 save(FXSettings &)209 virtual void save(FXSettings&) const {} 210 save(GMTrackList *)211 virtual void save(GMTrackList*) {} 212 setFilter(const FXString &,FXuint)213 virtual FXbool setFilter(const FXString&,FXuint) {return false;} 214 listGenres(GMList *,FXIcon *)215 virtual FXbool listGenres(GMList *,FXIcon *) { return false; } 216 listTags(GMList *,FXIcon *)217 virtual FXbool listTags(GMList *,FXIcon *) { return false; } 218 listArtists(GMList *,FXIcon *,const FXIntList &)219 virtual FXbool listArtists(GMList *,FXIcon *,const FXIntList &) { return false; } 220 listComposers(GMList *,FXIcon *,const FXIntList &)221 virtual FXbool listComposers(GMList *,FXIcon *,const FXIntList &) { return false; } 222 listAlbums(GMAlbumList *,const FXIntList &,const FXIntList &)223 virtual FXbool listAlbums(GMAlbumList *,const FXIntList &,const FXIntList &) { return false; } 224 listTracks(GMTrackList *,const FXIntList &,const FXIntList &)225 virtual FXbool listTracks(GMTrackList*,const FXIntList &,const FXIntList &) { return false; } 226 updateSelectedTracks(GMTrackList *)227 virtual FXbool updateSelectedTracks(GMTrackList*) { return false; } 228 genre_context_menu(FXMenuPane *)229 virtual FXbool genre_context_menu(FXMenuPane*) { return false; } 230 artist_context_menu(FXMenuPane *)231 virtual FXbool artist_context_menu(FXMenuPane*) { return false; } 232 album_context_menu(FXMenuPane *)233 virtual FXbool album_context_menu(FXMenuPane*) { return false; } 234 track_context_menu(FXMenuPane *)235 virtual FXbool track_context_menu(FXMenuPane*) { return false; } 236 source_context_menu(FXMenuPane *)237 virtual FXbool source_context_menu(FXMenuPane*) { return false; } 238 source_menu(FXMenuPane *)239 virtual FXbool source_menu(FXMenuPane*) { return false; } 240 dnd_accepts(FXDragType *,FXuint)241 virtual FXbool dnd_accepts(FXDragType*,FXuint) { return false; } 242 dnd_provides(FXDragType[])243 virtual FXuint dnd_provides(FXDragType []) {return 0;} 244 track_double_click()245 virtual FXbool track_double_click() { return false; } 246 247 virtual ~GMSource(); 248 }; 249 250 typedef FXObjectListOf<GMSource> GMSourceList; 251 252 253 254 #endif 255