When entering text via the numeric keys, the cursor now automatically advances

This commit is contained in:
Klaus Schmidinger 2006-01-21 12:27:14 +01:00
parent d1668d768c
commit b2989899c0
4 changed files with 43 additions and 18 deletions

View File

@ -937,6 +937,8 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
for adding compiler options "-fPIC -g" to all plugins
for adding a leading '0' to the day in the DayDateTime() function
for reporting a crash in the Schedule menu with events that have no title
for a patch that was used to implement automatic cursor advance when entering text
via the numeric keys
Ralf Klueber <ralf.klueber@vodafone.com>
for reporting a bug in cutting a recording if there is only a single editing mark

View File

@ -4208,3 +4208,5 @@ Video Disk Recorder Revision History
- Updated the Estonian OSD texts (thanks to Arthur Konovalov).
- Recordings are now only started if there is at least 300MB free disk space
(suggested by Markus Hahn).
- When entering text via the numeric keys, the cursor now automatically advances
(based on a patch from Rolf Ahrenberg).

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menuitems.c 1.29 2006/01/07 15:37:03 kls Exp $
* $Id: menuitems.c 1.30 2006/01/21 12:27:14 kls Exp $
*/
#include "menuitems.h"
@ -15,6 +15,8 @@
#include "skins.h"
#include "status.h"
#define AUTO_ADVANCE_TIMEOUT 1500 // ms before auto advance when entering characters via numeric keys
const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~,/_@";
// --- cMenuEditItem ---------------------------------------------------------
@ -262,6 +264,23 @@ void cMenuEditStrItem::SetHelpKeys(void)
cSkinDisplay::Current()->SetButtons(NULL);
}
void cMenuEditStrItem::AdvancePos(void)
{
if (pos < length - 2 && pos < int(strlen(value)) ) {
if (++pos >= int(strlen(value))) {
if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ')
pos--; // allow only two blanks at the end
else {
value[pos] = ' ';
value[pos + 1] = 0;
}
}
}
newchar = true;
if (!insert && isalpha(value[pos]))
uppercase = isupper(value[pos]);
}
void cMenuEditStrItem::Set(void)
{
char buf[1000];
@ -326,6 +345,13 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
bool SameKey = Key == lastKey;
if (Key != kNone)
lastKey = Key;
else if (!newchar && autoAdvanceTimeout.TimedOut()) {
AdvancePos();
newchar = true;
currentChar = NULL;
Set();
return osContinue;
}
switch (Key) {
case kRed: // Switch between upper- and lowercase characters
if (InEditMode()) {
@ -382,19 +408,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
uppercase = isupper(value[pos]);
break;
case kRight|k_Repeat:
case kRight: if (pos < length - 2 && pos < int(strlen(value)) ) {
if (++pos >= int(strlen(value))) {
if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ')
pos--; // allow only two blanks at the end
else {
value[pos] = ' ';
value[pos + 1] = 0;
}
}
}
newchar = true;
if (!insert && isalpha(value[pos]))
uppercase = isupper(value[pos]);
case kRight: AdvancePos();
if (pos == 0)
SetHelpKeys();
break;
@ -413,15 +427,19 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
value[pos] = toupper(Inc(tolower(value[pos]), NORMALKEY(Key) == kUp));
else
value[pos] = Inc( value[pos], NORMALKEY(Key) == kUp);
newchar = false;
newchar = true;
}
else
return cMenuEditItem::ProcessKey(Key);
break;
case k0|k_Repeat ... k9|k_Repeat:
case k0 ... k9: {
if (!SameKey)
currentChar = NULL;
if (InEditMode()) {
if (!SameKey) {
if (!newchar)
AdvancePos();
currentChar = NULL;
}
if (insert && newchar) {
// create a new character in insert mode
if (int(strlen(value)) < length - 1) {
@ -445,6 +463,7 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
currentChar++;
}
newchar = false;
autoAdvanceTimeout.Set(AUTO_ADVANCE_TIMEOUT);
}
else
return cMenuEditItem::ProcessKey(Key);

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menuitems.h 1.15 2006/01/06 15:16:25 kls Exp $
* $Id: menuitems.h 1.16 2006/01/21 10:45:55 kls Exp $
*/
#ifndef __MENUITEMS_H
@ -85,7 +85,9 @@ private:
const char *charMap;
const char *currentChar;
eKeys lastKey;
cTimeMs autoAdvanceTimeout;
void SetHelpKeys(void);
void AdvancePos(void);
virtual void Set(void);
char Inc(char c, bool Up);
protected: