From: Good Guy Date: Sun, 15 Mar 2020 00:07:44 +0000 (-0600) Subject: 18 new shapewipe transitions from rafa, rework savefile/confirm for nested edl edits X-Git-Tag: 2020-03~13 X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=commitdiff_plain;h=9b18af02dc4ccbf052ef9d70180a3d16c0f9848b 18 new shapewipe transitions from rafa, rework savefile/confirm for nested edl edits --- diff --git a/cinelerra-5.1/cinelerra/confirmsave.C b/cinelerra-5.1/cinelerra/confirmsave.C index 02fa7bbc..fe89aff8 100644 --- a/cinelerra-5.1/cinelerra/confirmsave.C +++ b/cinelerra-5.1/cinelerra/confirmsave.C @@ -20,14 +20,13 @@ */ #include "asset.h" +#include "bchash.h" #include "confirmsave.h" #include "language.h" #include "mwindow.h" #include "mwindowgui.h" - - ConfirmSave::ConfirmSave() { } @@ -36,6 +35,38 @@ ConfirmSave::~ConfirmSave() { } +int ConfirmSave::get_save_path(MWindow *mwindow, char *filename) +{ + int result = 1; + char directory[BCTEXTLEN]; + sprintf(directory, "~"); + mwindow->defaults->get("DIRECTORY", directory); + while( result ) { + int mx, my; mwindow->gui->get_abs_cursor(mx, my); + my -= BC_WindowBase::get_resources()->filebox_h / 2; + char string[BCTEXTLEN]; + sprintf(string, _("Enter a filename to save as")); + BC_FileBox *filebox = new BC_FileBox(mx, my, directory, + _(PROGRAM_NAME ": Save"), string); + filebox->lock_window("ConfirmSave::get_save_path"); + filebox->create_objects(); + filebox->unlock_window(); + result = filebox->run_window(); + mwindow->defaults->update("DIRECTORY", filebox->get_submitted_path()); + strcpy(filename, filebox->get_submitted_path()); + delete filebox; + if( result == 1 ) return 1; // user cancelled + if( !filename[0] ) return 1; // no filename given +// Extend the filename with .xml + if( strlen(filename) < 4 || + strcasecmp(&filename[strlen(filename) - 4], ".xml") ) { + strcat(filename, ".xml"); + } + result = ConfirmSave::test_file(mwindow, filename); + } + return result; +} + int ConfirmSave::test_file(MWindow *mwindow, char *path) { ArrayList paths; diff --git a/cinelerra-5.1/cinelerra/confirmsave.h b/cinelerra-5.1/cinelerra/confirmsave.h index 84e15be7..34e3ee34 100644 --- a/cinelerra-5.1/cinelerra/confirmsave.h +++ b/cinelerra-5.1/cinelerra/confirmsave.h @@ -35,12 +35,12 @@ public: ConfirmSave(); ~ConfirmSave(); + static int get_save_path(MWindow *mwindow, char *filename); // Return values: // 1 cancel // 0 replace or doesn't exist yet static int test_file(MWindow *mwindow, char *path); static int test_files(MWindow *mwindow, ArrayList *paths); - }; class ConfirmSaveWindow : public BC_Window diff --git a/cinelerra-5.1/cinelerra/mwindow.C b/cinelerra-5.1/cinelerra/mwindow.C index 63522d68..86e15ad7 100644 --- a/cinelerra-5.1/cinelerra/mwindow.C +++ b/cinelerra-5.1/cinelerra/mwindow.C @@ -2261,27 +2261,7 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__); if(got_indexes) mainindexes->start_build(); // Open plugin GUIs - Track *track = edl->tracks->first; - 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 ) { - show_plugin(plugin); - } - } - - plugin = (Plugin*)plugin->next; - } - } - - track = track->next; - } + show_plugins(); // opening new session if( ( load_mode == LOADMODE_REPLACE || @@ -3823,6 +3803,7 @@ void MWindow::stack_push(EDL *new_edl, Indexable *idxbl) gui->lock_window("MWindow::stack_push"); if( stack.size() < 9 ) { save_backup(); + hide_plugins(); undo_before(); StackItem &item = stack.append(); item.edl = edl; @@ -3845,6 +3826,7 @@ void MWindow::stack_push(EDL *new_edl, Indexable *idxbl) update_project(LOADMODE_REPLACE); } gui->unlock_window(); + show_plugins(); } void MWindow::stack_pop() @@ -3852,6 +3834,7 @@ void MWindow::stack_pop() if( !stack.size() ) return; // writes on config_path/backup%d.xml save_backup(); + hide_plugins(); // already have gui lock StackItem &item = stack.last(); // session edl replaced, overwrite and save clip data @@ -3876,6 +3859,7 @@ void MWindow::stack_pop() strcpy(session->filename, edl->path); update_project(LOADMODE_REPLACE); undo_after(_("open edl"), LOAD_ALL); + show_plugins(); gui->stack_button->update(); if( mtime && idxbl && idxbl->is_asset ) { struct stat st; @@ -3890,6 +3874,77 @@ void MWindow::stack_pop() } } +int MWindow::save(EDL *edl, char *filename, int stat) +{ + FileXML file; + edl->save_xml(&file, filename); + file.terminate_string(); + if( file.write_to_file(filename) ) { + eprintf(_("Couldn't open %s"), filename); + return 1; + } + if( stat ) { + char string[BCTEXTLEN]; + char *filename = stack.size() ? + stack[0].edl->path : session->filename; + sprintf(string, _("\"%s\" %jdC written"), + filename, file.length()); + gui->lock_window("SaveAs::run"); + gui->show_message(string); + gui->unlock_window(); + } + return 0; +} + +int MWindow::save(int save_as) +{ + char new_path[BCTEXTLEN]; new_path[0] = 0; + char *path = stack.size() ? stack[0].edl->path : session->filename; + if( save_as || !path[0] ) { + if( ConfirmSave::get_save_path(this, new_path) ) + return 1; + if( stack.size() ) { + strcpy(path, new_path); + set_titlebar(new_path); + } + else + set_filename(new_path); + gui->mainmenu->add_load(new_path); + path = new_path; + } + for( int i=stack.size(); --i>=0; ) { + StackItem &item = stack[i]; + Indexable *idxbl = item.idxbl; + if( idxbl->is_asset ) { + Asset *asset = (Asset *)idxbl; + if( asset->format == FILE_REF ) { + if( save(item.new_edl, asset->path, 0) ) + return 1; + } + } + else if( item.new_edl != item.idxbl ) + item.new_edl->overwrite_clip((EDL*)item.idxbl); + } + EDL *new_edl = stack.size() ? stack[0].edl : edl; + save(new_edl, path, 1); + return 0; +} + +void MWindow::show_plugins() +{ + for( Track *track=edl->tracks->first; track; track=track->next ) { + for( int i=0; iplugin_set.size(); ++i ) { + PluginSet *plugins = track->plugin_set[i]; + Plugin *plugin = plugins->get_first_plugin(); + for( ; plugin; plugin=(Plugin*)plugin->next ) { + if( plugin->plugin_type == PLUGIN_STANDALONE && + plugin->show ) + show_plugin(plugin); + } + } + } +} + void MWindow::clip_to_media() { if( edl->session->proxy_scale != 1 ) { @@ -4724,32 +4779,25 @@ int MWindow::set_filename(const char *filename) strcpy(session->filename, filename); if( filename != edl->path ) strcpy(edl->path, filename); + return set_titlebar(filename); +} - if(gui) - { - if(filename[0] == 0) - { - gui->set_title(PROGRAM_NAME); - } - else - { - FileSystem dir; - char string[BCTEXTLEN], string2[BCTEXTLEN]; - dir.extract_name(string, filename); - sprintf(string2, PROGRAM_NAME ": %s", string); - gui->set_title(string2); - } +int MWindow::set_titlebar(const char *filename) +{ + if( !gui ) return 0; + if( filename[0] ) { + FileSystem dir; + char string[BCTEXTLEN], string2[BCTEXTLEN]; + dir.extract_name(string, filename); + sprintf(string2, PROGRAM_NAME ": %s", string); + gui->set_title(string2); } + else + gui->set_title(PROGRAM_NAME); return 0; } - - - - - - int MWindow::set_loop_boundaries() { double start = edl->local_session->get_selectionstart(); diff --git a/cinelerra-5.1/cinelerra/mwindow.h b/cinelerra-5.1/cinelerra/mwindow.h index 109f4ece..eccc0a3b 100644 --- a/cinelerra-5.1/cinelerra/mwindow.h +++ b/cinelerra-5.1/cinelerra/mwindow.h @@ -169,6 +169,7 @@ public: int load_defaults(); int save_defaults(); int set_filename(const char *filename); + int set_titlebar(const char *filename); // Total vertical pixels in timeline int get_tracks_height(); // Total horizontal pixels in timeline @@ -176,6 +177,9 @@ public: // session stack void stack_push(EDL *edl, Indexable *idxbl); void stack_pop(); + int save(EDL *edl, char *filename, int stat); + int save(int save_as); + void show_plugins(); void clip_to_media(); void media_to_clip(); int create_ref(Asset *asset, EDL *ref); diff --git a/cinelerra-5.1/cinelerra/savefile.C b/cinelerra-5.1/cinelerra/savefile.C index 552f2d35..a40fcac2 100644 --- a/cinelerra-5.1/cinelerra/savefile.C +++ b/cinelerra-5.1/cinelerra/savefile.C @@ -65,37 +65,10 @@ void Save::create_objects(SaveAs *saveas) int Save::handle_event() { - if(mwindow->session->filename[0] == 0) - { - saveas->start(); - } - else - { -// save it -// TODO: Move this into mwindow. - FileXML file; - mwindow->edl->save_xml(&file, mwindow->session->filename); - file.terminate_string(); - - if(file.write_to_file(mwindow->session->filename)) - { - char string2[256]; - sprintf(string2, _("Couldn't open %s"), mwindow->session->filename); - ErrorBox error(_(PROGRAM_NAME ": Error"), - mwindow->gui->get_abs_cursor_x(1), - mwindow->gui->get_abs_cursor_y(1)); - error.create_objects(string2); - error.raise_window(); - error.run_window(); - return 1; - } - else - { - char string[BCTEXTLEN]; - sprintf(string, _("\"%s\" %dC written"), - mwindow->session->filename, (int)strlen(file.string())); - mwindow->gui->show_message(string); - } + mwindow->gui->unlock_window(); + int ret = mwindow->save(0); + mwindow->gui->lock_window("Save::handle_event"); + if( !ret ) { mwindow->session->changes_made = 0; // Last command in program if( saveas->quit_now ) @@ -136,99 +109,15 @@ int SaveAs::handle_event() void SaveAs::run() { -// ======================================= get path from user - int result; -//printf("SaveAs::run 1\n"); - char directory[1024], filename[1024]; - sprintf(directory, "~"); - mwindow->defaults->get("DIRECTORY", directory); - -// Loop if file exists - do{ - SaveFileWindow *window; - - window = new SaveFileWindow(mwindow, directory); - window->lock_window("SaveAs::run"); - window->create_objects(); - window->unlock_window(); - result = window->run_window(); - mwindow->defaults->update("DIRECTORY", window->get_submitted_path()); - strcpy(filename, window->get_submitted_path()); - delete window; - -// Extend the filename with .xml - if(strlen(filename) < 4 || - strcasecmp(&filename[strlen(filename) - 4], ".xml")) - { - strcat(filename, ".xml"); - } - -// ======================================= try to save it - if(filename[0] == 0) return; // no filename given - if(result == 1) return; // user cancelled - result = ConfirmSave::test_file(mwindow, filename); - }while(result); // file exists so repeat - -//printf("SaveAs::run 6 %s\n", filename); - - - - -// save it - FileXML file; - mwindow->gui->lock_window("SaveAs::run 1"); -// update the project name - mwindow->set_filename(filename); - mwindow->edl->save_xml(&file, filename); - mwindow->gui->unlock_window(); - file.terminate_string(); - - if(file.write_to_file(filename)) - { - char string2[256]; - mwindow->set_filename(""); // update the project name - sprintf(string2, _("Couldn't open %s."), filename); - ErrorBox error(_(PROGRAM_NAME ": Error"), - mwindow->gui->get_abs_cursor_x(1), - mwindow->gui->get_abs_cursor_y(1)); - error.create_objects(string2); - error.raise_window(); - error.run_window(); + if( mwindow->save(1) ) return; - } - else - { - char string[BCTEXTLEN]; - sprintf(string, _("\"%s\" %dC written"), filename, (int)strlen(file.string())); - mwindow->gui->lock_window("SaveAs::run 2"); - mwindow->gui->show_message(string); - mwindow->gui->unlock_window(); - } - - mwindow->session->changes_made = 0; - mmenu->add_load(filename); -// Last command in program if( quit_now ) mwindow->quit(); return; } -SaveFileWindow::SaveFileWindow(MWindow *mwindow, char *init_directory) - : BC_FileBox(mwindow->gui->get_abs_cursor_x(1), - mwindow->gui->get_abs_cursor_y(1) - BC_WindowBase::get_resources()->filebox_h / 2, - init_directory, - _(PROGRAM_NAME ": Save"), - _("Enter a filename to save as")) -{ - this->mwindow = mwindow; -} - -SaveFileWindow::~SaveFileWindow() {} - - - int SaveProjectModeItem::handle_event() { ((SaveProjectMode *)get_popup_menu())->update(id); diff --git a/cinelerra-5.1/cinelerra/savefile.h b/cinelerra-5.1/cinelerra/savefile.h index bfbcbddd..15a1ec71 100644 --- a/cinelerra-5.1/cinelerra/savefile.h +++ b/cinelerra-5.1/cinelerra/savefile.h @@ -61,15 +61,6 @@ public: MainMenu *mmenu; }; -class SaveFileWindow : public BC_FileBox -{ -public: - SaveFileWindow(MWindow *mwindow, char *init_directory); - ~SaveFileWindow(); - MWindow *mwindow; -}; - - class SaveProjectModeItem : public BC_MenuItem { public: diff --git a/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Heavy.png b/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Heavy.png new file mode 100644 index 00000000..c82c92bf Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Heavy.png differ diff --git a/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Light.png b/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Light.png new file mode 100644 index 00000000..77df7ce3 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/Cinelerra16-9-Light.png differ diff --git a/cinelerra-5.1/plugins/shapes/CinelerraGG.png b/cinelerra-5.1/plugins/shapes/CinelerraGG.png new file mode 100644 index 00000000..3cd49add Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/CinelerraGG.png differ diff --git a/cinelerra-5.1/plugins/shapes/asimetric_clocks.png b/cinelerra-5.1/plugins/shapes/asimetric_clocks.png new file mode 100644 index 00000000..a5e4bac0 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/asimetric_clocks.png differ diff --git a/cinelerra-5.1/plugins/shapes/asimetric_clocks_2.png b/cinelerra-5.1/plugins/shapes/asimetric_clocks_2.png new file mode 100644 index 00000000..e0c6e35c Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/asimetric_clocks_2.png differ diff --git a/cinelerra-5.1/plugins/shapes/audio.png b/cinelerra-5.1/plugins/shapes/audio.png new file mode 100644 index 00000000..9a5651b5 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/audio.png differ diff --git a/cinelerra-5.1/plugins/shapes/crazy_clock.png b/cinelerra-5.1/plugins/shapes/crazy_clock.png new file mode 100644 index 00000000..52b2b859 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/crazy_clock.png differ diff --git a/cinelerra-5.1/plugins/shapes/cream.png b/cinelerra-5.1/plugins/shapes/cream.png new file mode 100644 index 00000000..6b4933ce Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/cream.png differ diff --git a/cinelerra-5.1/plugins/shapes/film.png b/cinelerra-5.1/plugins/shapes/film.png new file mode 100644 index 00000000..c1382ece Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/film.png differ diff --git a/cinelerra-5.1/plugins/shapes/film2.png b/cinelerra-5.1/plugins/shapes/film2.png new file mode 100644 index 00000000..2b19f1f6 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/film2.png differ diff --git a/cinelerra-5.1/plugins/shapes/mosaic.png b/cinelerra-5.1/plugins/shapes/mosaic.png new file mode 100644 index 00000000..eea4177b Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/mosaic.png differ diff --git a/cinelerra-5.1/plugins/shapes/multi_box.png b/cinelerra-5.1/plugins/shapes/multi_box.png new file mode 100644 index 00000000..4d71a8d7 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/multi_box.png differ diff --git a/cinelerra-5.1/plugins/shapes/rare_spiral.png b/cinelerra-5.1/plugins/shapes/rare_spiral.png new file mode 100644 index 00000000..d31a9f0b Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/rare_spiral.png differ diff --git a/cinelerra-5.1/plugins/shapes/spiral_clock.png b/cinelerra-5.1/plugins/shapes/spiral_clock.png new file mode 100644 index 00000000..0e5e15d7 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/spiral_clock.png differ diff --git a/cinelerra-5.1/plugins/shapes/square.png b/cinelerra-5.1/plugins/shapes/square.png new file mode 100644 index 00000000..239d632a Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/square.png differ diff --git a/cinelerra-5.1/plugins/shapes/squares.png b/cinelerra-5.1/plugins/shapes/squares.png new file mode 100644 index 00000000..3a584715 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/squares.png differ diff --git a/cinelerra-5.1/plugins/shapes/star.png b/cinelerra-5.1/plugins/shapes/star.png new file mode 100644 index 00000000..ca97e5a7 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/star.png differ diff --git a/cinelerra-5.1/plugins/shapes/water.png b/cinelerra-5.1/plugins/shapes/water.png new file mode 100644 index 00000000..21790f01 Binary files /dev/null and b/cinelerra-5.1/plugins/shapes/water.png differ