don't use shared ptr on projects

Really unnecessary
This commit is contained in:
itsmattkc
2020-11-27 14:24:02 +11:00
parent b178dfa06e
commit f8ceefff6c
17 changed files with 86 additions and 116 deletions
+39 -48
View File
@@ -105,7 +105,6 @@ void Core::DeclareTypesForQt()
qRegisterMetaType<Decoder::RetrieveState>();
qRegisterMetaType<olive::TimeRange>();
qRegisterMetaType<Color>();
qRegisterMetaType<olive::ProjectPtr>();
qRegisterMetaType<olive::AudioVisualWaveform>();
qRegisterMetaType<olive::SampleJob>();
qRegisterMetaType<olive::ShaderJob>();
@@ -263,14 +262,14 @@ void Core::ClearOpenRecentList()
void Core::CreateNewProject()
{
// If we already have an empty/new project, switch to it
foreach (ProjectPtr already_open, open_projects_) {
foreach (Project* already_open, open_projects_) {
if (already_open->is_new()) {
AddOpenProject(already_open);
return;
}
}
AddOpenProject(std::make_shared<Project>());
AddOpenProject(new Project());
}
const bool &Core::snapping() const
@@ -283,17 +282,6 @@ const QStringList &Core::GetRecentProjects() const
return recent_projects_;
}
ProjectPtr Core::GetSharedPtrFromProject(Project *project) const
{
foreach (ProjectPtr p, open_projects_) {
if (p.get() == project) {
return p;
}
}
return nullptr;
}
void Core::SetTool(const Tool::Item &tool)
{
tool_ = tool;
@@ -348,10 +336,10 @@ void Core::DialogPreferencesShow()
void Core::DialogProjectPropertiesShow()
{
ProjectPtr proj = GetActiveProject();
Project* proj = GetActiveProject();
if (proj) {
ProjectPropertiesDialog ppd(proj.get(), main_window_);
ProjectPropertiesDialog ppd(proj, main_window_);
ppd.exec();
} else {
QMessageBox::critical(main_window_,
@@ -407,7 +395,7 @@ void Core::CreateNewFolder()
void Core::CreateNewSequence()
{
ProjectPtr active_project = GetActiveProject();
Project* active_project = GetActiveProject();
if (!active_project) {
QMessageBox::critical(main_window_, tr("Failed to create new sequence"), tr("Failed to find active project"));
@@ -415,7 +403,7 @@ void Core::CreateNewSequence()
}
// Create new sequence
SequencePtr new_sequence = CreateNewSequenceForProject(active_project.get());
SequencePtr new_sequence = CreateNewSequenceForProject(active_project);
// Set all defaults for the sequence
new_sequence->set_default_parameters();
@@ -440,13 +428,13 @@ void Core::CreateNewSequence()
}
}
void Core::AddOpenProject(ProjectPtr p)
void Core::AddOpenProject(Project* p)
{
// Ensure project is not open at the moment
foreach (ProjectPtr already_open, open_projects_) {
foreach (Project* already_open, open_projects_) {
if (already_open == p) {
// Signal UI to switch to this project
emit ProjectOpened(p.get());
emit ProjectOpened(p);
return;
}
}
@@ -456,24 +444,26 @@ void Core::AddOpenProject(ProjectPtr p)
CloseProject(open_projects_.last(), false);
}
connect(p.get(), &Project::ModifiedChanged, this, &Core::ProjectWasModified);
connect(p, &Project::ModifiedChanged, this, &Core::ProjectWasModified);
open_projects_.append(p);
PushRecentlyOpenedProject(p->filename());
emit ProjectOpened(p.get());
emit ProjectOpened(p);
}
void Core::AddOpenProjectFromTask(Task *task)
{
ProjectLoadBaseTask* load_task = static_cast<ProjectLoadBaseTask*>(task);
ProjectPtr project = load_task->GetLoadedProject();
Project* project = load_task->GetLoadedProject();
MainWindowLayoutInfo layout = load_task->GetLoadedLayout();
if (ValidateFootageInLoadedProject(project, load_task->GetFilenameProjectWasSavedAs())) {
AddOpenProject(project);
main_window_->LoadLayout(layout);
} else {
delete project;
}
}
@@ -516,7 +506,7 @@ void Core::ProjectWasModified(bool e)
} else {
// If we just set this project to "not modified", see if all projects are not modified in which case we can hide
// the modified flag
foreach (ProjectPtr open, open_projects_) {
foreach (Project* open, open_projects_) {
if (open->is_modified()) {
main_window_->setWindowModified(true);
return;
@@ -546,7 +536,7 @@ bool Core::StartHeadlessExport()
CLITaskDialog task_dialog(&plm);
if (task_dialog.Run()) {
ProjectPtr p = plm.GetLoadedProject();
std::unique_ptr<Project> p = std::unique_ptr<Project>(plm.GetLoadedProject());
QList<ItemPtr> items = p->get_items_of_type(Item::kSequence);
// Check if this project contains sequences
@@ -696,7 +686,7 @@ void Core::StartGUI(bool full_screen)
}
}
void Core::SaveProjectInternal(ProjectPtr project)
void Core::SaveProjectInternal(Project* project)
{
// Create save manager
Task* psm;
@@ -754,7 +744,7 @@ ViewerOutput *Core::GetSequenceToExport()
void Core::SaveAutorecovery()
{
foreach (ProjectPtr p, open_projects_) {
foreach (Project* p, open_projects_) {
if (!p->has_autorecovery_been_saved()) {
// FIXME: SAVE AN AUTORECOVERY PROJECT
p->set_autorecovery_saved(true);
@@ -764,19 +754,19 @@ void Core::SaveAutorecovery()
void Core::ProjectSaveSucceeded(Task* task)
{
ProjectPtr p = static_cast<ProjectSaveTask*>(task)->GetProject();
Project* p = static_cast<ProjectSaveTask*>(task)->GetProject();
PushRecentlyOpenedProject(p->filename());
p->set_modified(false);
}
ProjectPtr Core::GetActiveProject() const
Project* Core::GetActiveProject() const
{
ProjectPanel* active_project_panel = PanelManager::instance()->MostRecentlyFocused<ProjectPanel>();
if (active_project_panel && active_project_panel->project()) {
return GetSharedPtrFromProject(active_project_panel->project());
return active_project_panel->project();
}
return nullptr;
@@ -834,7 +824,7 @@ QString Core::PasteStringFromClipboard()
bool Core::SaveActiveProject()
{
ProjectPtr active_project = GetActiveProject();
Project* active_project = GetActiveProject();
if (active_project) {
return SaveProject(active_project);
@@ -845,7 +835,7 @@ bool Core::SaveActiveProject()
bool Core::SaveActiveProjectAs()
{
ProjectPtr active_project = GetActiveProject();
Project* active_project = GetActiveProject();
if (active_project) {
return SaveProjectAs(active_project);
@@ -856,7 +846,7 @@ bool Core::SaveActiveProjectAs()
bool Core::SaveAllProjects()
{
foreach (ProjectPtr p, open_projects_) {
foreach (Project* p, open_projects_) {
if (!SaveProject(p)) {
return false;
}
@@ -872,10 +862,10 @@ bool Core::CloseActiveProject()
bool Core::CloseAllExceptActiveProject()
{
ProjectPtr active_proj = GetActiveProject();
QList<ProjectPtr> copy = open_projects_;
Project* active_proj = GetActiveProject();
QList<Project*> copy = open_projects_;
foreach (ProjectPtr p, copy) {
foreach (Project* p, copy) {
if (p != active_proj) {
if (!CloseProject(p, true)) {
return false;
@@ -934,7 +924,7 @@ void Core::SetStartupLocale()
}
}
bool Core::SaveProject(ProjectPtr p)
bool Core::SaveProject(Project* p)
{
if (p->filename().isEmpty()) {
return SaveProjectAs(p);
@@ -945,7 +935,7 @@ bool Core::SaveProject(ProjectPtr p)
}
}
bool Core::SaveProjectAs(ProjectPtr p)
bool Core::SaveProjectAs(Project* p)
{
QFileDialog fd(main_window_, tr("Save Project As"));
@@ -992,7 +982,7 @@ void Core::PushRecentlyOpenedProject(const QString& s)
void Core::OpenProjectInternal(const QString &filename)
{
// See if this project is open already
foreach (ProjectPtr p, open_projects_) {
foreach (Project* p, open_projects_) {
if (p->filename() == filename) {
// This project is already open
AddOpenProject(p);
@@ -1128,13 +1118,13 @@ void Core::OpenProjectFromRecentList(int index)
}
}
bool Core::CloseProject(ProjectPtr p, bool auto_open_new)
bool Core::CloseProject(Project *p, bool auto_open_new)
{
CloseProjectBehavior b = kCloseProjectOnlyOne;
return CloseProject(p, auto_open_new, b);
}
bool Core::CloseProject(ProjectPtr p, bool auto_open_new, CloseProjectBehavior &confirm_behavior)
bool Core::CloseProject(Project* p, bool auto_open_new, CloseProjectBehavior &confirm_behavior)
{
for (int i=0;i<open_projects_.size();i++) {
if (open_projects_.at(i) == p) {
@@ -1202,9 +1192,10 @@ bool Core::CloseProject(ProjectPtr p, bool auto_open_new, CloseProjectBehavior &
// For safety, the undo stack is cleared so no commands try to affect a freed project
undo_stack_.clear();
disconnect(p.get(), &Project::ModifiedChanged, this, &Core::ProjectWasModified);
emit ProjectClosed(p.get());
disconnect(p, &Project::ModifiedChanged, this, &Core::ProjectWasModified);
emit ProjectClosed(p);
open_projects_.removeAt(i);
delete p;
break;
}
}
@@ -1219,12 +1210,12 @@ bool Core::CloseProject(ProjectPtr p, bool auto_open_new, CloseProjectBehavior &
bool Core::CloseAllProjects(bool auto_open_new)
{
QList<ProjectPtr> copy = open_projects_;
QList<Project*> copy = open_projects_;
// See how many projects are modified so we can set "behavior" correctly
// (i.e. whether to show "Yes/No To All" buttons or not)
int modified_count = 0;
foreach (ProjectPtr p, copy) {
foreach (Project* p, copy) {
if (p->is_modified()) {
modified_count++;
}
@@ -1238,7 +1229,7 @@ bool Core::CloseAllProjects(bool auto_open_new)
behavior = kCloseProjectOnlyOne;
}
foreach (ProjectPtr p, copy) {
foreach (Project* p, copy) {
// If this is the only remaining project and the user hasn't chose "yes/no to all", hide those buttons
if (modified_count == 1 && behavior == kCloseProjectAsk) {
behavior = kCloseProjectOnlyOne;
@@ -1288,7 +1279,7 @@ void Core::CacheActiveSequence(bool in_out_only)
}
}
bool Core::ValidateFootageInLoadedProject(ProjectPtr project, const QString& project_saved_url)
bool Core::ValidateFootageInLoadedProject(Project* project, const QString& project_saved_url)
{
QList<FootagePtr> footage_we_couldnt_validate;
+13 -18
View File
@@ -197,11 +197,6 @@ public:
*/
const QStringList& GetRecentProjects() const;
/**
* @brief Convenience function to retrieve a Project's shared pointer
*/
ProjectPtr GetSharedPtrFromProject(Project* project) const;
/**
* @brief Get the currently active project
*
@@ -212,7 +207,7 @@ public:
*
* The active Project file, or nullptr if the heuristic couldn't find one.
*/
ProjectPtr GetActiveProject() const;
Project* GetActiveProject() const;
ProjectViewModel* GetActiveProjectModel() const;
Folder* GetSelectedFolderInActiveProject() const;
@@ -268,8 +263,8 @@ public:
/**
* @brief Closes a project
*/
bool CloseProject(ProjectPtr p, bool auto_open_new, CloseProjectBehavior& confirm_behavior);
bool CloseProject(ProjectPtr p, bool auto_open_new);
bool CloseProject(Project* p, bool auto_open_new, CloseProjectBehavior& confirm_behavior);
bool CloseProject(Project* p, bool auto_open_new);
/**
* @brief Closes all open projects
@@ -284,13 +279,18 @@ public:
/**
* @brief Check each footage object for whether it still exists or has changed
*/
bool ValidateFootageInLoadedProject(ProjectPtr project, const QString &project_saved_url);
bool ValidateFootageInLoadedProject(Project* project, const QString &project_saved_url);
/**
* @brief Changes the current language
*/
bool SetLanguage(const QString& locale);
/**
* @brief Saves a specific project
*/
bool SaveProject(Project *p);
static const uint kProjectVersion;
public slots:
@@ -454,15 +454,10 @@ private:
*/
void SetStartupLocale();
/**
* @brief Saves a specific project
*/
bool SaveProject(ProjectPtr p);
/**
* @brief Performs a "save as" on a specific project
*/
bool SaveProjectAs(ProjectPtr p);
bool SaveProjectAs(Project *p);
/**
* @brief Adds a filename to the top of the recently opened projects list (or moves it if it already exists)
@@ -488,7 +483,7 @@ private:
/**
* @brief Internal function for saving a project to a file
*/
void SaveProjectInternal(ProjectPtr project);
void SaveProjectInternal(Project *project);
/**
* @brief Retrieves the currently most active sequence for exporting
@@ -503,7 +498,7 @@ private:
/**
* @brief List of currently open projects
*/
QList<ProjectPtr> open_projects_;
QList<Project*> open_projects_;
/**
* @brief Currently active tool
@@ -563,7 +558,7 @@ private slots:
/**
* @brief Adds a project to the "open projects" list
*/
void AddOpenProject(olive::ProjectPtr p);
void AddOpenProject(olive::Project* p);
void AddOpenProjectFromTask(Task* task);
+6 -3
View File
@@ -51,9 +51,7 @@ ProjectPanel::ProjectPanel(QWidget *parent) :
// Make toolbar connections
connect(toolbar, &ProjectToolbar::NewClicked, this, &ProjectPanel::ShowNewMenu);
connect(toolbar, &ProjectToolbar::OpenClicked, Core::instance(), &Core::OpenProject);
connect(toolbar, &ProjectToolbar::SaveClicked, Core::instance(), &Core::SaveActiveProject);
connect(toolbar, &ProjectToolbar::UndoClicked, Core::instance()->undo_stack(), &QUndoStack::undo);
connect(toolbar, &ProjectToolbar::RedoClicked, Core::instance()->undo_stack(), &QUndoStack::redo);
connect(toolbar, &ProjectToolbar::SaveClicked, this, &ProjectPanel::SaveConnectedProject);
// Set up main explorer object
explorer_ = new ProjectExplorer(this);
@@ -229,6 +227,11 @@ void ProjectPanel::UpdateSubtitle()
}
}
void ProjectPanel::SaveConnectedProject()
{
Core::instance()->SaveProject(this->project());
}
QList<Footage *> ProjectPanel::GetSelectedFootage() const
{
QList<Item*> items = SelectedItems();
+2 -2
View File
@@ -78,10 +78,10 @@ private slots:
void UpdateSubtitle();
void SaveConnectedProject();
};
}
Q_DECLARE_METATYPE(olive::ProjectPtr)
#endif // PROJECT_PANEL_H
-2
View File
@@ -103,8 +103,6 @@ private slots:
};
using ProjectPtr = std::shared_ptr<Project>;
}
#endif // PROJECT_H
+1 -1
View File
@@ -60,7 +60,7 @@ bool ProjectLoadTask::Run()
} else if (reader.name() == QStringLiteral("url")) {
project_saved_url_ = reader.readElementText();
} else if (reader.name() == QStringLiteral("project")) {
project_ = std::make_shared<Project>();
project_ = new Project();
project_->set_filename(GetFilename());
+2 -2
View File
@@ -32,7 +32,7 @@ class ProjectLoadBaseTask : public Task
public:
ProjectLoadBaseTask(const QString& filename);
ProjectPtr GetLoadedProject() const
Project* GetLoadedProject() const
{
return project_;
}
@@ -58,7 +58,7 @@ public:
}
protected:
ProjectPtr project_;
Project* project_;
MainWindowLayoutInfo layout_info_;
+2 -2
View File
@@ -53,7 +53,7 @@ bool LoadOTIOTask::Run()
return false;
}
project_ = std::make_shared<Project>();
project_ = new Project();
project_->set_filename(GetFilename());
std::vector<OTIO::Timeline*> timelines;
@@ -165,7 +165,7 @@ bool LoadOTIOTask::Run()
if (imported_footage.contains(footage_url)) {
probed_item = imported_footage.value(footage_url);
} else {
probed_item = Decoder::Probe(project_.get(), footage_url, &IsCancelled());
probed_item = Decoder::Probe(project_, footage_url, &IsCancelled());
imported_footage.insert(footage_url, probed_item);
project_->root()->add_child(probed_item);
}
+1 -1
View File
@@ -29,7 +29,7 @@
namespace olive {
ProjectSaveTask::ProjectSaveTask(ProjectPtr project) :
ProjectSaveTask::ProjectSaveTask(Project *project) :
project_(project)
{
SetTitle(tr("Saving '%1'").arg(project->filename()));
+3 -3
View File
@@ -30,9 +30,9 @@ class ProjectSaveTask : public Task
{
Q_OBJECT
public:
ProjectSaveTask(ProjectPtr project);
ProjectSaveTask(Project* project);
ProjectPtr GetProject() const
Project* GetProject() const
{
return project_;
}
@@ -41,7 +41,7 @@ protected:
virtual bool Run() override;
private:
ProjectPtr project_;
Project* project_;
};
+1 -1
View File
@@ -31,7 +31,7 @@
namespace olive {
SaveOTIOTask::SaveOTIOTask(ProjectPtr project) :
SaveOTIOTask::SaveOTIOTask(Project *project) :
project_(project)
{
SetTitle(tr("Exporting project to OpenTimelineIO"));
+2 -2
View File
@@ -33,7 +33,7 @@ class SaveOTIOTask : public Task
{
Q_OBJECT
public:
SaveOTIOTask(ProjectPtr project);
SaveOTIOTask(Project* project);
protected:
virtual bool Run() override;
@@ -45,7 +45,7 @@ private:
bool SerializeTrackList(TrackList* list, opentimelineio::v1_0::Timeline *otio_timeline);
ProjectPtr project_;
Project* project_;
};
+10 -22
View File
@@ -36,43 +36,35 @@ ProjectToolbar::ProjectToolbar(QWidget *parent) :
layout->setMargin(0);
new_button_ = new QPushButton();
connect(new_button_, SIGNAL(clicked(bool)), this, SIGNAL(NewClicked()));
connect(new_button_, &QPushButton::clicked, this, &ProjectToolbar::NewClicked);
layout->addWidget(new_button_);
open_button_ = new QPushButton();
connect(open_button_, SIGNAL(clicked(bool)), this, SIGNAL(OpenClicked()));
connect(open_button_, &QPushButton::clicked, this, &ProjectToolbar::OpenClicked);
layout->addWidget(open_button_);
save_button_ = new QPushButton();
connect(save_button_, SIGNAL(clicked(bool)), this, SIGNAL(SaveClicked()));
connect(save_button_, &QPushButton::clicked, this, &ProjectToolbar::SaveClicked);
layout->addWidget(save_button_);
undo_button_ = new QPushButton();
connect(undo_button_, SIGNAL(clicked(bool)), this, SIGNAL(UndoClicked()));
layout->addWidget(undo_button_);
redo_button_ = new QPushButton();
connect(redo_button_, SIGNAL(clicked(bool)), this, SIGNAL(RedoClicked()));
layout->addWidget(redo_button_);
search_field_ = new QLineEdit();
search_field_->setClearButtonEnabled(true);
connect(search_field_, SIGNAL(textChanged(const QString &)), this, SIGNAL(SearchChanged(const QString&)));
connect(search_field_, &QLineEdit::textChanged, this, &ProjectToolbar::SearchChanged);
layout->addWidget(search_field_);
tree_button_ = new QPushButton();
tree_button_->setCheckable(true);
connect(tree_button_, SIGNAL(clicked(bool)), this, SLOT(ViewButtonClicked()));
connect(tree_button_, &QPushButton::clicked, this, &ProjectToolbar::ViewButtonClicked);
layout->addWidget(tree_button_);
list_button_ = new QPushButton();
list_button_->setCheckable(true);
connect(list_button_, SIGNAL(clicked(bool)), this, SLOT(ViewButtonClicked()));
connect(list_button_, &QPushButton::clicked, this, &ProjectToolbar::ViewButtonClicked);
layout->addWidget(list_button_);
icon_button_ = new QPushButton();
icon_button_->setCheckable(true);
connect(icon_button_, SIGNAL(clicked(bool)), this, SLOT(ViewButtonClicked()));
connect(icon_button_, &QPushButton::clicked, this, &ProjectToolbar::ViewButtonClicked);
layout->addWidget(icon_button_);
// Group Tree/List/Icon view buttons into a button group for easy exclusive-buttons
@@ -116,14 +108,12 @@ void ProjectToolbar::Retranslate()
new_button_->setToolTip(tr("New..."));
open_button_->setToolTip(tr("Open Project"));
save_button_->setToolTip(tr("Save Project"));
undo_button_->setToolTip(tr("Undo"));
redo_button_->setToolTip(tr("Redo"));
search_field_->setPlaceholderText(tr("Search media, markers, etc."));
tree_button_->setToolTip(tr("Switch to Tree View"));
list_button_->setToolTip(tr("Switch to List View"));
icon_button_->setToolTip(tr("Switch to Icon View"));
tree_button_->setToolTip(tr("Tree View"));
list_button_->setToolTip(tr("List View"));
icon_button_->setToolTip(tr("Icon View"));
}
void ProjectToolbar::UpdateIcons()
@@ -131,8 +121,6 @@ void ProjectToolbar::UpdateIcons()
new_button_->setIcon(icon::New);
open_button_->setIcon(icon::Open);
save_button_->setIcon(icon::Save);
undo_button_->setIcon(icon::Undo);
redo_button_->setIcon(icon::Redo);
tree_button_->setIcon(icon::TreeView);
list_button_->setIcon(icon::ListView);
icon_button_->setIcon(icon::IconView);
@@ -60,9 +60,6 @@ signals:
void OpenClicked();
void SaveClicked();
void UndoClicked();
void RedoClicked();
void SearchChanged(const QString&);
void ViewChanged(ViewType type);
@@ -74,8 +71,6 @@ private:
QPushButton* new_button_;
QPushButton* open_button_;
QPushButton* save_button_;
QPushButton* undo_button_;
QPushButton* redo_button_;
QLineEdit* search_field_;
+2 -2
View File
@@ -350,10 +350,10 @@ void ImportTool::DropGhosts(bool insert)
}
if (behavior != kDWSDisable) {
ProjectPtr active_project = Core::instance()->GetActiveProject();
Project* active_project = Core::instance()->GetActiveProject();
if (active_project) {
SequencePtr new_sequence = Core::instance()->CreateNewSequenceForProject(active_project.get());
SequencePtr new_sequence = Core::instance()->CreateNewSequenceForProject(active_project);
new_sequence->set_default_parameters();
+1 -1
View File
@@ -282,7 +282,7 @@ void MainMenu::ToolItemTriggered()
void MainMenu::FileMenuAboutToShow()
{
Project* active_project = Core::instance()->GetActiveProject().get();
Project* active_project = Core::instance()->GetActiveProject();
file_project_properties_item_->setEnabled(active_project);
file_save_item_->setEnabled(active_project);
+1 -1
View File
@@ -479,7 +479,7 @@ void MainWindow::ProjectCloseRequested()
ProjectPanel* panel = static_cast<ProjectPanel*>(sender());
Project* p = panel->project();
Core::instance()->CloseProject(Core::instance()->GetSharedPtrFromProject(p), true);
Core::instance()->CloseProject(p, true);
}
void MainWindow::FloatingPanelCloseRequested()