awindowgui / mwindowedit / label rework
[goodguy/history.git] / cinelerra-5.1 / guicast / bcfilebox.C
index 21898b87a02694a91ce7917ff92de4bf710e9780..207084d7415f054650989df444b4ba79905df8fe 100644 (file)
@@ -128,7 +128,7 @@ int BC_FileBoxListBox::sort_order_event()
 {
        get_resources()->filebox_sortcolumn = filebox->sort_column = get_sort_column();
        get_resources()->filebox_sortorder = filebox->sort_order = get_sort_order();
-       filebox->refresh();
+       filebox->refresh(-1);
        return 1;
 }
 
@@ -215,7 +215,7 @@ int BC_FileBoxDirectoryText::handle_event()
        while( *cp ) ++cp;
        if( cp > path && *--cp != '/' ) return 0;
        char *file_path = FileSystem::basepath(path);
-       char *dir_path = FileSystem::basepath(filebox->fs->get_current_dir());
+       char *dir_path = FileSystem::basepath(filebox->directory);
        int ret = !strcmp(file_path, dir_path) ? 0 : 1;
        if( ret ) {
                strcpy(filebox->directory, file_path);
@@ -497,7 +497,7 @@ BC_FileBox::BC_FileBox(int x, int y, const char *init_path,
        this->want_directory = want_directory;
        if(show_all_files) fs->set_show_all();
        fs->complete_path(this->current_path);
-       fs->complete_path(this->submitted_path);
+       strcpy(this->submitted_path, this->current_path);
        fs->extract_dir(directory, this->current_path);
        fs->extract_name(filename, this->current_path);
 
@@ -535,16 +535,12 @@ BC_FileBox::BC_FileBox(int x, int y, const char *init_path,
 // Test if current directory exists
        if(!fs->is_dir(directory))
        {
-               sprintf(this->current_path, "~");
-               fs->complete_path(this->current_path);
-               fs->set_current_dir(this->current_path);
-//             fs->update(this->current_path);
-               strcpy(directory, fs->get_current_dir());
+               sprintf(directory, "~");
+               fs->complete_path(directory);
+               strcpy(current_path,directory);
                filename[0] = 0;
        }
-       else
-               fs->set_current_dir(this->directory);
-
+       fs->set_current_dir(directory);
 
        if(h_padding == -1)
        {
@@ -580,22 +576,18 @@ void BC_FileBox::create_objects()
        int directory_title_margin = MAX(20,
                resources->filebox_text_images[0]->get_h());
 
-// Create recent dir list
-       create_history();
-
 // Directories aren't filtered in FileSystem so skip this
        if(!want_directory)
        {
                filter_list.append(new BC_ListBoxItem("*"));
-               filter_list.append(new BC_ListBoxItem("[*.ifo][*.vob]"));
+               filter_list.append(new BC_ListBoxItem("[*.mkv]"));
+               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("heroine*"));
                filter_list.append(new BC_ListBoxItem("*.xml"));
                fs->set_filter(get_resources()->filebox_filter);
        }
 
-//     fs->update(directory);
        create_icons();
        create_tables();
 
@@ -633,11 +625,9 @@ void BC_FileBox::create_objects()
 
        add_subwindow(recent_popup = new BC_FileBoxRecent(this, x, y));
        add_subwindow(directory_title = new BC_FileBoxDirectoryText(x, y, this));
-       directory_title->reposition_window(x, y,
-               get_w() - recent_popup->get_w() -  20, 1);
-       recent_popup->reposition_window(
-               x + directory_title->get_w(), y,
-               directory_title->get_w(), 200);
+       directory_title->reposition_window(x, y, get_w() - recent_popup->get_w() -  20, 1);
+       x += directory_title->get_w() + 8;
+       recent_popup->reposition_window(x, y, directory_title->get_w(), 200);
 
        x = 10;
        y += directory_title->get_h() + 5;
@@ -653,8 +643,16 @@ void BC_FileBox::create_objects()
        if( newest >= 0 ) {
                strcpy(directory, resources->filebox_history[newest].path);
                fs->change_dir(directory, 0);
+               strcpy(directory, fs->get_current_dir());
                directory_title->update(fs->get_current_dir());
        }
+       fs->set_sort_order(sort_order);
+       fs->set_sort_field(column_type[sort_column]);
+       fs->update(directory);
+
+// Create recent dir list
+       create_history();
+       update_history();
 
        listbox = 0;
        create_listbox(x, y, get_display_mode());
@@ -674,7 +672,7 @@ void BC_FileBox::create_objects()
 
        rename_thread = new BC_RenameThread(this);
 
-
+       refresh();
        show_window();
 }
 
@@ -738,7 +736,7 @@ int BC_FileBox::resize_event(int w, int h)
                get_w() - recent_popup->get_w() -  20,
                1);
        recent_popup->reposition_window(
-               directory_title->get_x() + directory_title->get_w(),
+               directory_title->get_x() + directory_title->get_w() + 8,
                directory_title->get_y(),
                directory_title->get_w() + recent_popup->get_w(),
                recent_popup->get_h());
@@ -751,22 +749,15 @@ int BC_FileBox::resize_event(int w, int h)
                w - (get_w() - listbox->get_w()),
                h - (get_h() - listbox->get_h()),
                0);
-       icon_button->reposition_window(w - (get_w() - icon_button->get_x()),
-               icon_button->get_y());
-       text_button->reposition_window(w - (get_w() - text_button->get_x()),
-               text_button->get_y());
-       folder_button->reposition_window(w - (get_w() - folder_button->get_x()),
-               folder_button->get_y());
-       rename_button->reposition_window(w - (get_w() - rename_button->get_x()),
-               rename_button->get_y());
-       reload_button->reposition_window(w - (get_w() - reload_button->get_x()),
-               reload_button->get_y());
-       delete_button->reposition_window(w - (get_w() - delete_button->get_x()),
-               delete_button->get_y());
-       updir_button->reposition_window(w - (get_w() - updir_button->get_x()),
-               updir_button->get_y());
-       set_w(w);
-       set_h(h);
+       int dx = w - get_w();
+       icon_button->reposition_window(icon_button->get_x()+dx, icon_button->get_y());
+       text_button->reposition_window(text_button->get_x()+dx, text_button->get_y());
+       folder_button->reposition_window(folder_button->get_x()+dx, folder_button->get_y());
+       rename_button->reposition_window(rename_button->get_x()+dx, rename_button->get_y());
+       reload_button->reposition_window(reload_button->get_x()+dx, reload_button->get_y());
+       delete_button->reposition_window(delete_button->get_x()+dx, delete_button->get_y());
+       updir_button->reposition_window(updir_button->get_x()+dx, updir_button->get_y());
+       set_w(w);  set_h(h);
        get_resources()->filebox_w = get_w();
        get_resources()->filebox_h = get_h();
        flush();
@@ -814,8 +805,6 @@ int BC_FileBox::create_tables()
        fs->set_sort_order(sort_order);
        fs->set_sort_field(column_type[sort_column]);
 
-// Directory is entered before this from a random source
-       fs->update(0);
        for(int i = 0; i < fs->total_files(); i++)
        {
                FileItem *file_item = fs->get_entry(i);
@@ -920,20 +909,11 @@ BC_Pixmap* BC_FileBox::get_icon(char *path, int is_dir)
 
 const char* BC_FileBox::columntype_to_text(int type)
 {
-       switch(type)
-       {
-               case FILEBOX_NAME:
-                       return FILEBOX_NAME_TEXT;
-                       break;
-               case FILEBOX_SIZE:
-                       return FILEBOX_SIZE_TEXT;
-                       break;
-               case FILEBOX_DATE:
-                       return FILEBOX_DATE_TEXT;
-                       break;
-               case FILEBOX_EXTENSION:
-                       return FILEBOX_EXTENSION_TEXT;
-                       break;
+       switch(type) {
+               case FILEBOX_NAME: return FILEBOX_NAME_TEXT;
+               case FILEBOX_SIZE: return FILEBOX_SIZE_TEXT;
+               case FILEBOX_DATE: return FILEBOX_DATE_TEXT;
+               case FILEBOX_EXTENSION: return FILEBOX_EXTENSION_TEXT;
        }
        return "";
 }
@@ -947,13 +927,19 @@ int BC_FileBox::column_of_type(int type)
 
 
 
-int BC_FileBox::refresh(int zscroll)
+int BC_FileBox::refresh(int reset)
 {
+       fs->set_sort_order(sort_order);
+       fs->set_sort_field(column_type[sort_column]);
+       if( reset >= 0 )
+               fs->update(0);
+       else
+               fs->update_sort();
        create_tables();
        listbox->set_master_column(column_of_type(FILEBOX_NAME), 0);
        listbox->update(list_column, column_titles, column_width, columns,
-               !zscroll ? listbox->get_xposition() : 0,
-               !zscroll ? listbox->get_yposition() : 0,
+               reset>0 ? 0 : listbox->get_xposition(),
+               reset>0 ? 0 : listbox->get_yposition(),
                -1, 1);
        return 0;
 }
@@ -973,7 +959,6 @@ void BC_FileBox::move_column(int src, int dst)
 {
        if(src != dst)
        {
-
                ArrayList<BC_ListBoxItem*> *new_columns =
                        new ArrayList<BC_ListBoxItem*>[columns];
                int *new_types = new int[columns];
@@ -1053,12 +1038,17 @@ int BC_FileBox::submit_dir(char *dir)
 
 int BC_FileBox::submit_file(const char *path, int use_this)
 {
+       char path1[BCTEXTLEN];
+       strcpy(path1, path);
+       char *cp = strchr(path1,'\n');
+       if( cp ) *cp = 0;
+
 // Deactivate textbox to hide suggestions
        textbox->deactivate();
 
 // If file wanted, take the current directory as the desired file.
 // If directory wanted, ignore it.
-       if(!path[0] && !want_directory)
+       if(!path1[0] && !want_directory)
        {
 // save complete path
                strcpy(this->current_path, directory);
@@ -1072,9 +1062,9 @@ int BC_FileBox::submit_file(const char *path, int use_this)
        }
 
 // is a directory, change directories
-       if(fs->is_dir(path) && !use_this)
+       if(fs->is_dir(path1) && !use_this)
        {
-               fs->change_dir(path, 0);
+               fs->change_dir(path1, 0);
                refresh(1);
                directory_title->update(fs->get_current_dir());
                strcpy(this->current_path, fs->get_current_dir());
@@ -1093,7 +1083,7 @@ int BC_FileBox::submit_file(const char *path, int use_this)
 // Is a file or desired directory.  Quit the operation.
        {
                char path2[BCTEXTLEN];
-               strcpy(path2, path);
+               strcpy(path2, path1);
 
 // save directory for defaults
                fs->extract_dir(directory, path2);
@@ -1129,7 +1119,7 @@ void BC_FileBox::update_history()
        strcpy(path, directory);
 // enfore one trailing slash
        char *cp = path;
-       while( *cp ) ++cp;
+       while( *cp && *cp != '\n' ) ++cp;
        while( cp > path && *(cp-1) == '/' ) --cp;
        *cp++ = '/';  *cp = 0;