importexportmgr.cpp

来自「管理项目进度工具的原代码」· C++ 代码 · 共 259 行

CPP
259
字号
// ImportExportMgr.cpp: implementation of the CImportExportMgr class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ImportExportMgr.h"
#include "ITaskList.h"
#include "IImportExport.h"
#include "filemisc.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CImportExportMgr::CImportExportMgr() : m_bInitialized(FALSE)
{

}

CImportExportMgr::~CImportExportMgr()
{
	// cleanup
	int nInterface = m_aImporters.GetSize();

	while (nInterface--)
		m_aImporters[nInterface]->Release();

	m_aImporters.RemoveAll();

	nInterface = m_aExporters.GetSize();

	while (nInterface--)
		m_aExporters[nInterface]->Release();

	m_aExporters.RemoveAll();
}

void CImportExportMgr::Initialize()
{
	if (m_bInitialized)
		return;

	// look at every dll from whereever we are now
	CFileFind ff;
    CString sSearchPath = FileMisc::GetModuleFileName(), sFolder, sDrive;

	FileMisc::SplitPath(sSearchPath, &sDrive, &sFolder);
	FileMisc::MakePath(sSearchPath, sDrive, sFolder, "*", ".dll");

	BOOL bContinue = ff.FindFile(sSearchPath);
	
	while (bContinue)
	{
		bContinue = ff.FindNextFile();
		
		if (!ff.IsDots() && !ff.IsDirectory())
		{
			CString sDllPath = ff.GetFilePath();

			if (IsImportExportDll(sDllPath))
			{
				IImportTasklist* pImporter = CreateImportInterface(sDllPath);

				if (pImporter)
					m_aImporters.Add(pImporter);

				IExportTasklist* pExporter = CreateExportInterface(sDllPath);

				if (pExporter)
					m_aExporters.Add(pExporter);
			}
		}
	}

	m_bInitialized = TRUE;
}

int CImportExportMgr::GetNumImporters() const
{
	if (!m_bInitialized) 
		return 0;

	return m_aImporters.GetSize();
}

int CImportExportMgr::GetNumExporters() const
{
	if (!m_bInitialized) 
		return 0;

	return m_aExporters.GetSize();
}

CString CImportExportMgr::GetImporterMenuText(int nImporter) const
{
	CString sText;

	if (m_bInitialized) 
	{
		if (nImporter >= 0 && nImporter < m_aImporters.GetSize())
		{
			ASSERT (m_aImporters[nImporter] != NULL);
			sText = m_aImporters[nImporter]->GetMenuText();
		}
	}

	return Clean(sText);
}

CString CImportExportMgr::GetImporterFileExtension(int nImporter) const
{
	CString sExt;

	if (m_bInitialized) 
	{
		if (nImporter >= 0 && nImporter < m_aImporters.GetSize())
		{
			ASSERT (m_aImporters[nImporter] != NULL);
			sExt = m_aImporters[nImporter]->GetFileExtension();
		}
	}
	
	return Clean(sExt);
}

CString CImportExportMgr::GetImporterFileFilter(int nImporter) const
{
	CString sFilter;

	if (m_bInitialized) 
	{
		if (nImporter >= 0 && nImporter < m_aImporters.GetSize())
		{
			ASSERT (m_aImporters[nImporter] != NULL);
			sFilter = m_aImporters[nImporter]->GetFileFilter();
		}
	}

	return Clean(sFilter);
}

CString CImportExportMgr::GetExporterMenuText(int nExporter) const
{
	CString sText;

	if (m_bInitialized) 
	{
		if (nExporter >= 0 && nExporter < m_aExporters.GetSize())
		{
			ASSERT (m_aExporters[nExporter] != NULL);
			sText = m_aExporters[nExporter]->GetMenuText();
		}
	}

	return Clean(sText);
}

CString CImportExportMgr::GetExporterFileExtension(int nExporter) const
{
	CString sExt;

	if (m_bInitialized) 
	{
		if (nExporter >= 0 && nExporter < m_aExporters.GetSize())
		{
			ASSERT (m_aExporters[nExporter] != NULL);
			sExt = m_aExporters[nExporter]->GetFileExtension();
		}
	}

	return Clean(sExt);
}

BOOL CImportExportMgr::ExporterHasFileExtension(int nExporter) const
{
	return !GetExporterFileExtension(nExporter).IsEmpty();
}

CString CImportExportMgr::GetExporterFileFilter(int nExporter) const
{
	CString sFilter;

	if (m_bInitialized) 
	{
		if (nExporter >= 0 && nExporter < m_aExporters.GetSize())
		{
			ASSERT (m_aExporters[nExporter] != NULL);
			sFilter = m_aExporters[nExporter]->GetFileFilter();
		}
	}

	return Clean(sFilter);
}

CString& CImportExportMgr::Clean(CString& sText)
{
	sText.TrimLeft();
	sText.TrimRight();

	return sText;
}

BOOL CImportExportMgr::ImportTaskList(LPCTSTR szSrcFile, ITaskList* pDestTasks, int nByImporter) const
{
	if (!m_bInitialized) 
		return FALSE;

	CWaitCursor cursor;

	if (nByImporter >= 0 && nByImporter < m_aImporters.GetSize())
	{
		ASSERT (m_aImporters[nByImporter] != NULL);
		return m_aImporters[nByImporter]->Import(szSrcFile, pDestTasks);
	}

	// else
	return FALSE;
}

BOOL CImportExportMgr::ExportTaskList(const ITaskList* pSrcTasks, LPCTSTR szDestFile, int nByExporter) const
{
	if (!m_bInitialized) 
		return FALSE;

	if (nByExporter >= 0 && nByExporter < m_aExporters.GetSize())
	{
		ASSERT (m_aExporters[nByExporter] != NULL);
		return m_aExporters[nByExporter]->Export(pSrcTasks, szDestFile);
	}

	// else
	return FALSE;
}

int CImportExportMgr::FindImporter(LPCTSTR szFilePath)
{
	CString sExt;
	FileMisc::SplitPath(szFilePath, NULL, NULL, NULL, &sExt);

	if (sExt.IsEmpty()) // no extension
		return -1;

	int nImporter = m_aImporters.GetSize();

	while (nImporter--)
	{
		if (GetImporterFileExtension(nImporter).CompareNoCase(sExt) == 0) // match
			break;
	}
	
	return nImporter; // match or -1
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?