default_layoutpolicy.cpp
来自「ncbi源码」· C++ 代码 · 共 567 行 · 第 1/2 页
CPP
567 行
lay_objects.AddRow(temp2.GetRow(idx)); }}void CDefaultLayoutPolicy::x_LayoutLabels(const CLayoutEngine::TObjects& objects, CLayout& layout, int col_count){ // clear our layout to start layout.Clear(); int idx = 0; CLayout::TLayoutRow row; ITERATE (CLayoutEngine::TObjects, iter, objects) { row.push_back(*iter); if (++idx >= col_count) { idx = 0; layout.AddRow(row); // add row to layout row.clear(); // start new empty row } } layout.AddRow(row); // add last partial row}void CDefaultLayoutPolicy::GetSeqMaps(CLayoutEngine::TObjects& maps, const TSeqRange& range){ maps.clear(); for (size_t levels = 0; levels < 4; ++levels) { CConstRef<CSeqMap> seq_map(&m_Handle.GetSeqMap()); CSeqMap::const_iterator seg = seq_map->ResolvedRangeIterator(&m_Handle.GetScope(), range.GetFrom(), range.GetLength(), eNa_strand_plus, levels); for ( ; seg; ++seg ) { TSeqRange map_range; switch (seg.GetType()) { case CSeqMap::eSeqRef: /** // FIXME: this will need to wait for ID2, it's too expensive {{ CSeq_id_Handle s_hndl = seg.GetRefSeqid(); CConstRef<CSeq_id> sid = s_hndl.GetSeqId(); CBioseq_Handle handle = m_Handle.GetScope(). GetBioseqHandle(sid.GetObject()); _ASSERT(handle); CSeqVector s_vec = handle.GetSeqVector(CBioseq_Handle::eCoding_Iupac); TSeqPos from = seg.GetPosition() - seg.GetRefPosition(); TSeqPos length = s_vec.size(); map_range = TSeqRange(from, from + length); }} break; **/ case CSeqMap::eSeqData: case CSeqMap::eSeqGap: map_range = TSeqRange(seg.GetPosition(), seg.GetEndPosition()); break; case CSeqMap::eSeqEnd: _ASSERT("Unexpected END segment" && 0); break; default: _ASSERT("Unexpected segment type" && 0); break; } TSeqRange ref_range(seg.GetPosition(), seg.GetEndPosition()); try { CRef<CLayoutObject> mref( new CLayoutSeqMap(seg.GetRefSeqid(), map_range, ref_range) ); maps.push_back(mref); } catch(...) { } } if (maps.size() != 0) { break; } }}void CDefaultLayoutPolicy::x_PrepareDetailedView(CGlPane& pane, CLayout& lay_objects){ TModelRect rcV = pane.GetVisibleRect(); TSeqRange range( TSeqPos(rcV.Left()), TSeqPos(rcV.Right()) ); CLayoutFeat::TFeatList features; lay_objects.Clear(); // retrieve and sort all features. we are only interested in a few // subtypes, but we'll sort that out below CLayoutFeat::TFeatList feats; CLayoutFeatLabel::TFeatLabelList feat_labels; CLayout other_feat_layout; typedef map<int, CLayoutEngine::TObjects> TFeatMap; TFeatMap other_features; CSeqUtils::GetFeatures(m_Handle, range, CSeqFeatData::e_not_set, feats); bool show_prot = m_ConfigSettings->GetShowProtProd(); bool show_aln = m_ConfigSettings->GetShowAlignments(); bool smear_aln = m_ConfigSettings->GetSmearAlignments(); bool show_graphs = m_ConfigSettings->GetShowGraphs(); bool show_feat_labels = false; // ToDO: get from config NON_CONST_ITERATE (CLayoutFeat::TFeatList, feature_iter, feats) { CLayoutFeat& feat = **feature_iter; CRef<CLayoutFeat> pfeat(&feat); CRef<CLayoutObject> obj(*feature_iter); CRef<CLayoutFeatLabel> lbl (new CLayoutFeatLabel(feat.GetMappedFeature())); const CSeqFeatData& data = feat.GetFeature().GetData(); bool show = m_ConfigSettings->GetShow(data.Which(), data.GetSubtype()); if (!show) { continue; } //bool hist = m_ConfigSettings->GetHistogram(data.Which(), data.GetSubtype()); feat_labels.push_back(lbl); // store for sorting switch (data.Which()) { case CSeqFeatData::e_Gene: case CSeqFeatData::e_Rna: features.push_back(pfeat); break; case CSeqFeatData::e_Cdregion: features.push_back(pfeat); // add protein product for this CDS (if exists) if (show_prot && pfeat->GetFeature().IsSetProduct()) { CRef<CLayoutFeat> prot (new CLayoutProtProd(m_Handle.GetScope(), feat.GetMappedFeature())); features.push_back(prot); } break; default: other_features[data.Which()].push_back(obj); break; } } // link our features together CSeqUtils::LinkFeatures(features); // and finally, do our layout. this requres translation of the objects CLayoutEngine::TObjects objs, tmp_obj; NON_CONST_ITERATE (CLayoutFeat::TFeatList, iter, features) { CRef<CLayoutObject> obj(*iter); objs.push_back(obj); } C2DLayoutEngine engine; engine.SetMinDist( x_GetMinSpacing(pane) ); engine.Layout(tmp_obj, lay_objects); // Add Segment Map if (m_ConfigSettings->GetShowSegmentMap()) { // add Segment map x_AddSeqSegmentMap(pane, lay_objects, range); } // Add Sequence Bar x_AddSequenceBar(pane, lay_objects, range); if (show_graphs) { // add graphs CLayout graph_layout; CLayoutEngine::TObjects graph_objs; CSeqUtils::GetGraphs(m_Handle, range, graph_objs); engine.Layout(graph_objs, graph_layout); lay_objects.Append(graph_layout); } CLayout temp_layout; engine.Layout(objs, temp_layout); lay_objects.Append(temp_layout); ITERATE (TFeatMap, feat_map_iter, other_features) { //CLayout temp_layout; engine.Layout(feat_map_iter->second, temp_layout); other_feat_layout.Append(temp_layout); } lay_objects.Append(other_feat_layout); if (show_aln) { // add alignments CLayout alignment_layout; CLayoutEngine::TObjects aln_objs; if (smear_aln) { CSeqUtils::GetAlignmentSmears(m_Handle, range, pane.GetScaleX(), aln_objs); } else { CSeqUtils::GetAlignments(m_Handle, range, aln_objs); } engine.Layout(aln_objs, alignment_layout); lay_objects.Append(alignment_layout); } if (show_feat_labels) { // add feature labels x_AddFeatureLabelsOverview(feat_labels, pane, lay_objects); }}TSeqPos CDefaultLayoutPolicy::x_GetMinSpacing(CGlPane& pane) const{ // minimum is 2 pixels // m_ZoomX is pixels per base // we need to return bases return TSeqPos( pane.UnProjectWidth(2) );}END_NCBI_SCOPE/* * =========================================================================== * $Log: default_layoutpolicy.cpp,v $ * Revision 1000.3 2004/06/01 21:12:29 gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13 * * Revision 1.13 2004/05/21 22:27:55 gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.12 2004/05/11 17:57:42 lebedev * Render Sequence Graphs on top of all Layout Objects * * Revision 1.11 2004/05/10 16:00:15 lebedev * Aware of Show/Hide segment maps configuration option. * * Revision 1.10 2004/05/03 13:23:58 dicuccio * gui/utils --> gui/objutils where needed * * Revision 1.9 2004/04/16 14:51:35 dicuccio * SetConfig() takes pointer, not CRef<> * * Revision 1.8 2004/04/14 11:25:48 lebedev * Added rendering of Mate Pairs. * * Revision 1.7 2004/04/07 13:10:33 dicuccio * Split GetAnnotSelector() into two APIs for features (featyre type or feature * subtype). Formatting changes. * * Revision 1.6 2004/03/23 12:33:55 lebedev * Made sequence and histograms bars a layout objects in the object panel. * Made segment map a number of layout objects. Get rid of fixed size rows in the object panel. * * Revision 1.5 2004/03/22 16:54:57 rsmith * get alignments smears. * * Revision 1.4 2004/03/11 17:53:06 dicuccio * Deprecated typedefs TPosition, TDimension, TIndex, TColor. Use TSeqRange instead of TRange * * Revision 1.3 2004/03/02 15:29:13 lebedev * Switch to detailed mode if reached certain number of * genes in visible range. * * Revision 1.2 2004/02/24 14:48:25 lebedev * Support for new types of layout objects added * * Revision 1.1 2004/02/13 18:10:46 lebedev * Initial revision * * =========================================================================== */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?