ON_UPDATE_COMMAND_UI(ID_FILE_MIDDLE_READONLY, OnUpdateMiddleReadOnly)
ON_COMMAND(ID_FILE_RIGHT_READONLY, OnRightReadOnly)
ON_UPDATE_COMMAND_UI(ID_FILE_RIGHT_READONLY, OnUpdateRightReadOnly)
+ ON_COMMAND(ID_RESCAN, OnFileReload)
ON_COMMAND(ID_MERGE_COMPARE_HEX, OnFileRecompareAsBinary)
ON_COMMAND(ID_WINDOW_CHANGE_PANE, OnWindowChangePane)
ON_MESSAGE_VOID(WM_IDLEUPDATECMDUI, OnIdleUpdateCmdUI)
return true;
}
-
bool CImgMergeFrame::IsModified() const
{
for (int pane = 0; pane < m_pImgMergeWindow->GetPaneCount(); ++pane)
m_pDirDoc = pDirDoc;
}
+bool CImgMergeFrame::IsFileChangedOnDisk(int pane) const
+{
+ DiffFileInfo dfi;
+ dfi.Update(m_filePaths[pane]);
+ int tolerance = 0;
+ if (GetOptionsMgr()->GetBool(OPT_IGNORE_SMALL_FILETIME))
+ tolerance = SmallTimeDiff; // From MainFrm.h
+ Poco::Int64 timeDiff = dfi.mtime - m_fileInfo[pane].mtime;
+ if (timeDiff < 0) timeDiff = -timeDiff;
+ if ((timeDiff > tolerance * Poco::Timestamp::resolution()) || (dfi.size != m_fileInfo[pane].size))
+ return true;
+ return false;
+}
+
+void CImgMergeFrame::CheckFileChanged(void)
+{
+ for (int pane = 0; pane < m_pImgMergeWindow->GetPaneCount(); ++pane)
+ {
+ if (IsFileChangedOnDisk(pane))
+ {
+ String msg = LangFormatString1(IDS_FILECHANGED_RESCAN, m_filePaths[pane].c_str());
+ if (AfxMessageBox(msg.c_str(), MB_YESNO | MB_ICONWARNING) == IDYES)
+ {
+ OnFileReload();
+ }
+ break;
+ }
+ }
+}
+
BOOL CImgMergeFrame::PreCreateWindow(CREATESTRUCT& cs)
{
CMDIChildWnd::PreCreateWindow(cs);
else
bResult = m_pImgMergeWindow->OpenImages(ucr::toUTF16(m_filePaths[0]).c_str(), ucr::toUTF16(m_filePaths[1]).c_str(), ucr::toUTF16(m_filePaths[2]).c_str());
+ for (int pane = 0; pane < m_filePaths.GetSize(); ++pane)
+ m_fileInfo[pane].Update(m_filePaths[pane]);
+
// Merge frame has a header bar at top
if (!m_wndFilePathBar.Create(this))
{
theApp.WriteProfileInt(_T("Settings"), _T("ActivePane"), m_pImgMergeWindow->GetActivePane());
}
+void CImgMergeFrame::OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd)
+{
+ CMDIChildWnd::OnMDIActivate(bActivate, pActivateWnd, pDeactivateWnd);
+ if (bActivate)
+ GetMainFrame()->PostMessage(WM_USER + 1);
+}
+
void CImgMergeFrame::OnClose()
{
// Allow user to cancel closing
DoFileSaveAs(m_pImgMergeWindow->GetPaneCount() - 1);
}
+/**
+ * @brief Reloads the opened files
+ */
+void CImgMergeFrame::OnFileReload()
+{
+ if (!PromptAndSaveIfNeeded(true))
+ return;
+ m_pImgMergeWindow->ReloadImages();
+ for (int pane = 0; pane < m_filePaths.GetSize(); ++pane)
+ m_fileInfo[pane].Update(m_filePaths[pane]);
+}
+
void CImgMergeFrame::OnFileClose()
{
OnClose();
#include "EditorFilepathBar.h"
#include "PathContext.h"
+#include "DiffFileInfo.h"
#include "../Externals/winimerge/src/WinIMergeLib.h"
class CDirDoc;
bool GenerateReport(LPCTSTR szFileName);
void DoAutoMerge(int dstPane);
bool IsModified() const;
+ bool IsFileChangedOnDisk(int pane) const;
+ void CheckFileChanged(void);
// Attributes
protected:
PathContext m_filePaths;
String m_strDesc[3];
BUFFERTYPE m_nBufferType[3];
+ DiffFileInfo m_fileInfo[3];
bool m_bRO[3];
bool m_bAutoMerged;
CDirDoc *m_pDirDoc;
//{{AFX_MSG(CImgMergeFrame)
+ afx_msg void OnMDIActivate(BOOL bActivate, CWnd* pActivateWnd, CWnd* pDeactivateWnd);
afx_msg void OnClose();
afx_msg void OnFileSave();
afx_msg void OnUpdateFileSave(CCmdUI* pCmdUI);
afx_msg void OnUpdateMiddleReadOnly(CCmdUI* pCmdUI);
afx_msg void OnRightReadOnly();
afx_msg void OnUpdateRightReadOnly(CCmdUI* pCmdUI);
+ afx_msg void OnFileReload();
afx_msg void OnFileClose();
afx_msg void OnFileRecompareAsBinary();
afx_msg void OnWindowChangePane();
LRESULT CMainFrame::OnUser1(WPARAM wParam, LPARAM lParam)
{
CFrameWnd * pFrame = GetActiveFrame();
- if (pFrame && pFrame->IsKindOf(RUNTIME_CLASS(CChildFrame)))
+ if (pFrame)
{
- CMergeDoc * pMergeDoc = (CMergeDoc *) pFrame->GetActiveDocument();
- if (pMergeDoc)
- pMergeDoc->CheckFileChanged();
+ if (pFrame->IsKindOf(RUNTIME_CLASS(CChildFrame)))
+ {
+ CMergeDoc * pMergeDoc = (CMergeDoc *) pFrame->GetActiveDocument();
+ if (pMergeDoc)
+ pMergeDoc->CheckFileChanged();
+ }
+ else if (pFrame->IsKindOf(RUNTIME_CLASS(CImgMergeFrame)))
+ {
+ CImgMergeFrame *pImgMergeFrame = static_cast<CImgMergeFrame *>(pFrame);
+ pImgMergeFrame->CheckFileChanged();
+ }
}
return 0;
}
#endif
CFrameWnd * pFrame = GetActiveFrame();
- if (pFrame && pFrame->IsKindOf(RUNTIME_CLASS(CChildFrame)))
+ if (pFrame)
{
- CMergeDoc * pMergeDoc = (CMergeDoc *) pFrame->GetActiveDocument();
- if (pMergeDoc)
+ switch (GetFrameType(pFrame))
+ {
+ case FRAME_FILE:
+ {
+ CMergeDoc * pMergeDoc = (CMergeDoc *) pFrame->GetActiveDocument();
+ if (pMergeDoc)
+ PostMessage(WM_USER+1);
+ break;
+ }
+ case FRAME_IMGFILE:
PostMessage(WM_USER+1);
+ break;
+ }
}
}