* @brief Display file encoding dialog to user & handle user's choices */
| 26 | * @brief Display file encoding dialog to user & handle user's choices |
| 27 | */ |
| 28 | bool CMergeDoc::DoFileEncodingDialog(int pane) |
| 29 | { |
| 30 | if (!PromptAndSaveIfNeeded(true)) |
| 31 | return false; |
| 32 | |
| 33 | CLoadSaveCodepageDlg dlg(m_nBuffers); |
| 34 | dlg.EnableSaveCodepage(true); |
| 35 | if (pane == -1) |
| 36 | { |
| 37 | dlg.SetCodepages(m_ptBuf[0]->getCodepage()); |
| 38 | dlg.SetCodepageBOM(m_ptBuf[0]->getHasBom()); |
| 39 | } |
| 40 | else |
| 41 | { |
| 42 | dlg.SetCodepages(m_ptBuf[pane]->getCodepage()); |
| 43 | dlg.SetCodepageBOM(m_ptBuf[pane]->getHasBom()); |
| 44 | if (pane == 0) |
| 45 | { |
| 46 | dlg.SetAffectMiddle(false); |
| 47 | dlg.SetAffectRight(false); |
| 48 | } |
| 49 | if (m_nBuffers > 2 && pane == 1) |
| 50 | { |
| 51 | dlg.SetAffectLeft(false); |
| 52 | dlg.SetAffectRight(false); |
| 53 | } |
| 54 | if (pane == m_nBuffers - 1) |
| 55 | { |
| 56 | dlg.SetAffectLeft(false); |
| 57 | dlg.SetAffectMiddle(false); |
| 58 | } |
| 59 | } |
| 60 | if (IDOK != dlg.DoModal()) |
| 61 | return false; |
| 62 | |
| 63 | bool doLeft = dlg.DoesAffectLeft(); |
| 64 | bool doMiddle = dlg.DoesAffectMiddle(); |
| 65 | bool doRight = dlg.DoesAffectRight(); |
| 66 | FileLocation fileloc[3]; |
| 67 | bool bRO[3]; |
| 68 | for (pane = 0; pane < m_nBuffers; pane++) |
| 69 | { |
| 70 | bRO[pane] = m_ptBuf[pane]->GetReadOnly(); |
| 71 | if ((pane == 0 && doLeft) || |
| 72 | (pane == 1 && doRight && m_nBuffers < 3) || |
| 73 | (pane == 1 && doMiddle && m_nBuffers == 3) || |
| 74 | (pane == 2 && doRight && m_nBuffers == 3)) |
| 75 | { |
| 76 | fileloc[pane].encoding.SetCodepage(dlg.GetLoadCodepage()); |
| 77 | switch (fileloc[pane].encoding.m_unicoding) |
| 78 | { |
| 79 | case ucr::UTF8: |
| 80 | case ucr::UCS2LE: |
| 81 | case ucr::UCS2BE: |
| 82 | m_ptBuf[pane]->setHasBom(dlg.GetSaveCodepageBOM()); |
| 83 | break; |
| 84 | default: |
| 85 | break; |
nothing calls this directly
no test coverage detected