void StructureManager::AddFile(const char* filename) { if (!filename) return; char* localCopy = strdup(filename); if (!localCopy) return; // Strip any trailing directory markers. Maybe we could load all files in the directory in this case, // but it hardly seems worth the effort. while (strlen(localCopy) > 0 && localCopy[strlen(localCopy) - 1] == '/') localCopy[strlen(localCopy) - 1] = 0; // Get the base file name const char* basename = strrchr(localCopy, '/'); if (!basename) basename = localCopy; else basename++; // TODO: Check for duplicate file name. // Figure out what kind of file we have and try to load it. const char* extension = strrchr(basename, '.'); RNAStructure* structure = 0; if (extension && !strncmp(extension, ".bpseq", 6)) { structure = RNAStructure::CreateFromFile(localCopy, true); } else if (extension && !strncmp(extension, ".ct", 3)) { structure = RNAStructure::CreateFromFile(localCopy, false); } else { if (strlen(filename) > 1000) fl_message("Unknown file type: <file name too long>"); else fl_message("Unknown file type: %s", filename); return; } if (structure) { // TODO: Check for duplicates. int index = AddFirstEmpty(structure); MainWindow::AddStructure(structure->GetFilename(), index, false); } free(localCopy); }
void StructureManager::AddFile(const char* filename) { if (!filename) return; char* localCopy = strdup(filename); if (!localCopy) { return; } // Strip any trailing directory markers. Maybe we could load all files in the directory in this case, // but it hardly seems worth the effort. while (strlen(localCopy) > 0 && localCopy[strlen(localCopy) - 1] == '/') localCopy[strlen(localCopy) - 1] = 0; // Get the base file name const char* basename = strrchr(localCopy, '/'); if (!basename) basename = localCopy; else basename++; // Don't load if it shares a filename with another loaded structure // TODO: Check whether to allow multiple structures with the same filename for (int i = 0; i < m_structureCount; ++i) { if (m_structures[i]) { if (!strcmp(m_structures[i]->GetFilename(), basename)) { fl_message("Already have a structure loaded with the filename: %s", basename); return; } } } // Figure out what kind of file we have and try to load it. const char* extension = strrchr(basename, '.'); RNAStructure* structure = 0; if (extension && !strncmp(extension, ".bpseq", 6)) { structure = RNAStructure::CreateFromFile(localCopy, true); } else if (extension && !strncmp(extension, ".ct", 3)) { structure = RNAStructure::CreateFromFile(localCopy, false); } else if (extension && !strncmp(extension, ".nopct", 6)) { structure = RNAStructure::CreateFromFile(localCopy, false); } else { if (strlen(filename) > 1000) fl_message("Unknown file type: <file name too long>"); else fl_message("Unknown file type: %s", filename); return; } if (structure) { // TODO: Check for duplicates. int count = (int)folders.size(); AddFirstEmpty(structure); if(count == (int) folders.size()-1) { InputWindow* input_window = new InputWindow(400, 150, "New Folder Added", folders[count]->folderName, InputWindow::FOLDER_INPUT); while (input_window->visible()) { Fl::wait(); } bool same = false; for(unsigned int ui = 0; ui < folders.size(); ui++) { if (!strcmp(folders[ui]->folderName,input_window->getName()) && strcmp(input_window->getName(),"")) { same = true; break; } } while (same) { fl_message("Already have a folder with the name: %s, please choose another name.", input_window->getName()); delete input_window; input_window = new InputWindow(400, 150, "New Folder Added", folders[count]->folderName, InputWindow::FOLDER_INPUT); while (input_window->visible()) { Fl::wait(); } same = false; for(unsigned int ui = 0; ui < folders.size(); ui++) { if (!strcmp(folders[ui]->folderName,input_window->getName())) { same = true; break; } } } if(strcmp(input_window->getName(), "")) strcpy(folders[count]->folderName,input_window->getName()); MainWindow::AddFolder(folders[count]->folderName, count, false); delete input_window; } //MainWindow::AddStructure(structure->GetFilename(), index, false); } free(localCopy); localCopy = NULL; }
void StructureManager::AddFile(const char* filename) { if (!filename) return; char* localCopy = strdup(filename); if (!localCopy) { return; } // Get the base file name const char* basename = strrchr(localCopy, '/'); if (!basename) basename = localCopy; else basename++; // Don't load if it shares a filename with another loaded structure for (int i = 0; i < m_structureCount; ++i) { if (m_structures[i]) { if (!strcmp(m_structures[i]->GetFilename(), basename)) { fl_message("Already have a structure loaded with filename: %s", basename); free(localCopy); return; } } } // Figure out what kind of file we have and try to load it. const char* extension = strrchr(basename, '.'); extension = extension ? extension : ""; RNAStructure* structure = NULL; if (extension && !strncasecmp(extension, ".bpseq", 6)) { structure = RNAStructure::CreateFromFile(localCopy, true); } else if (extension && !strncasecmp(extension, ".ct", 3)) { structure = RNAStructure::CreateFromFile(localCopy, false); } else if (extension && !strncasecmp(extension, ".nopct", 6)) { structure = RNAStructure::CreateFromFile(localCopy, false); } else if(extension && (!strncasecmp(extension, ".dot", 4) || !strncasecmp(extension, ".bracket", 8) || !strncasecmp(extension, ".dbn", 4))) { structure = RNAStructure::CreateFromDotBracketFile(localCopy); } else { if (strlen(filename) > 1000) fl_message("Unknown file type: <file name too long>"); else fl_message("Unknown file type: %s . %s [%s]", filename, extension, basename); return; } if (structure) { int count = (int)folders.size(); AddFirstEmpty(structure); if(count == (int) folders.size()-1) { InputWindow* input_window = new InputWindow(400, 150, "New Folder Added", folders[count]->folderName, InputWindow::FOLDER_INPUT); while (input_window->visible() && !GUI_USE_DEFAULT_FOLDER_NAMES) { Fl::wait(); } bool same = false; for(unsigned int ui = 0; ui < folders.size(); ui++) { if (!strcmp(folders[ui]->folderName,input_window->getName()) && strcmp(input_window->getName(),"")) { same = true; break; } } while (same) { fl_message("Already have a folder with the name: %s, please choose another name.", input_window->getName()); delete input_window; input_window = new InputWindow(400, 150, "New Folder Added", folders[count]->folderName, InputWindow::FOLDER_INPUT); while (input_window->visible() && !GUI_USE_DEFAULT_FOLDER_NAMES) { Fl::wait(); } same = false; for(unsigned int ui = 0; ui < folders.size(); ui++) { if (!strcmp(folders[ui]->folderName, input_window->getName())) { same = true; break; } } } if(strcmp(input_window->getName(), "")) strcpy(folders[count]->folderName, input_window->getName()); MainWindow::AddFolder(folders[count]->folderName, count, false); delete input_window; } } else { fl_alert("Error adding structure \"%s\"! Could not parse the specified format for this file.\n", localCopy); } Free(localCopy); }