LiVES 1.4.9
|
00001 // multitrack.h 00002 // LiVES 00003 // (c) G. Finch 2005 - 2010 <salsaman@xs4all.nl,salsaman@gmail.com> 00004 // released under the GNU GPL 3 or later 00005 // see file ../COPYING for licensing details 00006 00007 // multitrack window 00008 00009 #ifndef __HAS_MULTITRACK_H__ 00010 #define __HAS_MULTITRACK_H__ 00011 00012 #define CLIP_THUMB_WIDTH 72 00013 #define CLIP_THUMB_HEIGHT 72 00014 00015 #define CLIP_LABEL_LENGTH 20 00016 00017 #define BLOCK_THUMB_WIDTH 40 00018 00019 #define BLOCK_DRAW_SIMPLE 1 00020 #define BLOCK_DRAW_THUMB 2 00021 #define BLOCK_DRAW_TYPE BLOCK_DRAW_THUMB 00022 00023 #define MT_PLAY_WIDTH_SMALL 320 00024 #define MT_PLAY_HEIGHT_SMALL 216 00025 00026 #define MT_PLAY_WIDTH_EXP 480 00027 #define MT_PLAY_HEIGHT_EXP 360 00028 00029 #define MT_CTX_WIDTH 320 00030 #define MT_CTX_HEIGHT 220 00031 00032 #define FX_BLOCK_WIDTH 80 00033 #define FX_BLOCK_HEIGHT 20 00034 00035 00036 #define TIMECODE_LENGTH 14 ///< length of timecode text entry, must be >12 00037 00038 #define DEF_TIME 120 ///< default seconds when there is no event_list 00039 00040 #define MT_BORDER_WIDTH 20 ///< width border for window 00041 00042 #define IN_OUT_SEP 10 ///< min pixel separation for in/out images in poly_box (per image) 00043 00044 typedef struct _mt lives_mt; 00045 00046 typedef struct _track_rect track_rect; 00047 00048 typedef struct _mt_opts mt_opts; 00049 00050 typedef struct _lives_amixer_t lives_amixer_t; 00051 00052 #define MAX_DISP_VTRACKS 5 00053 00054 typedef enum { 00055 MOUSE_MODE_MOVE, 00056 MOUSE_MODE_SELECT, 00057 MOUSE_MODE_COPY 00058 } lives_mt_mouse_mode_t; 00059 00060 00061 typedef enum { 00062 INSERT_MODE_NORMAL, 00063 00064 // not implemented yet 00065 INSERT_MODE_OVERWRITE, 00066 INSERT_MODE_EXPAND, 00067 INSERT_MODE_FILL_START, 00068 INSERT_MODE_FILL_END 00069 } lives_mt_insert_mode_t; 00070 00071 00072 typedef enum { 00073 GRAV_MODE_NORMAL, 00074 GRAV_MODE_LEFT, 00075 GRAV_MODE_RIGHT 00076 } lives_mt_grav_mode_t; 00077 00078 00079 typedef enum { 00080 // undo actions 00082 MT_UNDO_NONE=0, 00083 MT_UNDO_INSERT_BLOCK=1, 00084 MT_UNDO_INSERT_AUDIO_BLOCK=2, 00085 00086 // minimal event_list 00087 MT_UNDO_APPLY_FILTER=512, 00088 MT_UNDO_DELETE_FILTER=513, 00089 MT_UNDO_SPLIT=514, 00090 MT_UNDO_SPLIT_MULTI=515, 00091 MT_UNDO_FILTER_MAP_CHANGE=516, 00092 00093 // full backups of event_list 00094 MT_UNDO_DELETE_BLOCK=1024, 00095 MT_UNDO_MOVE_BLOCK=1025, 00096 MT_UNDO_REMOVE_GAPS=1026, 00097 MT_UNDO_DELETE_AUDIO_BLOCK=1027, 00098 MT_UNDO_MOVE_AUDIO_BLOCK=1028, 00099 MT_UNDO_INSERT_GAP=1029 00100 } lives_mt_undo_t; 00101 00102 00103 00104 typedef enum { 00105 NB_ERROR_SEL, 00106 NB_ERROR_NOEFFECT, 00107 NB_ERROR_NOTRANS, 00108 NB_ERROR_NOCOMP, 00109 NB_ERROR_NOCLIP 00110 } lives_mt_nb_error_t; 00111 00112 00113 00114 typedef enum { 00115 POLY_NONE=0, 00116 POLY_CLIPS, 00117 POLY_IN_OUT, 00118 POLY_FX_STACK, 00119 POLY_EFFECTS, 00120 POLY_TRANS, 00121 POLY_COMP, 00122 POLY_PARAMS 00123 } lives_mt_poly_state_t; 00124 00125 00126 00127 typedef enum { 00128 DIRECTION_NEGATIVE, 00129 DIRECTION_POSITIVE 00130 } lives_direction_t; 00131 00132 00133 typedef enum { 00134 MT_LAST_FX_NONE=0, 00135 MT_LAST_FX_BLOCK, 00136 MT_LAST_FX_REGION 00137 } lives_mt_last_fx_type_t; 00138 00139 00140 typedef enum { 00141 FX_ORD_NONE=0, 00142 FX_ORD_BEFORE, 00143 FX_ORD_AFTER 00144 } lives_mt_fx_order_t; 00145 00146 00147 typedef enum { 00148 // block state 00149 BLOCK_UNSELECTED=0, 00150 BLOCK_SELECTED 00151 } lives_mt_block_state_t; 00152 00153 00154 00155 struct _mt_opts { 00156 gboolean set; 00157 gboolean move_effects; 00158 gboolean fx_auto_preview; 00159 gboolean snap_over; 00160 lives_mt_grav_mode_t grav_mode; 00161 lives_mt_mouse_mode_t mouse_mode; 00162 lives_mt_insert_mode_t insert_mode; 00163 gboolean show_audio; 00164 gboolean show_ctx; 00165 gboolean ign_ins_sel; 00166 gboolean follow_playback; 00167 gboolean insert_audio; 00168 gboolean pertrack_audio; 00169 gboolean audio_bleedthru; 00170 gboolean gang_audio; 00171 gint back_audio_tracks; 00172 }; 00173 00174 00175 struct _mt { 00176 // widgets 00177 GtkWidget *window; 00178 GtkWidget *top_vbox; 00179 GtkWidget *hbox; 00180 GtkWidget *play_blank; 00181 GtkWidget *play_box; 00182 GtkWidget *poly_box; 00183 GtkWidget *clip_scroll; 00184 GtkWidget *clip_inner_box; 00185 GtkWidget *in_out_box; 00186 GtkWidget *in_hbox; 00187 GtkWidget *out_hbox; 00188 GtkWidget *in_image; 00189 GtkWidget *out_image; 00190 GtkWidget *context_box; 00191 GtkWidget *sep_image; 00192 GtkWidget *timeline_table_header; 00193 GtkWidget *tl_eventbox; 00194 GtkWidget *timeline_table; 00195 GtkWidget *timeline; 00196 GtkWidget *timeline_eb; 00197 GtkWidget *timeline_reg; 00198 GtkWidget *infobar; 00199 GtkWidget *stop; 00200 GtkWidget *rewind; 00201 GtkWidget *sepwin; 00202 GtkWidget *mute_audio; 00203 GtkWidget *loop_continue; 00204 GtkWidget *insert; 00205 GtkWidget *audio_insert; 00206 GtkWidget *delblock; 00207 GtkWidget *clipedit; 00208 GtkWidget *vpaned; 00209 GtkWidget *hpaned; 00210 GtkWidget *scrollbar; 00211 GtkWidget *playall; 00212 GtkWidget *playsel; 00213 GtkWidget *jumpnext; 00214 GtkWidget *jumpback; 00215 GtkWidget *render; 00216 GtkWidget *prerender_aud; 00217 GtkWidget *fx_block; 00218 GtkWidget *fx_delete; 00219 GtkWidget *fx_edit; 00220 GtkWidget *fx_region; 00221 GtkWidget *fx_region_1; 00222 GtkWidget *fx_region_2; 00223 GtkWidget *fx_region_2av; 00224 GtkWidget *fx_region_2v; 00225 GtkWidget *fx_region_2a; 00226 GtkWidget *fx_region_3; 00227 GtkWidget *atrans_menuitem; 00228 GtkWidget *submenu_atransfx; 00229 GtkWidget *move_fx; 00230 GtkWidget *mm_menuitem; 00231 GtkWidget *mm_move; 00232 GtkWidget *mm_select; 00233 GtkWidget *ins_menuitem; 00234 GtkWidget *ins_normal; 00235 GtkWidget *grav_menuitem; 00236 GtkWidget *grav_normal; 00237 GtkWidget *grav_left; 00238 GtkWidget *grav_right; 00239 GtkWidget *select_track; 00240 GtkWidget *view_events; 00241 GtkWidget *view_clips; 00242 GtkWidget *view_in_out; 00243 GtkWidget *view_effects; 00244 GtkWidget *avel_box; 00245 GtkWidget *checkbutton_avel_reverse; 00246 GtkWidget *spinbutton_avel; 00247 GtkWidget *avel_scale; 00248 GtkWidget *spinbutton_in; 00249 GtkWidget *spinbutton_out; 00250 GtkWidget *checkbutton_start_anchored; 00251 GtkWidget *checkbutton_end_anchored; 00252 GtkWidget *timecode; 00253 GtkWidget *spinbutton_start; 00254 GtkWidget *spinbutton_end; 00255 GtkWidget *tl_hbox; 00256 GtkWidget *fx_base_box; 00257 GtkWidget *fx_contents_box; 00258 GtkWidget *fx_box; 00259 GtkWidget *fx_label; 00260 GtkWidget *param_inner_box; 00261 GtkWidget *param_box; 00262 GtkWidget *next_node_button; 00263 GtkWidget *prev_node_button; 00264 GtkWidget *del_node_button; 00265 GtkWidget *node_spinbutton; 00266 GtkWidget *node_scale; 00267 GtkWidget *sel_label; 00268 GtkWidget *l_sel_arrow; 00269 GtkWidget *r_sel_arrow; 00270 GtkWidget *save_event_list; 00271 GtkWidget *load_event_list; 00272 GtkWidget *clear_event_list; 00273 GtkWidget *tc_to_rs; 00274 GtkWidget *tc_to_re; 00275 GtkWidget *rs_to_tc; 00276 GtkWidget *re_to_tc; 00277 GtkWidget *undo; 00278 GtkWidget *redo; 00279 GtkWidget *remove_gaps; 00280 GtkWidget *remove_first_gaps; 00281 GtkWidget *split_sel; 00282 GtkWidget *ins_gap_sel; 00283 GtkWidget *ins_gap_cur; 00284 GtkWidget *last_filter_map; 00285 GtkWidget *next_filter_map; 00286 GtkWidget *fx_list_box; 00287 GtkWidget *fx_list_scroll; 00288 GtkWidget *fx_list_vbox; 00289 GtkWidget *next_fm_button; 00290 GtkWidget *prev_fm_button; 00291 GtkWidget *fx_ibefore_button; 00292 GtkWidget *fx_iafter_button; 00293 GtkWidget *cback_audio; 00294 GtkWidget *load_vals; 00295 GtkWidget *change_vals; 00296 GtkWidget *aparam_separator; 00297 GtkWidget *aparam_menuitem; 00298 GtkWidget *aparam_submenu; 00299 GtkWidget *render_sep; 00300 GtkWidget *render_vid; 00301 GtkWidget *render_aud; 00302 GtkWidget *view_audio; 00303 GtkWidget *clear_marks; 00304 GtkWidget *fd_frame; 00305 GtkWidget *apply_fx_button; 00306 GtkWidget *eview_button; 00307 GtkWidget *follow_play; 00308 GtkWidget *change_max_disp; 00309 GtkWidget *add_vid_behind; 00310 GtkWidget *add_vid_front; 00311 GtkWidget *quit; 00312 GtkWidget *troubleshoot; 00313 GtkWidget *fx_params_label; 00314 GtkWidget *amixer_button; 00315 GtkWidget *view_sel_events; 00316 GtkWidget *adjust_start_end; 00317 GtkWidget *in_eventbox; 00318 GtkWidget *out_eventbox; 00319 GtkWidget *start_in_label; 00320 GtkWidget *end_out_label; 00321 GtkWidget *context_frame; 00322 GtkWidget *nb; 00323 GtkWidget *nb_label; 00324 00325 GtkWidget *open_menu; 00326 GtkWidget *recent_menu; 00327 GtkWidget *recent1; 00328 GtkWidget *recent2; 00329 GtkWidget *recent3; 00330 GtkWidget *recent4; 00331 00332 GtkWidget *time_scrollbar; 00333 GtkWidget *show_layout_errors; 00334 00335 GtkWidget *load_set; 00336 GtkWidget *save_set; 00337 00338 GtkWidget *close; 00339 00340 GtkWidget *clear_ds; 00341 00342 GtkWidget *gens_submenu; 00343 GtkWidget *capture; 00344 00345 GtkWidget *insa_eventbox; 00346 GtkWidget *insa_checkbutton; 00347 GtkWidget *snapo_checkbutton; 00348 00349 GtkObject *spinbutton_in_adj; 00350 GtkObject *spinbutton_out_adj; 00351 00352 GdkCursor *cursor; 00353 00354 GtkObject *hadjustment; 00355 GtkObject *node_adj; 00356 00357 GList *audio_draws; 00358 00359 GList *audio_vols; 00360 GList *audio_vols_back; 00361 00362 GtkAccelGroup *accel_group; 00363 GList *video_draws; 00364 GtkObject *vadjustment; 00365 00366 GdkDisplay *display; 00367 00368 GList *aparam_view_list; 00369 00370 GdkPixbuf *sepwin_pixbuf; 00371 00372 gulong spin_in_func; 00373 gulong spin_out_func; 00374 gulong spin_avel_func; 00375 gulong check_start_func; 00376 gulong check_end_func; 00377 gulong check_avel_rev_func; 00378 00379 gulong mm_move_func; 00380 gulong mm_select_func; 00381 00382 gulong ins_normal_func; 00383 00384 gulong grav_normal_func; 00385 gulong grav_left_func; 00386 gulong grav_right_func; 00387 00388 gulong sepwin_func; 00389 gulong mute_audio_func; 00390 gulong loop_cont_func; 00391 00392 gulong seltrack_func; 00393 00394 gulong tc_func; 00395 00396 gulong node_adj_func; 00397 00398 weed_plant_t *event_list; 00399 00400 weed_plant_t *init_event; 00401 weed_plant_t *selected_init_event; 00402 00403 gint num_video_tracks; 00404 gdouble end_secs; 00405 00406 // timeline min and max display values 00407 gdouble tl_min; 00408 gdouble tl_max; 00409 00410 gint clip_selected; 00411 gint file_selected; 00412 gint current_track; 00413 00414 GList *selected_tracks; 00415 00416 lives_mt_poly_state_t poly_state; 00417 00418 gint render_file; 00419 00420 lives_direction_t last_direction; 00421 00422 track_rect *block_selected; 00423 track_rect *putative_block; 00424 00425 gdouble ptr_time; 00426 00427 gdouble tl_fixed_length; 00428 00429 gdouble fps; 00430 00431 gdouble region_start; 00432 gdouble region_end; 00433 gdouble region_init; 00434 gboolean region_updating; 00435 00436 gboolean is_rendering; 00437 gboolean pr_audio; 00438 00439 gint max_disp_vtracks; 00440 gint current_fx; 00441 00442 gboolean mt_frame_preview; 00443 00444 lives_rfx_t *current_rfx; 00445 00446 gchar layout_name[256]; 00447 00448 // cursor warping for mouse move mode 00449 gdouble hotspot_x; 00450 gint hotspot_y; 00451 00452 gboolean moving_block; 00453 00455 00456 gint sel_x; 00457 gint sel_y; 00458 00459 gulong mouse_mot1; 00460 gulong mouse_mot2; 00461 00462 gboolean tl_selecting; 00463 00464 /* start and end offset overrides for inserting (used during block move) */ 00465 weed_timecode_t insert_start; 00466 weed_timecode_t insert_end; 00467 00469 gdouble insert_avel; 00470 00471 GList *undos; 00472 size_t undo_buffer_used; 00473 unsigned char *undo_mem; 00474 gint undo_offset; 00475 gboolean did_backup; 00476 00477 gchar undo_text[32]; 00478 gchar redo_text[32]; 00479 00480 gboolean undoable; 00481 gboolean redoable; 00482 00483 gboolean changed; 00484 gboolean auto_changed; 00485 00486 int64_t auto_back_time; 00487 00488 // stuff to do with framedraw "special" widgets 00489 gint inwidth; 00490 gint inheight; 00491 gint outwidth; 00492 gint outheight; 00493 lives_special_framedraw_rect_t *framedraw; 00494 gint track_index; 00495 00496 lives_mt_last_fx_type_t last_fx_type; 00497 00498 lives_mt_fx_order_t fx_order; 00499 00500 mt_opts opts; 00501 00502 gboolean auto_reloading; 00503 00504 weed_plant_t *fm_edit_event; 00505 weed_plant_t *moving_fx; 00506 00507 int avol_fx; 00508 weed_plant_t *avol_init_event; 00509 00510 gulong spin_start_func; 00511 gulong spin_end_func; 00512 00513 gboolean layout_prompt; 00514 gboolean layout_set_properties; 00515 gboolean ignore_load_vals; 00516 00517 gdouble user_fps; 00518 gint user_width; 00519 gint user_height; 00520 gint user_arate; 00521 gint user_achans; 00522 gint user_asamps; 00523 gint user_signed_endian; 00524 00525 gboolean render_vidp; 00526 gboolean render_audp; 00527 00528 gint exact_preview; 00529 00530 00531 GList *tl_marks; 00532 00533 weed_plant_t *pb_start_event; 00534 weed_plant_t *pb_loop_event; 00535 00536 weed_plant_t *specific_event; 00537 00538 gdouble context_time; 00539 gboolean use_context; 00540 00541 gint cursor_style; 00542 00543 gboolean is_paused; 00544 00545 /* current size of frame inside playback/preview area */ 00546 gint play_width; 00547 gint play_height; 00548 00549 /* current size of playback/preview area */ 00550 gint play_window_width; 00551 gint play_window_height; 00552 00553 gint selected_filter; 00554 00555 gint top_track; 00556 00557 gboolean redraw_block; 00558 00559 gboolean was_undo_redo; 00560 00561 gboolean no_expose; 00562 00563 gboolean is_ready; 00564 00565 gboolean aud_track_selected; 00566 00567 gboolean has_audio_file; 00568 00569 gboolean tl_mouse; 00570 00571 gboolean playing_sel; 00572 00573 guint idlefunc; 00574 00575 GList *clip_labels; 00576 00577 lives_amixer_t *amixer; 00578 00579 gdouble prev_fx_time; 00580 00581 gboolean block_tl_move; 00582 gboolean block_node_spin; 00583 00584 gboolean is_atrans; 00585 00586 }; // lives_mt 00587 00588 00589 00590 00591 typedef struct { 00592 lives_mt_undo_t action; 00593 weed_timecode_t tc; 00594 void *extra; 00595 size_t data_len; 00596 } mt_undo; 00597 00598 00599 struct _lives_amixer_t { 00600 GtkWidget *main_hbox; 00601 GtkWidget **ch_sliders; 00602 GtkWidget *gang_checkbutton; 00603 GtkWidget *inv_checkbutton; 00604 gulong *ch_slider_fns; 00605 gint nchans; 00606 lives_mt *mt; 00607 }; 00608 00609 00610 // reasons for track invisibility (bitmap) 00611 #define TRACK_I_HIDDEN_USER (1<<0) 00612 #define TRACK_I_HIDDEN_SCROLLED (1<<1) 00613 00618 struct _track_rect { 00619 track_rect *next; 00620 track_rect *prev; 00621 weed_plant_t *start_event; 00622 weed_plant_t *end_event; 00623 00624 weed_timecode_t offset_start; 00625 00626 lives_mt_block_state_t state; 00627 gboolean start_anchored; 00628 gboolean end_anchored; 00629 gboolean ordered; 00630 00631 GtkWidget *eventbox; 00632 00633 }; 00634 00635 00636 /* translation table for matching event_id to init_event */ 00637 typedef struct { 00638 void *in; 00639 void *out; 00640 } ttable; 00641 00642 00643 /* clip->layout use mapping, from layout.map file */ 00644 typedef struct { 00645 gchar *handle; 00646 gint64 unique_id; 00647 gchar *name; 00648 GList *list; 00649 } layout_map; 00650 00651 00652 00653 00654 00656 00657 // setup functions 00658 00659 lives_mt *multitrack (weed_plant_t *, gint orig_file, gdouble fps); 00660 void mt_init_tracks (lives_mt *, gboolean set_min_max); 00661 gboolean on_multitrack_activate (GtkMenuItem *menuitem, weed_plant_t *event_list); 00662 00663 // delete function 00664 gboolean multitrack_delete (lives_mt *, gboolean save); 00665 00666 // morph the poly window 00667 void polymorph (lives_mt *, lives_mt_poly_state_t poly); 00668 00669 // sens/desens 00670 void mt_desensitise (lives_mt *); 00671 void mt_sensitise (lives_mt *); 00672 00673 // external control callbacks 00674 void insert_here_cb (GtkMenuItem *, gpointer mt); 00675 void insert_audio_here_cb (GtkMenuItem *, gpointer mt); 00676 void insert_at_ctx_cb (GtkMenuItem *, gpointer mt); 00677 void insert_audio_at_ctx_cb (GtkMenuItem *, gpointer mt); 00678 void multitrack_end_cb (GtkMenuItem *, gpointer mt); 00679 void delete_block_cb (GtkMenuItem *, gpointer mt); 00680 void selblock_cb (GtkMenuItem *, gpointer mt); 00681 void list_fx_here_cb (GtkMenuItem *, gpointer mt); 00682 void edit_start_end_cb (GtkMenuItem *, gpointer mt); 00683 void close_clip_cb (GtkMenuItem *, gpointer mt); 00684 void show_clipinfo_cb (GtkMenuItem *, gpointer mt); 00685 00686 // menuitem callbacks 00687 void on_add_video_track_activate (GtkMenuItem *, gpointer mt); 00688 void multitrack_insert (GtkMenuItem *, gpointer mt); 00689 void multitrack_adj_start_end (GtkMenuItem *, gpointer mt); 00690 void multitrack_audio_insert (GtkMenuItem *, gpointer mt); 00691 void multitrack_view_events (GtkMenuItem *, gpointer mt); 00692 void multitrack_view_sel_events (GtkMenuItem *, gpointer mt); 00693 void on_render_activate (GtkMenuItem *, gpointer mt); 00694 void on_prerender_aud_activate (GtkMenuItem *, gpointer mt); 00695 void on_jumpnext_activate (GtkMenuItem *, gpointer mt); 00696 void on_jumpback_activate (GtkMenuItem *, gpointer mt); 00697 void on_delblock_activate (GtkMenuItem *, gpointer mt); 00698 void on_seltrack_activate (GtkMenuItem *, gpointer mt); 00699 void multitrack_view_details (GtkMenuItem *, gpointer mt); 00700 void mt_add_region_effect (GtkMenuItem *, gpointer mt); 00701 void mt_add_block_effect (GtkMenuItem *, gpointer mt); 00702 void on_save_event_list_activate (GtkMenuItem *, gpointer mt); 00703 void on_load_event_list_activate (GtkMenuItem *, gpointer mt); 00704 void on_clear_event_list_activate (GtkMenuItem *, gpointer mt); 00705 void show_frame_events_activate (GtkMenuItem *, gpointer); 00706 void mt_save_vals_toggled (GtkMenuItem *, gpointer mt); 00707 void mt_load_vals_toggled (GtkMenuItem *, gpointer mt); 00708 void mt_load_vals_toggled (GtkMenuItem *, gpointer mt); 00709 void mt_render_vid_toggled (GtkMenuItem *, gpointer mt); 00710 void mt_render_aud_toggled (GtkMenuItem *, gpointer mt); 00711 void mt_fplay_toggled (GtkMenuItem *, gpointer mt); 00712 void mt_change_vals_activate (GtkMenuItem *, gpointer mt); 00713 void on_set_pvals_clicked (GtkWidget *button, gpointer mt); 00714 void on_move_fx_changed (GtkMenuItem *, gpointer mt); 00715 void select_all_time (GtkMenuItem *, gpointer mt); 00716 void select_from_zero_time (GtkMenuItem *, gpointer mt); 00717 void select_to_end_time (GtkMenuItem *, gpointer mt); 00718 void select_all_vid (GtkMenuItem *, gpointer mt); 00719 void select_no_vid (GtkMenuItem *, gpointer mt); 00720 void on_split_sel_activate (GtkMenuItem *, gpointer mt); 00721 void on_split_curr_activate (GtkMenuItem *, gpointer mt); 00722 void multitrack_undo (GtkMenuItem *, gpointer mt); 00723 void multitrack_redo (GtkMenuItem *, gpointer mt); 00724 void on_mt_showkeys_activate (GtkMenuItem *, gpointer); 00725 void on_mt_list_fx_activate (GtkMenuItem *, gpointer mt); 00726 void on_mt_delfx_activate (GtkMenuItem *, gpointer mt); 00727 void on_mt_fx_edit_activate (GtkMenuItem *, gpointer mt); 00728 void mt_view_audio_toggled (GtkMenuItem *, gpointer mt); 00729 void mt_view_ctx_toggled (GtkMenuItem *, gpointer mt); 00730 void mt_ign_ins_sel_toggled (GtkMenuItem *, gpointer mt); 00731 void mt_change_max_disp_tracks (GtkMenuItem *, gpointer mt); 00732 00733 // event_list functions 00734 weed_plant_t *add_blank_frames_up_to (weed_plant_t *event_list, weed_plant_t *start_event, weed_timecode_t end_tc, gdouble fps); 00735 00736 // track functions 00737 void on_cback_audio_activate (GtkMenuItem *, gpointer mt); 00738 GtkWidget *add_audio_track (lives_mt *, gint trackno, gboolean behind); 00739 void add_video_track_behind (GtkMenuItem *, gpointer mt); 00740 void add_video_track_front (GtkMenuItem *, gpointer mt); 00741 void delete_video_track(lives_mt *, gint layer, gboolean full); 00742 void delete_audio_track(lives_mt *, GtkWidget *eventbox, gboolean full); 00743 void delete_audio_tracks(lives_mt *, GList *list, gboolean full); 00744 void remove_gaps (GtkMenuItem *, gpointer mt); 00745 void remove_first_gaps (GtkMenuItem *, gpointer mt); 00746 void on_insgap_sel_activate (GtkMenuItem *, gpointer mt); 00747 void on_insgap_cur_activate (GtkMenuItem *, gpointer mt); 00748 void on_split_activate (GtkMenuItem *, gpointer mt); 00749 void scroll_tracks (lives_mt *, gint top_track); 00750 gboolean track_arrow_pressed (GtkWidget *ahbox, GdkEventButton *, gpointer mt); 00751 void track_select (lives_mt *); 00752 gboolean mt_track_is_audio(lives_mt *, int ntrack); 00753 gboolean mt_track_is_video(lives_mt *, int ntrack); 00754 00755 void mt_do_autotransition(lives_mt *, track_rect *block); 00756 00757 00758 // track mouse movement 00759 gboolean on_track_click (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00760 gboolean on_atrack_click (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00761 gboolean on_track_header_click (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00762 gboolean on_track_between_click (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00763 gboolean on_track_release (GtkWidget *eventbox, GdkEventButton *event, gpointer mt); 00764 gboolean on_atrack_release (GtkWidget *eventbox, GdkEventButton *event, gpointer mt); 00765 gboolean on_track_header_release (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00766 gboolean on_track_between_release (GtkWidget *eventbox, GdkEventButton *, gpointer mt); 00767 gboolean on_track_move (GtkWidget *widget, GdkEventMotion *event, gpointer mt); 00768 gboolean on_track_header_move (GtkWidget *widget, GdkEventMotion *event, gpointer mt); 00769 00770 void unselect_all (lives_mt *); 00771 void insert_frames (gint filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, lives_direction_t direction, GtkWidget *eventbox, lives_mt *, track_rect *in_block); 00772 void insert_audio (gint filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, gdouble avel, lives_direction_t direction, GtkWidget *eventbox, lives_mt *, track_rect *in_block); 00773 void on_seltrack_toggled (GtkWidget *, gpointer mt); 00774 void scroll_track_by_scrollbar (GtkVScrollbar *sbar, gpointer mt); 00775 00776 // block functions 00777 void in_out_start_changed (GtkWidget *, gpointer mt); 00778 void in_out_end_changed (GtkWidget *, gpointer mt); 00779 void in_anchor_toggled (GtkToggleButton *, gpointer mt); 00780 void out_anchor_toggled (GtkToggleButton *, gpointer mt); 00781 void avel_reverse_toggled (GtkToggleButton *, gpointer mt); 00782 void avel_spin_changed (GtkSpinButton *, gpointer mt); 00783 00784 // block API functions 00785 gint mt_get_last_block_number(lives_mt *, int ntrack); 00786 gint mt_get_block_count(lives_mt *, int ntrack); 00787 gdouble mt_get_block_sttime(lives_mt *, int ntrack, int iblock); 00788 gdouble mt_get_block_entime(lives_mt *, int ntrack, int iblock); 00789 00790 00791 // timeline functions 00792 void mt_tl_move(lives_mt *, gdouble pos_rel); 00793 void set_timeline_end_secs (lives_mt *, gdouble secs); 00794 gboolean on_timeline_press (GtkWidget *, GdkEventButton *, gpointer mt); 00795 gboolean on_timeline_release (GtkWidget *, GdkEventButton *, gpointer mt); 00796 gboolean on_timeline_update (GtkWidget *, GdkEventMotion *, gpointer mt); 00797 gint expose_timeline_reg_event (GtkWidget *, GdkEventExpose *, gpointer mt); 00798 gint mt_expose_laudtrack_event (GtkWidget *ebox, GdkEventExpose *, gpointer mt); 00799 gint mt_expose_raudtrack_event (GtkWidget *ebox, GdkEventExpose *, gpointer mt); 00800 void draw_region (lives_mt *mt); 00801 void tc_to_rs (GtkMenuItem *, gpointer mt); 00802 void tc_to_re (GtkMenuItem *, gpointer mt); 00803 void rs_to_tc (GtkMenuItem *, gpointer mt); 00804 void re_to_tc (GtkMenuItem *, gpointer mt); 00805 gboolean mt_mark_callback (GtkAccelGroup *group, GObject *obj, guint keyval, GdkModifierType mod, gpointer user_data); 00806 void multitrack_clear_marks (GtkMenuItem *, gpointer mt); 00807 void mt_show_current_frame(lives_mt *, gboolean return_layer); 00808 void mt_clear_timeline(lives_mt *mt); 00809 00810 00811 // context box text 00812 void clear_context (lives_mt *); 00813 void add_context_label (lives_mt *, const gchar *text); 00814 void mouse_mode_context(lives_mt *); 00815 void do_sel_context (lives_mt *); 00816 void do_fx_list_context (lives_mt *, gint fxcount); 00817 void do_fx_move_context(lives_mt *mt); 00818 00819 // playback / animation 00820 void multitrack_playall (lives_mt *); 00821 void multitrack_play_sel (GtkMenuItem *, gpointer mt); 00822 void animate_multitrack (lives_mt *); 00823 void unpaint_line(lives_mt *, GtkWidget *eventbox); 00824 void unpaint_lines(lives_mt *); 00825 00826 void mt_prepare_for_playback(lives_mt *); 00827 void mt_post_playback(lives_mt *); 00828 00829 00830 // effect node controls 00831 void on_next_node_clicked (GtkWidget *, gpointer mt); 00832 void on_prev_node_clicked (GtkWidget *, gpointer mt); 00833 void on_del_node_clicked (GtkWidget *, gpointer mt); 00834 void on_node_spin_value_changed (GtkSpinButton *, gpointer mt); 00835 gdouble mt_get_effect_time(lives_mt *); 00836 00837 void on_frame_preview_clicked (GtkButton *, gpointer mt); 00838 void show_preview (lives_mt *, weed_timecode_t tc); 00839 00840 // filter list controls 00841 weed_plant_t *get_prev_fm (lives_mt *, gint current_track, weed_plant_t *frame); 00842 weed_plant_t *get_next_fm (lives_mt *, gint current_track, weed_plant_t *frame); 00843 00844 void on_prev_fm_clicked (GtkWidget *button, gpointer user_data); 00845 void on_next_fm_clicked (GtkWidget *button, gpointer user_data); 00846 void on_fx_insb_clicked (GtkWidget *button, gpointer user_data); 00847 void on_fx_insa_clicked (GtkWidget *button, gpointer user_data); 00848 00849 // utils 00850 guint event_list_get_byte_size(lives_mt *mt, weed_plant_t *event_list, int *num_events); 00851 gboolean event_list_rectify(lives_mt *, weed_plant_t *event_listy); 00852 gboolean make_backup_space (lives_mt *, size_t space_needed); 00853 void activate_mt_preview(lives_mt *); 00854 void **mt_get_pchain(void); 00855 void event_list_free_undos(lives_mt *); 00856 gboolean used_in_current_layout(lives_mt *, gint file); 00857 00858 // event_list utilities 00859 gboolean compare_filter_maps(weed_plant_t *fm1, weed_plant_t *fm2, gint ctrack); 00860 void move_init_in_filter_map(lives_mt *mt, weed_plant_t *event_list, weed_plant_t *fmap, weed_plant_t *ifrom, weed_plant_t *ito, gint track, gboolean after); 00861 void update_filter_events(lives_mt *, weed_plant_t *first_event, weed_timecode_t start_tc, weed_timecode_t end_tc, int track, weed_timecode_t new_start_tc, int new_track); 00862 void mt_fixup_events(lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event); 00863 00864 // event_list load/save 00865 weed_plant_t *load_event_list(lives_mt *, gchar *eload_file); 00866 00867 00868 // layouts and layout maps 00869 GList *load_layout_map(void); 00870 void add_markers(lives_mt *, weed_plant_t *event_list); 00871 void remove_markers(weed_plant_t *event_list); 00872 void save_layout_map (int *lmap, double *lmap_audio, const gchar *file, const gchar *dir); 00873 00874 void wipe_layout(lives_mt *); 00875 00876 void migrate_layouts (const gchar *old_set_name, const gchar *new_set_name); 00877 00878 GList *layout_frame_is_affected(gint clipno, gint frame); 00879 GList *layout_audio_is_affected(gint clipno, gdouble time); 00880 00881 gboolean check_for_layout_del (lives_mt *, gboolean exiting); 00882 00883 void stored_event_list_free_all(gboolean wiped); 00884 void stored_event_list_free_undos(void); 00885 void remove_current_from_affected_layouts(lives_mt *); 00886 00887 00888 // auto backup 00889 guint mt_idle_add(lives_mt *); 00890 void recover_layout(GtkButton *, gpointer); 00891 void recover_layout_cancelled(GtkButton *, gpointer user_data); 00892 void write_backup_layout_numbering(lives_mt *); 00893 00894 00895 // internal functions 00896 void mouse_select_end(GtkWidget *, lives_mt *); 00897 00898 00899 // amixer funcs 00900 void amixer_show (GtkButton *, gpointer mt); 00901 void on_amixer_close_clicked (GtkButton *, lives_mt *mt); 00902 GtkWidget * amixer_add_channel_slider (lives_mt *, gint i); 00903 00904 00905 // misc 00906 void mt_change_disp_tracks_ok (GtkButton *, gpointer user_data); 00907 void mt_swap_play_pause (lives_mt *, gboolean put_pause); 00908 gchar *set_values_from_defs(lives_mt *, gboolean from_prefs); 00909 00910 00911 // clip boxes 00912 void mt_clip_select (lives_mt *, gboolean scroll); 00913 void mt_delete_clips(lives_mt *, gint file); 00914 void mt_init_clips (lives_mt *, gint orig_file, gboolean add); 00915 00916 // key shortcuts 00917 gboolean mt_prevclip (GtkAccelGroup *group, GObject *obj, guint keyval, GdkModifierType mod, gpointer user_data); 00918 gboolean mt_nextclip (GtkAccelGroup *group, GObject *obj, guint keyval, GdkModifierType mod, gpointer user_data); 00919 00920 typedef enum { 00921 /* default to warn about */ 00922 LMAP_ERROR_MISSING_CLIP=1, 00923 LMAP_ERROR_CLOSE_FILE=2, 00924 LMAP_ERROR_DELETE_FRAMES=3, 00925 LMAP_ERROR_DELETE_AUDIO=4, 00926 00927 /*non-default*/ 00928 LMAP_ERROR_SHIFT_FRAMES=65, 00929 LMAP_ERROR_ALTER_FRAMES=66, 00930 LMAP_ERROR_SHIFT_AUDIO=67, 00931 LMAP_ERROR_ALTER_AUDIO=68, 00932 00933 /* info */ 00934 LMAP_INFO_SETNAME_CHANGED=1024 00935 } lives_lmap_error_t; 00936 00937 #endif