Fix some bugs with the colors stuff.  You can now specify folder color with the folder extension.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13659 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/filetypes.c b/apps/filetypes.c
index a6ccff3..89933c8 100644
--- a/apps/filetypes.c
+++ b/apps/filetypes.c
@@ -39,6 +39,7 @@
 #include "splash.h"
 #include "buffer.h"
 #include "icons.h"
+#include "logf.h"
 
 /* max filetypes (plugins & icons stored here) */
 #if CONFIG_CODEC == SWCODEC
@@ -160,7 +161,12 @@
     {
         if (!settings_parseline(buffer, &ext, &color))
             continue;
-        for (i=0; i<filetype_count; i++)
+        if (!strcasecmp(ext, "folder"))
+        {
+            custom_colors[0] = hex_to_rgb(color);
+            continue;
+        }
+        for (i=1; i<filetype_count; i++)
         {
             if (filetypes[i].extension &&
                 !strcasecmp(ext, filetypes[i].extension))
@@ -369,12 +375,23 @@
 }
 
 #ifdef HAVE_LCD_COLOR
-int filetype_get_color(int attr)
+int filetype_get_color(const char * name, int attr)
 {
-    int index = find_attr(attr);
-    if (index < 0)
+    char *extension;
+    int i;
+    if ((attr & ATTR_DIRECTORY)==ATTR_DIRECTORY)
+        return custom_colors[0];
+    extension = strrchr(name, '.');
+    if (!extension)
         return -1;
-    return custom_colors[index];
+    extension++;
+    logf("%s %s",name,extension);
+    for (i=1; i<filetype_count; i++)
+    {
+        if (filetypes[i].extension && 
+            !strcasecmp(extension, filetypes[i].extension))
+            return custom_colors[i];
+    }
     return -1;
 }
 #endif
diff --git a/apps/filetypes.h b/apps/filetypes.h
index 13f4e56..52e60ea 100644
--- a/apps/filetypes.h
+++ b/apps/filetypes.h
@@ -60,7 +60,7 @@
 /* Return the attribute (FILE_ATTR_*) of the file */
 int filetype_get_attr(const char* file);
 #ifdef HAVE_LCD_COLOR
-int filetype_get_color(int attr);
+int filetype_get_color(const char * name, int attr);
 #endif
 int filetype_get_icon(int attr);
 /* return the plugin filename associated with the file */
diff --git a/apps/tree.c b/apps/tree.c
index a790400..d0fe47f 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -171,7 +171,7 @@
     struct tree_context * local_tc=(struct tree_context *)data;
     struct entry* dc = local_tc->dircache;
     struct entry* e = &dc[selected_item];
-    return filetype_get_color(e->attr);
+    return filetype_get_color(e->name, e->attr);
 }
 #endif
 
diff --git a/docs/sample.colors b/docs/sample.colors
index 2f90dee..930a34e 100644
--- a/docs/sample.colors
+++ b/docs/sample.colors
@@ -1,4 +1,7 @@
-mp3:904010
-ogg:D04040
-txt:FF0000
-cfg:00FF00
+folder:808080

+ipod:00B0B0

+mp3:00FF00

+flac:00FF00

+ogg:00FF00

+txt:FF0000

+cfg:D00000