350 lines
9.4 KiB
C++
350 lines
9.4 KiB
C++
// 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);
|
|
}
|
|
|