BOOL CCommentDialog::OnSetActive() { if (!CResizablePage::OnSetActive()) return FALSE; if (m_bDataChanged) { bool bContainsSharedKnownFile = false;; int iRating = -1; m_bMergedComment = false; CString strComment; for (int i = 0; i < m_paFiles->GetSize(); i++) { if (!(*m_paFiles)[i]->IsKindOf(RUNTIME_CLASS(CKnownFile))) continue; CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]); // we actually could show, add and even search for comments on kad for known but not shared files, // but we don't publish coments entered by the user if the file is not shared (which might be changed at some point) // so make sure we don't let him think he can comment and disable the dialog for such files if (theApp.sharedfiles->GetFileByID(file->GetFileHash()) == NULL) continue; bContainsSharedKnownFile = true; if (i == 0) { strComment = file->GetFileComment(); iRating = file->GetFileRating(); } else { if (!m_bMergedComment && strComment.Compare(file->GetFileComment()) != 0) { strComment.Empty(); m_bMergedComment = true; } if (iRating != -1 && (UINT)iRating != file->GetFileRating()) iRating = -1; } } m_bSelf = true; SetDlgItemText(IDC_CMT_TEXT, strComment); ((CEdit*)GetDlgItem(IDC_CMT_TEXT))->SetLimitText(MAXFILECOMMENTLEN); m_ratebox.SetCurSel(iRating); m_bSelf = false; EnableDialog(bContainsSharedKnownFile); m_bDataChanged = false; RefreshData(); } return TRUE; }
BOOL CCommentDialog::OnSetActive() { if (!CResizablePage::OnSetActive()) return FALSE; if (m_bDataChanged) { int iRating = -1; m_bMergedComment = false; CString strComment; for (int i = 0; i < m_paFiles->GetSize(); i++) { CKnownFile* file = STATIC_DOWNCAST(CKnownFile, (*m_paFiles)[i]); if (i == 0) { strComment = file->GetFileComment(); iRating = file->GetFileRating(); } else { if (!m_bMergedComment && strComment.Compare(file->GetFileComment()) != 0) { strComment.Empty(); m_bMergedComment = true; } if (iRating != -1 && (UINT)iRating != file->GetFileRating()) iRating = -1; } } m_bSelf = true; SetDlgItemText(IDC_CMT_TEXT, strComment); ((CEdit*)GetDlgItem(IDC_CMT_TEXT))->SetLimitText(MAXFILECOMMENTLEN); m_ratebox.SetCurSel(iRating); m_bSelf = false; m_bDataChanged = false; RefreshData(); } return TRUE; }
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 CSharedFilesCtrl::OnRightClick(wxListEvent& event) { long item_hit = CheckSelection(event); if ( (m_menu == NULL) && (item_hit != -1)) { m_menu = new wxMenu(_("Shared Files")); wxMenu* prioMenu = new wxMenu(); prioMenu->AppendCheckItem(MP_PRIOVERYLOW, _("Very low")); prioMenu->AppendCheckItem(MP_PRIOLOW, _("Low")); prioMenu->AppendCheckItem(MP_PRIONORMAL, _("Normal")); prioMenu->AppendCheckItem(MP_PRIOHIGH, _("High")); prioMenu->AppendCheckItem(MP_PRIOVERYHIGH, _("Very High")); prioMenu->AppendCheckItem(MP_POWERSHARE, _("Release")); prioMenu->AppendCheckItem(MP_PRIOAUTO, _("Auto")); m_menu->Append(0,_("Priority"),prioMenu); m_menu->AppendSeparator(); CKnownFile* file = (CKnownFile*)GetItemData(item_hit); if (file->GetFileComment().IsEmpty() && !file->GetFileRating()) { m_menu->Append(MP_CMT, _("Add Comment/Rating")); } else { m_menu->Append(MP_CMT, _("Edit Comment/Rating")); } m_menu->AppendSeparator(); m_menu->Append(MP_RENAME, _("Rename")); m_menu->AppendSeparator(); if (file->GetFileName().GetExt() == wxT("emulecollection")) { m_menu->Append( MP_ADDCOLLECTION, _("Add files in collection to transfer list")); m_menu->AppendSeparator(); } m_menu->Append(MP_GETMAGNETLINK,_("Copy magnet &URI to clipboard")); m_menu->Append(MP_GETED2KLINK,_("Copy eD2k &link to clipboard")); m_menu->Append(MP_GETSOURCEED2KLINK,_("Copy eD2k link to clipboard (&Source)")); m_menu->Append(MP_GETCRYPTSOURCEDED2KLINK,_("Copy eD2k link to clipboard (Source) (&With Crypt options)")); m_menu->Append(MP_GETHOSTNAMESOURCEED2KLINK,_("Copy eD2k link to clipboard (&Hostname)")); m_menu->Append(MP_GETHOSTNAMECRYPTSOURCEED2KLINK,_("Copy eD2k link to clipboard (Hostname) (With &Crypt options)")); m_menu->Append(MP_GETAICHED2KLINK,_("Copy eD2k link to clipboard (&AICH info)")); m_menu->Append(MP_WS,_("Copy feedback to clipboard")); m_menu->Enable(MP_GETAICHED2KLINK, file->HasProperAICHHashSet()); m_menu->Enable(MP_GETHOSTNAMESOURCEED2KLINK, !thePrefs::GetYourHostname().IsEmpty()); m_menu->Enable(MP_GETHOSTNAMECRYPTSOURCEED2KLINK, !thePrefs::GetYourHostname().IsEmpty()); int priority = file->IsAutoUpPriority() ? PR_AUTO : file->GetUpPriority(); prioMenu->Check(MP_PRIOVERYLOW, priority == PR_VERYLOW); prioMenu->Check(MP_PRIOLOW, priority == PR_LOW); prioMenu->Check(MP_PRIONORMAL, priority == PR_NORMAL); prioMenu->Check(MP_PRIOHIGH, priority == PR_HIGH); prioMenu->Check(MP_PRIOVERYHIGH,priority == PR_VERYHIGH); prioMenu->Check(MP_POWERSHARE, priority == PR_POWERSHARE); prioMenu->Check(MP_PRIOAUTO, priority == PR_AUTO); PopupMenu( m_menu, event.GetPoint() ); delete m_menu; m_menu = NULL; } }