diff options
author | Martin Prochnow <nordlicht@martins-kabuff.de> | 2006-03-13 13:43:16 +0100 |
---|---|---|
committer | Andreas Mair <andreas@vdr-developer.org> | 2006-03-13 13:43:16 +0100 |
commit | 69ab28fe3563ca25153a7bc5bfab003f6c23d9aa (patch) | |
tree | 7c0194a56f46a7bd06fd56437daffd1bff647dbe /mymenurecordings.c | |
parent | 17f89bafd559b28b5a175aa82730226dfe9f7d69 (diff) | |
download | vdr-plugin-extrecmenu-69ab28fe3563ca25153a7bc5bfab003f6c23d9aa.tar.gz vdr-plugin-extrecmenu-69ab28fe3563ca25153a7bc5bfab003f6c23d9aa.tar.bz2 |
Version 0.4v0.4
- add option to hide main menu entry
- set tabs depending on the shown recordings details - looks more fancy and there is more space for the recording names
- fixed a possible memory leak
Diffstat (limited to 'mymenurecordings.c')
-rw-r--r-- | mymenurecordings.c | 107 |
1 files changed, 78 insertions, 29 deletions
diff --git a/mymenurecordings.c b/mymenurecordings.c index b29242e..573d1c9 100644 --- a/mymenurecordings.c +++ b/mymenurecordings.c @@ -1,3 +1,4 @@ +#include <vdr/interface.h> #include "mymenurecordings.h" #include "mymenusetup.h" @@ -108,8 +109,20 @@ void myMenuRecordingsItem::IncrementCounter(bool IsNew) } // --- myMenuRecordings ------------------------------------------------------- -myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu(Base?Base:tr(DESCRIPTION),8,6,4) +myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu(Base?Base:tr("Extended recordings menu")) { + // set tabs + if(mysetup.ShowRecDate&&mysetup.ShowRecTime&&mysetup.ShowRecLength) // all details are shown + SetCols(8,6,4); + else + if(mysetup.ShowRecDate&&!mysetup.ShowRecTime&&mysetup.ShowRecLength) // recording time is not shown + SetCols(8,4); + else + if(!mysetup.ShowRecDate&&mysetup.ShowRecTime&&mysetup.ShowRecLength) // recording date is not shown + SetCols(6,4); + else // recording date and time are not shown; even if recording length should be not shown we must set two tabs because the details of the directories + SetCols(4,4); + edit=false; level=Level; helpkeys=-1; @@ -117,7 +130,15 @@ myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu(Base?Bas Recordings.StateChanged(recordingsstate); + Display(); Set(); + /* + if(Current()<0) + SetCurrent(First()); + else + if(myReplayControl::LastReplayed&&Open()) + return; + */ Display(); SetHelpKeys(); } @@ -127,14 +148,46 @@ myMenuRecordings::~myMenuRecordings() free(base); } +void myMenuRecordings::SetHelpKeys() +{ + if(!HasSubMenu()) + { + myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current()); + int newhelpkeys=0; + if(item) + { + if(item->IsDirectory()) + newhelpkeys=1; + else + { + newhelpkeys=2; + } + if(newhelpkeys!=helpkeys) + { + switch(newhelpkeys) + { + case 0: SetHelp(NULL);break; + case 1: SetHelp(tr("Button$Open"));break; + case 2: + case 3: SetHelp(tr("Button$Play"),tr("Button$Rewind"),tr("Button$Edit"),tr("Button$Info"));break; + } + } + helpkeys=newhelpkeys; + } + } +} + void myMenuRecordings::Set(bool Refresh) { +// const char *currentrecording=myReplayControl::LastReplayed(); + cThreadLock RecordingsLock(&Recordings); Clear(); Recordings.Sort(); char *lastitemtext=NULL; myMenuRecordingsItem *lastitem=NULL; + bool inlist=false; // add first the directories for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording)) { @@ -144,7 +197,10 @@ void myMenuRecordings::Set(bool Refresh) if(*item->Text()&&(!lastitem||strcmp(item->Text(),lastitemtext))) { if(item->IsDirectory()) + { Add(item); + inlist=true; + } lastitem=item; free(lastitemtext); @@ -157,9 +213,17 @@ void myMenuRecordings::Set(bool Refresh) { if(lastitem->IsDirectory()) lastitem->IncrementCounter(recording->IsNew()); // counts the number of entries in a directory + // delete items that are not in the list + if(!inlist) + { + delete lastitem; + lastitem=NULL; + inlist=false; + } } } } + inlist=false; lastitem=NULL; // and now the recordings for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording)) @@ -170,47 +234,32 @@ void myMenuRecordings::Set(bool Refresh) if(*item->Text()&&(!lastitem||strcmp(lastitemtext,item->Text()))) { if(!item->IsDirectory()) + { Add(item); + inlist=true; + } lastitem=item; free(lastitemtext); lastitemtext=strdup(lastitem->Text()); } else delete item; - } - } - free(lastitemtext); - if(Refresh) - Display(); -} - -void myMenuRecordings::SetHelpKeys() -{ - if(!HasSubMenu()) - { - myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current()); - int newhelpkeys=0; - if(item) - { - if(item->IsDirectory()) - newhelpkeys=1; - else - { - newhelpkeys=2; - } - if(newhelpkeys!=helpkeys) + + if(lastitem) { - switch(newhelpkeys) + // delete items that are not in the list + if(!inlist) { - case 0: SetHelp(NULL);break; - case 1: SetHelp(tr("Button$Open"));break; - case 2: - case 3: SetHelp(tr("Button$Play"),tr("Button$Rewind"),tr("Button$Edit"),tr("Button$Info"));break; + delete lastitem; + lastitem=NULL; + inlist=false; } } - helpkeys=newhelpkeys; } } + free(lastitemtext); + if(Refresh) + Display(); } // returns the corresponding recording to an item |