Index: apps/onplay.c
===================================================================
RCS file: /cvsroot/rockbox/apps/onplay.c,v
retrieving revision 1.82
diff -u -r1.82 onplay.c
--- apps/onplay.c	25 Jul 2006 07:41:00 -0000	1.82
+++ apps/onplay.c	31 Jul 2006 08:01:47 -0000
@@ -808,6 +808,11 @@
 
 static bool exit_to_main;
 
+static bool properties(void)
+{
+    return browse_properties(selected_file);
+}
+
 /* catch MENU_EXIT_MENU within context menu to call the main menu afterwards */
 static int onplay_callback(int key, int menu)
 {
@@ -826,7 +831,7 @@
 int onplay(char* file, int attr, int from)
 {
 #if CONFIG_CODEC == SWCODEC
-    struct menu_item items[14]; /* increase this if you add entries! */
+    struct menu_item items[15]; /* increase this if you add entries! */
 #else
     struct menu_item items[12];
 #endif
@@ -943,6 +948,10 @@
             items[i].desc = ID2P(LANG_ONPLAY_OPEN_WITH);
             items[i].function = list_viewers;
             i++;
+
+	    items[i].desc = ID2P(LANG_PROPERTIES);
+	    items[i].function = properties;
+	    i++;
         }
     }
     else
Index: apps/screens.c
===================================================================
RCS file: /cvsroot/rockbox/apps/screens.c,v
retrieving revision 1.159
diff -u -r1.159 screens.c
--- apps/screens.c	2 Jul 2006 16:18:58 -0000	1.159
+++ apps/screens.c	31 Jul 2006 08:01:52 -0000
@@ -1130,7 +1130,6 @@
     }
 }
 
-
 bool set_rating(void)
 {
     struct mp3entry* id3 = audio_current_track();
@@ -1181,3 +1180,79 @@
     }
     return false;
 }
+
+const unsigned char *kbyte_units[] = {
+    ID2P(LANG_BYTE),
+    ID2P(LANG_KILOBYTE),
+    ID2P(LANG_MEGABYTE),
+    ID2P(LANG_GIGABYTE)
+};
+
+char * get_props(int selected_item, void* data, char *buffer)
+{
+    int info_no=selected_item/2;
+    int foo = 0;
+    if(!(selected_item%2))
+    {/* header */
+        int headers[]=
+        {
+            LANG_PROP_PATH,
+            LANG_PROP_EXT,
+            LANG_PROP_FILESIZE,
+        };
+        return( str(headers[info_no]));
+    }
+    else
+    {/* data */
+
+        char * info=NULL;
+        const char *cp = strrchr(data,'.');
+        switch(info_no)
+        {
+            case 0:/*Path*/
+                info=data;
+                break;
+            case 1:/*Extention*/
+                if(!cp)
+                    break;;
+                cp++;
+		snprintf(buffer, MAX_PATH, cp);
+                info=buffer;
+                break;
+            case 2:/*Filesize*/
+                foo = open(data, O_RDONLY);
+                if (foo < 0) {
+                    snprintf(buffer, MAX_PATH, "Can't open file");
+		    info=buffer;
+                    break;
+                }
+                int bytes = filesize(foo);
+		output_dyn_value(buffer, MAX_PATH, bytes, kbyte_units, true);
+		info=buffer;
+		close(foo);
+                break;
+        }
+        if(info==NULL)
+            return(str(LANG_ID3_NO_INFO));
+        return(info);
+    }
+}
+
+
+bool browse_properties(char* file)
+{
+    /* Do stuff */
+    struct gui_synclist properties_lists;
+    int key;
+
+    gui_synclist_init(&properties_lists, &get_props, file, true, 2);
+    gui_synclist_set_nb_items(&properties_lists, 6);
+    gui_synclist_draw(&properties_lists);
+    while (true) {
+        key = button_get_w_tmo(HZ/2);
+        if(key!=BUTTON_NONE && !(key&BUTTON_REL) && !gui_synclist_do_button(&properties_lists, key))
+            return(default_event_handler(key) == SYS_USB_CONNECTED);
+        gui_syncstatusbar_draw(&statusbars, false);
+    }
+
+}
Index: apps/screens.h
===================================================================
RCS file: /cvsroot/rockbox/apps/screens.h,v
retrieving revision 1.28
diff -u -r1.28 screens.h
--- apps/screens.h	22 Mar 2006 02:18:44 -0000	1.28
+++ apps/screens.h	31 Jul 2006 08:01:53 -0000
@@ -85,6 +85,7 @@
 bool shutdown_screen(void);
 bool browse_id3(void);
 bool set_rating(void);
+bool browse_properties(char* file);
 
 #endif
 
Index: apps/lang/english.lang
===================================================================
RCS file: /cvsroot/rockbox/apps/lang/english.lang,v
retrieving revision 1.258
diff -u -r1.258 english.lang
--- apps/lang/english.lang	22 Jul 2006 17:23:05 -0000	1.258
+++ apps/lang/english.lang	31 Jul 2006 08:02:05 -0000
@@ -8777,3 +8777,59 @@
     *: "Stop recording"
   </voice>
 </phrase>
+<phrase>
+  id: LANG_PROPERTIES
+  desc: in onplay menu
+  user:
+  <source>
+    *: "Properties"
+  </source>
+  <dest>
+    *: "Properties"
+  </dest>
+  <voice>
+    *: "Properties"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_PROP_PATH
+  desc: in onplay menu
+  user:
+  <source>
+    *: "[ Path ]"
+  </source>
+  <dest>
+    *: "[ Path ]"
+  </dest>
+  <voice>
+    *: "Path"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_PROP_EXT
+  desc: in onplay menu
+  user:
+  <source>
+    *: "[ Extention ]"
+  </source>
+  <dest>
+    *: "[ Extention ]"
+  </dest>
+  <voice>
+    *: "Extention"
+  </voice>
+</phrase>
+<phrase>
+  id: LANG_PROP_FILESIZE
+  desc: in onplay menu
+  user:
+  <source>
+    *: "[ Filesize ]"
+  </source>
+  <dest>
+    *: "[ Filesize ]"
+  </dest>
+  <voice>
+    *: "Filesize"
+  </voice>
+</phrase>
