Olive
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
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 "timeline/marker.h"
31 #include "project/media.h"
32 
33 #include "ui/panel.h"
34 #include "ui/viewerwidget.h"
35 #include "ui/timelinewidget.h"
36 #include "ui/timelineheader.h"
37 #include "ui/labelslider.h"
38 #include "ui/resizablescrollbar.h"
39 
40 bool frame_rate_is_droppable(double rate);
41 long timecode_to_frame(const QString& s, int view, double frame_rate);
42 QString frame_to_timecode(long f, int view, double frame_rate);
43 
44 class Viewer : public Panel
45 {
46  Q_OBJECT
47 
48 public:
49  explicit Viewer(QWidget *parent = nullptr);
50  ~Viewer();
51 
52  bool is_focused();
53  bool is_main_sequence();
54  void set_main_sequence();
55  void set_media(Media *m);
56  void compose();
57  void set_playpause_icon(bool play);
58  void update_playhead_timecode(long p);
59  void update_end_timecode();
60  void update_header_zoom();
61  void clear_in();
62  void clear_out();
63  void clear_inout_point();
64  void set_in_point();
65  void set_out_point();
66  void set_zoom(bool in);
67  void set_panel_name(const QString& n);
68  void show_videoaudio_buttons(bool s);
69 
70  // playback functions
71  void seek(long p);
72  void play(bool in_to_out = false);
73  void pause();
74  bool playing;
76  qint64 start_msecs;
78 
79 
80  void cue_recording(long start, long end, int track);
81  void uncue_recording();
82  bool is_recording_cued();
86 
87  void reset_all_audio();
88  void update_parents(bool reload_fx = false);
89 
90  int get_playback_speed();
91 
93 
96  QVector<Marker>* marker_ref;
97 
98  void set_marker();
99 
101 
102 
103 
105 
106  virtual void Retranslate() override;
107 protected:
108  virtual void resizeEvent(QResizeEvent *event) override;
109 
110 public slots:
111  void play_wake();
112  void go_to_start();
113  void go_to_in();
114  void previous_frame();
115  void toggle_play();
116  void increase_speed();
117  void decrease_speed();
118  void next_frame();
119  void go_to_out();
120  void go_to_end();
121  void close_media();
122  void update_viewer();
123 
124 
125 
126 private slots:
127  void update_playhead();
128  void timer_update();
130  void resize_move(double d);
131 
132  void drag_video_only();
133  void drag_audio_only();
134 
135 private:
136 
137  void update_window_title();
138  void clean_created_seq();
139  void set_sequence(bool main, SequencePtr s);
143  QString panel_name;
144  double minimum_zoom;
147  void set_zoom_value(double d);
148  void set_sb_max();
149  void set_playback_speed(int s);
150 
151  long get_seq_in();
152  long get_seq_out();
153 
154  void setup_ui();
155 
159  QLabel* end_timecode;
160 
161  QPushButton* go_to_start_button;
162  QPushButton* prev_frame_button;
163  QPushButton* play_button;
164  QPushButton* next_frame_button;
165  QPushButton* go_to_end_frame;
166 
167  QPushButton* video_only_button;
168  QPushButton* audio_only_button;
169 
172 
175 };
176 
177 #endif // VIEWER_H
void clean_created_seq()
Definition: viewer.cpp:919
QTimer recording_flasher
Definition: viewer.h:171
Definition: panel.h:26
void set_sb_max()
Definition: viewer.cpp:621
void set_out_point()
Definition: viewer.cpp:575
bool main_sequence
Definition: viewer.h:140
virtual void resizeEvent(QResizeEvent *event) override
Definition: viewer.cpp:517
bool cue_recording_internal
Definition: viewer.h:170
LabelSlider * current_timecode_slider
Definition: viewer.h:158
TimelineHeader * headers
Definition: viewer.h:100
void timer_update()
Definition: viewer.cpp:862
long get_seq_out()
Definition: viewer.cpp:639
void play(bool in_to_out=false)
Definition: viewer.cpp:379
void update_window_title()
Definition: viewer.cpp:598
void previous_frame()
Definition: viewer.cpp:318
void main(void)
Definition: blending.frag:175
void close_media()
Definition: viewer.cpp:304
ResizableScrollBar * horizontal_bar
Definition: viewer.h:156
void set_sequence(bool main, SequencePtr s)
Definition: viewer.cpp:939
~Viewer()
Definition: viewer.cpp:102
void clear_in()
Definition: viewer.cpp:545
QVector< Marker > * marker_ref
Definition: viewer.h:96
bool playing
Definition: viewer.h:74
void update_playhead_timecode(long p)
Definition: viewer.cpp:478
void play_wake()
Definition: viewer.cpp:429
bool is_focused()
Definition: viewer.cpp:109
void go_to_start()
Definition: viewer.cpp:296
virtual void Retranslate() override
Definition: viewer.cpp:104
void go_to_out()
Definition: viewer.cpp:326
int playback_speed
Definition: viewer.h:174
long recording_start
Definition: viewer.h:83
int get_playback_speed()
Definition: viewer.cpp:509
Definition: viewer.h:44
QPushButton * go_to_start_button
Definition: viewer.h:161
void set_marker()
Definition: viewer.cpp:513
void update_header_zoom()
Definition: viewer.cpp:486
The LabelSlider class.
Definition: labelslider.h:33
void next_frame()
Definition: viewer.cpp:322
void set_playpause_icon(bool play)
Definition: viewer.cpp:1000
void decrease_speed()
Definition: viewer.cpp:371
bool is_main_sequence()
Definition: viewer.cpp:119
void cue_recording(long start, long end, int track)
Definition: viewer.cpp:336
bool is_recording_cued()
Definition: viewer.cpp:351
void show_videoaudio_buttons(bool s)
Definition: viewer.cpp:592
void set_media(Media *m)
Definition: viewer.cpp:771
bool playing_in_to_out
Definition: viewer.h:145
void reset_all_audio()
Definition: viewer.cpp:127
void set_panel_name(const QString &n)
Definition: viewer.cpp:587
void seek(long p)
Definition: viewer.cpp:274
void toggle_play()
Definition: viewer.cpp:355
QString frame_to_timecode(long f, int view, double frame_rate)
Definition: viewer.cpp:204
Definition: viewerwidget.h:44
void compose()
void update_end_timecode()
Definition: viewer.cpp:482
void clear_out()
Definition: viewer.cpp:553
bool created_sequence
Definition: viewer.h:141
Media * media
Definition: viewer.h:94
void drag_audio_only()
Definition: viewer.cpp:914
void set_zoom(bool in)
Definition: viewer.cpp:581
QPushButton * go_to_end_frame
Definition: viewer.h:165
QTimer playback_updater
Definition: viewer.h:77
void set_main_sequence()
Definition: viewer.cpp:123
void recording_flasher_update()
Definition: viewer.cpp:897
Definition: media.h:45
void resize_move(double d)
Definition: viewer.cpp:905
void uncue_recording()
Definition: viewer.cpp:345
void drag_video_only()
Definition: viewer.cpp:909
long cached_end_frame
Definition: viewer.h:142
long timecode_to_frame(const QString &s, int view, double frame_rate)
Definition: viewer.cpp:148
long last_playhead
Definition: viewer.h:146
void go_to_in()
Definition: viewer.cpp:308
void go_to_end()
Definition: viewer.cpp:300
ViewerContainer * viewer_container
Definition: viewer.h:157
double minimum_zoom
Definition: viewer.h:144
QPushButton * prev_frame_button
Definition: viewer.h:162
void update_parents(bool reload_fx=false)
Definition: viewer.cpp:500
void increase_speed()
Definition: viewer.cpp:363
long playhead_start
Definition: viewer.h:75
qint64 start_msecs
Definition: viewer.h:76
MediaImportType
Definition: mediaimportdata.h:9
QString panel_name
Definition: viewer.h:143
Definition: viewercontainer.h:29
bool frame_rate_is_droppable(double rate)
Definition: viewer.cpp:270
long previous_playhead
Definition: viewer.h:173
QPushButton * video_only_button
Definition: viewer.h:167
QPushButton * audio_only_button
Definition: viewer.h:168
void pause()
Definition: viewer.cpp:435
void initiate_drag(olive::timeline::MediaImportType drag_type)
Definition: viewer.cpp:534
void update_viewer()
Definition: viewer.cpp:525
ViewerWidget * viewer_widget
Definition: viewer.h:92
QPushButton * play_button
Definition: viewer.h:163
Definition: resizablescrollbar.h:26
QLabel * end_timecode
Definition: viewer.h:159
long get_seq_in()
Definition: viewer.cpp:633
void update_playhead()
Definition: viewer.cpp:858
SequencePtr seq
Definition: viewer.h:95
void set_playback_speed(int s)
Definition: viewer.cpp:625
int recording_track
Definition: viewer.h:85
Definition: timelineheader.h:31
void set_zoom_value(double d)
Definition: viewer.cpp:608
void setup_ui()
Definition: viewer.cpp:645
QPushButton * next_frame_button
Definition: viewer.h:164
void set_in_point()
Definition: viewer.cpp:569
Viewer(QWidget *parent=nullptr)
Definition: viewer.cpp:63
long recording_end
Definition: viewer.h:84
std::shared_ptr< Sequence > SequencePtr
Definition: media.h:38
void clear_inout_point()
Definition: viewer.cpp:561