1
0
Fork 0
forked from len0rd/rockbox

Accept some improvements to the text editor plugin (FS#9988 with minor modifications by me)

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20405 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Alexander Levin 2009-03-20 18:59:03 +00:00
parent cd85e9769d
commit 2d77fde363

View file

@ -22,7 +22,7 @@
#include "lib/playback_control.h" #include "lib/playback_control.h"
#if PLUGIN_BUFFER_SIZE > 0x45000 #if PLUGIN_BUFFER_SIZE > 0x45000
#define MAX_CHARS 0x40000 /* 128 kiB */ #define MAX_CHARS 0x40000 /* 256 kiB */
#else #else
#define MAX_CHARS 0x6000 /* 24 kiB */ #define MAX_CHARS 0x6000 /* 24 kiB */
#endif #endif
@ -58,7 +58,7 @@ int do_action(int action, char* str, int line)
int _do_action(int action, char* str, int line) int _do_action(int action, char* str, int line)
{ {
int len; int len, lennew;
int i=0,c=0; int i=0,c=0;
if (line>=last_action_line) if (line>=last_action_line)
{ {
@ -76,7 +76,7 @@ int _do_action(int action, char* str, int line)
len = rb->strlen(str)+1; len = rb->strlen(str)+1;
if ( char_count+ len > MAX_CHARS ) if ( char_count+ len > MAX_CHARS )
return 0; return 0;
rb->memmove(&buffer[c+len],&buffer[c],char_count); rb->memmove(&buffer[c+len],&buffer[c],char_count-c);
rb->strcpy(&buffer[c],str); rb->strcpy(&buffer[c],str);
char_count += len; char_count += len;
line_count++; line_count++;
@ -92,22 +92,27 @@ int _do_action(int action, char* str, int line)
if (line > line_count) if (line > line_count)
return 0; return 0;
len = rb->strlen(&buffer[c])+1; len = rb->strlen(&buffer[c])+1;
rb->memmove(&buffer[c],&buffer[c+len],char_count-c-len);
char_count -= len; char_count -= len;
rb->memmove(&buffer[c],&buffer[c+len],char_count);
line_count--; line_count--;
break; break;
case ACTION_UPDATE: case ACTION_UPDATE:
if (line > line_count) if (line > line_count)
return 0; return 0;
len = rb->strlen(&buffer[c])+1; len = rb->strlen(&buffer[c])+1;
rb->memmove(&buffer[c+rb->strlen(str)+1],&buffer[c+len],char_count); lennew = rb->strlen(str)+1;
if ( char_count+ lennew-len > MAX_CHARS )
return 0;
rb->memmove(&buffer[c+lennew],&buffer[c+len],char_count-c-len);
rb->strcpy(&buffer[c],str); rb->strcpy(&buffer[c],str);
char_count += rb->strlen(str)+1-len; char_count += lennew-len;
break; break;
case ACTION_CONCAT: case ACTION_CONCAT:
if (line > line_count) if (line > line_count)
return 0; return 0;
rb->memmove(&buffer[c-1],&buffer[c],char_count); rb->memmove(&buffer[c-1],&buffer[c],char_count-c);
char_count--;
line_count--;
break; break;
default: default:
return 0; return 0;
@ -264,7 +269,7 @@ int do_item_menu(int cur_sel, char* copy_buffer)
break; break;
case 6: /* playback menu */ case 6: /* playback menu */
playback_control(NULL); playback_control(NULL);
ret = MENU_RET_UPDATE; ret = MENU_RET_NO_UPDATE;
break; break;
default: default:
ret = MENU_RET_NO_UPDATE; ret = MENU_RET_NO_UPDATE;
@ -389,56 +394,57 @@ enum plugin_status plugin_start(const void* parameter)
{ {
case ACTION_STD_OK: case ACTION_STD_OK:
{ {
bool edit_text = true;
#ifdef HAVE_LCD_COLOR
int color;
#endif
if (line_count) if (line_count)
rb->strcpy(temp_line,&buffer[do_action(ACTION_GET,0,cur_sel)]); rb->strcpy(temp_line,&buffer[do_action(ACTION_GET,0,cur_sel)]);
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
if (edit_colors_file) if (edit_colors_file && line_count)
{ {
char *name = temp_line, *value = NULL; char *name = temp_line, *value = NULL;
char extension[MAX_LINE_LEN]; char extension[MAX_LINE_LEN];
int color, old_color;
bool temp_changed;
rb->settings_parseline(temp_line, &name, &value); rb->settings_parseline(temp_line, &name, &value);
if (line_count) if (line_count)
{ {
MENUITEM_STRINGLIST(menu, "Edit What?", NULL, MENUITEM_STRINGLIST(menu, "Edit What?", NULL,
"Extension", "Colour",); "Extension", "Colour",);
rb->strcpy(extension, name);
if (value)
hex_to_rgb(value, &color);
else
color = 0;
switch (rb->do_menu(&menu, NULL, NULL, false)) switch (rb->do_menu(&menu, NULL, NULL, false))
{ {
case 0: case 0:
edit_text = true; temp_changed = !rb->kbd_input(extension,MAX_LINE_LEN);
break; break;
case 1: case 1:
edit_text = false; old_color = color;
if (value)
hex_to_rgb(value, &color);
else color = 0;
rb->strcpy(extension, name);
rb->set_color(rb->screens[SCREEN_MAIN], name, &color, -1); rb->set_color(rb->screens[SCREEN_MAIN], name, &color, -1);
temp_changed = (value == NULL) || (color != old_color);
break;
}
if (temp_changed)
{
rb->snprintf(temp_line, MAX_LINE_LEN, "%s: %02X%02X%02X", rb->snprintf(temp_line, MAX_LINE_LEN, "%s: %02X%02X%02X",
extension, RGB_UNPACK_RED(color), extension, RGB_UNPACK_RED(color),
RGB_UNPACK_GREEN(color), RGB_UNPACK_GREEN(color),
RGB_UNPACK_BLUE(color)); RGB_UNPACK_BLUE(color));
if (line_count)
{
do_action(ACTION_UPDATE, temp_line, cur_sel); do_action(ACTION_UPDATE, temp_line, cur_sel);
}
else do_action(ACTION_INSERT,temp_line,cur_sel);
changed = true; changed = true;
break;
} }
} }
} }
else
#endif #endif
if (edit_text &&!rb->kbd_input(temp_line,MAX_LINE_LEN)) if (!rb->kbd_input(temp_line,MAX_LINE_LEN))
{ {
if (line_count) if (line_count)
{
do_action(ACTION_UPDATE,temp_line,cur_sel); do_action(ACTION_UPDATE,temp_line,cur_sel);
} else
else do_action(ACTION_INSERT,temp_line,cur_sel); do_action(ACTION_INSERT,temp_line,cur_sel);
changed = true; changed = true;
} }
} }