X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmwindow.C;h=9a49f178ceb33b3d0765ad37e1d6235953244629;hp=3aa564d193c28e59bbfdd5500c600665ced717e0;hb=4a6b59824b2db18e6cc49b43a971923d5e5903ae;hpb=7773615d89c9da219d3ade11c265601bfbc07dc0 diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 3aa564d1..9a49f178 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -80,6 +80,7 @@ #include "mainsession.h" #include "mainundo.h" #include "mbuttons.h" +#include "mixersalign.h" #include "mutex.h" #include "mwindowgui.h" #include "mwindow.h" @@ -240,6 +241,7 @@ MWindow::MWindow() speed_edl = 0; proxy_beep = 0; shuttle = 0; + mixers_align = 0; } @@ -249,6 +251,10 @@ MWindow::~MWindow() run_lock->lock("MWindow::~MWindow"); in_destructor = 1; //printf("MWindow::~MWindow %d\n", __LINE__); + if( wwindow && wwindow->is_running() ) + wwindow->close_window(); + if( twindow && twindow->is_running() ) + twindow->close_window(); gui->remote_control->deactivate(); gui->record->stop(); #ifdef HAVE_DVB @@ -260,6 +266,7 @@ MWindow::~MWindow() delete shuttle; shuttle = 0; delete batch_render; batch_render = 0; delete render; render = 0; + delete mixers_align; mixers_align = 0; commit_commercial(); if( commercials && !commercials->remove_user() ) commercials = 0; close_mixers(); @@ -286,16 +293,12 @@ MWindow::~MWindow() if( cwindow && cwindow->gui ) cwindow->gui->close(0); if( lwindow && lwindow->gui ) lwindow->gui->close(0); if( gwindow && gwindow->gui ) gwindow->gui->close(0); - if( twindow && twindow->is_running() ) twindow->close_window(); - if( wwindow && wwindow->is_running() ) wwindow->close_window(); vwindows.remove_all_objects(); zwindows.remove_all_objects(); gui->close(0); if( awindow ) awindow->join(); if( cwindow ) cwindow->join(); if( lwindow ) lwindow->join(); - if( twindow ) twindow->join(); - if( wwindow ) wwindow->join(); if( gwindow ) gwindow->join(); join(); #else @@ -307,8 +310,6 @@ MWindow::~MWindow() close_gui(cwindow); close_gui(lwindow); close_gui(gwindow); - close_gui(twindow); - close_gui(wwindow); vwindows.remove_all_objects(); zwindows.remove_all_objects(); gui->close(0); @@ -1291,7 +1292,7 @@ void MWindow::handle_mixers(EDL *edl, int command, int wait_tracking, track->record = track->play = 0; } zwindow->change_source(mixer_edl); - zwindow->handle_mixer(command, wait_tracking, + zwindow->handle_mixer(command, 0, use_inout, toggle_audio, loop_play, speed); } zwindows_lock->unlock(); @@ -1551,6 +1552,8 @@ void MWindow::init_menus() ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_NONE); ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_UPONE); ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_DOWNONE); + + mixers_align = new MixersAlign(this); } void MWindow::init_indexes() @@ -1589,10 +1592,15 @@ void MWindow::init_exportedl() void MWindow::init_shuttle() { #ifdef HAVE_SHUTTLE - const char *dev_name = Shuttle::probe(); - if( dev_name ) { + int ret = Shuttle::probe(); + if( ret >= 0 ) { shuttle = new Shuttle(this); - shuttle->start(dev_name); + if( shuttle->read_config_file() > 0 ) { + printf("shuttle: bad config file\n"); + delete shuttle; shuttle = 0; + return; + } + shuttle->start(ret); } #endif } @@ -1872,10 +1880,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); sprintf(string, _("Loading %s"), new_asset->path); gui->show_message(string); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); ftype = new_file->open_file(preferences, new_asset, 1, 0); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); result = 1; switch( ftype ) { @@ -1885,7 +1891,8 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); if( new_asset->video_data && ((new_asset->width % 2) || (new_asset->height % 2)) ) { char string[BCTEXTLEN]; - sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."), + sprintf(string, _("%s's resolution is %dx%d.\n" + "Images with odd dimensions may not decode properly."), new_asset->path, new_asset->width, new_asset->height); MainError::show_error(string); } @@ -2013,9 +2020,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); case FILE_IS_XML: { FileXML xml_file; -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); xml_file.read_from_file(filenames->get(i)); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); const char *cin_version = 0; while( !xml_file.read_tag() ) { if( xml_file.tag.title_is("EDL") ) { @@ -2048,7 +2053,6 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); nested_edl->load_xml(&xml_file, LOAD_ALL); int groups = nested_edl->regroup(session->group_number); session->group_number += groups; -//printf("MWindow::load_filenames %p %s\n", nested_edl, nested_edl->project_path); new_edl->create_nested(nested_edl); new_edl->set_path(filenames->get(i)); nested_edl->Garbage::remove_user(); @@ -2058,9 +2062,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); new_edl->load_xml(&xml_file, LOAD_ALL); int groups = new_edl->regroup(session->group_number); session->group_number += groups; -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); test_plugins(new_edl, filenames->get(i)); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); if( load_mode == LOADMODE_REPLACE || load_mode == LOADMODE_REPLACE_CONCATENATE ) { @@ -2106,34 +2108,28 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Paste them. // Don't back up here. - if(new_edls.size()) - { + if( new_edls.size() ) { // For pasting, clear the active region - if(load_mode == LOADMODE_PASTE || - load_mode == LOADMODE_NESTED) - { + if( load_mode == LOADMODE_PASTE || + load_mode == LOADMODE_NESTED ) { double start = edl->local_session->get_selectionstart(); double end = edl->local_session->get_selectionend(); if(!EQUIV(start, end)) - edl->clear(start, - end, + edl->clear(start, end, edl->session->labels_follow_edits, edl->session->plugins_follow_edits, edl->session->autos_follow_edits); - } - paste_edls(&new_edls, load_mode, 0, -1, - edl->session->labels_follow_edits, - edl->session->plugins_follow_edits, - edl->session->autos_follow_edits, - 0); // overwrite + paste_edls(&new_edls, load_mode, 0, -1, + edl->session->labels_follow_edits, + edl->session->plugins_follow_edits, + edl->session->autos_follow_edits, + 0); // overwrite + } + else + paste_edls(&new_edls, load_mode, 0, -1, 1, 1, 1, 0); } - - - -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); - // Add new assets to EDL and schedule assets for index building. int got_indexes = 0; for( int i=0; iassets->update(new_asset); got_indexes = 1; } -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Start examining next batch of index files if(got_indexes) mainindexes->start_build(); -if(debug) printf("MWindow::load_filenames %d\n", __LINE__); // Open plugin GUIs Track *track = edl->tracks->first; - while(track) - { - for(int j = 0; j < track->plugin_set.size(); j++) - { + while( track ) { + for( int j = 0; j < track->plugin_set.size(); j++ ) { PluginSet *plugins = track->plugin_set[j]; Plugin *plugin = plugins->get_first_plugin(); - while(plugin) - { - if(load_mode == LOADMODE_REPLACE || - load_mode == LOADMODE_REPLACE_CONCATENATE) - { - if(plugin->plugin_type == PLUGIN_STANDALONE && - plugin->show) - { + while(plugin) { + if( load_mode == LOADMODE_REPLACE || + load_mode == LOADMODE_REPLACE_CONCATENATE ) { + if( plugin->plugin_type == PLUGIN_STANDALONE && + plugin->show ) { show_plugin(plugin); } } @@ -2937,25 +2925,30 @@ void MWindow::restore_windows() gui->focus(); } -void MWindow::save_layout(int no) -{ - char layout_path[BCTEXTLEN]; - snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE, - File::get_config_path(), no); - session->save_file(layout_path); -} - -void MWindow::load_layout(int no) +void MWindow::load_layout(const char *layout) { - char layout_path[BCTEXTLEN]; - snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE, - File::get_config_path(), no); - session->load_file(layout_path); + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + session->load_file(path); restore_windows(); gui->default_positions(); save_defaults(); } +void MWindow::save_layout(const char *layout) +{ + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + session->save_file(path); +} + +void MWindow::delete_layout(const char *layout) +{ + char path[BCTEXTLEN]; + snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout); + unlink(path); +} + int MWindow::tile_windows(int window_config) { int need_reload = 0;