refresh frame fix, dblclk proxy viewer fix, vicon refresh fix for awdw resize, fix...
[goodguy/history.git] / cinelerra-5.1 / guicast / bcfilebox.C
index 44671608f7302953b6d29fccad9a503d9aca60b6..80cf3320191f37ec35b4096c7f418485292cb71e 100644 (file)
@@ -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;
 }
@@ -466,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;
@@ -552,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,
@@ -561,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)
@@ -645,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
@@ -658,6 +663,7 @@ void BC_FileBox::create_objects()
 
        refresh();
        show_window();
+       unlock_window();
 }
 
 int BC_FileBox::get_listbox_w()
@@ -707,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()),
@@ -749,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;
 }
@@ -792,8 +806,9 @@ static inline int ilen(int64_t v)
         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;
@@ -819,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) ) {
@@ -889,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; j<columns; ++j )
+                               list_column[j][k]->set_selected(1);
+               }
        }
 
        return 0;
@@ -937,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]);
@@ -945,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(),