|
|
// scrmap1.cpp : implementation file
//
#include "stdafx.h"
#include "ISAdmin.h"
#include "scrmap1.h"
#include "scripmap.h"
#include "addscrip.h"
#include "editscri.h"
#include "delscrip.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// ScrMap1 property page
IMPLEMENT_DYNCREATE(ScrMap1, CGenPage)
ScrMap1::ScrMap1() : CGenPage(ScrMap1::IDD) { //{{AFX_DATA_INIT(ScrMap1)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_rkScriptKey = NULL; m_pseScriptMapList = NULL;
}
ScrMap1::~ScrMap1() { if (m_rkScriptKey != NULL) delete(m_rkScriptKey); DeleteScriptList();
}
void ScrMap1::DoDataExchange(CDataExchange* pDX) { CGenPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(ScrMap1)
DDX_Control(pDX, IDC_SCRIPTMAPLISTBOX, m_lboxScriptMap); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(ScrMap1, CGenPage) //{{AFX_MSG_MAP(ScrMap1)
ON_BN_CLICKED(IDC_SCRIPTMAPADDBUTTON, OnScriptmapaddbutton) ON_BN_CLICKED(IDC_SCRIPTMAPEDITBUTTON, OnScriptmapeditbutton) ON_BN_CLICKED(IDC_SCRIPTMAPREMOVEBUTTON, OnScriptmapremovebutton) ON_LBN_DBLCLK(IDC_SCRIPTMAPLISTBOX, OnDblclkScriptmaplistbox) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// ScrMap1 message handlers
BOOL ScrMap1::OnInitDialog() { CGenPage::OnInitDialog(); CString strNextValueName, strNextValue; BOOL bAllocationError = FALSE; CRegValueIter *rviScriptKeys; DWORD err, ulRegType; m_ulScriptIndex = 0; BOOL bReadError = FALSE; int iTabSpacing = 58;
m_lboxScriptMap.SetTabStops(iTabSpacing);
m_bScriptEntriesExist = FALSE;
m_rkScriptKey = new CRegKey(*m_rkMainKey,_T("Script Map"),REGISTRY_ACCESS_RIGHTS);
// Anything under this key should be a mime mapping.
// No way to verify that, but non-string entries are invalid
// so ignore them.
if (m_rkScriptKey != NULL) { if (*m_rkScriptKey != NULL) { if (rviScriptKeys = new CRegValueIter(*m_rkScriptKey)) { while ((err = rviScriptKeys->Next(&strNextValueName, &ulRegType)) == ERROR_SUCCESS) { if (ulRegType == REG_SZ) { if (m_rkScriptKey->QueryValue(strNextValueName, strNextValue) == 0) { if (!AddScriptEntry(strNextValueName, strNextValue, TRUE)) bAllocationError = TRUE; } else { bReadError = TRUE; } } } delete (rviScriptKeys); } m_bScriptEntriesExist = TRUE; } }
if (!m_bScriptEntriesExist) { //Can't open registry key
CString strNoScriptEntriesMsg; strNoScriptEntriesMsg.LoadString(IDS_SCRIPTNOSCRIPTENTRIESMSG); AfxMessageBox(strNoScriptEntriesMsg); }
if (bAllocationError) { //Error adding one or more entries
CString strAllocFailMsg; strAllocFailMsg.LoadString(IDS_SCRIPTENTRIESALLOCFAILMSG); AfxMessageBox(strAllocFailMsg); }
if (bReadError) { //Error reading one or more entries
CString strReadErrorMsg; strReadErrorMsg.LoadString(IDS_SCRIPTREADERRORMSG); AfxMessageBox(strReadErrorMsg); }
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void ScrMap1::OnScriptmapaddbutton() { // TODO: Add your control notification handler code here
if (m_bScriptEntriesExist) { CAddScript addscriptGetInfo(this);
if (addscriptGetInfo.DoModal() == IDOK) { if (AddScriptEntry(addscriptGetInfo.GetFileExtension(), addscriptGetInfo.GetScriptMap(),FALSE)) { m_bIsDirty = TRUE; SetModified(TRUE); } else { CString strAllocFailMsg; strAllocFailMsg.LoadString(IDS_SCRIPTENTRYALLOCFAILMSG); AfxMessageBox(strAllocFailMsg); } } } else { CString strNoScriptEntriesMsg; strNoScriptEntriesMsg.LoadString(IDS_SCRIPTNOSCRIPTENTRIESMSG); AfxMessageBox(strNoScriptEntriesMsg); } }
void ScrMap1::OnScriptmapeditbutton() { // TODO: Add your control notification handler code here
if (m_bScriptEntriesExist) { int iCurSel; PSCRIPT_ENTRY pseEditEntry;
if ((iCurSel = m_lboxScriptMap.GetCurSel()) != LB_ERR) { for (pseEditEntry = m_pseScriptMapList;(pseEditEntry != NULL) && (m_lboxScriptMap.GetItemData(iCurSel) != pseEditEntry->iListIndex); pseEditEntry = pseEditEntry->NextPtr) ; ASSERT (pseEditEntry != NULL);
CEditScript editscriptGetInfo(this, pseEditEntry->scriptData->GetFileExtension(), pseEditEntry->scriptData->GetScriptMap());
if (editscriptGetInfo.DoModal() == IDOK) { if (EditScriptMapping(iCurSel, pseEditEntry, editscriptGetInfo.GetFileExtension(), editscriptGetInfo.GetScriptMap())) { m_bIsDirty = TRUE; SetModified(TRUE); } else { CString strEditErrorMsg; strEditErrorMsg.LoadString(IDS_SCRIPTEDITERRORMSG); AfxMessageBox(strEditErrorMsg); } } } else { CString strNoHighlightMsg; strNoHighlightMsg.LoadString(IDS_NOHIGHLIGHTMSG); AfxMessageBox(strNoHighlightMsg); } } else { CString strNoScriptEntriesMsg; strNoScriptEntriesMsg.LoadString(IDS_SCRIPTNOSCRIPTENTRIESMSG); AfxMessageBox(strNoScriptEntriesMsg); } }
void ScrMap1::OnScriptmapremovebutton() { // TODO: Add your control notification handler code here
if (m_bScriptEntriesExist) { int iCurSel; CDelScript delscriptGetInfo(this);
if ((iCurSel = m_lboxScriptMap.GetCurSel()) != LB_ERR) { if (delscriptGetInfo.DoModal() == IDOK) { DeleteScriptMapping(iCurSel); m_bIsDirty = TRUE; SetModified(TRUE); } } else { CString strNoHighlightMsg; strNoHighlightMsg.LoadString(IDS_NOHIGHLIGHTMSG); AfxMessageBox(strNoHighlightMsg); } } else { CString strNoScriptEntriesMsg; strNoScriptEntriesMsg.LoadString(IDS_SCRIPTNOSCRIPTENTRIESMSG); AfxMessageBox(strNoScriptEntriesMsg); } }
void ScrMap1::OnDblclkScriptmaplistbox() { // TODO: Add your control notification handler code here
OnScriptmapeditbutton(); }
////////////////////////////////////////////////////////////////////////
// Other Functions
void ScrMap1::SaveInfo() { PSCRIPT_ENTRY pseSaveEntry; CString strTempValue; if (m_bIsDirty) { for (pseSaveEntry = m_pseScriptMapList;(pseSaveEntry != NULL); pseSaveEntry = pseSaveEntry->NextPtr) { if (pseSaveEntry->DeleteCurrent) { m_rkScriptKey->DeleteValue(pseSaveEntry->scriptData->GetPrevFileExtension()); pseSaveEntry->DeleteCurrent = FALSE; } if (pseSaveEntry->WriteNew) { strTempValue = pseSaveEntry->scriptData->GetScriptMap(); m_rkScriptKey->SetValue(pseSaveEntry->scriptData->GetFileExtension(), strTempValue); pseSaveEntry->scriptData->SetPrevFileExtension(); pseSaveEntry->WriteNew = FALSE; } }
}
CGenPage::SaveInfo();
}
BOOL ScrMap1::AddScriptEntry(LPCTSTR pchFileExtension, LPCTSTR pchScriptMap, BOOL bExistingEntry) { PSCRIPT_ENTRY pseNewEntry; int iCurSel; BOOL bretcode = FALSE;
if ((pseNewEntry = new SCRIPT_ENTRY) != NULL) {
if ((pseNewEntry->scriptData = new CScriptMap(pchFileExtension, pchScriptMap, bExistingEntry)) != NULL) { iCurSel = m_lboxScriptMap.AddString(pseNewEntry->scriptData->GetDisplayString()); if ((iCurSel != LB_ERR) && (iCurSel != LB_ERRSPACE)) { pseNewEntry->DeleteCurrent = FALSE; pseNewEntry->WriteNew = TRUE; m_lboxScriptMap.SetItemData(iCurSel,m_ulScriptIndex); m_lboxScriptMap.SetCurSel(iCurSel); pseNewEntry->iListIndex = m_ulScriptIndex++; pseNewEntry->NextPtr = m_pseScriptMapList; m_pseScriptMapList = pseNewEntry; bretcode = TRUE; } else { delete (pseNewEntry->scriptData); delete (pseNewEntry); } } else delete (pseNewEntry); } return (bretcode); }
void ScrMap1::DeleteScriptList() { PSCRIPT_ENTRY pseCurEntry;
while (m_pseScriptMapList != NULL) { delete (m_pseScriptMapList->scriptData); pseCurEntry = m_pseScriptMapList; m_pseScriptMapList = m_pseScriptMapList->NextPtr; delete (pseCurEntry); } }
void ScrMap1::DeleteScriptMapping(int iCurSel) { PSCRIPT_ENTRY pseDelEntry; for (pseDelEntry = m_pseScriptMapList;(pseDelEntry != NULL) && (m_lboxScriptMap.GetItemData(iCurSel) != pseDelEntry->iListIndex); pseDelEntry = pseDelEntry->NextPtr) ; ASSERT (pseDelEntry != NULL);
if (pseDelEntry->scriptData->PrevScriptMapExists()) pseDelEntry->DeleteCurrent = TRUE; pseDelEntry->WriteNew = FALSE; m_lboxScriptMap.DeleteString(iCurSel); }
BOOL ScrMap1::EditScriptMapping(int iCurSel, PSCRIPT_ENTRY pseEditEntry, LPCTSTR pchFileExtension, LPCTSTR pchScriptMap) { BOOL bretcode = FALSE;
pseEditEntry->scriptData->SetFileExtension(pchFileExtension); pseEditEntry->scriptData->SetScriptMap(pchScriptMap);
m_lboxScriptMap.DeleteString(iCurSel); // Delete first so memory is freed
iCurSel = m_lboxScriptMap.AddString(pseEditEntry->scriptData->GetDisplayString());
// There error case on this is incredibly rare, so don't bother saving and restoring the above fields
// Just don't set flags so registry is not updated.
if ((iCurSel != LB_ERR) && (iCurSel != LB_ERRSPACE)) { m_lboxScriptMap.SetItemData(iCurSel,pseEditEntry->iListIndex); if (pseEditEntry->scriptData->PrevScriptMapExists()) pseEditEntry->DeleteCurrent = TRUE; pseEditEntry->WriteNew = TRUE; bretcode = TRUE; }
return (bretcode); }
|