X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Floadfile.C;h=d9d9fe78b413dac53729e3276c6868c300ca7c90;hb=0190f5c29f6834ceea98b1f56ca9115145012758;hp=3be7223f77a8f3fbe545f5a4a2110f9488728667;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/loadfile.C b/cinelerra-5.1/cinelerra/loadfile.C index 3be7223f..d9d9fe78 100644 --- a/cinelerra-5.1/cinelerra/loadfile.C +++ b/cinelerra-5.1/cinelerra/loadfile.C @@ -36,6 +36,7 @@ #include "mainsession.h" #include "mwindow.h" #include "mwindowgui.h" +#include "preferences.h" #include "theme.h" @@ -47,6 +48,7 @@ Load::Load(MWindow *mwindow, MainMenu *mainmenu) { this->mwindow = mwindow; this->mainmenu = mainmenu; + this->thread = 0; } Load::~Load() @@ -77,6 +79,9 @@ LoadFileThread::LoadFileThread(MWindow *mwindow, Load *load) { this->mwindow = mwindow; this->load = load; + this->window = 0; + load_mode = LOADMODE_RESOURCESONLY; + edl_mode = LOADMODE_EDL_CLIP; } LoadFileThread::~LoadFileThread() @@ -90,7 +95,7 @@ BC_Window* LoadFileThread::new_gui() sprintf(default_path, "~"); mwindow->defaults->get("DEFAULT_LOADPATH", default_path); - load_mode = mwindow->defaults->get("LOAD_MODE", LOADMODE_REPLACE); + load_mode = mwindow->defaults->get("LOAD_MODE", load_mode); mwindow->gui->lock_window("LoadFileThread::new_gui"); window = new LoadFileWindow(mwindow, this, default_path); @@ -102,68 +107,51 @@ BC_Window* LoadFileThread::new_gui() void LoadFileThread::handle_done_event(int result) { + window->lock_window("LoadFileThread::handle_done_event"); + window->hide_window(); + window->unlock_window(); + + if( !result ) load_apply(); +} + +void LoadFileThread::load_apply() +{ + mwindow->defaults->update("DEFAULT_LOADPATH", window->get_submitted_path()); + mwindow->defaults->update("LOAD_MODE", load_mode); + if( edl_mode == LOADMODE_EDL_FILEREF ) + mwindow->show_warning( + &mwindow->preferences->warn_fileref, + _("Other projects can change this project\n" + "and this can become a broken link")); ArrayList path_list; path_list.set_array_delete(); // Collect all selected files - if(!result) - { - char *in_path, *out_path; - int i = 0; - window->lock_window("LoadFileThread::handle_done_event"); - window->hide_window(); - window->unlock_window(); - - while((in_path = window->get_path(i))) - { - int j; - for(j = 0; j < path_list.total; j++) - { - if(!strcmp(in_path, path_list.values[j])) break; - } - - if(j == path_list.total) - { - path_list.append(out_path = new char[strlen(in_path) + 1]); - strcpy(out_path, in_path); - } - i++; - } + char *in_path; + for( int i=0; (in_path = window->get_path(i))!=0; ++i ) { + int k = path_list.size(); + while( --k >= 0 && strcmp(in_path, path_list.values[k]) ); + if( k < 0 ) path_list.append(cstrdup(in_path)); } - mwindow->defaults->update("DEFAULT_LOADPATH", - window->get_submitted_path()); - mwindow->defaults->update("LOAD_MODE", - load_mode); - // No file selected - if(path_list.total == 0 || result == 1) - { - return; - } - - if( load_mode == LOADMODE_REPLACE ) - mwindow->set_filename(path_list[0]); + if( !path_list.size() ) return; + int replaced = load_mode == LOADMODE_REPLACE || + load_mode == LOADMODE_REPLACE_CONCATENATE ? 1 : 0; mwindow->interrupt_indexes(); mwindow->gui->lock_window("LoadFileThread::run"); - result = mwindow->load_filenames(&path_list, load_mode, 0); + mwindow->load_filenames(&path_list, load_mode, edl_mode, replaced); mwindow->gui->mainmenu->add_load(path_list.values[0]); mwindow->gui->unlock_window(); path_list.remove_all_objects(); mwindow->save_backup(); - mwindow->restart_brender(); - - if(load_mode == LOADMODE_REPLACE || load_mode == LOADMODE_REPLACE_CONCATENATE) - mwindow->session->changes_made = 0; - else - mwindow->session->changes_made = 1; + mwindow->session->changes_made = !replaced ? 1 : 0; } - LoadFileWindow::LoadFileWindow(MWindow *mwindow, LoadFileThread *thread, char *init_directory) @@ -180,6 +168,8 @@ LoadFileWindow::LoadFileWindow(MWindow *mwindow, { this->thread = thread; this->mwindow = mwindow; +// *** CONTEXT_HELP *** + context_help_set_keyword("Loading Files"); } LoadFileWindow::~LoadFileWindow() @@ -194,12 +184,17 @@ void LoadFileWindow::create_objects() lock_window("LoadFileWindow::create_objects"); BC_FileBox::create_objects(); - int x = get_w() / 2 - - LoadMode::calculate_w(this, mwindow->theme) / 2; - int y = get_cancel_button()->get_y() - - LoadMode::calculate_h(this, mwindow->theme); - loadmode = new LoadMode(mwindow, this, x, y, &thread->load_mode, 0); + int x = get_w() / 2 - LoadMode::calculate_w(this, mwindow->theme) / 2; + int y = get_y_margin(); +// always start as clip to match historical behavior + thread->edl_mode = LOADMODE_EDL_CLIP; + loadmode = new LoadMode(mwindow, this, x, y, + &thread->load_mode, &thread->edl_mode, 0, 1); loadmode->create_objects(); + const char *apply = _("Apply"); + x = 3*get_w()/4 - BC_GenericButton::calculate_w(this, apply)/2; + y = get_h() - BC_CancelButton::calculate_h() - yS(16); + add_subwindow(load_file_apply = new LoadFileApply(this, x, y, apply)); show_window(1); unlock_window(); @@ -208,26 +203,32 @@ void LoadFileWindow::create_objects() int LoadFileWindow::resize_event(int w, int h) { - int x = w / 2 - 200; - int y = get_cancel_button()->get_y() - - LoadMode::calculate_h(this, mwindow->theme); draw_background(0, 0, w, h); - + BC_FileBox::resize_event(w, h); + int x = w / 2 - LoadMode::calculate_w(this, mwindow->theme) / 2; + int y = get_y_margin(); loadmode->reposition_window(x, y); - - return BC_FileBox::resize_event(w, h); + const char *apply = load_file_apply->get_text(); + x = 3*get_w()/4 - BC_GenericButton::calculate_w(this, apply)/2; + y = get_h() - BC_CancelButton::calculate_h() - yS(16); + load_file_apply->reposition_window(x, y); + flush(); + return 1; } +LoadFileApply::LoadFileApply(LoadFileWindow *load_file_window, + int x, int y, const char *text) + : BC_GenericButton(x, y, text) +{ + this->load_file_window = load_file_window; +} - - - - - - - - +int LoadFileApply::handle_event() +{ + load_file_window->thread->load_apply(); + return 1; +} LocateFileWindow::LocateFileWindow(MWindow *mwindow, @@ -253,7 +254,7 @@ LocateFileWindow::~LocateFileWindow() LoadPrevious::LoadPrevious(MWindow *mwindow, Load *loadfile) - : BC_MenuItem(""), Thread() + : BC_MenuItem("") { this->mwindow = mwindow; this->loadfile = loadfile; @@ -261,6 +262,7 @@ LoadPrevious::LoadPrevious(MWindow *mwindow, Load *loadfile) int LoadPrevious::handle_event() { + if( !path[0] ) return 1; ArrayList path_list; path_list.set_array_delete(); char *out_path; @@ -279,14 +281,7 @@ int LoadPrevious::handle_event() return 1; } - - -void LoadPrevious::run() -{ -// loadfile->mwindow->load(path, loadfile->append); -} - -int LoadPrevious::set_path(char *path) +int LoadPrevious::set_path(const char *path) { strcpy(this->path, path); return 0;