diff options
Diffstat (limited to 'menusetup.c')
-rw-r--r-- | menusetup.c | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/menusetup.c b/menusetup.c new file mode 100644 index 0000000..39eb387 --- /dev/null +++ b/menusetup.c @@ -0,0 +1,303 @@ +/* + * playlist: A plugin for the Video Disk Recorder + * + * See the README file for copyright information and how to reach the author. + * + * $Id: menusetup.c 0.2 2004/10/08 02:34:00 hflor Exp $ + */ + +#include "menusetup.h" +#include "playlist.h" +#include "menuplaylists.h" +#include "menucontrol.h" +#include "i18n.h" +#include "vdrtools.h" +#include <vdr/plugin.h> + +// --- cMenuSetupPlayList ------------------------------------------------------- + +cMenuSetupPlayList::cMenuSetupPlayList(void) +{ +#ifdef PL_Debug2 + dsyslog("%s: cMenuSetupPlayList::cMenuSetupPlayList", plugin_name); +#endif + store = false; + changedefault = false; + + #define StoreValue(T) T.o = T.u + #define StoreValueFile(T) strcpy(T.o, T.u) + + // var pos7 + StoreValue (charentry); + StoreValue (charfolder); + StoreValue (charrecord); + StoreValue (commandline_preference); + StoreValueFile (lastplaylist); + StoreValueFile (mainmenu_name); + StoreValue (mainmenu_visible); + StoreValue (confirmdelplentry); + StoreValue (okstartplay); + StoreValue (deleterecords); + StoreValueFile (pathplaylists); + StoreValue (startoption); + StoreValue (storeplaylist); + StoreValue (timeoutreadrecords); + StoreValue (verbose); + for (int i = Option_confirmdeleterecord; i < Option_max; i++) + StoreValue (PL_options[i]); + + #undef StoreValue + #undef StoreValueFile + + Set(); +} + +cMenuSetupPlayList::~cMenuSetupPlayList(void) +{ +#ifdef PL_Debug2 + dsyslog("%s: cMenuSetupPlayList::~cMenuSetupPlayList store=%s", plugin_name, store ? "true" : "false"); +#endif + if (!store) + { + + #define RestoreValue(T) T.u = T.o + #define RestoreValueFile(T) strcpy(T.u, T.o) + + // var pos8 + RestoreValue (charentry); + RestoreValue (charfolder); + RestoreValue (charrecord); + RestoreValue (commandline_preference); + RestoreValueFile (lastplaylist); + RestoreValueFile (mainmenu_name); + RestoreValue (mainmenu_visible); + RestoreValue (confirmdelplentry); + RestoreValue (okstartplay); + RestoreValue (deleterecords); + RestoreValueFile (pathplaylists); + RestoreValue (startoption); + RestoreValue (storeplaylist); + RestoreValue (timeoutreadrecords); + RestoreValue (verbose); + for (int i = Option_confirmdeleterecord; i < Option_max; i++) + RestoreValue (PL_options[i]); + + #undef RestoreValue + #undef RestoreValueFile + } +} + +void cMenuSetupPlayList::Store(void) +{ +#ifdef PL_Debug2 + dsyslog("%s: cMenuSetupPlayList::Store", plugin_name); +#endif + + #define SaveValue(T, N) if (T.u != T.o) SetupStore(N, T.u); + #define SaveValueChar(T, N) if (T.u != T.o) SetupStore(N, T.u + 256); + #define SaveValueFile(T, N) if (strcmp(T.u, T.o)) SetupStore(N, T.u); + + // var pos9 + SaveValueChar (charentry, "cahre"); + SaveValueChar (charfolder, "charf"); + SaveValueChar (charrecord, "charr"); + SaveValue (commandline_preference, "commandline"); + SaveValueFile (lastplaylist, "lastpl"); + SaveValueFile (mainmenu_name, "name"); + SaveValue (mainmenu_visible, "visible"); + SaveValue (confirmdelplentry, "deletentry"); + SaveValue (okstartplay, "okplay"); + SaveValue (deleterecords, "delete"); + SaveValueFile (pathplaylists, "path"); + SaveValue (startoption, "start"); + SaveValue (storeplaylist, "storepl"); + SaveValue (timeoutreadrecords, "timerecords"); + SaveValue (verbose, "verbose"); + SaveValue (PL_options[Option_confirmdeleterecord], "confdelete"); + SaveValue (PL_options[Option_confirmstartnewrecord], "startnew"); + SaveValue (PL_options[Option_deletefromlist], "deletel"); + SaveValue (PL_options[Option_deleterecord], "deleter"); + SaveValue (PL_options[Option_jumpmark], "jumpmark"); + SaveValue (PL_options[Option_playoption1], "playoption1"); + SaveValue (PL_options[Option_playoption2], "playoption2"); + SaveValue (PL_options[Option_playonlynew], "playonlynew"); + SaveValue (PL_options[Option_searchnewrecord], "searchnew"); + SaveValue (PL_options[Option_searchrecordsub], "searchsub"); + + #undef SaveValue + #undef SaveValueChar + #undef SaveValueFile + + store = true; +} + +void cMenuSetupPlayList::Set(bool sel) +{ +#ifdef PL_Debug2 + dsyslog("%s: cMenuSetupPlayList::Set Current=%d", plugin_name, Current()); +#endif + int current = Current(); + Clear(); + fileitempos = -1; + + #define DisplayLine(T) !T.h && (!commandline_preference.u || !T.c) + + Add(new cOsdItem (tr("Setup$Display playlists now"), osUser6)); + Add(new cOsdItem (tr("Setup$Play last playlist now"), osUser7)); + if (DisplayLine(commandline_preference)) + Add(new cMenuEditBoolItem(tr("Setup$Preferr Command Line Parameter"), &commandline_preference.u)); + if (DisplayLine(mainmenu_visible)) + Add(new cMenuEditBoolItem(tr("Setup$Visible in Mainmenu"), &mainmenu_visible.u)); + if (DisplayLine(mainmenu_name) && mainmenu_visible.u) + Add(new cMenuEditStrItem (tr("Setup$ Name for Mainmenu"), mainmenu_name.u, sizeof(mainmenu_name.u), tr(FileNameChars))); + if (DisplayLine(startoption)) + Add(new cMenuEditStraItem(tr("Setup$Startoptions for plugin"), &startoption.u, 4, StartOptions)); + if (DisplayLine(okstartplay)) + Add(new cMenuEditBoolItem(tr("Setup$Press OK in Playlistview starts"), &okstartplay.u, tr("Setup$Edit"), tr("Setup$Play"))); + if (DisplayLine(storeplaylist)) + Add(new cMenuEditBoolItem(tr("Setup$Store playlist after change"), &storeplaylist.u, tr("Setup$automatically"), tr("Setup$after question"))); + if (DisplayLine(deleterecords)) + Add(new cMenuEditBoolItem(tr("Setup$Allow delete Records"), &deleterecords.u)); + if (DisplayLine(confirmdelplentry)) + Add(new cMenuEditBoolItem(tr("Setup$Confirm delete playlistentries"), &confirmdelplentry.u)); + if (DisplayLine(pathplaylists)) + { + fileitempos = Count(); + Add(new cMenuEditStrItem (tr("Setup$Path for store playlists"), pathplaylists.u, sizeof(pathplaylists.u), FileNameCharsAllowed)); + } + Add(new cMenuEditBoolItem(tr("Setup$Change default options for playlist"), &changedefault)); + if (changedefault) + { + if (DisplayLine(PL_options[Option_playoption1])) + Add(new cMenuEditStraItem(tr("OptionPL$ In playlistview starts play at"), &PL_options[Option_playoption1].u, PlayOptions_max - 1, PlayOptions)); + if (DisplayLine(PL_options[Option_playoption2])) + Add(new cMenuEditStraItem(tr("OptionPL$ In detailview starts play at"), &PL_options[Option_playoption2].u, PlayOptions_max - 1, PlayOptions)); + if (DisplayLine(PL_options[Option_searchnewrecord])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Search new records on folders"), &PL_options[Option_searchnewrecord].u)); + if (DisplayLine(PL_options[Option_searchrecordsub])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Search new records on subfolders"), &PL_options[Option_searchrecordsub].u)); + if (DisplayLine(PL_options[Option_playonlynew])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Play only new Records"), &PL_options[Option_playonlynew].u)); + if (DisplayLine(PL_options[Option_jumpmark])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Jump to first segment of movie"), &PL_options[Option_jumpmark].u)); + if (DisplayLine(PL_options[Option_confirmstartnewrecord])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Confirm start new record"), &PL_options[Option_confirmstartnewrecord].u)); + if (DisplayLine(PL_options[Option_deletefromlist])) + Add(new cMenuEditBoolItem(tr("OptionPL$ Remove records after play from list"), &PL_options[Option_deletefromlist].u)); + if (DisplayLine(PL_options[Option_deleterecord]) && deleterecords.u) + Add(new cMenuEditBoolItem(tr("OptionPL$ Delete records after play"), &PL_options[Option_deleterecord].u)); + if (DisplayLine(PL_options[Option_confirmdeleterecord]) && PL_options[Option_deleterecord].u && deleterecords.u) + Add(new cMenuEditBoolItem(tr("OptionPL$ Confirm delete records"), &PL_options[Option_confirmdeleterecord].u)); + } + Add(new cMenuEditBoolItem(tr("Setup$Change Character for identification"), &changechar)); + if (changechar) + { + if (DisplayLine(charfolder)) + Add(new cMenuEditChrItem(tr("OptionPL$ Character for folders"), &charfolder.u, AllCharsAllowed)); + if (DisplayLine(charentry)) + Add(new cMenuEditChrItem(tr("OptionPL$ Character for records in folders"), &charentry.u, AllCharsAllowed)); + if (DisplayLine(charrecord)) + Add(new cMenuEditChrItem(tr("OptionPL$ Character for normal records"), &charrecord.u, AllCharsAllowed)); + } + if (DisplayLine(verbose)) + Add(new cMenuEditBoolItem(tr("Setup$Verbose Log Mode"), &verbose.u)); + if (sel && changechar) + SetCurrent(Get(Count() - 1)); + + #undef DisplayLine + +#ifdef PL_Debug2 + dsyslog("%s: Count=%d", plugin_name, Count()); +#endif + SetCurrent(Get(current)); +} + +eOSState cMenuSetupPlayList::ProcessKey(eKeys Key) +{ +#ifdef PL_Debug3 + bool noneKey = Key == kNone; + if (!noneKey) + dsyslog("%s: cMenuSetupPlayList::ProcessKey Key=%s", plugin_name, KeyName(Key)); +#endif + static char oldstatus[MAXOSDTEXTWIDTH]; + char status[MAXOSDTEXTWIDTH]; + int pathlen; + + int m_commandline_preference = commandline_preference.u; + int m_mainmenu_visible = mainmenu_visible.u; + int m_deleterecords = deleterecords.u; + int m_changedefault = changedefault; + int m_deleterecord = PL_options[Option_deleterecord].u; + int m_changechar = changechar; + int m_playoption = PL_options[Option_playoption1].u; + + eOSState state = cMenuSetupPage::ProcessKey(Key); +#ifdef PL_Debug3 + if (!noneKey || (state != osUnknown && state != osContinue)) + { + dsyslog("%s: cMenuSetupPlayList::ProcessKey OSState=%s", plugin_name, OSStateName(state)); + noneKey = false; + } +#endif + + if (m_commandline_preference != commandline_preference.u || m_mainmenu_visible != mainmenu_visible.u || m_deleterecords != deleterecords.u || m_changedefault != changedefault || m_deleterecord != PL_options[Option_deleterecord].u || m_changechar != changechar) + { + Set(m_changechar != changechar); + Display(); + if (!m_changedefault && changedefault) + { + for (int i = 0; i < 5; i++) + CursorDown(); + for (int i = 0; i < 5; i++) + CursorUp(); + } + } else if (m_playoption != PL_options[Option_playoption1].u && PL_options[Option_playoption1].u == PlayOptions_selectpos) + { + PL_options[Option_playoption1].u = m_playoption < PlayOptions_selectpos ? PlayOptions_question : PlayOptions_lastplay; + RefreshCurrent(); + } + if (Current() == fileitempos) + { + const char *temp = PluginPlaylist->ExpandPath("", false); + pathlen = strlen(temp); + if (pathlen > AKTOSDTEXTWIDTH - 10) + sprintf(status, "...%s", temp + pathlen - AKTOSDTEXTWIDTH + 10); + else + strcpy(status, temp); + if (oldstatus != status) + { + SetStatus(status); + strcpy(oldstatus, status); + } + } else if (strlen(oldstatus)) + { + SetStatus(NULL); + oldstatus[0] = 0; + } + switch (state) + { + case osUser6: state = AddSubMenu(new cMenuPlaylists); + break; + case osUser7: { + cMenuPlaylists *menu = new cMenuPlaylists; + if (SelectPLR) + menu->ProcessKey(kUser2); + state = AddSubMenu(menu); + } + break; + case osUser9: if (SelectPLR) + { + cControl::Shutdown(); // Start play (SelectPLR) + cControl::Launch(new cControlPlaylist); + } + state = osEnd; + break; + default: break; + } + +#ifdef PL_Debug3 + if (!noneKey || (state != osUnknown && state != osContinue)) + dsyslog("%s: cMenuSetupPlayList::ProcessKey returned OSState=%s", plugin_name, OSStateName(state)); +#endif + return state; +} |