Exemplo n.º 1
0
/**
 * @brief Display file encoding dialog to user & handle user's choices
 */
bool CMergeDoc::DoFileEncodingDialog()
{
	if (!PromptAndSaveIfNeeded(true))
		return false;
	
	CLoadSaveCodepageDlg dlg(m_nBuffers);
	dlg.EnableSaveCodepage(true);
	dlg.SetCodepages(m_ptBuf[0]->getCodepage());
	if (IDOK != dlg.DoModal())
		return false;

	bool doLeft = dlg.DoesAffectLeft();
	bool doMiddle = dlg.DoesAffectMiddle();
	bool doRight = dlg.DoesAffectRight();
	FileLocation fileloc[3];
	bool bRO[3];
	for (int pane = 0; pane < m_nBuffers; pane++)
	{
		bRO[pane] = m_ptBuf[pane]->GetReadOnly();
		if ((pane == 0 && doLeft) ||
		    (pane == 1 && doRight  && m_nBuffers <  3) ||
		    (pane == 1 && doMiddle && m_nBuffers == 3) ||
		    (pane == 2 && doRight  && m_nBuffers == 3))
		{
			fileloc[pane].encoding.m_unicoding = ucr::NONE;
			fileloc[pane].encoding.m_codepage = dlg.GetLoadCodepage();
		}
		else
		{
			fileloc[pane].encoding.m_unicoding = m_ptBuf[pane]->getUnicoding();
			fileloc[pane].encoding.m_codepage = m_ptBuf[pane]->getCodepage();
		}
		fileloc[pane].setPath(m_filePaths[pane]);
	}
	OpenDocs(m_nBuffers, fileloc, bRO, m_strDesc);
	
	if (dlg.GetSaveCodepage() != dlg.GetLoadCodepage())
	{
		int nSaveCodepage = dlg.GetSaveCodepage();
		for (int pane = 0; pane < m_nBuffers; pane++)
		{
			bRO[pane] = m_ptBuf[pane]->GetReadOnly();
			if (!bRO[pane] && (
				(pane == 0 && doLeft) ||
				(pane == 1 && doRight  && m_nBuffers <  3) ||
				(pane == 1 && doMiddle && m_nBuffers == 3) ||
				(pane == 2 && doRight  && m_nBuffers == 3)
				))
			{
				m_ptBuf[pane]->setCodepage(nSaveCodepage);
				m_ptBuf[pane]->SetModified();
				UpdateHeaderPath(pane);
			}
		}
	}
	return true;
}
Exemplo n.º 2
0
/**
 * @brief Display file encoding dialog to user & handle user's choices
 */
void CMergeDoc::DoFileEncodingDialog()
{
	if (!PromptAndSaveIfNeeded(TRUE))
		return;
	
	CLoadSaveCodepageDlg dlg;
	dlg.SetCodepages(m_ptBuf[0]->getCodepage());
	if (IDOK != dlg.DoModal())
		return;

	bool doLeft = dlg.DoesAffectLeft();
	bool doRight = dlg.DoesAffectRight();
	FileLocation filelocLeft, filelocRight;
	BOOL bROLeft = m_ptBuf[0]->GetReadOnly();
	BOOL bRORight = m_ptBuf[1]->GetReadOnly();
	if (doLeft)
	{
		filelocLeft.encoding.m_unicoding = ucr::NONE;
		filelocLeft.encoding.m_codepage = dlg.GetLoadCodepage();
	}
	else
	{
		filelocLeft.encoding.m_unicoding = m_ptBuf[0]->getUnicoding();
		filelocLeft.encoding.m_codepage = m_ptBuf[0]->getCodepage();
	}
	if (doRight)
	{
		filelocRight.encoding.m_unicoding = ucr::NONE;
		filelocRight.encoding.m_codepage = dlg.GetLoadCodepage();
	}
	else
	{
		filelocRight.encoding.m_unicoding = m_ptBuf[1]->getUnicoding();
		filelocRight.encoding.m_codepage = m_ptBuf[1]->getCodepage();
	}
	filelocLeft.setPath(m_filePaths.GetLeft().c_str());
	filelocRight.setPath(m_filePaths.GetRight().c_str());
	GetMainFrame()->m_strDescriptions[0] = m_strDesc[0];
	GetMainFrame()->m_strDescriptions[1] = m_strDesc[1];
	OpenDocs(filelocLeft, filelocRight, bROLeft, bRORight);
}