file size 3dgts+sfx, timebar tweak, mask msg
[goodguy/history.git] / cinelerra-5.1 / guicast / bcfilebox.C
index 7ca7e4ab8962428b933dbcee3b05ba9f84d3f9c2..03a49e9a9161c3968e3919d7660ce597c567d0d5 100644 (file)
@@ -794,6 +794,13 @@ int BC_FileBox::extract_extension(char *out, const char *in)
        return 0;
 }
 
+static inline int64_t ipow(int m, int n)
+{
+       int64_t v = 1;
+       for( int64_t vv=m; n>0; vv*=vv,n>>=1 ) if( n & 1 ) v *= vv;
+       return v;
+}
+
 int BC_FileBox::create_tables()
 {
        delete_tables();
@@ -821,7 +828,27 @@ int BC_FileBox::create_tables()
 //             {
                        if(!is_dir)
                        {
-                               sprintf(string, "%jd", file_item->size);
+                               int64_t size = file_item->size;
+#if 1
+                               int len = 1;
+                               static const char *suffix[] = { "", "K", "M", "G", "T", "P" };
+                               for( int64_t s=size; len<15 && (s/=10)>0; ++len );
+                               int drop = len-3;
+                               if( drop > 0 ) {
+                                       size /= ipow(10,drop);
+                                       int sfx = (len-1)/3;
+                                       int digits = (sfx+1)*3 - len;
+                                       int64_t frac = ipow(10,digits);
+                                       int mantisa = size / frac;
+                                       int fraction = size - mantisa*frac;
+                                       if( fraction )
+                                               sprintf(string, "%d.%0*d%s", mantisa, digits, fraction, suffix[sfx]);
+                                       else
+                                               sprintf(string, "%d%s", mantisa, suffix[sfx]);
+                               }
+                               else
+#endif
+                                       sprintf(string, "%jd", size);
                                new_item = new BC_ListBoxItem(string, get_resources()->file_color);
                        }
                        else
@@ -835,15 +862,11 @@ int BC_FileBox::create_tables()
 // Date entry
                if(!is_dir || 1)
                {
-                       static const char *month_text[13] = { "Nul",
-                               "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-                               "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-                       };
-                       sprintf(string,
-                               "%s %d, %d",
-                               month_text[file_item->month],
-                               file_item->day,
-                               file_item->year);
+                       struct tm mod_time;
+                       localtime_r(&file_item->mtime, &mod_time);
+                       sprintf(string, "%04d.%02d.%02d  %02d:%02d:%02d",
+                               mod_time.tm_year+1900, mod_time.tm_mon+1, mod_time.tm_mday,
+                               mod_time.tm_hour, mod_time.tm_min, mod_time.tm_sec);
                        new_item = new BC_ListBoxItem(string, get_resources()->file_color);
                }
                else