removed disable in/out, fixes #426

This commit is contained in:
itsmattkc
2019-02-04 16:10:19 +11:00
parent 53f6d2278f
commit 4ac2f2b5ca
13 changed files with 128 additions and 156 deletions
+1 -1
View File
@@ -63,7 +63,7 @@ ExportDialog::ExportDialog(QWidget *parent) :
rangeCombobox->setCurrentIndex(0);
if (sequence->using_workarea) {
rangeCombobox->setEnabled(true);
if (sequence->enable_workarea) rangeCombobox->setCurrentIndex(1);
rangeCombobox->setCurrentIndex(1);
}
format_strings.resize(FORMAT_SIZE);
+53 -55
View File
@@ -185,34 +185,34 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
int folder = 0;
Media* item = new Media(0);
Footage* f = new Footage();
Footage* f = new Footage();
f->using_inout = false;
f->using_inout = false;
for (int j=0;j<stream.attributes().size();j++) {
const QXmlStreamAttribute& attr = stream.attributes().at(j);
if (attr.name() == "id") {
f->save_id = attr.value().toInt();
f->save_id = attr.value().toInt();
} else if (attr.name() == "folder") {
folder = attr.value().toInt();
} else if (attr.name() == "name") {
f->name = attr.value().toString();
f->name = attr.value().toString();
} else if (attr.name() == "url") {
f->url = attr.value().toString();
f->url = attr.value().toString();
if (!QFileInfo::exists(f->url)) { // if path is not absolute
QString proj_dir_test = proj_dir.absoluteFilePath(f->url);
QString internal_proj_dir_test = internal_proj_dir.absoluteFilePath(f->url);
if (!QFileInfo::exists(f->url)) { // if path is not absolute
QString proj_dir_test = proj_dir.absoluteFilePath(f->url);
QString internal_proj_dir_test = internal_proj_dir.absoluteFilePath(f->url);
if (QFileInfo::exists(proj_dir_test)) { // if path is relative to the project's current dir
f->url = proj_dir_test;
f->url = proj_dir_test;
qInfo() << "Matched" << attr.value().toString() << "relative to project's current directory";
} else if (QFileInfo::exists(internal_proj_dir_test)) { // if path is relative to the last directory the project was saved in
f->url = internal_proj_dir_test;
f->url = internal_proj_dir_test;
qInfo() << "Matched" << attr.value().toString() << "relative to project's internal directory";
} else if (f->url.contains('%')) {
} else if (f->url.contains('%')) {
// hack for image sequences (qt won't be able to find the URL with %, but ffmpeg may)
f->url = internal_proj_dir_test;
f->url = internal_proj_dir_test;
qInfo() << "Guess image sequence" << attr.value().toString() << "path to project's internal directory";
} else {
qInfo() << "Failed to match" << attr.value().toString() << "to file";
@@ -221,41 +221,41 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
qInfo() << "Matched" << attr.value().toString() << "with absolute path";
}
} else if (attr.name() == "duration") {
f->length = attr.value().toLongLong();
f->length = attr.value().toLongLong();
} else if (attr.name() == "using_inout") {
f->using_inout = (attr.value() == "1");
f->using_inout = (attr.value() == "1");
} else if (attr.name() == "in") {
f->in = attr.value().toLong();
f->in = attr.value().toLong();
} else if (attr.name() == "out") {
f->out = attr.value().toLong();
f->out = attr.value().toLong();
} else if (attr.name() == "speed") {
f->speed = attr.value().toDouble();
f->speed = attr.value().toDouble();
} else if (attr.name() == "alphapremul") {
f->alpha_is_premultiplied = (attr.value() == "1");
f->alpha_is_premultiplied = (attr.value() == "1");
} else if (attr.name() == "proxy") {
f->proxy = (attr.value() == "1");
f->proxy = (attr.value() == "1");
} else if (attr.name() == "proxypath") {
f->proxy_path = attr.value().toString();
f->proxy_path = attr.value().toString();
}
}
}
while (!cancelled && !(stream.name() == child_search && stream.isEndElement()) && !stream.atEnd()) {
read_next_start_element(stream);
if (stream.name() == "marker" && stream.isStartElement()) {
Marker m;
for (int j=0;j<stream.attributes().size();j++) {
const QXmlStreamAttribute& attr = stream.attributes().at(j);
if (attr.name() == "frame") {
m.frame = attr.value().toLong();
} else if (attr.name() == "name") {
m.name = attr.value().toString();
}
}
f->markers.append(m);
}
}
while (!cancelled && !(stream.name() == child_search && stream.isEndElement()) && !stream.atEnd()) {
read_next_start_element(stream);
if (stream.name() == "marker" && stream.isStartElement()) {
Marker m;
for (int j=0;j<stream.attributes().size();j++) {
const QXmlStreamAttribute& attr = stream.attributes().at(j);
if (attr.name() == "frame") {
m.frame = attr.value().toLong();
} else if (attr.name() == "name") {
m.name = attr.value().toString();
}
}
f->markers.append(m);
}
}
item->set_footage(f);
item->set_footage(f);
if (folder == 0) {
project_model.appendChild(nullptr, item);
@@ -296,8 +296,6 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
open_seq = s;
} else if (attr.name() == "workarea") {
s->using_workarea = (attr.value() == "1");
} else if (attr.name() == "workareaEnabled") {
s->enable_workarea = (attr.value() == "1");
} else if (attr.name() == "workareaIn") {
s->workarea_in = attr.value().toLong();
} else if (attr.name() == "workareaOut") {
@@ -429,24 +427,24 @@ bool LoadThread::load_worker(QFile& f, QXmlStreamReader& stream, int type) {
}
}
if (cancelled) return false;
} else if (stream.isStartElement()
&& (stream.name() == "effect"
|| stream.name() == "opening"
|| stream.name() == "closing")) {
} else if (stream.isStartElement()
&& (stream.name() == "effect"
|| stream.name() == "opening"
|| stream.name() == "closing")) {
// "opening" and "closing" are backwards compatibility code
load_effect(stream, c);
} else if (stream.name() == "marker" && stream.isStartElement()) {
Marker m;
for (int j=0;j<stream.attributes().size();j++) {
const QXmlStreamAttribute& attr = stream.attributes().at(j);
if (attr.name() == "frame") {
m.frame = attr.value().toLong();
} else if (attr.name() == "name") {
m.name = attr.value().toString();
}
}
c->get_markers().append(m);
}
} else if (stream.name() == "marker" && stream.isStartElement()) {
Marker m;
for (int j=0;j<stream.attributes().size();j++) {
const QXmlStreamAttribute& attr = stream.attributes().at(j);
if (attr.name() == "frame") {
m.frame = attr.value().toLong();
} else if (attr.name() == "name") {
m.name = attr.value().toString();
}
}
c->get_markers().append(m);
}
}
}
if (cancelled) return false;
-9
View File
@@ -268,7 +268,6 @@ void MainWindow::make_new_menu(QMenu *parent) {
void MainWindow::make_inout_menu(QMenu *parent) {
parent->addAction(tr("Set In Point"), this, SLOT(set_in_point()), QKeySequence("I"))->setProperty("id", "setinpoint");
parent->addAction(tr("Set Out Point"), this, SLOT(set_out_point()), QKeySequence("O"))->setProperty("id", "setoutpoint");
parent->addAction(tr("Enable/Disable In/Out Point"), this, SLOT(enable_inout()))->setProperty("id", "enableinout");
parent->addSeparator();
parent->addAction(tr("Reset In Point"), this, SLOT(clear_in()))->setProperty("id", "resetin");
parent->addAction(tr("Reset Out Point"), this, SLOT(clear_out()))->setProperty("id", "resetout");
@@ -1465,14 +1464,6 @@ void MainWindow::ripple_delete_inout()
}
}
void MainWindow::enable_inout() {
if (panel_timeline->focused() || panel_sequence_viewer->is_focused()) {
panel_sequence_viewer->toggle_enable_inout();
} else if (panel_footage_viewer->is_focused()) {
panel_footage_viewer->toggle_enable_inout();
}
}
void MainWindow::set_tsa_default() {
config.show_title_safe_area = true;
config.use_custom_title_safe_ratio = false;
-1
View File
@@ -115,7 +115,6 @@ private slots:
void clear_inout();
void delete_inout();
void ripple_delete_inout();
void enable_inout();
// title safe area functions
void set_tsa_disable();
+12 -13
View File
@@ -970,7 +970,7 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeAttribute("proxy", QString::number(f->proxy));
stream.writeAttribute("proxypath", f->proxy_path);
// save video stream metadata
// save video stream metadata
for (int j=0;j<f->video_tracks.size();j++) {
const FootageStream& ms = f->video_tracks.at(j);
stream.writeStartElement("video");
@@ -979,10 +979,10 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeAttribute("height", QString::number(ms.video_height));
stream.writeAttribute("framerate", QString::number(ms.video_frame_rate, 'f', 10));
stream.writeAttribute("infinite", QString::number(ms.infinite_length));
stream.writeEndElement(); // video
stream.writeEndElement(); // video
}
// save audio stream metadata
// save audio stream metadata
for (int j=0;j<f->audio_tracks.size();j++) {
const FootageStream& ms = f->audio_tracks.at(j);
stream.writeStartElement("audio");
@@ -990,15 +990,15 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeAttribute("channels", QString::number(ms.audio_channels));
stream.writeAttribute("layout", QString::number(ms.audio_layout));
stream.writeAttribute("frequency", QString::number(ms.audio_frequency));
stream.writeEndElement(); // audio
stream.writeEndElement(); // audio
}
// save footage markers
for (int j=0;j<f->markers.size();j++) {
save_marker(stream, f->markers.at(j));
}
// save footage markers
for (int j=0;j<f->markers.size();j++) {
save_marker(stream, f->markers.at(j));
}
stream.writeEndElement(); // footage
stream.writeEndElement(); // footage
media_id++;
} else if (type == MEDIA_TYPE_SEQUENCE) {
Sequence* s = m->to_sequence();
@@ -1019,7 +1019,6 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeAttribute("open", "1");
}
stream.writeAttribute("workarea", QString::number(s->using_workarea));
stream.writeAttribute("workareaEnabled", QString::number(s->enable_workarea));
stream.writeAttribute("workareaIn", QString::number(s->workarea_in));
stream.writeAttribute("workareaOut", QString::number(s->workarea_out));
@@ -1071,8 +1070,8 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
}
// save markers
// only necessary for null media clips, since media has its own markers
if (c->media == nullptr) {
// only necessary for null media clips, since media has its own markers
if (c->media == nullptr) {
for (int k=0;k<c->get_markers().size();k++) {
save_marker(stream, c->get_markers().at(k));
}
@@ -1096,7 +1095,7 @@ void Project::save_folder(QXmlStreamWriter& stream, int type, bool set_ids_only,
stream.writeEndElement(); // clip
}
}
for (int j=0;j<s->markers.size();j++) {
for (int j=0;j<s->markers.size();j++) {
save_marker(stream, s->markers.at(j));
}
stream.writeEndElement();
+26 -26
View File
@@ -143,15 +143,15 @@ void ripple_clips(ComboAction* ca, Sequence *s, long point, long length, const Q
}
void Timeline::toggle_show_all() {
if (sequence != nullptr) {
showing_all = !showing_all;
if (showing_all) {
old_zoom = zoom;
set_zoom_value(double(timeline_area->width() - 200) / double(sequence->getEndFrame()));
} else {
set_zoom_value(old_zoom);
}
}
if (sequence != nullptr) {
showing_all = !showing_all;
if (showing_all) {
old_zoom = zoom;
set_zoom_value(double(timeline_area->width() - 200) / double(sequence->getEndFrame()));
} else {
set_zoom_value(old_zoom);
}
}
}
void Timeline::create_ghosts_from_media(Sequence* seq, long entry_point, QVector<Media*>& media_list) {
@@ -235,7 +235,7 @@ void Timeline::create_ghosts_from_media(Sequence* seq, long entry_point, QVector
case MEDIA_TYPE_SEQUENCE:
g.out = entry_point + sequence_length - default_clip_in;
if (s->using_workarea && s->enable_workarea) {
if (s->using_workarea) {
g.out -= (sequence_length - default_clip_out);
}
@@ -1430,8 +1430,8 @@ bool Timeline::snap_to_timeline(long* l, bool use_playhead, bool use_markers, bo
return true;
} else {
// try to snap to clip markers
for (int j=0;j<c->get_markers().size();j++) {
if (snap_to_point(c->get_markers().at(j).frame + c->timeline_in - c->clip_in, l)) {
for (int j=0;j<c->get_markers().size();j++) {
if (snap_to_point(c->get_markers().at(j).frame + c->timeline_in - c->clip_in, l)) {
return true;
}
}
@@ -1444,7 +1444,7 @@ bool Timeline::snap_to_timeline(long* l, bool use_playhead, bool use_markers, bo
void Timeline::set_marker() {
// determine if any clips are selected, and if so add markers to clips rather than the sequence
QVector<int> clips_selected;
QVector<int> clips_selected;
bool clip_mode = false;
for (int i=0;i<sequence->clips.size();i++) {
@@ -1452,26 +1452,26 @@ void Timeline::set_marker() {
if (c != nullptr
&& is_clip_selected(c, true)) {
// only add markers if the playhead is inside the clip
if (sequence->playhead >= c->timeline_in
&& sequence->playhead <= c->timeline_out) {
clips_selected.append(i);
}
// only add markers if the playhead is inside the clip
if (sequence->playhead >= c->timeline_in
&& sequence->playhead <= c->timeline_out) {
clips_selected.append(i);
}
// we are definitely adding markers to clips though
// we are definitely adding markers to clips though
clip_mode = true;
}
}
// if we've selected clips but none of the clips are within the playhead,
// nothing to do here
if (clip_mode && clips_selected.size() == 0) {
return;
}
// if we've selected clips but none of the clips are within the playhead,
// nothing to do here
if (clip_mode && clips_selected.size() == 0) {
return;
}
// pass off to internal set marker function
set_marker_internal(sequence, clips_selected);
// pass off to internal set marker function
set_marker_internal(sequence, clips_selected);
}
+14 -21
View File
@@ -282,7 +282,7 @@ void Viewer::close_media() {
void Viewer::go_to_in() {
if (seq != nullptr) {
if (seq->using_workarea && seq->enable_workarea) {
if (seq->using_workarea) {
seek(seq->workarea_in);
} else {
go_to_start();
@@ -300,7 +300,7 @@ void Viewer::next_frame() {
void Viewer::go_to_out() {
if (seq != nullptr) {
if (seq->using_workarea && seq->enable_workarea) {
if (seq->using_workarea) {
seek(seq->workarea_out);
} else {
go_to_end();
@@ -363,7 +363,7 @@ void Viewer::play(bool in_to_out) {
uncue_recording();
}
bool seek_to_in = (seq->using_workarea && config.loop);
bool seek_to_in = (seq->using_workarea && (config.loop || playing_in_to_out));
if (!is_recording_cued()
&& (playing_in_to_out
|| seq->playhead >= seq->getEndFrame()
@@ -471,16 +471,16 @@ void Viewer::update_parents(bool reload_fx) {
update_ui(reload_fx);
} else {
update_viewer();
panel_timeline->repaint_timeline();
panel_timeline->repaint_timeline();
}
}
int Viewer::get_playback_speed() {
return playback_speed;
return playback_speed;
}
void Viewer::set_marker() {
set_marker_internal(seq);
set_marker_internal(seq);
}
void Viewer::resizeEvent(QResizeEvent *) {
@@ -518,13 +518,6 @@ void Viewer::clear_inout_point() {
}
}
void Viewer::toggle_enable_inout() {
if (seq != nullptr && seq->using_workarea) {
undo_stack.push(new SetBool(&seq->enable_workarea, !seq->enable_workarea));
update_parents();
}
}
void Viewer::set_in_point() {
headers->set_in_point(seq->playhead);
}
@@ -580,13 +573,13 @@ void Viewer::set_playback_speed(int s) {
}
long Viewer::get_seq_in() {
return ((config.loop || playing_in_to_out) && seq->using_workarea && seq->enable_workarea)
return ((config.loop || playing_in_to_out) && seq->using_workarea)
? seq->workarea_in
: 0;
}
long Viewer::get_seq_out() {
return ((config.loop || playing_in_to_out) && seq->using_workarea && seq->enable_workarea && previous_playhead < seq->workarea_out)
return ((config.loop || playing_in_to_out) && seq->using_workarea && previous_playhead < seq->workarea_out)
? seq->workarea_out
: seq->getEndFrame();
}
@@ -690,16 +683,16 @@ void Viewer::setup_ui() {
void Viewer::set_media(Media* m) {
main_sequence = false;
media = m;
media = m;
clean_created_seq();
clean_created_seq();
if (media != nullptr) {
switch (media->get_type()) {
case MEDIA_TYPE_FOOTAGE:
{
Footage* footage = media->to_footage();
marker_ref = &footage->markers;
marker_ref = &footage->markers;
seq = new Sequence();
created_sequence = true;
@@ -865,9 +858,9 @@ void Viewer::set_sequence(bool main, Sequence *s) {
viewer_container->adjust();
if (!created_sequence) {
marker_ref = &seq->markers;
}
if (!created_sequence) {
marker_ref = &seq->markers;
}
} else {
update_playhead_timecode(0);
update_end_timecode();
+4 -5
View File
@@ -42,7 +42,6 @@ public:
void clear_in();
void clear_out();
void clear_inout_point();
void toggle_enable_inout();
void set_in_point();
void set_out_point();
void set_zoom(bool in);
@@ -73,12 +72,12 @@ public:
ViewerWidget* viewer_widget;
Media* media;
Sequence* seq;
QVector<Marker>* marker_ref;
Sequence* seq;
QVector<Marker>* marker_ref;
void set_marker();
void set_marker();
TimelineHeader* headers;
TimelineHeader* headers;
void resizeEvent(QResizeEvent *event);
+1 -2
View File
@@ -10,7 +10,6 @@
Sequence::Sequence() :
playhead(0),
using_workarea(false),
enable_workarea(true),
workarea_in(0),
workarea_out(0),
wrapper_sequence(false)
@@ -26,7 +25,7 @@ Sequence::~Sequence() {
Sequence* Sequence::copy() {
Sequence* s = new Sequence();
s->name = QCoreApplication::translate("Sequence", "%1 (copy)").arg(name);
s->name = QCoreApplication::translate("Sequence", "%1 (copy)").arg(name);
s->width = width;
s->height = height;
s->frame_rate = frame_rate;
-1
View File
@@ -28,7 +28,6 @@ struct Sequence {
long playhead;
bool using_workarea;
bool enable_workarea;
long workarea_in;
long workarea_out;
-3
View File
@@ -210,7 +210,6 @@ SetTimelineInOutCommand::SetTimelineInOutCommand(Sequence *s, bool enabled, long
void SetTimelineInOutCommand::undo() {
seq->using_workarea = old_enabled;
seq->enable_workarea = old_workarea_enabled;
seq->workarea_in = old_in;
seq->workarea_out = old_out;
@@ -227,11 +226,9 @@ void SetTimelineInOutCommand::undo() {
void SetTimelineInOutCommand::redo() {
old_enabled = seq->using_workarea;
old_workarea_enabled = seq->enable_workarea;
old_in = seq->workarea_in;
old_out = seq->workarea_out;
if (!seq->using_workarea) seq->enable_workarea = true;
seq->using_workarea = new_enabled;
seq->workarea_in = new_in;
seq->workarea_out = new_out;
-2
View File
@@ -174,8 +174,6 @@ public:
private:
Sequence* seq;
bool old_workarea_enabled;
bool old_enabled;
long old_in;
long old_out;
+17 -17
View File
@@ -143,8 +143,8 @@ void TimelineHeader::mousePressEvent(QMouseEvent* event) {
if (event->pos().y() > get_marker_offset()
&& (event->pos().x() < playhead_x-PLAYHEAD_SIZE
|| event->pos().x() > playhead_x+PLAYHEAD_SIZE)) {
for (int i=0;i<viewer->marker_ref->size();i++) {
int marker_pos = getHeaderScreenPointFromFrame(viewer->marker_ref->at(i).frame);
for (int i=0;i<viewer->marker_ref->size();i++) {
int marker_pos = getHeaderScreenPointFromFrame(viewer->marker_ref->at(i).frame);
if (event->pos().x() > marker_pos - MARKER_SIZE && event->pos().x() < marker_pos + MARKER_SIZE) {
bool found = false;
for (int j=0;j<selected_markers.size();j++) {
@@ -172,7 +172,7 @@ void TimelineHeader::mousePressEvent(QMouseEvent* event) {
if (clicked_on_marker) {
selected_marker_original_times.resize(selected_markers.size());
for (int i=0;i<selected_markers.size();i++) {
selected_marker_original_times[i] = viewer->marker_ref->at(selected_markers.at(i)).frame;
selected_marker_original_times[i] = viewer->marker_ref->at(selected_markers.at(i)).frame;
}
drag_start = event->pos().x();
dragging_markers = true;
@@ -225,7 +225,7 @@ void TimelineHeader::mouseMoveEvent(QMouseEvent* event) {
// move markers
for (int i=0;i<selected_markers.size();i++) {
viewer->marker_ref[0][selected_markers.at(i)].frame = selected_marker_original_times.at(i) + frame_movement;
viewer->marker_ref[0][selected_markers.at(i)].frame = selected_marker_original_times.at(i) + frame_movement;
}
update_parents();
@@ -264,7 +264,7 @@ void TimelineHeader::mouseReleaseEvent(QMouseEvent*) {
bool moved = false;
ComboAction* ca = new ComboAction();
for (int i=0;i<selected_markers.size();i++) {
Marker* m = &viewer->marker_ref[0][selected_markers.at(i)];
Marker* m = &viewer->marker_ref[0][selected_markers.at(i)];
if (selected_marker_original_times.at(i) != m->frame) {
ca->append(new MoveMarkerAction(m, selected_marker_original_times.at(i), m->frame));
moved = true;
@@ -305,7 +305,7 @@ double TimelineHeader::get_zoom() {
void TimelineHeader::delete_markers() {
if (selected_markers.size() > 0) {
DeleteMarkerAction* dma = new DeleteMarkerAction(viewer->marker_ref);
DeleteMarkerAction* dma = new DeleteMarkerAction(viewer->marker_ref);
for (int i=0;i<selected_markers.size();i++) {
dma->markers.append(selected_markers.at(i));
}
@@ -397,27 +397,27 @@ void TimelineHeader::paintEvent(QPaintEvent*) {
if (viewer->seq->using_workarea) {
in_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_in : viewer->seq->workarea_in));
int out_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_out : viewer->seq->workarea_out));
p.fillRect(QRect(in_x, 0, out_x-in_x, height()), viewer->seq->enable_workarea ? QColor(0, 192, 255, 128) : QColor(255, 255, 255, 64));
p.fillRect(QRect(in_x, 0, out_x-in_x, height()), QColor(0, 192, 255, 128));
p.setPen(Qt::white);
p.drawLine(in_x, 0, in_x, height());
p.drawLine(out_x, 0, out_x, height());
}
// draw markers
for (int i=0;i<viewer->marker_ref->size();i++) {
const Marker& m = viewer->marker_ref->at(i);
for (int i=0;i<viewer->marker_ref->size();i++) {
const Marker& m = viewer->marker_ref->at(i);
int marker_x = getHeaderScreenPointFromFrame(m.frame);
bool selected = false;
for (int j=0;j<selected_markers.size();j++) {
if (selected_markers.at(j) == i) {
selected = true;
break;
}
}
bool selected = false;
for (int j=0;j<selected_markers.size();j++) {
if (selected_markers.at(j) == i) {
selected = true;
break;
}
}
draw_marker(p, marker_x, yoff, height()-1, selected, false);
draw_marker(p, marker_x, yoff, height()-1, selected, false);
}
// draw playhead triangle