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 /////////////////////////////////////////////////////////////////////////////
8 * @file MergeDocEncoding.cpp
10 * @brief Implementation file for CMergeDoc
16 #include "MergeEditView.h"
17 #include "LoadSaveCodepageDlg.h"
26 * @brief Display file encoding dialog to user & handle user's choices
28 bool CMergeDoc::DoFileEncodingDialog()
30 if (!PromptAndSaveIfNeeded(true))
33 CLoadSaveCodepageDlg dlg(m_nBuffers);
34 dlg.EnableSaveCodepage(true);
35 dlg.SetCodepages(m_ptBuf[0]->getCodepage());
36 dlg.SetCodepageBOM(m_ptBuf[0]->getHasBom());
37 if (IDOK != dlg.DoModal())
40 bool doLeft = dlg.DoesAffectLeft();
41 bool doMiddle = dlg.DoesAffectMiddle();
42 bool doRight = dlg.DoesAffectRight();
43 FileLocation fileloc[3];
45 for (int pane = 0; pane < m_nBuffers; pane++)
47 bRO[pane] = m_ptBuf[pane]->GetReadOnly();
48 if ((pane == 0 && doLeft) ||
49 (pane == 1 && doRight && m_nBuffers < 3) ||
50 (pane == 1 && doMiddle && m_nBuffers == 3) ||
51 (pane == 2 && doRight && m_nBuffers == 3))
53 fileloc[pane].encoding.SetCodepage(dlg.GetLoadCodepage());
54 switch (fileloc[pane].encoding.m_unicoding)
59 m_ptBuf[pane]->setHasBom(dlg.GetSaveCodepageBOM());
67 fileloc[pane].encoding.m_unicoding = m_ptBuf[pane]->getUnicoding();
68 fileloc[pane].encoding.m_codepage = m_ptBuf[pane]->getCodepage();
70 fileloc[pane].setPath(m_filePaths[pane]);
72 OpenDocs(m_nBuffers, fileloc, bRO, m_strDesc);
74 if (dlg.GetSaveCodepage() != dlg.GetLoadCodepage() || m_ptBuf[0]->getHasBom() != dlg.GetSaveCodepageBOM())
76 int nSaveCodepage = dlg.GetSaveCodepage();
77 for (int pane = 0; pane < m_nBuffers; pane++)
79 bRO[pane] = m_ptBuf[pane]->GetReadOnly();
81 (pane == 0 && doLeft) ||
82 (pane == 1 && doRight && m_nBuffers < 3) ||
83 (pane == 1 && doMiddle && m_nBuffers == 3) ||
84 (pane == 2 && doRight && m_nBuffers == 3)
87 switch (nSaveCodepage)
92 m_ptBuf[pane]->setHasBom(dlg.GetSaveCodepageBOM());
97 m_ptBuf[pane]->setCodepage(nSaveCodepage);
98 m_ptBuf[pane]->SetModified();
99 UpdateHeaderPath(pane);
100 ForEachView([](auto& pView) { pView->UpdateStatusbar(); });