added option to hide sequences

This commit is contained in:
itsmattkc
2019-01-18 00:19:13 +11:00
parent cc7a6a12b2
commit 016a94f656
7 changed files with 85 additions and 27 deletions
+1 -1
View File
@@ -8,6 +8,7 @@
#include "project/clip.h" #include "project/clip.h"
#include "project/undo.h" #include "project/undo.h"
#include "project/media.h" #include "project/media.h"
#include "project/projectfilter.h"
#include "ui/sourcetable.h" #include "ui/sourcetable.h"
#include "ui/viewerwidget.h" #include "ui/viewerwidget.h"
@@ -43,7 +44,6 @@
#include <QMovie> #include <QMovie>
#include <QInputDialog> #include <QInputDialog>
#include <QRegExp> #include <QRegExp>
#include <QSortFilterProxyModel>
#include <QStatusBar> #include <QStatusBar>
#include <QMenu> #include <QMenu>
#include <QMenuBar> #include <QMenuBar>
+4 -2
View File
@@ -127,7 +127,8 @@ SOURCES += \
dialogs/debugdialog.cpp \ dialogs/debugdialog.cpp \
ui/renderthread.cpp \ ui/renderthread.cpp \
ui/renderfunctions.cpp \ ui/renderfunctions.cpp \
ui/viewerwindow.cpp ui/viewerwindow.cpp \
project/projectfilter.cpp
HEADERS += \ HEADERS += \
mainwindow.h \ mainwindow.h \
@@ -222,7 +223,8 @@ HEADERS += \
dialogs/debugdialog.h \ dialogs/debugdialog.h \
ui/renderthread.h \ ui/renderthread.h \
ui/renderfunctions.h \ ui/renderfunctions.h \
ui/viewerwindow.h ui/viewerwindow.h \
project/projectfilter.h
FORMS += FORMS +=
+2 -2
View File
@@ -25,6 +25,7 @@
#include "ui/sourcetable.h" #include "ui/sourcetable.h"
#include "ui/sourceiconview.h" #include "ui/sourceiconview.h"
#include "project/sourcescommon.h" #include "project/sourcescommon.h"
#include "project/projectfilter.h"
#include "debug.h" #include "debug.h"
#include <QApplication> #include <QApplication>
@@ -37,7 +38,6 @@
#include <QMimeData> #include <QMimeData>
#include <QPushButton> #include <QPushButton>
#include <QInputDialog> #include <QInputDialog>
#include <QSortFilterProxyModel>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QSizePolicy> #include <QSizePolicy>
@@ -72,7 +72,7 @@ Project::Project(QWidget *parent) :
sources_common = new SourcesCommon(this); sources_common = new SourcesCommon(this);
sorter = new QSortFilterProxyModel(this); sorter = new ProjectFilter(this);
sorter->setSourceModel(&project_model); sorter->setSourceModel(&project_model);
// optional toolbar // optional toolbar
+2 -2
View File
@@ -18,7 +18,7 @@ class Media;
class QXmlStreamWriter; class QXmlStreamWriter;
class QXmlStreamReader; class QXmlStreamReader;
class QFile; class QFile;
class QSortFilterProxyModel; class ProjectFilter;
class ComboAction; class ComboAction;
class SourceIconView; class SourceIconView;
class QPushButton; class QPushButton;
@@ -69,7 +69,7 @@ public:
SourceIconView* icon_view; SourceIconView* icon_view;
SourcesCommon* sources_common; SourcesCommon* sources_common;
QSortFilterProxyModel* sorter; ProjectFilter* sorter;
QVector<Media*> last_imported_media; QVector<Media*> last_imported_media;
+31
View File
@@ -0,0 +1,31 @@
#include "projectfilter.h"
#include "project/media.h"
#include <QDebug>
ProjectFilter::ProjectFilter(QObject *parent) :
QSortFilterProxyModel(parent),
show_sequences(true)
{}
bool ProjectFilter::get_show_sequences() {
return show_sequences;
}
void ProjectFilter::set_show_sequences(bool b) {
show_sequences = b;
invalidateFilter();
}
bool ProjectFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const {
if (!show_sequences) {
// hide sequences if show_sequences is false
QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
Media* media = static_cast<Media*>(index.internalPointer());
if (media != nullptr && media->get_type() == MEDIA_TYPE_SEQUENCE) {
return false;
}
}
return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
}
+19
View File
@@ -0,0 +1,19 @@
#ifndef PROJECTFILTER_H
#define PROJECTFILTER_H
#include <QSortFilterProxyModel>
class ProjectFilter : public QSortFilterProxyModel {
Q_OBJECT
public:
ProjectFilter(QObject *parent = nullptr);
bool get_show_sequences();
public slots:
void set_show_sequences(bool b);
protected:
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
private:
bool show_sequences;
};
#endif // PROJECTFILTER_H
+26 -20
View File
@@ -7,6 +7,7 @@
#include "panels/project.h" #include "panels/project.h"
#include "project/footage.h" #include "project/footage.h"
#include "panels/viewer.h" #include "panels/viewer.h"
#include "project/projectfilter.h"
#include "io/config.h" #include "io/config.h"
#include "mainwindow.h" #include "mainwindow.h"
@@ -49,10 +50,10 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
selected_items = items; selected_items = items;
QAction* import_action = menu.addAction(tr("Import...")); QAction* import_action = menu.addAction(tr("Import..."));
QObject::connect(import_action, SIGNAL(triggered(bool)), project_parent, SLOT(import_dialog())); QObject::connect(import_action, SIGNAL(triggered(bool)), project_parent, SLOT(import_dialog()));
QMenu* new_menu = menu.addMenu(tr("New")); QMenu* new_menu = menu.addMenu(tr("New"));
mainWindow->make_new_menu(new_menu); mainWindow->make_new_menu(new_menu);
if (items.size() > 0) { if (items.size() > 0) {
@@ -62,20 +63,20 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
// replace footage // replace footage
int type = m->get_type(); int type = m->get_type();
if (type == MEDIA_TYPE_FOOTAGE) { if (type == MEDIA_TYPE_FOOTAGE) {
QAction* replace_action = menu.addAction(tr("Replace/Relink Media")); QAction* replace_action = menu.addAction(tr("Replace/Relink Media"));
QObject::connect(replace_action, SIGNAL(triggered(bool)), project_parent, SLOT(replace_selected_file())); QObject::connect(replace_action, SIGNAL(triggered(bool)), project_parent, SLOT(replace_selected_file()));
#if defined(Q_OS_WIN) #if defined(Q_OS_WIN)
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Explorer")); QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Explorer"));
#elif defined(Q_OS_MAC) #elif defined(Q_OS_MAC)
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Finder")); QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Finder"));
#else #else
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in File Manager")); QAction* reveal_in_explorer = menu.addAction(tr("Reveal in File Manager"));
#endif #endif
QObject::connect(reveal_in_explorer, SIGNAL(triggered(bool)), this, SLOT(reveal_in_browser())); QObject::connect(reveal_in_explorer, SIGNAL(triggered(bool)), this, SLOT(reveal_in_browser()));
} }
if (type != MEDIA_TYPE_FOLDER) { if (type != MEDIA_TYPE_FOLDER) {
QAction* replace_clip_media = menu.addAction(tr("Replace Clips Using This Media")); QAction* replace_clip_media = menu.addAction(tr("Replace Clips Using This Media"));
QObject::connect(replace_clip_media, SIGNAL(triggered(bool)), project_parent, SLOT(replace_clip_media())); QObject::connect(replace_clip_media, SIGNAL(triggered(bool)), project_parent, SLOT(replace_clip_media()));
} }
} }
@@ -93,45 +94,50 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
} }
// create sequence from // create sequence from
QAction* create_seq_from = menu.addAction(tr("Create Sequence With This Media")); QAction* create_seq_from = menu.addAction(tr("Create Sequence With This Media"));
QObject::connect(create_seq_from, SIGNAL(triggered(bool)), this, SLOT(create_seq_from_selected())); QObject::connect(create_seq_from, SIGNAL(triggered(bool)), this, SLOT(create_seq_from_selected()));
// ONLY sequences are selected // ONLY sequences are selected
if (all_sequences) { if (all_sequences) {
// ONLY sequences are selected // ONLY sequences are selected
QAction* duplicate_action = menu.addAction(tr("Duplicate")); QAction* duplicate_action = menu.addAction(tr("Duplicate"));
QObject::connect(duplicate_action, SIGNAL(triggered(bool)), project_parent, SLOT(duplicate_selected())); QObject::connect(duplicate_action, SIGNAL(triggered(bool)), project_parent, SLOT(duplicate_selected()));
} }
// ONLY footage is selected // ONLY footage is selected
if (all_footage) { if (all_footage) {
QAction* delete_footage_from_sequences = menu.addAction(tr("Delete All Clips Using This Media")); QAction* delete_footage_from_sequences = menu.addAction(tr("Delete All Clips Using This Media"));
QObject::connect(delete_footage_from_sequences, SIGNAL(triggered(bool)), project_parent, SLOT(delete_clips_using_selected_media())); QObject::connect(delete_footage_from_sequences, SIGNAL(triggered(bool)), project_parent, SLOT(delete_clips_using_selected_media()));
} }
// delete media // delete media
QAction* delete_action = menu.addAction(tr("Delete")); QAction* delete_action = menu.addAction(tr("Delete"));
QObject::connect(delete_action, SIGNAL(triggered(bool)), project_parent, SLOT(delete_selected_media())); QObject::connect(delete_action, SIGNAL(triggered(bool)), project_parent, SLOT(delete_selected_media()));
if (items.size() == 1) { if (items.size() == 1) {
QAction* properties_action = menu.addAction(tr("Properties...")); QAction* properties_action = menu.addAction(tr("Properties..."));
QObject::connect(properties_action, SIGNAL(triggered(bool)), project_parent, SLOT(open_properties())); QObject::connect(properties_action, SIGNAL(triggered(bool)), project_parent, SLOT(open_properties()));
} }
} }
menu.addSeparator(); menu.addSeparator();
QAction* tree_view_action = menu.addAction(tr("Tree View")); QAction* tree_view_action = menu.addAction(tr("Tree View"));
connect(tree_view_action, SIGNAL(triggered(bool)), project_parent, SLOT(set_tree_view())); connect(tree_view_action, SIGNAL(triggered(bool)), project_parent, SLOT(set_tree_view()));
QAction* icon_view_action = menu.addAction(tr("Icon View")); QAction* icon_view_action = menu.addAction(tr("Icon View"));
connect(icon_view_action, SIGNAL(triggered(bool)), project_parent, SLOT(set_icon_view())); connect(icon_view_action, SIGNAL(triggered(bool)), project_parent, SLOT(set_icon_view()));
QAction* toolbar_action = menu.addAction(tr("Show Toolbar")); QAction* toolbar_action = menu.addAction(tr("Show Toolbar"));
toolbar_action->setCheckable(true); toolbar_action->setCheckable(true);
toolbar_action->setChecked(project_parent->toolbar_widget->isVisible()); toolbar_action->setChecked(project_parent->toolbar_widget->isVisible());
connect(toolbar_action, SIGNAL(triggered(bool)), project_parent->toolbar_widget, SLOT(setVisible(bool))); connect(toolbar_action, SIGNAL(triggered(bool)), project_parent->toolbar_widget, SLOT(setVisible(bool)));
QAction* show_sequences = menu.addAction(tr("Show Sequences"));
show_sequences->setCheckable(true);
show_sequences->setChecked(panel_project->sorter->get_show_sequences());
connect(show_sequences, SIGNAL(triggered(bool)), panel_project->sorter, SLOT(set_show_sequences(bool)));
menu.exec(QCursor::pos()); menu.exec(QCursor::pos());
} }
@@ -183,11 +189,11 @@ void SourcesCommon::dropEvent(QWidget* parent, QDropEvent *event, const QModelIn
&& m->get_type() == MEDIA_TYPE_FOOTAGE && m->get_type() == MEDIA_TYPE_FOOTAGE
&& !QFileInfo(paths.at(0)).isDir() && !QFileInfo(paths.at(0)).isDir()
&& config.drop_on_media_to_replace && config.drop_on_media_to_replace
&& QMessageBox::question( && QMessageBox::question(
parent, parent,
tr("Replace Media"), tr("Replace Media"),
tr("You dropped a file onto '%1'. Would you like to replace it with the dropped file?").arg(m->get_name()), tr("You dropped a file onto '%1'. Would you like to replace it with the dropped file?").arg(m->get_name()),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) {
replace = true; replace = true;
project_parent->replace_media(m, paths.at(0)); project_parent->replace_media(m, paths.at(0));
} }