Click here to Skip to main content
15,886,724 members
Articles / Desktop Programming / ATL

CM_ConfigBuilder 1.2g: Visual Studio 6/Visual Studio 2005/Visual Studio 2008 Code Generator for Application Settings Graphic Management

Rate me:
Please Sign up or sign in to vote.
4.94/5 (126 votes)
12 Feb 2008CPOL17 min read 696.5K   9.8K   262  
CM_ConfigBuilder generates and compiles the required files to manage your application's settings/preferences and to store/retrieve them in XML format.
// CAtlMainDialogWrapperGenerator.cpp
//

#include "stdafx.h"
#include "AtlMainDialogWrapperGenerator.h"
#include "AtlMainDialogGenerator.h"
#include "XmlProjectSettings.h"
#include "XmlClassInfo.h"
#include "XmlMemberInfo.h"
#include "XmlProject.h"
#include "XmlProjectIcons.h"
#include "enums.h"

CAtlMainDialogWrapperGenerator::CAtlMainDialogWrapperGenerator()
{}

CAtlMainDialogWrapperGenerator::~CAtlMainDialogWrapperGenerator()
{}


void CAtlMainDialogWrapperGenerator::GenerateHeader()
{
	string fileName;
	string pathName;

	// header file generation
	//
	headCode_ = "";
	Head_generateHeader();
	Head_generateIfDefBegin();
	Head_generateIncludeSection();
	Head_generateClassBegin();
	Head_generateConstructor();
	Head_generateDestructor();
	//Head_generateInterfaceImplementation();
	Head_generateDialogData();
	Head_generateGetSetData();
	Head_generateOverrides();
	Head_generateMessageMap();
	Head_generateDataMembers();
	//Head_generateBuildNode(classInfo_, "");
	Head_generateInitializeTree();
	Head_generateStoreNodeData();
	Head_generateGetNodeInfo();
	Head_generateOnOK();
	//Head_generateUpdateWindowSize();
	//Head_generateDisplayPopupMenu();
	//Head_generateDeleteNode();
	//Head_generateUpdateNodeImages();
	//Head_generateGetChildDialog();
	Head_generateClassEnd();
	Head_generateIfDefEnd();

	// save implementation file
	//
	pathName = BuildGeneratedSourcePath() + "include\\";
	fileName = GetMainDlgName() + ".h";
	SaveFile(pathName + fileName, headCode_);

	hGeneratedFiles_[fileName] = pathName + fileName;
}

void CAtlMainDialogWrapperGenerator::GenerateImplementation()
{
	int count = 0;
	string fileName;
	string pathName;

	// generate implementation file
	//
	implCode_ = "";
	Impl_generateHeader();
	Impl_generateIncludeSection();
	Impl_generateDebugSymbols();
	Impl_generateMainTitle();
	Impl_generateConstructor();
	Impl_generateDestructor();
	Impl_generateGetSetData();
	
	// save implementation file
	//
	pathName = BuildGeneratedSourcePath() + "src\\";
	fileName = GetMainDlgName() + ".cpp";
	SaveFile(pathName + fileName, implCode_);

	cppGeneratedFiles_[fileName] = pathName + fileName;
}

void CAtlMainDialogWrapperGenerator::Generate()
{
	GenerateHeader();
	GenerateImplementation();

}

///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// HEADER FILE GENERATORS
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

void CAtlMainDialogWrapperGenerator::Head_generateHeader()
{
	headCode_ += "// " + GetMainDlgName() + ".h : header file" + xCrLf;
	headCode_ += "//" + xCrLf + xCrLf;
	headCode_ += GetGenerationTimeStamp();
}

