Skip to content

Commit

Permalink
Folder Compare: Show comparison method menu or filters dialog on stat…
Browse files Browse the repository at this point in the history
…us bar click
  • Loading branch information
sdottaka committed May 14, 2024
1 parent cf1d3e1 commit bb022a9
Show file tree
Hide file tree
Showing 11 changed files with 110 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Src/DirFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ int CDirFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
}

// Directory frame has a status bar
if (!m_wndStatusBar.Create(this) ||
if (!m_wndStatusBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, AFX_IDW_CONTROLBAR_FIRST+30) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
Expand Down
3 changes: 2 additions & 1 deletion Src/DirFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#pragma once

#include "EditorFilepathBar.h"
#include "DirStatusBar.h"
#include "MergeFrameCommon.h"

/////////////////////////////////////////////////////////////////////////////
Expand All @@ -36,7 +37,7 @@ class CDirFrame : public CMergeFrameCommon
void SetStatus(const tchar_t* szStatus);
void SetCompareMethodStatusDisplay(int nCompMethod);
void SetFilterStatusDisplay(const tchar_t* szFilter);
CStatusBar m_wndStatusBar;
CDirStatusBar m_wndStatusBar;
IHeaderBar * GetHeaderInterface();
void UpdateResources();

Expand Down
23 changes: 23 additions & 0 deletions Src/DirStatusBar.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* @file DirStatusBar.cpp
*
* @brief Implementation file for CDirStatusBar class
*/

#include "stdafx.h"
#include "DirStatusBar.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

BEGIN_MESSAGE_MAP(CDirStatusBar, CStatusBar)
ON_WM_SETCURSOR()
END_MESSAGE_MAP()

BOOL CDirStatusBar::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
::SetCursor (::LoadCursor (nullptr, IDC_HAND));
return TRUE;
}

14 changes: 14 additions & 0 deletions Src/DirStatusBar.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* @file DirStatusBar.h
*
* @brief Interface of the CDirStatusBar class.
*
*/
#pragma once

class CDirStatusBar : public CStatusBar
{
protected:
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
DECLARE_MESSAGE_MAP();
};
45 changes: 45 additions & 0 deletions Src/DirView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,7 @@ BEGIN_MESSAGE_MAP(CDirView, CListView)
ON_COMMAND(ID_DIR_COPY_ALL_DISP_COLUMNS, OnCopyAllDisplayedColumns)
ON_UPDATE_COMMAND_UI(ID_DIR_COPY_ALL_DISP_COLUMNS, OnUpdateCopyAllDisplayedColumns)
// Status bar
ON_NOTIFY(NM_CLICK, AFX_IDW_CONTROLBAR_FIRST+30, OnStatusBarClick)
ON_UPDATE_COMMAND_UI(ID_STATUS_DIFFNUM, OnUpdateStatusNum)
ON_UPDATE_COMMAND_UI(ID_STATUS_RIGHTDIR_RO, OnUpdateStatusRightRO)
ON_UPDATE_COMMAND_UI(ID_STATUS_MIDDLEDIR_RO, OnUpdateStatusMiddleRO)
Expand Down Expand Up @@ -4391,6 +4392,50 @@ void CDirView::OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult)
*pResult = 0;
}

void CDirView::OnStatusBarClick(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
switch (pNMItemActivate->iItem)
{
case 0:
break;
case 1:
{
CPoint point;
::GetCursorPos(&point);
CMenu menu;
VERIFY(menu.LoadMenu(IDR_POPUP_DIRVIEW_COMPAREMETHOD));
theApp.TranslateMenu(menu.m_hMenu);
menu.GetSubMenu(0)->CheckMenuRadioItem(ID_DIFF_OPTIONS_COMPMETHOD_FULL_CONTENTS, ID_DIFF_OPTIONS_COMPMETHOD_SIZE,
ID_DIFF_OPTIONS_COMPMETHOD_FULL_CONTENTS + GetOptionsMgr()->GetInt(OPT_CMP_METHOD), MF_BYCOMMAND);
int nID = menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, point.x, point.y, this);
if (nID != 0)
{
GetOptionsMgr()->SaveOption(OPT_CMP_METHOD, nID - ID_DIFF_OPTIONS_COMPMETHOD_FULL_CONTENTS);
m_pSavedTreeState.reset(SaveTreeState(GetDiffContext()));
GetDocument()->Rescan();
}
break;
}
case 2:
{
GetMainFrame()->SelectFilter();
break;
}
case 3:
case 4:
case 5:
{
const int index = std::clamp(pNMItemActivate->iItem - 3, 0, GetDocument()->m_nDirs - 1);
GetDocument()->SetReadOnly(index, !GetDocument()->GetReadOnly(index));
break;
}
default:
break;
}
}

/// Assign column name, using string resource & current column ordering
void CDirView::NameColumn(const DirColInfo *col, int subitem)
{
Expand Down
2 changes: 2 additions & 0 deletions Src/DirView.h
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,8 @@ class CDirView : public CListView
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnSearch();
afx_msg void OnBeginDrag(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnStatusBarClick(NMHDR* pNMHDR, LRESULT* pResult);

//}}AFX_MSG
DECLARE_MESSAGE_MAP()
bool OnHeaderBeginDrag(LPNMHEADER hdr, LRESULT* pResult);
Expand Down
13 changes: 13 additions & 0 deletions Src/Merge.rc
Original file line number Diff line number Diff line change
Expand Up @@ -1251,6 +1251,19 @@ BEGIN
END
END

IDR_POPUP_DIRVIEW_COMPAREMETHOD MENU
BEGIN
POPUP "_POPUP_"
BEGIN
MENUITEM "Full Contents", ID_DIFF_OPTIONS_COMPMETHOD_FULL_CONTENTS
MENUITEM "Quick Contents", ID_DIFF_OPTIONS_COMPMETHOD_QUICK_CONTENTS
MENUITEM "Binary Contents", ID_DIFF_OPTIONS_COMPMETHOD_BINARY_CONTENTS
MENUITEM "Modified Date", ID_DIFF_OPTIONS_COMPMETHOD_MODDATE
MENUITEM "Modified Date and Size", ID_DIFF_OPTIONS_COMPMETHOD_DATESIZE
MENUITEM "Size", ID_DIFF_OPTIONS_COMPMETHOD_SIZE
END
END

/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
Expand Down
2 changes: 2 additions & 0 deletions Src/Merge.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -933,6 +933,7 @@
</ClCompile>
<ClCompile Include="DirAdditionalPropertiesDlg.cpp" />
<ClCompile Include="DirSelectFilesDlg.cpp" />
<ClCompile Include="DirStatusBar.cpp" />
<ClCompile Include="DirWatcher.cpp">
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>$(IntDir)$(TargetName)2.pch</PrecompiledHeaderOutputFile>
Expand Down Expand Up @@ -1455,6 +1456,7 @@
<ClInclude Include="Common\Bitmap.h" />
<ClInclude Include="charsets.h" />
<ClInclude Include="DirAdditionalPropertiesDlg.h" />
<ClInclude Include="DirStatusBar.h" />
<ClInclude Include="DirWatcher.h" />
<ClInclude Include="DirItemIterator.h" />
<ClInclude Include="DirSelectFilesDlg.h" />
Expand Down
6 changes: 6 additions & 0 deletions Src/Merge.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,9 @@
<ClCompile Include="EditPluginDlg.cpp">
<Filter>MFCGui\Dialogs\Source Files</Filter>
</ClCompile>
<ClCompile Include="DirStatusBar.cpp">
<Filter>MFCGui\MDIChild\FolderCompare\Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="charsets.h">
Expand Down Expand Up @@ -1383,6 +1386,9 @@
<ClInclude Include="EditPluginDlg.h">
<Filter>MFCGui\Dialogs\Header Files</Filter>
</ClInclude>
<ClInclude Include="DirStatusBar.h">
<Filter>MFCGui\MDIChild\FolderCompare\Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="res\binarydiff.ico">
Expand Down
2 changes: 1 addition & 1 deletion Src/MergeEditView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4492,7 +4492,7 @@ void CMergeEditView::OnStatusBarClick(NMHDR* pNMHDR, LRESULT* pResult)
CPoint point;
::GetCursorPos(&point);

BCMenu menu;
CMenu menu;
VERIFY(menu.LoadMenu(IDR_POPUP_MERGEEDITFRAME_STATUSBAR_EOL));
theApp.TranslateMenu(menu.m_hMenu);
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, GetDocument()->GetView(0, pane));
Expand Down
1 change: 1 addition & 0 deletions Src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#define IDR_POPUP_PLUGIN_PIPELINE_MENU 125
#define IDR_POPUP_PLUGIN_COMMAND_LINE_MENU 126
#define IDR_POPUP_PLUGIN_ADD_MENU 127
#define IDR_POPUP_DIRVIEW_COMPAREMETHOD 128
#define IDD_ABOUTBOX 200
#define IDD_OPEN 202
#define IDD_SAVECLOSING 203
Expand Down

0 comments on commit bb022a9

Please sign in to comment.