/** * @brief Opens an Adcirc Subdomain Project file * * Once the file has been successfully opened, all ProjectFile access functions * become available. * * Opens an Adcirc Subdomain Project file. If a project is already open, * we prompt the user to either save it, discard changes, or cancel opening * a new project. * * @param filePath The project file to open */ bool ProjectFile::OpenProjectFile(QString filePath) { std::cout << "Called" << std::endl; if (!ProjectIsOpen() || WarnProjectAlreadyOpen()) { SetProjectFile(filePath); OpenFileRead(); ReadFile(); CloseFile(); return true; } return false; }
/** * @brief Creates a project directory (and a project file within that directory) in the * parent directory * * Creates a project directory (and a project file within that directory) in the * parent directory. The newly created project file is opened and all ProjectFile * access functions become available. * * If a project file is already open, we first prompt the user to either save, * discard changes, or cancel creating a new project. * * @param parentDirectory The directory in which to create the project directory * @param projectName The name to give both the project directory and the project file */ bool ProjectFile::CreateProjectFile(QString parentDirectory, QString projectName) { if (!ProjectIsOpen() || WarnProjectAlreadyOpen()) { /* Move into the project directory */ /* If the directory doesn't exist, try to create it */ projectDirectory = QDir(parentDirectory); if (!projectDirectory.cd(projectName)) { if (!projectDirectory.mkdir(projectName)) { WarnFileError("Unable to create project directory"); return false; } else if (!projectDirectory.cd(projectName)) { WarnFileError("Unable to access the project directory"); return false; } } /* Make sure there isn't a project file in the directory already */ projectDirectory.setNameFilters(QStringList("*.spf")); if (!projectDirectory.entryList().isEmpty()) { WarnFileError(QString("A project file already exists at ").append(parentDirectory+projectName)); return false; } /* Create the file */ SetProjectFile(projectDirectory.absolutePath() + QDir::separator() + projectName + ".spf"); if (OpenFileWrite()) { /* Create an empty project */ CreateEmptyProject(); /* Save the project file */ SaveFile(); /* Close the project file */ CloseFile(); return true; } } return false; }
/** Save the image under a new name * Set the modification flag * \return true on success, false on failure */ bool XPMEditorBase::SaveAs(void) { wxFileName fname; fname.Assign(m_Filename); ConfigManager* mgr = Manager::Get()->GetConfigManager(_T("app")); int StoredIndex = 0; wxString Filters = FileFilters::GetFilterString(); wxString Path = fname.GetPath(); wxString Extension = fname.GetExt(); wxString Filter; if (!Extension.IsEmpty()) { // use the current extension as the filter // Select filter belonging to this file type: Extension.Prepend(_T(".")); Filter = FileFilters::GetFilterString(Extension); } else if(mgr) { // File type is unknown. Select the last used filter: Filter = mgr->Read(_T("/file_dialogs/save_file_as/filter"), _T("bitmap files")); } if(!Filter.IsEmpty()) { // We found a filter, look up its index: int sep = Filter.find(_T("|")); if (sep != wxNOT_FOUND) { Filter.Truncate(sep); } if (!Filter.IsEmpty()) { FileFilters::GetFilterIndexFromName(Filters, Filter, StoredIndex); } } if(mgr && Path.IsEmpty()) { Path = mgr->Read(_T("/file_dialogs/save_file_as/directory"), Path); } wxFileDialog dlg(Manager::Get()->GetAppWindow(), _("Save file"), Path, fname.GetFullName(), Filters, wxFD_SAVE | wxFD_OVERWRITE_PROMPT); dlg.SetFilterIndex(StoredIndex); PlaceWindow(&dlg); if (dlg.ShowModal() != wxID_OK) { // cancelled out return(false); } m_Filename = dlg.GetPath(); Manager::Get()->GetLogManager()->Log(m_Filename); fname.Assign(m_Filename); m_Shortname = fname.GetFullName(); SetTitle(m_Shortname); // invalidate m_pProjectFile, because if kept, it would point to the ProjectFile with old name and // cause ProjectManager::RemoveFileFromProject called via context menu to crash if (m_pProjectFile) m_pProjectFile->SetFileState(fvsNormal); //so the original project file will be shown as unmodified. UpdateModified(); SetProjectFile(0); //Manager::Get()->GetLogManager()->Log(mltDevDebug, "Filename=%s\nShort=%s", m_Filename.c_str(), m_Shortname.c_str()); m_bIsFileNameOK = true; SetModified(true); // store the last used filter and directory if(mgr) { int Index = dlg.GetFilterIndex(); wxString Filter; if(FileFilters::GetFilterNameFromIndex(Filters, Index, Filter)) { mgr->Write(_T("/file_dialogs/save_file_as/filter"), Filter); } wxString Test = dlg.GetDirectory(); mgr->Write(_T("/file_dialogs/save_file_as/directory"), dlg.GetDirectory()); } return(Save()); }