From c17d81e599ede845c81cd7f64f07c0f31380b2c1 Mon Sep 17 00:00:00 2001 From: sdottaka Date: Mon, 20 Jan 2014 02:06:25 +0900 Subject: [PATCH] Add Shift+F4 shortcut key for selecting previous word diff --HG-- branch : stable --- Src/Merge.rc | 1 + Src/MergeDoc.h | 4 ++-- Src/MergeDocLineDiffs.cpp | 24 +++++++++++++++++------- Src/MergeEditView.cpp | 9 ++++++--- Src/MergeEditView.h | 1 + Src/resource.h | 1 + 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Src/Merge.rc b/Src/Merge.rc index 918ddb341..1f82f6e8e 100644 --- a/Src/Merge.rc +++ b/Src/Merge.rc @@ -704,6 +704,7 @@ BEGIN VK_F3, ID_EDIT_REPEAT, VIRTKEY, SHIFT, CONTROL, NOINVERT VK_F3, ID_EDIT_REPEAT, VIRTKEY, CONTROL, NOINVERT VK_F4, ID_SELECTLINEDIFF, VIRTKEY, NOINVERT + VK_F4, ID_SELECTPREVLINEDIFF, VIRTKEY, SHIFT, NOINVERT VK_F5, ID_REFRESH, VIRTKEY, NOINVERT VK_F5, ID_RESCAN, VIRTKEY, CONTROL, NOINVERT VK_F6, ID_NEXT_PANE, VIRTKEY, NOINVERT diff --git a/Src/MergeDoc.h b/Src/MergeDoc.h index 7eab84d2e..144e074cc 100644 --- a/Src/MergeDoc.h +++ b/Src/MergeDoc.h @@ -251,11 +251,11 @@ public: // Implementation in MergeDocLineDiffs.cpp public: typedef enum { BYTEDIFF, WORDDIFF } DIFFLEVEL; - void Showlinediff(CMergeEditView *pView); + void Showlinediff(CMergeEditView *pView, bool bReversed = false); void GetWordDiffArray(int nLineIndex, std::vector *pWordDiffs); void ClearWordDiffCache(int nDiff = -1); private: - void Computelinediff(CMergeEditView *pView, CRect rc[]); + void Computelinediff(CMergeEditView *pView, CRect rc[], bool bReversed); std::map > m_cacheWordDiffs; // End MergeDocLineDiffs.cpp diff --git a/Src/MergeDocLineDiffs.cpp b/Src/MergeDocLineDiffs.cpp index 93f437b35..4c3674126 100644 --- a/Src/MergeDocLineDiffs.cpp +++ b/Src/MergeDocLineDiffs.cpp @@ -51,12 +51,12 @@ HighlightDiffRect(CMergeEditView * pView, const CRect & rc) /** * @brief Highlight difference in current line (left & right panes) */ -void CMergeDoc::Showlinediff(CMergeEditView *pView) +void CMergeDoc::Showlinediff(CMergeEditView *pView, bool bReversed) { CRect rc[3]; int pane; - Computelinediff(pView, rc); + Computelinediff(pView, rc, bReversed); IF_IS_TRUE_ALL ((rc[pane].top == -1), pane, m_nBuffers) { @@ -75,7 +75,7 @@ void CMergeDoc::Showlinediff(CMergeEditView *pView) /** * @brief Returns rectangles to highlight in both views (to show differences in line specified) */ -void CMergeDoc::Computelinediff(CMergeEditView *pView, CRect rc[]) +void CMergeDoc::Computelinediff(CMergeEditView *pView, CRect rc[], bool bReversed) { int file; for (file = 0; file < m_nBuffers; file++) @@ -104,11 +104,21 @@ void CMergeDoc::Computelinediff(CMergeEditView *pView, CRect rc[]) } } - if (it != worddiffs.end()) - ++it; + if (!bReversed) + { + if (it != worddiffs.end()) + ++it; - if (it == worddiffs.end()) - it = worddiffs.begin(); + if (it == worddiffs.end()) + it = worddiffs.begin(); + } + else + { + if (it == worddiffs.begin() || it == worddiffs.end()) + it = worddiffs.end() - 1; + else + --it; + } for (file = 0; file < m_nBuffers; file++) { diff --git a/Src/MergeEditView.cpp b/Src/MergeEditView.cpp index ec064a998..b9bb06e38 100644 --- a/Src/MergeEditView.cpp +++ b/Src/MergeEditView.cpp @@ -162,8 +162,10 @@ BEGIN_MESSAGE_MAP(CMergeEditView, CCrystalEditViewEx) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_RIGHT, OnUpdateFileSaveRight) ON_COMMAND(ID_REFRESH, OnRefresh) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave) - ON_COMMAND(ID_SELECTLINEDIFF, OnSelectLineDiff) - ON_UPDATE_COMMAND_UI(ID_SELECTLINEDIFF, OnUpdateSelectLineDiff) + ON_COMMAND(ID_SELECTLINEDIFF, OnSelectLineDiff) + ON_UPDATE_COMMAND_UI(ID_SELECTPREVLINEDIFF, OnUpdateSelectLineDiff) + ON_COMMAND(ID_SELECTPREVLINEDIFF, OnSelectLineDiff) + ON_UPDATE_COMMAND_UI(ID_SELECTPREVLINEDIFF, OnUpdateSelectLineDiff) ON_WM_CONTEXTMENU() ON_UPDATE_COMMAND_UI(ID_EDIT_REPLACE, OnUpdateEditReplace) ON_COMMAND(ID_FILE_LEFT_READONLY, OnLeftReadOnly) @@ -2456,10 +2458,11 @@ void CMergeEditView::OnUpdateCaret() * Select line difference in current line. Selection type * is choosed by highlight type. */ +template void CMergeEditView::OnSelectLineDiff() { // Pass this to the document, to compare this file to other - GetDocument()->Showlinediff(this); + GetDocument()->Showlinediff(this, reversed); } /// Enable select difference menuitem if current line is inside difference. diff --git a/Src/MergeEditView.h b/Src/MergeEditView.h index 118505e6f..0dbb1db05 100644 --- a/Src/MergeEditView.h +++ b/Src/MergeEditView.h @@ -287,6 +287,7 @@ protected: afx_msg void OnUpdateFileSaveRight(CCmdUI* pCmdUI); afx_msg void OnRefresh(); afx_msg void OnUpdateFileSave(CCmdUI* pCmdUI); + template afx_msg void OnSelectLineDiff(); afx_msg void OnUpdateSelectLineDiff(CCmdUI* pCmdUI); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); diff --git a/Src/resource.h b/Src/resource.h index fa00645cc..1aacdf90a 100644 --- a/Src/resource.h +++ b/Src/resource.h @@ -931,6 +931,7 @@ #define ID_EOL_TO_UNIX 32775 #define ID_EOL_TO_MAC 32776 #define ID_FILE_MERGINGMODE 32777 +#define ID_SELECTPREVLINEDIFF 32783 #define ID_SELECTLINEDIFF 32784 #define ID_EDIT_WMGOTO 32785 #define ID_OPTIONS 32786 -- 2.11.0