diff options
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 3 | ||||
-rw-r--r-- | menu.c | 7 | ||||
-rw-r--r-- | menu.h | 12 |
4 files changed, 19 insertions, 5 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 96b94eb0..359ee572 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2868,6 +2868,8 @@ Lars Hanisch <dvb@flensrocker.de> for reporting a possible crash if the recordings list is updated externally while the Recordings menu is open for reporting a missing closing ')' in the help entry of the --vfat option + for making the Recordings menu able to be called with a cRecordingFilter, which allows + the caller to have it display only a certain subset of the recordings Alex Lasnier <alex@fepg.org> for adding tuning support for ATSC devices @@ -8072,3 +8072,6 @@ Video Disk Recorder Revision History - Fixed setting the name of the video directory to avoid a crash when using --genindex, and also to use the correct directory with --edit (the latter reported by Marko Mäkelä). +- The Recordings menu can now be called with a cRecordingFilter, which allows the + caller to have it display only a certain subset of the recordings (thanks to Lars + Hanisch). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 3.13 2013/11/03 14:08:35 kls Exp $ + * $Id: menu.c 3.14 2013/12/25 12:03:32 kls Exp $ */ #include "menu.h" @@ -2571,12 +2571,13 @@ void cMenuRecordingItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, b cString cMenuRecordings::path; cString cMenuRecordings::fileName; -cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus) +cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus, const cRecordingFilter *Filter) :cOsdMenu(Base ? Base : tr("Recordings"), 9, 6, 6) { SetMenuCategory(mcRecording); base = Base ? strdup(Base) : NULL; level = Setup.RecordingDirs ? Level : -1; + filter = Filter; Recordings.StateChanged(recordingsState); // just to get the current state helpKeys = -1; Display(); // this keeps the higher level menus from showing up briefly when pressing 'Back' during replay @@ -2633,7 +2634,7 @@ void cMenuRecordings::Set(bool Refresh) GetRecordingsSortMode(DirectoryName()); Recordings.Sort(); for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) { - if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR)) { + if ((!filter || filter->Filter(recording)) && (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR))) { cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level); cMenuRecordingItem *LastDir = NULL; if (Item->IsDirectory()) { @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 3.4 2013/10/30 14:32:13 kls Exp $ + * $Id: menu.h 3.5 2013/12/25 12:06:03 kls Exp $ */ #ifndef __MENU_H @@ -191,6 +191,13 @@ public: cOsdObject *CamControl(void); bool CamMenuActive(void); +class cRecordingFilter { +public: + virtual ~cRecordingFilter(void) {}; + virtual bool Filter(const cRecording *Recording) const = 0; + ///< Returns true if the given Recording shall be displayed in the Recordings menu. + }; + class cMenuRecordingItem; class cMenuRecordings : public cOsdMenu { @@ -199,6 +206,7 @@ private: int level; int recordingsState; int helpKeys; + const cRecordingFilter *filter; static cString path; static cString fileName; void SetHelpKeys(void); @@ -213,7 +221,7 @@ private: protected: cString DirectoryName(void); public: - cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false); + cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false, const cRecordingFilter *Filter = NULL); ~cMenuRecordings(); virtual eOSState ProcessKey(eKeys Key); static void SetPath(const char *Path); |