added keyframe button, moved to windowModified

This commit is contained in:
itsmattkc
2018-10-07 11:25:08 +11:00
parent 4de7bcf44b
commit 8e7ca3652f
10 changed files with 169 additions and 84 deletions
+2 -1
View File
@@ -453,7 +453,8 @@ EffectRow::EffectRow(Effect *parent, QGridLayout *uilayout, const QString &n, in
label = new QLabel(name);
ui->addWidget(label, row, 0);
keyframe_enable = new QPushButton();
keyframe_enable = new QPushButton(QIcon(":/icons/clock.png"), "");
keyframe_enable->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
keyframe_enable->setCheckable(true);
keyframe_enable->setToolTip("Enable Keyframes");
connect(keyframe_enable, SIGNAL(clicked(bool)), this, SLOT(set_keyframe_enabled(bool)));
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

+1
View File
@@ -40,5 +40,6 @@
<file>olive-splash.png</file>
<file>add-button.png</file>
<file>add-button-disabled.png</file>
<file>clock.png</file>
</qresource>
</RCC>
+2 -2
View File
@@ -333,7 +333,7 @@ void MainWindow::on_action_Paste_triggered()
}
void MainWindow::autorecover_interval() {
if (project_changed) {
if (isWindowModified()) {
panel_project->save_project(true);
qDebug() << "[INFO] Auto-recovery project saved";
}
@@ -362,7 +362,7 @@ bool MainWindow::save_project() {
}
bool MainWindow::can_close_project() {
if (project_changed) {
if (isWindowModified()) {
QMessageBox* m = new QMessageBox(
QMessageBox::Question,
"Unsaved Project",
+3 -4
View File
@@ -39,7 +39,6 @@ extern "C" {
#define MAXIMUM_RECENT_PROJECTS 10
QString autorecovery_filename;
bool project_changed = false;
QString project_url = "";
QStringList recent_projects;
QString recent_proj_file;
@@ -594,7 +593,7 @@ void Project::new_project() {
// clear existing project
set_sequence(NULL);
clear();
project_changed = false;
mainWindow->setWindowModified(false);
}
QTreeWidgetItem* Project::find_loaded_folder_by_id(int id) {
@@ -978,7 +977,7 @@ void Project::load_project() {
if (open_seq != NULL) set_sequence(open_seq);
panel_timeline->redraw_all_clips(false);
project_changed = false;
mainWindow->setWindowModified(false);
} else {
new_project();
}
@@ -1179,7 +1178,7 @@ void Project::save_project(bool autorecovery) {
if (!autorecovery) {
add_recent_project(project_url);
project_changed = false;
mainWindow->setWindowModified(false);
}
}
-1
View File
@@ -24,7 +24,6 @@ class Project;
}
extern QString autorecovery_filename;
extern bool project_changed;
extern QString project_url;
extern QStringList recent_projects;
extern QString recent_proj_file;
+73 -72
View File
@@ -20,6 +20,7 @@
#include "ui/labelslider.h"
#include "ui/viewerwidget.h"
#include "project/marker.h"
#include "mainwindow.h"
QUndoStack undo_stack;
@@ -57,7 +58,7 @@ MoveClipAction::MoveClipAction(Clip *c, long iin, long iout, long iclip_in, int
new_out(iout),
new_clip_in(iclip_in),
new_track(itrack),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void MoveClipAction::undo() {
@@ -66,7 +67,7 @@ void MoveClipAction::undo() {
clip->clip_in = old_clip_in;
clip->track = old_track;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void MoveClipAction::redo() {
@@ -75,13 +76,13 @@ void MoveClipAction::redo() {
clip->clip_in = new_clip_in;
clip->track = new_track;
project_changed = true;
mainWindow->setWindowModified(true);
}
DeleteClipAction::DeleteClipAction(Sequence* s, int clip) :
seq(s),
index(clip),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
DeleteClipAction::~DeleteClipAction() {
@@ -98,7 +99,7 @@ void DeleteClipAction::undo() {
seq->clips.at(linkClipIndex.at(i))->linked.insert(linkLinkIndex.at(i), index);
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void DeleteClipAction::redo() {
@@ -122,7 +123,7 @@ void DeleteClipAction::redo() {
}
}
project_changed = true;
mainWindow->setWindowModified(true);
}
ChangeSequenceAction::ChangeSequenceAction(Sequence* s) :
@@ -143,7 +144,7 @@ SetTimelineInOutCommand::SetTimelineInOutCommand(Sequence *s, bool enabled, long
new_enabled(enabled),
new_in(in),
new_out(out),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void SetTimelineInOutCommand::undo() {
@@ -151,7 +152,7 @@ void SetTimelineInOutCommand::undo() {
seq->workarea_in = old_in;
seq->workarea_out = old_out;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void SetTimelineInOutCommand::redo() {
@@ -163,7 +164,7 @@ void SetTimelineInOutCommand::redo() {
seq->workarea_in = new_in;
seq->workarea_out = new_out;
project_changed = true;
mainWindow->setWindowModified(true);
}
AddEffectCommand::AddEffectCommand(Clip* c, int ieffect) :
@@ -171,7 +172,7 @@ AddEffectCommand::AddEffectCommand(Clip* c, int ieffect) :
effect(ieffect),
ref(NULL),
done(false),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
AddEffectCommand::~AddEffectCommand() {
@@ -181,7 +182,7 @@ AddEffectCommand::~AddEffectCommand() {
void AddEffectCommand::undo() {
clip->effects.removeLast();
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void AddEffectCommand::redo() {
@@ -190,14 +191,14 @@ void AddEffectCommand::redo() {
}
clip->effects.append(ref);
done = true;
project_changed = true;
mainWindow->setWindowModified(true);
}
AddTransitionCommand::AddTransitionCommand(Clip* c, int itransition, int itype) :
clip(c),
transition(itransition),
type(itype),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void AddTransitionCommand::undo() {
@@ -208,7 +209,7 @@ void AddTransitionCommand::undo() {
delete clip->closing_transition;
clip->closing_transition = NULL;
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void AddTransitionCommand::redo() {
@@ -217,14 +218,14 @@ void AddTransitionCommand::redo() {
} else {
clip->closing_transition = create_transition(transition, clip);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
ModifyTransitionCommand::ModifyTransitionCommand(Clip* c, int itype, long ilength) :
clip(c),
type(itype),
new_length(ilength),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void ModifyTransitionCommand::undo() {
@@ -233,7 +234,7 @@ void ModifyTransitionCommand::undo() {
} else {
clip->closing_transition->length = old_length;
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void ModifyTransitionCommand::redo() {
@@ -244,14 +245,14 @@ void ModifyTransitionCommand::redo() {
old_length = clip->closing_transition->length;
clip->closing_transition->length = new_length;
}
project_changed = true;
mainWindow->setWindowModified(true);
}
DeleteTransitionCommand::DeleteTransitionCommand(Clip* c, int itype) :
clip(c),
type(itype),
transition(NULL),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
DeleteTransitionCommand::~DeleteTransitionCommand() {
@@ -265,7 +266,7 @@ void DeleteTransitionCommand::undo() {
clip->closing_transition = transition;
}
transition = NULL;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void DeleteTransitionCommand::redo() {
@@ -276,14 +277,14 @@ void DeleteTransitionCommand::redo() {
transition = clip->closing_transition;
clip->closing_transition = NULL;
}
project_changed = true;
mainWindow->setWindowModified(true);
}
NewSequenceCommand::NewSequenceCommand(QTreeWidgetItem *s, QTreeWidgetItem* iparent) :
seq(s),
parent(iparent),
done(false),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
NewSequenceCommand::~NewSequenceCommand() {
@@ -297,7 +298,7 @@ void NewSequenceCommand::undo() {
parent->removeChild(seq);
}
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void NewSequenceCommand::redo() {
@@ -307,14 +308,14 @@ void NewSequenceCommand::redo() {
parent->addChild(seq);
}
done = true;
project_changed = true;
mainWindow->setWindowModified(true);
}
AddMediaCommand::AddMediaCommand(QTreeWidgetItem* iitem, QTreeWidgetItem* iparent) :
item(iitem),
parent(iparent),
done(false),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
AddMediaCommand::~AddMediaCommand() {
@@ -331,7 +332,7 @@ void AddMediaCommand::undo() {
parent->removeChild(item);
}
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void AddMediaCommand::redo() {
@@ -341,12 +342,12 @@ void AddMediaCommand::redo() {
parent->addChild(item);
}
done = true;
project_changed = true;
mainWindow->setWindowModified(true);
}
DeleteMediaCommand::DeleteMediaCommand(QTreeWidgetItem* i) :
item(i),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
DeleteMediaCommand::~DeleteMediaCommand() {
@@ -361,7 +362,7 @@ void DeleteMediaCommand::undo() {
parent->addChild(item);
}
old_project_changed = project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void DeleteMediaCommand::redo() {
@@ -373,14 +374,14 @@ void DeleteMediaCommand::redo() {
parent->removeChild(item);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
RippleCommand::RippleCommand(Sequence *s, long ipoint, long ilength) :
seq(s),
point(ipoint),
length(ilength),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void RippleCommand::undo() {
@@ -389,7 +390,7 @@ void RippleCommand::undo() {
c->timeline_in -= length;
c->timeline_out -= length;
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void RippleCommand::redo() {
@@ -412,13 +413,13 @@ void RippleCommand::redo() {
}
}
}
project_changed = true;
mainWindow->setWindowModified(true);
}
AddClipCommand::AddClipCommand(Sequence* s, QVector<Clip*>& add) :
seq(s),
clips(add),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
AddClipCommand::~AddClipCommand() {
@@ -432,7 +433,7 @@ void AddClipCommand::undo() {
delete seq->clips.last();
seq->clips.removeLast();
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void AddClipCommand::redo() {
@@ -447,7 +448,7 @@ void AddClipCommand::redo() {
}
seq->clips.append(copy);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
/*
@@ -461,7 +462,7 @@ TimelineAction::TimelineAction() :
change_seq(false),
ripple_enabled(false),
change_in_out(false),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
TimelineAction::~TimelineAction() {
@@ -749,7 +750,7 @@ void TimelineAction::undo() {
set_sequence(old_seq);
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
done = false;
}
@@ -974,12 +975,12 @@ void TimelineAction::redo() {
set_sequence(new_seq);
}
project_changed = true;
mainWindow->setWindowModified(true);
done = true;
}*/
LinkCommand::LinkCommand() : link(true), old_project_changed(project_changed) {}
LinkCommand::LinkCommand() : link(true), old_project_changed(mainWindow->isWindowModified()) {}
void LinkCommand::undo() {
for (int i=0;i<clips.size();i++) {
@@ -990,7 +991,7 @@ void LinkCommand::undo() {
c->linked = old_links.at(i);
}
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void LinkCommand::redo() {
@@ -1008,30 +1009,30 @@ void LinkCommand::redo() {
c->linked.clear();
}
}
project_changed = true;
mainWindow->setWindowModified(true);
}
CheckboxCommand::CheckboxCommand(QCheckBox* b) : box(b), checked(box->isChecked()), done(true), old_project_changed(project_changed) {}
CheckboxCommand::CheckboxCommand(QCheckBox* b) : box(b), checked(box->isChecked()), done(true), old_project_changed(mainWindow->isWindowModified()) {}
CheckboxCommand::~CheckboxCommand() {}
void CheckboxCommand::undo() {
box->setChecked(!checked);
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void CheckboxCommand::redo() {
if (!done) {
box->setChecked(checked);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
ReplaceMediaCommand::ReplaceMediaCommand(QTreeWidgetItem* i, QString s) :
item(i),
new_filename(s),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{
media = get_footage_from_tree(item);
old_filename = media->url;
@@ -1061,13 +1062,13 @@ void ReplaceMediaCommand::replace(QString& filename) {
void ReplaceMediaCommand::undo() {
replace(old_filename);
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void ReplaceMediaCommand::redo() {
replace(new_filename);
project_changed = true;
mainWindow->setWindowModified(true);
}
ReplaceClipMediaCommand::ReplaceClipMediaCommand(void *a, void *b, int c, int d, bool e) :
@@ -1076,7 +1077,7 @@ ReplaceClipMediaCommand::ReplaceClipMediaCommand(void *a, void *b, int c, int d,
old_type(c),
new_type(d),
preserve_clip_ins(e),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void ReplaceClipMediaCommand::replace(bool undo) {
@@ -1116,16 +1117,16 @@ void ReplaceClipMediaCommand::replace(bool undo) {
void ReplaceClipMediaCommand::undo() {
replace(true);
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void ReplaceClipMediaCommand::redo() {
replace(false);
project_changed = true;
mainWindow->setWindowModified(true);
}
EffectDeleteCommand::EffectDeleteCommand() : done(false), old_project_changed(project_changed) {}
EffectDeleteCommand::EffectDeleteCommand() : done(false), old_project_changed(mainWindow->isWindowModified()) {}
EffectDeleteCommand::~EffectDeleteCommand() {
if (done) {
@@ -1142,7 +1143,7 @@ void EffectDeleteCommand::undo() {
}
panel_effect_controls->reload_clips();
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void EffectDeleteCommand::redo() {
@@ -1155,10 +1156,10 @@ void EffectDeleteCommand::redo() {
}
panel_effect_controls->reload_clips();
done = true;
project_changed = true;
mainWindow->setWindowModified(true);
}
MediaMove::MediaMove(SourceTable *s) : table(s), old_project_changed(project_changed) {}
MediaMove::MediaMove(SourceTable *s) : table(s), old_project_changed(mainWindow->isWindowModified()) {}
void MediaMove::undo() {
for (int i=0;i<items.size();i++) {
@@ -1173,7 +1174,7 @@ void MediaMove::undo() {
froms.at(i)->addChild(items.at(i));
}
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void MediaMove::redo() {
@@ -1191,41 +1192,41 @@ void MediaMove::redo() {
to->addChild(items.at(i));
}
}
project_changed = true;
mainWindow->setWindowModified(true);
}
MediaRename::MediaRename() : done(true), old_project_changed(project_changed) {}
MediaRename::MediaRename() : done(true), old_project_changed(mainWindow->isWindowModified()) {}
void MediaRename::undo() {
item->setText(0, from);
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void MediaRename::redo() {
if (!done) {
item->setText(0, to);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
KeyframeMove::KeyframeMove() : old_project_changed(project_changed) {}
KeyframeMove::KeyframeMove() : old_project_changed(mainWindow->isWindowModified()) {}
void KeyframeMove::undo() {
for (int i=0;i<rows.size();i++) {
rows.at(i)->keyframe_times[keyframes.at(i)] -= movement;
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void KeyframeMove::redo() {
for (int i=0;i<rows.size();i++) {
rows.at(i)->keyframe_times[keyframes.at(i)] += movement;
}
project_changed = true;
mainWindow->setWindowModified(true);
}
KeyframeDelete::KeyframeDelete() : old_project_changed(project_changed), disable_keyframes_on_row(NULL), sorted(false) {}
KeyframeDelete::KeyframeDelete() : old_project_changed(mainWindow->isWindowModified()), disable_keyframes_on_row(NULL), sorted(false) {}
void KeyframeDelete::undo() {
if (disable_keyframes_on_row != NULL) disable_keyframes_on_row->setKeyframing(true);
@@ -1244,7 +1245,7 @@ void KeyframeDelete::undo() {
}
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void KeyframeDelete::redo() {
@@ -1282,12 +1283,12 @@ void KeyframeDelete::redo() {
}
if (disable_keyframes_on_row != NULL) disable_keyframes_on_row->setKeyframing(false);
project_changed = true;
mainWindow->setWindowModified(true);
sorted = true;
}
KeyframeSet::KeyframeSet(EffectRow* r, int i, long t, bool justMadeKeyframe) :
old_project_changed(project_changed),
old_project_changed(mainWindow->isWindowModified()),
row(r),
index(i),
time(t),
@@ -1326,7 +1327,7 @@ void KeyframeSet::undo() {
}
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
done = false;
}
@@ -1345,7 +1346,7 @@ void KeyframeSet::redo() {
}
row->setKeyframing(true);
project_changed = true;
mainWindow->setWindowModified(true);
done = true;
}
@@ -1383,7 +1384,7 @@ AddMarkerAction::AddMarkerAction(Sequence* s, long t, QString n) :
seq(s),
time(t),
name(n),
old_project_changed(project_changed)
old_project_changed(mainWindow->isWindowModified())
{}
void AddMarkerAction::undo() {
@@ -1393,7 +1394,7 @@ void AddMarkerAction::undo() {
sequence->markers[index].name = old_name;
}
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void AddMarkerAction::redo() {
@@ -1414,7 +1415,7 @@ void AddMarkerAction::redo() {
sequence->markers[index].name = name;
}
project_changed = true;
mainWindow->setWindowModified(true);
}
MoveMarkerAction::MoveMarkerAction(Marker* m, long o, long n) :
+5 -3
View File
@@ -2,24 +2,26 @@
#include "project/undo.h"
#include "panels/project.h"
#include "mainwindow.h"
#include <QUndoCommand>
#include <QWheelEvent>
class ComboBoxExCommand : public QUndoCommand {
public:
ComboBoxExCommand(ComboBoxEx* obj, int old_index, int new_index) :
combobox(obj), old_val(old_index), new_val(new_index), done(true), old_project_changed(project_changed) {}
combobox(obj), old_val(old_index), new_val(new_index), done(true), old_project_changed(mainWindow->isWindowModified()) {}
void undo() {
combobox->setCurrentIndex(old_val);
done = false;
project_changed = old_project_changed;
mainWindow->setWindowModified(old_project_changed);
}
void redo() {
if (!done) {
combobox->setCurrentIndex(new_val);
}
project_changed = true;
mainWindow->setWindowModified(true);
}
private:
ComboBoxEx* combobox;
+78 -1
View File
@@ -29,6 +29,7 @@
#include <QtMath>
#include <QScrollBar>
#include <QMimeData>
#include <QToolTip>
#define MAX_TEXT_WIDTH 20
@@ -43,7 +44,42 @@ TimelineWidget::TimelineWidget(QWidget *parent) : QWidget(parent) {
connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(show_context_menu(const QPoint&)));
}
void TimelineWidget::right_click_ripple() {
bool can_ripple = true;
// validate the ripple
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
if (c->timeline_in > rc_ripple_min) {
for (int j=0;j<sequence->clips.size();j++) {
Clip* cc = sequence->clips.at(j);
if (cc->track == c->track) {
if (cc->timeline_out == c->timeline_in) {
can_ripple = false;
break;
} else if (cc->timeline_out < c->timeline_in) {
long validator = (c->timeline_in - (rc_ripple_max - rc_ripple_min)) - cc->timeline_out;
if (validator < 0) {
rc_ripple_min = cc->timeline_out;
rc_ripple_max = c->timeline_in;
}
}
}
}
}
}
if (can_ripple) {
undo_stack.push(new RippleCommand(sequence, rc_ripple_min, rc_ripple_min - rc_ripple_max));
panel_timeline->redraw_all_clips(true);
}
}
void TimelineWidget::show_context_menu(const QPoint& pos) {
// hack because sometimes right clicking doesn't trigger mouseReleaseEvent
panel_timeline->rect_select_init = false;
panel_timeline->rect_select_proc = false;
QMenu menu(this);
QAction* undoAction = menu.addAction("&Undo");
@@ -55,6 +91,38 @@ void TimelineWidget::show_context_menu(const QPoint& pos) {
menu.addSeparator();
if (sequence->selections.size() == 0) {
panel_timeline->cursor_frame = panel_timeline->getTimelineFrameFromScreenPoint(pos.x());
panel_timeline->cursor_track = getTrackFromScreenPoint(pos.y());
bool can_ripple_delete = true;
bool at_end_of_sequence = true;
rc_ripple_min = LONG_MIN;
rc_ripple_max = LONG_MAX;
for (int i=0;i<sequence->clips.size();i++) {
Clip* c = sequence->clips.at(i);
if (c != NULL) {
if (c->timeline_in > panel_timeline->cursor_frame || c->timeline_out > panel_timeline->cursor_frame) {
at_end_of_sequence = false;
}
if (c->track == panel_timeline->cursor_track) {
if (c->timeline_in <= panel_timeline->cursor_frame && c->timeline_out >= panel_timeline->cursor_frame) {
can_ripple_delete = false;
break;
} else if (c->timeline_out < panel_timeline->cursor_frame) {
rc_ripple_min = qMax(rc_ripple_min, c->timeline_out);
} else if (c->timeline_in > panel_timeline->cursor_frame) {
rc_ripple_max = qMin(rc_ripple_max, c->timeline_in);
}
}
}
}
if (can_ripple_delete && !at_end_of_sequence) {
QAction* ripple_delete_action = menu.addAction("&Ripple Delete");
connect(ripple_delete_action, SIGNAL(triggered(bool)), this, SLOT(right_click_ripple()));
}
menu.addAction("Sequence settings coming soon...");
} else {
QAction* cutAction = menu.addAction("C&ut");
@@ -1588,6 +1656,9 @@ void TimelineWidget::mouseMoveEvent(QMouseEvent *event) {
}
}
}
if (cursor_contains_clip) {
QToolTip::showText(mapToGlobal(event->pos()), "HOVER OVER CLIP");
}
if (found) {
setCursor(Qt::SizeHorCursor);
} else {
@@ -1835,7 +1906,13 @@ void TimelineWidget::redraw_clips() {
int underline_width = qMin(text_rect.width() - 1, clip_painter.fontMetrics().width(clip->name));
clip_painter.drawLine(text_rect.x(), underline_y, text_rect.x() + underline_width, underline_y);
}
clip_painter.drawText(text_rect, 0, clip->name, &text_rect);
QString name = clip->name;
if (clip->speed != 1.0 || clip->reverse) {
name += " (";
if (clip->reverse) name += "-";
name += QString::number(clip->speed*100) + "%)";
}
clip_painter.drawText(text_rect, 0, name, &text_rect);
}
// bottom right gray
+5
View File
@@ -64,11 +64,16 @@ private:
double predicted_new_frame_rate;
int predicted_audio_freq;
int predicted_audio_layout;
// used for "right click ripple"
long rc_ripple_min;
long rc_ripple_max;
signals:
public slots:
private slots:
void right_click_ripple();
void show_context_menu(const QPoint& pos);
void toggle_autoscale();
};