📄 structure_window.cpp
字号:
switch (event.GetId()) { case MID_CDD_OVERVIEW: ShowCDDOverview(); break; case MID_EDIT_CDD_NAME: { wxString newName = wxGetTextFromUser("Enter or edit the CDD name:", "CDD Name", glCanvas->structureSet->GetCDDName().c_str(), this, -1, -1, false); if (newName.size() > 0) { if (!glCanvas->structureSet->SetCDDName(newName.c_str())) ERRORMSG("Error saving CDD name"); SetWorkingTitle(glCanvas->structureSet); GlobalMessenger()->SetAllWindowTitles(); } break; } case MID_EDIT_CDD_DESCR: if (!cddDescriptionDialog) { StructureSet::TextLines line(1); line[0] = glCanvas->structureSet->GetCDDDescription().c_str(); cddDescriptionDialog = new MultiTextDialog(this, line, this, -1, "CDD Description", wxPoint(50, 50), wxSize(400, 200)); } cddDescriptionDialog->ShowDialog(true); break; case MID_EDIT_CDD_NOTES: if (!cddNotesDialog) { StructureSet::TextLines lines; if (!glCanvas->structureSet->GetCDDNotes(&lines)) break; cddNotesDialog = new MultiTextDialog(this, lines, this, -1, "CDD Notes", wxPoint(100, 100), wxSize(500, 400)); } cddNotesDialog->ShowDialog(true); break; case MID_EDIT_CDD_REFERENCES: ShowCDDReferences(); break; case MID_EDIT_CDD_BOOK_REFERENCES: ShowCDDBookReferences(); break; case MID_ANNOT_CDD: ShowCDDAnnotations(); break; case MID_CDD_SHOW_REJECTS: glCanvas->structureSet->ShowRejects(); break; case MID_CDD_REJECT_SEQ: { // make a list of slave sequences SeqAndDescrList seqsDescrs; const MoleculeIdentifier *master = glCanvas->structureSet->alignmentManager-> GetCurrentMultipleAlignment()->GetSequenceOfRow(0)->identifier; const StructureSet::RejectList *rejects = glCanvas->structureSet->GetRejects(); SequenceSet::SequenceList::const_iterator s, se = glCanvas->structureSet->sequenceSet->sequences.end(); for (s=glCanvas->structureSet->sequenceSet->sequences.begin(); s!=se; ++s) { if ((*s)->identifier != master) { // make sure this sequence isn't already rejected bool rejected = false; if (rejects) { StructureSet::RejectList::const_iterator r, re = rejects->end(); for (r=rejects->begin(); r!=re; ++r) { CReject_id::TIds::const_iterator i, ie = (*r)->GetIds().end(); for (i=(*r)->GetIds().begin(); i!=ie; ++i) { if ((*s)->identifier->MatchesSeqId(**i)) { rejected = true; break; } } if (rejected) break; } } if (rejected) continue; wxString description((*s)->identifier->ToString().c_str()); if ((*s)->description.size() > 0) description += wxString(" ") + (*s)->description.c_str(); seqsDescrs.resize(seqsDescrs.size() + 1); seqsDescrs.back().first = *s; seqsDescrs.back().second = description; } } // sort by identifier stable_sort(seqsDescrs.begin(), seqsDescrs.end(), CompareSequencesByIdentifier); // user dialogs for selection and reason wxString *choices = new wxString[seqsDescrs.size()]; int choice; for (choice=0; choice<seqsDescrs.size(); ++choice) choices[choice] = seqsDescrs[choice].second; choice = wxGetSingleChoiceIndex("Reject which sequence?", "Reject Sequence", seqsDescrs.size(), choices, this); if (choice >= 0) { wxString message = "Are you sure you want to reject this sequence?\n\n"; message += choices[choice]; message += "\n\nIf so, enter a brief reason why:"; wxString reason = wxGetTextFromUser(message, "Reject Sequence", "", this); if (reason.size() == 0) { wxMessageBox("Reject action cancelled!", "", wxOK | wxICON_INFORMATION, this); } else { int purge = wxMessageBox("Do you want to purge all instances of this sequence " " from the multiple alignment and update list?", "", wxYES_NO | wxICON_QUESTION, this); // finally, actually perform the rejection+purge glCanvas->structureSet-> RejectAndPurgeSequence(seqsDescrs[choice].first, reason.c_str(), purge == wxYES); } } break; } }}void StructureWindow::OnAdjustView(wxCommandEvent& event){ glCanvas->SetCurrent(); switch (event.GetId()) { case MID_ZOOM_IN: glCanvas->renderer->ChangeView(OpenGLRenderer::eZoomIn); break; case MID_ZOOM_OUT: glCanvas->renderer->ChangeView(OpenGLRenderer::eZoomOut); break; case MID_RESET: glCanvas->renderer->ResetCamera(); break; case MID_RESTORE: glCanvas->renderer->RestoreSavedView(); break; case MID_FIRST_FRAME: glCanvas->renderer->ShowFirstFrame(); break; case MID_LAST_FRAME: glCanvas->renderer->ShowLastFrame(); break; case MID_NEXT_FRAME: glCanvas->renderer->ShowNextFrame(); break; case MID_PREV_FRAME: glCanvas->renderer->ShowPreviousFrame(); break; case MID_ALL_FRAMES: glCanvas->renderer->ShowAllFrames(); break; case MID_STEREO: glCanvas->renderer->EnableStereo(menuBar->IsChecked(MID_STEREO)); break; default: break; } glCanvas->Refresh(false);}void StructureWindow::OnShowHide(wxCommandEvent& event){ if (glCanvas->structureSet) { switch (event.GetId()) { case MID_SHOW_HIDE: { vector < string > structureNames; vector < bool > structureVisibilities; glCanvas->structureSet->showHideManager->GetShowHideInfo(&structureNames, &structureVisibilities); wxString *titles = new wxString[structureNames.size()]; for (int i=0; i<structureNames.size(); ++i) titles[i] = structureNames[i].c_str(); ShowHideDialog dialog( titles, &structureVisibilities, glCanvas->structureSet->showHideManager, false, this, -1, "Show/Hide Structures", wxPoint(200, 50)); dialog.ShowModal(); //delete titles; // apparently deleted by wxWindows break; } case MID_SELECT_MOLECULE: { if (!glCanvas->structureSet || glCanvas->structureSet->objects.size() > 1) return; wxString idStr = wxGetTextFromUser("Enter an MMDB molecule ID or PDB code:", "Select molecule"); if (idStr.size() == 0) return; unsigned long num; bool isNum = idStr.ToULong(&num); if (!isNum) idStr.MakeUpper(); // PDB names are all caps GlobalMessenger()->RemoveAllHighlights(true); ChemicalGraph::MoleculeMap::const_iterator m, me = glCanvas->structureSet->objects.front()->graph->molecules.end(); for (m=glCanvas->structureSet->objects.front()->graph->molecules.begin(); m!=me; ++m) { if ((isNum && m->second->id == (int) num) || (!isNum && ( ((m->second->type == Molecule::eDNA || m->second->type == Molecule::eRNA || m->second->type == Molecule::eProtein || m->second->type == Molecule::eBiopolymer) && idStr.Cmp(m->second->name.c_str()) == 0) || ((m->second->type == Molecule::eSolvent || m->second->type == Molecule::eNonpolymer || m->second->type == Molecule::eOther) && m->second->residues.size() == 1 && (((wxString) m->second->residues.begin()->second-> nameGraph.c_str()).Strip(wxString::both) == idStr))))) { if (m->second->sequence) { GlobalMessenger()->AddHighlights(m->second->sequence, 0, m->second->sequence->Length() - 1); } else { Molecule::ResidueMap::const_iterator r, re = m->second->residues.end(); for (r=m->second->residues.begin(); r!=re; ++r) GlobalMessenger()->ToggleHighlight(m->second, r->second->id); } } } break; } case MID_SHOW_ALL: glCanvas->structureSet->showHideManager->MakeAllVisible(); break; case MID_SHOW_DOMAINS: glCanvas->structureSet->showHideManager->ShowAlignedDomains(glCanvas->structureSet); break; case MID_SHOW_ALIGNED: glCanvas->structureSet->showHideManager->ShowResidues(glCanvas->structureSet, true); break; case MID_SHOW_UNALIGNED_ALL: glCanvas->structureSet->showHideManager->ShowResidues(glCanvas->structureSet, false); break; case MID_SHOW_UNALIGNED_ALN_DOMAIN: glCanvas->structureSet->showHideManager-> ShowUnalignedResiduesInAlignedDomains(glCanvas->structureSet); break; case MID_SHOW_SELECTED_RESIDUES: glCanvas->structureSet->showHideManager->ShowSelectedResidues(glCanvas->structureSet); break; case MID_SHOW_SELECTED_DOMAINS: glCanvas->structureSet->showHideManager->ShowDomainsWithHighlights(glCanvas->structureSet); break; } }}void StructureWindow::OnAlignStructures(wxCommandEvent& event){ if (glCanvas->structureSet) { glCanvas->structureSet->alignmentManager->RealignAllSlaveStructures(); glCanvas->SetCurrent(); glCanvas->Refresh(false); }}#define RENDERING_SHORTCUT(type, menu) \ glCanvas->structureSet->styleManager->SetGlobalRenderingStyle(StyleSettings::type); \ SetRenderingMenuFlag(menu); \ break#define COLORING_SHORTCUT(type, menu) \ glCanvas->structureSet->styleManager->SetGlobalColorScheme(StyleSettings::type); \ SetColoringMenuFlag(menu); \ breakvoid StructureWindow::OnSetStyle(wxCommandEvent& event){ if (glCanvas->structureSet) { glCanvas->SetCurrent(); switch (event.GetId()) { case MID_EDIT_STYLE: if (!glCanvas->structureSet->styleManager->EditGlobalStyle(this)) return; SetRenderingMenuFlag(0); SetColoringMenuFlag(0); break; case MID_ANNOTATE: if (!glCanvas->structureSet->styleManager->EditUserAnnotations(this)) return; break; case MID_WORM: RENDERING_SHORTCUT(eWormShortcut, MID_WORM); case MID_TUBE: RENDERING_SHORTCUT(eTubeShortcut, MID_TUBE); case MID_WIRE: RENDERING_SHORTCUT(eWireframeShortcut, MID_WIRE); case MID_BNS: RENDERING_SHORTCUT(eBallAndStickShortcut, MID_BNS); case MID_SPACE: RENDERING_SHORTCUT(eSpacefillShortcut, MID_SPACE); case MID_SC_TOGGLE: RENDERING_SHORTCUT(eToggleSidechainsShortcut, 0); case MID_SECSTRUC: COLORING_SHORTCUT(eSecondaryStructureShortcut, MID_SECSTRUC); case MID_ALIGNED: COLORING_SHORTCUT(eAlignedShortcut, MID_ALIGNED); case MID_IDENTITY: COLORING_SHORTCUT(eIdentityShortcut, MID_IDENTITY); case MID_VARIETY: COLORING_SHORTCUT(eVarietyShortcut, MID_VARIETY); case MID_WGHT_VAR: COLORING_SHORTCUT(eWeightedVarietyShortcut, MID_WGHT_VAR); case MID_INFO: COLORING_SHORTCUT(eInformationContentShortcut, MID_INFO); case MID_FIT: COLORING_SHORTCUT(eFitShortcut, MID_FIT); case MID_BLOCK_FIT: COLORING_SHORTCUT(eBlockFitShortcut, MID_BLOCK_FIT); case MID_BLOCK_Z_FIT: COLORING_SHORTCUT(eBlockZFitShortcut, MID_BLOCK_Z_FIT); case MID_BLOCK_ROW_FIT: COLORING_SHORTCUT(eBlockRowFitShortcut, MID_BLOCK_ROW_FIT); case MID_OBJECT: COLORING_SHORTCUT(eObjectShortcut, MID_OBJECT); case MID_DOMAIN: COLORING_SHORTCUT(eDomainShortcut, MID_DOMAIN); case MID_MOLECULE: COLORING_SHORTCUT(eMoleculeShortcut, MID_MOLECULE); case MID_RAINBOW: COLORING_SHORTCUT(eRainbowShortcut, MID_RAINBOW); case MID_HYDROPHOB: COLORING_SHORTCUT(eHydrophobicityShortcut, MID_HYDROPHOB); case MID_CHARGE: COLORING_SHORTCUT(eChargeShortcut, MID_CHARGE); case MID_TEMP: COLORING_SHORTCUT(eTemperatureShortcut, MID_TEMP); case MID_ELEMENT: COLORING_SHORTCUT(eElementShortcut, MID_ELEMENT); default: return; } glCanvas->structureSet->styleManager->CheckGlobalStyleSettings(); GlobalMessenger()->PostRedrawAllStructures(); GlobalMessenger()->PostRedrawAllSequenceViewers(); }}void StructureWindow::SetRenderingMenuFlag(int which){ menuBar->Check(MID_WORM, (which == MID_WORM)); menuBar->Check(MID_TUBE, (which == MID_TUBE)); menuBar->Check(MID_WIRE, (which == MID_WIRE)); menuBar->Check(MID_BNS, (which == MID_BNS)); menuBar->Check(MID_SPACE, (which == MID_SPACE));}void StructureWindow::SetColoringMenuFlag(int which){ menuBar->Check(MID_SECSTRUC, (which == MID_SECSTRUC)); menuBar->Check(MID_ALIGNED, (which == MID_ALIGNED)); menuBar->Check(MID_IDENTITY, (which == MID_IDENTITY)); menuBar->Check(MID_VARIETY, (which == MID_VARIETY)); menuBar->Check(MID_WGHT_VAR, (which == MID_WGHT_VAR)); menuBar->Check(MID_INFO, (which == MID_INFO)); menuBar->Check(MID_FIT, (which == MID_FIT)); menuBar->Check(MID_BLOCK_FIT, (which == MID_BLOCK_FIT)); menuBar->Check(MID_BLOCK_Z_FIT, (which == MID_BLOCK_Z_FIT)); menuBar->Check(MID_BLOCK_ROW_FIT, (which == MID_BLOCK_ROW_FIT)); menuBar->Check(MID_OBJECT, (which == MID_OBJECT)); menuBar->Check(MID_DOMAIN, (which == MID_DOMAIN)); menuBar->Check(MID_MOLECULE, (which == MID_MOLECULE)); menuBar->Check(MID_RAINBOW, (which == MID_RAINBOW)); menuBar->Check(MID_HYDROPHOB, (which == MID_HYDROPHOB)); menuBar->Check(MID_CHARGE, (which == MID_CHARGE)); menuBar->Check(MID_TEMP, (which == MID_TEMP)); menuBar->Check(MID_ELEMENT, (which == MID_ELEMENT));}bool StructureWindow::LoadData(const char *filename, bool force, CNcbi_mime_asn1 *mimeData){ SetCursor(*wxHOURGLASS_CURSOR); glCanvas->SetCurrent();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -