default_policy.cpp

来自「ncbi源码」· C++ 代码 · 共 1,851 行 · 第 1/5 页

CPP
1,851
字号
    case eDrawObjectLabel:        if (inrc.Width() < pane.UnProjectWidth(m_MinLabelWidth)) {            break;        }        if (selected) {            x_Color(CSeqGraphicColorConfig::eSelLabel_Alignment);        } else {            x_Color(CSeqGraphicColorConfig::eLabel_Alignment);        }        {{            string title;            string out;            // title = "alignment label"; // TESTING             x_GetTitle(align, &title);                        out = m_Font_Helv10.Truncate(title.c_str(), inrc.Width() / scaleX);            GLfloat xM = x_CenterText(pane, inrc,                                       m_Font_Helv10.TextWidth(out.c_str()));            GLfloat title_y  = row_y + m_Font_Helv10.TextHeight() + 1;            m_Font_Helv10.TextOut(xM - offsetX, title_y - offsetY, out.c_str());        }}        break;    }}void CDefaultPolicy::x_DrawSeqGraph(CGlPane& pane, const CLayoutGraph* graph,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    const TModelRect& rcV = pane.GetVisibleRect();    const CMappedGraph& gr = graph->GetGraph();    const CSeq_graph::C_Graph& gr_data = gr.GetGraph();        TModelUnit offsetX = pane.GetOffsetX();    TModelUnit offsetY = pane.GetOffsetY();    TSeqRange range = graph->GetLocation().GetTotalRange();    TSeqPos from = range.GetFrom();    TSeqPos to   = range.GetTo();        TModelUnit one_row = x_GetRowHeight(pane, graph, selected);    TModelRect frc;    frc.SetLeft(from);    frc.SetRight(to);    TModelRect inrc = frc.IntersectWith(rcV);    GLfloat scaleX = pane.GetScaleX();    switch (mode) {    default:        break;    case eDrawObjectLines:                x_Color(CSeqGraphicColorConfig::eFG_SeqGraph);        switch (gr_data.Which()) {        case CSeq_graph::TGraph::e_Byte:            x_PreparePlot(pane, gr_data.GetByte(), range, row_y, one_row);            break;        case CSeq_graph::TGraph::e_Real:            x_PreparePlot(pane, gr_data.GetReal(), range, row_y, one_row);            break;        case CSeq_graph::TGraph::e_Int:            x_PreparePlot(pane, gr_data.GetInt(), range, row_y, one_row);            break;        default:            return;        }        // Draw selection (two rows!)        if (selected) {            x_Color(CSeqGraphicColorConfig::eSelection_SeqGraph);            x_DrawSelection(pane, from, row_y, to, row_y + one_row);        }        break;    case eDrawObjectQuads:        // blue quad for the graph        x_Color(CSeqGraphicColorConfig::eBG_SeqGraph);        x_DrawQuad(pane, from, row_y+1, to + 1, row_y + one_row-2);        break;    case eDrawObjectLabel:        if (gr.IsSetTitle()) {            if (selected) {                x_Color(CSeqGraphicColorConfig::eSelLabel_SeqGraph);            } else {                x_Color(CSeqGraphicColorConfig::eLabel_SeqGraph);            }            int min_v = 0, max_v = 0;            switch (gr_data.Which()) {            case CSeq_graph::TGraph::e_Byte:                    min_v = int(gr_data.GetByte().GetMin());                    max_v = int(gr_data.GetByte().GetMax());                    break;                case CSeq_graph::TGraph::e_Real:                    min_v = int(gr_data.GetReal().GetMin());                    max_v = int(gr_data.GetReal().GetMax());                    break;                case CSeq_graph::TGraph::e_Int:                    min_v = int(gr_data.GetInt().GetMin());                    max_v = int(gr_data.GetInt().GetMax());                    break;            }            string out;            string title = gr.GetTitle() + "  Min: " +                     NStr::UIntToString(min_v) + " / Max: " +                     NStr::UIntToString(max_v);            out = m_Font_Helv10.Truncate(title.c_str(), inrc.Width() / scaleX);            GLfloat xM = x_CenterText(pane, inrc,                                   m_Font_Helv10.TextWidth(out.c_str()));            GLfloat title_y  = row_y + m_Font_Helv10.TextHeight() + 1;            m_Font_Helv10.TextOut(xM - offsetX, title_y - offsetY, out.c_str());        }        break;    }}void CDefaultPolicy::x_DrawHistogram(CGlPane& pane, const CLayoutHistogram* hist,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    //if (mode != eDrawObjectLabel) {    if (mode == eDrawObjectLines) { // that's temporary, until a new EObj_IterMode model be ready        const TVPRect&    rcP = pane.GetViewport();        const TModelRect& rcV = pane.GetVisibleRect();                glEnd();                pane.Close();        pane.OpenPixels();            CGlColor color = m_ConfigSettings->GetColor(hist->Which(),                                                     hist->Subtype());        glColor4f(color.GetRed(), color.GetGreen(), color.GetBlue(), 0.65f);                GLfloat one_row = x_GetRowHeight(pane, hist, selected);        GLfloat height = one_row - 2;  // two pixels space        GLfloat yy2    = rcV.Bottom() + rcP.Bottom() - one_row - row_y + 1;                glBegin(GL_LINES);            glVertex2f(rcP.Left(),  yy2);            glVertex2f(rcP.Right(), yy2);        glEnd();            TSeqPos x = 0;        const CDensityMap<int>& densityMap = hist->GetDensityMap();        GLfloat max_val = densityMap.GetMax();                glBegin(GL_QUAD_STRIP);        ITERATE(CDensityMap<int>, dens_it, densityMap) {            GLfloat xx = x;            GLfloat yy1 = yy2 + height * (*dens_it) / max_val;            glVertex2f(xx, yy1);            glVertex2f(xx, yy2);            ++x;        }        glEnd();                pane.Close();        pane.OpenOrtho();        glBegin(GL_LINES);    }}void CDefaultPolicy::x_DrawSeqSegment(CGlPane& pane, const CLayoutSeqMap* seg,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    TSeqPos from = seg->GetLocation().GetTotalRange().GetFrom();    TSeqPos to   = seg->GetLocation().GetTotalRange().GetTo();    TSeqPos rfrom = seg->GetRefLocation().GetTotalRange().GetFrom();    TSeqPos rto   = seg->GetRefLocation().GetTotalRange().GetTo();    GLfloat one_row = x_GetRowHeight(pane, seg, selected);    GLfloat line_y1  = row_y + 1;    GLfloat line_y2  = line_y1 + one_row - 2;    switch (mode) {    default:        break;    case eDrawObjectLines:        // Draw selection        if (selected) {            x_Color(CSeqGraphicColorConfig::eSelection_SeqSegment);            x_DrawSelection(pane, from, line_y1, to, line_y2);        }        break;    case eDrawObjectQuads:        x_Color(CSeqGraphicColorConfig::eFG_SeqSegmentExc);        x_DrawQuad(pane, from, line_y1, to, line_y2);        x_Color(CSeqGraphicColorConfig::eFG_SeqSegmentInc);                x_DrawQuad(pane, rfrom, line_y1, rto, line_y2);        break;    case eDrawObjectLabel:        break;    }}void CDefaultPolicy::x_DrawSequence(CGlPane& pane, const CLayoutSequence* seqs,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    const TModelRect& rcV = pane.GetVisibleRect();    //const TModelRect& rcM = pane.GetModelLimitsRect();        TModelUnit offsetX = pane.GetOffsetX();    TModelUnit offsetY = pane.GetOffsetY();    TModelUnit left  = rcV.Left() - offsetX;    TModelUnit right = rcV.Right() - offsetX + 1;    TModelUnit top    = row_y - offsetY;    TModelUnit bottom = row_y + 16 - offsetY;        switch (mode) {    default:        break;    case eDrawObjectLines:        break;    case eDrawObjectQuads:        glColor3f(0.05f, 0.05f, 0.05f);        glVertex2f(left,  top);        glVertex2f(right, top);        glVertex2f(right, bottom);        glVertex2f(left,  bottom);            glColor3f(0.5f, 0.5f, 0.5f);        glVertex2f(left,  top + 1);        glVertex2f(right, top + 1);        glVertex2f(right, bottom - 1);        glVertex2f(left,  bottom - 1);        break;    case eDrawObjectLabel:        {{            GLfloat y = row_y + m_Font_Bitmap9x15.TextHeight() + 2 - offsetY;            string seq = seqs->GetSequence();            GLfloat x = TSeqPos(rcV.Left()) - offsetX + 0.5;            x_Color(CSeqGraphicColorConfig::eSeq_SequenceBar);            m_Font_Bitmap9x15                .ArrayTextOut(x, y, 1.0f, 0.0f, seq.c_str(),                               (float) pane.GetScaleX(), 0.0f);        }}        break;    }}void CDefaultPolicy::x_DrawComments(CGlPane& pane, const CLayoutComment* comm,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    const TModelRect& rcV = pane.GetVisibleRect();        TModelUnit offsetX = pane.GetOffsetX();    TModelUnit offsetY = pane.GetOffsetY();        GLfloat th = m_Font_Helv10.TextHeight();    GLfloat title_y = row_y + th + 1;    GLfloat off     = pane.GetModelLimitsRect().Top() > 0 ? th - 1 : 0;    switch (mode) {    default:        break;    case eDrawObjectLines:    case eDrawObjectQuads:        break;    case eDrawObjectLabel:        const string& out = comm->GetComment();        x_Color(CSeqGraphicColorConfig::eFG_Comment);        m_Font_Helv10.TextOut(rcV.Left() - offsetX, title_y - off - offsetY, out.c_str());        break;    }}void CDefaultPolicy::x_DrawMatePair(CGlPane& pane, const CLayoutMatePair* pr,                    GLfloat row_y, EObj_IterMode mode, bool selected) const{    const TModelRect& rcV = pane.GetVisibleRect();    // It's a vector of CRefs    const CLayoutMatePair::TAlignList& pw_aligns = pr->GetSeqAligns();    TModelUnit offsetX = pane.GetOffsetX();    TModelUnit offsetY = pane.GetOffsetY();    TSeqPos from = pr->GetLocation().GetTotalRange().GetFrom();    TSeqPos to   = pr->GetLocation().GetTotalRange().GetTo();    TModelRect frc;    frc.SetLeft(from);    frc.SetRight(to);    TModelRect inrc = frc.IntersectWith(rcV);    GLfloat scaleX = pane.GetScaleX();    GLfloat yy;    if (m_ConfigSettings->GetShowPWAlignLabels()) {        yy = row_y + m_Font_Helv10.TextHeight() + 4;    } else {        yy = row_y + 2;    }        // Set Colors based on Error code for Mate Pairs    CSeqGraphicColorConfig::EDisplayElement c_fg, c_seq, c_mis;    switch (pr->GetError()) {        case CLayoutMatePair::eError_Orientation:            c_fg  = CSeqGraphicColorConfig::eFG_MatePairOrientation;            c_seq = CSeqGraphicColorConfig::eSeq_MatePairOrientation;            c_mis = CSeqGraphicColorConfig::eSeq_MatePairMismatchOrientation;            break;        case CLayoutMatePair::eError_NonUnique:            c_fg  = CSeqGraphicColorConfig::eFG_MatePairNonUnique;            c_seq = CSeqGraphicColorConfig::eSeq_MatePairNonUnique;            c_mis = CSeqGraphicColorConfig::eSeq_MatePairMismatchNonUnique;            break;        case CLayoutMatePair::eError_Distance:            c_fg  = CSeqGraphicColorConfig::eFG_MatePairDistance;            c_seq = CSeqGraphicColorConfig::eSeq_MatePairDistance;            c_mis = CSeqGraphicColorConfig::eSeq_MatePairMismatchDistance;            break;        default:            c_fg  = CSeqGraphicColorConfig::eFG_MatePairNo;            c_seq = CSeqGraphicColorConfig::eSeq_MatePairNo;            c_mis = CSeqGraphicColorConfig::eSeq_MatePairMismatchNo;                        break;    }        switch (mode) {    default:        break;    case eDrawObjectLines:        // Draw each Pairwise  Alignment inside          ITERATE(CLayoutMatePair::TAlignList, iter, pw_aligns) {            bool has_sel  = selected ? pr->IsSelected(iter->GetPointer()) :                            selected;            x_DrawPWAlignElem(pane, iter->GetPointer(), row_y, mode,                               has_sel, c_fg, c_seq, c_mis);        }        // draw link between mate pairs        x_Color(CSeqGraphicColorConfig::eFG_MatePairLink);        for(size_t i = 0;  i != pw_aligns.size() - 1;  i++) {            TSeqRange r1 = pw_aligns[i]->GetLocation().GetTotalRange();            TSeqRange r2 = pw_aligns[i+1]->GetLocation().GetTotalRange();            TSeqPos from = r1.GetTo() < r2.GetFrom() ?                            r1.GetTo() : r2.GetTo();            TSeqPos to   = r1.GetTo() < r2.GetFrom() ?                            r2.GetFrom() : r1.GetFrom();            

⌨️ 快捷键说明

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