Olive
viewer.h
Go to the documentation of this file.
1 /***
2 
3  Olive - Non-Linear Video Editor
4  Copyright (C) 2019 Olive Team
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 3 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, see <http://www.gnu.org/licenses/>.
18 
19 ***/
20 
21 #ifndef VIEWER_H
22 #define VIEWER_H
23 
24 #include <QTimer>
25 #include <QIcon>
26 #include <QLabel>
27 #include <QPushButton>
28 
29 #include "project/marker.h"
30 #include "project/media.h"
31 
32 #include "ui/panel.h"
33 #include "ui/viewerwidget.h"
34 #include "ui/timelinewidget.h"
35 #include "ui/timelineheader.h"
36 #include "ui/labelslider.h"
37 #include "ui/resizablescrollbar.h"
38 
39 bool frame_rate_is_droppable(double rate);
40 long timecode_to_frame(const QString& s, int view, double frame_rate);
41 QString frame_to_timecode(long f, int view, double frame_rate);
42 
43 class Viewer : public Panel
44 {
45  Q_OBJECT
46 
47 public:
48  explicit Viewer(QWidget *parent = nullptr);
49  ~Viewer();
50 
51  bool is_focused();
52  bool is_main_sequence();
53  void set_main_sequence();
54  void set_media(Media *m);
55  void compose();
56  void set_playpause_icon(bool play);
57  void update_playhead_timecode(long p);
58  void update_end_timecode();
59  void update_header_zoom();
60  void clear_in();
61  void clear_out();
62  void clear_inout_point();
63  void set_in_point();
64  void set_out_point();
65  void set_zoom(bool in);
66  void set_panel_name(const QString& n);
67 
68  // playback functions
69  void seek(long p);
70  void play(bool in_to_out = false);
71  void pause();
72  bool playing;
74  qint64 start_msecs;
77 
78  void cue_recording(long start, long end, int track);
79  void uncue_recording();
80  bool is_recording_cued();
84 
85  void reset_all_audio();
86  void update_parents(bool reload_fx = false);
87 
88  int get_playback_speed();
89 
91 
94  QVector<Marker>* marker_ref;
95 
96  void set_marker();
97 
99 
100  void resizeEvent(QResizeEvent *event);
101 
102 protected:
103  virtual void Retranslate() override;
104 
105 public slots:
106  void play_wake();
107  void go_to_start();
108  void go_to_in();
109  void previous_frame();
110  void toggle_play();
111  void increase_speed();
112  void decrease_speed();
113  void next_frame();
114  void go_to_out();
115  void go_to_end();
116  void close_media();
117  void update_viewer();
118 
119 private slots:
120  void update_playhead();
121  void timer_update();
123  void resize_move(double d);
124 
125 private:
126 
127  void update_window_title();
128  void clean_created_seq();
129  void set_sequence(bool main, SequencePtr s);
133  QString panel_name;
134  double minimum_zoom;
137  void set_zoom_value(double d);
138  void set_sb_max();
139  void set_playback_speed(int s);
140 
141  long get_seq_in();
142  long get_seq_out();
143 
144  QIcon playIcon;
145 
146  void setup_ui();
147 
151  QLabel* end_timecode;
152 
153  QPushButton* go_to_start_button;
154  QPushButton* prev_frame_button;
155  QPushButton* play_button;
156  QPushButton* next_frame_button;
157  QPushButton* go_to_end_frame;
158 
161 
164 };
165 
166 #endif // VIEWER_H
bool playing_in_to_out
Definition: viewer.h:135
bool cue_recording_internal
Definition: viewer.h:159
void play_wake()
Definition: viewer.cpp:415
void update_playhead()
Definition: viewer.cpp:798
void seek(long p)
Definition: viewer.cpp:270
void set_zoom_value(double d)
Definition: viewer.cpp:582
bool frame_rate_is_droppable(double rate)
Definition: viewer.cpp:266
SequencePtr seq
Definition: viewer.h:93
void resizeEvent(QResizeEvent *event)
Definition: viewer.cpp:508
Definition: viewercontainer.h:29
QTimer playback_updater
Definition: viewer.h:75
void go_to_out()
Definition: viewer.cpp:322
long get_seq_in()
Definition: viewer.cpp:607
void setup_ui()
Definition: viewer.cpp:619
long previous_playhead
Definition: viewer.h:162
QPushButton * go_to_start_button
Definition: viewer.h:153
void update_header_zoom()
Definition: viewer.cpp:477
void clear_in()
Definition: viewer.cpp:525
double minimum_zoom
Definition: viewer.h:134
void previous_frame()
Definition: viewer.cpp:314
bool is_focused()
Definition: viewer.cpp:104
void update_playhead_timecode(long p)
Definition: viewer.cpp:469
long timecode_to_frame(const QString &s, int view, double frame_rate)
Definition: viewer.cpp:144
~Viewer()
Definition: viewer.cpp:98
virtual void Retranslate() override
Definition: viewer.cpp:100
void set_panel_name(const QString &n)
Definition: viewer.cpp:567
QPushButton * play_button
Definition: viewer.h:155
void recording_flasher_update()
Definition: viewer.cpp:832
void reset_all_audio()
Definition: viewer.cpp:123
QVector< Marker > * marker_ref
Definition: viewer.h:94
QPushButton * go_to_end_frame
Definition: viewer.h:157
void toggle_play()
Definition: viewer.cpp:351
Definition: timelineheader.h:31
QString frame_to_timecode(long f, int view, double frame_rate)
Definition: viewer.cpp:200
void set_sb_max()
Definition: viewer.cpp:595
QTimer recording_flasher
Definition: viewer.h:160
bool is_recording_cued()
Definition: viewer.cpp:347
Definition: media.h:42
QLabel * end_timecode
Definition: viewer.h:151
void set_zoom(bool in)
Definition: viewer.cpp:561
LabelSlider * current_timecode_slider
Definition: viewer.h:150
void set_playpause_icon(bool play)
Definition: viewer.cpp:909
void update_viewer()
Definition: viewer.cpp:516
ViewerContainer * viewer_container
Definition: viewer.h:149
Definition: panel.h:26
long cached_end_frame
Definition: viewer.h:132
long get_seq_out()
Definition: viewer.cpp:613
qint64 start_msecs
Definition: viewer.h:74
long recording_start
Definition: viewer.h:81
long recording_end
Definition: viewer.h:82
ResizableScrollBar * horizontal_bar
Definition: viewer.h:148
Media * media
Definition: viewer.h:92
void set_main_sequence()
Definition: viewer.cpp:118
int recording_track
Definition: viewer.h:83
void decrease_speed()
Definition: viewer.cpp:367
void set_sequence(bool main, SequencePtr s)
Definition: viewer.cpp:858
QString panel_name
Definition: viewer.h:133
long last_playhead
Definition: viewer.h:136
void update_end_timecode()
Definition: viewer.cpp:473
Definition: viewerwidget.h:44
void set_playback_speed(int s)
Definition: viewer.cpp:599
void go_to_start()
Definition: viewer.cpp:292
bool is_main_sequence()
Definition: viewer.cpp:114
bool main_sequence
Definition: viewer.h:130
std::shared_ptr< Sequence > SequencePtr
Definition: clip.h:48
QPushButton * prev_frame_button
Definition: viewer.h:154
void set_in_point()
Definition: viewer.cpp:549
void play(bool in_to_out=false)
Definition: viewer.cpp:375
TimelineHeader * headers
Definition: viewer.h:98
long playhead_start
Definition: viewer.h:73
The LabelSlider class.
Definition: labelslider.h:40
Definition: resizablescrollbar.h:26
bool playing
Definition: viewer.h:72
void clear_out()
Definition: viewer.cpp:533
bool just_played
Definition: viewer.h:76
void update_window_title()
Definition: viewer.cpp:572
void cue_recording(long start, long end, int track)
Definition: viewer.cpp:332
ViewerWidget * viewer_widget
Definition: viewer.h:90
void set_media(Media *m)
Definition: viewer.cpp:716
QIcon playIcon
Definition: viewer.h:144
void pause()
Definition: viewer.cpp:424
Definition: viewer.h:43
void uncue_recording()
Definition: viewer.cpp:341
void go_to_end()
Definition: viewer.cpp:296
bool created_sequence
Definition: viewer.h:131
void clean_created_seq()
Definition: viewer.cpp:844
int main(int argc, char *argv[])
Definition: main.cpp:36
void clear_inout_point()
Definition: viewer.cpp:541
void update_parents(bool reload_fx=false)
Definition: viewer.cpp:491
int playback_speed
Definition: viewer.h:163
void set_out_point()
Definition: viewer.cpp:555
void next_frame()
Definition: viewer.cpp:318
void timer_update()
Definition: viewer.cpp:802
int get_playback_speed()
Definition: viewer.cpp:500
void increase_speed()
Definition: viewer.cpp:359
void go_to_in()
Definition: viewer.cpp:304
Viewer(QWidget *parent=nullptr)
Definition: viewer.cpp:58
void set_marker()
Definition: viewer.cpp:504
void compose()
void close_media()
Definition: viewer.cpp:300
QPushButton * next_frame_button
Definition: viewer.h:156
void resize_move(double d)
Definition: viewer.cpp:840
virtual bool event(QEvent *e) override
Definition: panel.cpp:29