core/mainmenu: implemented save/close all/current actions for multiple projects

Expands on UI from multiple project support implemented earlier.
This commit is contained in:
itsmattkc
2020-04-19 00:37:44 +10:00
parent aecd381e6b
commit 93e5e7c0c1
4 changed files with 93 additions and 3 deletions
+37
View File
@@ -656,6 +656,38 @@ bool Core::SaveActiveProjectAs()
return false;
}
bool Core::SaveAllProjects()
{
foreach (ProjectPtr p, open_projects_) {
if (!SaveProject(p.get())) {
return false;
}
}
return true;
}
bool Core::CloseActiveProject()
{
return CloseProject(GetActiveProject(), true);
}
bool Core::CloseAllExceptActiveProject()
{
Project* active_proj = GetActiveProject();
QList<ProjectPtr> copy = open_projects_;
foreach (ProjectPtr p, copy) {
if (p.get() != active_proj) {
if (!CloseProject(p.get(), true)) {
return false;
}
}
}
return true;
}
QList<rational> Core::SupportedFrameRates()
{
QList<rational> frame_rates;
@@ -930,6 +962,11 @@ bool Core::CloseAllProjects(bool auto_open_new)
return true;
}
bool Core::CloseAllProjects()
{
return CloseAllProjects(true);
}
void Core::OpenProject()
{
QString file = QFileDialog::getOpenFileName(main_window_,
+25
View File
@@ -234,6 +234,31 @@ public slots:
*/
bool SaveActiveProjectAs();
/**
* @brief Save all currently open projects
*/
bool SaveAllProjects();
/**
* @brief Closes the active project
*
* If no other projects are open, a new one is created automatically.
*/
bool CloseActiveProject();
/**
* @brief Closes all projects except the active project
*/
bool CloseAllExceptActiveProject();
/**
* @brief Closes all open projects
*
* Equivalent to `CloseAllProjects(true)`, but useful for the signal/slot system where you may not be able to specify
* parameters.
*/
bool CloseAllProjects();
/**
* @brief Set the current application-wide tool
*
+27 -3
View File
@@ -55,6 +55,7 @@ MainMenu::MainMenu(MainWindow *parent) :
file_open_recent_clear_item_ = file_open_recent_menu_->AddItem("clearopenrecent", Core::instance(), &Core::ClearOpenRecentList);
file_save_item_ = file_menu_->AddItem("saveproj", Core::instance(), &Core::SaveActiveProject, "Ctrl+S");
file_save_as_item_ = file_menu_->AddItem("saveprojas", Core::instance(), &Core::SaveActiveProjectAs, "Ctrl+Shift+S");
file_save_all_item_ = file_menu_->AddItem("saveallproj", Core::instance(), &Core::SaveAllProjects);
file_menu_->addSeparator();
file_import_item_ = file_menu_->AddItem("import", Core::instance(), &Core::DialogImportShow, "Ctrl+I");
file_menu_->addSeparator();
@@ -62,6 +63,10 @@ MainMenu::MainMenu(MainWindow *parent) :
file_menu_->addSeparator();
file_project_properties_item_ = file_menu_->AddItem("projectproperties", Core::instance(), &Core::DialogProjectPropertiesShow);
file_menu_->addSeparator();
file_close_project_item_ = file_menu_->AddItem("closeproj", Core::instance(), &Core::CloseActiveProject);
file_close_all_projects_item_ = file_menu_->AddItem("closeallproj", Core::instance(), static_cast<bool(Core::*)()>(&Core::CloseAllProjects));
file_close_all_except_item_ = file_menu_->AddItem("closeallexcept", Core::instance(), &Core::CloseAllExceptActiveProject);
file_menu_->addSeparator();
file_exit_item_ = file_menu_->AddItem("exit", parent, &MainWindow::close, "Ctrl+Q");
//
@@ -302,7 +307,26 @@ void MainMenu::TimecodeDisplayTriggered()
void MainMenu::FileMenuAboutToShow()
{
file_project_properties_item_->setEnabled(Core::instance()->GetActiveProject());
Project* active_project = Core::instance()->GetActiveProject();
file_project_properties_item_->setEnabled(active_project);
file_save_item_->setEnabled(active_project);
file_save_as_item_->setEnabled(active_project);
file_close_project_item_->setEnabled(active_project);
file_close_all_projects_item_->setEnabled(active_project);
file_close_all_except_item_->setEnabled(active_project);
if (active_project) {
file_save_item_->setText(tr("&Save '%1'").arg(active_project->pretty_filename()));
file_save_as_item_->setText(tr("Save '%1' &As").arg(active_project->pretty_filename()));
file_close_project_item_->setText(tr("Close '%1'").arg(active_project->pretty_filename()));
file_close_all_except_item_->setText(tr("Close All Except '%1'").arg(active_project->pretty_filename()));
} else {
file_save_item_->setText(tr("&Save Project"));
file_save_as_item_->setText(tr("Save Project &As"));
file_close_project_item_->setText(tr("Close Project"));
file_close_all_except_item_->setText(tr("Close All Except Current Project"));
}
}
void MainMenu::ViewMenuAboutToShow()
@@ -572,11 +596,11 @@ void MainMenu::Retranslate()
file_open_item_->setText(tr("&Open Project"));
file_open_recent_menu_->setTitle(tr("Open &Recent"));
file_open_recent_clear_item_->setText(tr("&Clear Recent List"));
file_save_item_->setText(tr("&Save Project"));
file_save_as_item_->setText(tr("Save Project &As"));
file_save_all_item_->setText(tr("Sa&ve All Projects"));
file_import_item_->setText(tr("&Import..."));
file_export_item_->setText(tr("&Export..."));
file_project_properties_item_->setText(tr("&Project Properties..."));
file_close_all_projects_item_->setText(tr("Close All Projects"));
file_exit_item_->setText(tr("E&xit"));
// Edit menu
+4
View File
@@ -188,9 +188,13 @@ private:
QAction* file_open_recent_clear_item_;
QAction* file_save_item_;
QAction* file_save_as_item_;
QAction* file_save_all_item_;
QAction* file_import_item_;
QAction* file_export_item_;
QAction* file_project_properties_item_;
QAction* file_close_project_item_;
QAction* file_close_all_projects_item_;
QAction* file_close_all_except_item_;
QAction* file_exit_item_;
Menu* edit_menu_;