X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fbatchrender.C;h=4c5f1d4bac8b1375afda0e996fe89eb3a88f3cfa;hp=bbd66d47fa955d1756cdd70a35f147bc587812a3;hb=b402ed7f93de4c98e6651483eb8561cf1c37ec9a;hpb=7c199a42936462d662ee405fe0b4df5ac74850dc diff --git a/cinelerra-5.1/cinelerra/batchrender.C b/cinelerra-5.1/cinelerra/batchrender.C index bbd66d47..4c5f1d4b 100644 --- a/cinelerra-5.1/cinelerra/batchrender.C +++ b/cinelerra-5.1/cinelerra/batchrender.C @@ -55,21 +55,10 @@ #include "transportque.h" #include "vframe.h" - -static const char *list_titles[] = -{ - _("Enabled"), - _("Output"), - _("EDL"), - _("Elapsed") -}; - -static int list_widths[] = -{ - 50, - 100, - 200, - 100 +// Farmed is not present if not preferences->use_renderfarm +int BatchRenderThread::column_widths[] = { 42, 42, 42, 222, 222, 150 }; +const char *BatchRenderThread::column_titles[] = { + _("Enabled"), _("Labeled"), _("Farmed"), _("Output"), _("EDL"), _("Elapsed") }; BatchRenderMenuItem::BatchRenderMenuItem(MWindow *mwindow) @@ -86,18 +75,13 @@ int BatchRenderMenuItem::handle_event() } - - - - - - -BatchRenderJob::BatchRenderJob(Preferences *preferences) +BatchRenderJob::BatchRenderJob(Preferences *preferences, int labeled, int farmed) { this->preferences = preferences; + this->labeled = labeled; + this->farmed = farmed >= 0 ? farmed : preferences->use_renderfarm; asset = new Asset; edl_path[0] = 0; - strategy = 0; enabled = 1; elapsed = 0; } @@ -109,10 +93,11 @@ BatchRenderJob::~BatchRenderJob() void BatchRenderJob::copy_from(BatchRenderJob *src) { + enabled = src->enabled; + farmed = src->farmed; + labeled = src->labeled; asset->copy_from(src->asset, 0); strcpy(edl_path, src->edl_path); - strategy = src->strategy; - enabled = src->enabled; elapsed = 0; } @@ -120,18 +105,16 @@ void BatchRenderJob::load(FileXML *file) { int result = 0; + enabled = file->tag.get_property("ENABLED", enabled); + farmed = file->tag.get_property("FARMED", farmed); + labeled = file->tag.get_property("STRATEGY", labeled); edl_path[0] = 0; file->tag.get_property("EDL_PATH", edl_path); - strategy = file->tag.get_property("STRATEGY", strategy); - enabled = file->tag.get_property("ENABLED", enabled); elapsed = file->tag.get_property("ELAPSED", elapsed); - fix_strategy(); result = file->read_tag(); - if(!result) - { - if(file->tag.title_is("ASSET")) - { + if( !result ) { + if( file->tag.title_is("ASSET") ) { file->tag.get_property("SRC", asset->path); asset->read(file, 0); // The compression parameters are stored in the defaults to reduce @@ -147,27 +130,20 @@ void BatchRenderJob::load(FileXML *file) void BatchRenderJob::save(FileXML *file) { - file->tag.set_property("EDL_PATH", edl_path); - file->tag.set_property("STRATEGY", strategy); file->tag.set_property("ENABLED", enabled); + file->tag.set_property("FARMED", farmed); + file->tag.set_property("LABELED", labeled); + file->tag.set_property("EDL_PATH", edl_path); file->tag.set_property("ELAPSED", elapsed); file->append_tag(); file->append_newline(); - asset->write(file, - 0, - ""); + asset->write(file, 0, ""); // The compression parameters are stored in the defaults to reduce // coding maintenance. The defaults must now be stuffed into the XML for // unique storage. BC_Hash defaults; - asset->save_defaults(&defaults, - "", - 0, - 1, - 0, - 0, - 0); + asset->save_defaults(&defaults, "", 0, 1, 0, 0, 0); char *string; defaults.save_string(string); file->append_text(string); @@ -177,20 +153,14 @@ void BatchRenderJob::save(FileXML *file) file->append_newline(); } -void BatchRenderJob::fix_strategy() +int BatchRenderJob::get_strategy() { - strategy = Render::fix_strategy(strategy, preferences->use_renderfarm); +// if set, overrides farmed, labeled + int use_renderfarm = farmed && preferences->use_renderfarm ? 1 : 0; + return Render::get_strategy(use_renderfarm, labeled); } - - - - - - - - BatchRenderThread::BatchRenderThread(MWindow *mwindow) : BC_DialogThread() { @@ -203,7 +173,6 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow) preferences = 0; warn = 1; render = 0; - file_entries = 0; batch_path[0] = 0; } @@ -219,7 +188,6 @@ BatchRenderThread::BatchRenderThread() preferences = 0; warn = 1; render = 0; - file_entries = 0; batch_path[0] = 0; } @@ -229,10 +197,6 @@ BatchRenderThread::~BatchRenderThread() delete boot_defaults; delete preferences; delete render; - if( file_entries ) { - file_entries->remove_all_objects(); - delete file_entries; - } } void BatchRenderThread::reset(const char *path) @@ -245,10 +209,6 @@ void BatchRenderThread::reset(const char *path) rendering_job = -1; delete default_job; default_job = 0; jobs.remove_all_objects(); - if(file_entries) { - file_entries->remove_all_objects(); - delete file_entries; file_entries = 0; - } } void BatchRenderThread::handle_close_event(int result) @@ -264,31 +224,11 @@ BC_Window* BatchRenderThread::new_gui() current_start = 0.0; current_end = 0.0; default_job = new BatchRenderJob(mwindow->preferences); - - - if(!file_entries) - { - file_entries = new ArrayList; - FileSystem fs; - char string[BCTEXTLEN]; - // Load current directory - fs.update(getcwd(string, BCTEXTLEN)); - for(int i = 0; i < fs.total_files(); i++) - { - file_entries->append( - new BC_ListBoxItem( - fs.get_entry(i)->get_name())); - } - } - load_jobs(batch_path, mwindow->preferences); load_defaults(mwindow->defaults); - this->gui = new BatchRenderGUI(mwindow, - this, - mwindow->session->batchrender_x, - mwindow->session->batchrender_y, - mwindow->session->batchrender_w, - mwindow->session->batchrender_h); + this->gui = new BatchRenderGUI(mwindow, this, + mwindow->session->batchrender_x, mwindow->session->batchrender_y, + mwindow->session->batchrender_w, mwindow->session->batchrender_h); this->gui->create_objects(); return this->gui; } @@ -304,18 +244,14 @@ void BatchRenderThread::load_jobs(char *path, Preferences *preferences) if( !path[0] ) create_path(path); file.read_from_file(path); - while(!result) - { - if(!(result = file.read_tag())) - { - if(file.tag.title_is("JOBS")) - { + while( !result ) { + if( !(result = file.read_tag()) ) { + if( file.tag.title_is("JOBS") ) { warn = file.tag.get_property("WARN", 1); } - else if(file.tag.title_is("JOB")) - { - BatchRenderJob *job; - jobs.append(job = new BatchRenderJob(preferences)); + else if( file.tag.title_is("JOB") ) { + BatchRenderJob *job = new BatchRenderJob(preferences); + jobs.append(job); job->load(&file); } } @@ -330,8 +266,7 @@ void BatchRenderThread::save_jobs(char *path) file.append_tag(); file.append_newline(); - for(int i = 0; i < jobs.total; i++) - { + for( int i = 0; i < jobs.total; i++ ) { file.tag.set_title("JOB"); jobs.values[i]->save(&file); } @@ -346,37 +281,31 @@ void BatchRenderThread::save_jobs(char *path) void BatchRenderThread::load_defaults(BC_Hash *defaults) { - if(default_job) - { + if( default_job ) { default_job->asset->load_defaults(defaults, "BATCHRENDER_", 1, 1, 1, 1, 1); - default_job->fix_strategy(); } - for(int i = 0; i < BATCHRENDER_COLUMNS; i++) - { + for( int i = 0; i < BATCHRENDER_COLUMNS; i++ ) { char string[BCTEXTLEN]; sprintf(string, "BATCHRENDER_COLUMN%d", i); - column_width[i] = defaults->get(string, list_widths[i]); + list_width[i] = defaults->get(string, column_widths[i]); } } void BatchRenderThread::save_defaults(BC_Hash *defaults) { - if(default_job) - { + if( default_job ) { default_job->asset->save_defaults(defaults, "BATCHRENDER_", 1, 1, 1, 1, 1); - defaults->update("BATCHRENDER_STRATEGY", default_job->strategy); } - for(int i = 0; i < BATCHRENDER_COLUMNS; i++) - { + for( int i=0; iupdate(string, column_width[i]); + defaults->update(string, list_width[i]); } // defaults->update("BATCHRENDER_JOB", current_job); - if(mwindow) + if( mwindow ) mwindow->save_defaults(); else defaults->save(); @@ -403,10 +332,9 @@ void BatchRenderThread::new_job() void BatchRenderThread::delete_job() { - if(current_job < jobs.total && current_job >= 0) - { + if( current_job < jobs.total && current_job >= 0 ) { jobs.remove_object_number(current_job); - if(current_job > 0) current_job--; + if( current_job > 0 ) current_job--; gui->create_list(1); gui->change_job(); } @@ -429,7 +357,7 @@ void BatchRenderThread::update_selected_edl() FileXML xml_file; char *path = get_current_edl(); EDL *edl = mwindow->edl; - edl->save_xml(&xml_file, path, 0, 0); + edl->save_xml(&xml_file, path); xml_file.terminate_string(); if( xml_file.write_to_file(path) ) { char msg[BCTEXTLEN]; @@ -440,16 +368,8 @@ void BatchRenderThread::update_selected_edl() BatchRenderJob* BatchRenderThread::get_current_job() { - BatchRenderJob *result; - if(current_job >= jobs.total || current_job < 0) - { - result = default_job; - } - else - { - result = jobs.values[current_job]; - } - return result; + return current_job >= 0 && current_job < jobs.total ? + jobs.values[current_job] : default_job; } @@ -537,11 +457,9 @@ int BatchRenderThread::test_edl_files() void BatchRenderThread::calculate_dest_paths(ArrayList *paths, Preferences *preferences) { - for(int i = 0; i < jobs.total; i++) - { + for( int i = 0; i < jobs.total; i++ ) { BatchRenderJob *job = jobs.values[i]; - if(job->enabled && *job->edl_path != '@') - { + if( job->enabled && *job->edl_path != '@' ) { PackageDispatcher *packages = new PackageDispatcher; // Load EDL @@ -561,7 +479,7 @@ void BatchRenderThread::calculate_dest_paths(ArrayList *paths, packages->create_packages(mwindow, command->get_edl(), preferences, - job->strategy, + job->get_strategy(), job->asset, command->start_position, command->end_position, @@ -619,7 +537,7 @@ void BatchRenderThread::start_rendering(char *config_path, //PRINT_TRACE // Test EDL files for existence - if(test_edl_files()) return; + if( test_edl_files() ) return; //PRINT_TRACE @@ -632,20 +550,18 @@ void BatchRenderThread::start_rendering(char *config_path, int result = ConfirmSave::test_files(0, &paths); paths.remove_all_objects(); // Abort on any existing file because it's so hard to set this up. - if(result) return; + if( result ) return; //PRINT_TRACE render = new Render(0); //PRINT_TRACE - render->start_batches(&jobs, - boot_defaults, - preferences); + render->start_batches(&jobs, boot_defaults, preferences); //PRINT_TRACE } void BatchRenderThread::start_rendering() { - if(is_rendering) return; + if( is_rendering ) return; is_rendering = 1; save_jobs(batch_path); @@ -653,7 +569,7 @@ void BatchRenderThread::start_rendering() gui->button_disable(); // Test EDL files for existence - if(test_edl_files()) return; + if( test_edl_files() ) return; // Predict all destination paths ArrayList paths; @@ -665,8 +581,7 @@ void BatchRenderThread::start_rendering() paths.remove_all_objects(); // User cancelled - if(result) - { + if( result ) { is_rendering = 0; gui->button_enable(); return; @@ -677,7 +592,7 @@ void BatchRenderThread::start_rendering() void BatchRenderThread::stop_rendering() { - if(!is_rendering) return; + if( !is_rendering ) return; mwindow->render->stop_operation(); is_rendering = 0; } @@ -685,13 +600,11 @@ void BatchRenderThread::stop_rendering() void BatchRenderThread::update_active(int number) { gui->lock_window("BatchRenderThread::update_active"); - if(number >= 0) - { + if( number >= 0 ) { current_job = number; rendering_job = number; } - else - { + else { rendering_job = -1; is_rendering = 0; } @@ -704,15 +617,13 @@ void BatchRenderThread::update_done(int number, double elapsed_time) { gui->lock_window("BatchRenderThread::update_done"); - if(number < 0) - { + if( number < 0 ) { gui->button_enable(); } - else - { + else { jobs.values[number]->enabled = 0; jobs.values[number]->elapsed = elapsed_time; - if(create_list) gui->create_list(1); + if( create_list ) gui->create_list(1); } gui->unlock_window(); } @@ -720,14 +631,13 @@ void BatchRenderThread::update_done(int number, void BatchRenderThread::move_batch(int src, int dst) { BatchRenderJob *src_job = jobs.values[src]; - if(dst < 0) dst = jobs.total - 1; + if( dst < 0 ) dst = jobs.total - 1; - if(dst != src) - { - for(int i = src; i < jobs.total - 1; i++) + if( dst != src ) { + for( int i = src; i < jobs.total - 1; i++ ) jobs.values[i] = jobs.values[i + 1]; -// if(dst > src) dst--; - for(int i = jobs.total - 1; i > dst; i--) +// if( dst > src ) dst--; + for( int i = jobs.total - 1; i > dst; i-- ) jobs.values[i] = jobs.values[i - 1]; jobs.values[dst] = src_job; gui->create_list(1); @@ -756,11 +666,14 @@ BatchRenderGUI::BatchRenderGUI(MWindow *mwindow, { this->mwindow = mwindow; this->thread = thread; + use_renderfarm = 0; } BatchRenderGUI::~BatchRenderGUI() { lock_window("BatchRenderGUI::~BatchRenderGUI"); + loadlist_batch->stop(); + savelist_batch->stop(); delete format_tools; unlock_window(); } @@ -783,9 +696,15 @@ void BatchRenderGUI::create_objects() format_tools = new BatchFormat(mwindow, this, thread->get_current_asset()); format_tools->set_w(get_w() / 2); + BatchRenderJob *current_job = thread->get_current_job(); format_tools->create_objects(x1, y1, 1, 1, 1, 1, 0, 1, 0, 0, - &thread->get_current_job()->strategy, 0); - + ¤t_job->labeled, 0); + if( mwindow->preferences->use_renderfarm ) { + use_renderfarm = new BatchRenderUseFarm(thread, x1, y1, + ¤t_job->farmed); + add_subwindow(use_renderfarm); + y1 += use_renderfarm->get_h() + 10; + } // input EDL add_subwindow(edl_path_title = new BC_Title(x2, y2, _("EDL Path:"))); y2 += edl_path_title->get_h() + mwindow->theme->widget_border; @@ -809,7 +728,6 @@ void BatchRenderGUI::create_objects() x += new_batch->get_w() + mwindow->theme->widget_border; add_subwindow(delete_batch = new BatchRenderDelete(thread, x, y)); x = x2; y += delete_batch->get_h() + mwindow->theme->widget_border; - y += mwindow->theme->widget_border; add_subwindow(savelist_batch = new BatchRenderSaveList(thread, x, y)); x += savelist_batch->get_w() + mwindow->theme->widget_border; add_subwindow(loadlist_batch = new BatchRenderLoadList(thread, x, y)); @@ -871,7 +789,8 @@ int BatchRenderGUI::resize_event(int w, int h) output_path_title->reposition_window(x1, y1); y1 += output_path_title->get_h() + mwindow->theme->widget_border; format_tools->reposition_window(x1, y1); - + if( use_renderfarm ) + use_renderfarm->reposition_window(x1, y1); // input EDL x = x2, y = y2; edl_path_title->reposition_window(x, y); @@ -895,7 +814,7 @@ int BatchRenderGUI::resize_event(int w, int h) x += savelist_batch->get_w() + mwindow->theme->widget_border; loadlist_batch->reposition_window(x, y); y += loadlist_batch->get_h() + mwindow->theme->widget_border; - warning->reposition_window(x, y); + warning->reposition_window(x2, y); y1 = 15 + BC_GenericButton::calculate_h() + mwindow->theme->widget_border; y2 = get_h() - y1 - batch_list->get_h(); @@ -934,79 +853,80 @@ int BatchRenderGUI::close_event() void BatchRenderGUI::create_list(int update_widget) { - for(int i = 0; i < BATCHRENDER_COLUMNS; i++) - { - list_columns[i].remove_all_objects(); + for( int i = 0; i < BATCHRENDER_COLUMNS; i++ ) { + list_items[i].remove_all_objects(); } - for(int i = 0; i < thread->jobs.total; i++) - { + const char **column_titles = BatchRenderThread::column_titles; + list_columns = 0; + list_titles[list_columns] = column_titles[ENABLED_COL]; + list_width[list_columns++] = thread->list_width[ENABLED_COL]; + list_titles[list_columns] = column_titles[LABELED_COL]; + list_width[list_columns++] = thread->list_width[LABELED_COL]; + if( mwindow->preferences->use_renderfarm ) { + list_titles[list_columns] = column_titles[FARMED_COL]; + list_width[list_columns++] = thread->list_width[FARMED_COL]; + } + list_titles[list_columns] = column_titles[OUTPUT_COL]; + list_width[list_columns++] = thread->list_width[OUTPUT_COL]; + list_titles[list_columns] = column_titles[EDL_COL]; + list_width[list_columns++] = thread->list_width[EDL_COL]; + list_titles[list_columns] = column_titles[ELAPSED_COL]; + list_width[list_columns++] = thread->list_width[ELAPSED_COL]; + + for( int i = 0; i < thread->jobs.total; i++ ) { BatchRenderJob *job = thread->jobs.values[i]; char string[BCTEXTLEN]; - BC_ListBoxItem *enabled = new BC_ListBoxItem(job->enabled ? - (char*)"X" : - (char*)" "); - BC_ListBoxItem *item1 = new BC_ListBoxItem(job->asset->path); - BC_ListBoxItem *item2 = new BC_ListBoxItem(job->edl_path); - BC_ListBoxItem *item3; - if(job->elapsed) - item3 = new BC_ListBoxItem( - Units::totext(string, - job->elapsed, - TIME_HMS2)); - else - item3 = new BC_ListBoxItem(_("Unknown")); - list_columns[0].append(enabled); - list_columns[1].append(item1); - list_columns[2].append(item2); - list_columns[3].append(item3); - if(i == thread->current_job) - { + BC_ListBoxItem *enabled = new BC_ListBoxItem(job->enabled ? "X" : " "); + BC_ListBoxItem *labeled = new BC_ListBoxItem(job->labeled ? "X" : " "); + BC_ListBoxItem *farmed = !mwindow->preferences->use_renderfarm ? 0 : + new BC_ListBoxItem(job->farmed ? "X" : " "); + BC_ListBoxItem *out_path = new BC_ListBoxItem(job->asset->path); + BC_ListBoxItem *edl_path = new BC_ListBoxItem(job->edl_path); + BC_ListBoxItem *elapsed = new BC_ListBoxItem(!job->elapsed ? _("Unknown") : + Units::totext(string, job->elapsed, TIME_HMS2)); + int col = 0; + list_items[col++].append(enabled); + list_items[col++].append(labeled); + if( farmed ) list_items[col++].append(farmed); + list_items[col++].append(out_path); + list_items[col++].append(edl_path); + list_items[col].append(elapsed); + if( i == thread->current_job ) { enabled->set_selected(1); - item1->set_selected(1); - item2->set_selected(1); - item3->set_selected(1); + labeled->set_selected(1); + if( farmed ) farmed->set_selected(1); + out_path->set_selected(1); + edl_path->set_selected(1); + elapsed->set_selected(1); } - if(i == thread->rendering_job) - { + if( i == thread->rendering_job ) { enabled->set_color(RED); - item1->set_color(RED); - item2->set_color(RED); - item3->set_color(RED); + labeled->set_color(RED); + if( farmed ) farmed->set_color(RED); + out_path->set_color(RED); + edl_path->set_color(RED); + elapsed->set_color(RED); } } - if(update_widget) - { - batch_list->update(list_columns, - list_titles, - thread->column_width, - BATCHRENDER_COLUMNS, - batch_list->get_xposition(), - batch_list->get_yposition(), - batch_list->get_highlighted_item(), // Flat index of item cursor is over - 1, // set all autoplace flags to 1 - 1); + if( update_widget ) { + batch_list->update(list_items, list_titles, list_width, list_columns, + batch_list->get_xposition(), batch_list->get_yposition(), + batch_list->get_highlighted_item(), 1, 1); } } void BatchRenderGUI::change_job() { BatchRenderJob *job = thread->get_current_job(); - format_tools->update(job->asset, &job->strategy); + format_tools->update(job->asset, &job->labeled); + if( use_renderfarm ) use_renderfarm->update(&job->farmed); edl_path_text->update(job->edl_path); } - - - - - - -BatchFormat::BatchFormat(MWindow *mwindow, - BatchRenderGUI *gui, - Asset *asset) +BatchFormat::BatchFormat(MWindow *mwindow, BatchRenderGUI *gui, Asset *asset) : FormatTools(mwindow, gui, asset) { this->gui = gui; @@ -1024,26 +944,9 @@ int BatchFormat::handle_event() return 1; } - - - - - - - - - - BatchRenderEDLPath::BatchRenderEDLPath(BatchRenderThread *thread, - int x, - int y, - int w, - char *text) - : BC_TextBox(x, - y, - w, - 1, - text) + int x, int y, int w, char *text) + : BC_TextBox(x, y, w, 1, text) { this->thread = thread; } @@ -1051,19 +954,12 @@ BatchRenderEDLPath::BatchRenderEDLPath(BatchRenderThread *thread, int BatchRenderEDLPath::handle_event() { -// Suggestions - calculate_suggestions(thread->file_entries); - + calculate_suggestions(); strcpy(thread->get_current_edl(), get_text()); thread->gui->create_list(1); return 1; } - - - - - BatchRenderNew::BatchRenderNew(BatchRenderThread *thread, int x, int y) @@ -1078,9 +974,7 @@ int BatchRenderNew::handle_event() return 1; } -BatchRenderDelete::BatchRenderDelete(BatchRenderThread *thread, - int x, - int y) +BatchRenderDelete::BatchRenderDelete(BatchRenderThread *thread, int x, int y) : BC_GenericButton(x, y, _("Delete")) { this->thread = thread; @@ -1094,9 +988,7 @@ int BatchRenderDelete::handle_event() -BatchRenderSaveList::BatchRenderSaveList(BatchRenderThread *thread, - int x, - int y) +BatchRenderSaveList::BatchRenderSaveList(BatchRenderThread *thread, int x, int y) : BC_GenericButton(x, y, _("Save Jobs")) { this->thread = thread; @@ -1106,25 +998,23 @@ BatchRenderSaveList::BatchRenderSaveList(BatchRenderThread *thread, } BatchRenderSaveList::~BatchRenderSaveList() +{ + stop(); + delete startup_lock; +} + +void BatchRenderSaveList::stop() { startup_lock->lock("BatchRenderSaveList::~BrowseButton"); - if(gui) - { - gui->lock_window(); - gui->set_done(1); - gui->unlock_window(); - } + if( gui ) gui->set_done(1); startup_lock->unlock(); Thread::join(); - delete startup_lock; } int BatchRenderSaveList::handle_event() { - if(Thread::running()) - { - if(gui) - { + if( Thread::running() ) { + if( gui ) { gui->lock_window(); gui->raise_window(); gui->unlock_window(); @@ -1152,28 +1042,25 @@ void BatchRenderSaveList::run() filewindow.create_objects(); int result2 = filewindow.run_window(); - if(!result2) { + if( !result2 ) { strcpy(thread->batch_path, filewindow.get_submitted_path()); thread->gui->batch_path->update(thread->batch_path); thread->mwindow->defaults->update("DEFAULT_BATCHLOADPATH", thread->batch_path); thread->save_jobs(thread->batch_path); } - this->thread->gui->flush(); startup_lock->lock("BatchRenderLoadList::run"); gui = 0; startup_lock->unlock(); } int BatchRenderSaveList::keypress_event() { - if (get_keypress() == 's' || - get_keypress() == 'S') return handle_event(); + if( get_keypress() == 's' || + get_keypress() == 'S' ) return handle_event(); return 0; } - - BatchRenderLoadList::BatchRenderLoadList(BatchRenderThread *thread, int x, int y) @@ -1187,22 +1074,23 @@ BatchRenderLoadList::BatchRenderLoadList(BatchRenderThread *thread, } BatchRenderLoadList::~BatchRenderLoadList() +{ + stop(); + delete startup_lock; +} + +void BatchRenderLoadList::stop() { startup_lock->lock("BatchRenderLoadList::~BrowseButton"); - if(gui) { - gui->lock_window(); - gui->set_done(1); - gui->unlock_window(); - } + if( gui ) gui->set_done(1); startup_lock->unlock(); Thread::join(); - delete startup_lock; } int BatchRenderLoadList::handle_event() { - if(Thread::running()) { - if(gui) { + if( Thread::running() ) { + if( gui ) { gui->lock_window(); gui->raise_window(); gui->unlock_window(); @@ -1230,23 +1118,24 @@ void BatchRenderLoadList::run() filewindow.create_objects(); int result2 = filewindow.run_window(); - if(!result2) { + if( !result2 ) { strcpy(thread->batch_path, filewindow.get_submitted_path()); thread->gui->batch_path->update(thread->batch_path); thread->mwindow->defaults->update("DEFAULT_BATCHLOADPATH", thread->batch_path); thread->load_jobs(thread->batch_path, thread->mwindow->preferences); thread->gui->create_list(1); + thread->current_job = 0; + thread->gui->change_job(); } - thread->gui->flush(); startup_lock->lock("BatchRenderLoadList::run"); gui = 0; startup_lock->unlock(); } int BatchRenderLoadList::keypress_event() { - if (get_keypress() == 'o' || - get_keypress() == 'O') return handle_event(); + if( get_keypress() == 'o' || + get_keypress() == 'O' ) return handle_event(); return 0; } @@ -1279,27 +1168,11 @@ int BatchRenderUpdateEDL::handle_event() } - - BatchRenderList::BatchRenderList(BatchRenderThread *thread, - int x, - int y, - int w, - int h) - : BC_ListBox(x, - y, - w, - h, - LISTBOX_TEXT, - thread->gui->list_columns, - list_titles, - thread->column_width, - BATCHRENDER_COLUMNS, - 0, - 0, - LISTBOX_SINGLE, - ICON_LEFT, - 1) + int x, int y, int w, int h) + : BC_ListBox(x, y, w, h, LISTBOX_TEXT, thread->gui->list_items, + thread->gui->list_titles, thread->gui->list_width, thread->gui->list_columns, + 0, 0, LISTBOX_SINGLE, ICON_LEFT, 1) { this->thread = thread; dragging_item = 0; @@ -1315,28 +1188,36 @@ int BatchRenderList::selection_changed() { thread->current_job = get_selection_number(0, 0); thread->gui->change_job(); - if(get_cursor_x() < thread->column_width[0]) - { - BatchRenderJob *job = thread->get_current_job(); + int cursor_x = get_cursor_x(); + BatchRenderJob *job = thread->get_current_job(); + int col_x = 0, changed = 1; + if( cursor_x < (col_x += thread->list_width[ENABLED_COL]) ) job->enabled = !job->enabled; + else if( cursor_x < (col_x += thread->list_width[LABELED_COL]) ) + job->labeled = job->edl_path[0] != '@' ? !job->labeled : 0; + else if( thread->gui->use_renderfarm && + cursor_x < (col_x += thread->list_width[FARMED_COL]) ) + job->farmed = job->edl_path[0] != '@' ? !job->farmed : 0; + else + changed = 0; + if( changed ) { thread->gui->create_list(1); + thread->gui->change_job(); } return 1; } int BatchRenderList::column_resize_event() { - for(int i = 0; i < BATCHRENDER_COLUMNS; i++) - { - thread->column_width[i] = get_column_width(i); + for( int i = 0; i < BATCHRENDER_COLUMNS; i++ ) { + thread->list_width[i] = get_column_width(i); } return 1; } int BatchRenderList::drag_start_event() { - if(BC_ListBox::drag_start_event()) - { + if( BC_ListBox::drag_start_event() ) { dragging_item = 1; return 1; } @@ -1346,8 +1227,7 @@ int BatchRenderList::drag_start_event() int BatchRenderList::drag_motion_event() { - if(BC_ListBox::drag_motion_event()) - { + if( BC_ListBox::drag_motion_event() ) { return 1; } return 0; @@ -1355,12 +1235,10 @@ int BatchRenderList::drag_motion_event() int BatchRenderList::drag_stop_event() { - if(dragging_item) - { + if( dragging_item ) { int src = get_selection_number(0, 0); int dst = get_highlighted_item(); - if(src != dst) - { + if( src != dst ) { thread->move_batch(src, dst); } BC_ListBox::drag_stop_event(); @@ -1370,22 +1248,8 @@ int BatchRenderList::drag_stop_event() - - - - - - - - - - -BatchRenderStart::BatchRenderStart(BatchRenderThread *thread, - int x, - int y) - : BC_GenericButton(x, - y, - _("Start")) +BatchRenderStart::BatchRenderStart(BatchRenderThread *thread, int x, int y) + : BC_GenericButton(x, y, _("Start")) { this->thread = thread; } @@ -1396,12 +1260,8 @@ int BatchRenderStart::handle_event() return 1; } -BatchRenderStop::BatchRenderStop(BatchRenderThread *thread, - int x, - int y) - : BC_GenericButton(x, - y, - _("Stop")) +BatchRenderStop::BatchRenderStop(BatchRenderThread *thread, int x, int y) + : BC_GenericButton(x, y, _("Stop")) { this->thread = thread; } @@ -1427,13 +1287,8 @@ int BatchRenderWarning::handle_event() return 1; } - -BatchRenderCancel::BatchRenderCancel(BatchRenderThread *thread, - int x, - int y) - : BC_GenericButton(x, - y, - _("Close")) +BatchRenderCancel::BatchRenderCancel(BatchRenderThread *thread, int x, int y) + : BC_GenericButton(x, y, _("Close")) { this->thread = thread; } @@ -1449,8 +1304,7 @@ int BatchRenderCancel::handle_event() int BatchRenderCancel::keypress_event() { - if(get_keypress() == ESC) - { + if( get_keypress() == ESC ) { unlock_window(); thread->stop_rendering(); lock_window("BatchRenderCancel::keypress_event"); @@ -1460,3 +1314,23 @@ int BatchRenderCancel::keypress_event() return 0; } +BatchRenderUseFarm::BatchRenderUseFarm(BatchRenderThread *thread, int x, int y, int *output) + : BC_CheckBox(x, y, *output, _("Use render farm")) +{ + this->thread = thread; + this->output = output; +} + +int BatchRenderUseFarm::handle_event() +{ + *output = get_value(); + thread->gui->create_list(1); + return 1; +} + +void BatchRenderUseFarm::update(int *output) +{ + this->output = output; + BC_CheckBox::update(*output); +} +