void Workspace::AddDocument(string projectName, QString& imageFullPath, ProcessingOptions& options) { QFileInfo imageFileInfo(imageFullPath); // Get project. Project* project = m_Projects[projectName].get(); m_ProjectsPersistentState[projectName] = false; QString projectDirPath = QString(project->GetDocumentsPath().c_str()); QDir projectDir(projectDirPath); // Copy image to project dir. QString dstImageFullPath = projectDir.absoluteFilePath(imageFileInfo.fileName()); QFile::copy(imageFullPath, dstImageFullPath); // Get image name. QString docNameQ = imageFileInfo.baseName(); std::string docName = Utils::StringQ2W(docNameQ); // Add image to project. Document* document = project->AddDocument( docName, Utils::StringQ2W(dstImageFullPath), options); // Add image to view model. auto projRowItem = m_ProjectsModel.findItems(Utils::StringW2Q(projectName)); ProjectItem* projectItem = (ProjectItem*) projRowItem.first(); ProjectItem* docItem = new ProjectItem(docName, true); QList<QStandardItem*> docRowItem; docRowItem << docItem; projectItem->appendRow(docItem); SetCurrent(project, projectItem, document, docItem); }
void Workspace::AddProject(QString& projectFullPath, bool load) { QFileInfo projectFileInfo(projectFullPath); // Extract project name from path. QString projectNameQ = projectFileInfo.fileName().remove(".ndtr"); std::string projectName = Utils::StringQ2W(projectNameQ); // If not exists, create dir to store images. QDir projectDir = projectFileInfo.absoluteDir(); // Create dir if not exist. if (!projectDir.exists(projectNameQ)) { projectDir.mkdir(projectNameQ); } projectDir.cd(projectNameQ); // There can't be more projects with same name. if (m_Projects.count(projectName)) { // "Project with the same name is already loaded." throw std::exception(); } // Initialize project. m_Projects[projectName] = unique_ptr<Project>(new Project()); m_ProjectsPersistentState[projectName] = true; // loaded or saved Project* project = m_Projects[projectName].get(); project->Init(projectName, projectFullPath.toStdString(), projectDir.absolutePath().toStdString()); // Load/Save project. if (load) { // If exists load project from file. if(!ProjectParser::Load(project)) { // "Failed to load project file." throw std::exception(); } } else { // Save project file. Serialize as XML. if (!ProjectParser::Save(project)) { // "Failed to save project file." throw std::exception(); } } // TODO: Move to method. Add images to view. // Add project to project model view. QStandardItem* rootItem = m_ProjectsModel.invisibleRootItem(); ProjectItem* projectItem = new ProjectItem(projectName); QList<QStandardItem*> projectItems; projectItems << projectItem; rootItem->appendRow(projectItems); for (Document* doc : project->GetDocuments()) { auto projRowItem = m_ProjectsModel.findItems(Utils::StringW2Q(projectName)); ProjectItem* projectItem = (ProjectItem*) projRowItem.first(); ProjectItem* docItem = new ProjectItem(doc->GetName(), true); QList<QStandardItem*> docRowItem; docRowItem << docItem; projectItem->appendRow(docItem); } // Set new project as current project. SetCurrent(projectName); }