4 * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
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.
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.
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
31 #include "filexml.inc"
32 #include "keyframe.inc"
33 #include "keyframes.inc"
36 #include "pluginset.inc"
37 #include "pluginpopup.inc"
38 #include "pluginserver.inc"
39 #include "sharedlocation.h"
40 #include "virtualnode.inc"
46 // Plugin is inherited by Transition, Plugins
47 class Plugin : public Edit
50 // Plugin which belongs to a transition.
54 // Called by PluginSet::create_edit, PluginSet::insert_edit_after.
55 // Plugin can't take a track because it would get the edits pointer from
56 // the track instead of the plugin set.
58 PluginSet *plugin_set,
62 virtual Plugin& operator=(Plugin& edit);
63 virtual Edit& operator=(Edit& edit);
65 // Called by Edits::equivalent_output to override the keyframe behavior and check
67 void equivalent_output(Edit *edit, int64_t *result);
69 // Called by playable tracks to test for playable server.
70 // Descends the plugin tree without creating a virtual console.
71 int is_synthesis(int64_t position,
74 virtual int operator==(Plugin& that);
75 virtual int operator==(Edit& that);
77 void init(const char *title,
78 int64_t unit_position, int64_t unit_length, int plugin_type,
79 SharedLocation *shared_location, KeyFrame *default_keyframe);
80 void copy_base(Edit *edit);
81 virtual void copy_from(Edit *edit);
84 // Called by == operators, Edit::equivalent output
85 // to test title and keyframe of transition.
86 virtual int identical(Plugin *that);
87 // Called by render_gui. Only need the track, position, and pluginset
88 // to determine a corresponding GUI.
89 int identical_location(Plugin *that);
90 virtual void synchronize_params(Edit *edit);
91 // Used by Edits::insert_edits and Plugin::shift to shift plugin keyframes
92 void shift_keyframes(int64_t position);
94 void change_plugin(char *title,
95 SharedLocation *shared_location,
97 // For synchronizing parameters
98 void copy_keyframes(Plugin *plugin);
99 // For copying to clipboard
100 void copy_keyframes(int64_t start,
105 // For editing automation.
106 // Returns the point to restart background rendering at.
107 // -1 means nothing changed.
108 void clear_keyframes(int64_t start, int64_t end);
109 void copy(int64_t start, int64_t end, FileXML *file);
110 void paste(FileXML *file);
111 void load(FileXML *file);
113 void shift(int64_t difference);
114 void dump(FILE *fp=stdout);
115 static void fix_plugin_title(char *title);
116 // Called by PluginClient sequence to get rendering parameters
117 KeyFrame* get_prev_keyframe(int64_t position, int direction);
118 KeyFrame* get_next_keyframe(int64_t position, int direction);
119 // If this is a standalone plugin fill its location in the result.
120 // If it's shared copy the shared location into the result
121 void get_shared_location(SharedLocation *result);
122 // Get keyframes for editing with automatic creation if enabled.
123 // The direction is always assumed to be forward.
124 virtual KeyFrame* get_keyframe();
125 // Called by KeyFrameThread
126 int keyframe_exists(KeyFrame *ptr);
128 // Calculate title given plugin type. Used by TrackCanvas::draw_plugins
129 void calculate_title(char *string, int use_nudge);
130 // Resolve objects pointed to by shared_location
131 Track* get_shared_track();
132 // Plugin* get_shared_plugin();
134 // Need to resample keyframes
135 void resample(double old_rate, double new_rate);
137 // The title of the plugin is stored and not the plugindb entry in case it doesn't exist in the db
138 // Title of the plugin currently attached
139 char title[BCTEXTLEN];
141 // In and out aren't used anymore.
144 PluginSet *plugin_set;
146 // Data for the plugin is stored here. Default keyframe always exists.
147 // As for storing in PluginSet instead of Plugin:
149 // Each plugin needs a default keyframe of its own.
150 // The keyframes are meaningless except for the plugin they're stored in.
151 // Default keyframe has position = 0.
152 // Other keyframes have absolute position.
153 KeyFrames *keyframes;
155 // location of plugin if shared
156 SharedLocation shared_location;