예제 #1
0
void CTimeBarScale::DrawScale()
{
    int iCount = m_pTimeBarFrame->GetFrameCountForDraw();
    SetBackgroundStyle(wxBG_STYLE_PAINT);
    wxAutoBufferedPaintDC ScaleDC(this); 
    static const uint32_t ScaleTextOffset = 5;
    wxPoint ViewStart = m_pTimeBarFrame->GetItemContainer()->GetViewStart();
    wxRect ScaleRect = GetRect();
    int iCellWidth = m_pTimeBarFrame->GetCellWidth();
    int iTextPositionX = 0;
    int iTextPositionY = ScaleRect.height + SCALETEXTOFFSETY;
    int iScaleLineLength = ScaleRect.height - SCALELINELENGTHOFFSET;
    int nOffset = iCellWidth * 0.5f;
    ScaleDC.SetPen(*wxWHITE_PEN);
    ScaleDC.DrawRectangle(ScaleRect);
    ScaleDC.SetPen(*wxBLACK_PEN);
    ScaleDC.SetFont(*wxSMALL_FONT);
    for (int i = 0; i < iCount; ++i)
    {
        iTextPositionX = i*iCellWidth + nOffset;
        int iLineHeight = iScaleLineLength;
        if ((ViewStart.x + i) % ScaleTextOffset == 0)
        {
            wxString strText = wxString::Format(_T("%d"), i + ViewStart.x);
            ScaleDC.DrawText(strText, iTextPositionX - ScaleDC.GetTextExtent(strText).x * 0.5f, iTextPositionY);
            iLineHeight -= 4;
        }
        ScaleDC.DrawLine(iTextPositionX, ScaleRect.height, iTextPositionX, iLineHeight);
    }
    int iPositionX = m_pTimeBarFrame->GetCursorPos() * iCellWidth - ViewStart.x * iCellWidth + nOffset;
    if (iPositionX >= 0)
    {
        wxPen pen = m_pTimeBarFrame->IsEnableFramePanel() ? *wxRED_PEN : *wxGREY_PEN;
        pen.SetWidth(CURSORWIDTH);
        ScaleDC.SetPen(pen);
        ScaleDC.DrawLine(iPositionX, ScaleRect.height, iPositionX, iScaleLineLength - 4);
    }
}
예제 #2
0
void CTimeBarItem::DrawItem()
{
    static const size_t GrayCellOffset = 5;
    SetBackgroundStyle(wxBG_STYLE_PAINT);
    wxAutoBufferedPaintDC ScaleDC(this); 
    wxRect ItemRect = GetRect();
    CTimeBarItemContainer* pContainer = (CTimeBarItemContainer*)GetParent(); 
    wxPoint ViewStart = pContainer->GetViewStart();
    wxSize size = pContainer->GetSize();
    int cursorpositionx = pContainer->GetTimeBarFrameWindow()->GetCursorPositionX();
    int iWidith = pContainer->GetCellWidth();
    int iCount  = size.x / iWidith;
    iCount += ViewStart.x - 1;
    int iDrawRectWdith = iWidith +1;
    int iPositionX = -1;
    int iDefaultCellHeight = ItemRect.height + 1;
    int iCellDataHeight = ItemRect.height - 2 * DATACELLOFFSET;

    ScaleDC.SetPen(*wxLIGHT_GREY);
    ScaleDC.DrawRectangle(ItemRect);
    for(int i = ViewStart.x; i < iCount; i++)
    {
        iPositionX = i * iWidith;
        bool bHasData = HasData(i);
        bool bHasSelected = HasSelected(i);
        if (!bHasData)
        {
            if (bHasSelected)
            {
                ScaleDC.SetBrush(*wxBLUE);
                ScaleDC.DrawRectangle(iPositionX, 0, iDrawRectWdith, iDefaultCellHeight);
                ScaleDC.SetBrush(*wxWHITE);
            }
            else
            {
                if (i % GrayCellOffset == 0)
                {
                    ScaleDC.SetBrush(*wxLIGHT_GREY);
                    ScaleDC.DrawRectangle(iPositionX, 0, iDrawRectWdith, iDefaultCellHeight);
                    ScaleDC.SetBrush(*wxWHITE);
                }
                else
                {
                    ScaleDC.DrawRectangle(iPositionX, 0, iDrawRectWdith, iDefaultCellHeight);
                }
            }
            
        }
        else//if(bHasData)
        {
            if (bHasSelected)
            {
                DrawDefaultItem(&ScaleDC, i, iPositionX, iDrawRectWdith, iDefaultCellHeight);
                ScaleDC.SetBrush(*wxBLUE);
                ScaleDC.DrawRectangle(iPositionX, DATACELLOFFSET, iDrawRectWdith, iCellDataHeight);
                ScaleDC.SetBrush(*wxWHITE);
            }
            else
            {
                DrawDefaultItem(&ScaleDC, i, iPositionX, iDrawRectWdith, iDefaultCellHeight);
                ScaleDC.SetBrush(*wxGREEN);
                ScaleDC.DrawRectangle(iPositionX, DATACELLOFFSET, iDrawRectWdith, iCellDataHeight);
                ScaleDC.SetBrush(*wxWHITE);
            }
        }
    }
    wxPen pen = *wxRED_PEN;
    pen.SetWidth(CURSORWIDTH);
    ScaleDC.SetPen(pen);
    ScaleDC.DrawLine(cursorpositionx, 0, cursorpositionx, ItemRect.height);
}