
amb at gedanken
Oct 5, 2002, 10:06 AM
Post #1 of 2
(836 views)
Permalink
|
|
Sticky keys for FF/Rew [was: Re: MythTV Experiences]
|
|
john [at] churchdrama writes: > >The other option would be that the forward and reverse buttons are > >"sticky". When you press one it starts skipping forward until you > >press it again. This is how my old video worked and is great for > >programs where you want to only see a small part of the whole > >recording. > > > >The reason that I would not want a different set of key presses to do > >this is that my remote control only has a small number of > >buttons. They are all used now, any more won't fit. I don't think > >that MythTV should require the use of a keyboard. > You make some good points about not wanting too many different key > presses, although I suppose some "nonessential" key presses could > simply be ignored, in terms of using with a remote. The "sticky" > suggestion sounds like a good one to offer a way to quickly > fastforward or rewind through several minutes of program. Here is a patch that implements sticky keys for fast forward and rewind. You need to set StickyKeys=1 in settings.txt and I found that having FastForwardAmount and RewindAmount set to 1 works well. Pressing the same key again will stop the fast forward or rewind, pressing any other key also does that. The patch is against the CVS version from Saturday. -------------------- mythtv patch -------------------- diff -ru ../cvs/MC/libs/libmythtv/settings.txt ./MC/libs/libmythtv/settings.txt --- ../cvs2/MC/libs/libmythtv/settings.txt 2002-10-05 16:00:33.000000000 +0100 +++ ./MC/libs/libmythtv/settings.txt 2002-10-05 17:58:14.000000000 +0100 @@ -78,6 +78,8 @@ int FastForwardAmount=5 # How long to skip backwards on a rewind? int RewindAmount=5 +# Are the fast forward and rewind buttons sticky (auto-repeat after letting go)? +int StickyKeys=0 # How long should the OSD stay up for in seconds? int OSDDisplayTime=3 # Theme to use for the OSD, if 'none' or otherwise doesn't exist, the normal diff -ru ../cvs2/MC/libs/libmythtv/tv.cpp ./MC/libs/libmythtv/tv.cpp --- ../cvs2/MC/libs/libmythtv/tv.cpp 2002-10-05 16:49:24.000000000 +0100 +++ ./MC/libs/libmythtv/tv.cpp 2002-10-05 17:56:42.000000000 +0100 @@ -887,10 +887,12 @@ void TV::RunTV(void) { - // frameRate = 29.97; // the default's not used, but give it a default anyway. - paused = false; int keypressed; + + stickykeys = settings->GetSetting("StickyKeys"); + doing_ff = 0; + doing_rew = 0; channelqueued = false; channelKeys[0] = channelKeys[1] = channelKeys[2] = ' '; @@ -906,9 +908,17 @@ usleep(1000); - if (nvp && (keypressed = nvp->CheckEvents())) + if (nvp) { - ProcessKeypress(keypressed); + if ((keypressed = nvp->CheckEvents())) + ProcessKeypress(keypressed); + else if(stickykeys) + { + if (doing_ff) + DoFF(); + else if (doing_rew) + DoRew(); + } } if (StateIsRecording(internalState)) @@ -990,17 +1000,45 @@ switch (keypressed) { case 's': case 'S': - case 'p': case 'P': DoPause(); break; - - case wsRight: case 'd': case 'D': DoFF(); break; - - case wsLeft: case 'a': case 'A': DoRew(); break; + case 'p': case 'P': + doing_ff = 0; + doing_rew = 0; + DoPause(); break; + + case wsRight: case 'd': case 'D': + if (doing_ff && stickykeys) + { + doing_ff = 0; + } + else + { + doing_ff = 1; + doing_rew = 0; + DoFF(); + } + break; + + case wsLeft: case 'a': case 'A': + if (doing_rew && stickykeys) + { + doing_rew = 0; + } + else + { + doing_ff = 0; + doing_rew = 1; + DoRew(); + } + break; case wsEscape: exitPlayer = true; break; // case 'e': case 'E': nvp->ToggleEdit(); break; // case ' ': nvp->AdvanceOneFrame(); break; - default: break; + default: + doing_ff = 0; + doing_rew = 0; + break; } if (internalState == kState_WatchingLiveTV) diff -ru ../cvs2/MC/libs/libmythtv/tv.h ./MC/libs/libmythtv/tv.h --- ../cvs2/MC/libs/libmythtv/tv.h 2002-10-05 14:41:25.000000000 +0100 +++ ./MC/libs/libmythtv/tv.h 2002-10-05 17:12:15.000000000 +0100 @@ -159,6 +159,9 @@ int fftime; int rewtime; + int stickykeys; + int doing_ff; + int doing_rew; OSD *osd; -------------------- mythtv patch -------------------- -- Andrew. ---------------------------------------------------------------------- Andrew M. Bishop amb [at] gedanken http://www.gedanken.demon.co.uk/
|