added keyframe button, moved to windowModified
This commit is contained in:
+2
-1
@@ -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)));
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user