void CSharedFilesCtrl::DrawAvailabilityBar(CKnownFile* file, wxDC* dc, const wxRect& rect ) const { // Reference to the availability list const ArrayOfUInts16& list = file->IsPartFile() ? ((CPartFile*)file)->m_SrcpartFrequency : file->m_AvailPartFrequency; wxPen old_pen = dc->GetPen(); wxBrush old_brush = dc->GetBrush(); bool bFlat = thePrefs::UseFlatBar(); wxRect barRect = rect; if (!bFlat) { // round bar has a black border, the bar itself is 1 pixel less on each border barRect.x ++; barRect.y ++; barRect.height -= 2; barRect.width -= 2; } static CBarShader s_ChunkBar; s_ChunkBar.SetFileSize( file->GetFileSize() ); s_ChunkBar.SetHeight( barRect.GetHeight() ); s_ChunkBar.SetWidth( barRect.GetWidth() ); s_ChunkBar.Set3dDepth( CPreferences::Get3DDepth() ); uint64 end = 0; for ( unsigned int i = 0; i < list.size(); ++i ) { uint64 start = PARTSIZE * static_cast<uint64>(i); end = PARTSIZE * static_cast<uint64>(i + 1); s_ChunkBar.FillRange(start, end, CMuleColour(list[i] ? 0 : 255, list[i] ? ((210-(22*( list[i] - 1 ) ) < 0) ? 0 : (210-(22*( list[i] - 1 ) ))) : 0, list[i] ? 255 : 0)); } s_ChunkBar.FillRange(end + 1, file->GetFileSize() - 1, CMuleColour(255, 0, 0)); s_ChunkBar.Draw(dc, barRect.x, barRect.y, bFlat); if (!bFlat) { // Draw black border dc->SetPen( *wxBLACK_PEN ); dc->SetBrush( *wxTRANSPARENT_BRUSH ); dc->DrawRectangle(rect); } dc->SetPen( old_pen ); dc->SetBrush( old_brush ); }
///////////////////////////////////////////////////////////////////////////// // CColorFrameCtrl CColorFrameCtrl::CColorFrameCtrl( wxWindow* parent,int id, int wid,int hei ) : wxControl(parent,id,wxDefaultPosition,wxSize(wid,hei)), m_brushBack(*wxBLACK_BRUSH), m_brushFrame(CMuleColour(0,255,255).GetBrush()) { SetSizeHints(wid,hei,wid,hei,0,0); wxRect rc=GetClientRect(); m_rectClient.left=rc.x; m_rectClient.top=rc.y; m_rectClient.right=rc.x + wid; m_rectClient.bottom=rc.y + hei; } // CColorFrameCtrl
void CKadDlg::SetGraphColors() { static const char aTrend[] = { 2, 1, 0 }; static const int aRes[] = { IDC_C0, IDC_C0_3, IDC_C0_2 }; m_kad_scope->SetBackgroundColor(CStatisticsDlg::getColors(0)); m_kad_scope->SetGridColor(CStatisticsDlg::getColors(1)); for (size_t i = 0; i < 3; ++i) { m_kad_scope->SetPlotColor(CStatisticsDlg::getColors(12 + i), aTrend[i]); CColorFrameCtrl* ctrl = CastChild(aRes[i], CColorFrameCtrl); ctrl->SetBackgroundBrushColour(CMuleColour(CStatisticsDlg::getColors(12 + i))); ctrl->SetFrameBrushColour(*wxBLACK); } }
void CSharedFilesCtrl::OnDrawItem( int item, wxDC* dc, const wxRect& rect, const wxRect& rectHL, bool highlighted ) { CKnownFile *file = (CKnownFile*)GetItemData(item); wxASSERT( file ); if ( highlighted ) { CMuleColour newcol(GetFocus() ? wxSYS_COLOUR_HIGHLIGHT : wxSYS_COLOUR_BTNSHADOW); dc->SetBackground(newcol.Blend(125).GetBrush()); dc->SetTextForeground( CMuleColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); // The second blending goes over the first one. dc->SetPen(newcol.Blend(65).GetPen()); } else { dc->SetBackground( CMuleColour(wxSYS_COLOUR_LISTBOX).GetBrush() ); dc->SetTextForeground(CMuleColour(wxSYS_COLOUR_WINDOWTEXT)); dc->SetPen(*wxTRANSPARENT_PEN); } dc->SetBrush(dc->GetBackground()); dc->DrawRectangle(rectHL); dc->SetPen(*wxTRANSPARENT_PEN); // Offset based on the height of the fonts const int textVOffset = ( rect.GetHeight() - dc->GetCharHeight() ) / 2; // Empty space to each side of a column const int SPARE_PIXELS_HORZ = 4; // The leftmost position of the current column int columnLeft = 0; for ( int i = 0; i < GetColumnCount(); ++i ) { const int columnWidth = GetColumnWidth(i); if (columnWidth > 2*SPARE_PIXELS_HORZ) { wxRect columnRect( columnLeft + SPARE_PIXELS_HORZ, rect.y, columnWidth - 2 * SPARE_PIXELS_HORZ, rect.height); wxDCClipper clipper(*dc, columnRect); wxString textBuffer; switch ( i ) { case ID_SHARED_COL_NAME: textBuffer = file->GetFileName().GetPrintable(); if (file->GetFileRating() || file->GetFileComment().Length()) { int image = Client_CommentOnly_Smiley; if (file->GetFileRating()) { image = Client_InvalidRating_Smiley + file->GetFileRating() - 1; } wxASSERT(image >= Client_InvalidRating_Smiley); wxASSERT(image <= Client_CommentOnly_Smiley); int imgWidth = 16; theApp->amuledlg->m_imagelist.Draw(image, *dc, columnRect.x, columnRect.y + 1, wxIMAGELIST_DRAW_TRANSPARENT); // Move the text to the right columnRect.x += (imgWidth + 4); } break; case ID_SHARED_COL_SIZE: textBuffer = CastItoXBytes(file->GetFileSize()); break; case ID_SHARED_COL_TYPE: textBuffer = GetFiletypeByName(file->GetFileName()); break; case ID_SHARED_COL_PRIO: textBuffer = PriorityToStr(file->GetUpPriority(), file->IsAutoUpPriority()); break; case ID_SHARED_COL_ID: textBuffer = file->GetFileHash().Encode(); break; case ID_SHARED_COL_REQ: textBuffer = CFormat(wxT("%u (%u)")) % file->statistic.GetRequests() % file->statistic.GetAllTimeRequests(); break; case ID_SHARED_COL_AREQ: textBuffer = CFormat(wxT("%u (%u)")) % file->statistic.GetAccepts() % file->statistic.GetAllTimeAccepts(); break; case ID_SHARED_COL_TRA: textBuffer = CastItoXBytes(file->statistic.GetTransferred()) + wxT(" (") + CastItoXBytes(file->statistic.GetAllTimeTransferred()) + wxT(")"); break; case ID_SHARED_COL_RTIO: textBuffer = CFormat(wxT("%.2f")) % ((double)file->statistic.GetAllTimeTransferred() / file->GetFileSize()); break; case ID_SHARED_COL_PART: if ( file->GetPartCount() ) { wxRect barRect(columnRect.x, columnRect. y + 1, columnRect.width, columnRect.height - 2); DrawAvailabilityBar(file, dc, barRect); } break; case ID_SHARED_COL_CMPL: if ( file->m_nCompleteSourcesCountLo == 0 ) { if ( file->m_nCompleteSourcesCountHi ) { textBuffer = CFormat(wxT("< %u")) % file->m_nCompleteSourcesCountHi; } else { textBuffer = wxT("0"); } } else if (file->m_nCompleteSourcesCountLo == file->m_nCompleteSourcesCountHi) { textBuffer = CFormat(wxT("%u")) % file->m_nCompleteSourcesCountLo; } else { textBuffer = CFormat(wxT("%u - %u")) % file->m_nCompleteSourcesCountLo % file->m_nCompleteSourcesCountHi; } break; case ID_SHARED_COL_PATH: if ( file->IsPartFile() ) { textBuffer = _("[PartFile]"); } else { textBuffer = file->GetFilePath().GetPrintable(); } } if (!textBuffer.IsEmpty()) { dc->DrawText(textBuffer, columnRect.x, columnRect.y + textVOffset); } } // Move to the next column columnLeft += columnWidth; } }
void CFileDetailDialog::FillSourcenameList() { CFileDetailListCtrl* pmyListCtrl; int itempos; int inserted = 0; pmyListCtrl = CastChild(IDC_LISTCTRLFILENAMES, CFileDetailListCtrl ); // reset for (int i=0;i<pmyListCtrl->GetItemCount();i++){ SourcenameItem *item = reinterpret_cast<SourcenameItem *>(pmyListCtrl->GetItemData(i)); item->count = 0; } // update #ifdef CLIENT_GUI const SourcenameItemMap &sources = m_file->GetSourcenameItemMap(); for (SourcenameItemMap::const_iterator it = sources.begin(); it != sources.end(); ++it) { const SourcenameItem &cur_src = it->second; itempos = pmyListCtrl->FindItem(-1,cur_src.name); if (itempos == -1) { int itemid = pmyListCtrl->InsertItem(0, cur_src.name); SourcenameItem *item = new SourcenameItem(cur_src.name, cur_src.count); pmyListCtrl->SetItemPtrData(0, reinterpret_cast<wxUIntPtr>(item)); // background.. argh -- PA: was in old version - do we still need this? wxListItem tmpitem; tmpitem.m_itemId = itemid; tmpitem.SetBackgroundColour(CMuleColour(wxSYS_COLOUR_LISTBOX)); pmyListCtrl->SetItem(tmpitem); inserted++; } else { SourcenameItem *item = reinterpret_cast<SourcenameItem *>(pmyListCtrl->GetItemData(itempos)); item->count = cur_src.count; } } #else // CLIENT_GUI const CPartFile::SourceSet& sources = m_file->GetSourceList(); CPartFile::SourceSet::const_iterator it = sources.begin(); for ( ; it != sources.end(); ++it ) { const CUpDownClient &cur_src = **it; if (cur_src.GetRequestFile() != m_file || cur_src.GetClientFilename().Length() == 0) { continue; } itempos = pmyListCtrl->FindItem(-1,cur_src.GetClientFilename()); if (itempos == -1) { int itemid = pmyListCtrl->InsertItem(0, cur_src.GetClientFilename()); SourcenameItem *item = new SourcenameItem(cur_src.GetClientFilename(), 1); pmyListCtrl->SetItemPtrData(0, reinterpret_cast<wxUIntPtr>(item)); // background.. argh -- PA: was in old version - do we still need this? wxListItem tmpitem; tmpitem.m_itemId=itemid; tmpitem.SetBackgroundColour(CMuleColour(wxSYS_COLOUR_LISTBOX)); pmyListCtrl->SetItem(tmpitem); inserted++; } else { SourcenameItem *item = reinterpret_cast<SourcenameItem *>(pmyListCtrl->GetItemData(itempos)); item->count++; } } #endif // CLIENT_GUI // remove 0'er and update counts for (int i = 0; i < pmyListCtrl->GetItemCount(); ++i) { SourcenameItem *item = reinterpret_cast<SourcenameItem *>(pmyListCtrl->GetItemData(i)); if (item->count == 0) { delete item; pmyListCtrl->DeleteItem(i); i--; // PA: one step back is enough, no need to go back to 0 } else { pmyListCtrl->SetItem(i, 1, wxString::Format(wxT("%li"), item->count)); } } if (inserted) { pmyListCtrl->SortList(); } // no need to call Layout() here, it's called in UpdateData() }