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:
@@ -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
@@ -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
|
||||
*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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_;
|
||||
|
||||
Reference in New Issue
Block a user