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 void handle_transport(int command,
60 int wait_tracking = 0,
62 int update_refresh = 1);
64 int pause_transport();
65 int reset_transport();
67 // Get the EDL to play back with default to mwindow->edl
68 virtual EDL* get_edl();
69 void change_position(double position);
71 // playback parameters
75 PTransportButton *active_button;
76 PlayButton *forward_play;
77 FramePlayButton *frame_forward_play;
78 ReverseButton *reverse_play;
79 FrameReverseButton *frame_reverse_play;
80 FastReverseButton *fast_reverse;
81 FastPlayButton *fast_play;
82 RewindButton *rewind_button;
83 StopButton *stop_button;
84 EndButton *end_button;
86 BC_WindowBase *subwindow;
88 PlaybackEngine *engine;
89 int using_inout, status;
95 class PTransportButton : public BC_Button
98 PTransportButton(MWindow *mwindow, PlayTransport *transport, int x, int y, VFrame **data);
99 virtual ~PTransportButton();
100 virtual int set_mode(int mode);
104 PlayTransport *transport;
107 class RewindButton : public PTransportButton
110 RewindButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
114 class FastReverseButton : public PTransportButton
117 FastReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
121 class ReverseButton : public PTransportButton
124 ReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
128 class FrameReverseButton : public PTransportButton
131 FrameReverseButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
135 class PlayButton : public PTransportButton
138 PlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
142 class FramePlayButton : public PTransportButton
145 FramePlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
149 class FastPlayButton : public PTransportButton
152 FastPlayButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
158 class EndButton : public PTransportButton
161 EndButton(MWindow *mwindow, PlayTransport *transport, int x, int y);
165 class StopButton : public PTransportButton
168 StopButton(MWindow *mwindow, PlayTransport *transport, int x, int y);