void CInstrumentList::OnContextMenu(CWnd* pWnd, CPoint point) { int Instrument(0); TCHAR Text[256]; if (GetSelectionMark() != -1) { // Select the instrument GetItemText(GetSelectionMark(), 0, Text, 256); _stscanf(Text, _T("%X"), &Instrument); CFamiTrackerDoc::GetDoc()->GetInstrumentName(Instrument, Text); CFamiTrackerView::GetView()->SetInstrument(Instrument); // TODO: fix?? //m_wndDialogBar.GetDlgItem(IDC_INSTNAME)->SetWindowText(Text); } // Display the popup menu CMenu *pPopupMenu, PopupMenuBar; PopupMenuBar.LoadMenu(IDR_INSTRUMENT_POPUP); pPopupMenu = PopupMenuBar.GetSubMenu(0); // Route the menu messages to mainframe pPopupMenu->TrackPopupMenu(TPM_LEFTBUTTON, point.x, point.y, m_pMainFrame); // Return focus to pattern editor m_pMainFrame->GetActiveView()->SetFocus(); }
void CQueueListCtrl::ShowSelectedUserDetails() { POINT point; ::GetCursorPos(&point); CPoint p = point; ScreenToClient(&p); int it = HitTest(p); if (it == -1) { return; } SetSelectionMark(it); CUpDownClient* pClient = reinterpret_cast<CUpDownClient*>(GetItemData(GetSelectionMark())); if (pClient != NULL) { CClientDetails dialog(IDS_CD_TITLE, pClient, this, 0); dialog.DoModal(); } }
void CGitProgressList::OnLvnBegindragSvnprogress(NMHDR* , LRESULT *pResult) { //LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR); #if 0 int selIndex = GetSelectionMark(); if (selIndex < 0) return; CDropFiles dropFiles; // class for creating DROPFILES struct int index; POSITION pos = GetFirstSelectedItemPosition(); while ( (index = GetNextSelectedItem(pos)) >= 0 ) { NotificationData * data = m_arData[index]; if ( data->kind==svn_node_file || data->kind==svn_node_dir ) { CString sPath = GetPathFromColumnText(data->sPathColumnText); dropFiles.AddFile( sPath ); } } if (!dropFiles.IsEmpty()) { dropFiles.CreateStructure(); } #endif *pResult = 0; }
void CInstrumentList::SetInstrumentName(int Index, TCHAR *pName) { // Update instrument name in the list int ListIndex = GetSelectionMark(); CString Name; Name.Format(_T("%02X - %s"), Index, pName); SetItemText(ListIndex, 0, Name); }
void CFVDownloads_Tasks::UpdateActiveDownload(int adjSelected) { try { POSITION pos = GetFirstSelectedItemPosition (); vmsDownloadSmartPtr dld; if (pos && GetSelectedCount () == 1) { int iItem = GetNextSelectedItem (pos); iItem += adjSelected; if (iItem < 0) iItem = 0; else if (iItem >= GetItemCount ()) iItem = GetItemCount () - 1; dld = m_vDlds [iItem]; } else { int iItem = GetSelectionMark (); if (iItem == -1) dld = NULL; else { iItem += adjSelected; if (iItem < 0) iItem = 0; else if (iItem >= GetItemCount ()) iItem = GetItemCount () - 1; dld = m_vDlds [iItem]; } } if (dld != m_pActiveDownload) { m_pActiveDownload = dld; _pwndFVDownloads->SetActiveDownload (m_pActiveDownload); } } catch (const std::exception& ex) { ASSERT (FALSE); vmsLogger::WriteLog("CFVDownloads_Tasks::UpdateActiveDownload " + std::string(ex.what())); } catch (...) { ASSERT (FALSE); vmsLogger::WriteLog("CFVDownloads_Tasks::UpdateActiveDownload unknown exception"); } }
void CInstrumentList::SelectPreviousItem() { // Select previous instrument int SelIndex = GetSelectionMark(); if (SelIndex > 0) { int Slot = GetInstrumentIndex(SelIndex - 1); m_pMainFrame->SelectInstrument(Slot); } }
void CFileBrowserListCtrl::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { if (_istprint(nChar)) { // if printable character, including space // finding items by key can't get started unless an item is focused if (GetSelectionMark() < 0 && m_DirList.GetCount()) // if no focused item SetItemState(0, LVIS_FOCUSED, LVIS_FOCUSED); // focus first item } CListCtrl::OnChar(nChar, nRepCnt, nFlags); }
void CGitRefCompareList::OnContextMenuList(CWnd * /*pWnd*/, CPoint point) { int selIndex = GetSelectionMark(); if (selIndex < 0 || (size_t)selIndex >= m_RefList.size()) return; CString refName = m_RefList[selIndex].fullName; CString oldHash = m_RefList[selIndex].oldHash; CString newHash = m_RefList[selIndex].newHash; CIconMenu popup; popup.CreatePopupMenu(); CString logStr; if (!oldHash.IsEmpty()) { logStr.Format(IDS_SHOWLOG_OF, (LPCTSTR)oldHash); popup.AppendMenuIcon(IDGITRCL_OLDLOG, logStr, IDI_LOG); } if (!newHash.IsEmpty() && oldHash != newHash) { logStr.Format(IDS_SHOWLOG_OF, (LPCTSTR)newHash); popup.AppendMenuIcon(IDGITRCL_NEWLOG, logStr, IDI_LOG); } if (!oldHash.IsEmpty() && !newHash.IsEmpty() && oldHash != newHash) popup.AppendMenuIcon(IDGITRCL_COMPARE, IDS_LOG_POPUP_COMPAREWITHPREVIOUS, IDI_DIFF); popup.AppendMenuIcon(IDGITRCL_REFLOG, IDS_MENUREFLOG, IDI_LOG); int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this); AfxGetApp()->DoWaitCursor(1); switch (cmd) { case IDGITRCL_OLDLOG: case IDGITRCL_NEWLOG: { CString sCmd; sCmd.Format(L"/command:log /path:\"%s\" /endrev:\"%s\"", (LPCTSTR)g_Git.m_CurrentDir, cmd == IDGITRCL_OLDLOG ? (LPCTSTR)oldHash : (LPCTSTR)newHash); CAppUtils::RunTortoiseGitProc(sCmd); break; } case IDGITRCL_COMPARE: { CString sCmd; sCmd.Format(L"/command:showcompare /path:\"%s\" /revision1:\"%s\" /revision2:\"%s\"", (LPCTSTR)g_Git.m_CurrentDir, (LPCTSTR)oldHash, (LPCTSTR)newHash); if (!!(GetAsyncKeyState(VK_SHIFT) & 0x8000)) sCmd += L" /alternative"; CAppUtils::RunTortoiseGitProc(sCmd); break; } case IDGITRCL_REFLOG: { CString sCmd; sCmd.Format(L"/command:reflog /path:\"%s\" /ref:\"%s\"", (LPCTSTR)g_Git.m_CurrentDir, (LPCTSTR)refName); CAppUtils::RunTortoiseGitProc(sCmd); break; } } AfxGetApp()->DoWaitCursor(-1); }
void DLlist::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 int olditem=this->GetSelectionMark(); CListCtrl::OnLButtonDown(nFlags, point); if(olditem!=GetSelectionMark()) Update(olditem); }
bool CFileBrowserListCtrl::CanRename() { int sel = GetSelectionMark(); if (sel >= 0) { const CDirItem& item = GetDirItem(sel); if (!(item.IsDrive() || item.IsDots())) return(TRUE); } return(FALSE); }
void CInstrumentList::SelectNextItem() { // Select next instrument int SelIndex = GetSelectionMark(); int Count = GetItemCount(); if (SelIndex < (Count - 1)) { int Slot = GetInstrumentIndex(SelIndex + 1); m_pMainFrame->SelectInstrument(Slot); } }
DWORD CFastGrid::GetItemData2() { CListDataEx *pXLCD = (CListDataEx *) CListCtrl::GetItemData(GetSelectionMark()); ASSERT(pXLCD); if (!pXLCD) { return 0; } return pXLCD->dwItemData2; }
void CFastGrid::SetData2(DWORD dwData2) { CListDataEx *pXLCD = (CListDataEx *) CListCtrl::GetItemData(GetSelectionMark()); ASSERT(pXLCD); if (!pXLCD) { return; } pXLCD->dwItemData2 = dwData2; }
void CListCtrlEx::OnLButtonDown (UINT nFlags, CPoint Point) { int Index; int ColNum; if ((Index = HitTestEx (Point, &ColNum)) != -1 && Index == GetSelectionMark()) { // This was a slow dbl click CListCtrl::OnLButtonDown (nFlags, Point); EditSubItem (Index, ColNum); } else CListCtrl::OnLButtonDown (nFlags, Point); }
void CReportCtrl::SortRows() { if (m_SortWaitCursor) CCmdTarget::BeginWaitCursor(); if (m_SortCallback != NULL) // is there a sort callback? SortItems(m_SortCallback, (DWORD)m_SortCallbackData); // y, use it else SortItems(TextSort, (DWORD)this); // n, use text sort if (m_SortWaitCursor) CCmdTarget::EndWaitCursor(); // if there's a selection, keep it visible, otherwise go to top EnsureVisible(GetSelectedCount() ? GetSelectionMark() : 0, FALSE); }
void CTorrents_Tasks::UpdateActiveDownload(int adjSelected) { try { POSITION pos = GetFirstSelectedItemPosition (); vmsDownloadSmartPtr dld; if (pos && GetSelectedCount () == 1) { int iItem = GetNextSelectedItem (pos); iItem += adjSelected; if (iItem < 0) iItem = 0; else if (iItem >= GetItemCount ()) iItem = GetItemCount () - 1; dld = m_vDlds [iItem]; } else { int iItem = GetSelectionMark (); if (iItem == -1) dld = NULL; else { iItem += adjSelected; if (iItem < 0) iItem = 0; else if (iItem >= GetItemCount ()) iItem = GetItemCount () - 1; dld = m_vDlds [iItem]; } } if (dld != m_pActiveDownload) { m_pActiveDownload = dld; _pwndTorrents->SetActiveDownload (m_pActiveDownload); } } catch (...) {} }
BOOL CGitProgressList::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == 'A') { if (GetKeyState(VK_CONTROL)&0x8000) { // Ctrl-A -> select all SetSelectionMark(0); for (int i=0; i<GetItemCount(); ++i) { SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); } } } if ((pMsg->wParam == 'C')||(pMsg->wParam == VK_INSERT)) { int selIndex = GetSelectionMark(); if (selIndex >= 0) { if (GetKeyState(VK_CONTROL)&0x8000) { //Ctrl-C -> copy to clipboard CString sClipdata; POSITION pos = GetFirstSelectedItemPosition(); if (pos != NULL) { while (pos) { int nItem = GetNextSelectedItem(pos); CString sAction = GetItemText(nItem, 0); CString sPath = GetItemText(nItem, 1); CString sMime = GetItemText(nItem, 2); CString sLogCopyText; sLogCopyText.Format(_T("%s: %s %s\r\n"), (LPCTSTR)sAction, (LPCTSTR)sPath, (LPCTSTR)sMime); sClipdata += sLogCopyText; } CStringUtils::WriteAsciiStringToClipboard(sClipdata); } } } } } // if (pMsg->message == WM_KEYDOWN) return CListCtrl::PreTranslateMessage(pMsg); }
void CInstrumentList::OnContextMenu(CWnd* pWnd, CPoint point) { int Instrument = GetInstrumentIndex(GetSelectionMark()); // Select the instrument if (Instrument != -1) m_pMainFrame->SelectInstrument(Instrument); // Display the popup menu CMenu *pPopupMenu, PopupMenuBar; PopupMenuBar.LoadMenu(IDR_INSTRUMENT_POPUP); pPopupMenu = PopupMenuBar.GetSubMenu(0); // Route the menu messages to mainframe pPopupMenu->TrackPopupMenu(TPM_LEFTBUTTON, point.x, point.y, m_pMainFrame); // Return focus to pattern editor m_pMainFrame->GetActiveView()->SetFocus(); }
void CDownloadClientsCtrl::ShowSelectedUserDetails(){ POINT point; ::GetCursorPos(&point); CPoint p = point; ScreenToClient(&p); int it = HitTest(p); if (it == -1) return; SetItemState(-1, 0, LVIS_SELECTED); SetItemState(it, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED); SetSelectionMark(it); // display selection mark correctly! CUpDownClient* client = (CUpDownClient*)GetItemData(GetSelectionMark()); if (client){ CClientDetailDialog dialog(client, this); dialog.DoModal(); } }
void CSitesWnd::CalcCoordsForCurSel() { int iCurSel = GetSelectionMark (); if (iCurSel == -1) { POSITION pos = GetFirstSelectedItemPosition (); if (pos) iCurSel = GetNextSelectedItem (pos); } if (iCurSel != -1) { RECT rc; GetItemRect (iCurSel, &rc, LVIR_BOUNDS); m_rbPt.x = rc.left + 30; m_rbPt.y = rc.top; } else m_rbPt.x = m_rbPt.y = 30; }
void CFileBrowserListCtrl::SetSort(int Col, int Dir) { if (Col == m_SortCol && Dir == m_SortDir) // if same column and direction return; // nothing to do if (Col != m_SortCol && m_SortCol >= 0) // if different column has arrow DrawSortArrow(m_SortCol, -1); // remove arrow from previous column if (Col >= 0) { // if valid sort column int items = m_DirList.GetCount(); int selcnt = GetSelectedCount(); int selmark = GetSelectionMark(); if (selcnt || selmark >= 0) { // if there's a selection // save item states and selection mark in list user data for (int i = 0; i < items; i++) { CDirItem& item = m_DirList.GetItem(i); item.SetData(GetItemState(i, LVIS_SELECTED | LVIS_FOCUSED)); } if (selmark >= 0) { CDirItem& item = m_DirList.GetItem(selmark); // repurpose an item state bit to indicate selection mark item.SetData(item.GetData() | LVIS_ACTIVATING); } } DrawSortArrow(Col, Dir); // draw appropriate arrow on new column m_DirList.Sort(Col, Dir); // sort directory list if (selcnt || selmark >= 0) { // if there's a selection // restore item states and selection mark from list user data for (int i = 0; i < items; i++) { const CDirItem& item = m_DirList.GetItem(i); DWORD state = item.GetData(); SetItemState(i, state, LVIS_SELECTED | LVIS_FOCUSED); if (state & LVIS_ACTIVATING) // if item has selection mark SetSelectionMark(i); } } Invalidate(); } m_SortCol = Col; m_SortDir = Dir; }
void CGitBlameLogList::ContextMenuAction(int cmd,int FirstSelect, int LastSelect,CMenu * menu) { POSITION pos = GetFirstSelectedItemPosition(); int indexNext = GetNextSelectedItem(pos); if (indexNext < 0) return; CString procCmd; GitRev* pSelLogEntry = reinterpret_cast<GitRev*>(m_arShownList.GetAt(indexNext)); bool bOpenWith = false; procCmd += _T("/path:\""); procCmd += ((CMainFrame*)::AfxGetApp()->GetMainWnd())->GetActiveView()->GetDocument()->GetPathName(); procCmd += _T("\" "); procCmd += _T(" /rev:")+this->m_logEntries.GetGitRevAt(indexNext).m_CommitHash.ToString(); procCmd += _T(" /command:"); switch (cmd) { case ID_GNUDIFF1: procCmd += _T("diff /udiff"); break; #if 0 case ID_GNUDIFF2: { CString tempfile=GetTempFile(); CString cmd; GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect)); GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect)); cmd.Format(_T("git.exe diff-tree -r -p --stat %s %s"),r1->m_CommitHash,r2->m_CommitHash); g_Git.RunLogFile(cmd,tempfile); CAppUtils::StartUnifiedDiffViewer(tempfile, r1->m_CommitHash.Left(g_Git.GetShortHASHLength()) + _T(":") + r2->m_CommitHash.Left(g_Git.GetShortHASHLength())); } break; #endif #if 0 case ID_COMPARETWO: { GitRev * r1 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(FirstSelect)); GitRev * r2 = reinterpret_cast<GitRev*>(m_arShownList.GetAt(LastSelect)); CFileDiffDlg dlg; dlg.SetDiff(NULL,*r1,*r2); dlg.DoModal(); } break; #endif #if 0 case ID_COMPARE: { GitRev * r1 = &m_wcRev; GitRev * r2 = pSelLogEntry; CFileDiffDlg dlg; dlg.SetDiff(NULL,*r1,*r2); dlg.DoModal(); //user clicked on the menu item "compare with working copy" //if (PromptShown()) //{ // GitDiff diff(this, m_hWnd, true); // diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000)); // diff.SetHEADPeg(m_LogRevision); // diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected); //} //else // CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000)); } break; case ID_COMPARE: procCmd+=CString(_T("diff \rev1:"))+CString(GIT_REV_ZERO)+CString(_T(" \rev2:"))+this->m_logEntries.GetGitRevAt(indexNext).m_CommitHash.ToString(); break; #endif case ID_COMPAREWITHPREVIOUS: if (indexNext + 1 < m_logEntries.size()) // cannot diff previous revision in first revision { procCmd+=CString(_T("diff /startrev:"))+this->m_logEntries.GetGitRevAt(indexNext).m_CommitHash.ToString()+CString(_T(" /endrev:"))+this->m_logEntries.GetGitRevAt(indexNext+1).m_CommitHash.ToString(); } else { return; } break; case ID_COPYCLIPBOARD: { CopySelectionToClipBoard(); } return; case ID_COPYHASH: { CopySelectionToClipBoard(TRUE); } return; case ID_EXPORT: procCmd += _T("export"); break; case ID_CREATE_BRANCH: procCmd += _T("branch"); break; case ID_CREATE_TAG: procCmd += _T("tag"); break; case ID_SWITCHTOREV: procCmd += _T("switch"); break; case ID_BLAME: procCmd += _T("blame"); procCmd += _T(" /endrev:") + this->m_logEntries.GetGitRevAt(indexNext).m_CommitHash.ToString(); break; case ID_LOG: procCmd += _T("log"); break; case ID_REPOBROWSE: procCmd.Format(_T("/command:repobrowser /path:\"%s\" /rev:%s"), g_Git.m_CurrentDir, this->m_logEntries.GetGitRevAt(indexNext).m_CommitHash.ToString()); break; default: //CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK); return; #if 0 case ID_REVERTREV: { // we need an URL to complete this command, so error out if we can't get an URL if (pathURL.IsEmpty()) { CString strMessage; strMessage.Format(IDS_ERR_NOURLOFFILE, (LPCTSTR)(m_path.GetUIPathString())); CMessageBox::Show(this->m_hWnd, strMessage, _T("TortoiseGit"), MB_ICONERROR); TRACE(_T("could not retrieve the URL of the folder!\n")); break; //exit } CString msg; msg.Format(IDS_LOG_REVERT_CONFIRM, m_path.GetWinPath()); if (CMessageBox::Show(this->m_hWnd, msg, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION) == IDYES) { CGitProgressDlg dlg; dlg.SetCommand(CGitProgressDlg::GitProgress_Merge); dlg.SetPathList(CTGitPathList(m_path)); dlg.SetUrl(pathURL); dlg.SetSecondUrl(pathURL); revisionRanges.AdjustForMerge(true); dlg.SetRevisionRanges(revisionRanges); dlg.SetPegRevision(m_LogRevision); dlg.DoModal(); } } break; case ID_FINDENTRY: { m_nSearchIndex = GetSelectionMark(); if (m_nSearchIndex < 0) m_nSearchIndex = 0; if (m_pFindDialog) { break; } else { m_pFindDialog = new CFindReplaceDialog(); m_pFindDialog->Create(TRUE, NULL, NULL, FR_HIDEUPDOWN | FR_HIDEWHOLEWORD, this); } } break; #endif } // switch (cmd) CCommonAppUtils::RunTortoiseProc(procCmd); }
void COutputListCtrl::OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult) { int TabIndex = ((CMainFrame *)AfxGetMainWnd())->m_wndOutput.m_wndTabs.GetActiveTab(); switch (TabIndex) { case 0://操作 { INT nIdx = GetSelectionMark(); if (nIdx >= 0 && CIBAGlobal::NetworkStatus != CIBAGlobal::emNetworkBroken) {//退款时弹出消费查询 if (CServletHellper::GetMemberId(GetItemText(nIdx, 3)) > 0) { CNDCreditDlg dlg; dlg.SetNetId(GetItemText(nIdx, 3)); dlg.DoModal(); } else { theApp.GetIBAView()->QueryUserComsumeList(GetItemText(nIdx, 3), _ttoi(GetItemText(nIdx, 5))); } } break; } case 1://激活 { INT index = GetSelectionMark(); if (index >= 0 && CIBAGlobal::NetworkStatus != CIBAGlobal::emNetworkBroken) { if (CServletHellper::GetMemberId(GetItemText(index, 2)) > 0) { CNDCreditDlg dlg; dlg.SetNetId(GetItemText(index, 2)); dlg.DoModal(); } else { theApp.GetIBAView()->QueryUserComsumeList(GetItemText(index, 2)); } } break; } case 3://客户端消息 { INT nIdx = GetSelectionMark(); if (nIdx >= 0) { CString strTermId; strTermId = GetItemText(nIdx, 1); //UINT rrr = (UINT)CLocalServer::GetInstance()->ComputerList.LookFor(0, strTermId); CShortMsgDlg MsgDlg; MsgDlg.AddReceiver((UINT)CLocalServer::GetInstance()->ComputerList.LookFor(0, strTermId)); MsgDlg.DoModal(); } break; } case 2://消费记录 { //INT nIdx = GetSelectionMark(); //if (nIdx >= 0) //{//退款时弹出消费查询 // theApp.GetIBAView()->QueryUserComsumeList(GetItemText(nIdx, 4), 0); //} break; } } *pResult = 0; }
bool CFileBrowserListCtrl::Rename() { return(EditLabel(GetSelectionMark()) != NULL); }
void CReportCtrl::EnsureSelectionVisible() { if (GetSelectedCount()) EnsureVisible(GetSelectionMark(), FALSE); }
void CListCtrlEx::DrawItem(LPDRAWITEMSTRUCT lpDraw) {try{ int cCols = GetHeaderCtrl ()->GetItemCount (); CDC *dc = CDC::FromHandle (lpDraw->hDC); int xStart = lpDraw->rcItem.left; CImageList *pImages = GetImageList (LVSIL_SMALL); BOOL bNeedBorder = FALSE; CHeaderCtrl* pHdr = GetHeaderCtrl (); for (int i = 0; i < cCols; i++) { LVITEM item; TCHAR szItem [10000]; int colWidth = GetColumnWidth (pHdr->OrderToIndex (i)); xStart += 5; colWidth -= 5; item.iItem = lpDraw->itemID; item.iSubItem = i; item.pszText = szItem; item.cchTextMax = sizeof (szItem); item.mask = LVIF_IMAGE | LVIF_TEXT; GetItem (&item); if (i == 0) { item.state = GetItemState (lpDraw->itemID, LVIS_SELECTED|LVIS_FOCUSED); COLORREF clrBg = m_vInfo [lpDraw->itemID].clrBg; COLORREF clrText = m_vInfo [lpDraw->itemID].clrText; if (item.state & LVIS_FOCUSED) bNeedBorder = TRUE; if (item.state & LVIS_SELECTED) { clrBg = GetSysColor (COLOR_HIGHLIGHT); clrText = GetSysColor (COLOR_HIGHLIGHTTEXT); if (bNeedBorder == FALSE) { if (GetSelectionMark () == (int)lpDraw->itemID) bNeedBorder = TRUE; } } CBrush br; CPen pen; CBrush *oldBr; CPen *oldPen; if (RGBIsEqual (clrBg, clrText)) clrText = (~clrText) & 0x00FFFFFF; dc->SetTextColor (clrText); br.CreateSolidBrush (clrBg); pen.CreatePen (PS_SOLID, 1, clrBg); oldBr = dc->SelectObject (&br); oldPen = dc->SelectObject (&pen); dc->Rectangle (&lpDraw->rcItem); if (m_bGrid) { CPen pen1 (PS_SOLID, 1, m_clrGrid); dc->SelectObject (&pen1); dc->MoveTo (lpDraw->rcItem.left, lpDraw->rcItem.bottom-1); dc->LineTo (lpDraw->rcItem.right, lpDraw->rcItem.bottom-1); dc->SelectObject (oldPen); } dc->SelectObject (oldBr); dc->SelectObject (oldPen); if (pImages) { CPoint pt; pt.x = xStart; pt.y = lpDraw->rcItem.top; if (m_pSelImages && (item.state & LVIS_SELECTED)) m_pSelImages->Draw (dc, item.iImage, pt, ILD_TRANSPARENT); else pImages->Draw (dc, item.iImage, pt, ILD_TRANSPARENT); IMAGEINFO inf; pImages->GetImageInfo (item.iImage, &inf); xStart += inf.rcImage.right - inf.rcImage.left + 5; colWidth -= inf.rcImage.right - inf.rcImage.left + 5; } } if (*item.pszText) { int needX = GetStringWidth (item.pszText); BOOL bDrawText = TRUE; RECT rcText = lpDraw->rcItem; rcText.left = xStart; rcText.right = xStart + colWidth - 5; if (needX > colWidth-5) { RECT rc = rcText; int dx = GetStringWidth ("..."); if (dx <= colWidth-5) { rc.left = rc.right - dx; dc->DrawText ("...", &rc, DT_SINGLELINE | DT_LEFT | DT_VCENTER); rcText.right = rc.left - 5; } else bDrawText = FALSE; } if (bDrawText) dc->DrawText (szItem, &rcText, DT_SINGLELINE | DT_LEFT | DT_VCENTER | DT_NOPREFIX); } xStart += colWidth; if (m_bGrid) { CPen pen (PS_SOLID, 1, m_clrGrid); CPen *oldPen = dc->SelectObject (&pen); dc->MoveTo (xStart-1, lpDraw->rcItem.top); dc->LineTo (xStart-1, lpDraw->rcItem.bottom); dc->SelectObject (oldPen); } } if (bNeedBorder) { dc->SetTextColor (m_vInfo [lpDraw->itemID].clrText); RECT rc = lpDraw->rcItem; rc.bottom--; rc.right--; dc->DrawFocusRect (&rc); } }catch (...){} }
void CGitProgressList::OnContextMenu(CWnd* pWnd, CPoint point) { if (m_options & ProgOptDryRun) return; // don't do anything in a dry-run. if (pWnd != this) return; int selIndex = GetSelectionMark(); if ((point.x == -1) && (point.y == -1)) { // Menu was invoked from the keyboard rather than by right-clicking CRect rect; GetItemRect(selIndex, &rect, LVIR_LABEL); ClientToScreen(&rect); point = rect.CenterPoint(); } if ((selIndex < 0) || m_bThreadRunning || GetSelectedCount() == 0) return; // entry is selected, thread has finished with updating so show the popup menu CIconMenu popup; if (!popup.CreatePopupMenu()) return; ContextMenuActionList actions; NotificationData* data = m_arData[selIndex]; if (data && GetSelectedCount() == 1) data->GetContextMenu(popup, actions); if (!actions.empty()) popup.AppendMenu(MF_SEPARATOR, NULL); actions.push_back([&]() { CString sLines; POSITION pos = GetFirstSelectedItemPosition(); while (pos) { int nItem = GetNextSelectedItem(pos); NotificationData* data = m_arData[nItem]; if (data) { sLines += data->sPathColumnText; sLines += _T("\r\n"); } } sLines.TrimRight(); if (!sLines.IsEmpty()) CStringUtils::WriteAsciiStringToClipboard(sLines, GetSafeHwnd()); }); popup.AppendMenuIcon(actions.size(), IDS_LOG_POPUP_COPYTOCLIPBOARD, IDI_COPYCLIP); if (actions.empty()) return; int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0); if (cmd <= 0 || cmd > actions.size()) return; theApp.DoWaitCursor(1); actions.at(cmd - 1)(); theApp.DoWaitCursor(-1); }