improved clip media replacing

This commit is contained in:
itsmattkc
2018-08-05 14:27:12 +10:00
parent 3d2534a299
commit c6571d7f99
5 changed files with 12 additions and 79 deletions
+8
View File
@@ -7,6 +7,7 @@
#include "project/sequence.h"
#include "playback/playback.h"
#include "playback/cacher.h"
#include "io/media.h"
#include <QVBoxLayout>
#include <QTreeWidget>
@@ -89,6 +90,13 @@ void ReplaceClipMediaDialog::replace() {
}
c->media = new_media;
if (get_type_from_tree(new_item) == MEDIA_TYPE_FOOTAGE) {
// TODO: the media streams may be invalid, here we have a BASIC heuristic for getting the right ones that COULD BE BETTER
Media* casted_new_media = static_cast<Media*>(new_media);
c->media_stream = (c->track < 0) ? casted_new_media->video_tracks.at(0)->file_index : casted_new_media->audio_tracks.at(0)->file_index;
}
c->refresh();
changed = true;
}
-69
View File
@@ -16,10 +16,7 @@
#include "mainwindow.h"
#include "io/config.h"
#include "playback/cacher.h"
<<<<<<< HEAD
#include "dialogs/replaceclipmediadialog.h"
=======
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
#include <QFileDialog>
#include <QString>
@@ -114,17 +111,12 @@ void Project::replace_selected_file() {
if (selected_items.size() == 1) {
QTreeWidgetItem* item = selected_items.at(0);
if (get_type_from_tree(item) == MEDIA_TYPE_FOOTAGE) {
<<<<<<< HEAD
replace_media(item, 0);
=======
replace_media(item, "");
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
}
}
}
void Project::replace_media(QTreeWidgetItem* item, QString filename) {
<<<<<<< HEAD
Media* m = get_footage_from_tree(item);
QStringList files;
@@ -177,42 +169,6 @@ void Project::replace_clip_media() {
dialog.exec();
}
}
=======
Media* m = get_media_from_tree(item);
// close any clips currently using this media
QVector<Sequence*> all_sequences = list_all_project_sequences();
for (int i=0;i<all_sequences.size();i++) {
Sequence* s = all_sequences.at(i);
for (int j=0;j<s->clip_count();j++) {
Clip* c = s->get_clip(j);
if (c != NULL && c->media == m && c->open) {
close_clip(c);
c->cacher->wait();
}
}
}
QStringList files;
if (filename.isEmpty()) {
files.append(QFileDialog::getOpenFileName(this, "Replace '" + item->text(0) + "'", "", "All Files (*)"));
} else {
files.append(filename);
}
process_file_list(NULL, files, NULL, item);
for (int i=0;i<all_sequences.size();i++) {
Sequence* s = all_sequences.at(i);
for (int j=0;j<s->clip_count();j++) {
Clip* c = s->get_clip(j);
if (c != NULL && c->media == m) {
c->refresh();
}
}
}
panel_timeline->redraw_all_clips(true);
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
}
void Project::new_sequence(TimelineAction *ta, Sequence *s, bool open, QTreeWidgetItem* parent) {
@@ -520,11 +476,7 @@ void Project::process_file_list(bool recursive, QStringList& files, QTreeWidgetI
if (replace != NULL) {
item = replace;
<<<<<<< HEAD
m = get_footage_from_tree(replace);
=======
m = get_media_from_tree(replace);
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
m->reset();
} else {
item = new_item();
@@ -532,11 +484,7 @@ void Project::process_file_list(bool recursive, QStringList& files, QTreeWidgetI
}
import_file(item, m, file, files.at(i));
<<<<<<< HEAD
set_footage_of_tree(item, m);
=======
set_media_of_tree(item, m);
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
if (recursive) {
parent->addChild(item);
@@ -614,20 +562,7 @@ int get_type_from_tree(QTreeWidgetItem* item) {
}
void Project::delete_media(QTreeWidgetItem* item) {
<<<<<<< HEAD
delete get_media_from_tree(item);
=======
int type = get_type_from_tree(item);
switch (type) {
case MEDIA_TYPE_FOOTAGE:
delete get_media_from_tree(item);
break;
case MEDIA_TYPE_SEQUENCE:
Sequence* s = get_sequence_from_tree(item);
delete s;
break;
}
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
}
void Project::delete_clips_using_selected_media() {
@@ -641,11 +576,7 @@ void Project::delete_clips_using_selected_media() {
if (c != NULL) {
QList<QTreeWidgetItem*> items = source_table->selectedItems();
for (int j=0;j<items.size();j++) {
<<<<<<< HEAD
Media* m = get_footage_from_tree(items.at(j));
=======
Media* m = get_media_from_tree(items.at(j));
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
if (c->media == m) {
ta->delete_clip(sequence, i);
deleted = true;
-3
View File
@@ -77,10 +77,7 @@ public slots:
void duplicate_selected();
void delete_clips_using_selected_media();
void replace_selected_file();
<<<<<<< HEAD
void replace_clip_media();
=======
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
private:
Ui::Project *ui;
QTreeWidgetItem* new_item();
+4 -1
View File
@@ -44,7 +44,10 @@ double LabelSlider::value() {
void LabelSlider::set_default_value(double v) {
default_value = v;
if (!set) set_value(v);
if (!set) {
set_value(v);
set = false;
}
}
void LabelSlider::set_minimum_value(double v) {
-6
View File
@@ -36,16 +36,10 @@ void SourceTable::show_context_menu(const QPoint& pos) {
} else {
if (selectedItems().size() == 1) {
// replace footage
<<<<<<< HEAD
int type = get_type_from_tree(selectedItems().at(0));
if (type == MEDIA_TYPE_FOOTAGE) {
QAction* replace_action = menu.addAction("Replace/Relink Media");
connect(replace_action, SIGNAL(triggered(bool)), panel_project, SLOT(replace_selected_file()));
=======
if (get_type_from_tree(selectedItems().at(0)) == MEDIA_TYPE_FOOTAGE) {
QAction* replace_action = menu.addAction("Replace/Relink Media");
connect(replace_action, SIGNAL(triggered(bool)), panel_project, SLOT(replace_media()));
>>>>>>> b8b99901d8f71ebc1583cb9b7c49e26d38e01ec9
}
if (type != MEDIA_TYPE_FOLDER) {
QAction* replace_clip_media = menu.addAction("Replace Clips Using This Media");