/* * CINELERRA * Copyright (C) 2008-2017 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 * */ #ifndef RECORDGUI_H #define RECORDGUI_H class RecordGUIBatches; class RecordBatch; class RecordStartType; class RecordStart; class RecordPath; class BrowseButton; class RecordDuration; class RecordSource; class RecordNews; class RecordGUISave; class RecordGUIStartOver; class RecordGUICancel; class RecordGUIMonitorVideo; class RecordGUIMonitorAudio; class RecordGUIAudioMeters; class RecordGUINewBatch; class RecordGUIDeleteBatch; class RecordGUIStartBatches; class RecordGUIStopBatches; class RecordGUIActivateBatch; class RecordStatusThread; class RecordGUIFlash; class RecordGUIDCOffset; class RecordGUIDropFrames; class RecordGUIFillFrames; class RecordGUIPowerOff; class RecordGUICommCheck; class RecordGUILabel; class RecordGUIClearLabels; class RecordGUILoop; class RecordGUILoopHr; class RecordGUILoopMin; class RecordGUILoopSec; class RecordGUIModeMenu; class RecordGUIMode; class RecordGUIOK; class RecordGUIReset; class RecordStartoverThread; class EndRecordThread; #include "browsebutton.inc" #include "condition.inc" #include "guicast.h" #include "loadmode.inc" #include "maxchannels.h" #include "mutex.inc" #include "mwindow.inc" #include "question.inc" #include "recordgui.inc" #include "record.inc" #include "recordbatches.h" #include "recordmonitor.inc" #include "recordtransport.inc" #include "timeentry.h" class RecordGUIBatches : public RecordBatchesGUI { public: RecordGUI *gui; int handle_event(); int selection_changed(); RecordGUIBatches(RecordGUI *gui, int x, int y, int w, int h); }; class RecordGUI : public BC_Window { static int max(int a,int b) { return a>b ? a : b; } public: RecordGUI(MWindow *mwindow, Record *record); ~RecordGUI(); void create_objects(); int resize_event(int w, int h); int translation_event(); BC_Title *current_operation; BC_Title *position_title; BC_Title *prev_label_title; BC_Title *frames_behind; BC_Title *frames_dropped; BC_Title *framerate; BC_Title *samples_clipped; BC_Title *cron_status; MWindow *mwindow; Record *record; RecordGUIBatches *batch_bay; RecordPath *batch_path; RecordStatusThread *status_thread; TimeEntry *batch_start; TimeEntry *batch_duration; RecordStartType *start_type; RecordTransport *record_transport; BrowseButton *batch_browse; RecordSource *batch_source; RecordGUIModeMenu *batch_mode; RecordGUINewBatch *new_batch; RecordGUIDeleteBatch *delete_batch; RecordGUIStartBatches *start_batches; RecordGUIStopBatches *stop_batches; RecordGUIActivateBatch *activate_batch; RecordGUILabel *label_button; RecordGUIClearLabels *clrlbls_button; RecordGUIDropFrames *drop_frames; RecordGUIFillFrames *fill_frames; RecordGUIPowerOff *power_off; RecordGUICommCheck *commercial_check; RecordGUIMonitorVideo *monitor_video; RecordGUIMonitorAudio *monitor_audio; RecordGUIAudioMeters *meter_audio; RecordGUIFlash *batch_flash; RecordStartoverThread *startover_thread; EndRecordThread *interrupt_thread; LoadMode *load_mode; int flash_color; RecordGUILoopHr *loop_hr; RecordGUILoopMin *loop_min; RecordGUILoopSec *loop_sec; RecordGUIReset *reset; RecordGUIDCOffset *dc_offset_button; RecordGUIDCOffsetText *dc_offset_text[MAXCHANNELS]; RecordMonitor *monitor_video_window; BC_Meter *meter[MAXCHANNELS]; int total_dropped_frames; int total_clipped_samples; int set_loop_status(int value); int keypress_event(); int set_translation(int x, int y, float z); void update_batches(); Batch *get_current_batch(); Batch *get_editing_batch(); void start_flash_batch(); void stop_flash_batch(); void flash_batch(); // Update the batch channel table when edited void update_batch_sources(); // Update the batch editing tools void update_batch_tools(); void enable_batch_buttons(); void disable_batch_buttons(); void reset_audio(); void reset_video(); void update_frames_behind(long value); void update_dropped_frames(long value); void update_position(double value); void update_clipped_samples(long value); void update_framerate(double value); void update_video(int dropped, int behind); void update_audio(int channels, double *max, int *over); void update_cron_status(const char *status); void update_power_off(int value); void update_labels(double new_position); int update_prev_label(long new_position); int update_title(BC_Title *title, double position); }; class RecordGUISave : public BC_Button { public: RecordGUISave(RecordGUI *gui); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUICancel : public BC_CancelButton { public: RecordGUICancel(RecordGUI *record_gui); int handle_event(); int keypress_event(); RecordGUI *gui; Record *record; }; class RecordGUIOK : public BC_OKButton { public: RecordGUIOK(RecordGUI *record_gui); int handle_event(); RecordGUI *gui; }; class RecordGUIStartBatches : public RecordBatchesGUI::StartBatches { public: RecordGUI *gui; int handle_event(); RecordGUIStartBatches(RecordGUI *gui, int x, int y); }; class RecordGUIStopBatches : public RecordBatchesGUI::StopBatches { public: RecordGUI *gui; int handle_event(); RecordGUIStopBatches(RecordGUI *gui, int x, int y); }; class RecordGUIActivateBatch : public RecordBatchesGUI::ActivateBatch { public: RecordGUIActivateBatch(RecordGUI *gui, int x, int y); int handle_event(); RecordGUI *gui; }; class RecordGUIStartOver : public BC_GenericButton { public: RecordGUIStartOver(RecordGUI *gui, int x, int y); ~RecordGUIStartOver(); int handle_event(); RecordGUI *gui; }; class EndRecordThread : public Thread { public: EndRecordThread(RecordGUI *record_gui); ~EndRecordThread(); void start(int is_ok); void run(); RecordGUI *gui; QuestionWindow *window; // OK Button was pressed int is_ok; }; class RecordStartoverThread : public Thread { public: RecordStartoverThread(RecordGUI *record_gui); ~RecordStartoverThread(); void run(); RecordGUI *gui; QuestionWindow *window; }; class RecordBatch : public BC_PopupTextBox { public: RecordBatch(RecordGUI *gui, int x, int y); int handle_event(); RecordGUI *gui; }; class RecordPath : public RecordBatchesGUI::Path { public: RecordGUI *gui; int handle_event(); RecordPath(RecordGUI *gui, int x, int y); }; class RecordStart : public RecordBatchesGUI::StartTime { public: RecordGUI *gui; int handle_event(); RecordStart(RecordGUI *gui, int x, int y); }; class RecordDuration : public RecordBatchesGUI::Duration { public: RecordGUI *gui; int handle_event(); RecordDuration(RecordGUI *gui, int x, int y); }; class RecordSource : public RecordBatchesGUI::Source { public: RecordGUI *gui; int handle_event(); RecordSource(RecordGUI *gui, int x, int y); }; class RecordNews : public RecordBatchesGUI::News { public: RecordNews(RecordGUI *gui, int x, int y); int handle_event(); RecordGUI *gui; }; class RecordGUIDropFrames : public BC_CheckBox { public: RecordGUIDropFrames(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIFillFrames : public BC_CheckBox { public: RecordGUIFillFrames(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIPowerOff : public BC_CheckBox { public: RecordGUIPowerOff(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUICommCheck : public BC_CheckBox { public: RecordGUICommCheck(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIMonitorVideo : public BC_CheckBox { public: RecordGUIMonitorVideo(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIMonitorAudio : public BC_CheckBox { public: RecordGUIMonitorAudio(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIAudioMeters : public BC_CheckBox { public: RecordGUIAudioMeters(RecordGUI *gui, int x, int y); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUINewBatch : public RecordBatchesGUI::NewBatch { public: RecordGUI *gui; int handle_event(); RecordGUINewBatch(RecordGUI *gui, int x, int y); }; class RecordGUIDeleteBatch : public RecordBatchesGUI::DeleteBatch { public: RecordGUI *gui; int handle_event(); RecordGUIDeleteBatch(RecordGUI *gui, int x, int y); }; class RecordGUILabel : public BC_GenericButton { public: RecordGUILabel(RecordGUI *gui, int x, int y); ~RecordGUILabel(); int handle_event(); int keypress_event(); RecordGUI *gui; }; class RecordGUIClearLabels : public BC_GenericButton { public: RecordGUIClearLabels(RecordGUI *gui, int x, int y); ~RecordGUIClearLabels(); int handle_event(); RecordGUI *gui; }; // Stop GUI blocking the recording when X11 is busy class RecordStatusThread : public Thread { public: RecordStatusThread(MWindow *mwindow, RecordGUI *gui); ~RecordStatusThread(); void reset_video(); void reset_audio(); void update_frames_behind(long value); void update_dropped_frames(long value); void update_position(double value); void update_clipped_samples(long value); void update_framerate(double value); void get_window_lock(); template void update_status_string(const char *fmt,T &new_value,T &displayed_value,BC_Title *widgit); void run(); MWindow *mwindow; RecordGUI *gui; long new_dropped_frames, displayed_dropped_frames; long new_frames_behind, displayed_frames_behind; double new_framerate, displayed_framerate; long new_clipped_samples, displayed_clipped_samples; double new_position; int window_locked; int done; Condition *input_lock; }; class RecordGUIFlash : public Thread { public: RecordGUI *record_gui; Condition *flash_lock; int done; void run(); RecordGUIFlash(RecordGUI *gui); ~RecordGUIFlash(); }; class RecordGUIModeMenu; class RecordGUIModeTextBox : public BC_TextBox { public: RecordGUIModeTextBox(RecordGUIModeMenu *mode_menu, int x, int y, int w,const char *text); ~RecordGUIModeTextBox(); RecordGUI *record_gui; RecordGUIModeMenu *mode_menu; int handle_event(); }; class RecordGUIModeListBox : public BC_ListBox { public: RecordGUIModeListBox(RecordGUIModeMenu *mode_menu); ~RecordGUIModeListBox(); RecordGUI *record_gui; RecordGUIModeMenu *mode_menu; int handle_event(); }; class RecordGUIModeMenu { public: RecordGUIModeMenu(RecordGUI *record_gui,int x, int y, int w, const char *text); ~RecordGUIModeMenu(); int handle_event(); void create_objects(); void update(int value); int get_w(); int get_h(); RecordGUI *record_gui; RecordGUIModeTextBox *textbox; RecordGUIModeListBox *listbox; ArrayList modes; int value; }; class RecordGUIDCOffset : public BC_Button { public: RecordGUIDCOffset(MWindow *mwindow, int y); ~RecordGUIDCOffset(); int handle_event(); int keypress_event(); }; class RecordGUIDCOffsetText : public BC_TextBox { public: RecordGUIDCOffsetText(char *text, int y, int number); ~RecordGUIDCOffsetText(); int handle_event(); int number; }; class RecordGUIReset : public BC_Button { public: RecordGUIReset(MWindow *mwindow, RecordGUI *gui, int y); ~RecordGUIReset(); int handle_event(); RecordGUI *gui; }; class RecordGUIResetTranslation : public BC_Button { public: RecordGUIResetTranslation(MWindow *mwindow, RecordGUI *gui, int y); ~RecordGUIResetTranslation(); int handle_event(); RecordGUI *gui; }; #endif