summaryrefslogtreecommitdiff
path: root/mymenusetup.c
diff options
context:
space:
mode:
authorAndreas Mair <amair.sob@googlemail.com>2011-03-19 11:35:37 +0100
committerAndreas Mair <amair.sob@googlemail.com>2011-03-19 11:35:37 +0100
commit25987e83a85d0f86300da97a6d41f2ba6fc0ea36 (patch)
tree6234f13b42340dd09f756f462acceda76888dcef /mymenusetup.c
parent64fbf013359f29c4e611e04daf136dca8cc29317 (diff)
downloadvdr-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.c299
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;
+}