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 #include "keyframenavigator.h"
22 
23 #include <QHBoxLayout>
24 #include <QPushButton>
25 #include <QApplication>
26 #include <QDesktopWidget>
27 #include <QDebug>
28 
29 #include "ui/icons.h"
30 
KeyframeNavigator(QWidget * parent,bool addLeftPad)31 KeyframeNavigator::KeyframeNavigator(QWidget *parent, bool addLeftPad) : QWidget(parent) {
32   setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding);
33 
34   key_controls = new QHBoxLayout(this);
35   key_controls->setSpacing(0);
36   key_controls->setMargin(0);
37 
38   if (addLeftPad) {
39     key_controls->addStretch();
40   }
41 
42   QSizePolicy button_size_policy;
43   button_size_policy.setRetainSizeWhenHidden(true);
44 
45   left_key_nav = new QPushButton(this);
46   left_key_nav->setSizePolicy(button_size_policy);
47   left_key_nav->setIcon(olive::icon::LeftArrow);
48   left_key_nav->setIconSize(left_key_nav->iconSize()*0.5);
49   left_key_nav->setVisible(false);
50   key_controls->addWidget(left_key_nav);
51   connect(left_key_nav, SIGNAL(clicked(bool)), this, SIGNAL(goto_previous_key()));
52   connect(left_key_nav, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
53 
54   key_addremove = new QPushButton(this);
55   key_addremove->setSizePolicy(button_size_policy);
56   key_addremove->setIcon(olive::icon::Diamond);
57   key_addremove->setIconSize(key_addremove->iconSize()*0.5);
58   key_addremove->setVisible(false);
59   key_controls->addWidget(key_addremove);
60   connect(key_addremove, SIGNAL(clicked(bool)), this, SIGNAL(toggle_key()));
61   connect(key_addremove, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
62 
63   right_key_nav = new QPushButton(this);
64   right_key_nav->setSizePolicy(button_size_policy);
65   right_key_nav->setIcon(olive::icon::RightArrow);
66   right_key_nav->setIconSize(right_key_nav->iconSize()*0.5);
67   right_key_nav->setVisible(false);
68   key_controls->addWidget(right_key_nav);
69   connect(right_key_nav, SIGNAL(clicked(bool)), this, SIGNAL(goto_next_key()));
70   connect(right_key_nav, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
71 
72   keyframe_enable = new QPushButton(this);
73   keyframe_enable->setIcon(olive::icon::Clock);
74   keyframe_enable->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
75   keyframe_enable->setIconSize(keyframe_enable->iconSize()*0.75);
76   keyframe_enable->setCheckable(true);
77   keyframe_enable->setToolTip(tr("Enable Keyframes"));
78   connect(keyframe_enable, SIGNAL(clicked(bool)), this, SIGNAL(keyframe_enabled_changed(bool)));
79   connect(keyframe_enable, SIGNAL(toggled(bool)), this, SLOT(keyframe_ui_enabled(bool)));
80   connect(keyframe_enable, SIGNAL(clicked(bool)), this, SIGNAL(clicked()));
81   key_controls->addWidget(keyframe_enable);
82 }
83 
~KeyframeNavigator()84 KeyframeNavigator::~KeyframeNavigator() {}
85 
enable_keyframes(bool b)86 void KeyframeNavigator::enable_keyframes(bool b) {
87   keyframe_enable->setChecked(b);
88 }
89 
enable_keyframe_toggle(bool b)90 void KeyframeNavigator::enable_keyframe_toggle(bool b) {
91   keyframe_enable->setVisible(b);
92 }
93 
keyframe_ui_enabled(bool enabled)94 void KeyframeNavigator::keyframe_ui_enabled(bool enabled) {
95   left_key_nav->setVisible(enabled);
96   key_addremove->setVisible(enabled);
97   right_key_nav->setVisible(enabled);
98 }
99