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 + -
显示快捷键?