Use two lined display in properties.

Depending on the length of the values to display having both entry title and
value in the same line can be hard to read if the display isn't wide enough.
Similar to the metadata view use two lines for each entry.

Change-Id: I9a2dfe78e02b0460add1681115b0c4781d74af17
This commit is contained in:
Dominik Riebeling 2012-04-08 20:52:44 +02:00
parent 3cb0d71759
commit b7bc240489

View file

@ -39,6 +39,26 @@ char str_duration[32];
int num_properties; int num_properties;
static const char* props_file[] =
{
"[Path]", str_dirname,
"[Filename]", str_filename,
"[Size]", str_size,
"[Date]", str_date,
"[Time]", str_time,
"[Artist]", str_artist,
"[Title]", str_title,
"[Album]", str_album,
"[Duration]", str_duration,
};
static const char* props_dir[] =
{
"[Path]", str_dirname,
"[Subdirs]", str_dircount,
"[Files]", str_filecount,
"[Size]", str_size,
};
static const char human_size_prefix[4] = { '\0', 'K', 'M', 'G' }; static const char human_size_prefix[4] = { '\0', 'K', 'M', 'G' };
static unsigned human_size_log(unsigned long long size) static unsigned human_size_log(unsigned long long size)
{ {
@ -73,17 +93,17 @@ static bool file_properties(char* selected_file)
if(!rb->strcmp(entry->d_name, selected_file+dirlen)) if(!rb->strcmp(entry->d_name, selected_file+dirlen))
{ {
unsigned log; unsigned log;
rb->snprintf(str_dirname, sizeof str_dirname, "Path: %s", tstr); rb->snprintf(str_dirname, sizeof str_dirname, "%s", tstr);
rb->snprintf(str_filename, sizeof str_filename, "Name: %s", rb->snprintf(str_filename, sizeof str_filename, "%s",
selected_file+dirlen); selected_file+dirlen);
log = human_size_log((unsigned long)info.size); log = human_size_log((unsigned long)info.size);
rb->snprintf(str_size, sizeof str_size, "Size: %lu %cB", rb->snprintf(str_size, sizeof str_size, "%lu %cB",
((unsigned long)info.size) >> (log*10), human_size_prefix[log]); ((unsigned long)info.size) >> (log*10), human_size_prefix[log]);
rb->snprintf(str_date, sizeof str_date, "Date: %04d/%02d/%02d", rb->snprintf(str_date, sizeof str_date, "%04d/%02d/%02d",
((info.wrtdate >> 9 ) & 0x7F) + 1980, /* year */ ((info.wrtdate >> 9 ) & 0x7F) + 1980, /* year */
((info.wrtdate >> 5 ) & 0x0F), /* month */ ((info.wrtdate >> 5 ) & 0x0F), /* month */
((info.wrtdate ) & 0x1F)); /* day */ ((info.wrtdate ) & 0x1F)); /* day */
rb->snprintf(str_time, sizeof str_time, "Time: %02d:%02d", rb->snprintf(str_time, sizeof str_time, "%02d:%02d",
((info.wrttime >> 11) & 0x1F), /* hour */ ((info.wrttime >> 11) & 0x1F), /* hour */
((info.wrttime >> 5 ) & 0x3F)); /* minutes */ ((info.wrttime >> 5 ) & 0x3F)); /* minutes */
@ -99,23 +119,23 @@ static bool file_properties(char* selected_file)
{ {
long dur = id3.length / 1000; /* seconds */ long dur = id3.length / 1000; /* seconds */
rb->snprintf(str_artist, sizeof str_artist, rb->snprintf(str_artist, sizeof str_artist,
"Artist: %s", id3.artist ? id3.artist : ""); "%s", id3.artist ? id3.artist : "");
rb->snprintf(str_title, sizeof str_title, rb->snprintf(str_title, sizeof str_title,
"Title: %s", id3.title ? id3.title : ""); "%s", id3.title ? id3.title : "");
rb->snprintf(str_album, sizeof str_album, rb->snprintf(str_album, sizeof str_album,
"Album: %s", id3.album ? id3.album : ""); "%s", id3.album ? id3.album : "");
num_properties += 3; num_properties += 3;
if (dur > 0) if (dur > 0)
{ {
if (dur < 3600) if (dur < 3600)
rb->snprintf(str_duration, sizeof str_duration, rb->snprintf(str_duration, sizeof str_duration,
"Duration: %d:%02d", (int)(dur / 60), "%d:%02d", (int)(dur / 60),
(int)(dur % 60)); (int)(dur % 60));
else else
rb->snprintf(str_duration, sizeof str_duration, rb->snprintf(str_duration, sizeof str_duration,
"Duration: %d:%02d:%02d", "%d:%02d:%02d",
(int)(dur / 3600), (int)(dur / 3600),
(int)(dur % 3600 / 60), (int)(dur % 3600 / 60),
(int)(dur % 60)); (int)(dur % 60));
num_properties++; num_properties++;
@ -228,10 +248,10 @@ static bool dir_properties(char* selected_file)
#endif #endif
rb->strlcpy(str_dirname, selected_file, MAX_PATH); rb->strlcpy(str_dirname, selected_file, MAX_PATH);
rb->snprintf(str_dircount, sizeof str_dircount, "Subdirs: %d", dps.dc); rb->snprintf(str_dircount, sizeof str_dircount, "%d", dps.dc);
rb->snprintf(str_filecount, sizeof str_filecount, "Files: %d", dps.fc); rb->snprintf(str_filecount, sizeof str_filecount, "%d", dps.fc);
log = human_size_log(dps.bc); log = human_size_log(dps.bc);
rb->snprintf(str_size, sizeof str_size, "Size: %ld %cB", rb->snprintf(str_size, sizeof str_size, "%ld %cB",
(long) (dps.bc >> (log*10)), human_size_prefix[log]); (long) (dps.bc >> (log*10)), human_size_prefix[log]);
num_properties = 4; num_properties = 4;
return true; return true;
@ -241,39 +261,27 @@ static const char * get_props(int selected_item, void* data,
char *buffer, size_t buffer_len) char *buffer, size_t buffer_len)
{ {
(void)data; (void)data;
if(its_a_dir)
switch(selected_item)
{ {
case 0: if(selected_item >= (int)(sizeof(props_dir) / sizeof(props_dir[0])))
rb->strlcpy(buffer, str_dirname, buffer_len); {
break; rb->strlcpy(buffer, "ERROR", buffer_len);
case 1: }
rb->strlcpy(buffer, its_a_dir ? str_dircount : str_filename, else
buffer_len); {
break; rb->strlcpy(buffer, props_dir[selected_item], buffer_len);
case 2: }
rb->strlcpy(buffer, its_a_dir ? str_filecount : str_size, buffer_len); }
break; else
case 3: {
rb->strlcpy(buffer, its_a_dir ? str_size : str_date, buffer_len); if(selected_item >= (int)(sizeof(props_file) / sizeof(props_file[0])))
break; {
case 4: rb->strlcpy(buffer, "ERROR", buffer_len);
rb->strlcpy(buffer, its_a_dir ? "" : str_time, buffer_len); }
break; else
case 5: {
rb->strlcpy(buffer, its_a_dir ? "" : str_artist, buffer_len); rb->strlcpy(buffer, props_file[selected_item], buffer_len);
break; }
case 6:
rb->strlcpy(buffer, its_a_dir ? "" : str_title, buffer_len);
break;
case 7:
rb->strlcpy(buffer, its_a_dir ? "" : str_album, buffer_len);
break;
case 8:
rb->strlcpy(buffer, its_a_dir ? "" : str_duration, buffer_len);
break;
default:
return "ERROR";
} }
return buffer; return buffer;
} }
@ -337,12 +345,12 @@ enum plugin_status plugin_start(const void* parameter)
rb->viewportmanager_theme_enable(i, true, NULL); rb->viewportmanager_theme_enable(i, true, NULL);
#endif #endif
rb->gui_synclist_init(&properties_lists, &get_props, file, false, 1, NULL); rb->gui_synclist_init(&properties_lists, &get_props, file, false, 2, NULL);
rb->gui_synclist_set_title(&properties_lists, its_a_dir ? rb->gui_synclist_set_title(&properties_lists, its_a_dir ?
"Directory properties" : "Directory properties" :
"File properties", NOICON); "File properties", NOICON);
rb->gui_synclist_set_icon_callback(&properties_lists, NULL); rb->gui_synclist_set_icon_callback(&properties_lists, NULL);
rb->gui_synclist_set_nb_items(&properties_lists, num_properties); rb->gui_synclist_set_nb_items(&properties_lists, num_properties * 2);
rb->gui_synclist_limit_scroll(&properties_lists, true); rb->gui_synclist_limit_scroll(&properties_lists, true);
rb->gui_synclist_select_item(&properties_lists, 0); rb->gui_synclist_select_item(&properties_lists, 0);
rb->gui_synclist_draw(&properties_lists); rb->gui_synclist_draw(&properties_lists);