[GME-commit] GMESRC/Paradigms/MetaGME/MetaInterpreter2004/Asp EventsDial.cpp,NONE,1.1 EventsDial.h,NONE,1.1 Options.cpp,NONE,1.1 options.h,NONE,1.1

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Fri Nov 5 15:25:10 CST 2004


Update of /var/lib/gme/GMESRC/Paradigms/MetaGME/MetaInterpreter2004/Asp
In directory braindrain:/tmp/cvs-serv6256/Asp

Added Files:
	EventsDial.cpp EventsDial.h Options.cpp options.h 
Log Message:
The user can edit upon interpretation the eventmasks and priorities for the cardinality-based contstraints.


CVS User: zolmol

--- NEW FILE: EventsDial.cpp ---
// EventsDial.cpp : implementation file
//

#include "stdafx.h"
#include "EventsDial.h"

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

/*static*/ int EventsDial::m_valCreated			= 0x80000000;
/*static*/ int EventsDial::m_valDestroyed		= 0x40000000;
/*static*/ int EventsDial::m_valAttr			= 0x00000001;
/*static*/ int EventsDial::m_valRegistry		= 0x00000002;//not exposed to the user
/*static*/ int EventsDial::m_valNewchild		= 0x00000004;
/*static*/ int EventsDial::m_valRelation		= 0x00000008;//ref pointer, set member, conn endpoint change
/*static*/ int EventsDial::m_valProperties		= 0x00000010;
/*static*/ int EventsDial::m_valSubtinst		= 0x00000020;
/*static*/ int EventsDial::m_valBase			= 0x00000040;//obsolete (based on mga.idl)
/*static*/ int EventsDial::m_valPosition		= 0x00000080;//obsolete (based on mga.idl)
/*static*/ int EventsDial::m_valParent			= 0x00000100;
/*static*/ int EventsDial::m_valLostchild		= 0x00000200;
/*static*/ int EventsDial::m_valReferenced		= 0x00000400;
/*static*/ int EventsDial::m_valConnected		= 0x00000800;
/*static*/ int EventsDial::m_valSetIncluded		= 0x00001000;
/*static*/ int EventsDial::m_valRefReleased		= 0x00002000;
/*static*/ int EventsDial::m_valDisconnected	= 0x00004000;
/*static*/ int EventsDial::m_valSetExcluded		= 0x00008000;
/*static*/ int EventsDial::m_valUserBits		= 0x00FF0000;//not exposed to the user
/*static*/ int EventsDial::m_valCloseModel		= 0x00800000;

/////////////////////////////////////////////////////////////////////////////
// EventsDial dialog

EventsDial::EventsDial(CWnd* pParent /*=NULL*/)
	: CDialog(EventsDial::IDD, pParent)
	, m_sumAll( 0)

{
	//{{AFX_DATA_INIT(EventsDial)
	m_chkCreated = FALSE;
	m_chkDestroyed = FALSE;
	m_chkAttr = FALSE;
	m_chkNewchild = FALSE;
	m_chkRelation = FALSE;
	m_chkProperties = FALSE;
	m_chkSubtinst = FALSE;
	m_chkParent = FALSE;
	m_chkLostchild = FALSE;
	m_chkReferenced = FALSE;
	m_chkConnected = FALSE;
	m_chkIncludeInSet = FALSE;
	m_chkDisconnect = FALSE;
	m_chkUnrefer = FALSE;
	m_chkExcludeFromSet = FALSE;
	m_chkCloseModel = FALSE;
	//}}AFX_DATA_INIT
}


void EventsDial::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(EventsDial)
	DDX_Check(pDX, IDC_CHECK1, m_chkCreated);
	DDX_Check(pDX, IDC_CHECK2, m_chkDestroyed);
	DDX_Check(pDX, IDC_CHECK3, m_chkAttr);
	DDX_Check(pDX, IDC_CHECK5, m_chkNewchild);
	DDX_Check(pDX, IDC_CHECK6, m_chkRelation);
	DDX_Check(pDX, IDC_CHECK7, m_chkProperties);
	DDX_Check(pDX, IDC_CHECK8, m_chkSubtinst);
	DDX_Check(pDX, IDC_CHECK11, m_chkParent);
	DDX_Check(pDX, IDC_CHECK12, m_chkLostchild);
	DDX_Check(pDX, IDC_CHECK13, m_chkReferenced);
	DDX_Check(pDX, IDC_CHECK14, m_chkConnected);
	DDX_Check(pDX, IDC_CHECK16, m_chkIncludeInSet);
	DDX_Check(pDX, IDC_CHECK17, m_chkDisconnect);
	DDX_Check(pDX, IDC_CHECK18, m_chkUnrefer);
	DDX_Check(pDX, IDC_CHECK19, m_chkExcludeFromSet);
	DDX_Check(pDX, IDC_CHECK15, m_chkCloseModel);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(EventsDial, CDialog)
	//{{AFX_MSG_MAP(EventsDial)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// EventsDial message handlers

BOOL EventsDial::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_chkCreated		= ( m_sumAll & m_valCreated) != 0;
	m_chkDestroyed		= ( m_sumAll & m_valDestroyed) != 0;
	m_chkAttr			= ( m_sumAll & m_valAttr) != 0;
	//m_chkRegistry		= ( m_sumAll & m_valRegistry) != 0;
	m_chkNewchild		= ( m_sumAll & m_valNewchild) != 0;
	m_chkRelation		= ( m_sumAll & m_valRelation) != 0;
	m_chkProperties		= ( m_sumAll & m_valProperties) != 0;
	m_chkSubtinst		= ( m_sumAll & m_valSubtinst) != 0;
	//m_chkBase			= ( m_sumAll & m_valBase) != 0;
	//m_chkPosition		= ( m_sumAll & m_valPosition) != 0;
	m_chkParent			= ( m_sumAll & m_valParent) != 0;
	m_chkLostchild		= ( m_sumAll & m_valLostchild) != 0;
	m_chkReferenced		= ( m_sumAll & m_valReferenced) != 0;
	m_chkConnected		= ( m_sumAll & m_valConnected) != 0;
	m_chkIncludeInSet	= ( m_sumAll & m_valSetIncluded ) != 0;
	m_chkUnrefer		= ( m_sumAll & m_valRefReleased ) != 0;
	m_chkDisconnect		= ( m_sumAll & m_valDisconnected ) != 0;
	m_chkExcludeFromSet	= ( m_sumAll & m_valSetExcluded ) != 0;
	m_chkCloseModel		= ( m_sumAll & m_valCloseModel) != 0;

	UpdateData( FALSE);

	return TRUE;
}

void EventsDial::OnOK() 
{
	UpdateData( TRUE);

	m_sumAll = 0;

	if( m_chkCreated)			m_sumAll |= m_valCreated;
	if( m_chkDestroyed)			m_sumAll |= m_valDestroyed;
	if( m_chkAttr)				m_sumAll |= m_valAttr;
	//if( m_chkRegistry)		m_sumAll |= m_valRegistry;
	if( m_chkNewchild)			m_sumAll |= m_valNewchild;
	if( m_chkRelation)			m_sumAll |= m_valRelation;
	if( m_chkProperties)		m_sumAll |= m_valProperties;
	if( m_chkSubtinst)			m_sumAll |= m_valSubtinst;
	//if( m_chkBase)			m_sumAll |= m_valBase;
	//if( m_chkPosition)		m_sumAll |= m_valPosition;
	if( m_chkParent)			m_sumAll |= m_valParent;
	if( m_chkLostchild)			m_sumAll |= m_valLostchild;
	if( m_chkReferenced)		m_sumAll |= m_valReferenced;
	if( m_chkConnected)			m_sumAll |= m_valConnected;
	if( m_chkIncludeInSet)		m_sumAll |= m_valSetIncluded;
	if( m_chkUnrefer)			m_sumAll |= m_valRefReleased;
	if( m_chkDisconnect)		m_sumAll |= m_valDisconnected;
	if( m_chkExcludeFromSet)	m_sumAll |= m_valSetExcluded;
	if( m_chkCloseModel)		m_sumAll |= m_valCloseModel;
	
	CDialog::OnOK();
}

--- NEW FILE: EventsDial.h ---
#if !defined(AFX_EVENTSDIAL_H__6AEC715F_5884_4DB8_AB81_DE6C33BF3BF4__INCLUDED_)
#define AFX_EVENTSDIAL_H__6AEC715F_5884_4DB8_AB81_DE6C33BF3BF4__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <afxcmn.h>
#include "resource.h"


/////////////////////////////////////////////////////////////////////////////
// EventsDial dialog

class EventsDial : public CDialog
{
// Construction
public:
	EventsDial(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
	//{{AFX_DATA(EventsDial)
	enum { IDD = IDD_EVENTSDLG };
	BOOL	m_chkCreated;
	BOOL	m_chkDestroyed;
	BOOL	m_chkAttr;
	BOOL	m_chkNewchild;
	BOOL	m_chkRelation;
	BOOL	m_chkProperties;
	BOOL	m_chkSubtinst;
	BOOL	m_chkParent;
	BOOL	m_chkLostchild;
	BOOL	m_chkReferenced;
	BOOL	m_chkConnected;
	BOOL	m_chkIncludeInSet;
	BOOL	m_chkDisconnect;
	BOOL	m_chkUnrefer;
	BOOL	m_chkExcludeFromSet;
	BOOL	m_chkCloseModel;
	//}}AFX_DATA


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(EventsDial)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(EventsDial)
	virtual BOOL OnInitDialog();
	virtual void OnOK();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
public:
	static int m_valCreated;
	static int m_valDestroyed;
	static int m_valAttr;
	static int m_valRegistry;
	static int m_valNewchild;
	static int m_valRelation;
	static int m_valProperties;
	static int m_valSubtinst;
	static int m_valBase;
	static int m_valPosition;
	static int m_valParent;
	static int m_valLostchild;
	static int m_valReferenced;
	static int m_valConnected;
	static int m_valSetIncluded;
	static int m_valRefReleased;
	static int m_valDisconnected;
	static int m_valSetExcluded;
	static int m_valUserBits;
	static int m_valCloseModel;

	// the sum of all values
	int m_sumAll;

};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_EVENTSDIAL_H__6AEC715F_5884_4DB8_AB81_DE6C33BF3BF4__INCLUDED_)

--- NEW FILE: Options.cpp ---
// Options.cpp : implementation file
//

#include "stdafx.h"
#include "Options.h"
#include "EventsDial.h"
#include "BON.h"
#include "BONImpl.h"
#include <afxdlgs.h>

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

/*static*/ const std::string Options::OptionsRegistrySubNode_str = "MetaGME_Options/GeneratedConstraints";
/*static*/ const std::string Options::RegContMask_str = "RegularContainmentEventMask";
/*static*/ const std::string Options::FolContMask_str = "FolderContainmentEventMask";
/*static*/ const std::string Options::ConnectMask_str = "ConnectionEndEventMask";
/*static*/ const std::string Options::Priority_str = "Priority";
/*static*/ const std::string Options::DontAsk_str = "skip_dialog";

/////////////////////////////////////////////////////////////////////////////
// Options dialog

Options::Options(CWnd* pParent /*=NULL*/)
	: CDialog(Options::IDD, pParent)
	, m_valRegContMask( 0 )
	, m_valFolContMask( 0 )
	, m_valConnectMask( 0 )
	, m_valPriority   ( 1 )

{
	//{{AFX_DATA_INIT(Options)
	m_strRegCont = _T("");
	m_strFolCont = _T("");
	m_strConnect = _T("");
	m_dontask = FALSE;
	m_strPriority = _T("");
	//}}AFX_DATA_INIT
}


void Options::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(Options)
	DDX_Control(pDX, IDC_SPIN1, m_spin);
	DDX_Text(pDX, IDC_EDIT1, m_strRegCont);
	DDV_HexNumber(pDX, m_strRegCont);
	DDV_MaxChars(pDX, m_strRegCont, 10);
	DDX_Text(pDX, IDC_EDIT2, m_strFolCont);
	DDV_HexNumber(pDX, m_strFolCont);
	DDV_MaxChars(pDX, m_strFolCont, 10);
	DDX_Text(pDX, IDC_EDIT3, m_strConnect);
	DDV_HexNumber(pDX, m_strConnect);
	DDV_MaxChars(pDX, m_strConnect, 10);
	DDX_Check(pDX, IDC_CHECK1, m_dontask);
	DDX_Text(pDX, IDC_EDIT4, m_strPriority);
	DDV_MaxChars(pDX, m_strPriority, 2);
	DDV_MinMaxInt(pDX, atoi( m_strPriority), 1, 10);
	//}}AFX_DATA_MAP
}

void PASCAL Options::DDV_HexNumber(CDataExchange* pDX, const CString& nmb)
{
	if( !pDX->m_bSaveAndValidate) return;

	CString whitespace = " \t\n";
	CString digits = "0123456789";
	CString hexadigits = "0123456789abcdefABCDEF";
	bool fail = false;
	int i = 0;

	//skip whitespaces
	while( i < nmb.GetLength() && whitespace.Find( nmb.GetAt( i)) != -1) ++i;
	
	if( i == nmb.GetLength()) //empty
	{
		return;//do not fail if empty string, will be considered 0
	}

	bool hex = false;
	if( i + 1 < nmb.GetLength() && nmb.GetAt(i) == '0' && (nmb.GetAt(i + 1) == 'x' || nmb.GetAt(i + 1) == 'X'))
	{
		i += 2;
		hex = true;
		digits = hexadigits;
	}

	while( i < nmb.GetLength() && digits.Find( nmb.GetAt(i)) != -1) ++i;
	
	fail = i < nmb.GetLength();

	if( fail)
	{
		AfxMessageBox("Enter a hexadecimal value please!", MB_ICONERROR);
		pDX->Fail();
	}
}

BEGIN_MESSAGE_MAP(Options, CDialog)
	//{{AFX_MSG_MAP(Options)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_CHECK1, OnDontAskClick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Options message handlers
BOOL Options::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	char buff[32];
	sprintf( buff, "0x%08X", m_valRegContMask);
	m_strRegCont = buff;
	sprintf( buff, "0x%08X", m_valFolContMask);
	m_strFolCont = buff;
	sprintf( buff, "0x%08X", m_valConnectMask);
	m_strConnect = buff;
	sprintf( buff, "%d", m_valPriority);
	m_strPriority = buff;
	
	m_spin.SetRange( 1, 10);
	m_spin.SetPos( m_valPriority);

	UpdateData( FALSE);

	return TRUE;
}

void Options::OnButton1()
{
	UpdateData( TRUE);
	EventsDial d;

	int val = 0;
	if( sscanf( m_strRegCont, "%X", &val) == 1)
		d.m_sumAll = val;

	if( d.DoModal() == IDOK)
	{
		char buff[32];
		sprintf( buff, "0x%08X", d.m_sumAll);
		m_strRegCont = buff;
		m_valRegContMask = d.m_sumAll;
	}

	UpdateData( FALSE);
}

void Options::OnButton2() 
{
	UpdateData( TRUE);
	EventsDial d;

	int val = 0;
	if( sscanf( m_strFolCont, "%X", &val) == 1)
		d.m_sumAll = val;

	if( d.DoModal() == IDOK)
	{
		char buff[32];
		sprintf( buff, "0x%08X", d.m_sumAll);
		m_strFolCont = buff;
		m_valFolContMask = d.m_sumAll;
	}

	UpdateData( FALSE);
}

void Options::OnButton3() 
{
	UpdateData( TRUE);
	EventsDial d;

	int val = 0;
	if( sscanf( m_strConnect, "%X", &val) == 1)
		d.m_sumAll = val;

	if( d.DoModal() == IDOK)
	{
		char buff[32];
		sprintf( buff, "0x%08X", d.m_sumAll);
		m_strConnect = buff;
		m_valConnectMask = d.m_sumAll;
	}

	UpdateData( FALSE);
}

void Options::setDefs( int reg_cont, int fol_cont, int conn_msk, int prior)
{
	m_valRegContMask = reg_cont;
	m_valFolContMask = fol_cont;
	m_valConnectMask = conn_msk;
	m_valPriority    = prior;
}


void Options::getResults( int* v1, int* v2, int* v3, int* vp, bool* dont_ask)
{
	*v1 = m_valRegContMask;
	*v2 = m_valFolContMask;
	*v3 = m_valConnectMask;
	*vp = m_valPriority;

	*dont_ask = m_dontask == TRUE;
}


/*static*/ bool Options::fetchOpts( const BON::Project& proj, int* v1, int* v2, int* v3, int *pr)
{
	BON::RegistryNode rn = proj->getRootFolder()->getRegistry()->getChild( OptionsRegistrySubNode_str);
	if( !rn) return true;

	if( rn->getValue() == DontAsk_str)
	{
		return false;
	}
	else
	{
		int status = 0;
		BON::RegistryNode ch1 = rn->getChild( RegContMask_str);
		if( ch1 && ch1->getStatus() == BON::RNS_Here)
			status = sscanf( ch1->getValue().c_str(), "%x", v1); //number stored in hexadecimal format
		
		BON::RegistryNode ch2 = rn->getChild( FolContMask_str);
		if( ch2 && ch2->getStatus() == BON::RNS_Here)
			status = sscanf( ch2->getValue().c_str(), "%x", v2);
		
		BON::RegistryNode ch3 = rn->getChild( ConnectMask_str);
		if( ch3 && ch3->getStatus() == BON::RNS_Here)
			status = sscanf( ch3->getValue().c_str(), "%x", v3);

		BON::RegistryNode ch4 = rn->getChild( Priority_str);
		if( ch4 && ch4->getStatus() == BON::RNS_Here)
		{
			*pr = ch4->getIntegerValue();
		}
	}
	return true;
}


/*static*/ void Options::saveOpts( const BON::Project& proj, int v1, int v2, int v3, int vp, bool dont_ask)
{
	char buff[ 10 + 1 ];

	BON::RegistryNode rn = proj->getRootFolder()->getRegistry();
	
	sprintf( buff, "0x%08X", v1);
	rn->setValueByPath( "/" + OptionsRegistrySubNode_str + "/" + RegContMask_str, buff);

	sprintf( buff, "0x%08X", v2);
	rn->setValueByPath( "/" + OptionsRegistrySubNode_str + "/" + FolContMask_str, buff);

	sprintf( buff, "0x%08X", v3);
	rn->setValueByPath( "/" + OptionsRegistrySubNode_str + "/" + ConnectMask_str, buff);

	sprintf( buff, "%d", vp);
	rn->setValueByPath( "/" + OptionsRegistrySubNode_str + "/" + Priority_str, buff);

	if( dont_ask) rn->setValueByPath( "/" + OptionsRegistrySubNode_str, DontAsk_str);
}


void Options::OnOK() 
{
	CDialog::OnOK();//UpdateData( TRUE);

	if( m_strRegCont.IsEmpty() || !sscanf( (LPCTSTR) m_strRegCont, "%x", &m_valRegContMask)) m_valRegContMask = 0;
	if( m_strFolCont.IsEmpty() || !sscanf( (LPCTSTR) m_strFolCont, "%x", &m_valFolContMask)) m_valFolContMask = 0;
	if( m_strConnect.IsEmpty() || !sscanf( (LPCTSTR) m_strConnect, "%x", &m_valConnectMask)) m_valConnectMask = 0;

	m_valPriority = atoi( m_strPriority);
	if( !m_valPriority) m_valPriority = 1;

}

void Options::OnDontAskClick() 
{
	if( ((CButton * ) GetDlgItem( IDC_CHECK1))->GetCheck())
		if( IDCANCEL == MessageBox( CString("If you leave this option checked you can access this dialog later only if you modify the \"") + OptionsRegistrySubNode_str.c_str() + "\" value in the RootFolder's registry to something else than \"" + DontAsk_str.c_str() + "\"!", "Warning!", MB_OKCANCEL | MB_ICONWARNING))
			((CButton *) GetDlgItem( IDC_CHECK1))->SetCheck( 0);
	
}

--- NEW FILE: options.h ---
#if !defined(AFX_OPTIONS_H__D33EAC1F_01D6_4270_93F8_069D3BAFE231__INCLUDED_)
#define AFX_OPTIONS_H__D33EAC1F_01D6_4270_93F8_069D3BAFE231__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "resource.h"
#include "BON.h"
#include <afxcmn.h>
/////////////////////////////////////////////////////////////////////////////
// Options dialog

class Options : public CDialog
{
// Construction
public:
	Options(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
	//{{AFX_DATA(Options)
	enum { IDD = IDD_OPTIONS };
	CSpinButtonCtrl	m_spin;
	CString	m_strRegCont;
	CString	m_strFolCont;
	CString	m_strConnect;
	BOOL	m_dontask;
	CString	m_strPriority;
	//}}AFX_DATA


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(Options)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
	void PASCAL DDV_HexNumber(CDataExchange* pDX, const CString& nmb);

// Implementation
protected:

	// Generated message map functions
	//{{AFX_MSG(Options)
	virtual BOOL OnInitDialog();
	afx_msg void OnButton1();
	afx_msg void OnButton2();
	afx_msg void OnButton3();
	afx_msg void OnDontAskClick();
	virtual void OnOK();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

public:
	void setDefs( int regCont, int folCont, int conn, int prior);
	void getResults( int* v1, int* v2, int* v3, int* vp, bool* ask);

	static bool fetchOpts( const BON::Project& proj, int* v1, int* v2, int* v3, int* vp);
	static void saveOpts( const BON::Project& proj, int v1, int v2, int v3, int vp, bool dont_ask);

	static const std::string OptionsRegistrySubNode_str;
	static const std::string RegContMask_str;
	static const std::string FolContMask_str;
	static const std::string ConnectMask_str;
	static const std::string Priority_str;
	static const std::string DontAsk_str;

protected:
	int m_valRegContMask;// redundancy...
	int m_valFolContMask;
	int m_valConnectMask;
	int m_valPriority;

};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_OPTIONS_H__D33EAC1F_01D6_4270_93F8_069D3BAFE231__INCLUDED_)



More information about the GME-commit mailing list