1 /******************************************************************************* 2 * Goggles Music Manager * 3 ******************************************************************************** 4 * Copyright (C) 2007-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 GMDATABASESOURCE_H 20 #define GMDATABASESOURCE_H 21 22 #ifndef GMCLIPBOARD_H 23 #include "GMClipboard.h" 24 #endif 25 26 class GMSource; 27 class GMTrackDatabase; 28 29 class GMDatabaseClipboardData : public GMClipboardData { 30 public: 31 GMTrackDatabase * db; 32 FXIntList tracks; 33 public: 34 FXbool request(FXDragType target,GMClipboard * clipboard); 35 ~GMDatabaseClipboardData()36 ~GMDatabaseClipboardData() { 37 db=nullptr; 38 } 39 }; 40 41 42 43 44 class GMDatabaseSource : public GMSource { 45 FXDECLARE(GMDatabaseSource) 46 protected: 47 static GMDatabaseSource * filterowner; 48 static GMCoverCache * covercache; 49 protected: 50 GMTrackDatabase * db = nullptr; 51 FXint playlist = 0; 52 FXString filter; 53 FXuint filtermask = FILTER_DEFAULT; 54 FXbool hasfilter = false; 55 FXbool hasview = false; 56 FXString dndfiles; 57 protected: GMDatabaseSource()58 GMDatabaseSource(){} 59 private: 60 GMDatabaseSource(const GMDatabaseSource&); 61 GMDatabaseSource& operator=(const GMDatabaseSource&); 62 protected: 63 void removeFiles(const FXStringList & files); hasFilter()64 FXbool hasFilter() const { return hasfilter; } 65 public: 66 enum { 67 ID_NEW_PLAYLIST = GMSource::ID_LAST, 68 ID_IMPORT_PLAYLIST, 69 ID_IMPORT_FILES, 70 ID_CLEAR, 71 ID_COLUMN_TRACK, 72 ID_COLUMN_QUEUE, 73 ID_COLUMN_ARTIST, 74 ID_COLUMN_ALBUM, 75 ID_COLUMN_GENRE, 76 ID_COLUMN_TIME, 77 ID_LOAD_ALBUM_ICONS, 78 ID_OPEN_FOLDER, 79 ID_EDIT_RATING, 80 ID_ADD_COVER, 81 ID_SEARCH_COVER, 82 ID_SEARCH_COVER_ALBUM, 83 ID_LOAD_COVERS, 84 ID_NEW_FILTER, 85 ID_LAST 86 }; 87 public: 88 long onCmdEditTrack(FXObject*,FXSelector,void*); 89 long onCmdDelete(FXObject*,FXSelector,void*); 90 long onCmdCopyArtistAlbum(FXObject*,FXSelector,void*); 91 long onCmdCopyTrack(FXObject*,FXSelector,void*); 92 long onCmdRequestArtistAlbum(FXObject*,FXSelector,void*); 93 long onCmdRequestTrack(FXObject*,FXSelector,void*); 94 long onCmdExport(FXObject*,FXSelector,void*); 95 long onUpdExport(FXObject*,FXSelector,void*); 96 long onCmdDrop(FXObject*,FXSelector,void*); 97 long onCmdPaste(FXObject*,FXSelector,void*); 98 long onUpdPaste(FXObject*,FXSelector,void*); 99 long onCmdNewPlayList(FXObject*,FXSelector,void*); 100 long onCmdImportPlayList(FXObject*,FXSelector,void*); 101 long onCmdClear(FXObject*,FXSelector,void*); 102 long onCmdTrackPlayed(FXObject*,FXSelector,void*); 103 long onCmdShowColumn(FXObject*,FXSelector,void*); 104 long onUpdShowColumn(FXObject*,FXSelector,void*); 105 long onQueryTip(FXObject*,FXSelector,void*); 106 long onCmdOpenFolder(FXObject*,FXSelector,void*); 107 long onCmdEditRating(FXObject*,FXSelector,void*); 108 long onDndImportFiles(FXObject*,FXSelector,void*); 109 long onCmdAddCover(FXObject*,FXSelector,void*); 110 long onCmdSearchCover(FXObject*,FXSelector,void*); 111 long onCmdMainWindow(FXObject*,FXSelector,void*); 112 long onCmdLoadCovers(FXObject*,FXSelector,void*); 113 long onCmdNewFilter(FXObject*,FXSelector,void*); 114 public: 115 GMDatabaseSource(GMTrackDatabase * db); 116 117 void shutdown(); 118 119 120 virtual GMTrackListSortFunc getSortBrowse(FXbool album_list_mode=false) const override; 121 122 123 virtual void addTracks(GMSource * src,const FXIntList & tracks); 124 getCoverCache()125 GMCoverCache* getCoverCache() const override { return covercache; } 126 127 void loadCovers() override; 128 129 void updateCovers() override; 130 canFilter()131 FXbool canFilter() const override { return true; } 132 133 void shuffle(GMTrackList*,FXuint) const override; 134 135 void configure(GMColumnList&) override; 136 137 FXbool hasCurrentTrack(GMSource * ) const override; 138 139 FXbool hasTrack(const FXString & mrl,FXint & id) override; 140 141 FXbool findCurrent(GMTrackList * tracklist,GMSource * src) override; 142 143 FXbool findCurrentArtist(GMList * tracklist,GMSource * src) override; 144 145 FXbool findCurrentAlbum(GMAlbumList *,GMSource * src) override; 146 getName()147 FXString getName() const override { return fxtr("Music Library"); } 148 149 FXint getNumTracks() const override; 150 151 FXbool getTrack(GMTrack & info) const override; 152 getType()153 FXint getType() const override { return SOURCE_DATABASE; } 154 settingKey()155 FXString settingKey() const override { return "database"; } 156 157 FXbool setFilter(const FXString&,FXuint) override; 158 159 FXbool listTags(GMList * taglist,FXIcon * icon) override; 160 161 FXbool listArtists(GMList * artistlist,FXIcon * icon,const FXIntList & taglist) override; 162 163 FXbool listAlbums(GMAlbumList *,const FXIntList &,const FXIntList &) override; 164 165 FXbool listTracks(GMTrackList * tracklist,const FXIntList & albumlist,const FXIntList & taglist) override; 166 167 FXbool updateSelectedTracks(GMTrackList*) override; 168 169 FXbool genre_context_menu(FXMenuPane * pane) override; 170 171 FXbool artist_context_menu(FXMenuPane * pane) override; 172 173 FXbool album_context_menu(FXMenuPane * pane) override; 174 175 FXbool track_context_menu(FXMenuPane * pane) override; 176 177 FXbool source_context_menu(FXMenuPane * pane) override; 178 179 FXbool source_menu(FXMenuPane * pane) override; 180 181 FXbool dnd_accepts(FXDragType*,FXuint) override; 182 183 FXuint dnd_provides(FXDragType types[]) override; 184 185 virtual ~GMDatabaseSource(); 186 }; 187 188 189 extern void gm_import_files(const FXStringList & files,FXint playlist,FXuint whence); 190 191 #endif 192