void CBottomView::UseTheirThenMyTextBlock() { viewstate leftstate; viewstate rightstate; viewstate bottomstate; UseTheirAndYourBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); RefreshViews(); }
bool CBottomView::OnContextMenu(CPoint point, int /*nLine*/, DiffStates state) { if (!this->IsWindowVisible()) return false; CMenu popup; if (popup.CreatePopupMenu()) { #define ID_USETHEIRBLOCK 1 #define ID_USEYOURBLOCK 2 #define ID_USETHEIRANDYOURBLOCK 3 #define ID_USEYOURANDTHEIRBLOCK 4 UINT uEnabled = MF_ENABLED; if ((m_nSelBlockStart == -1)||(m_nSelBlockEnd == -1)) uEnabled |= MF_DISABLED | MF_GRAYED; CString temp; bool bImportantBlock = true; switch (state) { case DIFFSTATE_UNKNOWN: bImportantBlock = false; break; } temp.LoadString(IDS_VIEWCONTEXTMENU_USETHEIRBLOCK); popup.AppendMenu(MF_STRING | uEnabled | (bImportantBlock ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_USETHEIRBLOCK, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USEYOURBLOCK); popup.AppendMenu(MF_STRING | uEnabled | (bImportantBlock ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_USEYOURBLOCK, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USEYOURANDTHEIRBLOCK); popup.AppendMenu(MF_STRING | uEnabled | (bImportantBlock ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_USEYOURANDTHEIRBLOCK, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USETHEIRANDYOURBLOCK); popup.AppendMenu(MF_STRING | uEnabled | (bImportantBlock ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_USETHEIRANDYOURBLOCK, temp); popup.AppendMenu(MF_SEPARATOR, NULL); temp.LoadString(IDS_EDIT_COPY); popup.AppendMenu(MF_STRING | (HasTextSelection() ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_EDIT_COPY, temp); if (!m_bCaretHidden) { temp.LoadString(IDS_EDIT_CUT); popup.AppendMenu(MF_STRING | (HasTextSelection() ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_EDIT_CUT, temp); temp.LoadString(IDS_EDIT_PASTE); popup.AppendMenu(MF_STRING | (CAppUtils::HasClipboardFormat(CF_UNICODETEXT)||CAppUtils::HasClipboardFormat(CF_TEXT) ? MF_ENABLED : MF_DISABLED|MF_GRAYED), ID_EDIT_PASTE, temp); } // if the context menu is invoked through the keyboard, we have to use // a calculated position on where to anchor the menu on if ((point.x == -1) && (point.y == -1)) { CRect rect; GetWindowRect(&rect); point = rect.CenterPoint(); } int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0); viewstate rightstate; viewstate bottomstate; viewstate leftstate; switch (cmd) { case ID_USETHEIRBLOCK: UseTheirTextBlock(); break; case ID_USEYOURBLOCK: UseMyTextBlock(); break; case ID_USEYOURANDTHEIRBLOCK: UseYourAndTheirBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USETHEIRANDYOURBLOCK: UseTheirAndYourBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_EDIT_COPY: OnEditCopy(); return true; case ID_EDIT_CUT: OnEditCopy(); RemoveSelectedText(); break; case ID_EDIT_PASTE: PasteText(); break; } } return false; }
bool CRightView::OnContextMenu(CPoint point, int /*nLine*/, DiffStates state) { if (!this->IsWindowVisible()) return false; CMenu popup; if (!popup.CreatePopupMenu()) return false; #define ID_USEBLOCK 1 #define ID_USEFILE 2 #define ID_USETHEIRANDYOURBLOCK 3 #define ID_USEYOURANDTHEIRBLOCK 4 #define ID_USEBOTHTHISFIRST 5 #define ID_USEBOTHTHISLAST 6 const UINT uFlags = GetMenuFlags( state ); CString temp; if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USETHISBLOCK); } else temp.LoadString(IDS_VIEWCONTEXTMENU_USEOTHERBLOCK); popup.AppendMenu(uFlags, ID_USEBLOCK, temp); if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USETHISFILE); } else temp.LoadString(IDS_VIEWCONTEXTMENU_USEOTHERFILE); popup.AppendMenu(MF_STRING | MF_ENABLED, ID_USEFILE, temp); if (m_pwndBottom->IsWindowVisible()) { temp.LoadString(IDS_VIEWCONTEXTMENU_USEYOURANDTHEIRBLOCK); popup.AppendMenu(uFlags, ID_USEYOURANDTHEIRBLOCK, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USETHEIRANDYOURBLOCK); popup.AppendMenu(uFlags, ID_USETHEIRANDYOURBLOCK, temp); } else { temp.LoadString(IDS_VIEWCONTEXTMENU_USEBOTHTHISFIRST); popup.AppendMenu(uFlags, ID_USEBOTHTHISFIRST, temp); temp.LoadString(IDS_VIEWCONTEXTMENU_USEBOTHTHISLAST); popup.AppendMenu(uFlags, ID_USEBOTHTHISLAST, temp); } AddCutCopyAndPaste(popup); CompensateForKeyboard(point); int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0); viewstate rightstate; viewstate bottomstate; viewstate leftstate; switch (cmd) { case ID_EDIT_COPY: OnEditCopy(); return true; case ID_EDIT_CUT: OnEditCopy(); RemoveSelectedText(); return false; case ID_EDIT_PASTE: PasteText(); return false; case ID_USEFILE: UseFile(false); break; case ID_USEBLOCK: UseBlock(false); break; case ID_USEYOURANDTHEIRBLOCK: UseYourAndTheirBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USETHEIRANDYOURBLOCK: UseTheirAndYourBlock(rightstate, bottomstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USEBOTHTHISFIRST: UseBothRightFirst(rightstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; case ID_USEBOTHTHISLAST: UseBothLeftFirst(rightstate, leftstate); CUndo::GetInstance().AddState(leftstate, rightstate, bottomstate, m_ptCaretPos); break; default: return false; } // switch (cmd) return false; }