1 /////////////////////////////////////////////////////////////////////////////
2 // WinMerge: an interactive diff/merge utility
3 // Copyright (C) 1997-2000 Thingamahoochie Software
5 // SPDX-License-Identifier: GPL-2.0-or-later
6 /////////////////////////////////////////////////////////////////////////////
10 * @brief Implementation file for CDirFrame
17 #include "OptionsDef.h"
18 #include "OptionsMgr.h"
25 * @brief Statusbar pane indexes
37 * @brief Width of compare method name pane in statusbar
39 const int COMPMETHOD_PANEL_WIDTH = 100;
41 * @brief Width of filter name pane in statusbar
43 const int FILTER_PANEL_WIDTH = 100;
46 * @brief Bottom statusbar panels and indicators
48 static UINT indicators[] =
50 ID_SEPARATOR, // status line indicator
59 * @brief RO status panel width
61 static UINT RO_PANEL_WIDTH = 30;
63 /////////////////////////////////////////////////////////////////////////////
66 IMPLEMENT_DYNCREATE(CDirFrame, CMergeFrameCommon)
68 CDirFrame::CDirFrame()
69 : CMergeFrameCommon(IDI_EQUALFOLDER, IDI_NOTEQUALFOLDER)
73 CDirFrame::~CDirFrame()
77 BEGIN_MESSAGE_MAP(CDirFrame, CMergeFrameCommon)
78 //{{AFX_MSG_MAP(CDirFrame)
85 /////////////////////////////////////////////////////////////////////////////
86 // CDirFrame message handlers
89 * @brief Create statusbar
91 int CDirFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
93 if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
96 EnableDocking(CBRS_ALIGN_TOP);
98 // Dir frame has a header bar at top
99 if (!m_wndFilePathBar.Create(this))
101 TRACE0("Failed to create header bar\n");
102 return -1; // fail to create
105 // Directory frame has a status bar
106 if (!m_wndStatusBar.Create(this) ||
107 !m_wndStatusBar.SetIndicators(indicators,
108 sizeof(indicators)/sizeof(UINT)))
110 TRACE0("Failed to create status bar\n");
111 return -1; // fail to create
114 String sText = _("RO");
115 const int lpx = CClientDC(this).GetDeviceCaps(LOGPIXELSX);
116 auto pointToPixel = [lpx](int point) { return MulDiv(point, lpx, 72); };
117 m_wndStatusBar.SetPaneInfo(0, 0, SBPS_STRETCH | SBPS_NOBORDERS, 0);
118 m_wndStatusBar.SetPaneInfo(PANE_COMPMETHOD, ID_STATUS_FILTER, 0, pointToPixel(COMPMETHOD_PANEL_WIDTH));
119 m_wndStatusBar.SetPaneInfo(PANE_FILTER, ID_STATUS_FILTER, 0, pointToPixel(FILTER_PANEL_WIDTH));
120 m_wndStatusBar.SetPaneInfo(PANE_LEFT_RO, ID_STATUS_LEFTDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
121 m_wndStatusBar.SetPaneInfo(PANE_MIDDLE_RO, ID_STATUS_MIDDLEDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
122 m_wndStatusBar.SetPaneInfo(PANE_RIGHT_RO, ID_STATUS_RIGHTDIR_RO, 0, pointToPixel(RO_PANEL_WIDTH));
123 m_wndStatusBar.SetPaneText(PANE_LEFT_RO, sText.c_str(), TRUE);
124 m_wndStatusBar.SetPaneText(PANE_MIDDLE_RO, sText.c_str(), TRUE);
125 m_wndStatusBar.SetPaneText(PANE_RIGHT_RO, sText.c_str(), TRUE);
127 // load docking positions and sizes
128 CDockState dockState;
129 dockState.LoadState(_T("Settings-DirFrame"));
130 SetDockState(dockState);
136 * @brief Set statusbar text
138 void CDirFrame::SetStatus(LPCTSTR szStatus)
140 m_wndStatusBar.SetPaneText(0, szStatus);
144 * @brief Set current compare method name to statusbar
145 * @param [in] nCompMethod compare method to show
147 void CDirFrame::SetCompareMethodStatusDisplay(int nCompMethod)
149 m_wndStatusBar.SetPaneText(PANE_COMPMETHOD, LoadResString(IDS_COMPMETHOD_FULL_CONTENTS + nCompMethod).c_str());
153 * @brief Set active filter name to statusbar
154 * @param [in] szFilter Filtername to show
156 void CDirFrame::SetFilterStatusDisplay(LPCTSTR szFilter)
158 m_wndStatusBar.SetPaneText(PANE_FILTER, szFilter);
162 * @brief Restore maximized state of directory compare window
164 void CDirFrame::ActivateFrame(int nCmdShow)
166 CMergeFrameCommon::ActivateFrame(nCmdShow);
170 * @brief Update any resources necessary after a GUI language change
172 void CDirFrame::UpdateResources()
176 void CDirFrame::OnClose()
178 CMDIChildWnd::OnClose();
182 * @brief Save maximized state before destroying window
184 BOOL CDirFrame::DestroyWindow()
186 // save docking positions and sizes
187 CDockState dockState;
188 GetDockState(dockState);
189 dockState.SaveState(_T("Settings-DirFrame"));
191 return CMDIChildWnd::DestroyWindow();
194 void CDirFrame::OnSize(UINT nType, int cx, int cy)
196 CMDIChildWnd::OnSize(nType, cx, cy);
198 m_wndFilePathBar.Resize();