diff options
author | Andreas Mair <amair.sob@googlemail.com> | 2011-03-19 11:35:37 +0100 |
---|---|---|
committer | Andreas Mair <amair.sob@googlemail.com> | 2011-03-19 11:35:37 +0100 |
commit | 25987e83a85d0f86300da97a6d41f2ba6fc0ea36 (patch) | |
tree | 6234f13b42340dd09f756f462acceda76888dcef /mymenusetup.c | |
parent | 64fbf013359f29c4e611e04daf136dca8cc29317 (diff) | |
download | vdr-plugin-extrecmenu-25987e83a85d0f86300da97a6d41f2ba6fc0ea36.tar.gz vdr-plugin-extrecmenu-25987e83a85d0f86300da97a6d41f2ba6fc0ea36.tar.bz2 |
Merged from v1.3-devel branch: added ability to configure items that should be shown in recording list.
Diffstat (limited to 'mymenusetup.c')
-rw-r--r-- | mymenusetup.c | 299 |
1 files changed, 281 insertions, 18 deletions
diff --git a/mymenusetup.c b/mymenusetup.c index 9028996..9ff2cd8 100644 --- a/mymenusetup.c +++ b/mymenusetup.c @@ -2,9 +2,28 @@ * See the README file for copyright information and how to reach the author. */ +#include <stdarg.h> #include <vdr/menu.h> #include "mymenusetup.h" +typedef struct { + int Width; + int Align; +} RecListDefaultType; + +RecListDefaultType recListDefaultValues[MAX_COLTYPES] = { + { 0,0}, + { 5,0}, + { 8,0}, + { 5,0}, + {14,0}, + { 4,2}, + { 7,0}, + { 5,0}, + { 5,0} +}; + + #if VDRVERSNUM > 10713 cNestedItemList RecordingDirCommands; #else @@ -16,12 +35,44 @@ mySetup::mySetup() mysetup.HideMainMenuEntry=0; mysetup.PatchNew=1; mysetup.ReplaceOrgRecMenu=0; - mysetup.ShowRecDate=1; - mysetup.ShowRecTime=1; - mysetup.ShowRecLength=0; - mysetup.ShowRecRating=0; + + mysetup.RecListColumn[0].Type = COLTYPE_DATETIME; + STRN0CPY(mysetup.RecListColumn[0].Name, ""); + mysetup.RecListColumn[0].Width = 14; // DD.MM.YY HH:MM + mysetup.RecListColumn[0].Align = 0; + STRN0CPY(mysetup.RecListColumn[0].Op1, ""); + STRN0CPY(mysetup.RecListColumn[0].Op2, ""); + + mysetup.RecListColumn[1].Type = COLTYPE_LENGTH; + STRN0CPY(mysetup.RecListColumn[1].Name, ""); + mysetup.RecListColumn[1].Width = 4; // use 3 digits + '. eg: 123' + mysetup.RecListColumn[1].Align = 2; + STRN0CPY(mysetup.RecListColumn[1].Op1, ""); + STRN0CPY(mysetup.RecListColumn[1].Op2, ""); + + mysetup.RecListColumn[2].Type = COLTYPE_RATING; + STRN0CPY(mysetup.RecListColumn[2].Name, ""); + mysetup.RecListColumn[2].Width = 7; // use 7 instead of 5, because Star (1825) is wider than FixedBlank (1300) => 5*1825 / 1300 = 7.01 + mysetup.RecListColumn[2].Align = 0; + STRN0CPY(mysetup.RecListColumn[2].Op1, ""); + STRN0CPY(mysetup.RecListColumn[2].Op2, ""); + + mysetup.RecListColumn[3].Type = COLTYPE_FILETHENCOMMAND; + STRN0CPY(mysetup.RecListColumn[3].Name, "Country"); + mysetup.RecListColumn[3].Width = 5; + mysetup.RecListColumn[3].Align = 0; + STRN0CPY(mysetup.RecListColumn[3].Op1, "country.vdr"); + STRN0CPY(mysetup.RecListColumn[3].Op2, "/usr/local/bin/vdr-getcountryfrominfo.sh"); + +// mysetup.RecListColumn[4].Type = COLTYPE_FILETHENCOMMAND; +// STRN0CPY(mysetup.RecListColumn[4].Name, "Year"); +// mysetup.RecListColumn[4].Width = 4; +// mysetup.RecListColumn[4].Align = 0; +// STRN0CPY(mysetup.RecListColumn[4].Op1, "year.vdr"); +// STRN0CPY(mysetup.RecListColumn[4].Op2, "/usr/local/bin/vdr-getyearfrominfo.sh"); + mysetup.ShowNewRecs=1; - mysetup.ShowOnlyRecs=false; + mysetup.RecsPerDir=2; mysetup.DescendSorting=0; mysetup.GoLastReplayed=0; mysetup.ReturnToPlugin=1; @@ -34,18 +85,25 @@ mySetup::mySetup() mySetup mysetup; +/******************** myMenuSetup ********************/ myMenuSetup::myMenuSetup() { - SetCols(36); + SetCols(45); hidemainmenuentry=mysetup.HideMainMenuEntry; patchnew=mysetup.PatchNew; replaceorgrecmenu=mysetup.ReplaceOrgRecMenu; - showrecdate=mysetup.ShowRecDate; - showrectime=mysetup.ShowRecTime; - showreclength=mysetup.ShowRecLength; - showrecrating=mysetup.ShowRecRating; + + for(int i=0; i<MAX_RECLIST_COLUMNS; i++) { + reclistcolumn[i].Type = mysetup.RecListColumn[i].Type; + STRN0CPY(reclistcolumn[i].Name, mysetup.RecListColumn[i].Name); + reclistcolumn[i].Width = mysetup.RecListColumn[i].Width; + reclistcolumn[i].Align = mysetup.RecListColumn[i].Align; + STRN0CPY(reclistcolumn[i].Op1 , mysetup.RecListColumn[i].Op1); + STRN0CPY(reclistcolumn[i].Op2 , mysetup.RecListColumn[i].Op2); + } shownewrecs=mysetup.ShowNewRecs; + recsperdir=mysetup.RecsPerDir; descendsorting=mysetup.DescendSorting; golastreplayed=mysetup.GoLastReplayed; returntoplugin=mysetup.ReturnToPlugin; @@ -58,11 +116,9 @@ myMenuSetup::myMenuSetup() sortingtypetexts[0]=tr("ascending"); sortingtypetexts[1]=tr("descending"); - Add(new cMenuEditBoolItem(tr("Show recording date"),&showrecdate)); - Add(new cMenuEditBoolItem(tr("Show recording time"),&showrectime)); - Add(new cMenuEditBoolItem(tr("Show recording length"),&showreclength)); - Add(new cMenuEditBoolItem(tr("Show recording rating"),&showrecrating)); Add(new cMenuEditBoolItem(tr("Show nr. of new recordings of a directory"),&shownewrecs)); + Add(new cMenuEditStraItem(tr("Maximum number of recordings per directory"), &recsperdir, 5, RecsPerDir_texts)); + Add(SubMenuItem(tr("Items to show in recording list"), osUser1)); Add(new cMenuEditBoolItem(tr("Show alternative to new marker"),&patchnew)); Add(new cMenuEditBoolItem(tr("Show free disk space for each file system"),&filesystemfreemb)); Add(new cMenuEditStraItem(tr("Sorting"),&descendsorting,2,sortingtypetexts)); @@ -82,11 +138,31 @@ void myMenuSetup::Store() SetupStore("HideMainMenuEntry",mysetup.HideMainMenuEntry=hidemainmenuentry); SetupStore("PatchNew",mysetup.PatchNew=patchnew); SetupStore("ReplaceOrgRecMenu",mysetup.ReplaceOrgRecMenu=replaceorgrecmenu); - SetupStore("ShowRecDate",mysetup.ShowRecDate=showrecdate); - SetupStore("ShowRecTime",mysetup.ShowRecTime=showrectime); - SetupStore("ShowRecLength",mysetup.ShowRecLength=showreclength); - SetupStore("ShowRecRating",mysetup.ShowRecRating=showrecrating); + + char varname[16]; + char* tmp=NULL; + for(int i=0; i<MAX_RECLIST_COLUMNS; i++) { + if(asprintf(&tmp,"type=%d,name=%s,width=%d,align=%d,op1=%s,op2=%s", + reclistcolumn[i].Type, + reclistcolumn[i].Name && (reclistcolumn[i].Type==COLTYPE_FILE || reclistcolumn[i].Type==COLTYPE_FILETHENCOMMAND) ? reclistcolumn[i].Name : "", + reclistcolumn[i].Width, + reclistcolumn[i].Align, + reclistcolumn[i].Op1 && (reclistcolumn[i].Type==COLTYPE_FILE || reclistcolumn[i].Type==COLTYPE_FILETHENCOMMAND) ? reclistcolumn[i].Op1 : "", + reclistcolumn[i].Op2 && reclistcolumn[i].Type==COLTYPE_FILETHENCOMMAND ? reclistcolumn[i].Op2 : "") != -1) { + mysetup.RecListColumn[i].Type = reclistcolumn[i].Type; + STRN0CPY(mysetup.RecListColumn[i].Name, reclistcolumn[i].Name); + mysetup.RecListColumn[i].Width = reclistcolumn[i].Width; + mysetup.RecListColumn[i].Align = reclistcolumn[i].Align; + STRN0CPY(mysetup.RecListColumn[i].Op1, reclistcolumn[i].Op1); + STRN0CPY(mysetup.RecListColumn[i].Op2, reclistcolumn[i].Op2); + + snprintf(varname, 16, "RecListColumn.%d", i); + SetupStore(varname, tmp); + free(tmp); + } + } SetupStore("ShowNewRecs",mysetup.ShowNewRecs=shownewrecs); + SetupStore("RecsPerDir",mysetup.RecsPerDir=recsperdir); SetupStore("DescendSorting",mysetup.DescendSorting=descendsorting); SetupStore("GoLastReplayed",mysetup.GoLastReplayed=golastreplayed); SetupStore("ReturnToPlugin",mysetup.ReturnToPlugin=returntoplugin); @@ -97,3 +173,190 @@ void myMenuSetup::Store() SetupStore("UseCutterQueue",mysetup.UseCutterQueue=usecutterqueue); } +eOSState myMenuSetup::ProcessKey(eKeys Key) { + eOSState state = cMenuSetupPage::ProcessKey(Key); + + switch (state) { + case osUser1: + return AddSubMenu(new myMenuSetupColumns(&reclistcolumn[0])); + default: ; + } + return state; +} + + +/******************** myMenuSetupColumns ********************/ +myMenuSetupColumns::myMenuSetupColumns(RecListColumnType *prlcs) : cOsdMenu(tr("Items to show in recording list"), 4) { + preclistcolumns = prlcs; + + ColumnType_descriptions[0] = tr("--none--"); + ColumnType_descriptions[1] = tr("Blank"); + ColumnType_descriptions[2] = tr("Date of Recording"); + ColumnType_descriptions[3] = tr("Time of Recording"); + ColumnType_descriptions[4] = tr("Date and Time of Recording"); + ColumnType_descriptions[5] = tr("Length of Recording"); + ColumnType_descriptions[6] = tr("Rating of Recording"); + ColumnType_descriptions[7] = tr("Content of File"); + ColumnType_descriptions[8] = tr("Content of File, then Result of a Command"); + + AlignmentType_names[0] = tr("left"); + AlignmentType_names[1] = tr("center"); + AlignmentType_names[2] = tr("right"); + + Set(); +} + +void myMenuSetupColumns::Set() { + SetCols(30); + + // build up menu entries +// SetHelp(tr("Edit"), NULL, NULL, NULL); //SetHelp(tr("Edit"), NULL, tr("Move Up"), tr("Move down")); + + // save current postion + int current = Current(); + // clear entries, if any + Clear(); + + + cOsdItem *sItem; + char *itemStr; + int ret; + + ret = asprintf(&itemStr, "%s\t%s", tr("Icon"), tr("(fixed to the first position)")); + if (ret <= 0) { + esyslog("Error allocating linebuffer for cOsdItem."); + return; + } + sItem = new cOsdItem(itemStr); + sItem->SetSelectable(false); + Add(sItem); + + + // build up setup menu + for(int i=0; i<MAX_RECLIST_COLUMNS; i++) { + + ret = asprintf(&itemStr, "%s %i", tr("Item"),i+1); + if (ret <= 0) { + esyslog("Error allocating linebuffer for cOsdItem."); + return; + } + + Add(new cMenuEditStraItem(itemStr, &(preclistcolumns[i].Type), MAX_COLTYPES, ColumnType_descriptions)); + + switch (preclistcolumns[i].Type) { + case COLTYPE_NONE: + break; + + case COLTYPE_BLANK: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 0, 24)); + break; + + case COLTYPE_DATE: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 8, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + break; + + case COLTYPE_TIME: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 5, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + break; + + case COLTYPE_DATETIME: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 14, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + break; + + case COLTYPE_LENGTH: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 3, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + break; + + case COLTYPE_RATING: + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 5, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + break; + + case COLTYPE_FILE: + Add(new cMenuEditStrItem(IndentMenuItem(tr("Name")), (preclistcolumns[i].Name), 64, tr(FileNameChars))); + + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 1, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + Add(new cMenuEditStrItem(IndentMenuItem(tr("Filename")), (preclistcolumns[i].Op1), 64, tr(FileNameChars))); + break; + + case COLTYPE_FILETHENCOMMAND: + Add(new cMenuEditStrItem(IndentMenuItem(tr("Name")), (preclistcolumns[i].Name), 64, tr(FileNameChars))); + + Add(new cMenuEditIntItem(IndentMenuItem(tr("Width")), &(preclistcolumns[i].Width), 1, 24)); + Add(new cMenuEditStraItem(IndentMenuItem(tr("Alignment")), &(preclistcolumns[i].Align), 3, AlignmentType_names)); + Add(new cMenuEditStrItem(IndentMenuItem(tr("Filename")), (preclistcolumns[i].Op1), 1024, tr(FileNameChars))); + Add(new cMenuEditStrItem(IndentMenuItem(tr("Command")), (preclistcolumns[i].Op2), 1024, tr(FileNameChars))); + break; + } + } + + ret = asprintf(&itemStr, "%s\t%s", tr("Name of the recording"), tr("(fixed to the last position)")); + if (ret <= 0) { + esyslog("Error allocating linebuffer for cOsdItem."); + return; + } + sItem = new cOsdItem(itemStr); + sItem->SetSelectable(false); + Add(sItem); + + // restore current position + SetCurrent(Get(current)); +} + +eOSState myMenuSetupColumns::ProcessKey(eKeys Key) { + int iTemp_type [4], i; + for (i=0; i<MAX_RECLIST_COLUMNS; i++) { + iTemp_type[i] = preclistcolumns[i].Type; + } + + eOSState state = cOsdMenu::ProcessKey(Key); + + int iChanged = -1; + for (i=0; i<MAX_RECLIST_COLUMNS && iChanged==-1; i++) { + if (iTemp_type[i] != preclistcolumns[i].Type) { + iChanged = i; + } + } + + if (iChanged >= 0) { + preclistcolumns[iChanged].Width = recListDefaultValues[preclistcolumns[iChanged].Type].Width; + preclistcolumns[iChanged].Align = recListDefaultValues[preclistcolumns[iChanged].Type].Align; + Set(); + Display(); + } + + if (state == osUnknown) { + if (HasSubMenu()) + return osContinue; +/* + switch (Key) { + case kOk: + return osBack; + + default: + break; + } +*/ + } + + return state; +} + +int msprintf(char **strp, const char *fmt, ...) { + va_list ap; + va_start (ap, fmt); + int res=vasprintf (strp, fmt, ap); + va_end (ap); + return res; +} + +char* IndentMenuItem(const char* szString, int indentions) { + char* szIndented = NULL; + msprintf(&szIndented, "%*s", strlen(szString)+indentions*2, szString); + return szIndented; +} |