diff --git a/app/core.cpp b/app/core.cpp index c2b3b7860..d9a3eff95 100644 --- a/app/core.cpp +++ b/app/core.cpp @@ -105,7 +105,6 @@ void Core::DeclareTypesForQt() qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); - qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); @@ -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()); + 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(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 p = std::unique_ptr(plm.GetLoadedProject()); QList 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(task)->GetProject(); + Project* p = static_cast(task)->GetProject(); PushRecentlyOpenedProject(p->filename()); p->set_modified(false); } -ProjectPtr Core::GetActiveProject() const +Project* Core::GetActiveProject() const { ProjectPanel* active_project_panel = PanelManager::instance()->MostRecentlyFocused(); 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 copy = open_projects_; + Project* active_proj = GetActiveProject(); + QList 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 copy = open_projects_; + QList 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 footage_we_couldnt_validate; diff --git a/app/core.h b/app/core.h index ed1727541..da6c2d9d2 100644 --- a/app/core.h +++ b/app/core.h @@ -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 open_projects_; + QList 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); diff --git a/app/panel/project/project.cpp b/app/panel/project/project.cpp index 7fbd9560f..5a8318e93 100644 --- a/app/panel/project/project.cpp +++ b/app/panel/project/project.cpp @@ -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 ProjectPanel::GetSelectedFootage() const { QList items = SelectedItems(); diff --git a/app/panel/project/project.h b/app/panel/project/project.h index 5d15e50ad..c2a25e699 100644 --- a/app/panel/project/project.h +++ b/app/panel/project/project.h @@ -78,10 +78,10 @@ private slots: void UpdateSubtitle(); + void SaveConnectedProject(); + }; } -Q_DECLARE_METATYPE(olive::ProjectPtr) - #endif // PROJECT_PANEL_H diff --git a/app/project/project.h b/app/project/project.h index c86bf6e64..d6d801ca5 100644 --- a/app/project/project.h +++ b/app/project/project.h @@ -103,8 +103,6 @@ private slots: }; -using ProjectPtr = std::shared_ptr; - } #endif // PROJECT_H diff --git a/app/task/project/load/load.cpp b/app/task/project/load/load.cpp index 6a17075b5..c83cb1c1a 100644 --- a/app/task/project/load/load.cpp +++ b/app/task/project/load/load.cpp @@ -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_ = new Project(); project_->set_filename(GetFilename()); diff --git a/app/task/project/load/loadbasetask.h b/app/task/project/load/loadbasetask.h index a7dc831bf..0f2c6b0a4 100644 --- a/app/task/project/load/loadbasetask.h +++ b/app/task/project/load/loadbasetask.h @@ -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_; diff --git a/app/task/project/loadotio/loadotio.cpp b/app/task/project/loadotio/loadotio.cpp index c8928ff5e..9c557df0f 100644 --- a/app/task/project/loadotio/loadotio.cpp +++ b/app/task/project/loadotio/loadotio.cpp @@ -53,7 +53,7 @@ bool LoadOTIOTask::Run() return false; } - project_ = std::make_shared(); + project_ = new Project(); project_->set_filename(GetFilename()); std::vector 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); } diff --git a/app/task/project/save/save.cpp b/app/task/project/save/save.cpp index b233693e4..541a75718 100644 --- a/app/task/project/save/save.cpp +++ b/app/task/project/save/save.cpp @@ -29,7 +29,7 @@ namespace olive { -ProjectSaveTask::ProjectSaveTask(ProjectPtr project) : +ProjectSaveTask::ProjectSaveTask(Project *project) : project_(project) { SetTitle(tr("Saving '%1'").arg(project->filename())); diff --git a/app/task/project/save/save.h b/app/task/project/save/save.h index 23b116469..85306318a 100644 --- a/app/task/project/save/save.h +++ b/app/task/project/save/save.h @@ -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_; }; diff --git a/app/task/project/saveotio/saveotio.cpp b/app/task/project/saveotio/saveotio.cpp index 2a2b25092..3b42839c0 100644 --- a/app/task/project/saveotio/saveotio.cpp +++ b/app/task/project/saveotio/saveotio.cpp @@ -31,7 +31,7 @@ namespace olive { -SaveOTIOTask::SaveOTIOTask(ProjectPtr project) : +SaveOTIOTask::SaveOTIOTask(Project *project) : project_(project) { SetTitle(tr("Exporting project to OpenTimelineIO")); diff --git a/app/task/project/saveotio/saveotio.h b/app/task/project/saveotio/saveotio.h index d076a2691..4acffb796 100644 --- a/app/task/project/saveotio/saveotio.h +++ b/app/task/project/saveotio/saveotio.h @@ -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_; }; diff --git a/app/widget/projecttoolbar/projecttoolbar.cpp b/app/widget/projecttoolbar/projecttoolbar.cpp index a7049d207..ba7d5303d 100644 --- a/app/widget/projecttoolbar/projecttoolbar.cpp +++ b/app/widget/projecttoolbar/projecttoolbar.cpp @@ -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); diff --git a/app/widget/projecttoolbar/projecttoolbar.h b/app/widget/projecttoolbar/projecttoolbar.h index 35abec4de..a5f5cfa28 100644 --- a/app/widget/projecttoolbar/projecttoolbar.h +++ b/app/widget/projecttoolbar/projecttoolbar.h @@ -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_; diff --git a/app/widget/timelinewidget/tool/import.cpp b/app/widget/timelinewidget/tool/import.cpp index da9aa2bb1..ff9a6a2b3 100644 --- a/app/widget/timelinewidget/tool/import.cpp +++ b/app/widget/timelinewidget/tool/import.cpp @@ -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(); diff --git a/app/window/mainwindow/mainmenu.cpp b/app/window/mainwindow/mainmenu.cpp index c9fef2ec0..a5d8c1dc2 100644 --- a/app/window/mainwindow/mainmenu.cpp +++ b/app/window/mainwindow/mainmenu.cpp @@ -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); diff --git a/app/window/mainwindow/mainwindow.cpp b/app/window/mainwindow/mainwindow.cpp index d9d14ec1f..662e31d75 100644 --- a/app/window/mainwindow/mainwindow.cpp +++ b/app/window/mainwindow/mainwindow.cpp @@ -479,7 +479,7 @@ void MainWindow::ProjectCloseRequested() ProjectPanel* panel = static_cast(sender()); Project* p = panel->project(); - Core::instance()->CloseProject(Core::instance()->GetSharedPtrFromProject(p), true); + Core::instance()->CloseProject(p, true); } void MainWindow::FloatingPanelCloseRequested()