LiVES  2.4.1-svn
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
multitrack.h
Go to the documentation of this file.
1 // multitrack.h
2 // LiVES
3 // (c) G. Finch 2005 - 2014 <salsaman@gmail.com>
4 // released under the GNU GPL 3 or later
5 // see file ../COPYING for licensing details
6 
7 // multitrack window
8 
9 #ifndef HAS_LIVES_MULTITRACK_H
10 #define HAS_LIVES_MULTITRACK_H
11 
12 
14 
15 
16 #define CLIP_THUMB_WIDTH ((int)(72.*widget_opts.scale))
17 #define CLIP_THUMB_HEIGHT ((int)(72.*widget_opts.scale))
18 
19 #define CLIP_LABEL_LENGTH ((int)(20.*widget_opts.scale))
20 
21 #define BLOCK_THUMB_WIDTH ((int)(40.*widget_opts.scale))
22 
23 #define MT_PLAY_WIDTH_SMALL ((int)(320.*widget_opts.scale))
24 #define MT_PLAY_HEIGHT_SMALL ((int)(216.*widget_opts.scale))
25 
26 #define MT_PLAY_WIDTH_EXP ((int)(432.*widget_opts.scale))
27 #define MT_PLAY_HEIGHT_EXP ((int)(324.*widget_opts.scale))
28 
29 #define MT_CTX_WIDTH ((int)(320.*widget_opts.scale))
30 #define MT_CTX_HEIGHT ((int)(220.*widget_opts.scale))
31 
32 #define FX_BLOCK_WIDTH ((int)(80.*widget_opts.scale))
33 #define FX_BLOCK_HEIGHT ((int)(20.*widget_opts.scale))
34 
35 #define MT_TRACK_HEIGHT ((int)(25.*widget_opts.scale))
36 
37 #define TIMECODE_LENGTH 14
38 
39 
41 #define BLOCK_DRAW_SIMPLE 1
42 #define BLOCK_DRAW_THUMB 2
43 #define BLOCK_DRAW_TYPE BLOCK_DRAW_THUMB
44 
45 #define DEF_TIME 120
46 
47 typedef struct _mt lives_mt;
48 
49 typedef struct _track_rect track_rect;
50 
51 typedef struct _mt_opts mt_opts;
52 
53 typedef struct _lives_amixer_t lives_amixer_t;
54 
55 #define MAX_DISP_VTRACKS 5
56 
57 typedef enum {
62 
63 
64 typedef enum {
66 
67  // not implemented yet
72 
73 
74 typedef enum {
79 
80 
81 typedef enum {
82  // undo actions
87 
88  // minimal event_list
94 
95  // full backups of event_list
103 
104 
105 
106 typedef enum {
113 
114 
115 
116 typedef enum {
126 
127 
128 
129 typedef enum {
133 
134 
135 typedef enum {
140 
141 
142 typedef enum {
147 
148 
149 typedef enum {
150  // block state
154 
155 
156 
157 struct _mt_opts {
158  boolean set;
159  boolean move_effects;
161  boolean snap_over;
165  boolean show_audio;
166  boolean show_ctx;
167  boolean ign_ins_sel;
169  boolean insert_audio;
170  boolean pertrack_audio;
171  boolean audio_bleedthru;
172  boolean gang_audio;
173  boolean autocross_audio;
175  boolean render_vidp;
176  boolean render_audp;
177  boolean normalise_audp;
178 };
179 
180 
181 struct _mt {
182  // widgets
183  LiVESWidget *window;
184  LiVESWidget *menubar;
185  LiVESWidget *top_vbox;
186  LiVESWidget *hbox;
187  LiVESWidget *play_blank;
188  LiVESWidget *play_box;
189  LiVESWidget *poly_box;
190  LiVESWidget *clip_scroll;
191  LiVESWidget *clip_inner_box;
192  LiVESWidget *in_out_box;
193  LiVESWidget *in_hbox;
194  LiVESWidget *out_hbox;
195  LiVESWidget *in_image;
196  LiVESWidget *out_image;
197  LiVESWidget *context_box;
198  LiVESWidget *context_scroll;
199  LiVESWidget *sep_image;
200  LiVESWidget *timeline_table_header;
201  LiVESWidget *tl_eventbox;
202  LiVESWidget *timeline_table;
203  LiVESWidget *timeline;
204  LiVESWidget *timeline_eb;
205  LiVESWidget *timeline_reg;
206  LiVESWidget *infobar;
207  LiVESWidget *stop;
208  LiVESWidget *rewind;
209  LiVESWidget *sepwin;
210  LiVESWidget *mute_audio;
211  LiVESWidget *loop_continue;
212  LiVESWidget *insert;
213  LiVESWidget *audio_insert;
214  LiVESWidget *delblock;
215  LiVESWidget *clipedit;
216  LiVESWidget *vpaned;
217  LiVESWidget *hpaned;
218  LiVESWidget *scrollbar;
219  LiVESWidget *playall;
220  LiVESWidget *playsel;
221  LiVESWidget *jumpnext;
222  LiVESWidget *jumpback;
223  LiVESWidget *render;
224  LiVESWidget *prerender_aud;
225  LiVESWidget *fx_block;
226  LiVESWidget *fx_blockv;
227  LiVESWidget *fx_blocka;
228  LiVESWidget *fx_delete;
229  LiVESWidget *fx_edit;
230  LiVESWidget *fx_region;
231  LiVESWidget *fx_region_1;
232  LiVESWidget *fx_region_1v;
233  LiVESWidget *fx_region_1a;
234  LiVESWidget *fx_region_2;
235  LiVESWidget *fx_region_2av;
236  LiVESWidget *fx_region_2v;
237  LiVESWidget *fx_region_2a;
238  LiVESWidget *fx_region_3;
239  LiVESWidget *atrans_menuitem;
240  LiVESWidget *submenu_atransfx;
241  LiVESWidget *move_fx;
242  LiVESWidget *mm_menuitem;
243  LiVESWidget *mm_move;
244  LiVESWidget *mm_select;
245  LiVESWidget *ins_menuitem;
246  LiVESWidget *ins_normal;
247  LiVESToolItem *grav_menuitem;
248  LiVESWidget *grav_label;
249  LiVESWidget *grav_normal;
250  LiVESWidget *grav_left;
251  LiVESWidget *grav_right;
252  LiVESWidget *select_track;
253  LiVESWidget *seldesel_menuitem;
254  LiVESWidget *view_events;
255  LiVESWidget *view_clips;
256  LiVESWidget *view_in_out;
257  LiVESWidget *view_effects;
258  LiVESWidget *avel_box;
260  LiVESWidget *spinbutton_avel;
261  LiVESWidget *avel_scale;
262  LiVESWidget *spinbutton_in;
263  LiVESWidget *spinbutton_out;
266  LiVESWidget *timecode;
267  LiVESWidget *spinbutton_start;
268  LiVESWidget *spinbutton_end;
269  LiVESWidget *tl_hbox;
270  LiVESWidget *fx_base_box;
271  LiVESWidget *fx_contents_box;
272  LiVESWidget *fx_box;
273  LiVESWidget *fx_label;
274  LiVESWidget *param_inner_box;
275  LiVESWidget *param_box;
276  LiVESWidget *next_node_button;
277  LiVESWidget *prev_node_button;
278  LiVESWidget *del_node_button;
279  LiVESWidget *node_spinbutton;
280  LiVESWidget *node_scale;
281  LiVESWidget *sel_label;
282  LiVESWidget *l_sel_arrow;
283  LiVESWidget *r_sel_arrow;
284  LiVESWidget *save_event_list;
285  LiVESWidget *load_event_list;
286  LiVESWidget *clear_event_list;
287  LiVESWidget *tc_to_rs;
288  LiVESWidget *tc_to_re;
289  LiVESWidget *rs_to_tc;
290  LiVESWidget *re_to_tc;
291  LiVESWidget *undo;
292  LiVESWidget *redo;
293  LiVESWidget *ac_audio_check;
294  LiVESWidget *remove_gaps;
295  LiVESWidget *remove_first_gaps;
296  LiVESWidget *split_sel;
297  LiVESWidget *ins_gap_sel;
298  LiVESWidget *ins_gap_cur;
299  LiVESWidget *last_filter_map;
300  LiVESWidget *next_filter_map;
301  LiVESWidget *fx_list_box;
302  LiVESWidget *fx_list_scroll;
303  LiVESWidget *fx_list_vbox;
304  LiVESWidget *next_fm_button;
305  LiVESWidget *prev_fm_button;
306  LiVESWidget *fx_ibefore_button;
307  LiVESWidget *fx_iafter_button;
308  LiVESWidget *rename_track;
309  LiVESWidget *cback_audio;
310  LiVESWidget *aload_subs;
311  LiVESWidget *load_vals;
312  LiVESWidget *change_vals;
313  LiVESWidget *aparam_separator;
314  LiVESWidget *aparam_menuitem;
315  LiVESWidget *aparam_submenu;
316  LiVESWidget *render_sep;
317  LiVESWidget *render_vid;
318  LiVESWidget *render_aud;
319  LiVESWidget *normalise_aud;
320  LiVESWidget *view_audio;
321  LiVESWidget *clear_marks;
322  LiVESWidget *fd_frame;
323  LiVESWidget *apply_fx_button;
324  LiVESToolItem *eview_button;
325  LiVESWidget *eview_label;
326  LiVESWidget *follow_play;
327  LiVESWidget *change_max_disp;
328  LiVESWidget *add_vid_behind;
329  LiVESWidget *add_vid_front;
330  LiVESWidget *quit;
331  LiVESWidget *troubleshoot;
332  LiVESWidget *fx_params_label;
333  LiVESWidget *amixer_button;
334  LiVESWidget *view_sel_events;
335  LiVESWidget *adjust_start_end;
336  LiVESWidget *context_frame;
337  LiVESWidget *nb;
338  LiVESWidget *nb_label;
339 
340  LiVESWidget *btoolbar;
341  LiVESWidget *btoolbar2;
342  LiVESWidget *btoolbar3;
343 
344  LiVESWidget *menu_hbox;
345 
346  LiVESWidget *open_menu;
347  LiVESWidget *recent_menu;
348  LiVESWidget *recent1;
349  LiVESWidget *recent2;
350  LiVESWidget *recent3;
351  LiVESWidget *recent4;
352 
353  LiVESWidget *time_scrollbar;
354  LiVESWidget *show_layout_errors;
355 
356  LiVESWidget *load_set;
357  LiVESWidget *save_set;
358 
359  LiVESWidget *close;
360 
361  LiVESWidget *clear_ds;
362 
363  LiVESWidget *gens_submenu;
364  LiVESWidget *capture;
365 
366  LiVESWidget *insa_checkbutton;
367  LiVESWidget *snapo_checkbutton;
368 
369  LiVESObject *spinbutton_in_adj;
370  LiVESObject *spinbutton_out_adj;
371 
372  LiVESObject *hadjustment;
373  LiVESObject *node_adj;
374 
375  LiVESList *audio_draws;
376 
377  LiVESList *audio_vols;
378  LiVESList *audio_vols_back;
379 
380  LiVESAccelGroup *accel_group;
381  LiVESList *video_draws;
382  LiVESObject *vadjustment;
383 
384  LiVESXDisplay *display;
385 
386  LiVESList *aparam_view_list;
387 
388  LiVESPixbuf *frame_pixbuf;
389 
390  LiVESList *cb_list;
391 
398 
401 
403 
407 
408  ulong sepwin_func;
411 
413 
414  ulong tc_func;
415 
416  weed_plant_t *event_list;
417 
418  weed_plant_t *init_event;
419  weed_plant_t *selected_init_event;
420  int num_video_tracks;
422  double end_secs;
423 
424  // timeline min and max display values
425  double tl_min;
426  double tl_max;
427 
431 
432  LiVESList *selected_tracks;
433 
435 
437 
439 
440  track_rect *block_selected;
441  track_rect *putative_block;
442 
443  double ptr_time;
444 
446 
447  double fps;
448 
449  double region_start;
450  double region_end;
451  double region_init;
453 
454  boolean is_rendering;
455  boolean pr_audio;
456 
459 
461 
463 
465 
466  // cursor warping for mouse move mode
467  double hotspot_x;
469 
470  boolean moving_block;
471 
472  double pb_start_time;
473 
475 
476  int sel_x;
477  int sel_y;
478 
479  ulong mouse_mot1;
480  ulong mouse_mot2;
481 
482  boolean tl_selecting;
483 
484  /* start and end offset overrides for inserting (used during block move) */
485  weed_timecode_t insert_start;
486  weed_timecode_t insert_end;
487 
489  double insert_avel;
490 
491  LiVESList *undos;
493  uint8_t *undo_mem;
495  boolean did_backup;
496 
497  char undo_text[32];
498  char redo_text[32];
499 
500  boolean undoable;
501  boolean redoable;
502 
503  boolean changed;
504  boolean auto_changed;
505 
506  int64_t auto_back_time;
507 
508  // stuff to do with framedraw "special" widgets
509  int inwidth;
510  int inheight;
511  int outwidth;
515 
517 
519 
520  mt_opts opts;
521 
522  boolean auto_reloading;
523 
524  weed_plant_t *fm_edit_event;
525  weed_plant_t *moving_fx;
526 
527  int avol_fx;
528  weed_plant_t *avol_init_event;
529 
532 
533  boolean layout_prompt;
536 
537  double user_fps;
544 
546 
547 
548  LiVESList *tl_marks;
549 
550  weed_plant_t *pb_start_event;
551  weed_plant_t *pb_loop_event;
552 
553  weed_plant_t *specific_event;
554 
555  double context_time;
556  boolean use_context;
557 
559 
560  boolean is_paused;
561 
562  /* current size of frame inside playback/preview area */
565 
566  /* current size of playback/preview area */
569 
571 
572  int top_track;
573 
574  boolean redraw_block;
575 
576  boolean was_undo_redo;
577 
578  boolean no_expose;
579 
580  boolean is_ready;
581 
583 
584  boolean has_audio_file;
585 
586  boolean tl_mouse;
587 
588  boolean playing_sel;
589 
590  uint32_t idlefunc;
591 
592  LiVESList *clip_labels;
593 
594  lives_amixer_t *amixer;
595 
596  double prev_fx_time;
597 
598  boolean block_tl_move;
599  boolean block_node_spin;
600 
601  boolean is_atrans;
602 
604 
606 }; // lives_mt
607 
608 
609 
610 
611 typedef struct {
613  weed_timecode_t tc;
614  void *extra;
615  size_t data_len;
616 } mt_undo;
617 
618 
620  LiVESWidget *main_hbox;
621  LiVESWidget **ch_sliders;
622  LiVESWidget *gang_checkbutton;
623  LiVESWidget *inv_checkbutton;
625  int nchans;
626  lives_mt *mt;
627 };
628 
629 
630 // reasons for track invisibility (bitmap)
631 #define TRACK_I_HIDDEN_USER (1<<0)
632 #define TRACK_I_HIDDEN_SCROLLED (1<<1)
633 
638 struct _track_rect {
639  ulong uid;
640 
641  track_rect *next;
642  track_rect *prev;
643  weed_plant_t *start_event;
644  weed_plant_t *end_event;
645 
646  weed_timecode_t offset_start;
647 
649  boolean start_anchored;
650  boolean end_anchored;
651  boolean ordered;
652 
653  LiVESWidget
655 
656 };
657 
658 
659 /* translation table for matching event_id to init_event */
660 typedef struct {
661  uint64_t in;
662  void *out;
663 } ttable;
664 
665 
666 /* clip->layout use mapping, from layout.map lives_clip_t */
667 typedef struct {
668  char *handle;
669  int64_t unique_id;
670  char *name;
671  LiVESList *list;
672 } layout_map;
673 
674 
675 
676 
677 
679 
680 // setup functions
681 
682 lives_mt *multitrack(weed_plant_t *, int orig_file, double fps);
683 void mt_init_tracks(lives_mt *, boolean set_min_max);
684 boolean on_multitrack_activate(LiVESMenuItem *menuitem, weed_plant_t *event_list);
685 
686 // delete function
687 boolean multitrack_delete(lives_mt *, boolean save);
688 
689 // morph the poly window
690 void polymorph(lives_mt *, lives_mt_poly_state_t poly);
691 
692 // sens/desens
693 void mt_desensitise(lives_mt *);
694 void mt_sensitise(lives_mt *);
695 
696 // external control callbacks
697 void insert_here_cb(LiVESMenuItem *, livespointer mt);
698 void insert_audio_here_cb(LiVESMenuItem *, livespointer mt);
699 void insert_at_ctx_cb(LiVESMenuItem *, livespointer mt);
700 void insert_audio_at_ctx_cb(LiVESMenuItem *, livespointer mt);
701 void multitrack_end_cb(LiVESMenuItem *, livespointer mt);
702 void delete_block_cb(LiVESMenuItem *, livespointer mt);
703 void selblock_cb(LiVESMenuItem *, livespointer mt);
704 void list_fx_here_cb(LiVESMenuItem *, livespointer mt);
705 void edit_start_end_cb(LiVESMenuItem *, livespointer mt);
706 void close_clip_cb(LiVESMenuItem *, livespointer mt);
707 void show_clipinfo_cb(LiVESMenuItem *, livespointer mt);
708 
709 boolean multitrack_insert(LiVESMenuItem *, livespointer mt);
710 track_rect *move_block(lives_mt *, track_rect *block, double timesecs, int old_track, int new_track);
711 
712 void update_grav_mode(lives_mt *);
713 void update_insert_mode(lives_mt *);
714 
715 
716 boolean on_render_activate(LiVESMenuItem *, livespointer mt);
717 
718 void mt_set_autotrans(int idx);
719 
720 
721 // event_list functions
722 weed_plant_t *add_blank_frames_up_to(weed_plant_t *event_list, weed_plant_t *start_event, weed_timecode_t end_tc, double fps);
723 
724 // track functions
725 void on_cback_audio_activate(LiVESMenuItem *, livespointer mt);
726 LiVESWidget *add_audio_track(lives_mt *, int trackno, boolean behind);
727 int add_video_track_behind(LiVESMenuItem *, livespointer mt);
728 int add_video_track_front(LiVESMenuItem *, livespointer mt);
729 void delete_video_track(lives_mt *, int layer, boolean full);
730 void delete_audio_track(lives_mt *, LiVESWidget *eventbox, boolean full);
731 void delete_audio_tracks(lives_mt *, LiVESList *list, boolean full);
732 void remove_gaps(LiVESMenuItem *, livespointer mt);
733 void remove_first_gaps(LiVESMenuItem *, livespointer mt);
734 void on_insgap_sel_activate(LiVESMenuItem *, livespointer mt);
735 void on_insgap_cur_activate(LiVESMenuItem *, livespointer mt);
736 void on_split_activate(LiVESMenuItem *, livespointer mt);
737 void scroll_tracks(lives_mt *, int top_track, boolean set_value);
738 boolean track_arrow_pressed(LiVESWidget *ahbox, LiVESXEventButton *, livespointer mt);
739 void track_select(lives_mt *);
740 boolean mt_track_is_audio(lives_mt *, int ntrack);
741 boolean mt_track_is_video(lives_mt *, int ntrack);
742 char *get_track_name(lives_mt *mt, int track_num, boolean is_audio);
743 
744 void mt_do_autotransition(lives_mt *, track_rect *block);
745 
746 void set_track_label_string(lives_mt *mt, int track, const char *label);
747 
748 LiVESWidget *get_eventbox_for_track(lives_mt *mt, int ntrack);
749 void on_rename_track_activate(LiVESMenuItem *menuitem, livespointer mt);
750 
751 
752 // track mouse movement
753 boolean on_track_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
754 boolean on_atrack_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
755 boolean on_track_header_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
756 boolean on_track_between_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
757 boolean on_track_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt);
758 boolean on_atrack_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt);
759 boolean on_track_header_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
760 boolean on_track_between_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
761 boolean on_track_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt);
762 boolean on_track_header_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt);
763 
764 void unselect_all(lives_mt *);
765 void insert_frames(int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc,
766  lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block);
767 void insert_audio(int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc,
768  double avel, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block);
769 void on_seltrack_toggled(LiVESWidget *, livespointer mt);
770 void scroll_track_by_scrollbar(LiVESScrollbar *sbar, livespointer mt);
771 
772 // block functions
773 void in_out_start_changed(LiVESWidget *, livespointer mt);
774 void in_out_end_changed(LiVESWidget *, livespointer mt);
775 void in_anchor_toggled(LiVESToggleButton *, livespointer mt);
776 void out_anchor_toggled(LiVESToggleButton *, livespointer mt);
777 void avel_reverse_toggled(LiVESToggleButton *, livespointer mt);
778 void avel_spin_changed(LiVESSpinButton *, livespointer mt);
779 
780 // block API functions
781 track_rect *find_block_by_uid(lives_mt *mt, ulong uid);
782 ulong mt_get_last_block_uid(lives_mt *mt);
783 int mt_get_block_count(lives_mt *, int ntrack);
784 double mt_get_block_sttime(lives_mt *, int ntrack, int iblock);
785 double mt_get_block_entime(lives_mt *, int ntrack, int iblock);
786 
787 track_rect *get_block_from_track_and_time(lives_mt *mt, int track, double time);
788 
789 int get_track_for_block(track_rect *block);
790 int get_clip_for_block(track_rect *block);
791 
792 
793 // timeline functions
794 void mt_tl_move_relative(lives_mt *, double pos_rel);
795 void mt_tl_move(lives_mt *, double pos_abs);
796 void set_timeline_end_secs(lives_mt *, double secs);
797 boolean on_timeline_press(LiVESWidget *, LiVESXEventButton *, livespointer mt);
798 boolean on_timeline_release(LiVESWidget *, LiVESXEventButton *, livespointer mt);
799 boolean on_timeline_update(LiVESWidget *, LiVESXEventMotion *, livespointer mt);
800 void draw_region(lives_mt *mt);
801 void tc_to_rs(LiVESMenuItem *, livespointer mt);
802 void tc_to_re(LiVESMenuItem *, livespointer mt);
803 void rs_to_tc(LiVESMenuItem *, livespointer mt);
804 void re_to_tc(LiVESMenuItem *, livespointer mt);
805 
806 boolean mt_mark_callback(LiVESAccelGroup *group, LiVESObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data);
807 
808 void multitrack_clear_marks(LiVESMenuItem *, livespointer mt);
809 void mt_show_current_frame(lives_mt *, boolean return_layer);
810 void mt_clear_timeline(lives_mt *mt);
811 
812 
813 // context box text
814 void clear_context(lives_mt *);
815 void add_context_label(lives_mt *, const char *text);
816 void mouse_mode_context(lives_mt *);
817 void do_sel_context(lives_mt *);
818 void do_fx_list_context(lives_mt *, int fxcount);
819 void do_fx_move_context(lives_mt *mt);
820 
821 // playback / animation
822 void multitrack_playall(lives_mt *);
823 void multitrack_play_sel(LiVESMenuItem *, livespointer mt);
824 void animate_multitrack(lives_mt *);
825 void unpaint_line(lives_mt *, LiVESWidget *eventbox);
826 void unpaint_lines(lives_mt *);
827 
828 void mt_prepare_for_playback(lives_mt *);
829 void mt_post_playback(lives_mt *);
830 
831 
832 // effect node controls
833 void on_next_node_clicked(LiVESWidget *, livespointer mt);
834 void on_prev_node_clicked(LiVESWidget *, livespointer mt);
835 void on_del_node_clicked(LiVESWidget *, livespointer mt);
836 void on_node_spin_value_changed(LiVESSpinButton *, livespointer mt);
837 double mt_get_effect_time(lives_mt *);
838 
839 void on_frame_preview_clicked(LiVESButton *, livespointer mt);
840 void show_preview(lives_mt *, weed_timecode_t tc);
841 
842 boolean add_mt_param_box(lives_mt *);
843 
844 // filter list controls
845 weed_plant_t *get_prev_fm(lives_mt *, int current_track, weed_plant_t *frame);
846 weed_plant_t *get_next_fm(lives_mt *, int current_track, weed_plant_t *frame);
847 
848 void on_prev_fm_clicked(LiVESWidget *button, livespointer mt);
849 void on_next_fm_clicked(LiVESWidget *button, livespointer mt);
850 void on_fx_insb_clicked(LiVESWidget *button, livespointer mt);
851 void on_fx_insa_clicked(LiVESWidget *button, livespointer mt);
852 
853 // utils
854 uint32_t event_list_get_byte_size(lives_mt *, weed_plant_t *event_list, int *num_events);
855 boolean event_list_rectify(lives_mt *, weed_plant_t *event_listy);
856 boolean make_backup_space(lives_mt *, size_t space_needed);
857 void activate_mt_preview(lives_mt *);
858 void **mt_get_pchain(void);
859 void event_list_free_undos(lives_mt *);
860 boolean used_in_current_layout(lives_mt *, int file);
861 
862 boolean set_new_set_name(lives_mt *);
863 
864 
865 // event_list utilities
866 boolean compare_filter_maps(weed_plant_t *fm1, weed_plant_t *fm2,
867  int ctrack);
868 void move_init_in_filter_map(lives_mt *, weed_plant_t *event_list, weed_plant_t *fmap, weed_plant_t *ifrom,
869  weed_plant_t *ito, int track, boolean after);
870 void update_filter_events(lives_mt *, weed_plant_t *first_event, weed_timecode_t start_tc, weed_timecode_t end_tc,
871  int track, weed_timecode_t new_start_tc, int new_track);
872 void mt_fixup_events(lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event);
873 
874 // event_list load/save
875 char *get_eload_filename(lives_mt *mt, boolean allow_auto_reload);
876 weed_plant_t *load_event_list(lives_mt *, char *eload_file);
877 boolean on_save_event_list_activate(LiVESMenuItem *, livespointer mt);
878 
879 
880 // layouts and layout maps
881 LiVESList *load_layout_map(void);
882 void add_markers(lives_mt *, weed_plant_t *event_list);
883 void remove_markers(weed_plant_t *event_list);
884 void save_layout_map(int *lmap, double *lmap_audio, const char *file, const char *dir);
885 
886 void wipe_layout(lives_mt *);
887 
888 void migrate_layouts(const char *old_set_name, const char *new_set_name);
889 
890 LiVESList *layout_frame_is_affected(int clipno, int frame);
891 LiVESList *layout_audio_is_affected(int clipno, double time);
892 
893 boolean check_for_layout_del(lives_mt *, boolean exiting);
894 
895 boolean on_load_event_list_activate(LiVESMenuItem *, livespointer mt);
896 
897 void stored_event_list_free_all(boolean wiped);
899 void remove_current_from_affected_layouts(lives_mt *);
900 
901 
902 // auto backup
903 uint32_t mt_idle_add(lives_mt *);
904 void recover_layout(void);
905 void recover_layout_cancelled(boolean is_startup);
906 boolean write_backup_layout_numbering(lives_mt *);
907 
908 
909 // amixer funcs
910 void amixer_show(LiVESButton *, livespointer mt);
911 void on_amixer_close_clicked(LiVESButton *, lives_mt *mt);
912 LiVESWidget *amixer_add_channel_slider(lives_mt *, int i);
913 
914 
915 // misc
916 void mt_change_disp_tracks_ok(LiVESButton *, livespointer mt);
917 void mt_swap_play_pause(lives_mt *, boolean put_pause);
918 char *set_values_from_defs(lives_mt *, boolean from_prefs);
919 
920 
921 // clip boxes
922 void mt_clip_select(lives_mt *, boolean scroll);
923 void mt_delete_clips(lives_mt *, int file);
924 void mt_init_clips(lives_mt *, int orig_file, boolean add);
925 
926 // key shortcuts
927 boolean mt_prevclip(LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer);
928 boolean mt_nextclip(LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer);
929 
930 typedef enum {
931  /* default to warn about */
936 
937  /*non-default*/
942 
943  /* info */
946 
947 
948 
949 // array max: TODO - use dynamic arrays to bypass track limits
950 
951 #ifdef IS_MINGW
952 #define MAX_TRACKS 32768
953 #define MAX_VIDEO_TRACKS 32768
954 #define MAX_AUDIO_TRACKS 32768
955 #else
956 #define MAX_TRACKS 65536
957 #define MAX_VIDEO_TRACKS 65536
958 #define MAX_AUDIO_TRACKS 65536
959 #endif
960 
961 #endif
Definition: multitrack.h:151
Definition: multitrack.h:85
ulong grav_right_func
Definition: multitrack.h:406
LiVESWidget * param_box
Definition: multitrack.h:275
void add_markers(lives_mt *, weed_plant_t *event_list)
Definition: multitrack.c:19432
void stored_event_list_free_undos(void)
Definition: multitrack.c:5369
LiVESWidget * fx_region_2
Definition: multitrack.h:234
boolean move_effects
should we move effects attached to a block ?
Definition: multitrack.h:159
LiVESWidget * fx_blocka
Definition: multitrack.h:227
LiVESWidget * view_effects
Definition: multitrack.h:257
LiVESWidget * view_events
Definition: multitrack.h:254
LiVESWidget * loop_continue
Definition: multitrack.h:211
void re_to_tc(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14240
void insert_audio_at_ctx_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14194
LiVESWidget * save_event_list
menuitem
Definition: multitrack.h:284
int mt_get_block_count(lives_mt *, int ntrack)
count blocks in track
Definition: multitrack.c:22668
void mt_fixup_events(lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event)
Definition: multitrack.c:18905
boolean insert_audio
do we insert audio with video ?
Definition: multitrack.h:169
void scroll_tracks(lives_mt *, int top_track, boolean set_value)
Definition: multitrack.c:2038
LiVESWidget * fd_frame
Definition: multitrack.h:322
LiVESWidget * fx_region_1v
Definition: multitrack.h:232
LiVESWidget * sel_label
Definition: multitrack.h:281
void insert_audio(int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, double avel, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
Definition: multitrack.c:17776
int get_clip_for_block(track_rect *block)
Definition: multitrack.c:22711
Definition: multitrack.h:138
int current_track
starts at 0
Definition: multitrack.h:430
boolean audio_bleedthru
should we allow all audio to bleed thru ?
Definition: multitrack.h:171
LiVESWidget * amixer_button
Definition: multitrack.h:333
LiVESWidget * seldesel_menuitem
Definition: multitrack.h:253
Definition: multitrack.h:144
Definition: multitrack.h:939
int get_track_for_block(track_rect *block)
return track number for a given block
Definition: multitrack.c:184
Definition: multitrack.h:934
LiVESWidget * load_set
Definition: multitrack.h:356
Definition: multitrack.h:91
void update_grav_mode(lives_mt *)
Definition: multitrack.c:4559
boolean on_track_header_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:13711
boolean multitrack_insert(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:17252
boolean follow_playback
Definition: multitrack.h:168
int add_video_track_behind(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:10518
boolean region_updating
Definition: multitrack.h:452
LiVESWidget * time_scrollbar
Definition: multitrack.h:353
boolean use_context
Definition: multitrack.h:556
lives_mt_fx_order_t
Definition: multitrack.h:142
LiVESWidget * context_frame
Definition: multitrack.h:336
LiVESWidget * add_vid_front
Definition: multitrack.h:329
LiVESWidget * in_image
Definition: multitrack.h:195
int current_fx
Definition: multitrack.h:458
Definition: multitrack.h:124
#define PATH_MAX
Definition: main.h:254
void update_insert_mode(lives_mt *)
Definition: multitrack.c:4507
double region_init
point where user pressed the mouse
Definition: multitrack.h:451
char * force_load_name
< force some visual changes when applying autotrans
Definition: multitrack.h:603
Definition: multitrack.h:97
LiVESWidget * clip_scroll
Definition: multitrack.h:190
lives_direction_t last_direction
last direction timeline cursor was moved in
Definition: multitrack.h:438
LiVESWidget * del_node_button
Definition: multitrack.h:278
lives_mt_mouse_mode_t
Definition: multitrack.h:57
LiVESWidget * ins_normal
Definition: multitrack.h:246
Definition: multitrack.h:117
LiVESWidget * fx_delete
Definition: multitrack.h:228
LiVESWidget * fx_contents_box
Definition: multitrack.h:271
Definition: multitrack.h:143
lives_mt_fx_order_t fx_order
Definition: multitrack.h:518
LiVESWidget * context_scroll
Definition: multitrack.h:198
Definition: multitrack.h:122
Definition: multitrack.h:131
LiVESWidget * fx_region_2av
Definition: multitrack.h:235
LiVESWidget * render_sep
Definition: multitrack.h:316
LiVESWidget * timeline_eb
Definition: multitrack.h:204
int inheight
Definition: multitrack.h:510
weed_plant_t * pb_loop_event
FRAME event to loop back to (can be different from pb_start_event if we are paused) ...
Definition: multitrack.h:551
Definition: multitrack.h:611
ulong mouse_mot2
Definition: multitrack.h:480
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)
Definition: multitrack.c:16268
Definition: multitrack.h:136
void mt_init_clips(lives_mt *, int orig_file, boolean add)
Definition: multitrack.c:10855
boolean compare_filter_maps(weed_plant_t *fm1, weed_plant_t *fm2, int ctrack)
ctrack can be -1 to compare all events, else we cf for ctrack
Definition: multitrack.c:19935
LiVESWidget * load_vals
Definition: multitrack.h:311
weed_plant_t * specific_event
a pointer to some generally interesting event
Definition: multitrack.h:553
boolean no_expose
block timeline expose while we are exiting
Definition: multitrack.h:578
void wipe_layout(lives_mt *)
Definition: multitrack.c:21477
int user_height
Definition: multitrack.h:539
void on_fx_insa_clicked(LiVESWidget *button, livespointer mt)
Definition: multitrack.c:18632
boolean event_list_rectify(lives_mt *, weed_plant_t *event_listy)
Definition: multitrack.c:20259
LiVESWidget * btoolbar
Definition: multitrack.h:340
boolean autocross_audio
crossfade audio with autotransitions
Definition: multitrack.h:173
LiVESObject * node_adj
Definition: multitrack.h:373
void in_out_start_changed(LiVESWidget *, livespointer mt)
Definition: multitrack.c:11802
boolean on_timeline_update(LiVESWidget *, LiVESXEventMotion *, livespointer mt)
Definition: multitrack.c:18205
boolean on_atrack_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
LiVESList * selected_tracks
Definition: multitrack.h:432
LiVESList * audio_vols_back
layer volume levels (coarse control) - reset levels
Definition: multitrack.h:378
LiVESWidget * fx_box
Definition: multitrack.h:272
LiVESWidget * fx_block
Definition: multitrack.h:225
boolean on_track_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
Definition: multitrack.c:13554
LiVESWidget * clear_ds
Definition: multitrack.h:361
void mt_post_playback(lives_mt *)
Definition: multitrack.c:17074
char * get_track_name(lives_mt *mt, int track_num, boolean is_audio)
Definition: multitrack.c:933
void mt_clear_timeline(lives_mt *mt)
Definition: multitrack.c:10734
LiVESWidget * jumpnext
Definition: multitrack.h:221
void * extra
Definition: multitrack.h:614
LiVESWidget * render_vid
Definition: multitrack.h:317
LiVESWidget * vpaned
Definition: multitrack.h:216
boolean auto_reloading
Definition: multitrack.h:522
size_t data_len
including this mt_undo
Definition: multitrack.h:615
LiVESWidget * play_blank
Definition: multitrack.h:187
boolean check_for_layout_del(lives_mt *, boolean exiting)
Definition: multitrack.c:5456
void do_fx_list_context(lives_mt *, int fxcount)
Definition: multitrack.c:18344
LiVESWidget * atrans_menuitem
Definition: multitrack.h:239
lives_mt_insert_mode_t
Definition: multitrack.h:64
boolean changed
changed since last saved
Definition: multitrack.h:503
boolean tl_mouse
Definition: multitrack.h:586
void list_fx_here_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14213
LiVESWidget * timecode
Definition: multitrack.h:266
LiVESWidget * next_node_button
Definition: multitrack.h:276
the default (only insert if it fits)
Definition: multitrack.h:65
LiVESWidget * render_aud
Definition: multitrack.h:318
void multitrack_clear_marks(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14256
boolean is_atrans
Definition: multitrack.h:601
LiVESWidget * l_sel_arrow
Definition: multitrack.h:282
double tl_min
Definition: multitrack.h:425
void * out
Definition: multitrack.h:662
void on_insgap_cur_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:15025
void mt_delete_clips(lives_mt *, int file)
Definition: multitrack.c:10788
void insert_frames(int filenum, weed_timecode_t offset_start, weed_timecode_t offset_end, weed_timecode_t tc, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
Definition: multitrack.c:17542
lives_mt_last_fx_type_t last_fx_type
Definition: multitrack.h:516
boolean render_vidp
render video
Definition: multitrack.h:175
void set_timeline_end_secs(lives_mt *, double secs)
Definition: multitrack.c:2896
lives_mt_grav_mode_t grav_mode
Definition: multitrack.h:162
LiVESWidget * recent3
Definition: multitrack.h:350
Definition: multitrack.h:667
LiVESWidget * checkbutton_start_anchored
Definition: multitrack.h:264
lives_cursor_t
Definition: widget-helper.h:801
void mt_clip_select(lives_mt *, boolean scroll)
Definition: multitrack.c:2802
int64_t auto_back_time
Definition: multitrack.h:506
int outwidth
Definition: multitrack.h:511
LiVESWidget * stop
Definition: multitrack.h:207
LiVESObject * vadjustment
Definition: multitrack.h:382
int64_t unique_id
Definition: multitrack.h:669
LiVESList * layout_audio_is_affected(int clipno, double time)
Definition: multitrack.c:21847
LiVESList * audio_vols
layer volume levels (coarse control) - set in mixer
Definition: multitrack.h:377
boolean redraw_block
block drawing of playback cursor during track redraws
Definition: multitrack.h:574
LiVESWidget * undo
Definition: multitrack.h:291
LiVESWidget * cback_audio
Definition: multitrack.h:309
LiVESWidget * timeline_table
Definition: multitrack.h:202
LiVESWidget * close
Definition: multitrack.h:359
int nchans
Definition: multitrack.h:625
weed_timecode_t insert_end
Definition: multitrack.h:486
ulong grav_left_func
Definition: multitrack.h:405
LiVESWidget * mm_select
Definition: multitrack.h:244
void on_split_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:16455
ulong spin_start_func
Definition: multitrack.h:530
LiVESWidget * grav_normal
Definition: multitrack.h:249
lives_mt_block_state_t state
Definition: multitrack.h:648
void delete_block_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14201
void mouse_mode_context(lives_mt *)
Definition: multitrack.c:4484
LiVESWidget * eview_label
Definition: multitrack.h:325
ulong * ch_slider_fns
Definition: multitrack.h:624
LiVESWidget * clear_event_list
menuitem
Definition: multitrack.h:286
LiVESWidget * sep_image
Definition: multitrack.h:199
lives_mt * mt
Definition: multitrack.h:626
boolean moving_block
moving block flag
Definition: multitrack.h:470
void remove_markers(weed_plant_t *event_list)
Definition: multitrack.c:21457
void remove_current_from_affected_layouts(lives_mt *)
Definition: multitrack.c:5381
LiVESWidget * fx_blockv
Definition: multitrack.h:226
LiVESPixbuf * frame_pixbuf
Definition: multitrack.h:388
ulong tc_func
Definition: multitrack.h:414
Definition: main.h:277
void on_frame_preview_clicked(LiVESButton *, livespointer mt)
track_rect * find_block_by_uid(lives_mt *mt, ulong uid)
Definition: multitrack.c:22613
LiVESWidget * aparam_menuitem
Definition: multitrack.h:314
LiVESWidget * fx_region_1a
Definition: multitrack.h:233
Definition: multitrack.h:944
int sel_y
Definition: multitrack.h:477
LiVESWidget * select_track
Definition: multitrack.h:252
boolean block_tl_move
set to TRUE to block moving timeline (prevents loops with the node spinbutton)
Definition: multitrack.h:598
weed_plant_t * event_list
Definition: multitrack.h:416
ulong spin_end_func
Definition: multitrack.h:531
int file_selected
actual LiVES file struct number which clip_selected matches
Definition: multitrack.h:429
LiVESWidget * ac_audio_check
Definition: multitrack.h:293
LiVESWidget * rs_to_tc
Definition: multitrack.h:289
track_rect * get_block_from_track_and_time(lives_mt *mt, int track, double time)
get timeline end time of block
Definition: multitrack.c:22703
boolean normalise_audp
normalise audio
Definition: multitrack.h:177
void show_preview(lives_mt *, weed_timecode_t tc)
ulong spin_avel_func
Definition: multitrack.h:394
int user_signed_endian
Definition: multitrack.h:543
LiVESWidget * save_set
Definition: multitrack.h:357
LiVESWidget * eventbox
pointer to eventbox widget which contains this block; we can use its "layer_number" to get the track/...
Definition: multitrack.h:654
Definition: multitrack.h:933
boolean write_backup_layout_numbering(lives_mt *)
Definition: multitrack.c:604
LiVESList * aparam_view_list
Definition: multitrack.h:386
Definition: multitrack.h:110
LiVESWidget * render
Definition: multitrack.h:223
ulong check_avel_rev_func
Definition: multitrack.h:397
boolean end_anchored
Definition: multitrack.h:650
char redo_text[32]
Definition: multitrack.h:498
boolean block_node_spin
set to TRUE to block moving node spinner (prevents loops with the timeline)
Definition: multitrack.h:599
LiVESWidget * aload_subs
Definition: multitrack.h:310
boolean undoable
Definition: multitrack.h:500
Definition: multitrack.h:121
void draw_region(lives_mt *mt)
Definition: multitrack.c:17874
ulong ins_normal_func
Definition: multitrack.h:402
ulong mt_get_last_block_uid(lives_mt *mt)
get index of last inserted (wallclock time) block for track
Definition: multitrack.c:22656
lives_mt_block_state_t
Definition: multitrack.h:149
int user_width
Definition: multitrack.h:538
lives_mt * multitrack(weed_plant_t *, int orig_file, double fps)
create and return lives_mt struct
Definition: multitrack.c:5811
int selected_filter
filter selected in poly window tab
Definition: multitrack.h:570
LiVESWidget * hpaned
Definition: multitrack.h:217
LiVESWidget * apply_fx_button
Definition: multitrack.h:323
LiVESWidget * fx_params_label
Definition: multitrack.h:332
ulong spin_in_func
Definition: multitrack.h:392
LiVESWidget * tc_to_re
Definition: multitrack.h:288
void on_seltrack_toggled(LiVESWidget *, livespointer mt)
Definition: multitrack.c:16808
LiVESObject * spinbutton_out_adj
Definition: multitrack.h:370
boolean on_atrack_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
void multitrack_play_sel(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:17217
Definition: multitrack.h:93
LiVESWidget * aparam_submenu
Definition: multitrack.h:315
LiVESWidget * spinbutton_end
Definition: multitrack.h:268
Definition: multitrack.h:130
boolean on_save_event_list_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:19543
ulong mute_audio_func
Definition: multitrack.h:409
LiVESWidget * fx_region
Definition: multitrack.h:230
lives_mt_poly_state_t poly_state
state of polymorph window
Definition: multitrack.h:434
void animate_multitrack(lives_mt *)
Definition: multitrack.c:14096
LiVESWidget * hbox
Definition: multitrack.h:186
Definition: multitrack.h:941
double user_fps
Definition: multitrack.h:537
boolean ignore_load_vals
Definition: multitrack.h:535
LiVESWidget * gens_submenu
Definition: multitrack.h:363
ulong check_start_func
Definition: multitrack.h:395
void insert_here_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14153
track_rect * next
Definition: multitrack.h:641
lives_mt_undo_t action
Definition: multitrack.h:612
LiVESWidget * mute_audio
Definition: multitrack.h:210
LiVESWidget * capture
Definition: multitrack.h:364
LiVESWidget * split_sel
Definition: multitrack.h:296
ulong sepwin_func
Definition: multitrack.h:408
LiVESWidget * insa_checkbutton
Definition: multitrack.h:366
LiVESWidget * fx_list_vbox
Definition: multitrack.h:303
boolean track_arrow_pressed(LiVESWidget *ahbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:2585
LiVESWidget ** ch_sliders
Definition: multitrack.h:621
LiVESWidget * btoolbar3
Definition: multitrack.h:342
char * name
Definition: multitrack.h:670
LiVESWidget * follow_play
Definition: multitrack.h:326
void amixer_show(LiVESButton *, livespointer mt)
Definition: multitrack.c:22336
char undo_text[32]
Definition: multitrack.h:497
LiVESWidget * grav_label
Definition: multitrack.h:248
LiVESWidget * add_audio_track(lives_mt *, int trackno, boolean behind)
Definition: multitrack.c:10173
lives_special_framedraw_rect_t * framedraw
Definition: multitrack.h:513
boolean snap_over
snap to overlap
Definition: multitrack.h:161
lives_mt_insert_mode_t insert_mode
Definition: multitrack.h:164
boolean mt_track_is_video(lives_mt *, int ntrack)
return TRUE if ntrack is a valid video track
Definition: multitrack.c:22644
ulong mouse_mot1
Definition: multitrack.h:479
Definition: multitrack.h:98
Definition: multitrack.h:90
LiVESWidget * checkbutton_end_anchored
Definition: multitrack.h:265
Definition: multitrack.h:118
lives_mt_undo_t
Definition: multitrack.h:81
double mt_get_block_entime(lives_mt *, int ntrack, int iblock)
get timeline start time of block
Definition: multitrack.c:22695
LiVESWidget * window
Definition: multitrack.h:183
LiVESWidget * recent_menu
Definition: multitrack.h:347
void move_init_in_filter_map(lives_mt *, weed_plant_t *event_list, weed_plant_t *fmap, weed_plant_t *ifrom, weed_plant_t *ito, int track, boolean after)
Definition: multitrack.c:19841
weed_plant_t * pb_start_event
FRAME event from which we start playback.
Definition: multitrack.h:550
boolean on_track_header_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:13701
Definition: multitrack.h:77
LiVESWidget * timeline_table_header
Definition: multitrack.h:200
void insert_at_ctx_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14159
uint8_t * undo_mem
Definition: multitrack.h:493
boolean multitrack_delete(lives_mt *, boolean save)
Definition: multitrack.c:9237
void do_fx_move_context(lives_mt *mt)
Definition: multitrack.c:18355
boolean on_track_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
Definition: multitrack.c:13880
boolean used_in_current_layout(lives_mt *, int file)
Definition: multitrack.c:9208
uint32_t mt_idle_add(lives_mt *)
Definition: multitrack.c:813
weed_plant_t * get_next_fm(lives_mt *, int current_track, weed_plant_t *frame)
Definition: multitrack.c:18561
void mt_desensitise(lives_mt *)
Definition: multitrack.c:16829
LiVESWidget * avel_box
Definition: multitrack.h:258
LiVESList * clip_labels
Definition: multitrack.h:592
double end_secs
max display time of timeline in seconds
Definition: multitrack.h:422
Definition: multitrack.h:145
boolean is_rendering
TRUE if we are in the process of rendering/pre-rendering to a clip, cf. mainw->is_rendering.
Definition: multitrack.h:454
LiVESWidget * sepwin
Definition: multitrack.h:209
stretch first gap to fit block
Definition: multitrack.h:69
weed_plant_t * fm_edit_event
Definition: multitrack.h:524
int play_window_width
Definition: multitrack.h:567
void track_select(lives_mt *)
must call after setting mt->current_track
Definition: multitrack.c:1714
void on_cback_audio_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:15964
LiVESWidget * out_image
Definition: multitrack.h:196
void unselect_all(lives_mt *)
unselect all blocks
Definition: multitrack.c:11584
LiVESWidget * insert
Definition: multitrack.h:212
LiVESWidget * btoolbar2
Definition: multitrack.h:341
LiVESWidget * fx_region_3
Definition: multitrack.h:238
Definition: multitrack.h:107
void rs_to_tc(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14235
LiVESWidget * scrollbar
Definition: multitrack.h:218
ulong seltrack_func
Definition: multitrack.h:412
boolean on_timeline_press(LiVESWidget *, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:18476
LiVESWidget * recent4
Definition: multitrack.h:351
lives_mt_mouse_mode_t mouse_mode
Definition: multitrack.h:163
boolean on_track_header_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
Definition: multitrack.c:13888
int play_width
Definition: multitrack.h:563
boolean show_audio
Definition: multitrack.h:165
weed_plant_t * selected_init_event
currently selected in list
Definition: multitrack.h:419
void on_rename_track_activate(LiVESMenuItem *menuitem, livespointer mt)
Definition: multitrack.c:15927
LiVESWidget * clipedit
Definition: multitrack.h:215
boolean on_load_event_list_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:21592
int track_index
Definition: multitrack.h:514
LiVESWidget * avel_scale
Definition: multitrack.h:261
boolean mt_mark_callback(LiVESAccelGroup *group, LiVESObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
Definition: multitrack.c:18619
void set_track_label_string(lives_mt *mt, int track, const char *label)
Definition: multitrack.c:10359
int user_asamps
Definition: multitrack.h:542
void ** mt_get_pchain(void)
Definition: multitrack.c:928
weed_timecode_t tc
Definition: multitrack.h:613
LiVESWidget * playall
Definition: multitrack.h:219
LiVESWidget * inv_checkbutton
Definition: multitrack.h:623
void mt_set_autotrans(int idx)
Definition: multitrack.c:5624
weed_timecode_t insert_start
Definition: multitrack.h:485
ulong spin_out_func
Definition: multitrack.h:393
void add_context_label(lives_mt *, const char *text)
Definition: multitrack.c:11654
lives_lmap_error_t
Definition: multitrack.h:930
int play_height
Definition: multitrack.h:564
Definition: multitrack.h:60
LiVESWidget * ins_menuitem
Definition: multitrack.h:245
Definition: multitrack.h:940
mt_opts opts
Definition: multitrack.h:520
LiVESWidget * recent2
Definition: multitrack.h:349
boolean auto_changed
changed since last auto-saved
Definition: multitrack.h:504
LiVESWidget * mm_move
Definition: multitrack.h:243
boolean is_ready
Definition: multitrack.h:580
LiVESAccelGroup * accel_group
Definition: multitrack.h:380
overwite existing blocks
Definition: multitrack.h:68
LiVESWidget * fx_base_box
Definition: multitrack.h:270
void close_clip_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14172
size_t undo_buffer_used
Definition: multitrack.h:492
weed_plant_t * load_event_list(lives_mt *, char *eload_file)
Definition: multitrack.c:21249
LiVESWidget * load_event_list
menuitem
Definition: multitrack.h:285
boolean ign_ins_sel
Definition: multitrack.h:167
LiVESList * layout_frame_is_affected(int clipno, int frame)
Definition: multitrack.c:21812
LiVESList * cb_list
Definition: multitrack.h:390
double fps
fps of this timeline
Definition: multitrack.h:447
Definition: multitrack.h:123
boolean on_timeline_release(LiVESWidget *, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:18363
void migrate_layouts(const char *old_set_name, const char *new_set_name)
Definition: multitrack.c:21663
void on_node_spin_value_changed(LiVESSpinButton *, livespointer mt)
Definition: multitrack.c:18754
LiVESWidget * delblock
Definition: multitrack.h:214
LiVESWidget * grav_left
Definition: multitrack.h:250
LiVESWidget * fx_region_2a
Definition: multitrack.h:237
int add_video_track_front(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:10527
LiVESWidget * timeline
Definition: multitrack.h:203
void save_layout_map(int *lmap, double *lmap_audio, const char *file, const char *dir)
Definition: multitrack.c:19263
Definition: multitrack.h:75
boolean pr_audio
TRUE if we are in the process of prerendering audio to a clip.
Definition: multitrack.h:455
LiVESWidget * view_audio
Definition: multitrack.h:320
int user_arate
Definition: multitrack.h:540
LiVESWidget * clip_inner_box
Definition: multitrack.h:191
LiVESWidget * prev_node_button
Definition: multitrack.h:277
void mt_swap_play_pause(lives_mt *, boolean put_pause)
Definition: multitrack.c:16996
void selblock_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14207
LiVESWidget * main_hbox
Definition: multitrack.h:620
LiVESWidget * in_out_box
Definition: multitrack.h:192
int max_disp_vtracks
Definition: multitrack.h:457
void in_anchor_toggled(LiVESToggleButton *, livespointer mt)
Definition: multitrack.c:12493
void delete_audio_track(lives_mt *, LiVESWidget *eventbox, boolean full)
Definition: multitrack.c:9025
void in_out_end_changed(LiVESWidget *, livespointer mt)
Definition: multitrack.c:12029
int clip_selected
clip in clip window
Definition: multitrack.h:428
boolean aud_track_selected
Definition: multitrack.h:582
Definition: multitrack.h:619
boolean pertrack_audio
do we want pertrack audio ?
Definition: multitrack.h:170
LiVESWidget * r_sel_arrow
Definition: multitrack.h:283
LiVESList * audio_draws
list of audio boxes, 0 == backing audio, 1 == track 0 audio, etc.
Definition: multitrack.h:375
void insert_audio_here_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14188
LiVESWidget * tc_to_rs
Definition: multitrack.h:287
weed_plant_t * add_blank_frames_up_to(weed_plant_t *event_list, weed_plant_t *start_event, weed_timecode_t end_tc, double fps)
Definition: multitrack.c:15631
LiVESWidget * amixer_add_channel_slider(lives_mt *, int i)
Definition: multitrack.c:22270
LiVESWidget * spinbutton_in
Definition: multitrack.h:262
lives_mt_last_fx_type_t
Definition: multitrack.h:135
LiVESWidget * get_eventbox_for_track(lives_mt *mt, int ntrack)
Definition: multitrack.c:22579
void activate_mt_preview(lives_mt *)
sensitize Show Preview and Apply buttons
Definition: multitrack.c:18986
boolean mt_nextclip(LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)
Definition: multitrack.c:2869
char * handle
Definition: multitrack.h:668
LiVESWidget * show_layout_errors
Definition: multitrack.h:354
ulong check_end_func
Definition: multitrack.h:396
boolean on_render_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:15972
LiVESWidget * mm_menuitem
Definition: multitrack.h:242
LiVESWidget * fx_label
Definition: multitrack.h:273
LiVESWidget * in_hbox
Definition: multitrack.h:193
double ptr_time
stored timeline cursor position before playback
Definition: multitrack.h:443
LiVESWidget * node_spinbutton
Definition: multitrack.h:279
LiVESWidget * param_inner_box
Definition: multitrack.h:274
LiVESWidget * remove_first_gaps
Definition: multitrack.h:295
void on_del_node_clicked(LiVESWidget *, livespointer mt)
Definition: multitrack.c:18830
LiVESObject * spinbutton_in_adj
Definition: multitrack.h:369
insert enough to fill gap (from selection start or end depending on gravity)
Definition: multitrack.h:70
weed_plant_t * init_event
current editable values
Definition: multitrack.h:418
boolean render_audp
render audio
Definition: multitrack.h:176
int exact_preview
Definition: multitrack.h:545
char * get_eload_filename(lives_mt *mt, boolean allow_auto_reload)
Definition: multitrack.c:21162
track_rect * prev
Definition: multitrack.h:642
Definition: multitrack.h:92
LiVESWidget * normalise_aud
Definition: multitrack.h:319
LiVESWidget * change_vals
Definition: multitrack.h:312
void avel_spin_changed(LiVESSpinButton *, livespointer mt)
Definition: multitrack.c:12360
boolean was_undo_redo
Definition: multitrack.h:576
void event_list_free_undos(lives_mt *)
Definition: multitrack.c:5350
char * set_values_from_defs(lives_mt *, boolean from_prefs)
Definition: multitrack.c:5287
void polymorph(lives_mt *, lives_mt_poly_state_t poly)
Definition: multitrack.c:12595
ulong grav_normal_func
Definition: multitrack.h:404
LiVESWidget * fx_ibefore_button
Definition: multitrack.h:306
int sel_x
Definition: multitrack.h:476
LiVESWidget * fx_list_scroll
Definition: multitrack.h:302
LiVESWidget * fx_edit
Definition: multitrack.h:229
void unpaint_line(lives_mt *, LiVESWidget *eventbox)
Definition: multitrack.c:13896
Definition: multitrack.h:938
Definition: multitrack.h:120
boolean show_ctx
Definition: multitrack.h:166
LiVESWidget * troubleshoot
Definition: multitrack.h:331
LiVESXDisplay * display
Definition: multitrack.h:384
void remove_gaps(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14642
LiVESWidget * submenu_atransfx
Definition: multitrack.h:240
LiVESWidget * nb_label
Definition: multitrack.h:338
LiVESWidget * last_filter_map
Definition: multitrack.h:299
void on_next_node_clicked(LiVESWidget *, livespointer mt)
Definition: multitrack.c:18808
LiVESList * video_draws
list of video timeline eventboxes, in layer order
Definition: multitrack.h:381
void on_prev_node_clicked(LiVESWidget *, livespointer mt)
Definition: multitrack.c:18819
LiVESWidget * adjust_start_end
Definition: multitrack.h:335
int avol_fx
index of audio volume filter, delegated by user from audio volume candidates
Definition: multitrack.h:527
LiVESWidget * ins_gap_cur
Definition: multitrack.h:298
LiVESWidget * fx_region_2v
Definition: multitrack.h:236
LiVESWidget * redo
Definition: multitrack.h:292
lives_mt_grav_mode_t
Definition: multitrack.h:74
Definition: multitrack.h:100
uint32_t idlefunc
autobackup function
Definition: multitrack.h:590
track_rect * putative_block
putative block to move or copy, or NULL
Definition: multitrack.h:441
boolean mt_track_is_audio(lives_mt *, int ntrack)
return TRUE if ntrack is a valid backing audio track
Definition: multitrack.c:22650
void out_anchor_toggled(LiVESToggleButton *, livespointer mt)
Definition: multitrack.c:12544
boolean on_track_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:13743
LiVESWidget * fx_iafter_button
Definition: multitrack.h:307
LiVESWidget * out_hbox
Definition: multitrack.h:194
weed_plant_t * start_event
Definition: multitrack.h:643
boolean set
have we set opts (in mainw) ?
Definition: multitrack.h:158
Definition: multitrack.h:935
track_rect * block_selected
pointer to current selected block, or NULL
Definition: multitrack.h:440
void mt_show_current_frame(lives_mt *, boolean return_layer)
preview the current frame
Definition: multitrack.c:2969
boolean is_paused
Definition: multitrack.h:560
void recover_layout(void)
Definition: multitrack.c:905
LiVESWidget * poly_box
Definition: multitrack.h:189
void do_sel_context(lives_mt *)
Definition: multitrack.c:18328
double region_start
start of time region in seconds (or 0.)
Definition: multitrack.h:449
double mt_get_block_sttime(lives_mt *, int ntrack, int iblock)
return time in seconds of first frame event in block
Definition: multitrack.c:22687
void mt_init_tracks(lives_mt *, boolean set_min_max)
add basic tracks, or set tracks from mt->event_list
Definition: multitrack.c:9681
boolean start_anchored
Definition: multitrack.h:649
LiVESWidget * move_fx
Definition: multitrack.h:241
LiVESList * tl_marks
Definition: multitrack.h:548
LiVESWidget * menubar
Definition: multitrack.h:184
void tc_to_rs(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14222
LiVESWidget * nb
Definition: multitrack.h:337
void on_amixer_close_clicked(LiVESButton *, lives_mt *mt)
Definition: multitrack.c:22096
void mt_change_disp_tracks_ok(LiVESButton *, livespointer mt)
Definition: multitrack.c:21878
int render_file
Definition: multitrack.h:436
LiVESWidget * change_max_disp
Definition: multitrack.h:327
int play_window_height
Definition: multitrack.h:568
void show_clipinfo_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14178
LiVESWidget * fx_region_1
Definition: multitrack.h:231
Definition: multitrack.h:638
LiVESWidget * add_vid_behind
Definition: multitrack.h:328
lives_direction_t
Definition: multitrack.h:129
LiVESList * list
Definition: multitrack.h:671
boolean did_backup
Definition: multitrack.h:495
LiVESWidget * clear_marks
Definition: multitrack.h:321
Definition: multitrack.h:152
LiVESWidget * playsel
Definition: multitrack.h:220
boolean add_mt_param_box(lives_mt *)
Definition: multitrack.c:1528
weed_plant_t * moving_fx
Definition: multitrack.h:525
LiVESWidget * view_sel_events
Definition: multitrack.h:334
void on_next_fm_clicked(LiVESWidget *button, livespointer mt)
Definition: multitrack.c:18676
void multitrack_playall(lives_mt *)
Definition: multitrack.c:17136
LiVESWidget * jumpback
Definition: multitrack.h:222
double tl_max
Definition: multitrack.h:426
ulong loop_cont_func
Definition: multitrack.h:410
int hotspot_y
Definition: multitrack.h:468
void delete_video_track(lives_mt *, int layer, boolean full)
Definition: multitrack.c:10127
LiVESWidget * recent1
Definition: multitrack.h:348
boolean set_new_set_name(lives_mt *)
Definition: multitrack.c:19494
LiVESWidget * next_filter_map
Definition: multitrack.h:300
boolean layout_set_properties
Definition: multitrack.h:534
int back_audio_tracks
number of backing audio tracks (currently 0 or 1)
Definition: multitrack.h:174
double hotspot_x
Definition: multitrack.h:467
int num_video_tracks
Definition: multitrack.h:421
boolean mt_prevclip(LiVESAccelGroup *, LiVESObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)
Definition: multitrack.c:2860
LiVESWidget * snapo_checkbutton
Definition: multitrack.h:367
boolean on_multitrack_activate(LiVESMenuItem *menuitem, weed_plant_t *event_list)
menuitem callback
Definition: multitrack.c:11039
weed_timecode_t offset_start
offset in sourcefile of first frame
Definition: multitrack.h:646
LiVESWidget * fx_list_box
Definition: multitrack.h:301
LiVESWidget * prev_fm_button
Definition: multitrack.h:305
Definition: multitrack.h:59
double mt_get_effect_time(lives_mt *)
Definition: multitrack.c:1523
boolean make_backup_space(lives_mt *, size_t space_needed)
Definition: multitrack.c:4708
LiVESWidget * tl_eventbox
Definition: multitrack.h:201
Definition: multitrack.h:101
lives_amixer_t * amixer
Definition: multitrack.h:594
LiVESWidget * quit
Definition: multitrack.h:330
boolean playing_sel
are we playing just the time selection ?
Definition: multitrack.h:588
Definition: multitrack.h:58
no event_list
Definition: multitrack.h:84
Definition: multitrack.h:119
lives_mt_poly_state_t
Definition: multitrack.h:116
void mt_sensitise(lives_mt *)
Definition: multitrack.c:16882
LiVESWidget * open_menu
Definition: multitrack.h:346
lives_mt_nb_error_t
Definition: multitrack.h:106
LiVESList * undos
Definition: multitrack.h:491
weed_plant_t * get_prev_fm(lives_mt *, int current_track, weed_plant_t *frame)
Definition: multitrack.c:18506
LiVESWidget * view_in_out
Definition: multitrack.h:256
LiVESWidget * node_scale
Definition: multitrack.h:280
Definition: multitrack.h:932
int inwidth
Definition: multitrack.h:509
LiVESObject * hadjustment
Definition: multitrack.h:372
Definition: multitrack.h:76
LiVESWidget * grav_right
Definition: multitrack.h:251
void stored_event_list_free_all(boolean wiped)
Definition: multitrack.c:5428
Definition: plugins.h:481
void mt_prepare_for_playback(lives_mt *)
Definition: multitrack.c:17033
int user_achans
Definition: multitrack.h:541
void recover_layout_cancelled(boolean is_startup)
Definition: multitrack.c:839
lives_cursor_t cursor_style
Definition: multitrack.h:558
LiVESWidget * checkbutton_avel_reverse
Definition: multitrack.h:259
char layout_name[PATH_MAX]
Definition: multitrack.h:464
LiVESWidget * play_box
Definition: multitrack.h:188
boolean tl_selecting
for mouse select mode
Definition: multitrack.h:482
LiVESToolItem * grav_menuitem
Definition: multitrack.h:247
void mt_do_autotransition(lives_mt *, track_rect *block)
call this on a block to apply autotransition on it
Definition: multitrack.c:22728
Definition: multitrack.h:111
void tc_to_re(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14228
LiVESWidget * remove_gaps
Definition: multitrack.h:294
double context_time
this is set when the user right clicks on a track, otherwise -1.
Definition: multitrack.h:555
double insert_avel
override for avel used during audio insert
Definition: multitrack.h:489
LiVESWidget * prerender_aud
Definition: multitrack.h:224
LiVESList * load_layout_map(void)
Definition: multitrack.c:19131
lives_rfx_t * current_rfx
Definition: multitrack.h:462
int top_track
top (video) track in scrolled window
Definition: multitrack.h:572
double pb_start_time
playback start time in seconds. If play is stopped (not paused) we return to here.
Definition: multitrack.h:472
double region_end
end of time region in seconds (or 0.)
Definition: multitrack.h:450
LiVESWidget * aparam_separator
Definition: multitrack.h:313
LiVESWidget * spinbutton_out
Definition: multitrack.h:263
boolean redoable
Definition: multitrack.h:501
Definition: paramspecial.h:16
void remove_first_gaps(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14635
Definition: multitrack.h:108
void avel_reverse_toggled(LiVESToggleButton *, livespointer mt)
Definition: multitrack.c:12311
Definition: multitrack.h:181
uint64_t in
Definition: multitrack.h:661
boolean on_track_between_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:13721
LiVESWidget * rewind
Definition: multitrack.h:208
LiVESWidget * gang_checkbutton
Definition: multitrack.h:622
double tl_fixed_length
length of timeline can be fixed (secs) : TODO
Definition: multitrack.h:445
LiVESWidget * tl_hbox
Definition: multitrack.h:269
LiVESWidget * next_fm_button
Definition: multitrack.h:304
LiVESWidget * spinbutton_start
Definition: multitrack.h:267
LiVESWidget * timeline_reg
Definition: multitrack.h:205
void mt_tl_move(lives_mt *, double pos_abs)
Definition: multitrack.c:3193
LiVESWidget * audio_insert
Definition: multitrack.h:213
uint32_t event_list_get_byte_size(lives_mt *, weed_plant_t *event_list, int *num_events)
returns bytes and sets num_events
Definition: multitrack.c:22051
void on_fx_insb_clicked(LiVESWidget *button, livespointer mt)
Definition: multitrack.c:18645
LiVESWidget * view_clips
Definition: multitrack.h:255
double prev_fx_time
Definition: multitrack.h:596
void on_insgap_sel_activate(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14988
boolean gang_audio
gang layer audio volume levels
Definition: multitrack.h:172
LiVESToolItem * eview_button
Definition: multitrack.h:324
Definition: multitrack.h:86
void scroll_track_by_scrollbar(LiVESScrollbar *sbar, livespointer mt)
Definition: multitrack.c:3309
LiVESWidget * re_to_tc
Definition: multitrack.h:290
boolean on_track_between_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
Definition: multitrack.c:13731
boolean layout_prompt
on occasion, prompt user if they want to correct layout on disk or not
Definition: multitrack.h:533
ulong mm_move_func
Definition: multitrack.h:399
LiVESWidget * infobar
Definition: multitrack.h:206
int outheight
Definition: multitrack.h:512
LiVESWidget * menu_hbox
Definition: multitrack.h:344
Definition: multitrack.h:89
void multitrack_end_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14147
Definition: multitrack.h:660
void edit_start_end_cb(LiVESMenuItem *, livespointer mt)
Definition: multitrack.c:14166
LiVESWidget * ins_gap_sel
Definition: multitrack.h:297
Definition: multitrack.h:157
Definition: multitrack.h:96
boolean mt_frame_preview
Definition: multitrack.h:460
boolean fx_auto_preview
Definition: multitrack.h:160
void unpaint_lines(lives_mt *)
Definition: multitrack.c:13921
ulong mm_select_func
Definition: multitrack.h:400
LiVESWidget * top_vbox
Definition: multitrack.h:185
Definition: multitrack.h:109
void mt_tl_move_relative(lives_mt *, double pos_rel)
Definition: multitrack.c:3258
weed_plant_t * avol_init_event
Definition: multitrack.h:528
int undo_offset
Definition: multitrack.h:494
ulong uid
Definition: multitrack.h:639
Definition: multitrack.h:99
track_rect * move_block(lives_mt *, track_rect *block, double timesecs, int old_track, int new_track)
Definition: multitrack.c:11399
boolean ordered
are frames in sequential order ?
Definition: multitrack.h:651
LiVESWidget * rename_track
Definition: multitrack.h:308
void delete_audio_tracks(lives_mt *, LiVESList *list, boolean full)
Definition: multitrack.c:5523
Definition: multitrack.h:137
LiVESWidget * spinbutton_avel
Definition: multitrack.h:260
void clear_context(lives_mt *)
Definition: multitrack.c:11625
boolean has_audio_file
Definition: multitrack.h:584
LiVESWidget * context_box
Definition: multitrack.h:197
void on_prev_fm_clicked(LiVESWidget *button, livespointer mt)
Definition: multitrack.c:18659
weed_plant_t * end_event
Definition: multitrack.h:644