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
22 #ifndef PLAYTRANSPORT_H
23 #define PLAYTRANSPORT_H
27 #include "mwindow.inc"
28 #include "playbackengine.inc"
29 #include "playtransport.inc"
33 #define PAUSEDOWN_MODE 2
38 PlayTransport(MWindow *mwindow, BC_WindowBase *subwindow, int x, int y);
39 virtual ~PlayTransport();
41 void create_objects();
42 void reposition_buttons(int x, int y);
44 virtual void goto_start();
45 virtual void goto_end();
47 // Set the playback engine to control
48 void set_engine(PlaybackEngine *engine);
49 static int get_transport_width(MWindow *mwindow);
50 int flip_vertical(int vertical, int &x, int &y);
52 // Abstract TransportQue::send_command.
53 // wait_tracking - causes stop to wail until the final tracking position
54 // is updated before returning
55 // use_inout - causes the in/out points to determine the beginning and end
57 // update_refresh - causes a frame advance to be issued after STOP to update
59 // toggle_audio - reverses audio playback enable in RenderEngine::get_duty
60 void handle_transport(int command, int wait_tracking=0,
61 int use_inout=0, int update_refresh=1, int toggle_audio=0);
62 int pause_transport();
63 int reset_transport();
65 // Get the EDL to play back with default to mwindow->edl
66 virtual EDL* get_edl();
67 void change_position(double position);
69 // playback parameters
73 PTransportButton *active_button;
74 PlayButton *forward_play;
75 FramePlayButton *frame_forward_play;
76 ReverseButton *reverse_play;
77 FrameReverseButton *frame_reverse_play;
78 FastReverseButton *fast_reverse;
79 FastPlayButton *fast_play;
80 RewindButton *rewind_button;
81 StopButton *stop_button;
82 EndButton *end_button;
84 BC_WindowBase *subwindow;
86 PlaybackEngine *engine;
87 int using_inout, status;
93 class PTransportButton : public BC_Button
96 PTransportButton(MWindow *mwindow, PlayTransport *transport, int x, int y, VFrame **data);
97 virtual ~PTransportButton();
98 virtual int set_mode(int mode);
102 PlayTransport *transport;
105 class RewindButton : public PTransportButton
108 RewindButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
112 class FastReverseButton : public PTransportButton
115 FastReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
119 class ReverseButton : public PTransportButton
122 ReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
126 class FrameReverseButton : public PTransportButton
129 FrameReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
133 class PlayButton : public PTransportButton
136 PlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
140 class FramePlayButton : public PTransportButton
143 FramePlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
147 class FastPlayButton : public PTransportButton
150 FastPlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
156 class EndButton : public PTransportButton
159 EndButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
163 class StopButton : public PTransportButton
166 StopButton(MWindow *mwindow, PlayTransport *transport, int x, int y);