|
|
//+----------------------------------------------------------------------------
//
// File: customaction.h
//
// Module: CMAK.EXE
//
// Synopsis: Header file for the CustomActionList and CustomActionListEnumerator
// classes used by CMAK to handle its custom actions.
//
// Copyright (c) 2000 Microsoft Corporation
//
// Author: quintinb Created 02/26/00
//
//+----------------------------------------------------------------------------
#include "conact.h"
//
// We display the flags to the user in a different order than the flags were created. Thus we have to arrays to
// map between the display order and the actual order and vice versa.
//
const int c_iExecutionIndexToFlagsMap[c_iNumCustomActionExecutionStates] = {ALL_CONNECTIONS, ALL_DIALUP, ALL_TUNNEL, DIRECT_ONLY, DIALUP_ONLY}; const int c_iExecutionFlagsToIndexMap[c_iNumCustomActionExecutionStates] = {0, 3, 1, 4, 2};
//
// Enum for Connect Action Types
//
const int c_iNumCustomActionTypes = 9; enum CustomActionTypes { PREINIT = 0, PRECONNECT = 1, PREDIAL = 2, PRETUNNEL = 3, ONCONNECT = 4, ONINTCONNECT = 5, ONDISCONNECT = 6, ONCANCEL = 7, ONERROR = 8, ALL = -1 };
struct CustomActionListItem { TCHAR szDescription[MAX_PATH+1]; TCHAR szProgram[MAX_PATH+1]; TCHAR szFunctionName[MAX_PATH+1]; LPTSTR pszParameters; BOOL bIncludeBinary; BOOL bBuiltInAction; BOOL bTempDescription; CustomActionTypes Type; DWORD dwFlags; CustomActionListItem* Next; };
class CustomActionList {
//
// This enumerator class is used to enumerate
// the data in the Custom Action List class.
// This allows the enumerator to have access to
// the private data of CustomActionList but
// controls how the user of this class accesses
// that data.
//
friend class CustomActionListEnumerator;
private:
//
// Array of Linked lists to hold the custom actions
//
CustomActionListItem* m_CustomActionHash[c_iNumCustomActionTypes];
//
// Array of string pointers to hold the custom action type strings, plus
// the special All type string pointer.
//
TCHAR* m_ActionTypeStrings[c_iNumCustomActionTypes]; TCHAR* m_pszAllTypeString;
//
// Array of string pointers to hold the CMS section names for each type
// of custom action. Note that these strings are const TCHAR* const and
// shouldn't be free-ed.
//
TCHAR* m_ActionSectionStrings[c_iNumCustomActionTypes]; //
// Array of string pointers to hold the custom action execution state
// strings. These are added to the combo box on the Add/Edit custom
// action dialog to allow the user to pick when a custom action is
// executed
//
TCHAR* m_ExecutionStrings[c_iNumCustomActionExecutionStates];
//
// Functions internal to the class
//
HRESULT ParseCustomActionString(LPTSTR pszStringToParse, CustomActionListItem* pCustomAction, TCHAR* pszShortServiceName); HRESULT Find(HINSTANCE hInstance, LPCTSTR pszDescription, CustomActionTypes Type, CustomActionListItem** ppItem, CustomActionListItem** ppFollower); HRESULT EnsureActionTypeStringsLoaded(HINSTANCE hInstance); BOOL IsCmDl(CustomActionListItem* pItem);
public: CustomActionList(); ~CustomActionList(); HRESULT ReadCustomActionsFromCms(HINSTANCE hInstance, TCHAR* pszCmsFile, TCHAR* pszShortServiceName); HRESULT WriteCustomActionsToCms(TCHAR* pszCmsFile, TCHAR* pszShortServiceName, BOOL bUseTunneling); HRESULT Add(HINSTANCE hInstance, CustomActionListItem* pCustomAction, LPCTSTR pszShortServiceName); HRESULT Edit(HINSTANCE hInstance, CustomActionListItem* pOldCustomAction, CustomActionListItem* pNewCustomAction, LPCTSTR pszShortServiceName); HRESULT GetExistingActionData(HINSTANCE hInstance, LPCTSTR pszDescription, CustomActionTypes Type, CustomActionListItem** ppCustomAction); HRESULT Delete(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type); HRESULT MoveUp(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type); HRESULT MoveDown(HINSTANCE hInstance, TCHAR* pszDescription, CustomActionTypes Type); HRESULT AddCustomActionTypesToComboBox(HWND hDlg, UINT uCtrlId, HINSTANCE hInstance, BOOL bUseTunneling, BOOL bAddAll); HRESULT AddCustomActionsToListView(HWND hListView, HINSTANCE hInstance, CustomActionTypes Type, BOOL bUseTunneling, int iItemToSelect, BOOL bTypeInSecondCol); HRESULT GetTypeFromTypeString(HINSTANCE hInstance, TCHAR* pszTypeString, CustomActionTypes* pType); HRESULT GetTypeStringFromType(HINSTANCE hInstance, CustomActionTypes Type, TCHAR** ppszTypeString); HRESULT AddExecutionTypesToComboBox(HWND hDlg, UINT uCtrlId, HINSTANCE hInstance, BOOL bUseTunneling); HRESULT MapIndexToFlags(int iIndex, DWORD* pdwFlags); HRESULT MapFlagsToIndex(DWORD dwFlags, int* piIndex); HRESULT FillInTempDescription(CustomActionListItem* pCustomAction); HRESULT GetListPositionAndBuiltInState(HINSTANCE hInstance, CustomActionListItem* pItem, BOOL* pbFirstInList, BOOL* pbLastInList, BOOL *pIsBuiltIn); HRESULT AddOrRemoveCmdl(HINSTANCE hInstance, BOOL bAddCmdl, BOOL bForVpn); };
class CustomActionListEnumerator { private: int m_iCurrentList; CustomActionListItem* m_pCurrentListItem; CustomActionList* m_pActionList;
public: CustomActionListEnumerator(CustomActionList* pActionListToWorkFrom); // ~CustomActionListEnumerator(); // currently not needed
void Reset(); HRESULT GetNextIncludedProgram(TCHAR* pszProgram, DWORD dwBufferSize); };
|