improved clip media replacing
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user