add shuttle udev rules to doc, fix still images drag handle
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / edit.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef EDIT_H
23 #define EDIT_H
24
25 #include <stdio.h>
26 #include <stdint.h>
27
28 #include "asset.inc"
29 #include "edl.inc"
30 #include "guicast.h"
31 #include "edits.inc"
32 #include "filexml.inc"
33 #include "indexable.inc"
34 #include "mwindow.inc"
35 #include "plugin.inc"
36 #include "track.inc"
37 #include "transition.inc"
38
39 // UNITS ARE SAMPLES FOR AUDIO / FRAMES FOR VIDEO
40 // zoom_units was mwindow->zoom_sample for AEdit
41
42 // Generic edit of something
43
44 class Edit : public ListItem<Edit>
45 {
46 public:
47         Edit(EDL *edl, Edits *edits);
48         Edit(EDL *edl, Track *track);
49         Edit();
50         virtual ~Edit();
51
52         void reset();
53
54         Indexable* get_source();
55 // Copy from different EDL
56         virtual void copy_from(Edit *edit);
57 // Compare with edit in same EDL
58         virtual int identical(Edit &edit);
59         virtual Edit& operator=(Edit& edit);
60 // Called by Edits and PluginSet.
61 // Compare with edit in different EDL
62         virtual void equivalent_output(Edit *edit, int64_t *result);
63         virtual int operator==(Edit& edit);
64 // When inherited by a plugin need to resample keyframes
65         virtual void synchronize_params(Edit *edit);
66 // Used by Edits::insert_edits to shift plugin keyframes
67         virtual void shift_keyframes(int64_t position) {};
68
69 // Get size of frame to draw on timeline
70         double picon_w();
71         int picon_h();
72         double frame_w();
73         double frames_per_picon();
74         int copy(int64_t start, int64_t end, FileXML *xml, const char *output_path);
75 // When inherited by a plugin need to resample keyframes
76         virtual void resample(double old_rate, double new_rate) {};
77
78 // Shift in time
79         virtual void shift(int64_t difference);
80
81         void trim(int64_t difference);
82         int shift_start(int edit_mode, int64_t newposition, int64_t oldposition,
83                 int edit_labels, int edit_autos, int edit_plugins, Edits *trim_edits);
84         int shift_end(int edit_mode, int64_t newposition, int64_t oldposition,
85                 int edit_labels, int edit_autos, int edit_plugins, Edits *trim_edits);
86         int follow_edits(int64_t start, int64_t end, int64_t cut_length,
87                 int edits_moved, int rest_moved, int edit_labels, int edit_autos,
88                 int edit_plugins, Edits *trim_edits);
89
90         void insert_transition(char  *title);
91         void detach_transition();
92 // Determine if silence depending on existance of asset or plugin title
93         virtual int silence();
94         void set_selected(int v);
95
96 // Media edit information
97 // Units are native units for the track.
98 // Start of edit in source file normalized to project sample rate.
99 // Normalized because all the editing operations clip startsource relative
100 // to the project sample rate;
101         int64_t startsource;
102 // Start of edit in project file.
103         int64_t startproject;
104 // # of units in edit.
105         int64_t length;
106 // Channel or layer of source
107         int channel;
108 // ID for resource pixmaps
109         int id;
110 // ID for selection groups
111         int group_id;
112 // User defined title for timeline
113         char user_title[BCTEXTLEN];
114         int is_plugin, is_selected;
115 // edge cannot be optimized
116         int hard_left, hard_right;
117 // title bar color
118         int color;
119 // Transition if one is present at the beginning of this edit
120 // This stores the length of the transition
121         Transition *transition;
122
123         Edits *edits;
124         Track *track;
125
126 // points to an object in edl->assets if set
127         Asset *asset;
128 // points to an object in edl->nested_edls if set
129         EDL *nested_edl;
130 // Asset and nested_edl are 0 if silence
131
132 // Parent EDL of this edit
133         EDL *edl;
134
135         int load_properties(FileXML *xml, int64_t &startproject);
136         virtual int load_properties_derived(FileXML *xml) { return 0; };
137
138         virtual int copy_properties_derived(FileXML *xml,
139                 int64_t length_in_selection) { return 0; }
140
141         int popup_transition(float view_start, float zoom_units, int cursor_x, int cursor_y);
142
143 // Return 1 if the left handle was selected 2 if the right handle was selected
144         int select_handle(float view_start, float zoom_units,
145                 int cursor_x, int cursor_y, int64_t &selection);
146         virtual int get_handle_parameters(int64_t &left, int64_t &right,
147                 int64_t &left_sample, int64_t &right_sample, float view_start,
148                 float zoom_units) { return 0; }
149         virtual int64_t get_source_end(int64_t default_);
150         void get_title(char *title);
151
152         int dump(FILE *fp=stdout);
153         virtual int dump_derived() { return 0; }
154 };
155
156 #endif