X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Frecordtransport.C;fp=cinelerra-5.1%2Fcinelerra%2Frecordtransport.C;h=2413079bd8f9585338f384b5436be41baa50c12f;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=0000000000000000000000000000000000000000;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/recordtransport.C b/cinelerra-5.1/cinelerra/recordtransport.C new file mode 100644 index 00000000..2413079b --- /dev/null +++ b/cinelerra-5.1/cinelerra/recordtransport.C @@ -0,0 +1,421 @@ + +/* + * CINELERRA + * Copyright (C) 2008 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 "file.h" +#include "language.h" +#include "mwindow.h" +#include "record.h" +#include "recordgui.h" +#include "recordtransport.h" +#include "theme.h" +#include "units.h" + + +RecordTransport::RecordTransport(MWindow *mwindow, Record *record, + BC_WindowBase *window, int x, int y) +{ + this->mwindow = mwindow; + this->record = record; + this->window = window; + this->x = x; + this->y = y; + record_active = 0; + play_active = 0; +} + +void RecordTransport::create_objects() +{ + int x = this->x, y = this->y; + + window->add_subwindow(rewind_button = new RecordGUIRewind(this, x, y)); + x += rewind_button->get_w(); y_end = y+rewind_button->get_h(); + window->add_subwindow(record_button = new RecordGUIRec(this, x, y)); + x += record_button->get_w(); y_end = max(y_end,y+record_button->get_h()); + record_frame = 0; + if(record->default_asset->video_data) { + window->add_subwindow( + record_frame = new RecordGUIRecFrame(this, x, y)); + x += record_frame->get_w(); y_end = max(y_end,y+record_button->get_h()); + } + window->add_subwindow(stop_button = new RecordGUIStop(this, x, y)); + x += stop_button->get_w(); y_end = max(y_end,y+record_button->get_h()); +// window->add_subwindow(pause_button = new RecordGUIPause(this, x, y)); +// x += pause_button->get_w(); y_end = max(y_end,y+record_button->get_h()); + x_end = x; + +#if 0 + x = this->x; y = y_end; + window->add_subwindow(back_button = new RecordGUIBack(this, x, y)); + x += back_button->get_w(); x_end = max(x, x_end); + y_end = max(y + back_button->get_h(), y_end); + window->add_subwindow(play_button = new RecordGUIPlay(this, x, y)); + x += play_button->get_w(); x_end = max(x, x_end); + y_end = max(y + play_button->get_h(), y_end); + window->add_subwindow(fwd_button = new RecordGUIFwd(this, x, y)); + x += fwd_button->get_w(); x_end = max(x, x_end); + y_end = max(y + fwd_button->get_h(), y_end); + window->add_subwindow(end_button = new RecordGUIEnd(this, x, y)); + x += end_button->get_w(); x_end = max(x, x_end); + y_end = max(y + end_button->get_h(), y_end); +#endif + x_end += 10; y_end += 10; +} + +void RecordTransport::reposition_window(int x, int y) +{ + this->x = x; this->y = y; + rewind_button->reposition_window(x, y); + x += rewind_button->get_w(); y_end = y+rewind_button->get_h(); + record_button->reposition_window(x, y); + x += record_button->get_w(); y_end = max(y_end,y+record_button->get_h()); + if(record->default_asset->video_data) { + record_frame->reposition_window(x, y); + x += record_frame->get_w(); y_end = max(y_end,y+record_button->get_h()); + } + stop_button->reposition_window(x, y); + x += stop_button->get_w(); y_end = max(y_end,y+record_button->get_h()); +// pause_button->reposition_window(x, y); +// x += pause_button->get_w(); y_end = max(y_end,y+record_button->get_h()); + x_end = x; + +#if 0 + x = this->x; y = y_end; + back_button->reposition_window(x, y); + x += back_button->get_w(); x_end = max(x, x_end); + y_end = max(y + back_button->get_h(), y_end); + play_button->reposition_window(x, y); + x += play_button->get_w(); x_end = max(x, x_end); + y_end = max(y + play_button->get_h(), y_end); + fwd_button->reposition_window(x, y); + x += fwd_button->get_w(); x_end = max(x, x_end); + y_end = max(y + fwd_button->get_h(), y_end); + end_button->reposition_window(x, y); + x += end_button->get_w(); x_end = max(x, x_end); + y_end = max(y + end_button->get_h(), y_end); +#endif + x_end += 10; y_end += 10; +} + +int RecordTransport::get_h() +{ + return y_end - y; +} + +int RecordTransport::get_w() +{ + return x_end - x; +} + + +RecordTransport::~RecordTransport() +{ +} +void RecordTransport:: +start_writing_file(int single_frame) +{ + if( !record->writing_file ) { + record->pause_input_threads(); + record->update_position(); + record->single_frame = single_frame; + record->start_writing_file(); + record->resume_input_threads(); + } +} + +void RecordTransport:: +stop_writing() +{ + record->stop_cron_thread(_("Interrupted")); + record->stop_writing(); +} + +int RecordTransport::keypress_event() +{ + if( record->cron_active() > 0 ) return 0; + if( window->get_keypress() == ' ' ) { +//printf("RecordTransport::keypress_event 1\n"); + if( record->writing_file ) { + window->unlock_window(); + stop_writing(); + window->lock_window("RecordTransport::keypress_event 1"); + } + else { + window->unlock_window(); + start_writing_file(); + window->lock_window("RecordTransport::keypress_event 2"); + } +//printf("RecordTransport::keypress_event 2\n"); + return 1; + } + return 0; +} + + +RecordGUIRec::RecordGUIRec(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("record")) +{ + this->record_transport = record_transport; + set_tooltip(_("Start recording\nfrom current position")); +} + +RecordGUIRec::~RecordGUIRec() +{ +} + +int RecordGUIRec::handle_event() +{ + if( record_transport->record->cron_active() > 0 ) return 0; + unlock_window(); + record_transport->start_writing_file(); + lock_window("RecordGUIRec::handle_event"); + return 1; +} + +int RecordGUIRec::keypress_event() +{ + return 0; +} + +RecordGUIRecFrame::RecordGUIRecFrame(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("recframe")) +{ + this->record_transport = record_transport; + set_tooltip(_("RecordTransport single frame")); +} + +RecordGUIRecFrame::~RecordGUIRecFrame() +{ +} + +int RecordGUIRecFrame::handle_event() +{ + if( record_transport->record->cron_active() > 0 ) return 0; + unlock_window(); + record_transport->start_writing_file(1); + lock_window("RecordGUIRecFrame::handle_event"); + return 1; +} + +int RecordGUIRecFrame::keypress_event() +{ + return 0; +} + +RecordGUIPlay::RecordGUIPlay(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("play")) +{ + this->record_transport = record_transport; + set_tooltip(_("Preview recording")); +} + +RecordGUIPlay::~RecordGUIPlay() +{ +} + +int RecordGUIPlay::handle_event() +{ + unlock_window(); + lock_window(); + return 1; +} + +int RecordGUIPlay::keypress_event() +{ + return 0; +} + + +RecordGUIStop::RecordGUIStop(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("stoprec")) +{ + this->record_transport = record_transport; + set_tooltip(_("Stop operation")); +} + +RecordGUIStop::~RecordGUIStop() +{ +} + +int RecordGUIStop::handle_event() +{ + unlock_window(); + record_transport->stop_writing(); + lock_window("RecordGUIStop::handle_event"); + return 1; +} + +int RecordGUIStop::keypress_event() +{ + return 0; +} + + + +RecordGUIPause::RecordGUIPause(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("pause")) +{ + this->record_transport = record_transport; + set_tooltip(_("Pause")); +} + +RecordGUIPause::~RecordGUIPause() +{ +} + +int RecordGUIPause::handle_event() +{ + return 1; +} + +int RecordGUIPause::keypress_event() +{ + return 0; +} + + + +RecordGUIRewind::RecordGUIRewind(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("rewind")) +{ + this->record_transport = record_transport; + set_tooltip(_("Start over")); +} + +RecordGUIRewind::~RecordGUIRewind() +{ +} + +int RecordGUIRewind::handle_event() +{ + RecordGUI *record_gui = record_transport->record->record_gui; + if( !record_gui->startover_thread->running() ) + record_gui->startover_thread->start(); + return 1; +} + +int RecordGUIRewind::keypress_event() +{ + return 0; +} + + + +RecordGUIBack::RecordGUIBack(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("fastrev")) +{ + this->record_transport = record_transport; + set_tooltip(_("Fast rewind")); +} + +RecordGUIBack::~RecordGUIBack() +{ +} + +int RecordGUIBack::handle_event() +{ + return 1; +} + +int RecordGUIBack::button_press() +{ + return 1; +} + +int RecordGUIBack::button_release() +{ + unset_repeat(repeat_id); + return 1; +} + +int RecordGUIBack::repeat_event() +{ +return 0; + return 1; +} + +int RecordGUIBack::keypress_event() +{ + return 0; +} + + + +RecordGUIFwd::RecordGUIFwd(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("fastfwd")) +{ + this->record_transport = record_transport; + set_tooltip(_("Fast forward")); +} + +RecordGUIFwd::~RecordGUIFwd() +{ +} + +int RecordGUIFwd::handle_event() +{ + return 1; +} + +int RecordGUIFwd::button_press() +{ + return 1; +} + +int RecordGUIFwd::button_release() +{ + unset_repeat(repeat_id); + return 1; +} + +int RecordGUIFwd::repeat_event() +{ + return 0; +} + +int RecordGUIFwd::keypress_event() +{ + return 0; +} + + + +RecordGUIEnd::RecordGUIEnd(RecordTransport *record_transport, int x, int y) + : BC_Button(x, y, record_transport->mwindow->theme->get_image_set("end")) +{ + this->record_transport = record_transport; + set_tooltip(_("Seek to end of recording")); +} + +RecordGUIEnd::~RecordGUIEnd() +{ +} + +int RecordGUIEnd::handle_event() +{ + return 1; +} + +int RecordGUIEnd::keypress_event() +{ + return 0; +} +