x265 update 2.7, findobj upgrade, fix svg init, fix for dragchkbox buttonpress, add...
[goodguy/history.git] / cinelerra-5.1 / guicast / bcfilebox.C
index e050bfe3b2150dd9f75b2233d736594ee53e308e..8ffafb8169990717fac71831c4cd1457f9fba3a1 100644 (file)
@@ -254,7 +254,8 @@ int BC_FileBoxFilterMenu::handle_event()
 
 
 BC_FileBoxSizeFormat::BC_FileBoxSizeFormat(int x, int y, BC_FileBox *file_box)
- : BC_Button(x, y, BC_WindowBase::get_resources()->filebox_szfmt_images)
+ : BC_Button(x, y, &BC_WindowBase::get_resources()->
+               filebox_szfmt_images[3*file_box->size_format])
 {
        this->file_box = file_box;
        set_tooltip(_("Size numeric format"));
@@ -268,6 +269,9 @@ int BC_FileBoxSizeFormat::handle_event()
        if( ++file_box->size_format > FILEBOX_SIZE_THOU )
                file_box->size_format = FILEBOX_SIZE_RAW;
        BC_WindowBase::get_resources()->filebox_size_format = file_box->size_format;
+       set_images(&BC_WindowBase::get_resources()->
+               filebox_szfmt_images[3*file_box->size_format]);
+       draw_face(0);
        file_box->refresh(0);
        return 1;
 }
@@ -557,10 +561,11 @@ void BC_FileBox::create_objects()
        if(!want_directory)
        {
                filter_list.append(new BC_ListBoxItem("*"));
-               filter_list.append(new BC_ListBoxItem("[*.mkv]"));
+               filter_list.append(new BC_ListBoxItem("[*.mkv][*.webm]"));
                filter_list.append(new BC_ListBoxItem("[*.mp4]"));
                filter_list.append(new BC_ListBoxItem("[*.mp2][*.mp3][*.wav]"));
                filter_list.append(new BC_ListBoxItem("[*.avi][*.mpg][*.m2v][*.m1v][*.mov]"));
+               filter_list.append(new BC_ListBoxItem("[*.jpg][*.png][*.gif][*.tiff]"));
                filter_list.append(new BC_ListBoxItem("*.xml"));
                fs->set_filter(get_resources()->filebox_filter);
        }
@@ -781,6 +786,12 @@ static inline int64_t ipow(int m, int n)
        for( int64_t vv=m; n>0; vv*=vv,n>>=1 ) if( n & 1 ) v *= vv;
        return v;
 }
+static inline int ilen(int64_t v)
+{
+        int len = 1;
+        while( len<16 && (v/=10)>0 ) ++len;
+        return len;
+}
 
 int BC_FileBox::create_tables()
 {
@@ -817,21 +828,23 @@ int BC_FileBox::create_tables()
                                                static const long double kk = logl(1000.)/logl(1024.);
                                                size = expl(kk*logl((long double)size)) + 0.5;
                                        }
-                                       int len = 1;
-                                       for( int64_t s=size; len<16 && (s/=10)>0; ++len );
-                                       int drop = len-3;
+                                       int len = ilen(size), drop = len-3, round = 1;
+                                       if( round && drop > 0 ) { //round
+                                               size += ipow(10,drop)/2;
+                                               len = ilen(size);  drop = len-3;
+                                       }
                                        size /= ipow(10,drop);
                                        int sfx = (len-1)/3;
                                        int digits = (sfx+1)*3 - len;
                                        int64_t frac = ipow(10,digits);
                                        int mant  = size / frac;
                                        int fraction = size - mant*frac;
-                                       if( fraction )
-                                               sprintf(string, "%d.%0*d%s",
-                                                       mant, digits, fraction, suffix[sfx]);
+                                       sfx = *suffix[sfx];
+                                       if( sfx && size_format == FILEBOX_SIZE_1000 ) sfx += 'a'-'A';
+                                       if( digits )
+                                               sprintf(string, "%d.%0*d%c", mant, digits, fraction, sfx);
                                        else
-                                               sprintf(string, "%d%s",
-                                                       mant, suffix[sfx]);
+                                               sprintf(string, "%d%c", mant, sfx);
                                }
                                else {
                                        sprintf(string, "%jd", size);