diff --git a/mainwindow.cpp b/mainwindow.cpp
index 04f1f812a..18bbe5dee 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -90,6 +90,7 @@ MainWindow::MainWindow(QWidget *parent) :
connect(ui->menuWindow, SIGNAL(aboutToShow()), this, SLOT(windowMenu_About_To_Be_Shown()));
connect(ui->menu_View, SIGNAL(aboutToShow()), this, SLOT(viewMenu_About_To_Be_Shown()));
+ connect(ui->menu_Tools, SIGNAL(aboutToShow()), this, SLOT(toolMenu_About_To_Be_Shown()));
QString data_dir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
if (!data_dir.isEmpty()) {
@@ -434,11 +435,6 @@ void MainWindow::on_actionGo_to_Next_Cut_triggered()
}
}
-void MainWindow::on_actionEdit_Tool_Also_Seeks_triggered(bool checked)
-{
- panel_timeline->edit_tool_also_seeks = checked;
-}
-
void MainWindow::on_actionPreferences_triggered()
{
PreferencesDialog pd(this);
@@ -495,3 +491,16 @@ void MainWindow::on_actionNon_Drop_Frame_triggered()
panel_viewer->update_end_timecode();
}
}
+
+void MainWindow::toolMenu_About_To_Be_Shown() {
+ ui->actionEdit_Tool_Also_Seeks->setChecked(panel_timeline->edit_tool_also_seeks);
+ ui->actionEdit_Tool_Selects_Links->setChecked(panel_timeline->edit_tool_selects_links);
+}
+
+void MainWindow::on_actionEdit_Tool_Selects_Links_triggered() {
+ panel_timeline->edit_tool_selects_links = !panel_timeline->edit_tool_selects_links;
+}
+
+void MainWindow::on_actionEdit_Tool_Also_Seeks_triggered() {
+ panel_timeline->edit_tool_also_seeks = !panel_timeline->edit_tool_also_seeks;
+}
diff --git a/mainwindow.h b/mainwindow.h
index ba01fdc2c..2be47d5ca 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -107,8 +107,6 @@ private slots:
void autorecover_interval();
- void on_actionEdit_Tool_Also_Seeks_triggered(bool checked);
-
void on_actionPreferences_triggered();
void on_actionIncrease_Track_Height_triggered();
@@ -125,6 +123,12 @@ private slots:
void viewMenu_About_To_Be_Shown();
+ void on_actionEdit_Tool_Selects_Links_triggered();
+
+ void on_actionEdit_Tool_Also_Seeks_triggered();
+
+ void toolMenu_About_To_Be_Shown();
+
private:
Ui::MainWindow *ui;
void setup_layout();
diff --git a/mainwindow.ui b/mainwindow.ui
index f8eb3c884..fa4015445 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -126,6 +126,7 @@
+
@@ -520,6 +521,14 @@
Non-Drop Frame
+
+
+ true
+
+
+ Edit Tool Selects Links
+
+
diff --git a/olive.pro.user b/olive.pro.user
index 0b8a18e47..5c7c80e42 100644
--- a/olive.pro.user
+++ b/olive.pro.user
@@ -1,6 +1,6 @@
-
+
EnvironmentId
diff --git a/panels/timeline.cpp b/panels/timeline.cpp
index e30772143..4ea3b9005 100644
--- a/panels/timeline.cpp
+++ b/panels/timeline.cpp
@@ -32,6 +32,7 @@ Timeline::Timeline(QWidget *parent) :
snapped = false;
rect_select_init = false;
rect_select_proc = false;
+ edit_tool_selects_links = false;
edit_tool_also_seeks = false;
snapping = true;
last_frame = 0;
diff --git a/panels/timeline.h b/panels/timeline.h
index 94d3915a2..d1e1eed2a 100644
--- a/panels/timeline.h
+++ b/panels/timeline.h
@@ -101,6 +101,7 @@ public:
QTimer playback_updater;
// shared information
+ bool edit_tool_selects_links;
bool edit_tool_also_seeks;
int tool;
long cursor_frame;
diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp
index 4ca236453..95b6ee1a7 100644
--- a/ui/timelinewidget.cpp
+++ b/ui/timelinewidget.cpp
@@ -707,6 +707,38 @@ void TimelineWidget::mouseMoveEvent(QMouseEvent *event) {
s.in = qMin(in, out);
s.out = qMax(in, out);
}
+
+ // select linked clips too
+ if (panel_timeline->edit_tool_selects_links) {
+ for (int j=0;jclip_count();j++) {
+ Clip* c = sequence->get_clip(j);
+ for (int i=0;iselections.size();i++) {
+ const Selection& s = panel_timeline->selections.at(i);
+ if (c->track == s.track &&
+ !(c->timeline_in < s.in && c->timeline_out < s.in) &&
+ !(c->timeline_in > s.out && c->timeline_out > s.out)) {
+ for (int k=0;klinked.size();k++) {
+ Clip* link = sequence->get_clip(c->linked.at(k));
+ bool found = false;
+ for (int l=0;lselections.size();l++) {
+ const Selection& test_sel = panel_timeline->selections.at(l);
+ if (test_sel.track == link->track &&
+ test_sel.in == s.in &&
+ test_sel.out == s.out) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ Selection link_sel = {s.in, s.out, link->track};
+ panel_timeline->selections.append(link_sel);
+ }
+ }
+ }
+ }
+ }
+ }
+
if (panel_timeline->edit_tool_also_seeks) {
panel_timeline->seek(qMin(panel_timeline->drag_frame_start, panel_timeline->cursor_frame));
} else {