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

📄 label.cpp

📁 ncbi源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
////// seq-annots are complicated////static void s_GetAnnotType(const CSeq_annot& annot, string* label){    const CSeq_annot::TData& annot_data = annot.GetData();    switch (annot_data.Which()) {    case CSeq_annot::TData::e_Ftable:        *label += "Feature Table";        break;    case CSeq_annot::TData::e_Align:        *label += "Alignment";        break;    case CSeq_annot::TData::e_Graph:        *label += "Graph";        break;    case CSeq_annot::TData::e_Ids:        *label += "IDs";        break;    case CSeq_annot::TData::e_Locs:        *label += "Locations";        break;    default:        *label = "Annotation";        return;    }}static void s_GetAnnotContent(const CSeq_annot& annot, string* label){    //    // check for formatted comments in descriptors first    //    if (annot.IsSetDesc()) {        ITERATE (CSeq_annot::TDesc::Tdata, iter, annot.GetDesc().Get()) {            switch ((*iter)->Which()) {            case CAnnotdesc::e_Title:                *label = (*iter)->GetTitle();                return;            default:                break;            }        }    }    //    // default handling    //    string str;    size_t items = 0;    const CSeq_annot::TData& annot_data = annot.GetData();    switch (annot_data.Which()) {    case CSeq_annot::TData::e_Ftable:        str = "Feature Table, ";        items = annot_data.GetFtable().size();        break;    case CSeq_annot::TData::e_Align:        str = "Alignment, ";        items = annot_data.GetAlign().size();        break;    case CSeq_annot::TData::e_Graph:        str = "Graph, ";        items = annot_data.GetGraph().size();        break;    case CSeq_annot::TData::e_Ids:        str = "IDs, ";        items = annot_data.GetIds().size();        break;    case CSeq_annot::TData::e_Locs:        str = "Locations, ";        items = annot_data.GetLocs().size();        break;    default:        *label = "Annotation";        return;    }    str += NStr::IntToString(items);    if (items != 1) {        str += " entries";    } else {        str += " entry";    }    *label += str;}class CSeq_annotHandler : public ILabelHandler{public:    void GetLabel(const CObject& obj, string* label,                  CLabel::ELabelType type, CScope* scope) const    {        const CSeq_annot* annot  = dynamic_cast<const CSeq_annot*> (&obj);        if ( !annot ) {            return;        }        switch (type) {        case CLabel::eType:            s_GetAnnotType(*annot, label);            return;        case CLabel::eContent:            s_GetAnnotContent(*annot, label);            return;        case CLabel::eBoth:            s_GetAnnotType(*annot, label);            *label += ": ";            s_GetAnnotContent(*annot, label);            break;        }    }};static void s_GetAlignmentType(const CSeq_align& align, string* label){    switch (align.GetSegs().Which()) {    default:    case CSeq_align::TSegs::e_not_set:        *label += "[Unknown]";        break;    case CSeq_align::TSegs::e_Denseg:        *label += "[Dense-seg]";        break;    case CSeq_align::TSegs::e_Dendiag:        *label += "[Dense-diag]";        break;    case CSeq_align::TSegs::e_Std:        *label += "[Standard-seg]";        break;    case CSeq_align::TSegs::e_Packed:        *label += "[Packed-seg]";        break;    case CSeq_align::TSegs::e_Disc:        *label += "[Discontinuous]";        break;    }}static void s_GetAlignmentContent(const CSeq_align& align, string* label,                                  CScope* scope){    switch (align.GetSegs().Which()) {    default:    case CSeq_align::TSegs::e_not_set:        *label += "unknown contents";        break;    case CSeq_align::TSegs::e_Denseg:        {{            string str;            size_t seqs = align.GetSegs().GetDenseg().GetIds().size();            if (seqs < 4) {                ITERATE (CDense_seg::TIds, iter,                         align.GetSegs().GetDenseg().GetIds()) {                    const CSeq_id* best_id = *iter;                    if (scope) {                        CBioseq_Handle handle =                            scope->GetBioseqHandle(**iter);                        if ( !handle ) {                            continue;                        }                        best_id = &sequence::GetId(handle,                                                   sequence::eGetId_Best);                    }                    if ( !str.empty() ) {                        str += " x ";                    }                    best_id->GetLabel(&str, CSeq_id::eContent);                }            } else {                str = NStr::IntToString(seqs) + " sequences.";            }            *label += str;        }}        break;    case CSeq_align::TSegs::e_Dendiag:        *label += "[Dense-diag]";        break;    case CSeq_align::TSegs::e_Std:        *label += "[Standard-seg]";        break;    case CSeq_align::TSegs::e_Packed:        *label += "[Packed-seg]";        break;    case CSeq_align::TSegs::e_Disc:        *label += "[Discontinuous]";        break;    }}class CSeq_alignHandler : public ILabelHandler{public:    void GetLabel(const CObject& obj, string* label,                  CLabel::ELabelType type, CScope* scope) const    {        const CSeq_align* align  = dynamic_cast<const CSeq_align*> (&obj);        if ( !align ) {            return;        }        switch (type) {        case CLabel::eType:            s_GetAlignmentType(*align, label);            return;        case CLabel::eContent:            s_GetAlignmentContent(*align, label, scope);            return;        case CLabel::eBoth:            s_GetAlignmentType(*align, label);            *label += ' ';            s_GetAlignmentContent(*align, label, scope);            break;        }    }};#if 0// retrieve a string label for an abstract objectstring CSeqUtils::GetLabel(const CObject& obj, CScope* scope){    {{        // standard seq-annot label formatting        const CSeq_annot* annot  = dynamic_cast<const CSeq_annot*> (&obj);        if (annot) {            const CSeq_annot::TData& annot_data = annot->GetData();            string label;            size_t items = 0;            switch (annot_data.Which()) {            case CSeq_annot::TData::e_Ftable:                label = "Feature Table, ";                items = annot_data.GetFtable().size();                break;            case CSeq_annot::TData::e_Align:                label = "Alignment, ";                items = annot_data.GetAlign().size();                break;            case CSeq_annot::TData::e_Graph:                label = "Graph, ";                items = annot_data.GetGraph().size();                break;            case CSeq_annot::TData::e_Ids:                label = "IDs, ";                items = annot_data.GetIds().size();                break;            case CSeq_annot::TData::e_Locs:                label = "Locations, ";                items = annot_data.GetLocs().size();                break;            default:                return "Annotation";            }            label += NStr::IntToString(items);            if (items != 1) {                label += " entries";            } else {                label += " entry";            }            return label;        }    }}    {{        // standard seq-align label formatting        const CSeq_align* align  = dynamic_cast<const CSeq_align*> (&obj);        if (align) {            string label;            switch (align->GetSegs().Which()) {            case CSeq_align::TSegs::e_not_set:                label = "Alignment: unknown type";                break;            case CSeq_align::TSegs::e_Denseg:                {{                    size_t seqs = align->GetSegs().GetDenseg().GetIds().size();                    if (seqs < 4) {                        ITERATE (CDense_seg::TIds, iter,                                 align->GetSegs().GetDenseg().GetIds()) {                            const CSeq_id* best_id = *iter;                            if (scope) {                                CBioseq_Handle handle =                                    scope->GetBioseqHandle(**iter);                                if ( !handle ) {                                    continue;                                }                                best_id =                                    &sequence::GetId(handle,                                                     sequence::eGetId_Best);                            }                            if ( !label.empty() ) {                                label += " x ";                            }                            best_id->GetLabel(&label,                                              CSeq_id::eContent);                        }                        label = "Alignment: " + label;                    } else {                        label = "Alignment: " +                            NStr::IntToString(seqs) +                            " sequences.";                    }                }}                break;            case CSeq_align::TSegs::e_Dendiag:                label = "Alignment: dense-diagonal";                break;            case CSeq_align::TSegs::e_Std:                label = "Alignment: standard-seg";                break;            case CSeq_align::TSegs::e_Packed:                label = "Alignment: packed-seg";                break;            case CSeq_align::TSegs::e_Disc:                label = "Alignment: discontinuous";                break;            }            return label;        }    }}    {{        // generic unhandled CSerialObject        const CSerialObject* ser_obj =            dynamic_cast<const CSerialObject*> (&obj);        if (ser_obj) {            return ser_obj->GetThisTypeInfo()->GetName();        }    }}    /*{{  // should never be called that way: GetLabel(CLayoutObject obj);        // layout objects        const CLayoutObject* layout = dynamic_cast<const CLayoutObject*>(&obj);        if (layout) {            return GetLabel(layout->GetObject()), scope);        }    }}*/    // generic object handling    return ("Object");}#endif//// force registration at load//struct SForceRegister{    SForceRegister()    {        CLabel::RegisterLabelHandler(*CSeq_id::GetTypeInfo(),     *new CSeq_idHandler());        CLabel::RegisterLabelHandler(*CSeq_loc::GetTypeInfo(),    *new CSeq_locHandler());        CLabel::RegisterLabelHandler(*CBioseq::GetTypeInfo(),     *new CBioseqHandler());        CLabel::RegisterLabelHandler(*CBioseq_set::GetTypeInfo(), *new CBioseq_setHandler());        CLabel::RegisterLabelHandler(*CSeq_feat::GetTypeInfo(),   *new CSeq_featHandler());        CLabel::RegisterLabelHandler(*CSeq_entry::GetTypeInfo(),  *new CSeq_entryHandler());        CLabel::RegisterLabelHandler(*CSeq_annot::GetTypeInfo(),  *new CSeq_annotHandler());        CLabel::RegisterLabelHandler(*CSeq_align::GetTypeInfo(),  *new CSeq_alignHandler());    }};static SForceRegister sm_ForceRegistration;END_NCBI_SCOPE/* * =========================================================================== * $Log: label.cpp,v $ * Revision 1000.0  2004/06/01 21:20:46  gouriano * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4 * * Revision 1.4  2004/05/21 22:27:44  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.3  2004/05/14 14:23:15  dicuccio * When determining a label for a seq-id, only try to resolve GI-based seq-ids; * all others can be considered "good enough" * * Revision 1.2  2004/05/07 15:38:54  dicuccio * Fixed alignment labels lost in previous commit * * Revision 1.1  2004/04/30 11:48:16  dicuccio * Initial commit - split out from src/gui/utils * * Revision 1.1  2004/04/20 19:16:33  dicuccio * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

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