// OmnetppWizardaw.cpp : implementation file
//

#include "stdafx.h"
#include "OmnetppWizard.h"
#include "OmnetppWizardaw.h"
#include "chooser.h"

#include "ObjModel/bldauto.h"
#include "ObjModel/bldguid.h"
#include "ObjModel/blddefs.h"


#ifdef _PSEUDO_DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// This is called immediately after the custom AppWizard is loaded.  Initialize
//  the state of the custom AppWizard here.
void COmnetppWizardAppWiz::InitCustomAppWiz()
{
	// Create a new dialog chooser; CDialogChooser's constructor initializes
	//  its internal array with pointers to the steps.
	m_pChooser = new CDialogChooser;

	// Set the maximum number of steps.
	SetNumberOfSteps(LAST_DLG);

	// TODO: Add any other custom AppWizard-wide initialization here.
	if(!GetFromReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "omnetpp-root", OppDir))
	    if(!GetFromReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++", "", OppDir))
    		strcpy(OppDir, OPP_DIR);
	if(!GetFromReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "tcl-lib-dir", TclDir))
	{
	    strcpy(TclDir, OppDir);
		strcat(TclDir,"\\lib");
	}
	if(!GetFromReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "tcl-ver", TclVer))
	    strcpy(TclVer, TCL_VER);
}

// This is called just before the custom AppWizard is unloaded.
void COmnetppWizardAppWiz::ExitCustomAppWiz()
{
	// Deallocate memory used for the dialog chooser
	ASSERT(m_pChooser != NULL);
	delete m_pChooser;
	m_pChooser = NULL;

	// TODO: Add code here to deallocate resources used by the custom AppWizard
	PutToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "omnetpp-root", OppDir);
	PutToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "tcl-lib-dir", TclDir);
	PutToReg(HKEY_LOCAL_MACHINE, "SOFTWARE\\OMNeT++AppWizard", "tcl-ver", TclVer);


	char in[MAX_PATH], out[MAX_PATH];

	sprintf(in, "%s.dsp.in", m_Dictionary["ROOT"]);
	sprintf(out, "%s.dsp", m_Dictionary["ROOT"]);
	CopyFile(in, out, FALSE);

	// A generalt cpp-k legyenek benne a project-ben, de nem kell megjeleniuk
	for(int i=0; i<compN; i++)
	{
		sprintf(out, "%s_n.cpp", comp[i].name);
		unlink(out);
	}
}

// This is called when the user clicks "Create..." on the New Project dialog
//  or "Next" on one of the custom AppWizard's steps.
CAppWizStepDlg* COmnetppWizardAppWiz::Next(CAppWizStepDlg* pDlg)
{
	// Delegate to the dialog chooser
	return m_pChooser->Next(pDlg);
}

// This is called when the user clicks "Back" on one of the custom
//  AppWizard's steps.
CAppWizStepDlg* COmnetppWizardAppWiz::Back(CAppWizStepDlg* pDlg)
{
	// Delegate to the dialog chooser
	return m_pChooser->Back(pDlg);
}

void COmnetppWizardAppWiz::CustomizeProject(IBuildProject* pProject)
{
	// TODO: Add code here to customize the project.  If you don't wish
	//  to customize project, you may remove this virtual override.

	// This is called immediately after the default Debug and Release
	//  configurations have been created for each platform.  You may customize
	//  existing configurations on this project by using the methods
	//  of IBuildProject and IConfiguration such as AddToolSettings,
	//  RemoveToolSettings, and AddCustomBuildStep. These are documented in
	//  the Developer Studio object model documentation.

	// WARNING!!  IBuildProject and all interfaces you can get from it are OLE
	//  COM interfaces.  You must be careful to release all new interfaces
	//  you acquire.  In accordance with the standard rules of COM, you must
	//  NOT release pProject, unless you explicitly AddRef it, since pProject
	//  is passed as an "in" parameter to this function.  See the documentation
	//  on CCustomAppWiz::CustomizeProject for more information.
//	static struct tagVARIANT reserved;
//	CComVariant reserced=NULL;

//	pProject->AddConfiguration((unsigned short*)"Release TkEnv", reserved);


}

bool COmnetppWizardAppWiz::GetFromReg(HKEY hkey, char *subkey, char *variable, char *value)
{
	HKEY hk;
	unsigned long type;
	unsigned long size;

	if(RegOpenKey(hkey, subkey, &hk) != ERROR_SUCCESS)
		return false;
	size = 255;
	if(RegQueryValueEx(hk, variable, NULL, &type, (unsigned char *)value, &size) != ERROR_SUCCESS)
		return false;
	if(RegCloseKey(hk) != ERROR_SUCCESS)
		return false;

	return true;
}

bool COmnetppWizardAppWiz::PutToReg(HKEY hkey, char *subkey, char *variable, char *value)
{
	HKEY hk;
	unsigned long type;
	unsigned long size;

	if(RegCreateKey(hkey, subkey, &hk) != ERROR_SUCCESS)
		return FALSE;
	size = strlen(value);
	type = REG_SZ;
	if(RegSetValueEx(hk, variable, NULL, type, (unsigned char *)value, size) != ERROR_SUCCESS)
		return FALSE;
	if(RegCloseKey(hk) != ERROR_SUCCESS)
		return FALSE;

	return TRUE;
}

// Here we define one instance of the COmnetppWizardAppWiz class.  You can access
//  m_Dictionary and any other public members of this class through the
//  global OmnetppWizardaw.
COmnetppWizardAppWiz OmnetppWizardaw;



syntax highlighted by Code2HTML, v. 0.9.1