X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fcinelerra%2Fvwindow.C;fp=cinelerra-5.0%2Fcinelerra%2Fvwindow.C;h=0000000000000000000000000000000000000000;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=f7e39374fd2662c71aa396057ffc62e5533ee4fd;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/cinelerra/vwindow.C b/cinelerra-5.0/cinelerra/vwindow.C deleted file mode 100644 index f7e39374..00000000 --- a/cinelerra-5.0/cinelerra/vwindow.C +++ /dev/null @@ -1,481 +0,0 @@ - -/* - * CINELERRA - * Copyright (C) 1997-2012 Adam Williams - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "asset.h" -#include "assets.h" -#include "bcsignals.h" -#include "clip.h" -#include "clipedit.h" -#include "bchash.h" -#include "edl.h" -#include "edlsession.h" -#include "filesystem.h" -#include "filexml.h" -#include "indexable.h" -#include "language.h" -#include "localsession.h" -#include "mainclock.h" -#include "mainmenu.h" -#include "mainsession.h" -#include "mwindow.h" -#include "mwindowgui.h" -#include "playbackengine.h" -#include "tracks.h" -#include "transportque.h" -#include "vplayback.h" -#include "vtimebar.h" -#include "vtracking.h" -#include "vwindow.h" -#include "vwindowgui.h" - - -VWindow::VWindow(MWindow *mwindow) - : BC_DialogThread() -{ - this->mwindow = mwindow; - gui = 0; - playback_engine = 0; - playback_cursor = 0; - clip_edit = 0; - indexable = 0; - edl = 0; -} - - -VWindow::~VWindow() -{ - close_window(); -//printf("VWindow::~VWindow 1\n"); - delete playback_engine; -//printf("VWindow::~VWindow 1\n"); - delete playback_cursor; - delete_source(1, 0); - delete clip_edit; -//printf("VWindow::~VWindow 2\n"); -} - -void VWindow::delete_source(int do_main_edl, int update_gui) -{ -//printf("VWindow::delete_source %d %d %p %p\n", __LINE__, gui->get_window_lock(), edl, indexable); - if(do_main_edl) mwindow->edl->remove_vwindow_edl(get_edl()); - - if(edl) - { - edl->Garbage::remove_user(); -//printf("VWindow::delete_source %d\n", __LINE__); - edl = 0; - } - -// if(mwindow->edl->vwindow_edl && !mwindow->edl->vwindow_edl_shared) -// { -// mwindow->edl->vwindow_edl->Garbage::remove_user(); -// mwindow->edl->vwindow_edl = 0; -// mwindow->edl->vwindow_edl_shared = 0; -// } - -//printf("VWindow::delete_source %d\n", __LINE__); - if(indexable) indexable->Garbage::remove_user(); - indexable = 0; - - if(update_gui) gui->change_source(0, _("Viewer")); -//printf("VWindow::delete_source %d\n", __LINE__); -} - - -void VWindow::load_defaults() -{ -} - -void VWindow::create_objects() -{ -} - - -void VWindow::handle_done_event(int result) -{ - playback_engine->interrupt_playback(1); - delete_source(1, 0); - if( mwindow->in_destructor ) return; - - int total = 0; - for(int i = 0; i < mwindow->vwindows.size(); i++) - { - -//printf("VWindow::handle_done_event %d %d\n", __LINE__, mwindow->vwindows.get(i)->is_running()); - if(mwindow->vwindows.get(i)->is_running()) total++; - } -// subtract ourselves - total--; - -// Update the menu if no viewers visible - if(!total) - { - mwindow->gui->lock_window("VWindowGUI::close_event"); - mwindow->gui->mainmenu->show_vwindow->set_checked(0); - mwindow->gui->unlock_window(); - - mwindow->session->show_vwindow = 0; - mwindow->save_defaults(); - } -} - - - -BC_Window* VWindow::new_gui() -{ -//printf("VWindow::create_objects 1\n"); - gui = new VWindowGUI(mwindow, this); -//printf("VWindow::create_objects 1\n"); - gui->create_objects(); -//printf("VWindow::create_objects 1\n"); - - playback_engine = new VPlayback(mwindow, this, gui->canvas); -//printf("VWindow::create_objects 1\n"); - -// Start command loop - playback_engine->create_objects(); -//printf("VWindow::create_objects 1\n"); - gui->transport->set_engine(playback_engine); -//printf("VWindow::create_objects 1\n"); - playback_cursor = new VTracking(mwindow, this); -//printf("VWindow::create_objects 1\n"); - playback_cursor->create_objects(); -//printf("VWindow::create_objects 2\n"); - - clip_edit = new ClipEdit(mwindow, 0, this); - return gui; -} - - -EDL* VWindow::get_edl() -{ -// return mwindow->edl->vwindow_edl; - return edl; -} - -Indexable* VWindow::get_source() -{ - return this->indexable; -} - -void VWindow::change_source(int edl_number) -{ - if(!is_running()) return; - -//printf("VWindow::change_source %d %p\n", __LINE__, mwindow->edl->get_vwindow_edl(edl_number)); - if( edl_number >= 0 && edl_number < mwindow->edl->total_vwindow_edls() && - mwindow->edl->get_vwindow_edl(edl_number) ) - { - this->edl = mwindow->edl->get_vwindow_edl(edl_number); - this->edl->Garbage::add_user(); - gui->change_source(get_edl(), get_edl()->local_session->clip_title); - update_position(CHANGE_ALL, 1, 1, 1); - } - else - { - delete_source(1, 1); -// if(indexable) indexable->Garbage::remove_user(); -// indexable = 0; -// mwindow->edl->vwindow_edl_shared = 0; - } -} - -void VWindow::change_source(Indexable *indexable) -{ - if(!running()) return; -//printf("VWindow::change_source %d\n", __LINE__); -// if(asset && this->asset && -// asset->id == this->asset->id && -// asset == this->asset) return; - -//printf("VWindow::change_source %d\n", __LINE__); - - char title[BCTEXTLEN]; - FileSystem fs; - fs.extract_name(title, indexable->path); -//printf("VWindow::change_source 1\n"); - - delete_source(1, 0); -//printf("VWindow::change_source 1\n"); - -// Generate EDL off of main EDL for cutting - Asset *asset = 0; - EDL *nested_edl = 0; - if(indexable->is_asset) - { - this->indexable = asset = new Asset; - asset->copy_from((Asset*)indexable, 0); - } - else - { - this->indexable = nested_edl = new EDL; - nested_edl->create_objects(); - nested_edl->copy_all((EDL*)indexable); - } - -// Create EDL - this->edl = new EDL(mwindow->edl); - this->edl->create_objects(); - mwindow->edl->append_vwindow_edl(this->edl, 1); - -// mwindow->edl->vwindow_edl = new EDL(mwindow->edl); -// mwindow->edl->vwindow_edl_shared = 0; -// mwindow->edl->vwindow_edl->create_objects(); - -//printf("VWindow::change_source 1 %d %p %p\n", __LINE__, asset, nested_edl); - if(asset) - mwindow->asset_to_edl(this->edl, asset); - else - mwindow->edl_to_nested(this->edl, nested_edl); - -// Update GUI - gui->change_source(this->edl, title); - update_position(CHANGE_ALL, 1, 1, 1); - - - -//printf("VWindow::change_source 2\n"); -} - -void VWindow::change_source(EDL *edl) -{ - if(!running()) return; -//printf("VWindow::change_source %d %p\n", __LINE__, edl); -// EDLs are identical -// if(edl && mwindow->edl->vwindow_edl && -// edl->id == mwindow->edl->vwindow_edl->id) return; - if(edl && get_edl() && edl->id == get_edl()->id) return; - - delete_source(1, 0); - - if(edl) - { - mwindow->edl->append_vwindow_edl(edl, 1); - this->edl = edl; - this->edl->Garbage::add_user(); - -// mwindow->edl->vwindow_edl = edl; -// in order not to later delete edl if it is shared -// edl->Garbage::add_user(); -// mwindow->edl->vwindow_edl_shared = 1; - -// Update GUI - gui->change_source(edl, edl->local_session->clip_title); - update_position(CHANGE_ALL, 1, 1, 1); - } - else - gui->change_source(edl, _("Viewer")); -} - -void VWindow::change_source(char *folder, int item) -{ -//printf("VWindow::change_source %d\n", __LINE__); - int result = 0; - if(!running()) return; -// Search EDLs - if(!strcasecmp(folder, CLIP_FOLDER)) - { - if(item < mwindow->edl->clips.total) - { - change_source(mwindow->edl->clips.values[item]); - result = 1; - } - } - else -// Search media - if(!strcasecmp(folder, MEDIA_FOLDER)) - { - if(item < mwindow->edl->assets->total()) - { - change_source(mwindow->edl->assets->get_item_number(item)); - result = 1; - } - } - else -// Search extra clip folders - { - } - - if(!result) - { - delete_source(1, 1); - } -} - - - - -void VWindow::goto_start() -{ - if(get_edl()) - { - get_edl()->local_session->set_selectionstart(0); - get_edl()->local_session->set_selectionend(0); - update_position(CHANGE_NONE, - 0, - 1, - 0); - } -} - -void VWindow::goto_end() -{ - if(get_edl()) - { - double position = get_edl()->tracks->total_length(); - get_edl()->local_session->set_selectionstart(position); - get_edl()->local_session->set_selectionend(position); - update_position(CHANGE_NONE, - 0, - 1, - 0); - } -} - -void VWindow::update(int do_timebar) -{ - if(do_timebar) - gui->timebar->update(1); -} - -void VWindow::update_position(int change_type, - int use_slider, - int update_slider, - int lock_window) -{ - EDL *edl = get_edl(); - if(edl) - { -//printf("VWindow::update_position %d\n", __LINE__); -//edl->dump(); - playback_engine->que->send_command(CURRENT_FRAME, - change_type, - edl, - 1); - - if(lock_window) gui->lock_window("VWindow::update_position"); - gui->clock->update(edl->local_session->get_selectionstart(1)); - if(lock_window) gui->unlock_window(); - } -} - - - - - -int VWindow::update_position(double position) -{ - EDL *edl = get_edl(); - if(edl) - { - gui->unlock_window(); - - playback_engine->interrupt_playback(1); - - position = mwindow->edl->align_to_frame(position, 0); - position = MAX(0, position); - - edl->local_session->set_selectionstart(position); - edl->local_session->set_selectionend(position); - - gui->lock_window("VWindow::update_position 1"); - update_position(CHANGE_NONE, 0, 1, 0); - } - - return 1; -} - - -void VWindow::set_inpoint() -{ - EDL *edl = get_edl(); - if(edl) - { - edl->set_inpoint(edl->local_session->get_selectionstart(1)); - gui->timebar->update(1); - } -} - -void VWindow::set_outpoint() -{ - EDL *edl = get_edl(); - if(edl) - { - edl->set_outpoint(edl->local_session->get_selectionstart(1)); - gui->timebar->update(1); - } -} - -void VWindow::clear_inpoint() -{ - EDL *edl = get_edl(); - if(edl) - { - edl->local_session->unset_inpoint(); - gui->timebar->update(1); - } -} - -void VWindow::clear_outpoint() -{ - EDL *edl = get_edl(); - if(edl) - { - edl->local_session->unset_outpoint(); - gui->timebar->update(1); - } -} - -void VWindow::copy() -{ - EDL *edl = get_edl(); - if(edl) - { - double start = edl->local_session->get_selectionstart(); - double end = edl->local_session->get_selectionend(); - FileXML file; - edl->copy(start, - end, - 0, - 0, - 0, - &file, - "", - 1); - const char *file_string = file.string(); - long file_length = strlen(file_string); - mwindow->gui->lock_window(); - mwindow->gui->get_clipboard()->to_clipboard(file_string, file_length, - SECONDARY_SELECTION); - mwindow->gui->get_clipboard()->to_clipboard(file_string, file_length, - BC_PRIMARY_SELECTION); - mwindow->gui->unlock_window(); - } -} - -void VWindow::splice_selection() -{ -} - -void VWindow::overwrite_selection() -{ -} -