X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcfilebox.C;h=80cf3320191f37ec35b4096c7f418485292cb71e;hp=e050bfe3b2150dd9f75b2233d736594ee53e308e;hb=7e5a0760f40ff787cc3d93cb7768a901ebe52809;hpb=877bf33862808d3c3fbe11a31de0000feb915f21 diff --git a/cinelerra-5.1/guicast/bcfilebox.C b/cinelerra-5.1/guicast/bcfilebox.C index e050bfe3..80cf3320 100644 --- a/cinelerra-5.1/guicast/bcfilebox.C +++ b/cinelerra-5.1/guicast/bcfilebox.C @@ -223,7 +223,7 @@ int BC_FileBoxDirectoryText::handle_event() BC_FileBoxFilterText::BC_FileBoxFilterText(int x, int y, BC_FileBox *filebox) - : BC_TextBox(x, y, filebox->get_w() - 50, 1, filebox->get_resources()->filebox_filter) + : BC_TextBox(x, y, filebox->get_w() - x - 50, 1, filebox->get_resources()->filebox_filter) { this->filebox = filebox; } @@ -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; } @@ -462,6 +466,7 @@ BC_FileBox::BC_FileBox(int x, int y, const char *init_path, column_type = new int[columns]; column_width = new int[columns]; + filter_title = 0; filter_text = 0; filter_popup = 0; usethis_button = 0; @@ -548,6 +553,7 @@ BC_FileBox::~BC_FileBox() void BC_FileBox::create_objects() { + lock_window("BC_FileBox::create_objects"); int x = 10, y = 10; BC_Resources *resources = BC_WindowBase::get_resources(); int directory_title_margin = MAX(20, @@ -557,16 +563,17 @@ 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("[*.mp4]")); + filter_list.append(new BC_ListBoxItem("[*.mkv][*.webm]")); + filter_list.append(new BC_ListBoxItem("[*.mp4][*.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][*.JPG][*.png][*.gif][*.tiff]")); filter_list.append(new BC_ListBoxItem("*.xml")); fs->set_filter(get_resources()->filebox_filter); } create_icons(); - create_tables(); + create_tables(0); add_subwindow(ok_button = new BC_FileBoxOK(this)); if(want_directory) @@ -641,9 +648,11 @@ void BC_FileBox::create_objects() y += textbox->get_h() + 10; if(!want_directory) { - add_subwindow(filter_text = new BC_FileBoxFilterText(x, y, this)); + add_subwindow(filter_title = new BC_Title(x, y, _("Specify filter:"))); + int x1 = x + filter_title->get_w() + 10; + add_subwindow(filter_text = new BC_FileBoxFilterText(x1, y, this)); add_subwindow(filter_popup = - new BC_FileBoxFilterMenu(x + filter_text->get_w(), y, this));; + new BC_FileBoxFilterMenu(x1 + filter_text->get_w(), y, this)); } // listbox has to be active because refresh might be called from newfolder_thread @@ -654,6 +663,7 @@ void BC_FileBox::create_objects() refresh(); show_window(); + unlock_window(); } int BC_FileBox::get_listbox_w() @@ -703,7 +713,8 @@ int BC_FileBox::resize_event(int w, int h) w - 30, 0); - + if(filter_title) filter_title->reposition_window(filter_title->get_x(), + h - (get_h() - filter_title->get_y())); if(filter_text) filter_text->reposition_window(filter_text->get_x(), h - (get_h() - filter_text->get_y()), w - (get_w() - filter_text->get_w()), @@ -745,12 +756,19 @@ int BC_FileBox::resize_event(int w, int h) int BC_FileBox::keypress_event() { - switch(get_keypress()) - { - case 'w': - if(ctrl_down()) set_done(1); - return 1; - break; + switch(get_keypress()) { + case 'a': + if( !ctrl_down() ) break; + refresh(0, 1); + return 1; + case 'z': + if( !ctrl_down() ) break; + refresh(0, 0); + return 1; + case 'w': + if( !ctrl_down() ) break; + set_done(1); + return 1; } return 0; } @@ -781,9 +799,16 @@ 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() +int BC_FileBox::create_tables(int select_all) { + int preload_textbox = select_all; delete_tables(); char string[BCTEXTLEN]; BC_ListBoxItem *new_item; @@ -809,6 +834,10 @@ int BC_FileBox::create_tables() // { if(!is_dir) { + if( preload_textbox ) { + preload_textbox = 0; + textbox->update(new_item->get_text()); + } int64_t size = file_item->size; if( (size_format == FILEBOX_SIZE_1000 && size >= 1000) || (size_format == FILEBOX_SIZE_1024 && size >= 1024) ) { @@ -817,21 +846,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); @@ -877,6 +908,12 @@ int BC_FileBox::create_tables() } list_column[column_of_type(FILEBOX_EXTENSION)].append(new_item); // } + + if( !is_dir && select_all ) { + int k = list_column[0].size()-1; + for( int j=0; jset_selected(1); + } } return 0; @@ -925,7 +962,7 @@ int BC_FileBox::column_of_type(int type) -int BC_FileBox::refresh(int reset) +int BC_FileBox::refresh(int reset, int select_all) { fs->set_sort_order(sort_order); fs->set_sort_field(column_type[sort_column]); @@ -933,7 +970,7 @@ int BC_FileBox::refresh(int reset) fs->update(0); else fs->update_sort(); - create_tables(); + create_tables(select_all); listbox->set_master_column(column_of_type(FILEBOX_NAME), 0); listbox->update(list_column, column_titles, column_width, columns, reset>0 ? 0 : listbox->get_xposition(),