void CAtlMainDialogWrapperGenerator::Head_generateIfDefBegin()
{
	headCode_ += "#if !defined(" + DefineOf(GetMainDlgName()) + ")" + xCrLf;
	headCode_ += "#define " + DefineOf(GetMainDlgName()) + xCrLf;
	headCode_ += xCrLf;

	headCode_ += "#ifdef IDD_CFG_MGR_TEMPLATE" + xCrLf;
	headCode_ += xTab + "#undef IDD_CFG_MGR_TEMPLATE" + xCrLf;
	headCode_ += "#endif" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += "#define IDD_CFG_MGR_TEMPLATE                1000" + xCrLf;
	headCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateIncludeSection()
{
	headCode_ += "#include \"stdafx.h\"" + xCrLf;
	headCode_ += "#include \"resource.h\"" + xCrLf;
	headCode_ += "#include \"" + GetClassName() + ".h\"" + xCrLf;
	headCode_ += "#include \"" + GetMainDlgName() + ".h\"" + xCrLf;
	headCode_ += xCrLf;
	Head_generateDlgInclude(classInfo_);
	headCode_ += xCrLf;	
	
	headCode_ += xCrLf;	

}

void CAtlMainDialogWrapperGenerator::Head_generateDlgInclude(CXmlClassInfo* classInfo)
{
	/*
	if (classInfo->GetDefinitionInheritance())
		return;

	if (classInfo->GetRenderingMode() != enRenderingMode_None)
		headCode_ += "#include \"" + GetDlgName(classInfo) + ".h\"" + xCrLf;

	// generate include for class dialogs
	//
	ClassMemberMap* members;
	ClassMemberMap::iterator it;
	CXmlBaseElement* member;

	members = classInfo->GetMembers();

	for (it = members->begin(); it != members->end(); it++) {
		member = it->second;
		if (member->GetDataType() == enDataType_Class)
			Head_generateDlgInclude(dynamic_cast<CXmlClassInfo*>(member));
	}
	*/
}



void CAtlMainDialogWrapperGenerator::Head_generateClassBegin()
{
	string name;
	string prefix;
	string coclassName;

	name = GetMainDlgName();
	prefix = atlSettings_->GetClassPrefix();
	coclassName = prefix + "MainDialog";

	headCode_ += "/////////////////////////////////////////////////////////////////////////////" + xCrLf;
	headCode_ += "// " + name + xCrLf;
	headCode_ += "class ATL_NO_VTABLE " + name + ":" + xCrLf; 
	headCode_ += "public CComObjectRootEx<CComSingleThreadModel>," + xCrLf;
	headCode_ += "public CComCoClass<" + name + ", &CLSID_MainDialog>," + xCrLf;
	headCode_ += "public IDispatchImpl<I" + coclassName + ", &IID_I" + coclassName + ", &LIBID_" + ToUpperCase(prefix) + "Lib>" + xCrLf;
	headCode_ += "{" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += "public:" + xCrLf;
	headCode_ += xTab + "DECLARE_REGISTRY_RESOURCEID(IDR_MAINDIALOG)" + xCrLf;
	headCode_ += xTab + "DECLARE_NOT_AGGREGATABLE(" + name + ")" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += xTab + "DECLARE_PROTECT_FINAL_CONSTRUCT()" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += xTab + "BEGIN_COM_MAP(" + name + ")" + xCrLf;
	headCode_ += xTab + xTab + "COM_INTERFACE_ENTRY(I" + coclassName + ")" + xCrLf;
	headCode_ += xTab + xTab + "COM_INTERFACE_ENTRY(IDispatch)" + xCrLf;
	headCode_ += xTab + "END_COM_MAP()" + xCrLf;
	headCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateConstructor()
{
	//headCode_ += "public:" + xCrLf;
	//headCode_ += xTab + GetMainDlgName() + "(CWnd* pParent = NULL);" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateDestructor()
{
	headCode_ += xTab + "virtual ~" +GetMainDlgName() + "();" + xCrLf + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateDialogData()
{
	/*
	headCode_ += "// Dialog Data" + xCrLf;
	headCode_ += xTab + "//{{AFX_DATA(" +  GetMainDlgName() + ")" + xCrLf;
	headCode_ += xTab + xTab + "enum { IDD = IDD_CFG_MGR_TEMPLATE };"  + xCrLf;
	headCode_ += xTab + xTab + "// NOTE: the ClassWizard will add data members here"  + xCrLf;
	headCode_ += xTab + "//}}AFX_DATA" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += xTab + "CTreeCtrl* tree_;" + xCrLf;
	headCode_ += xTab + "CImageList imageList_;" + xCrLf;
	headCode_ += xCrLf;

	//headCode_ += xTab + "CDialog emptyDlg_;" + xCrLf; 
	//Head_generateDlgDeclare(classInfo_);
	
	headCode_ += xTab + "int viewIndex_EmptyDlg_;" + xCrLf;
	Head_generateViewIndexDeclare(classInfo_);

	headCode_ += xCrLf;
	headCode_ += xTab + "CButton cmdOk_;" + xCrLf; 
	headCode_ += xTab + "CButton cmdCancel_;" + xCrLf; 
	headCode_ += xTab + "AW_CMultiViewSplitter splitterWnd_;" + xCrLf;
	headCode_ += xTab + "CFrameWnd* dummyFrame_;" + xCrLf;
	headCode_ += xCrLf;
	*/

	//headCode_ += xTab + CAtlMainDialogGenerator::GetMainDlgName(atlSettings_->GetClassPrefix()) + " dlg_;" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateOverrides()
{
	/*
	headCode_ += "// Overrides" + xCrLf;
	headCode_ += xTab + "// ClassWizard generated virtual function overrides" + xCrLf;
	headCode_ += xTab + "//{{AFX_VIRTUAL(" + GetMainDlgName() + ")" + xCrLf;
	headCode_ += xTab + "protected:" + xCrLf;
	headCode_ += xTab + xTab + "virtual BOOL PreTranslateMessage(MSG* pMsg);" + xCrLf;
	headCode_ += xTab + "//virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support" + xCrLf;
	headCode_ += xTab + "//}}AFX_VIRTUAL" + xCrLf + xCrLf;
	*/
}

void CAtlMainDialogWrapperGenerator::Head_generateMessageMap()
{
	/*
	headCode_ += "// Implementation" + xCrLf;
	headCode_ += "protected:" + xCrLf;
	headCode_ += xCrLf;
	headCode_ += xTab + "// Generated message map functions" + xCrLf;
	headCode_ += xTab + "//{{AFX_MSG(" + GetMainDlgName() + ")" + xCrLf;
	headCode_ += xTab + "virtual BOOL OnInitDialog();" + xCrLf;
	//headCode_ += xTab + "afx_msg void OnTreeNodeSelectionXXX(NMHDR* pNMHDR, LRESULT* pResult);" + xCrLf;
	headCode_ += xTab + "afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);" + xCrLf;
	headCode_ += xTab + "afx_msg void OnSize(UINT nType, int cx, int cy);" + xCrLf;
	headCode_ += xTab + "afx_msg void OnMnuAppendItem_Array();" + xCrLf;
	headCode_ += xTab + "afx_msg void OnMnuInsertItem_ArrayItem();" + xCrLf; 
	headCode_ += xTab + "afx_msg void OnMnuAppendItem_ArrayItem();" + xCrLf; 
	headCode_ += xTab + "afx_msg void OnMnuRemoveItem_ArrayItem();" + xCrLf; 
	headCode_ += xTab + "afx_msg void OnMnuCreateItem_Map();" + xCrLf;       
	headCode_ += xTab + "afx_msg void OnMnuRemoveItem_MapItem();" + xCrLf;   
	headCode_ += xTab + "afx_msg void OnMnuCreateItem_MapItem();" + xCrLf;   
	headCode_ += xTab + "//}}AFX_MSG" + xCrLf;
	headCode_ += xTab + "DECLARE_MESSAGE_MAP()" + xCrLf;
	
	headCode_ += xTab + "void OnTreeNodeSelection();" + xCrLf;
	headCode_ += xCrLf;
	*/
}

void CAtlMainDialogWrapperGenerator::Head_generateDataMembers()
{
	/*
	headCode_ += "// data members" + xCrLf;
	headCode_ += "//" + xCrLf;
	headCode_ += "protected:" + xCrLf;
	headCode_ += xTab + "map<HTREEITEM, " + atlSettings_->GetClassPrefix() + "TreeNodeInfo> node2InfoMap_;" + xCrLf;
	headCode_ += xTab + "CComObject<" + GetClassName() + "> " + GetCamelCase(classInfo_->GetName()) + "_;" + xCrLf;
	headCode_ += xTab + "int lastSelectedViewIndex_;" + xCrLf;
	headCode_ += xTab + "HTREEITEM lastSelNode_;" + xCrLf;
	headCode_ += xCrLf;
	*/
}

void CAtlMainDialogWrapperGenerator::Head_generateInitializeTree()
{
	//headCode_ += xTab + "void InitializeTree();" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateStoreNodeData()
{
	//headCode_ += xTab + "void StoreNodeData(HTREEITEM node);" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateClassEnd()
{
	headCode_ += "};" + xCrLf + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateIfDefEnd()
{
	headCode_ += "#endif // !defined(" + DefineOf(GetMainDlgName()) + ")" + xCrLf + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateGetChildDialog()
{
	//headCode_ += xTab +"CDialog* GetChildDialog(HTREEITEM treeItem);" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateGetSetData()
{
	//headCode_ += xTab + "STDMETHOD(GetData)(/*[out, retval]*/I" + GetClassName() + "** data);" + xCrLf;
	//headCode_ += xTab + "STDMETHOD(SetData)(/*[int]*/I" + GetClassName() + "* retval);" + xCrLf;
	headCode_ += xTab + "STDMETHOD(Display)(/*[int]*/I" + GetClassName() + "* data, /*[out, retval]*/ VARIANT_BOOL* retval);" + xCrLf;
	headCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateOnOK()
{
	//headCode_ += xTab + "void OnOK();" + xCrLf;
}

void CAtlMainDialogWrapperGenerator::Head_generateGetNodeInfo()
{
	//headCode_ += xTab + atlSettings_->GetClassPrefix() + "TreeNodeInfo GetNodeInfo(HTREEITEM treeNode);" + xCrLf;
}

///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// IMPLEMENTATION FILE GENERATORS
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

void CAtlMainDialogWrapperGenerator::Impl_generateHeader()
{
	implCode_ += "// " + GetMainDlgName() + ".cpp : implementation file" + xCrLf;
	implCode_ += "//" + xCrLf;
	implCode_ += GetGenerationTimeStamp();
	implCode_ += xCrLf;
	//implCode_ += "#pragma warning(disable:4786)" + xCrLf;
	//implCode_ += "#pragma warning(disable:4060) // warning C4060: switch statement contains no 'case' or 'default' labels" + xCrLf;
	
	implCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Impl_generateIncludeSection()
{

	implCode_ += "#include \"stdafx.h\"" + xCrLf;
	implCode_ += "#include \"" + GetMainDlgName() + ".h\"" + xCrLf;
	implCode_ += "#include \"" + CAtlBaseGenerator::GetMainDlgName() + ".h\"" + xCrLf;
	implCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Impl_generateDebugSymbols()
{
	/*implCode_ += "#ifdef _DEBUG" + xCrLf;
	implCode_ += "#define new DEBUG_NEW" + xCrLf;
	implCode_ += "#undef THIS_FILE" + xCrLf;
	implCode_ += "static char THIS_FILE[] = __FILE__;" + xCrLf;
	implCode_ += "#endif" + xCrLf + xCrLf;*/
}

void CAtlMainDialogWrapperGenerator::Impl_generateMainTitle()
{
	implCode_ += "/////////////////////////////////////////////////////////////////////////////" + xCrLf;
	implCode_ += "// " + GetMainDlgName() + "" + xCrLf;
	implCode_ += xCrLf;
}

void CAtlMainDialogWrapperGenerator::Impl_generateConstructor()
{
	
	//implCode_ += GetMainDlgName() +"::" + GetMainDlgName() + "(CWnd* pParent /*=NULL*/):" + xCrLf;
	//implCode_ += xTab + xTab + "CDialog(" + GetMainDlgName() + "::IDD, pParent)," + xCrLf;
	//implCode_ += xTab + xTab + "lastSelectedViewIndex_(-1)," + xCrLf;
	//implCode_ += xTab + xTab + "dummyFrame_(NULL)," + xCrLf;
	//implCode_ += xTab + xTab + "lastSelNode_(NULL)" + xCrLf;
	//implCode_ += "{" + xCrLf;
	//implCode_ += xTab + "//{{AFX_DATA_INIT(" + GetMainDlgName() + ")" + xCrLf;
	//implCode_ += xTab + xTab + "// NOTE: the ClassWizard will add member initialization here" + xCrLf;
	//implCode_ += xTab + "//}}AFX_DATA_INIT" + xCrLf;
	//implCode_ += "}" + xCrLf;
	//implCode_ += xCrLf;	
	
}

void CAtlMainDialogWrapperGenerator::Impl_generateDestructor()
{
	implCode_ += GetMainDlgName() +"::~" + GetMainDlgName() + "()" + xCrLf;
	implCode_ += "{" + xCrLf;
	//implCode_ += xTab + "if (dummyFrame_) " + xCrLf;
	//implCode_ += xTab + xTab + "dummyFrame_ = NULL;" + xCrLf;
	//implCode_ += xCrLf;
	implCode_ += "}" + xCrLf + xCrLf;
}



string CAtlMainDialogWrapperGenerator::GetMainDlgName()
{
	return GetMainDlgName(atlSettings_->GetClassPrefix());
}

string CAtlMainDialogWrapperGenerator::GetMainDlgName(const string& classPrefix)
{
	return classPrefix + "MainDialog";
}

void CAtlMainDialogWrapperGenerator::Impl_generateGetSetData()
{
	/*
	implCode_ += "STDMETHODIMP " + GetMainDlgName() + "::SetData(I" + GetClassName() + "* data)" + xCrLf;
	implCode_ += "{" + xCrLf;
	//implCode_ += xTab + GetCamelCase(classInfo_->GetName()) + "_.Copy(data);" + xCrLf;
	implCode_ += xTab + "dlg_.SetData(data);" + xCrLf;
	implCode_ += xCrLf;
	implCode_ += xTab + "return S_OK;" + xCrLf;
	implCode_ += "}" + xCrLf;
	implCode_ += xCrLf;

	implCode_ += "STDMETHODIMP " + GetMainDlgName() + "::GetData(I" + GetClassName() + "** data)" + xCrLf;
	implCode_ += "{" + xCrLf;
	implCode_ += xTab + "return dlg_.GetData(data);" + xCrLf;
	implCode_ += "}" + xCrLf;
	implCode_ += xCrLf;
	*/

	implCode_ += "STDMETHODIMP " + GetMainDlgName() + "::Display(I" + GetClassName() + "* data, VARIANT_BOOL* retval)" + xCrLf;
	implCode_ += "{" + xCrLf;
	implCode_ += xTab + "AFX_MANAGE_STATE(AfxGetStaticModuleState())" + xCrLf;
	implCode_ += xCrLf;
	implCode_ += xTab + "int ret;" + xCrLf;
	implCode_ += xTab + CAtlBaseGenerator::GetMainDlgName() + " dlg;" + xCrLf;
	implCode_ += xTab + "I" + GetClassName() + "* modifiedData;" + xCrLf;
	implCode_ += xCrLf;
	implCode_ += xTab + "dlg.SetData(data);" + xCrLf;
	implCode_ += xTab + "ret = dlg.DoModal();" + xCrLf;
	implCode_ += xTab + "if (ret == IDOK) {" + xCrLf;
	implCode_ += xTab + xTab + "dlg.GetData(&modifiedData);" + xCrLf;
	implCode_ += xTab + xTab + "data->Copy(modifiedData);" + xCrLf;
	implCode_ += xTab + xTab + "modifiedData->Release();" + xCrLf;
	implCode_ += xTab + "}" + xCrLf;
	implCode_ += xCrLf;
	implCode_ += xTab + "*retval =  (ret == IDOK) ? VARIANT_TRUE : VARIANT_FALSE;" + xCrLf;
	implCode_ += xCrLf;
	implCode_ += xTab + "return S_OK;" + xCrLf;
	implCode_ += "}" + xCrLf;
	implCode_ += xCrLf;
}



By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Italy Italy
For all Stefano's latest code, binaries and tutorials visit www.codemachines.com

Comments and Discussions