You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2231 lines
62 KiB
2231 lines
62 KiB
/*++
|
|
|
|
Copyright (c) 1994-2000 Microsoft Corporation
|
|
|
|
Module Name :
|
|
websvcext_sheet.cpp
|
|
|
|
Abstract:
|
|
Property Sheet and Pages
|
|
|
|
Author:
|
|
Aaron Lee (AaronL)
|
|
|
|
Project:
|
|
Internet Services Manager
|
|
|
|
Revision History:
|
|
4/1/2002 aaronl Initial creation
|
|
|
|
--*/
|
|
#include "stdafx.h"
|
|
#include "common.h"
|
|
#include "strvalid.h"
|
|
#include "inetprop.h"
|
|
#include "InetMgrApp.h"
|
|
#include "shts.h"
|
|
#include "iisobj.h"
|
|
#include "shlobjp.h"
|
|
#include "websvcext_sheet.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
#define new DEBUG_NEW
|
|
|
|
extern CInetmgrApp theApp;
|
|
|
|
static CComBSTR g_InvalidWebSvcExtCharsPath;
|
|
static CComBSTR g_InvalidWebSvcExtCharsName;
|
|
static BOOL g_fStaticsLoaded = FALSE;
|
|
|
|
|
|
void LoadStatics(void)
|
|
{
|
|
if (!g_fStaticsLoaded)
|
|
{
|
|
g_InvalidWebSvcExtCharsName = _T(",");
|
|
g_fStaticsLoaded = g_InvalidWebSvcExtCharsPath.LoadString(IDS_WEBSVCEXT_INVALID_CHARSET);
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CWebServiceExtensionSheet, CInetPropertySheet)
|
|
|
|
CWebServiceExtensionSheet::CWebServiceExtensionSheet(
|
|
CComAuthInfo * pComAuthInfo,
|
|
LPCTSTR lpszMetaPath,
|
|
CWnd * pParentWnd,
|
|
LPARAM lParam,
|
|
LPARAM lParamParent,
|
|
LPARAM lParam2,
|
|
UINT iSelectPage
|
|
)
|
|
: CInetPropertySheet(pComAuthInfo, lpszMetaPath, pParentWnd, lParam, lParamParent, iSelectPage),
|
|
m_pprops(NULL)
|
|
{
|
|
m_pWebServiceExtension = (CWebServiceExtension *) lParam;
|
|
m_pRestrictionUIEntry = (CRestrictionUIEntry *) lParam2;
|
|
}
|
|
|
|
CWebServiceExtensionSheet::~CWebServiceExtensionSheet()
|
|
{
|
|
FreeConfigurationParameters();
|
|
}
|
|
|
|
HRESULT
|
|
CWebServiceExtensionSheet::LoadConfigurationParameters()
|
|
{
|
|
//
|
|
// Load base properties
|
|
//
|
|
CError err;
|
|
|
|
if (m_pprops == NULL)
|
|
{
|
|
//
|
|
// First call -- load values
|
|
//
|
|
m_pprops = new CWebServiceExtensionProps(m_pWebServiceExtension->QueryInterface(), QueryMetaPath(),m_pRestrictionUIEntry,m_pWebServiceExtension);
|
|
if (!m_pprops)
|
|
{
|
|
TRACEEOL("LoadConfigurationParameters: OOM");
|
|
err = ERROR_NOT_ENOUGH_MEMORY;
|
|
return err;
|
|
}
|
|
err = m_pprops->LoadData();
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionSheet::FreeConfigurationParameters()
|
|
{
|
|
CInetPropertySheet::FreeConfigurationParameters();
|
|
if (m_pprops)
|
|
{
|
|
delete m_pprops;m_pprops=NULL;
|
|
}
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CWebServiceExtensionSheet, CInetPropertySheet)
|
|
//{{AFX_MSG_MAP(CWebServiceExtensionSheet)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
IMPLEMENT_DYNCREATE(CWebServiceExtensionGeneral, CInetPropertyPage)
|
|
|
|
CWebServiceExtensionGeneral::CWebServiceExtensionGeneral(CWebServiceExtensionSheet * pSheet,int iImageIndex, CRestrictionUIEntry * pRestrictionUIEntry)
|
|
: CInetPropertyPage(CWebServiceExtensionGeneral::IDD, pSheet),m_hGeneralImage(NULL)
|
|
{
|
|
m_pRestrictionUIEntry = pRestrictionUIEntry;
|
|
|
|
HBITMAP hImageStrip = (HBITMAP) LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDB_INETMGR32), IMAGE_BITMAP, 0, 0,
|
|
LR_LOADTRANSPARENT
|
|
| LR_LOADMAP3DCOLORS
|
|
| LR_SHARED);
|
|
if (hImageStrip)
|
|
{
|
|
if (0 != iImageIndex)
|
|
{
|
|
m_hGeneralImage = GetBitmapFromStrip(hImageStrip, iImageIndex, 32);
|
|
}
|
|
}
|
|
|
|
if (hImageStrip != NULL)
|
|
{
|
|
FreeResource(hImageStrip);
|
|
hImageStrip=NULL;
|
|
}
|
|
}
|
|
|
|
CWebServiceExtensionGeneral::~CWebServiceExtensionGeneral()
|
|
{
|
|
if (m_hGeneralImage != NULL)
|
|
{
|
|
FreeResource(m_hGeneralImage);
|
|
m_hGeneralImage = NULL;
|
|
}
|
|
}
|
|
|
|
/* virtual */
|
|
HRESULT
|
|
CWebServiceExtensionGeneral::FetchLoadedValues()
|
|
{
|
|
CError err;
|
|
|
|
BEGIN_META_INST_READ(CWebServiceExtensionSheet)
|
|
FETCH_INST_DATA_FROM_SHEET(m_strExtensionName);
|
|
FETCH_INST_DATA_FROM_SHEET(m_strExtensionUsedBy);
|
|
FETCH_INST_DATA_FROM_SHEET(m_iExtensionUsedByCount);
|
|
END_META_INST_READ(err)
|
|
|
|
if (m_iExtensionUsedByCount > 15)
|
|
{
|
|
::ShowScrollBar(CONTROL_HWND(IDC_EXTENSION_USEDBY), SB_VERT, TRUE);
|
|
}
|
|
|
|
return err;
|
|
}
|
|
|
|
/* virtual */
|
|
HRESULT
|
|
CWebServiceExtensionGeneral::SaveInfo()
|
|
{
|
|
ASSERT(IsDirty());
|
|
CError err;
|
|
|
|
try
|
|
{
|
|
CWebServiceExtensionSheet * pSheet = (CWebServiceExtensionSheet *)GetSheet();
|
|
if (pSheet)
|
|
{
|
|
pSheet->GetInstanceProperties().m_strExtensionName = m_strExtensionName;
|
|
pSheet->GetInstanceProperties().m_strExtensionUsedBy = m_strExtensionUsedBy;
|
|
err = pSheet->GetInstanceProperties().WriteDirtyProps();
|
|
}
|
|
}
|
|
catch(CMemoryException * e)
|
|
{
|
|
e->Delete();
|
|
err = ERROR_NOT_ENOUGH_MEMORY;
|
|
}
|
|
return err;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionGeneral::DoDataExchange(CDataExchange * pDX)
|
|
{
|
|
CInetPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWebServiceExtensionGeneral)
|
|
DDX_Control(pDX, IDC_EXTENSION_NAME, m_ExtensionName);
|
|
DDX_Control(pDX, IDC_EXTENSION_USEDBY, m_ExtensionUsedBy);
|
|
//DDX_Text(pDX, IDC_EXTENSION_NAME, m_strExtensionName);
|
|
//DDX_Text(pDX, IDC_EXTENSION_NAME, m_strExtensionUsedBy);
|
|
//DDV_MinMaxChars(pDX, m_strExtensionName, 1, MAX_PATH);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CWebServiceExtensionGeneral, CInetPropertyPage)
|
|
//{{AFX_MSG_MAP(CWebServiceExtensionGeneral)
|
|
ON_WM_COMPAREITEM()
|
|
ON_WM_MEASUREITEM()
|
|
ON_WM_DRAWITEM()
|
|
ON_COMMAND(ID_HELP, OnHelp)
|
|
ON_WM_HELPINFO()
|
|
ON_EN_CHANGE(IDC_EXTENSION_NAME, OnItemChanged)
|
|
ON_EN_CHANGE(IDC_EXTENSION_USEDBY, OnItemChanged)
|
|
ON_WM_DESTROY()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL
|
|
CWebServiceExtensionGeneral::OnInitDialog()
|
|
{
|
|
CInetPropertyPage::OnInitDialog();
|
|
|
|
CString strBeautifullName;
|
|
CString strFormat;
|
|
strFormat.LoadString(IDS_WEBSVCEXT_PROP_PRENAME);
|
|
strBeautifullName.Format(strFormat,m_strExtensionName);
|
|
|
|
m_ExtensionName.SetWindowText(strBeautifullName);
|
|
m_ExtensionUsedBy.SetWindowText(m_strExtensionUsedBy);
|
|
|
|
if (m_hGeneralImage)
|
|
{
|
|
::SendDlgItemMessage(m_hWnd,IDC_FILE_ICON,STM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM) m_hGeneralImage);
|
|
}
|
|
|
|
strFormat.LoadString(IDS_WEBSVCEXT_PROP_CAPTION);
|
|
strBeautifullName.Format(strFormat,m_strExtensionName);
|
|
::SetWindowText(::GetForegroundWindow(), strBeautifullName);
|
|
|
|
SetControlsState();
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL
|
|
CWebServiceExtensionGeneral::OnHelpInfo(HELPINFO * pHelpInfo)
|
|
{
|
|
OnHelp();
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionGeneral::OnHelp()
|
|
{
|
|
WinHelpDebug(0x20000 + CWebServiceExtensionGeneral::IDD);
|
|
::WinHelp(m_hWnd, theApp.m_pszHelpFilePath, HELP_CONTEXT, 0x20000 + CWebServiceExtensionGeneral::IDD);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionGeneral::SetControlsState()
|
|
{
|
|
m_ExtensionName.SetReadOnly(TRUE);
|
|
m_ExtensionUsedBy.SetReadOnly(TRUE);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionGeneral::OnItemChanged()
|
|
{
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionGeneral::OnDestroy()
|
|
{
|
|
CInetPropertyPage::OnDestroy();
|
|
}
|
|
|
|
BOOL
|
|
CWebServiceExtensionGeneral::OnSetActive()
|
|
{
|
|
// dunno why this doesn't work.
|
|
m_ExtensionName.SetSel(0,0);
|
|
//m_ExtensionUsedBy.SetFocus();
|
|
|
|
return CInetPropertyPage::OnSetActive();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
IMPLEMENT_DYNCREATE(CWebServiceExtensionRequiredFiles, CInetPropertyPage)
|
|
|
|
CWebServiceExtensionRequiredFiles::CWebServiceExtensionRequiredFiles(CWebServiceExtensionSheet * pSheet,CComAuthInfo * pComAuthInfo,CRestrictionUIEntry * pRestrictionUIEntry)
|
|
: CInetPropertyPage(CWebServiceExtensionRequiredFiles::IDD, pSheet)
|
|
{
|
|
m_pComAuthInfo = pComAuthInfo;
|
|
m_pInterface = pSheet->m_pWebServiceExtension->QueryInterface();
|
|
|
|
m_pRestrictionUIEntry = pRestrictionUIEntry;
|
|
m_MyRestrictionList.RemoveAll();
|
|
|
|
RestrictionListCopy(&m_MyRestrictionList,&m_pRestrictionUIEntry->strlstRestrictionEntries);
|
|
}
|
|
|
|
CWebServiceExtensionRequiredFiles::~CWebServiceExtensionRequiredFiles()
|
|
{
|
|
// delete the list and all the newly items
|
|
CleanRestrictionList(&m_MyRestrictionList);
|
|
}
|
|
|
|
/* virtual */
|
|
HRESULT
|
|
CWebServiceExtensionRequiredFiles::FetchLoadedValues()
|
|
{
|
|
CError err;
|
|
|
|
BEGIN_META_INST_READ(CWebServiceExtensionSheet)
|
|
//FETCH_INST_DATA_FROM_SHEET(m_strFileList);
|
|
RestrictionListCopy(&m_MyRestrictionList,&pSheet->GetInstanceProperties().m_MyRestrictionList);
|
|
END_META_INST_READ(err)
|
|
|
|
return err;
|
|
}
|
|
|
|
/* virtual */
|
|
HRESULT
|
|
CWebServiceExtensionRequiredFiles::SaveInfo()
|
|
{
|
|
ASSERT(IsDirty());
|
|
CError err;
|
|
|
|
BEGIN_META_INST_WRITE(CWebServiceExtensionSheet)
|
|
//STORE_INST_DATA_ON_SHEET(m_MyRestrictionList);
|
|
RestrictionListCopy(&pSheet->GetInstanceProperties().m_MyRestrictionList,&m_MyRestrictionList);
|
|
END_META_INST_WRITE(err)
|
|
|
|
return err;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::DoDataExchange(CDataExchange * pDX)
|
|
{
|
|
CInetPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWebServiceExtensionRequiredFiles)
|
|
DDX_Control(pDX, IDC_BTN_ADD, m_bnt_Add);
|
|
DDX_Control(pDX, IDC_BTN_REMOVE, m_bnt_Remove);
|
|
DDX_Control(pDX, IDC_BTN_ENABLE, m_bnt_Enable);
|
|
DDX_Control(pDX, IDC_BTN_DISABLE, m_bnt_Disable);
|
|
//}}AFX_DATA_MAP
|
|
|
|
//
|
|
// Private DDX/DDV Routines
|
|
//
|
|
DDX_Control(pDX, IDC_LIST_FILES, m_list_Files);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CWebServiceExtensionRequiredFiles, CInetPropertyPage)
|
|
//{{AFX_MSG_MAP(CWebServiceExtensionRequiredFiles)
|
|
ON_BN_CLICKED(IDC_BTN_ADD, OnDoButtonAdd)
|
|
ON_BN_CLICKED(IDC_BTN_REMOVE, OnDoButtonRemove)
|
|
ON_BN_CLICKED(IDC_BTN_ENABLE, OnDoButtonEnable)
|
|
ON_BN_CLICKED(IDC_BTN_DISABLE, OnDoButtonDisable)
|
|
ON_NOTIFY(NM_DBLCLK, IDC_LIST_FILES, OnDblclkListFiles)
|
|
ON_NOTIFY(NM_CLICK, IDC_LIST_FILES, OnClickListFiles)
|
|
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST_FILES, OnKeydownListFiles)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_FILES, OnSelChangedListFiles)
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_FILES, OnSelChangedListFiles)
|
|
ON_COMMAND(ID_HELP, OnHelp)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
#define COL_1 0
|
|
#define COL_1_WID 256
|
|
|
|
BOOL
|
|
CWebServiceExtensionRequiredFiles::OnInitDialog()
|
|
{
|
|
CInetPropertyPage::OnInitDialog();
|
|
|
|
CString strMyTitle;
|
|
if (m_pRestrictionUIEntry)
|
|
{
|
|
CString strTruncatedName;
|
|
CString strFormat;
|
|
strFormat.LoadString(IDS_REQUIREDFILES_TITLE);
|
|
if (m_pRestrictionUIEntry->strGroupDescription.GetLength() <= 40)
|
|
{
|
|
strTruncatedName = m_pRestrictionUIEntry->strGroupDescription;
|
|
}
|
|
else
|
|
{
|
|
strTruncatedName = m_pRestrictionUIEntry->strGroupDescription.Left(40);
|
|
strTruncatedName = strTruncatedName + _T("...");
|
|
}
|
|
|
|
strMyTitle.Format(strFormat,strTruncatedName,strTruncatedName);
|
|
}
|
|
GetDlgItem(IDC_REQUIREDFILES_STATIC_TITLE)->SetWindowText(strMyTitle);
|
|
|
|
m_list_Files.Initialize(2);
|
|
FillListBox(NULL);
|
|
|
|
SetControlState();
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL
|
|
CWebServiceExtensionRequiredFiles::OnHelpInfo(HELPINFO * pHelpInfo)
|
|
{
|
|
OnHelp();
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnHelp()
|
|
{
|
|
WinHelpDebug(0x20000 + CWebServiceExtensionRequiredFiles::IDD);
|
|
::WinHelp(m_hWnd, theApp.m_pszHelpFilePath, HELP_CONTEXT, 0x20000 + CWebServiceExtensionRequiredFiles::IDD);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::FillListBox(CRestrictionEntry * pSelection)
|
|
{
|
|
m_list_Files.SetRedraw(FALSE);
|
|
m_list_Files.DeleteAllItems();
|
|
int cItems = 0;
|
|
|
|
POSITION pos;
|
|
CString TheKey;
|
|
CRestrictionEntry * pOneEntry = NULL;
|
|
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
m_list_Files.AddItem(pOneEntry);
|
|
++cItems;
|
|
}
|
|
}
|
|
m_list_Files.SetRedraw(TRUE);
|
|
|
|
if (pSelection)
|
|
{
|
|
LVFINDINFO fi;
|
|
fi.flags = LVFI_PARAM;
|
|
fi.lParam = (LPARAM)pSelection;
|
|
fi.vkDirection = VK_DOWN;
|
|
int i = m_list_Files.FindItem(&fi);
|
|
if (i != -1)
|
|
{
|
|
m_list_Files.SelectItem(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::SetControlState()
|
|
{
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
BOOL bAdd_able = TRUE;
|
|
BOOL bRemove_able = FALSE;
|
|
BOOL bEnable_able = FALSE;
|
|
BOOL bDisable_able = FALSE;
|
|
BOOL bNoEntries = TRUE;
|
|
CString TheKey;
|
|
POSITION pos;
|
|
CRestrictionEntry * pOneEntry;
|
|
|
|
if (-1 != nCurSel)
|
|
{
|
|
CRestrictionEntry * pOneEntry = m_list_Files.GetItem(nCurSel);
|
|
if (pOneEntry)
|
|
{
|
|
// Check if the entry -- is "not deletable"
|
|
if (0 == pOneEntry->iDeletable)
|
|
{
|
|
bAdd_able = FALSE;
|
|
bRemove_able = FALSE;
|
|
}
|
|
else
|
|
{
|
|
bRemove_able = TRUE;
|
|
}
|
|
|
|
// check if it's currently prohibited...
|
|
// then we should allow them to "allow"
|
|
if (WEBSVCEXT_STATUS_PROHIBITED == pOneEntry->iStatus)
|
|
{
|
|
bEnable_able = TRUE;
|
|
}
|
|
|
|
// check if it's currently allowed...
|
|
// then we should allow them to "prohibit"
|
|
if (WEBSVCEXT_STATUS_ALLOWED == pOneEntry->iStatus)
|
|
{
|
|
bDisable_able = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bAdd_able || bRemove_able)
|
|
{
|
|
// if we are on one of the "special" entries
|
|
// then we cannot add or remove to the entry.
|
|
if (WEBSVCEXT_TYPE_ALL_UNKNOWN_ISAPI == m_pRestrictionUIEntry->iType || WEBSVCEXT_TYPE_ALL_UNKNOWN_CGI == m_pRestrictionUIEntry->iType)
|
|
{
|
|
bAdd_able = FALSE;
|
|
bRemove_able = FALSE;
|
|
}
|
|
|
|
// or if our entry is marked as not delet-able...
|
|
// then the user cannot add or remove from this list...
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
bNoEntries = FALSE;
|
|
|
|
if (0 == pOneEntry->iDeletable)
|
|
{
|
|
bAdd_able = FALSE;
|
|
bRemove_able = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (TRUE == bNoEntries)
|
|
{
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
bNoEntries = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
m_bnt_Add.EnableWindow(bAdd_able);
|
|
m_bnt_Remove.EnableWindow(bRemove_able);
|
|
m_bnt_Enable.EnableWindow(bEnable_able);
|
|
m_bnt_Disable.EnableWindow(bDisable_able);
|
|
|
|
if (bNoEntries)
|
|
{
|
|
// disable the OK button
|
|
SetModified(FALSE);
|
|
::EnableWindow(::GetDlgItem(::GetForegroundWindow(), IDOK), FALSE);
|
|
}
|
|
else
|
|
{
|
|
// enable the OK button
|
|
::EnableWindow(::GetDlgItem(::GetForegroundWindow(), IDOK), TRUE);
|
|
}
|
|
|
|
m_list_Files.EnableWindow(TRUE);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnClickListFiles(NMHDR * pNMHDR, LRESULT * pResult)
|
|
{
|
|
SetControlState();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnKeydownListFiles(NMHDR * pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_KEYDOWN * pLVKeyDow = (LV_KEYDOWN *)pNMHDR;
|
|
|
|
SetControlState();
|
|
|
|
switch (pLVKeyDow->wVKey)
|
|
{
|
|
case VK_INSERT:
|
|
SendMessage(WM_COMMAND, IDC_BTN_ADD);
|
|
break;
|
|
case VK_DELETE:
|
|
SendMessage(WM_COMMAND, IDC_BTN_REMOVE);
|
|
break;
|
|
case VK_SPACE:
|
|
{
|
|
if (GetDlgItem(IDC_BTN_ENABLE)->IsWindowEnabled())
|
|
{
|
|
OnDoButtonEnable();
|
|
}
|
|
else if (GetDlgItem(IDC_BTN_DISABLE)->IsWindowEnabled())
|
|
{
|
|
OnDoButtonDisable();
|
|
}
|
|
SetControlState();
|
|
}
|
|
break;
|
|
default:
|
|
// Continue default action
|
|
*pResult = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnSelChangedListFiles(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
SetControlState();
|
|
*pResult = 1;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnDblclkListFiles(NMHDR * pNMHDR, LRESULT * pResult)
|
|
{
|
|
if (GetDlgItem(IDC_BTN_ENABLE)->IsWindowEnabled())
|
|
{
|
|
OnDoButtonEnable();
|
|
}
|
|
else if (GetDlgItem(IDC_BTN_DISABLE)->IsWindowEnabled())
|
|
{
|
|
OnDoButtonDisable();
|
|
}
|
|
|
|
SetControlState();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnDoButtonAdd()
|
|
{
|
|
CFileDlg dlg(IsLocal(), m_pInterface, &m_MyRestrictionList, m_pRestrictionUIEntry ? m_pRestrictionUIEntry->strGroupID : _T(""), this);
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
// Get the filename that they entered
|
|
// and add it to our list.
|
|
CString strReturnFileName;
|
|
strReturnFileName = dlg.m_strFileName;
|
|
{
|
|
// Get the Status
|
|
int iMyStatus = WEBSVCEXT_STATUS_PROHIBITED;
|
|
{
|
|
POSITION pos;
|
|
CString TheKey;
|
|
CRestrictionEntry * pOneEntry = NULL;
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
if (WEBSVCEXT_STATUS_ALLOWED == pOneEntry->iStatus)
|
|
{
|
|
iMyStatus = WEBSVCEXT_STATUS_ALLOWED;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
CRestrictionEntry * pNewEntry = CreateRestrictionEntry(
|
|
strReturnFileName,
|
|
iMyStatus,
|
|
1,
|
|
m_pRestrictionUIEntry ? m_pRestrictionUIEntry->strGroupID : _T(""), // from parent data
|
|
m_pRestrictionUIEntry ? m_pRestrictionUIEntry->strGroupDescription : _T(""), // from parent data
|
|
WEBSVCEXT_TYPE_REGULAR);
|
|
if (pNewEntry)
|
|
{
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
CString strKey;strKey=pNewEntry->strFileName;strKey.MakeUpper();
|
|
m_MyRestrictionList.SetAt(strKey,pNewEntry);
|
|
FillListBox(pNewEntry);
|
|
}
|
|
}
|
|
}
|
|
|
|
SetControlState();
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnDoButtonRemove()
|
|
{
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
if (-1 != nCurSel)
|
|
{
|
|
CString TheKey;
|
|
CRestrictionEntry * pRestrictionEntry = m_list_Files.GetItem(nCurSel);
|
|
if (pRestrictionEntry)
|
|
{
|
|
// 1st -- set to disabled...
|
|
pRestrictionEntry->iStatus = WEBSVCEXT_STATUS_PROHIBITED;
|
|
m_list_Files.SetListItem(nCurSel, pRestrictionEntry);
|
|
// then remove the entry...
|
|
{
|
|
TheKey = pRestrictionEntry->strFileName;
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
TheKey.MakeUpper();
|
|
m_MyRestrictionList.RemoveKey(TheKey);
|
|
}
|
|
}
|
|
FillListBox(NULL);
|
|
|
|
int count = m_list_Files.GetItemCount();
|
|
if (count > 0)
|
|
{
|
|
m_list_Files.SelectItem(nCurSel < count ? nCurSel : --nCurSel);
|
|
GetDlgItem(IDC_BTN_REMOVE)->SetFocus();
|
|
}
|
|
else
|
|
{
|
|
m_list_Files.SelectItem(nCurSel, FALSE);
|
|
GetDlgItem(IDC_LIST_FILES)->SetFocus();
|
|
}
|
|
|
|
SetModified(TRUE);
|
|
SetControlState();
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnDoButtonEnable()
|
|
{
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
if (-1 != nCurSel)
|
|
{
|
|
CRestrictionEntry * pRestrictionEntry = m_list_Files.GetItem(nCurSel);
|
|
if (pRestrictionEntry)
|
|
{
|
|
if (WEBSVCEXT_STATUS_ALLOWED != pRestrictionEntry->iStatus)
|
|
{
|
|
pRestrictionEntry->iStatus = WEBSVCEXT_STATUS_ALLOWED;
|
|
SetModified(TRUE);
|
|
}
|
|
m_list_Files.SetListItem(nCurSel, pRestrictionEntry);
|
|
// make sure to select it.
|
|
m_list_Files.SelectItem(nCurSel, TRUE);
|
|
}
|
|
SetControlState();
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebServiceExtensionRequiredFiles::OnDoButtonDisable()
|
|
{
|
|
BOOL bProceed = TRUE;
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
if (-1 != nCurSel)
|
|
{
|
|
CRestrictionEntry * pRestrictionEntry = m_list_Files.GetItem(nCurSel);
|
|
if (pRestrictionEntry)
|
|
{
|
|
if (WEBSVCEXT_TYPE_REGULAR == pRestrictionEntry->iType)
|
|
{
|
|
// Check if this item has apps that
|
|
// are dependent upon it.
|
|
CStringListEx strlstDependApps;
|
|
if (TRUE == ReturnDependentAppsList(m_pInterface,pRestrictionEntry->strGroupID,&strlstDependApps,FALSE))
|
|
{
|
|
bProceed = FALSE;
|
|
|
|
// check if they really want to do this.
|
|
CDepedentAppsDlg dlg(&strlstDependApps,pRestrictionEntry->strGroupDescription,NULL);
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
bProceed = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bProceed)
|
|
{
|
|
if (WEBSVCEXT_STATUS_PROHIBITED != pRestrictionEntry->iStatus)
|
|
{
|
|
pRestrictionEntry->iStatus = WEBSVCEXT_STATUS_PROHIBITED;
|
|
SetModified(TRUE);
|
|
}
|
|
m_list_Files.SetListItem(nCurSel, pRestrictionEntry);
|
|
// make sure to select it.
|
|
m_list_Files.SelectItem(nCurSel, TRUE);
|
|
}
|
|
}
|
|
SetControlState();
|
|
}
|
|
}
|
|
|
|
//
|
|
// properties
|
|
//
|
|
CWebServiceExtensionProps::CWebServiceExtensionProps(
|
|
CMetaInterface * pInterface,
|
|
LPCTSTR meta_path,
|
|
CRestrictionUIEntry * pRestrictionUIEntry,
|
|
CWebServiceExtension * pWebServiceExtension
|
|
)
|
|
: CMetaProperties(pInterface, meta_path),
|
|
m_pRestrictionUIEntry(pRestrictionUIEntry),
|
|
m_pWebServiceExtension(pWebServiceExtension)
|
|
{
|
|
m_MyRestrictionList.RemoveAll();
|
|
m_pInterface = pInterface;
|
|
}
|
|
|
|
CWebServiceExtensionProps::~CWebServiceExtensionProps()
|
|
{
|
|
CleanRestrictionList(&m_MyRestrictionList);
|
|
}
|
|
|
|
//
|
|
// This is where the values get read from the metabase
|
|
//
|
|
void
|
|
CWebServiceExtensionProps::ParseFields()
|
|
{
|
|
// Get the data out from our passed in format.
|
|
CRestrictionUIEntry * pMyPointer = m_pRestrictionUIEntry;
|
|
CString strAllEntries;
|
|
CString strOurGroupID;
|
|
|
|
strOurGroupID = pMyPointer->strGroupID;
|
|
//
|
|
// General property
|
|
//
|
|
m_strExtensionName = pMyPointer->strGroupDescription;
|
|
m_strExtensionUsedBy = _T("");
|
|
m_iExtensionUsedByCount = 0;
|
|
|
|
// Load Applications which are using this GroupID!!!
|
|
// fetch the list from the metabase and loop thru the list
|
|
CStringListEx strlstDependApps;
|
|
if (TRUE == ReturnDependentAppsList(m_pWebServiceExtension->QueryInterface(),strOurGroupID,&strlstDependApps,FALSE))
|
|
{
|
|
CString csOneEntry,csOneEntry2;
|
|
POSITION pos,pos2 = NULL;
|
|
|
|
int count = (int) strlstDependApps.GetCount();
|
|
for (int i = 0; i < count-1; i++)
|
|
{
|
|
if( ( pos = strlstDependApps.FindIndex( i )) != NULL )
|
|
{
|
|
csOneEntry = strlstDependApps.GetAt(pos);
|
|
for (int j = i; j < count; j++ )
|
|
{
|
|
if( ( pos2 = strlstDependApps.FindIndex( j )) != NULL )
|
|
{
|
|
csOneEntry2 = strlstDependApps.GetAt(pos2);
|
|
if (0 < csOneEntry.Compare(csOneEntry2))
|
|
{
|
|
strlstDependApps.SetAt( pos, csOneEntry2 );
|
|
strlstDependApps.SetAt( pos2, csOneEntry );
|
|
csOneEntry = csOneEntry2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
m_iExtensionUsedByCount = count;
|
|
}
|
|
|
|
POSITION pos1 = strlstDependApps.GetHeadPosition();
|
|
while (pos1)
|
|
{
|
|
strAllEntries = strAllEntries + strlstDependApps.GetNext(pos1);
|
|
strAllEntries = strAllEntries + _T("\r\n");
|
|
}
|
|
|
|
if (strAllEntries.IsEmpty())
|
|
{
|
|
strAllEntries.LoadString(IDS_UNKNOWN);
|
|
}
|
|
m_strExtensionUsedBy = strAllEntries;
|
|
|
|
//
|
|
// Required Files propety
|
|
//
|
|
m_MyRestrictionList.RemoveAll();
|
|
RestrictionListCopy(&m_MyRestrictionList,&pMyPointer->strlstRestrictionEntries);
|
|
|
|
return;
|
|
}
|
|
|
|
HRESULT
|
|
CWebServiceExtensionProps::UpdateMMC(DWORD dwUpdateFlag)
|
|
{
|
|
void ** ppParam = (void **) m_pWebServiceExtension;
|
|
if (IsValidAddress( (const void*) *ppParam,sizeof(void*),FALSE))
|
|
{
|
|
CWebServiceExtension * lParam = (CWebServiceExtension *) m_pWebServiceExtension;
|
|
if (lParam)
|
|
{
|
|
// Make sure to refresh the GetProperty stuff too..
|
|
// this will be done in the destructor, so we don't have to do it here
|
|
if (lParam)
|
|
{
|
|
// caution
|
|
if (IsValidAddress( (const void*) lParam->m_ppHandle,sizeof(void*),FALSE))
|
|
{
|
|
if (lParam->QueryResultItem())
|
|
{
|
|
// RefreshData at the container level
|
|
// will sync up everything.
|
|
lParam->m_UpdateFlag = dwUpdateFlag; //PROP_CHANGE_DISPLAY_ONLY;
|
|
MMCPropertyChangeNotify(lParam->m_ppHandle, (LPARAM) lParam);
|
|
}
|
|
else
|
|
{
|
|
TRACEEOLID("MMCPropertyChangeNotify:Looks like this is an orphaned property sheet, don't send notification...\r\n");
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return S_OK;
|
|
}
|
|
//
|
|
// This is where the values get written to the metabase
|
|
//
|
|
HRESULT
|
|
CWebServiceExtensionProps::WriteDirtyProps()
|
|
{
|
|
CError err;
|
|
CRestrictionUIList MasterRestrictionUIList;
|
|
CRestrictionUIEntry NewUIEntry;
|
|
CMetaInterface * pInterface = m_pInterface;
|
|
|
|
// Get the data out from our passed in format.
|
|
CRestrictionUIEntry * pMyPointer = m_pRestrictionUIEntry;
|
|
if (!pMyPointer)
|
|
{
|
|
return E_POINTER;
|
|
}
|
|
|
|
NewUIEntry.iType = pMyPointer->iType;
|
|
NewUIEntry.strGroupID = pMyPointer->strGroupID;
|
|
NewUIEntry.strGroupDescription = m_strExtensionName;
|
|
|
|
// if there is restrictionlist entries
|
|
// then add it to the new entry we are going to write to the metabase.
|
|
{
|
|
POSITION pos;
|
|
CString TheKey;
|
|
CRestrictionEntry * pOneEntry = NULL;
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
TheKey.MakeUpper();
|
|
NewUIEntry.strlstRestrictionEntries.SetAt(TheKey,pOneEntry);
|
|
}
|
|
}
|
|
|
|
pMyPointer->strGroupDescription = m_strExtensionName;
|
|
|
|
// Check if we still have the interface to the metabase...
|
|
if (pInterface)
|
|
{
|
|
err = CheckForMetabaseAccess(METADATA_PERMISSION_READ,pInterface,METABASE_PATH_FOR_RESTRICT_LIST);
|
|
if (err.Failed())
|
|
{
|
|
goto WriteDirtyProps_Exit;
|
|
}
|
|
}
|
|
if (SUCCEEDED(LoadMasterUIWithoutOldEntry(pInterface,&MasterRestrictionUIList,pMyPointer)))
|
|
{
|
|
if (m_MyRestrictionList.IsEmpty())
|
|
{
|
|
// if there are no restrictionlist entries...
|
|
// then we don't have an entry... remove it
|
|
AddRestrictUIEntryToRestrictUIList(&MasterRestrictionUIList,NULL);
|
|
}
|
|
else
|
|
{
|
|
AddRestrictUIEntryToRestrictUIList(&MasterRestrictionUIList,&NewUIEntry);
|
|
}
|
|
|
|
// Merge our changes with the master list!!!!!
|
|
// 1. read the master list.
|
|
// 2. merge our changes into it.
|
|
// 3. write out the master list.
|
|
// 4. update the UI.
|
|
CStringListEx strlstReturned;
|
|
if (SUCCEEDED(PrepRestictionUIListForWrite(&MasterRestrictionUIList,&strlstReturned)))
|
|
{
|
|
// Write out the strlstReturned to the metabase.
|
|
err = OpenForWriting(FALSE);
|
|
if (err.Succeeded())
|
|
{
|
|
err = SetValue(MD_WEB_SVC_EXT_RESTRICTION_LIST, strlstReturned);
|
|
Close();
|
|
}
|
|
|
|
if (err.Succeeded())
|
|
{
|
|
// update the UI with the changed value
|
|
// 1. remove the UI's old value
|
|
// 2. add in the new value to the UI
|
|
//
|
|
// get the list of extensions
|
|
// update our entry or delete our entry...
|
|
|
|
// copy new value into existing place.
|
|
// this will clean out the existing place's objects...
|
|
UpdateMMC(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
WriteDirtyProps_Exit:
|
|
//m_Dirty = err.Succeeded();
|
|
return err;
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------
|
|
CFileDlg::CFileDlg(
|
|
IN BOOL fLocal,
|
|
IN CMetaInterface * pInterface,
|
|
IN CRestrictionList * pMyRestrictionList,
|
|
IN LPCTSTR strGroupID,
|
|
IN CWnd * pParent OPTIONAL
|
|
)
|
|
: CDialog(CFileDlg::IDD, pParent),
|
|
m_fLocal(fLocal)
|
|
{
|
|
//{{AFX_DATA_INIT(CFileDlg)
|
|
m_strFileName = _T("");
|
|
m_pInterface = pInterface;
|
|
m_strGroupID = strGroupID;
|
|
m_pRestrictionList = pMyRestrictionList;
|
|
m_bValidateFlag = FALSE;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
void
|
|
CFileDlg::DoDataExchange(
|
|
IN CDataExchange * pDX
|
|
)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CFileDlg)
|
|
DDX_Control(pDX, IDOK, m_button_Ok);
|
|
DDX_Control(pDX, IDC_EDIT_FILENAME, m_edit_FileName);
|
|
DDX_Control(pDX, IDC_BUTTON_BROWSE, m_button_Browse);
|
|
//}}AFX_DATA_MAP
|
|
|
|
DDX_Text(pDX, IDC_EDIT_FILENAME, m_strFileName);
|
|
if (pDX->m_bSaveAndValidate)
|
|
{
|
|
DDV_MaxCharsBalloon(pDX, m_strFileName, 255);
|
|
|
|
int iErrorMsg = 0;
|
|
m_strFileName.TrimLeft();m_strFileName.TrimRight();
|
|
CString csPathMunged;
|
|
csPathMunged = m_strFileName;
|
|
#ifdef SUPPORT_SLASH_SLASH_QUESTIONMARK_SLASH_TYPE_PATHS
|
|
GetSpecialPathRealPath(0,m_strFileName,csPathMunged);
|
|
#endif
|
|
|
|
//DDV_FilePath(pDX, csPathMunged, m_fLocal);
|
|
|
|
// if this is a path/filename without a .ext then remove any period from the end.
|
|
// check if it ends with a period.
|
|
if (csPathMunged.Right(1) == _T("."))
|
|
{
|
|
TCHAR szFilename_ext_only[_MAX_EXT];
|
|
_tsplitpath(csPathMunged, NULL, NULL, NULL, szFilename_ext_only);
|
|
if (szFilename_ext_only)
|
|
{
|
|
if (0 == _tcscmp(szFilename_ext_only,_T(".")))
|
|
{
|
|
csPathMunged.TrimRight(_T("."));
|
|
}
|
|
}
|
|
}
|
|
|
|
DWORD dwAllowedFlags = CHKPATH_ALLOW_UNC_PATH;
|
|
DWORD dwCharsetFlags = CHKPATH_CHARSET_GENERAL;
|
|
dwCharsetFlags |= CHKPATH_CHARSET_GENERAL_NO_COMMA;
|
|
FILERESULT dwReturn = MyValidatePath(csPathMunged,m_fLocal,CHKPATH_WANT_FILE,dwAllowedFlags,dwCharsetFlags);
|
|
if (FAILED(dwReturn))
|
|
{
|
|
iErrorMsg = IDS_WEBSVCEXT_INVALID_FILENAME_FORMAT;
|
|
if (IS_FLAG_SET(dwReturn,CHKPATH_FAIL_INVALID_CHARSET))
|
|
{
|
|
iErrorMsg = IDS_WEBSVCEXT_INVALID_FILENAME_CHARS;
|
|
}
|
|
else
|
|
{
|
|
if (dwReturn == CHKPATH_FAIL_NOT_ALLOWED_DIR_NOT_EXIST)
|
|
{
|
|
iErrorMsg = IDS_ERR_PATH_NOT_FOUND;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// check for % character
|
|
// there must be at least 2
|
|
TCHAR * pChar = NULL;
|
|
pChar = _tcschr(csPathMunged, _T('%'));
|
|
if (pChar)
|
|
{
|
|
pChar++;
|
|
pChar = _tcschr(pChar, _T('%'));
|
|
if (pChar)
|
|
{
|
|
TRACEEOL("Path:Warn if percent character");
|
|
iErrorMsg = IDS_WEBSVCEXT_INVALID_PERCENT_WARNING;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Check for invalid characters
|
|
if (0 != iErrorMsg)
|
|
{
|
|
if (IDS_WEBSVCEXT_INVALID_PERCENT_WARNING == iErrorMsg)
|
|
{
|
|
// For some reason, we need this
|
|
// flag so that we don't show the message twice...
|
|
if (!m_bValidateFlag)
|
|
{
|
|
if (IDCANCEL == ::AfxMessageBox(IDS_WEBSVCEXT_INVALID_PERCENT_WARNING,MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON2))
|
|
{
|
|
m_bValidateFlag = FALSE;
|
|
pDX->Fail();
|
|
}
|
|
else
|
|
{
|
|
// ensure user doesn't see the 2nd msgbox
|
|
m_bValidateFlag = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// flip it back on
|
|
m_bValidateFlag = FALSE;
|
|
}
|
|
}
|
|
else if (IDS_WEBSVCEXT_INVALID_FILENAME_CHARS == iErrorMsg)
|
|
{
|
|
// formulate the real error message
|
|
CString strMsg;
|
|
CString strTempList;
|
|
CComBSTR strTempFormat;
|
|
strTempFormat.LoadString(IDS_WEBSVCEXT_INVALID_FILENAME_CHARS);
|
|
LoadStatics();
|
|
strTempList = _T(":");
|
|
strTempList += g_InvalidWebSvcExtCharsPath;
|
|
strMsg.Format(strTempFormat,strTempList);
|
|
DDV_ShowBalloonAndFail(pDX, strMsg);
|
|
m_bValidateFlag = FALSE;
|
|
}
|
|
else
|
|
{
|
|
DDV_ShowBalloonAndFail(pDX, iErrorMsg);
|
|
m_bValidateFlag = FALSE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Message Map
|
|
//
|
|
BEGIN_MESSAGE_MAP(CFileDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CFileDlg)
|
|
ON_BN_CLICKED(IDC_BUTTON_BROWSE, OnButtonBrowse)
|
|
ON_EN_CHANGE(IDC_EDIT_FILENAME, OnFilenameChanged)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//
|
|
// Message Handlers
|
|
//
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
HRESULT AFXAPI
|
|
MyLimitInputPath(HWND hWnd)
|
|
{
|
|
CString strMsg;
|
|
CComBSTR strTempFormat;
|
|
strTempFormat.LoadString(IDS_WEBSVCEXT_INVALID_FILENAME_CHARS);
|
|
LoadStatics();
|
|
strMsg.Format(strTempFormat,g_InvalidWebSvcExtCharsPath);
|
|
|
|
LIMITINPUT li = {0};
|
|
li.cbSize = sizeof(li);
|
|
li.dwMask = LIM_FLAGS | LIM_FILTER | LIM_MESSAGE | LIM_HINST;
|
|
li.dwFlags = LIF_EXCLUDEFILTER | LIF_HIDETIPONVALID | LIF_PASTESKIP;
|
|
li.hinst = _Module.GetResourceInstance();
|
|
// don't ask me why, but when we use this
|
|
// it truncates it to like 80 chars.
|
|
// specifying an actual string allows more than 80
|
|
//li.pszMessage = MAKEINTRESOURCE(IDS_WEBSVCEXT_INVALID_FILENAME_CHARS);
|
|
li.pszMessage = (LPTSTR) (LPCTSTR) strMsg;
|
|
li.pszFilter = g_InvalidWebSvcExtCharsPath;
|
|
|
|
return SHLimitInputEditWithFlags(hWnd, &li);
|
|
}
|
|
|
|
HRESULT AFXAPI
|
|
MyLimitInputName(HWND hWnd)
|
|
{
|
|
CComBSTR strTempString;
|
|
strTempString.LoadString(IDS_WEBSVCEXT_INVALID_NAME_CHARS);
|
|
LoadStatics();
|
|
|
|
LIMITINPUT li = {0};
|
|
li.cbSize = sizeof(li);
|
|
li.dwMask = LIM_FLAGS | LIM_FILTER | LIM_MESSAGE | LIM_HINST;
|
|
li.dwFlags = LIF_EXCLUDEFILTER | LIF_HIDETIPONVALID | LIF_PASTESKIP;
|
|
li.hinst = _Module.GetResourceInstance();
|
|
// don't ask me why, but when we use this
|
|
// it truncates it to like 80 chars.
|
|
// specifying an actual string allows more than 80
|
|
//li.pszMessage = MAKEINTRESOURCE(IDS_WEBSVCEXT_INVALID_NAME_CHARS);
|
|
li.pszMessage = strTempString;
|
|
li.pszFilter = g_InvalidWebSvcExtCharsName;
|
|
|
|
return SHLimitInputEditWithFlags(hWnd, &li);
|
|
}
|
|
|
|
BOOL
|
|
CFileDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
//
|
|
// Available on local connections only
|
|
//
|
|
m_button_Browse.EnableWindow(m_fLocal);
|
|
|
|
MySetControlStates();
|
|
MyLimitInputPath(CONTROL_HWND(IDC_EDIT_FILENAME));
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CFileDlg::OnButtonBrowse()
|
|
{
|
|
ASSERT(m_fLocal);
|
|
|
|
CString strFileMask((LPCTSTR)IDS_ISAPI_CGI_MASK);
|
|
|
|
//
|
|
// CODEWORK: Derive a class from CFileDialog that allows
|
|
// the setting of the initial path
|
|
//
|
|
|
|
//CString strPath;
|
|
//m_edit_FileName.GetWindowText(strPath);
|
|
CFileDialog dlgBrowse(
|
|
TRUE,
|
|
NULL,
|
|
NULL,
|
|
OFN_HIDEREADONLY,
|
|
strFileMask,
|
|
this
|
|
);
|
|
// Disable hook to get Windows 2000 style dialog
|
|
dlgBrowse.m_ofn.Flags &= ~(OFN_ENABLEHOOK);
|
|
dlgBrowse.m_ofn.Flags |= OFN_DONTADDTORECENT|OFN_FILEMUSTEXIST;
|
|
|
|
INT_PTR rc = dlgBrowse.DoModal();
|
|
if (rc == IDOK)
|
|
{
|
|
m_edit_FileName.SetWindowText(dlgBrowse.GetPathName());
|
|
}
|
|
else if (rc == IDCANCEL)
|
|
{
|
|
DWORD err = CommDlgExtendedError();
|
|
}
|
|
|
|
OnItemChanged();
|
|
}
|
|
|
|
void
|
|
CFileDlg::MySetControlStates()
|
|
{
|
|
m_button_Ok.EnableWindow(m_edit_FileName.GetWindowTextLength() > 0);
|
|
}
|
|
|
|
void
|
|
CFileDlg::OnItemChanged()
|
|
{
|
|
MySetControlStates();
|
|
}
|
|
|
|
void
|
|
CFileDlg::OnFilenameChanged()
|
|
{
|
|
OnItemChanged();
|
|
}
|
|
|
|
BOOL
|
|
CFileDlg::FilePathEntryExists(
|
|
IN LPCTSTR lpName,
|
|
IN OUT CString * strUser
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Look for a given filename in the list
|
|
|
|
Arguments:
|
|
|
|
LPCTSTR lpName : filename name to look for
|
|
|
|
Return Value:
|
|
|
|
TRUE if the name already existed in the metabase
|
|
|
|
--*/
|
|
{
|
|
// Loop thru to ensure that this specified path\filename
|
|
// isn't already being used in the metabase by
|
|
// a different entry.
|
|
return IsFileUsedBySomeoneElse(m_pInterface, lpName, m_strGroupID,strUser);
|
|
}
|
|
|
|
void
|
|
CFileDlg::OnOK()
|
|
{
|
|
if (UpdateData(TRUE))
|
|
{
|
|
BOOL bInUseAlready = FALSE;
|
|
|
|
// Make sure the filname is unique
|
|
// within our own entry!
|
|
if (!m_strFileName.IsEmpty())
|
|
{
|
|
CString strUser;
|
|
CRestrictionEntry * pOneRestrictEntry = NULL;
|
|
|
|
pOneRestrictEntry = NULL;
|
|
if (m_pRestrictionList)
|
|
{
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
CString strKey;strKey=m_strFileName;strKey.MakeUpper();
|
|
m_pRestrictionList->Lookup(strKey,(CRestrictionEntry *&) pOneRestrictEntry);
|
|
if (pOneRestrictEntry)
|
|
{
|
|
bInUseAlready = TRUE;
|
|
CComBSTR strMessage;
|
|
|
|
strMessage.LoadString(IDS_DUPLICATE_ENTRY);
|
|
EditShowBalloon(m_edit_FileName.m_hWnd, (CString) strMessage);
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// Make sure the filename is unique
|
|
//
|
|
if (FALSE == bInUseAlready)
|
|
{
|
|
CString strUser;
|
|
if (FilePathEntryExists(m_strFileName,&strUser))
|
|
{
|
|
bInUseAlready = TRUE;
|
|
|
|
CString strMessage;
|
|
CComBSTR strFormat;
|
|
strFormat.LoadString(IDS_WEBSVCEXT_NOT_UNIQUE);
|
|
strMessage.Format(strFormat,strUser);
|
|
EditShowBalloon(m_edit_FileName.m_hWnd, strMessage);
|
|
}
|
|
}
|
|
|
|
// Everything okay
|
|
if (!bInUseAlready)
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
}
|
|
|
|
//
|
|
// Don't dismiss the dialog
|
|
//
|
|
}
|
|
|
|
|
|
|
|
// -----------------------------------------------------------
|
|
CWebSvcExtAddNewDlg::CWebSvcExtAddNewDlg(
|
|
IN BOOL fLocal,
|
|
IN CMetaInterface * pInterface,
|
|
IN CWnd * pParent OPTIONAL
|
|
)
|
|
: CDialog(CWebSvcExtAddNewDlg::IDD, pParent),
|
|
m_fIsLocal(fLocal)
|
|
{
|
|
//{{AFX_DATA_INIT(CWebSvcExtAddNewDlg)
|
|
m_strGroupName = _T("");
|
|
m_fAllow = FALSE;
|
|
m_pInterface = pInterface;
|
|
m_MyRestrictionList.RemoveAll();
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CWebSvcExtAddNewDlg::~CWebSvcExtAddNewDlg()
|
|
{
|
|
CleanRestrictionList(&m_MyRestrictionList);
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::DoDataExchange(
|
|
IN CDataExchange * pDX
|
|
)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWebSvcExtAddNewDlg)
|
|
DDX_Control(pDX, IDC_EDIT_EXTENSION_NAME, m_edit_FileName);
|
|
DDX_Control(pDX, IDC_BTN_ADD, m_bnt_Add);
|
|
DDX_Control(pDX, IDC_BTN_REMOVE, m_bnt_Remove);
|
|
DDX_Control(pDX, IDC_CHECK_ALLOW, m_chk_Allow);
|
|
DDX_Control(pDX, IDOK, m_button_Ok);
|
|
DDX_Control(pDX, ID_HELP, m_button_Help);
|
|
//}}AFX_DATA_MAP
|
|
|
|
DDX_Text(pDX, IDC_EDIT_EXTENSION_NAME, m_strGroupName);
|
|
DDX_Control(pDX, IDC_LIST_FILES, m_list_Files);
|
|
|
|
if (pDX->m_bSaveAndValidate)
|
|
{
|
|
m_strGroupName.TrimLeft();
|
|
m_strGroupName.TrimRight();
|
|
|
|
DDV_MinMaxChars(pDX, m_strGroupName, 1, 256);
|
|
if (m_strGroupName.GetLength() > 256){DDV_ShowBalloonAndFail(pDX, IDS_ERR_INVALID_PATH /*IDS_BAD_URL_PATH*/ );}
|
|
}
|
|
//if (pDX->m_bSaveAndValidate){DDV_FilePath(pDX, m_strGroupName, m_fLocal);}
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Message Map
|
|
//
|
|
BEGIN_MESSAGE_MAP(CWebSvcExtAddNewDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CWebSvcExtAddNewDlg)
|
|
ON_EN_CHANGE(IDC_EDIT_EXTENSION_NAME, OnFilenameChanged)
|
|
ON_BN_CLICKED(IDC_BTN_ADD, OnDoButtonAdd)
|
|
ON_BN_CLICKED(IDC_BTN_REMOVE, OnDoButtonRemove)
|
|
ON_BN_CLICKED(IDC_CHECK_ALLOW, OnDoCheckAllow)
|
|
ON_NOTIFY(NM_CLICK, IDC_LIST_FILES, OnClickListFiles)
|
|
ON_NOTIFY(LVN_KEYDOWN, IDC_LIST_FILES, OnKeydownListFiles)
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_FILES, OnSelChangedListFiles)
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_LIST_FILES, OnSelChangedListFiles)
|
|
ON_COMMAND(ID_HELP, OnHelp)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//
|
|
// Message Handlers
|
|
//
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
BOOL
|
|
CWebSvcExtAddNewDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
m_list_Files.Initialize(1);
|
|
m_fAllow = FALSE;
|
|
|
|
m_chk_Allow.SetCheck(m_fAllow);
|
|
MySetControlStates();
|
|
MyLimitInputName(CONTROL_HWND(IDC_EDIT_EXTENSION_NAME));
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL
|
|
CWebSvcExtAddNewDlg::OnHelpInfo(HELPINFO * pHelpInfo)
|
|
{
|
|
OnHelp();
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnHelp()
|
|
{
|
|
WinHelpDebug(0x20000 + CWebSvcExtAddNewDlg::IDD);
|
|
::WinHelp(m_hWnd, theApp.m_pszHelpFilePath, HELP_CONTEXT, 0x20000 + CWebSvcExtAddNewDlg::IDD);
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::MySetControlStates()
|
|
{
|
|
m_edit_FileName.EnableWindow(TRUE);
|
|
m_bnt_Add.EnableWindow(TRUE);
|
|
m_list_Files.EnableWindow(TRUE);
|
|
|
|
// Enable Remove only if there is something selected...
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
if (-1 != nCurSel)
|
|
{
|
|
m_bnt_Remove.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_bnt_Remove.EnableWindow(FALSE);
|
|
}
|
|
|
|
// Enable OK only if there is a filename
|
|
// and at least one entry in the list box
|
|
int nCount = m_list_Files.GetItemCount();
|
|
if (nCount > 0)
|
|
{
|
|
m_button_Ok.EnableWindow(m_edit_FileName.GetWindowTextLength() > 0);
|
|
}
|
|
else
|
|
{
|
|
m_button_Ok.EnableWindow(FALSE);
|
|
}
|
|
|
|
m_fAllow = m_chk_Allow.GetCheck();
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnItemChanged()
|
|
{
|
|
MySetControlStates();
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnFilenameChanged()
|
|
{
|
|
OnItemChanged();
|
|
}
|
|
|
|
BOOL
|
|
CWebSvcExtAddNewDlg::FilePathEntryExists(
|
|
IN LPCTSTR lpName
|
|
)
|
|
{
|
|
// Loop thru to ensure that this specified GroupID
|
|
// isn't already being used in the metabase by
|
|
// a different entry.
|
|
return IsGroupIDUsedBySomeoneElse(m_pInterface, lpName);
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnOK()
|
|
{
|
|
if (UpdateData(TRUE))
|
|
{
|
|
//
|
|
// Make sure the group name is unique
|
|
//
|
|
if (FilePathEntryExists(m_strGroupName))
|
|
{
|
|
EditShowBalloon(m_edit_FileName.m_hWnd, IDS_WEBSVCEXT_ID_NOT_UNIQUE);
|
|
return;
|
|
}
|
|
CDialog::OnOK();
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnDoCheckAllow()
|
|
{
|
|
m_fAllow = !m_fAllow;
|
|
OnItemChanged();
|
|
MySetControlStates();
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnDoButtonAdd()
|
|
{
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
CFileDlg dlg(m_fIsLocal, m_pInterface, &m_MyRestrictionList, _T(""), this);
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
// Get the filename that they entered
|
|
// and add it to our list.
|
|
CString strReturnFileName;
|
|
strReturnFileName = dlg.m_strFileName;
|
|
{
|
|
CRestrictionEntry * pNewEntry = CreateRestrictionEntry(
|
|
strReturnFileName,
|
|
WEBSVCEXT_STATUS_ALLOWED, // doesn't matter we won't use what gets set here..
|
|
1, // doesn't matter we won't use what gets set here..
|
|
_T(""),
|
|
_T(""),
|
|
WEBSVCEXT_TYPE_REGULAR // doesn't matter we won't use what gets set here..
|
|
);
|
|
if (pNewEntry)
|
|
{
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
CString strKey;strKey=pNewEntry->strFileName;strKey.MakeUpper();
|
|
m_MyRestrictionList.SetAt(strKey,pNewEntry);
|
|
|
|
FillListBox(pNewEntry);
|
|
}
|
|
}
|
|
}
|
|
|
|
MySetControlStates();
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnDoButtonRemove()
|
|
{
|
|
int nCurSel = m_list_Files.GetSelectionMark();
|
|
if (-1 != nCurSel)
|
|
{
|
|
CString TheKey;
|
|
CRestrictionEntry * pRestrictionEntry = m_list_Files.GetItem(nCurSel);
|
|
if (pRestrictionEntry)
|
|
{
|
|
// remove the entry...
|
|
{
|
|
TheKey = pRestrictionEntry->strFileName;
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
TheKey.MakeUpper();
|
|
m_MyRestrictionList.RemoveKey(TheKey);
|
|
}
|
|
}
|
|
FillListBox(NULL);
|
|
|
|
int count = m_list_Files.GetItemCount();
|
|
if (count > 0)
|
|
{
|
|
m_list_Files.SelectItem(nCurSel < count ? nCurSel : --nCurSel);
|
|
GetDlgItem(IDC_BTN_REMOVE)->SetFocus();
|
|
}
|
|
else
|
|
{
|
|
m_list_Files.SelectItem(nCurSel, FALSE);
|
|
GetDlgItem(IDC_LIST_FILES)->SetFocus();
|
|
}
|
|
|
|
MySetControlStates();
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnClickListFiles(NMHDR * pNMHDR, LRESULT * pResult)
|
|
{
|
|
MySetControlStates();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnKeydownListFiles(NMHDR * pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_KEYDOWN * pLVKeyDow = (LV_KEYDOWN *)pNMHDR;
|
|
|
|
MySetControlStates();
|
|
|
|
switch (pLVKeyDow->wVKey)
|
|
{
|
|
case VK_INSERT:
|
|
SendMessage(WM_COMMAND, IDC_BTN_ADD);
|
|
break;
|
|
case VK_DELETE:
|
|
SendMessage(WM_COMMAND, IDC_BTN_REMOVE);
|
|
break;
|
|
default:
|
|
// Continue default action
|
|
*pResult = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::OnSelChangedListFiles(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
MySetControlStates();
|
|
*pResult = 1;
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewDlg::FillListBox(CRestrictionEntry * pSelection)
|
|
{
|
|
m_list_Files.SetRedraw(FALSE);
|
|
m_list_Files.DeleteAllItems();
|
|
int cItems = 0;
|
|
|
|
POSITION pos;
|
|
CString TheKey;
|
|
CRestrictionEntry * pOneEntry = NULL;
|
|
|
|
for(pos = m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
m_list_Files.AddItem(pOneEntry);
|
|
++cItems;
|
|
}
|
|
}
|
|
m_list_Files.SetRedraw(TRUE);
|
|
|
|
if (pSelection)
|
|
{
|
|
LVFINDINFO fi;
|
|
fi.flags = LVFI_PARAM;
|
|
fi.lParam = (LPARAM)pSelection;
|
|
fi.vkDirection = VK_DOWN;
|
|
int i = m_list_Files.FindItem(&fi);
|
|
if (i != -1)
|
|
{
|
|
m_list_Files.SelectItem(i);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------
|
|
|
|
CWebSvcExtAddNewForAppDlg::CWebSvcExtAddNewForAppDlg(
|
|
IN BOOL fLocal,
|
|
IN CMetaInterface * pInterface,
|
|
IN CWnd * pParent OPTIONAL
|
|
)
|
|
: CDialog(CWebSvcExtAddNewForAppDlg::IDD, pParent),
|
|
m_fLocal(fLocal)
|
|
{
|
|
//{{AFX_DATA_INIT(CWebSvcExtAddNewForAppDlg)
|
|
m_pMySelectedApplication = NULL;
|
|
m_nComboSelection = -1;
|
|
m_pInterface = pInterface;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewForAppDlg::DoDataExchange(
|
|
IN CDataExchange * pDX
|
|
)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CWebSvcExtAddNewForAppDlg)
|
|
DDX_Control(pDX, IDOK, m_button_Ok);
|
|
DDX_Control(pDX, ID_HELP, m_button_Help);
|
|
DDX_CBIndex(pDX, IDC_COMBO_APPLICATION, m_nComboSelection);
|
|
DDX_Control(pDX, IDC_COMBO_APPLICATION, m_combo_Applications);
|
|
DDX_Control(pDX, IDC_DEPENDENCIES_TXT, m_Dependencies);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
//
|
|
// Message Map
|
|
//
|
|
BEGIN_MESSAGE_MAP(CWebSvcExtAddNewForAppDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CWebSvcExtAddNewForAppDlg)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_APPLICATION, OnSelchangeComboApplications)
|
|
ON_COMMAND(ID_HELP, OnHelp)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//
|
|
// Message Handlers
|
|
//
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
BOOL
|
|
CWebSvcExtAddNewForAppDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_combo_Applications.SetRedraw(FALSE);
|
|
m_combo_Applications.ResetContent();
|
|
|
|
// fetch the list from the
|
|
// metabase and loop thru the list
|
|
CApplicationDependList MyMasterList;
|
|
if (SUCCEEDED(LoadApplicationDependList(m_pInterface,&MyMasterList,TRUE)))
|
|
{
|
|
// loop thru the returned back list
|
|
int TheIndex;
|
|
POSITION pos;
|
|
CString TheKey;
|
|
CApplicationDependEntry * pOneEntry = NULL;
|
|
for(pos = MyMasterList.GetStartPosition();pos != NULL;)
|
|
{
|
|
MyMasterList.GetNextAssoc(pos, TheKey, (CApplicationDependEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
TheIndex = m_combo_Applications.AddString(pOneEntry->strApplicationName);
|
|
if (TheIndex != CB_ERR)
|
|
{
|
|
m_combo_Applications.SetItemDataPtr(TheIndex, pOneEntry);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Load Mapping for GroupID to friendlyName
|
|
LoadApplicationFriendlyNames(m_pInterface,&m_GroupIDtoGroupFriendList);
|
|
|
|
m_combo_Applications.EnableWindow(TRUE);
|
|
m_combo_Applications.SetRedraw(TRUE);
|
|
m_combo_Applications.SetCurSel(m_nComboSelection);
|
|
|
|
// Highlight the 1st selection...
|
|
if (-1 == m_nComboSelection)
|
|
{
|
|
m_nComboSelection = m_combo_Applications.GetCount();
|
|
if (m_nComboSelection >= 0)
|
|
{
|
|
m_combo_Applications.SetCurSel(0);
|
|
OnSelchangeComboApplications();
|
|
}
|
|
}
|
|
|
|
MySetControlStates();
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL
|
|
CWebSvcExtAddNewForAppDlg::OnHelpInfo(HELPINFO * pHelpInfo)
|
|
{
|
|
OnHelp();
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewForAppDlg::OnHelp()
|
|
{
|
|
WinHelpDebug(0x20000 + CWebSvcExtAddNewForAppDlg::IDD);
|
|
::WinHelp(m_hWnd, theApp.m_pszHelpFilePath, HELP_CONTEXT, 0x20000 + CWebSvcExtAddNewForAppDlg::IDD);
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewForAppDlg::MySetControlStates()
|
|
{
|
|
m_Dependencies.SetReadOnly(TRUE);
|
|
int nSel = m_combo_Applications.GetCurSel();
|
|
if (-1 == nSel)
|
|
{
|
|
m_button_Ok.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
m_button_Ok.EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewForAppDlg::OnSelchangeComboApplications()
|
|
{
|
|
int nSel = m_combo_Applications.GetCurSel();
|
|
if (m_nComboSelection == nSel)
|
|
{
|
|
//
|
|
// Selection didn't change
|
|
//
|
|
return;
|
|
}
|
|
|
|
m_nComboSelection = nSel;
|
|
|
|
int idx = m_combo_Applications.GetCurSel();
|
|
if (idx != -1)
|
|
{
|
|
m_Dependencies.SetWindowText(_T(""));
|
|
|
|
CApplicationDependEntry * pOneEntry = NULL;
|
|
CString strOneFriendly;
|
|
CString strOneGroupID;
|
|
CString strAllEntries;
|
|
pOneEntry = (CApplicationDependEntry *) m_combo_Applications.GetItemDataPtr(idx);
|
|
if (pOneEntry)
|
|
{
|
|
// dump out our info.
|
|
POSITION pos = pOneEntry->strlistGroupID.GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
strOneGroupID = pOneEntry->strlistGroupID.GetNext(pos);
|
|
// replace ID with friendly string
|
|
strOneFriendly = _T("");
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
CString strKey;strKey=strOneGroupID;strKey.MakeUpper();
|
|
m_GroupIDtoGroupFriendList.Lookup(strKey,strOneFriendly);
|
|
if (strOneFriendly.IsEmpty())
|
|
{
|
|
strAllEntries = strAllEntries + strOneGroupID;
|
|
}
|
|
else
|
|
{
|
|
strAllEntries = strAllEntries + strOneFriendly;
|
|
}
|
|
strAllEntries = strAllEntries + _T("\r\n");
|
|
}
|
|
}
|
|
|
|
m_Dependencies.SetWindowText(strAllEntries);
|
|
}
|
|
|
|
MySetControlStates();
|
|
}
|
|
|
|
void
|
|
CWebSvcExtAddNewForAppDlg::OnOK()
|
|
{
|
|
if (UpdateData(TRUE))
|
|
{
|
|
int idx = m_combo_Applications.GetCurSel();
|
|
if (idx != -1)
|
|
{
|
|
CApplicationDependEntry * pOneEntry = NULL;
|
|
pOneEntry = (CApplicationDependEntry *) m_combo_Applications.GetItemDataPtr(idx);
|
|
m_pMySelectedApplication = pOneEntry;
|
|
}
|
|
CDialog::OnOK();
|
|
}
|
|
}
|
|
|
|
BOOL StartAddNewDialog(CWnd * pParent,CMetaInterface * pInterface,BOOL bIsLocal,CRestrictionUIEntry **pReturnedNewEntry)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
CError err;
|
|
CWebSvcExtAddNewDlg dlg(bIsLocal, pInterface, pParent);
|
|
*pReturnedNewEntry = NULL;
|
|
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
BOOL bPleaseUpdateMetabase = FALSE;
|
|
CRestrictionList MasterRestrictionList;
|
|
CString strReturnGroupName = dlg.m_strGroupName;
|
|
BOOL bReturnedAllowStatus = dlg.m_fAllow;
|
|
// get the data from the modal dialog
|
|
// and create a new entry...
|
|
// also, add the entry to the metabase
|
|
// and update the UI
|
|
|
|
// Create a new UI entry for the UI
|
|
// if all of this is successfull...
|
|
|
|
// update the UI
|
|
CRestrictionUIEntry * pNewUIEntry = new CRestrictionUIEntry;
|
|
if (pNewUIEntry)
|
|
{
|
|
pNewUIEntry->iType = WEBSVCEXT_TYPE_REGULAR;
|
|
// this has to have the EMPTY_GROUPID_KEY part!
|
|
pNewUIEntry->strGroupID = EMPTY_GROUPID_KEY + strReturnGroupName;
|
|
pNewUIEntry->strGroupDescription = strReturnGroupName;
|
|
}
|
|
|
|
if (SUCCEEDED(LoadMasterRestrictListWithoutOldEntry(pInterface,&MasterRestrictionList,NULL)))
|
|
{
|
|
// Loop thru the restrictionlist that the had.
|
|
CRestrictionEntry * pOneEntry = NULL;
|
|
CString TheKey;
|
|
POSITION pos;
|
|
for(pos = dlg.m_MyRestrictionList.GetStartPosition();pos != NULL;)
|
|
{
|
|
dlg.m_MyRestrictionList.GetNextAssoc(pos, TheKey, (CRestrictionEntry *&) pOneEntry);
|
|
if (pOneEntry)
|
|
{
|
|
CRestrictionEntry * pNewEntry = CreateRestrictionEntry(
|
|
pOneEntry->strFileName,
|
|
bReturnedAllowStatus ? WEBSVCEXT_STATUS_ALLOWED : WEBSVCEXT_STATUS_PROHIBITED,
|
|
1,
|
|
// this has to have the EMPTY_GROUPID_KEY part!
|
|
EMPTY_GROUPID_KEY + strReturnGroupName,
|
|
strReturnGroupName,
|
|
WEBSVCEXT_TYPE_REGULAR); // user can only add regular type entries that are deletable.
|
|
if (pNewEntry)
|
|
{
|
|
// Add our new entry to the "master restrictlist"...
|
|
AddRestrictEntryToRestrictList(&MasterRestrictionList,pNewEntry);
|
|
|
|
// add it to our new UI entry
|
|
// THE KEY IS ALWAYS UPPERASE -- REMEMBER THIS!!!!!!!
|
|
CString strKey;strKey=pNewEntry->strFileName;strKey.MakeUpper();
|
|
pNewUIEntry->strlstRestrictionEntries.SetAt(strKey,pNewEntry);
|
|
bPleaseUpdateMetabase = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (bPleaseUpdateMetabase)
|
|
{
|
|
CStringListEx strlstReturned;
|
|
if (SUCCEEDED(PrepRestictionListForWrite(&MasterRestrictionList,&strlstReturned)))
|
|
{
|
|
// Write out the strlstReturned to the metabase.
|
|
if (SUCCEEDED(WriteSettingsRestrictionList(pInterface,&strlstReturned)))
|
|
{
|
|
bRet = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pNewUIEntry)
|
|
{
|
|
if (bRet)
|
|
{
|
|
// if we have a new ui entry
|
|
// then pass it back
|
|
*pReturnedNewEntry = pNewUIEntry;
|
|
}
|
|
else
|
|
{
|
|
// clean this entry up
|
|
delete pNewUIEntry;
|
|
pNewUIEntry = NULL;
|
|
}
|
|
}
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
BOOL StartAddNewByAppDialog(CWnd * pParent,CMetaInterface * pInterface,BOOL bIsLocal)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
CRestrictionList MasterRestrictionList;
|
|
|
|
CWebSvcExtAddNewForAppDlg dlg(bIsLocal, pInterface, pParent);
|
|
if (dlg.DoModal() != IDOK)
|
|
{
|
|
goto StartAddNewByAppDialog_Exit;
|
|
}
|
|
|
|
// Get the selected Application from the list
|
|
// that they selected.
|
|
if (NULL == dlg.m_pMySelectedApplication)
|
|
{
|
|
goto StartAddNewByAppDialog_Exit;
|
|
}
|
|
|
|
int iDesiredState = WEBSVCEXT_STATUS_ALLOWED;
|
|
BOOL bPleaseUpdateMetabase = FALSE;
|
|
CApplicationDependEntry * pOneEntry = dlg.m_pMySelectedApplication;
|
|
if (SUCCEEDED(LoadMasterRestrictListWithoutOldEntry(pInterface,&MasterRestrictionList,NULL)))
|
|
{
|
|
POSITION pos1,pos2;
|
|
CString strOneAppName;
|
|
CRestrictionEntry * pOneRestEntry = NULL;
|
|
CString TheKey;
|
|
|
|
// Loop thru the list of GROUPID's
|
|
// that they specified that they want to be enabled...
|
|
pos1 = pOneEntry->strlistGroupID.GetHeadPosition();
|
|
while (pos1)
|
|
{
|
|
strOneAppName = pOneEntry->strlistGroupID.GetNext(pos1);
|
|
|
|
// we have a GroupID,
|
|
// let's find all the entries with that entry
|
|
// and update them...
|
|
for(pos2 = MasterRestrictionList.GetStartPosition();pos2 != NULL;)
|
|
{
|
|
pOneRestEntry = NULL;
|
|
MasterRestrictionList.GetNextAssoc(pos2, TheKey, (CRestrictionEntry *&) pOneRestEntry);
|
|
if (pOneRestEntry)
|
|
{
|
|
// if the GroupID matches, then update it to desired state
|
|
if (0 == strOneAppName.Compare(pOneRestEntry->strGroupID))
|
|
{
|
|
if (WEBSVCEXT_TYPE_REGULAR == pOneRestEntry->iType)
|
|
{
|
|
if (pOneRestEntry->iStatus != iDesiredState)
|
|
{
|
|
bPleaseUpdateMetabase = TRUE;
|
|
pOneRestEntry->iStatus = iDesiredState;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// save the metabase info
|
|
//
|
|
if (bPleaseUpdateMetabase)
|
|
{
|
|
CStringListEx strlstReturned;
|
|
if (SUCCEEDED(PrepRestictionListForWrite(&MasterRestrictionList,&strlstReturned)))
|
|
{
|
|
// Write out the strlstReturned to the metabase.
|
|
if (SUCCEEDED(WriteSettingsRestrictionList(pInterface,&strlstReturned)))
|
|
{
|
|
bRet = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
//
|
|
// resync the UI with the changes.
|
|
//
|
|
}
|
|
|
|
StartAddNewByAppDialog_Exit:
|
|
return bRet;
|
|
}
|
|
|
|
|
|
|
|
CDepedentAppsDlg::CDepedentAppsDlg(
|
|
IN CStringListEx * pstrlstDependApps,
|
|
IN LPCTSTR strExtensionName,
|
|
IN CWnd * pParent OPTIONAL
|
|
)
|
|
: CDialog(CDepedentAppsDlg::IDD, pParent),m_pstrlstDependentAppList(NULL)
|
|
{
|
|
//{{AFX_DATA_INIT(CDepedentAppsDlg)
|
|
m_strExtensionName = strExtensionName;
|
|
//}}AFX_DATA_INIT
|
|
|
|
if (pstrlstDependApps){m_pstrlstDependentAppList = pstrlstDependApps;}
|
|
}
|
|
|
|
void
|
|
CDepedentAppsDlg::DoDataExchange(
|
|
IN CDataExchange * pDX
|
|
)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDepedentAppsDlg)
|
|
DDX_Control(pDX, ID_HELP, m_button_Help);
|
|
DDX_Control(pDX, IDC_DEPENDENT_APPS_LIST, m_dependent_apps_list);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
//
|
|
// Message Map
|
|
//
|
|
BEGIN_MESSAGE_MAP(CDepedentAppsDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CDepedentAppsDlg)
|
|
ON_COMMAND(ID_HELP, OnHelp)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
//
|
|
// Message Handlers
|
|
//
|
|
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|
|
|
BOOL
|
|
CDepedentAppsDlg::OnInitDialog()
|
|
{
|
|
CString strTempString;
|
|
CString strWarn1;
|
|
CString strWarn2;
|
|
CDialog::OnInitDialog();
|
|
strTempString.Empty();
|
|
|
|
// Display the stuff that was passed to us...
|
|
if (m_pstrlstDependentAppList)
|
|
{
|
|
m_dependent_apps_list.SetRedraw(FALSE);
|
|
m_dependent_apps_list.ResetContent();
|
|
|
|
CString strOneAppNameEntry;
|
|
POSITION pos = m_pstrlstDependentAppList->GetHeadPosition();
|
|
while (pos)
|
|
{
|
|
strOneAppNameEntry = m_pstrlstDependentAppList->GetNext(pos);
|
|
|
|
// add it to the new listbox
|
|
m_dependent_apps_list.AddString(strOneAppNameEntry);
|
|
}
|
|
|
|
// Set the Backcolor to read only color.
|
|
//m_dependent_apps_list.SetBack
|
|
|
|
m_dependent_apps_list.SetRedraw(TRUE);
|
|
}
|
|
|
|
// Formulate text for the static labels..
|
|
strTempString.LoadString(IDS_APP_DEPEND_WARN1);
|
|
strWarn1.Format(strTempString,m_strExtensionName);
|
|
GetDlgItem(IDC_EDIT_WARN1)->SetWindowText(strWarn1);
|
|
if (strWarn1.GetLength() > 200)
|
|
{
|
|
::ShowScrollBar(CONTROL_HWND(IDC_EDIT_WARN1), SB_VERT, TRUE);
|
|
}
|
|
|
|
strTempString.LoadString(IDS_APP_DEPEND_WARN2);
|
|
strWarn2.Format(strTempString,m_strExtensionName);
|
|
GetDlgItem(IDC_EDIT_WARN2)->SetWindowText(strWarn2);
|
|
if (strWarn2.GetLength() > 200)
|
|
{
|
|
::ShowScrollBar(CONTROL_HWND(IDC_EDIT_WARN2), SB_VERT, TRUE);
|
|
}
|
|
|
|
CenterWindow();
|
|
MessageBeep(MB_ICONEXCLAMATION);
|
|
|
|
// Default to NO
|
|
GetDlgItem(IDCANCEL)->SetFocus();
|
|
return FALSE;
|
|
}
|
|
|
|
BOOL
|
|
CDepedentAppsDlg::OnHelpInfo(HELPINFO * pHelpInfo)
|
|
{
|
|
OnHelp();
|
|
return TRUE;
|
|
}
|
|
|
|
void
|
|
CDepedentAppsDlg::OnHelp()
|
|
{
|
|
WinHelpDebug(0x20000 + CDepedentAppsDlg::IDD);
|
|
::WinHelp(m_hWnd, theApp.m_pszHelpFilePath, HELP_CONTEXT, 0x20000 + CDepedentAppsDlg::IDD);
|
|
}
|
|
|
|
void
|
|
CDepedentAppsDlg::OnOK()
|
|
{
|
|
if (UpdateData(TRUE))
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
}
|