mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	When entering text via the numeric keys, the cursor now automatically advances
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
							
								
								
									
										2
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -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). | ||||
|   | ||||
							
								
								
									
										53
									
								
								menuitems.c
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								menuitems.c
									
									
									
									
									
								
							| @@ -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); | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user