added option to hide sequences
This commit is contained in:
+1
-1
@@ -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>
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user