X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcfilebox.C;h=8ffafb8169990717fac71831c4cd1457f9fba3a1;hb=5877eaa318ed3060f57621657c0888258da41a59;hp=e050bfe3b2150dd9f75b2233d736594ee53e308e;hpb=877bf33862808d3c3fbe11a31de0000feb915f21;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcfilebox.C b/cinelerra-5.1/guicast/bcfilebox.C index e050bfe3..8ffafb81 100644 --- a/cinelerra-5.1/guicast/bcfilebox.C +++ b/cinelerra-5.1/guicast/bcfilebox.C @@ -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);