void CTimeBarScale::OnMouse( wxMouseEvent& event ) { if (m_pTimeBarFrame->IsEnableFramePanel()) { CTimeBarItemContainer* pContiner = m_pTimeBarFrame->GetItemContainer(); if (event.ButtonDown(wxMOUSE_BTN_LEFT)) { if (!HasCapture()) { CaptureMouse(); } m_pTimeBarFrame->SetClickOnScalebar(true); wxPoint pstn = event.GetPosition(); int iScale = PointToScale(pstn); int iPositionX = iScale + pContiner->GetViewStart().x; m_pTimeBarFrame->SetCursorPos(iPositionX); m_pTimeBarFrame->RefreshControl(); } else if (event.ButtonUp(wxMOUSE_BTN_LEFT)) { if (HasCapture()) { ReleaseMouse(); } } else if (event.Dragging()) { wxPoint pstn = event.GetPosition(); { int iScale = PointToScale(pstn); int iPositionX = iScale + pContiner->GetViewStart().x; m_pTimeBarFrame->SetCursorPos(iPositionX); m_pTimeBarFrame->RefreshControl(); } } } }
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); }