⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 structure_window.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    if (force) {        fileMenu->Enable(MID_OPEN, false);        fileMenu->Enable(MID_SAVE_AS, false);    }    // clear old data    if (glCanvas->structureSet) {        DestroyNonModalDialogs();        GlobalMessenger()->RemoveAllHighlights(false);        delete glCanvas->structureSet;        glCanvas->structureSet = NULL;        glCanvas->renderer->AttachStructureSet(NULL);        glCanvas->Refresh(false);    }    // get current structure limit    int structureLimit = kMax_Int;    if (!RegistryGetInteger(REG_ADVANCED_SECTION, REG_MAX_N_STRUCTS, &structureLimit))        WARNINGMSG("Can't get structure limit from registry");    // use passed-in data if present, otherwise load from file    if (mimeData) {        glCanvas->structureSet = new StructureSet(mimeData, structureLimit, glCanvas->renderer);        userDir = GetWorkingDir();        currentFile = "";    }    else {        // set up various paths relative to given filename        if (wxIsAbsolutePath(filename))            userDir = string(wxPathOnly(filename).c_str()) + wxFILE_SEP_PATH;        else if (wxPathOnly(filename) == "")            userDir = GetWorkingDir();        else            userDir = GetWorkingDir() + wxPathOnly(filename).c_str() + wxFILE_SEP_PATH;        INFOMSG("user dir: " << userDir.c_str());        // try to decide if what ASN type this is, and if it's binary or ascii        CNcbiIstream *inStream = new CNcbiIfstream(filename, IOS_BASE::in | IOS_BASE::binary);        if (!(*inStream)) {            ERRORMSG("Cannot open file '" << filename << "' for reading");            SetCursor(wxNullCursor);            delete inStream;            return false;        }        currentFile = wxFileNameFromPath(filename);        string firstWord;        *inStream >> firstWord;        delete inStream;        static const string            asciiMimeFirstWord = "Ncbi-mime-asn1",            asciiCDDFirstWord = "Cdd";        bool isMime = false, isCDD = false, isBinary = true;        if (firstWord == asciiMimeFirstWord) {            isMime = true;            isBinary = false;        } else if (firstWord == asciiCDDFirstWord) {            isCDD = true;            isBinary = false;        }        // try to read the file as various ASN types (if it's not clear from the first ascii word).        // If read is successful, the StructureSet will own the asn data object, to keep it        // around for output later on        bool readOK = false;        string err;        if (!isCDD) {            TRACEMSG("trying to read file '" << filename << "' as " <<                ((isBinary) ? "binary" : "ascii") << " mime");            CNcbi_mime_asn1 *mime = new CNcbi_mime_asn1();            SetDiagPostLevel(eDiag_Fatal); // ignore all but Fatal errors while reading data            readOK = ReadASNFromFile(filename, mime, isBinary, &err);            SetDiagPostLevel(eDiag_Info);            if (readOK) {                glCanvas->structureSet = new StructureSet(mime, structureLimit, glCanvas->renderer);                // if CDD is contained in a mime, then show CDD splash screen                if (glCanvas->structureSet->IsCDD())                    ShowCDDOverview();            } else {                TRACEMSG("error: " << err);                delete mime;            }        }        if (!readOK) {            TRACEMSG("trying to read file '" << filename << "' as " <<                ((isBinary) ? "binary" : "ascii") << " cdd");            CCdd *cdd = new CCdd();            SetDiagPostLevel(eDiag_Fatal); // ignore all but Fatal errors while reading data            readOK = ReadASNFromFile(filename, cdd, isBinary, &err);            SetDiagPostLevel(eDiag_Info);            if (readOK) {                glCanvas->structureSet = new StructureSet(cdd, structureLimit, glCanvas->renderer);            } else {                TRACEMSG("error: " << err);                delete cdd;            }        }        if (!readOK) {            ERRORMSG("File not found, not readable, or is not a recognized data type");            SetCursor(wxNullCursor);            return false;        }    }    SetWorkingTitle(glCanvas->structureSet);    GlobalMessenger()->SetAllWindowTitles();    // use a default style if no global style stored in asn data    if (glCanvas->structureSet->hasUserStyle) {        SetRenderingMenuFlag(0);        SetColoringMenuFlag(0);    } else {        // set default rendering style and view, and turn on corresponding style menu flags        if (glCanvas->structureSet->alignmentSet) {            glCanvas->structureSet->styleManager->SetGlobalRenderingStyle(StyleSettings::eTubeShortcut);            SetRenderingMenuFlag(MID_TUBE);            if (glCanvas->structureSet->IsCDD()) {                glCanvas->structureSet->styleManager->SetGlobalColorScheme(StyleSettings::eInformationContentShortcut);                SetColoringMenuFlag(MID_INFO);            } else {                glCanvas->structureSet->styleManager->SetGlobalColorScheme(StyleSettings::eIdentityShortcut);                SetColoringMenuFlag(MID_IDENTITY);            }        } else {            glCanvas->structureSet->styleManager->SetGlobalRenderingStyle(StyleSettings::eWormShortcut);            SetRenderingMenuFlag(MID_WORM);            glCanvas->structureSet->styleManager->SetGlobalColorScheme(StyleSettings::eSecondaryStructureShortcut);            SetColoringMenuFlag(MID_SECSTRUC);        }    }    menuBar->EnableTop(menuBar->FindMenu("CDD"), glCanvas->structureSet->IsCDD());    glCanvas->renderer->AttachStructureSet(glCanvas->structureSet);    if (!glCanvas->renderer->HasASNViewSettings())        glCanvas->structureSet->CenterViewOnAlignedResidues();    glCanvas->Refresh(false);    glCanvas->structureSet->alignmentManager->ShowSequenceViewer();    SetCursor(wxNullCursor);    return true;}void StructureWindow::OnOpen(wxCommandEvent& event){    if (glCanvas->structureSet) {        GlobalMessenger()->SequenceWindowsSave(true);   // give sequence window a chance to save        SaveDialog(true, false);                        // give structure window a chance to save data    }    if (event.GetId() == MID_OPEN) {        const wxString& filestr = wxFileSelector("Choose a text or binary ASN1 file to open", userDir.c_str(),            "", "", "All Files|*.*|CDD (*.acd)|*.acd|Binary ASN (*.val)|*.val|ASCII ASN (*.prt)|*.prt",            wxOPEN | wxFILE_MUST_EXIST);        if (!filestr.IsEmpty())            LoadData(filestr.c_str(), false);    }    else if (event.GetId() == MID_NETWORK_OPEN) {        wxString id = wxGetTextFromUser("Please enter a PDB or MMDB id", "Input id");        if (id.size() == 0)            return;        wxArrayString choiceStrs;        choiceStrs.Add("single");        choiceStrs.Add("alpha");        choiceStrs.Add("PDB");        wxString modelStr = wxGetSingleChoice(            "Please select which type of model you'd like to load", "Select model", choiceStrs);        if (modelStr.size() == 0)            return;        EModel_type model = eModel_type_ncbi_all_atom;        if (modelStr == "alpha")            model = eModel_type_ncbi_backbone;        else if (modelStr == "PDB")            model = eModel_type_pdb_model;        CNcbi_mime_asn1 *mime = LoadStructureViaCache(id.c_str(), model);        if (mime)            LoadData(NULL, false, mime);    }}void StructureWindow::OnSave(wxCommandEvent& event){    if (!glCanvas->structureSet) return;    // determine whether to prompt user for filename    bool prompt = (event.GetId() == MID_SAVE_AS);    if (!prompt) {        wxString dir = wxString(userDir.c_str()).MakeLower();        // always prompt if this file is stored in some temp folder (e.g. browser cache)        if (dir.Contains("cache") || dir.Contains("temp") || dir.Contains("tmp"))            prompt = true;    }    // force a save of any edits to alignment and updates first    GlobalMessenger()->SequenceWindowsSave(prompt);    wxString outputFolder = wxString(userDir.c_str(), userDir.size() - 1); // remove trailing /    wxString outputFilename;    bool outputBinary;    // don't ask for filename if Save As is disabled    if ((prompt && fileMenu->IsEnabled(MID_SAVE_AS)) || currentFile.size() == 0) {        wxFileName fn(currentFile.c_str());        wxFileDialog dialog(this, "Choose a filename for output", outputFolder,#ifdef __WXGTK__            fn.GetFullName(),#else            fn.GetName(),#endif            "All Files|*.*|Binary ASN (*.val)|*.val|ASCII CDD (*.acd)|*.acd|ASCII ASN (*.prt)|*.prt",            wxSAVE | wxOVERWRITE_PROMPT);        dialog.SetFilterIndex(fn.GetExt() == "val" ? 1 : (fn.GetExt() == "acd" ? 2 :            (fn.GetExt() == "prt" ? 3 : 0)));        if (dialog.ShowModal() == wxID_OK)            outputFilename = dialog.GetPath();        outputBinary = (dialog.GetFilterIndex() == 1);    } else {        outputFilename = (userDir + currentFile).c_str();        outputBinary = (outputFilename.Right(4) == ".val");    }    INFOMSG("save file: '" << outputFilename.c_str() << "'");    if (!outputFilename.IsEmpty()) {        // convert mime to cdd if specified        if (outputFilename.Right(4) == ".acd" &&            (!glCanvas->structureSet->IsCDD() || glCanvas->structureSet->IsCDDInMime()))        {            string cddName;            if (glCanvas->structureSet->IsCDDInMime() && glCanvas->structureSet->GetCDDName().size() > 0)                cddName = glCanvas->structureSet->GetCDDName();            else                cddName = wxGetTextFromUser("Enter a name for this CD", "Input Name");            if (cddName.size() == 0 || !glCanvas->structureSet->ConvertMimeDataToCDD(cddName.c_str())) {                ERRORMSG("Conversion to Cdd failed");                return;            }        }        // save and send FileSaved command        unsigned int changeFlags;        if (glCanvas->structureSet->SaveASNData(outputFilename.c_str(), outputBinary, &changeFlags) &&            IsFileMessengerActive())        {            string data(outputFilename.c_str());            data += '\n';            TRACEMSG("changeFlags: " << changeFlags);            if ((changeFlags & StructureSet::eAnyAlignmentData) > 0)                data += "AlignmentChanged\n";            if ((changeFlags & StructureSet::eRowOrderData) > 0)                data += "RowOrderChanged\n";            if ((changeFlags & StructureSet::ePSSMData) > 0)                data += "PSSMChanged\n";            if ((changeFlags & StructureSet::eCDDData) > 0)                data += "DescriptionChanged\n";            if ((changeFlags & StructureSet::eUpdateData) > 0)                data += "PendingAlignmentsChanged\n";            SendCommand(messageTargetApp, "FileSaved", data);        }#ifdef __WXMAC__        // set mac file type and creator        wxFileName wxfn(outputFilename);        if (wxfn.FileExists())            if (!wxfn.MacSetTypeAndCreator('TEXT', 'Cn3D'))                WARNINGMSG("Unable to set Mac file type/creator");#endif        // set path/name/title        if (wxIsAbsolutePath(outputFilename))            userDir = string(wxPathOnly(outputFilename).c_str()) + wxFILE_SEP_PATH;        else if (wxPathOnly(outputFilename) == "")            userDir = GetWorkingDir();        else            userDir = GetWorkingDir() + wxPathOnly(outputFilename).c_str() + wxFILE_SEP_PATH;        currentFile = wxFileNameFromPath(outputFilename);        SetWorkingTitle(glCanvas->structureSet);        GlobalMessenger()->SetAllWindowTitles();    }}END_SCOPE(Cn3D)/** ---------------------------------------------------------------------------* $Log: structure_window.cpp,v $* Revision 1000.3  2004/06/01 18:29:33  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.33** Revision 1.33  2004/05/31 13:15:09  thiessen* make select molecule take PDB chain/het name** Revision 1.32  2004/05/21 21:41:40  gorelenk* Added PCH ncbi_pch.hpp** Revision 1.31  2004/05/21 17:29:51  thiessen* allow conversion of mime to cdd data** Revision 1.30  2004/04/22 00:05:03  thiessen* add seclect molecule** Revision 1.29  2004/03/15 18:38:52  thiessen* prefer prefix vs. postfix ++/-- operators** Revision 1.28  2004/03/09 14:30:47  thiessen* change network load type choice order** Revision 1.27  2004/02/19 17:05:16  thiessen* remove cn3d/ from include paths; add pragma to disable annoying msvc warning** Revision 1.26  2004/01/17 01:47:26  thiessen* add network load** Revision 1.25  2004/01/17 00:17:31  thiessen* add Biostruc and network structure load** Revision 1.24  2004/01/08 15:31:03  thiessen* remove hard-coded CDTree references in messaging; add Cn3DTerminated message upon exit** Revision 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -