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/undo.h"
#include "project/media.h"
#include "project/projectfilter.h"
#include "ui/sourcetable.h"
#include "ui/viewerwidget.h"
@@ -43,7 +44,6 @@
#include <QMovie>
#include <QInputDialog>
#include <QRegExp>
#include <QSortFilterProxyModel>
#include <QStatusBar>
#include <QMenu>
#include <QMenuBar>
+4 -2
View File
@@ -127,7 +127,8 @@ SOURCES += \
dialogs/debugdialog.cpp \
ui/renderthread.cpp \
ui/renderfunctions.cpp \
ui/viewerwindow.cpp
ui/viewerwindow.cpp \
project/projectfilter.cpp
HEADERS += \
mainwindow.h \
@@ -222,7 +223,8 @@ HEADERS += \
dialogs/debugdialog.h \
ui/renderthread.h \
ui/renderfunctions.h \
ui/viewerwindow.h
ui/viewerwindow.h \
project/projectfilter.h
FORMS +=
+2 -2
View File
@@ -25,6 +25,7 @@
#include "ui/sourcetable.h"
#include "ui/sourceiconview.h"
#include "project/sourcescommon.h"
#include "project/projectfilter.h"
#include "debug.h"
#include <QApplication>
@@ -37,7 +38,6 @@
#include <QMimeData>
#include <QPushButton>
#include <QInputDialog>
#include <QSortFilterProxyModel>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QSizePolicy>
@@ -72,7 +72,7 @@ Project::Project(QWidget *parent) :
sources_common = new SourcesCommon(this);
sorter = new QSortFilterProxyModel(this);
sorter = new ProjectFilter(this);
sorter->setSourceModel(&project_model);
// optional toolbar
+2 -2
View File
@@ -18,7 +18,7 @@ class Media;
class QXmlStreamWriter;
class QXmlStreamReader;
class QFile;
class QSortFilterProxyModel;
class ProjectFilter;
class ComboAction;
class SourceIconView;
class QPushButton;
@@ -69,7 +69,7 @@ public:
SourceIconView* icon_view;
SourcesCommon* sources_common;
QSortFilterProxyModel* sorter;
ProjectFilter* sorter;
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 "project/footage.h"
#include "panels/viewer.h"
#include "project/projectfilter.h"
#include "io/config.h"
#include "mainwindow.h"
@@ -49,10 +50,10 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
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()));
QMenu* new_menu = menu.addMenu(tr("New"));
QMenu* new_menu = menu.addMenu(tr("New"));
mainWindow->make_new_menu(new_menu);
if (items.size() > 0) {
@@ -62,20 +63,20 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
// replace footage
int type = m->get_type();
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()));
#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)
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Finder"));
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in Finder"));
#else
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in File Manager"));
QAction* reveal_in_explorer = menu.addAction(tr("Reveal in File Manager"));
#endif
QObject::connect(reveal_in_explorer, SIGNAL(triggered(bool)), this, SLOT(reveal_in_browser()));
}
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()));
}
}
@@ -93,45 +94,50 @@ void SourcesCommon::show_context_menu(QWidget* parent, const QModelIndexList& it
}
// 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()));
// ONLY sequences are selected
if (all_sequences) {
// 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()));
}
// ONLY footage is selected
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()));
}
// 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()));
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()));
}
}
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()));
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()));
QAction* toolbar_action = menu.addAction(tr("Show Toolbar"));
QAction* toolbar_action = menu.addAction(tr("Show Toolbar"));
toolbar_action->setCheckable(true);
toolbar_action->setChecked(project_parent->toolbar_widget->isVisible());
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());
}
@@ -183,11 +189,11 @@ void SourcesCommon::dropEvent(QWidget* parent, QDropEvent *event, const QModelIn
&& m->get_type() == MEDIA_TYPE_FOOTAGE
&& !QFileInfo(paths.at(0)).isDir()
&& config.drop_on_media_to_replace
&& QMessageBox::question(
parent,
tr("Replace Media"),
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::question(
parent,
tr("Replace Media"),
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) {
replace = true;
project_parent->replace_media(m, paths.at(0));
}