24 const bool succeeded =
true;
25 const bool failed =
false;
58 return dirname.empty() ? failed :
project_manager->saveProjectAs(dirname);
78 throw std::runtime_error(
"Error in ProjectManager: unexpected answer.");
88 throw std::runtime_error(
"Error in ProjectManager: absent save_callback");
96 throw std::runtime_error(
"Error in ProjectManager: absent creat_dir callback.");
104 throw std::runtime_error(
"Error in ProjectManager: absent open_dir callback.");
127 if (!
p_impl->saveBeforeClosing())
130 auto project_dir = dirname.empty() ?
p_impl->acquireNewProjectDir() : dirname;
132 return project_dir.empty() ? failed :
p_impl->project_manager->createNewProject(project_dir);
141 return p_impl->saveCurrentProject();
150 auto project_dir = dirname.empty() ?
p_impl->acquireNewProjectDir() : dirname;
152 return project_dir.empty() ? failed :
p_impl->saveCurrentProjectAs(project_dir);
162 if (!
p_impl->saveBeforeClosing())
164 auto project_dir = dirname.empty() ?
p_impl->acquireExistingProjectDir() : dirname;
166 return project_dir.empty() ? failed :
p_impl->project_manager->openExistingProject(project_dir);
173 return p_impl->currentProjectDir();
180 return p_impl->isModified();
189 if (!
p_impl->saveBeforeClosing())
~ProjectManagerDecorator() override
ProjectManagerDecorator(const ProjectContext &project_context, const UserInteractionContext &user_context)
Constructor for ProjectManagerDecorator.
std::unique_ptr< ProjectManagerImpl > p_impl
bool closeCurrentProject() const override
Closes current project, returns 'true' if succeeded.
bool createNewProject(const std::string &dirname={}) override
Creates a new project in the directory 'dirname', returns 'true' in the case of success.
bool saveProjectAs(const std::string &dirname={}) override
Saves the project under a given directory, returns true in the case of success.
std::string currentProjectDir() const override
Returns current project directory.
bool saveCurrentProject() override
Saves current project, returns 'true' in the case of success.
bool isModified() const override
Returns true if project was modified since last save.
bool openExistingProject(const std::string &dirname={}) override
Opens existing project, returns 'true' in the case of success.
materialitems.h Collection of materials to populate MaterialModel.
SaveChangesAnswer
Possible user answers on question "Project was modified".
Provides necessary information for Project construction.
Defines the context to interact with the user regarding save/save-as/create-new project scenarious.
select_dir_callback_t m_select_dir_callback
create_dir_callback_t m_create_dir_callback
answer_callback_t m_answer_callback
ProjectManagerImpl(ProjectContext project_context, UserInteractionContext user_context)
bool projectHasDir() const
Returns true if the project has directory already defined.
SaveChangesAnswer acquireSaveChangesAnswer() const
Asks the user whether to save/cancel/discard the project using callback provided.
ProjectContext m_project_context
std::string acquireNewProjectDir()
Acquire the name of the new project directory using callback provided.
UserInteractionContext m_user_context
std::string currentProjectDir() const
std::string acquireExistingProjectDir()
Acquire the name of the existing project directory using callback provided.
bool saveCurrentProjectAs(const std::string &dirname)
Saves current project under directory selected.
std::unique_ptr< ProjectManager > project_manager
bool saveCurrentProject()
Saves project in project directory.
bool saveBeforeClosing()
Performs saving of previous project before creating a new one.