From 15a67bc12af044f109270ba02ac0e8fcdc2d1e67 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Tue, 26 Jul 2022 11:39:35 -0700 Subject: [PATCH] project: auto-select imported files --- app/core.cpp | 2 ++ app/node/project/folder/folder.cpp | 15 ++++++++++++++ app/node/project/folder/folder.h | 2 ++ app/panel/project/project.h | 4 ++-- .../projectexplorer/projectexplorer.cpp | 6 ++++-- app/widget/projectexplorer/projectexplorer.h | 2 +- app/window/mainwindow/mainwindow.cpp | 20 +++++++++++++++++++ app/window/mainwindow/mainwindow.h | 4 ++++ 8 files changed, 50 insertions(+), 5 deletions(-) diff --git a/app/core.cpp b/app/core.cpp index c9b701ead..d6989319a 100644 --- a/app/core.cpp +++ b/app/core.cpp @@ -586,6 +586,8 @@ void Core::ImportTaskComplete(Task* task) } undo_stack_.pushIfHasChildren(command); + + main_window_->SelectFootage(import_task->GetImportedFootage()); } bool Core::ConfirmImageSequence(const QString& filename) diff --git a/app/node/project/folder/folder.cpp b/app/node/project/folder/folder.cpp index 3f8ffe700..4bcd7cabc 100644 --- a/app/node/project/folder/folder.cpp +++ b/app/node/project/folder/folder.cpp @@ -73,6 +73,21 @@ bool Folder::ChildExistsWithName(const QString &s) const return ChildExistsWithNameInternal(this, s); } +bool Folder::HasChildRecursive(Node *child) const +{ + for (Node *i : item_children_) { + if (i == child) { + return true; + } else if (Folder *f = dynamic_cast(i)) { + if (f->HasChildRecursive(child)) { + return true; + } + } + } + + return false; +} + int Folder::index_of_child_in_array(Node *item) const { int index_of_item = item_children_.indexOf(item); diff --git a/app/node/project/folder/folder.h b/app/node/project/folder/folder.h index 7274960f1..22d25f110 100644 --- a/app/node/project/folder/folder.h +++ b/app/node/project/folder/folder.h @@ -65,6 +65,8 @@ public: bool ChildExistsWithName(const QString& s) const; + bool HasChildRecursive(Node *child) const; + int item_child_count() const { return item_children_.size(); diff --git a/app/panel/project/project.h b/app/panel/project/project.h index 39f6299ee..d4918b7b3 100644 --- a/app/panel/project/project.h +++ b/app/panel/project/project.h @@ -52,9 +52,9 @@ public: ProjectViewModel* model() const; - bool SelectItem(Node *n) + bool SelectItem(Node *n, bool deselect_all_first = true) { - return explorer_->SelectItem(n); + return explorer_->SelectItem(n, deselect_all_first); } virtual void SelectAll() override; diff --git a/app/widget/projectexplorer/projectexplorer.cpp b/app/widget/projectexplorer/projectexplorer.cpp index 05c2b5e38..1a3cc36a4 100644 --- a/app/widget/projectexplorer/projectexplorer.cpp +++ b/app/widget/projectexplorer/projectexplorer.cpp @@ -653,9 +653,11 @@ void ProjectExplorer::DeleteSelected() } } -bool ProjectExplorer::SelectItem(Node *n) +bool ProjectExplorer::SelectItem(Node *n, bool deselect_all_first) { - DeselectAll(); + if (deselect_all_first) { + DeselectAll(); + } QModelIndex index = model_.CreateIndexFromItem(n); diff --git a/app/widget/projectexplorer/projectexplorer.h b/app/widget/projectexplorer/projectexplorer.h index 086c2eab3..d69f1b8e3 100644 --- a/app/widget/projectexplorer/projectexplorer.h +++ b/app/widget/projectexplorer/projectexplorer.h @@ -85,7 +85,7 @@ public: void DeleteSelected(); - bool SelectItem(Node *n); + bool SelectItem(Node *n, bool deselect_all_first = true); public slots: void set_view_type(ProjectToolbar::ViewType type); diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index e7f017a69..39d943eea 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -410,6 +410,16 @@ void MainWindow::SetApplicationProgressValue(int value) #endif } +void MainWindow::SelectFootage(const QVector &e) +{ + for (ProjectPanel *p : project_panels_) { + SelectFootageForProjectPanel(e, p); + } + for (ProjectPanel *p : folder_panels_) { + SelectFootageForProjectPanel(e, p); + } +} + void MainWindow::closeEvent(QCloseEvent *e) { // Try to close all projects (this will return false if the user chooses not to close) @@ -759,6 +769,16 @@ void MainWindow::UpdateNodePanelContextFromTimelinePanel(TimelinePanel *panel) param_panel_->SetContexts(context); } +void MainWindow::SelectFootageForProjectPanel(const QVector &e, ProjectPanel *p) +{ + p->DeselectAll(); + for (Footage *f : e) { + if (p->get_root()->HasChildRecursive(f)) { + p->SelectItem(f, false); + } + } +} + void MainWindow::FocusedPanelChanged(PanelWidget *panel) { // Update audio monitor panel diff --git a/app/window/mainwindow/mainwindow.h b/app/window/mainwindow/mainwindow.h index 20498b684..1f6504c6f 100644 --- a/app/window/mainwindow/mainwindow.h +++ b/app/window/mainwindow/mainwindow.h @@ -92,6 +92,8 @@ public: */ void SetApplicationProgressValue(int value); + void SelectFootage(const QVector &e); + public slots: void ProjectOpen(Project *p); @@ -142,6 +144,8 @@ private: void UpdateNodePanelContextFromTimelinePanel(TimelinePanel *panel); + void SelectFootageForProjectPanel(const QVector &e, ProjectPanel *p); + QByteArray premaximized_state_; // Standard panels