? properties.patch
Index: onplay.c
===================================================================
RCS file: /cvsroot/rockbox/apps/onplay.c,v
retrieving revision 1.78
diff -u -r1.78 onplay.c
--- onplay.c	26 Mar 2006 11:33:41 -0000	1.78
+++ onplay.c	31 Mar 2006 07:22:36 -0000
@@ -120,6 +120,11 @@
     return result;
 }
 
+bool properties_send(void) 
+{
+    return properties(selected_file); 
+}
+
 static bool list_viewers(void)
 {
     struct menu_item menu[16];
@@ -926,6 +931,10 @@
 #endif
     }
 
+    items[i].desc = ID2P(LANG_PROPERTIES);
+    items[i].function = properties_send;
+    i++;
+
     /* DIY menu handling, since we want to exit after selection */
     if (i)
     {
Index: screens.c
===================================================================
RCS file: /cvsroot/rockbox/apps/screens.c,v
retrieving revision 1.146
diff -u -r1.146 screens.c
--- screens.c	22 Mar 2006 02:44:18 -0000	1.146
+++ screens.c	31 Mar 2006 07:22:38 -0000
@@ -1202,3 +1202,159 @@
     }
     return false;
 }
+
+int draw_properties_item(int line, int top, char* header, const char* body)
+{
+    if (line >= top)
+    {
+#if defined(HAVE_LCD_BITMAP)
+        const int rows = LCD_HEIGHT / font_get(FONT_UI)->height;
+#else
+        const int rows = 2;
+#endif
+        int y = line - top;
+
+        if (y < rows)
+        {
+            lcd_puts(0, y, header);
+        }
+
+        if (++y < rows)
+        {
+            lcd_puts_scroll(0, y, (const unsigned char*) body);
+        }
+    }
+
+    return line + 2;
+}
+
+#define PROPERTIES_ITEMS 2
+
+bool properties(char* filename)
+{
+    char buf[64];
+#if defined(HAVE_LCD_BITMAP)
+    const int y_margin = global_settings.statusbar ? STATUSBAR_HEIGHT : 0;
+    const int line_height = font_get(FONT_UI)->height;
+    const int rows = (LCD_HEIGHT - y_margin) / line_height;
+    const bool show_scrollbar = global_settings.scrollbar
+        && (PROPERTIES_ITEMS * 2 > rows);
+#else
+    const int rows = 2;
+#endif
+    const int top_max = (PROPERTIES_ITEMS * 2) - (rows & ~1);
+    int top = 0;
+    int button, fp, fs = 0, rem;
+    char unit[6];
+    bool exit = false;
+
+    fp = open(filename,O_RDONLY);
+    if (fp > -1) {
+        fs = filesize(fp);
+    } else {
+        gui_syncsplash(HZ*2, true, "File access failed");
+        return false;
+    }
+    close(fp);
+
+    if(fs>=1024 && fs < 1048576){
+        rem=fs%1024;
+        rem*=10;
+        rem/=1024;
+        fs/=1024;
+        snprintf(unit, sizeof(unit), "Kb");
+    } else if(fs>=1048576){
+        rem=fs%1048576;
+        rem*=10;
+        rem/=1048576;
+        fs/=1048576;
+        snprintf(unit, sizeof(unit), "Kb");
+    } else {
+        snprintf(unit, 6, "bytes");
+    }
+
+#if defined(HAVE_LCD_BITMAP)
+    lcd_setmargins(show_scrollbar ? SCROLLBAR_WIDTH : 0, y_margin);
+#endif
+    while (!exit)
+    {
+        int line = 0;
+        int old_top = top;
+        char* body;
+
+        lcd_clear_display();
+        gui_syncstatusbar_draw(&statusbars, true);
+        line = draw_properties_item(line, top, "[Filename]",  filename);
+        snprintf(buf, sizeof(buf), "%d %s", fs, unit);
+        body = buf;
+        line = draw_properties_item(line, top, "[Filesize]", body);
+
+        while (!exit && (top == old_top))
+        {
+            gui_syncstatusbar_draw(&statusbars, false);
+            lcd_update();
+            button = button_get_w_tmo(HZ / 2);
+
+            switch(button)
+            {
+            /* It makes more sense to have the keys mapped "backwards" when
+             * scrolling a list on the archos studios/players and the ipod.
+             */
+#if defined(HAVE_LCD_BITMAP) && !(CONFIG_KEYPAD == IPOD_4G_PAD)
+            case SETTINGS_INC:
+            case SETTINGS_INC | BUTTON_REPEAT:
+#else
+            case SETTINGS_DEC:
+#endif
+                if (top > 0)
+                {
+                    top -= 2;
+                }
+                else if (!(button & BUTTON_REPEAT))
+                {
+                    top = top_max;
+                }
+
+                break;
+
+#if defined(HAVE_LCD_BITMAP) && !(CONFIG_KEYPAD == IPOD_4G_PAD)
+            case SETTINGS_DEC:
+            case SETTINGS_DEC | BUTTON_REPEAT:
+#else
+            case SETTINGS_INC:
+#endif
+                if (top < top_max)
+                {
+                    top += 2;
+                }
+                else if (!(button & BUTTON_REPEAT))
+                {
+                    top = 0;
+                }
+
+                break;
+
+#ifdef SETTINGS_OK2
+            case SETTINGS_OK2:
+#endif
+            case SETTINGS_CANCEL:
+                lcd_stop_scroll();
+                /* Eat release event */
+                button_get(true);
+                exit = true;
+                break;
+
+            default:
+                if (default_event_handler(button) == SYS_USB_CONNECTED)
+                {
+                    return true;
+                }
+
+                break;
+            }
+        }
+    }
+
+    return false;
+}
Index: screens.h
===================================================================
RCS file: /cvsroot/rockbox/apps/screens.h,v
retrieving revision 1.28
diff -u -r1.28 screens.h
--- screens.h	22 Mar 2006 02:18:44 -0000	1.28
+++ screens.h	31 Mar 2006 07:22:39 -0000
@@ -5,7 +5,7 @@
  *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
  *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
  *                     \/            \/     \/    \/            \/
- * $Id: screens.h,v 1.28 2006-03-22 02:18:44 midk Exp $
+ * $Id: screens.h,v 1.28 2006/03/22 02:18:44 midk Exp $
  *
  * Copyright (C) 2002 Björn Stenberg
  *
@@ -85,6 +85,6 @@
 bool shutdown_screen(void);
 bool browse_id3(void);
 bool set_rating(void);
+bool properties(char* filename);
 
 #endif
-
Index: lang/english.lang
===================================================================
RCS file: /cvsroot/rockbox/apps/lang/english.lang,v
retrieving revision 1.236
diff -u -r1.236 english.lang
--- lang/english.lang	30 Mar 2006 05:56:19 -0000	1.236
+++ lang/english.lang	31 Mar 2006 07:22:45 -0000
@@ -3904,3 +3904,9 @@
 eng: "Track Skip Only"
 voice: "Track Skip Only"
 new:
+
+id: LANG_PROPERTIES
+desc: onplay menu
+eng: "Properties"
+voice: "Properties"
+new:
