|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1999 - 1999 **/ /**********************************************************************/
/*
chkrgdlg.cpp.cpp The check registered names dialog FILE HISTORY: */
#include "stdafx.h"
#include <mbstring.h>
#include "winssnap.h"
#include "actreg.h"
#include "ChkRgdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CCheckRegNames dialog
#define NAME 0
#define SERVER 1
CCheckRegNames::CCheckRegNames(CWnd* pParent /*=NULL*/) : CBaseDialog(CCheckRegNames::IDD, pParent) { //{{AFX_DATA_INIT(CCheckRegNames)
m_nFileName = 0; m_strName = _T(""); m_strServer = _T(""); m_nFileServer = 0; m_strRecNameForList = _T(""); m_fVerifyWithPartners = FALSE; //}}AFX_DATA_INIT
}
void CCheckRegNames::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CCheckRegNames)
DDX_Control(pDX, IDC_EDIT_NAME_LIST, m_editRecordNameForList); DDX_Control(pDX, IDC_SERVER_ADD, m_buttonAddServer); DDX_Control(pDX, IDC_SERVER_REMOVE, m_buttonRemoveServer); DDX_Control(pDX, IDC_SERVER_BROWSE, m_buttonBrowseServer); DDX_Control(pDX, IDC_NAME_REMOVE, m_buttonNameremove); DDX_Control(pDX, IDC_NAME_BROWSE, m_buttonBrowseName); DDX_Control(pDX, IDC_NAME_ADD, m_buttonAddName); DDX_Control(pDX, IDC_LIST_SERVER, m_listServer); DDX_Control(pDX, IDC_LIST_NAME, m_listName); DDX_Control(pDX, IDC_EDIT_SERVER, m_editServer); DDX_Control(pDX, IDC_EDIT_NAME, m_editName); DDX_Radio(pDX, IDC_RADIO_NAME_FILE, m_nFileName); DDX_Text(pDX, IDC_EDIT_NAME, m_strName); DDX_Text(pDX, IDC_EDIT_SERVER, m_strServer); DDX_Radio(pDX, IDC_RADIO_SERVER_FILE, m_nFileServer); DDX_Text(pDX, IDC_EDIT_NAME_LIST, m_strRecNameForList); DDX_Check(pDX, IDC_CHECK_PARTNERS, m_fVerifyWithPartners); //}}AFX_DATA_MAP
DDX_Control(pDX, IDC_IPADDRESS, m_ipaServerIPAddress); }
BEGIN_MESSAGE_MAP(CCheckRegNames, CBaseDialog) //{{AFX_MSG_MAP(CCheckRegNames)
ON_BN_CLICKED(IDC_NAME_BROWSE, OnNameBrowse) ON_BN_CLICKED(IDC_SERVER_BROWSE, OnServerBrowse) ON_EN_CHANGE(IDC_EDIT_NAME, OnChangeEditName) ON_EN_CHANGE(IDC_EDIT_SERVER, OnChangeEditServer) ON_LBN_SELCHANGE(IDC_LIST_NAME, OnSelchangeListName) ON_LBN_SELCHANGE(IDC_LIST_SERVER, OnSelchangeListServer) ON_BN_CLICKED(IDC_NAME_ADD, OnNameAdd) ON_BN_CLICKED(IDC_NAME_REMOVE, OnNameRemove) ON_BN_CLICKED(IDC_SERVER_ADD, OnServerAdd) ON_BN_CLICKED(IDC_SERVER_REMOVE, OnServerRemove) ON_BN_CLICKED(IDC_RADIO_NAME_FILE, OnRadioNameFile) ON_BN_CLICKED(IDC_RADIO_NAME_LIST, OnRadioNameList) ON_BN_CLICKED(IDC_RADIO_SERVER_FILE, OnRadioServerFile) ON_BN_CLICKED(IDC_RADIO_SERVER_LIST, OnRadioServerList) ON_EN_CHANGE(IDC_EDIT_NAME_LIST, OnChangeEditNameList) //}}AFX_MSG_MAP
ON_EN_CHANGE(IDC_IPADDRESS,OnChangeIpAddress) END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCheckRegNames message handlers
BOOL CCheckRegNames::OnInitDialog() { CBaseDialog::OnInitDialog(); EnableControls(NAME, FALSE); EnableControls(SERVER, FALSE); return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCheckRegNames::OnNameBrowse() { CString strFilter; strFilter.LoadString(IDS_TEXT_FILES);
CFileDialog cFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter); if (IDOK != cFileDlg.DoModal()) return;
CString strFile = cFileDlg.GetPathName();
m_editName.EnableWindow(TRUE); m_editName.SetWindowText(strFile); m_editName.SetReadOnly(TRUE);
ParseFile(strFile, NAME);
}
void CCheckRegNames::OnServerBrowse() { CString strFilter; strFilter.LoadString(IDS_TEXT_FILES);
CFileDialog cFileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter); if (IDOK != cFileDlg.DoModal()) return ;
CString strFile = cFileDlg.GetPathName();
m_editServer.EnableWindow(TRUE); m_editServer.SetWindowText(strFile); m_editServer.SetReadOnly(TRUE);
ParseFile(strFile, SERVER); }
void CCheckRegNames::EnableControls(int nNameOrServer, BOOL bEnable) { switch (nNameOrServer) { case SERVER: m_buttonAddServer.EnableWindow(bEnable); m_buttonRemoveServer.EnableWindow(bEnable); //m_listServer.EnableWindow(bEnable);
//m_editServerNameForList.EnableWindow(bEnable);
m_ipaServerIPAddress.EnableWindow(bEnable); m_buttonBrowseServer.EnableWindow(!bEnable); m_editServer.EnableWindow(!bEnable); m_editServer.SetReadOnly(TRUE); break;
case NAME: m_buttonAddName.EnableWindow(bEnable); m_buttonNameremove.EnableWindow(bEnable); //m_listName.EnableWindow(bEnable);
m_editRecordNameForList.EnableWindow(bEnable); m_buttonBrowseName.EnableWindow(!bEnable); m_editName.EnableWindow(!bEnable); m_editName.SetReadOnly(TRUE); break; } }
void CCheckRegNames::ParseFile(CString strFile, int nServerOrName) { TRY { #define MAX_SIZE 64000
CFile cFile(strFile, CFile::modeRead );
CString strContent;
char szContent[MAX_SIZE];
int nSize = cFile.GetLength(); cFile.Read(szContent, nSize);
szContent[nSize] = '\0';
CString strTemp(szContent);
strContent = strTemp; cFile.Close();
if (strContent.IsEmpty()) { ::AfxMessageBox(IDS_ERR_FILE_EMPTY, MB_OK|MB_ICONINFORMATION);
if (nServerOrName == SERVER) m_buttonBrowseServer.SetFocus(); else if(nServerOrName == NAME) m_buttonBrowseName.SetFocus();
return; }
AddFileContent(strContent, nServerOrName); } CATCH( CFileException, e ) { #ifdef _DEBUG
afxDump << "File could not be opened " << e->m_cause << "\n"; #endif
return; } END_CATCH
}
void CCheckRegNames::SetControlState(int nNameOrServer) { UpdateData(); DWORD dwIPAdd;
switch (nNameOrServer) { case NAME: if ( (m_editRecordNameForList.GetWindowTextLength() > 0) && (m_nFileName != 0) ) { m_buttonAddName.EnableWindow(TRUE); } else { m_buttonAddName.EnableWindow(FALSE); }
if ( (m_listName.GetCurSel() == LB_ERR ) || (m_nFileName == 0) ) { m_buttonNameremove.EnableWindow(FALSE); } else { m_buttonNameremove.EnableWindow(TRUE); }
break;
case SERVER: m_ipaServerIPAddress.GetAddress(&dwIPAdd);
if ( (dwIPAdd != 0) && (m_nFileServer != 0) ) { m_buttonAddServer.EnableWindow(TRUE); } else { m_buttonAddServer.EnableWindow(FALSE); }
if ( (m_listServer.GetCurSel() == LB_ERR) || (m_nFileServer == 0) ) { m_buttonRemoveServer.EnableWindow(FALSE); } else { m_buttonRemoveServer.EnableWindow(TRUE); } break; } }
void CCheckRegNames::OnChangeEditName() { UpdateData();
if(m_nFileName != 0) SetControlState(NAME); }
void CCheckRegNames::OnChangeEditServer() { UpdateData();
if(m_nFileServer != 0) SetControlState(SERVER); }
void CCheckRegNames::OnSelchangeListName() { SetControlState(NAME); }
void CCheckRegNames::OnSelchangeListServer() { SetControlState(SERVER); }
void CCheckRegNames::OnOK() { UpdateData();
// if the list radio button is selected
if (m_nFileServer) { Add(SERVER); }
if (m_strServerArray.GetSize() == 0) { AfxMessageBox(IDS_ERR_NAME_CHECK_NO_SERVERS); return; }
//if the list radio button is selected
if (m_nFileName) { Add(NAME); }
if (m_strNameArray.GetSize() == 0) { AfxMessageBox(IDS_ERR_NAME_CHECK_NO_NAMES); return; }
// clean up the name array because of deletions
for (int i = 0; i < m_strNameArray.GetSize(); i++) { CWinsName winsName = m_strNameArray.GetAt(i); if (winsName.strName.IsEmpty()) { m_strNameArray.RemoveAt(i); i--; } }
CBaseDialog::OnOK(); }
void CCheckRegNames::OnNameAdd() { UpdateData();
CString strFormattedName; CWinsName winsName;
if (!ParseName(m_strRecNameForList, winsName, strFormattedName)) { // invalid name
CString strMessage; AfxFormatString1(strMessage, IDS_ERR_INVALID_NAME, m_strRecNameForList); AfxMessageBox(strMessage); return; }
if (!CheckIfPresent(winsName, NAME)) { int nItem = m_listName.AddString(strFormattedName); int nIndex = (int)m_strNameArray.Add(winsName); m_listName.SetItemData(nItem, nIndex);
m_editRecordNameForList.SetWindowText(NULL); } else { ::AfxMessageBox(IDS_STRING_PRESENT); m_editRecordNameForList.SetFocus(); m_editRecordNameForList.SetSel(0,-1); return; } }
void CCheckRegNames::OnNameRemove() { int nSel = m_listName.GetCurSel();
if (nSel == LB_ERR) return;
DWORD_PTR dwIndex = m_listName.GetItemData(nSel); m_listName.DeleteString(nSel); m_strNameArray[(int) dwIndex].strName.Empty();
SetControlState(NAME); }
void CCheckRegNames::OnServerAdd() { UpdateData();
DWORD dwIPAdd; m_ipaServerIPAddress.GetAddress(&dwIPAdd);
if (dwIPAdd == 0) { m_ipaServerIPAddress.SetFocusField(0); return; }
CString strIP; m_ipaServerIPAddress.GetWindowText(strIP);
if (!CheckIfPresent(strIP, SERVER)) { m_listServer.AddString(strIP); m_ipaServerIPAddress.ClearAddress(); } else { ::AfxMessageBox(IDS_STRING_PRESENT); m_ipaServerIPAddress.SetFocusField(0); return; } }
void CCheckRegNames::OnServerRemove() { int nSel = m_listServer.GetCurSel();
if (nSel == LB_ERR) return;
m_listServer.DeleteString(nSel);
SetControlState(SERVER); }
void CCheckRegNames::AddFileContent(CString &strContent, int nNameOrServer) { int nCount; int i = 0; int nPos = 0;
CString strPart;
while (i < strContent.GetLength()) { strPart.Empty();
while(strContent[i] != 10 && strContent[i] != 13) { strPart += strContent[i++]; if (i > strContent.GetLength()) break; }
if (!strPart.IsEmpty()) { if (nNameOrServer == NAME) { CString strFormattedName; CWinsName winsName;
if (!ParseName(strPart, winsName, strFormattedName)) { // invalid name
CString strMessage; AfxFormatString1(strMessage, IDS_INVALID_NAME_IN_FILE, strPart);
if (AfxMessageBox(strMessage, MB_YESNO) == IDNO) break; } else if (!CheckIfAdded(winsName, NAME)) { // add to internal lists and UI
int nItem = m_listName.AddString(strFormattedName); int nIndex = (int)m_strNameArray.Add(winsName); m_listName.SetItemData(nItem, nIndex); } } else if (nNameOrServer == SERVER) { if (!CheckIfAdded(strPart, SERVER) && !strPart.IsEmpty()) { m_listServer.AddString(strPart); m_strServerArray.Add(strPart); } } }
i++; } }
void CCheckRegNames::Add(int nServerOrName) { int nCount; int i = 0;
switch (nServerOrName) { case SERVER: m_strServerArray.RemoveAll(); nCount = m_listServer.GetCount();
for(i = 0; i < nCount; i++) { CString strText; m_listServer.GetText(i, strText); m_strServerArray.Add(strText); } break;
case NAME: /*
m_strNameArray.RemoveAll();
nCount = m_listName.GetCount();
for(i = 0; i < nCount; i++) { CString strText; m_listName.GetText(i, strText); strText.MakeUpper(); m_strNameArray.Add(strText); } */ break; } }
void CCheckRegNames::OnRadioNameFile() { EnableControls(NAME, FALSE); }
void CCheckRegNames::OnRadioNameList() { // set focus to the edit control
m_editRecordNameForList.SetFocus(); EnableControls(NAME, TRUE);
SetControlState(NAME); }
void CCheckRegNames::OnRadioServerFile() { EnableControls(SERVER, FALSE); }
void CCheckRegNames::OnRadioServerList() { // set focus to the IP control meant for the list
m_ipaServerIPAddress.SetFocus(); EnableControls(SERVER, TRUE);
SetControlState(SERVER); }
BOOL CCheckRegNames::CheckIfPresent(CWinsName & winsName, int nNameOrServer) { BOOL bPresent = FALSE;
if (nNameOrServer == NAME) { int nCount = (int)m_strNameArray.GetSize();
for (int i = 0; i < nCount; i++) { CWinsName winsNameCur = m_strNameArray[i];
if (winsName == winsNameCur) { bPresent = TRUE; break; } } }
return bPresent; }
BOOL CCheckRegNames::CheckIfPresent(CString & strText, int nNameOrServer) { BOOL bPresent = FALSE;
if (nNameOrServer == SERVER) { int nCount = m_listServer.GetCount();
for (int i = 0; i < nCount; i++) { CString strListItem; m_listServer.GetText(i, strListItem);
if (strListItem.CompareNoCase(strText) == 0) { bPresent = TRUE; break; } } }
return bPresent; }
BOOL CCheckRegNames::CheckIfAdded(CWinsName winsName, int nNameOrServer) { BOOL bAdded = FALSE;
int nCount; if (nNameOrServer == NAME) { nCount = (int)m_strNameArray.GetSize();
for (int i = 0; i < nCount; i++) { CWinsName winsNameCur = m_strNameArray[i];
if (winsName == winsNameCur) { bAdded = TRUE; break; } } }
return bAdded; }
BOOL CCheckRegNames::CheckIfAdded(CString & strText, int nNameOrServer) { BOOL bAdded = FALSE;
int nCount; if (nNameOrServer == SERVER) { nCount = (int)m_strServerArray.GetSize();
for (int i = 0; i < nCount; i++) { if (m_strServerArray[i].Compare(strText) == 0) { bAdded = TRUE; break; } } }
return bAdded; }
void CCheckRegNames::OnChangeEditNameList() { UpdateData(); if (m_nFileName != 0) SetControlState(NAME); }
void CCheckRegNames::OnChangeIpAddress() { SetControlState(SERVER); }
BOOL CCheckRegNames::ParseName(CString & strNameIn, CWinsName & winsName, CString & strFormattedName) { int nSeparator = strNameIn.Find(_T("*"));
if (nSeparator == -1) { // no * separator between name and type -- in valid name
return FALSE; }
CString strName, strType;
strName = strNameIn.Left(nSeparator); strType = strNameIn.Right(strNameIn.GetLength() - nSeparator - 1);
if (strName.GetLength() > 15 || strName.IsEmpty()) { // name is too long or too short
return FALSE; }
DWORD dwType = _tcstol(strType, NULL, 16); if (dwType > 255) { // invalid type specified
return FALSE; }
winsName.strName = strName; winsName.dwType = dwType;
strFormattedName.Format(_T("%s[%02Xh]"), strName, dwType);
return TRUE; }
|