Files
oak-editor/panels/viewer.h
T
2019-03-13 16:55:49 +11:00

166 lines
3.8 KiB
C++

/***
Olive - Non-Linear Video Editor
Copyright (C) 2019 Olive Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
***/
#ifndef VIEWER_H
#define VIEWER_H
#include <QTimer>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
#include "timeline/marker.h"
#include "project/media.h"
#include "ui/panel.h"
#include "ui/viewerwidget.h"
#include "ui/timelinewidget.h"
#include "ui/timelineheader.h"
#include "ui/labelslider.h"
#include "ui/resizablescrollbar.h"
bool frame_rate_is_droppable(double rate);
long timecode_to_frame(const QString& s, int view, double frame_rate);
QString frame_to_timecode(long f, int view, double frame_rate);
class Viewer : public Panel
{
Q_OBJECT
public:
explicit Viewer(QWidget *parent = nullptr);
~Viewer();
bool is_focused();
bool is_main_sequence();
void set_main_sequence();
void set_media(Media *m);
void compose();
void set_playpause_icon(bool play);
void update_playhead_timecode(long p);
void update_end_timecode();
void update_header_zoom();
void clear_in();
void clear_out();
void clear_inout_point();
void set_in_point();
void set_out_point();
void set_zoom(bool in);
void set_panel_name(const QString& n);
// playback functions
void seek(long p);
void play(bool in_to_out = false);
void pause();
bool WaitingForPlayWake();
bool playing;
long playhead_start;
qint64 start_msecs;
QTimer playback_updater;
void cue_recording(long start, long end, int track);
void uncue_recording();
bool is_recording_cued();
long recording_start;
long recording_end;
int recording_track;
void reset_all_audio();
void update_parents(bool reload_fx = false);
int get_playback_speed();
ViewerWidget* viewer_widget;
Media* media;
SequencePtr seq;
QVector<Marker>* marker_ref;
void set_marker();
TimelineHeader* headers;
virtual void Retranslate() override;
protected:
virtual void resizeEvent(QResizeEvent *event) override;
public slots:
void play_wake();
void go_to_start();
void go_to_in();
void previous_frame();
void toggle_play();
void increase_speed();
void decrease_speed();
void next_frame();
void go_to_out();
void go_to_end();
void close_media();
void update_viewer();
private slots:
void update_playhead();
void timer_update();
void recording_flasher_update();
void resize_move(double d);
private:
void update_window_title();
void clean_created_seq();
void set_sequence(bool main, SequencePtr s);
bool main_sequence;
bool created_sequence;
long cached_end_frame;
QString panel_name;
double minimum_zoom;
bool playing_in_to_out;
long last_playhead;
bool just_played_;
void set_zoom_value(double d);
void set_sb_max();
void set_playback_speed(int s);
long get_seq_in();
long get_seq_out();
void setup_ui();
ResizableScrollBar* horizontal_bar;
ViewerContainer* viewer_container;
LabelSlider* current_timecode_slider;
QLabel* end_timecode;
QPushButton* go_to_start_button;
QPushButton* prev_frame_button;
QPushButton* play_button;
QPushButton* next_frame_button;
QPushButton* go_to_end_frame;
bool cue_recording_internal;
QTimer recording_flasher;
long previous_playhead;
int playback_speed;
};
#endif // VIEWER_H