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