Leaked source code of windows server 2003
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.
 
 
 
 
 
 

262 lines
9.3 KiB

#include "precomp.h"
#include <admparse.h>
#include "rsop.h"
#define NUM_ICONS 3
int g_ADMOpen, g_ADMClose, g_ADMCategory;
extern HINSTANCE g_hUIInstance;
// Creates image list, adds 3 icons to it, and associates the image
// list with the treeview control.
LRESULT InitImageList(HWND hTreeView)
{
HIMAGELIST hWndImageList;
HICON hIcon;
hWndImageList = ImageList_Create(GetSystemMetrics (SM_CXSMICON),
GetSystemMetrics (SM_CYSMICON),
TRUE, NUM_ICONS, 3);
if(!hWndImageList)
{
return FALSE;
}
hIcon = LoadIcon(g_hUIInstance, MAKEINTRESOURCE(IDI_ICON2));
g_ADMOpen = ImageList_AddIcon(hWndImageList, hIcon);
DestroyIcon(hIcon);
hIcon = LoadIcon(g_hUIInstance, MAKEINTRESOURCE(IDI_ICON3));
g_ADMClose = ImageList_AddIcon(hWndImageList, hIcon);
DestroyIcon(hIcon);
hIcon = LoadIcon(g_hUIInstance, MAKEINTRESOURCE(IDI_ICON4));
g_ADMCategory = ImageList_AddIcon(hWndImageList, hIcon);
DestroyIcon(hIcon);
// Fail if not all images were added.
if (ImageList_GetImageCount(hWndImageList) < NUM_ICONS)
{
// ERROR: Unable to add all images to image list.
return FALSE;
}
// Associate image list with treeView control.
TreeView_SetImageList(hTreeView, hWndImageList, TVSIL_NORMAL);
return TRUE;
}
static void AddIconsToNodes(HWND hTreeView, HTREEITEM hParentItem)
{
TV_ITEM tvItem;
HTREEITEM hItem;
hItem = TreeView_GetChild(hTreeView, hParentItem);
while(hItem != NULL)
{
tvItem.hItem = hItem;
tvItem.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvItem.iImage = g_ADMCategory;
tvItem.iSelectedImage = g_ADMCategory;
TreeView_SetItem(hTreeView, &tvItem);
hItem = TreeView_GetNextSibling(hTreeView, hItem); // get next item
}
}
/////////////////////////////////////////////////////////////////////
INT_PTR CALLBACK AdmDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
// Retrieve Property Sheet Page info for each call into dlg proc.
LPPROPSHEETCOOKIE psCookie = (LPPROPSHEETCOOKIE)GetWindowLongPtr(hDlg, DWLP_USER);
TV_ITEM tvItem, tvItem1;
HTREEITEM hItem, hParentItem;
RECT rectDlg, rectInstr, rectDscr;
RECT rectButton, rectTreeView;
static TCHAR szWorkDir[MAX_PATH];
HWND hTreeView = GetDlgItem(hDlg, IDC_ADMTREE);
LPNM_TREEVIEW lpNMTreeView = (LPNM_TREEVIEW)lParam;
UNREFERENCED_PARAMETER(wParam);
switch (message)
{
case WM_INITDIALOG:
SetPropSheetCookie(hDlg, lParam);
EnableDBCSChars(hDlg, IDC_ADMTREE);
InitImageList(hTreeView);
#ifdef UNICODE
TreeView_SetUnicodeFormat(hTreeView, TRUE);
#else
TreeView_SetUnicodeFormat(hTreeView, FALSE);
#endif
HideDlgItem(hDlg, IDC_ADMIMPORT);
HideDlgItem(hDlg, IDC_ADMDELETE);
// strech the treeview to cover the area of the buttons
GetWindowRect(GetDlgItem(hDlg, IDC_ADMIMPORT), &rectButton);
GetWindowRect(hTreeView, &rectTreeView);
SetWindowPos(hTreeView, HWND_TOP, 0, 0, rectTreeView.right - rectTreeView.left,
(rectTreeView.bottom - rectTreeView.top) + (rectButton.bottom - rectTreeView.bottom),
SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW);
break;
case WM_DESTROY:
//TODO: UNCOMMENT
// if (psCookie->pCS->IsRSoP())
// DestroyDlgRSoPData(hDlg);
break;
case WM_HELP: // F1
ShowHelpTopic(hDlg);
break;
case WM_NOTIFY:
switch (((LPNMHDR)lParam)->code)
{
case PSN_HELP:
ShowHelpTopic(hDlg);
break;
case PSN_SETACTIVE:
CreateWorkDir(GetInsFile(hDlg), IEAK_GPE_BRANDING_SUBDIR TEXT("\\ADM"), szWorkDir);
GetWindowRect(hDlg, &rectDlg);
GetWindowRect(GetDlgItem(hDlg, IDC_ADMINSTR), &rectInstr);
rectDscr.left = rectInstr.left - rectDlg.left + 1;
rectDscr.top = rectInstr.top - rectDlg.top + 1;
rectDscr.right = rectDscr.left + (rectInstr.right - rectInstr.left) - 2;
rectDscr.bottom = rectDscr.top + (rectInstr.bottom - rectInstr.top) - 2;
CreateADMWindow(hTreeView, GetDlgItem(hDlg, IDC_ADMINSTR), rectDscr.left,
rectDscr.top, rectDscr.right - rectDscr.left,
rectDscr.bottom - rectDscr.top);
{
TCHAR szAdmFilePath[MAX_PATH];
TCHAR szAdmFileName[MAX_PATH];
CNewCursor cur(IDC_WAIT);
StrCpy(szAdmFilePath, GetCurrentAdmFile(hDlg));
StrCpy(szAdmFileName, PathFindFileName(szAdmFilePath));
PathRemoveFileSpec(szAdmFilePath);
BSTR bstrNamespace = NULL;
if (psCookie->pCS->IsRSoP())
bstrNamespace = psCookie->pCS->GetRSoPNamespace();
hItem = AddADMItem(hTreeView, szAdmFilePath, szAdmFileName,
szWorkDir, ROLE_CORP, bstrNamespace);
if (hItem != NULL)
{
AddIconsToNodes(hTreeView, hItem);
TreeView_Expand(hTreeView, hItem, TVE_EXPAND);
TreeView_SelectItem(hTreeView, hItem);
}
}
break;
case PSN_APPLY:
if (psCookie->pCS->IsRSoP())
return FALSE;
else
{
if (!AcquireWriteCriticalSection(hDlg))
{
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, PSNRET_INVALID_NOCHANGEPAGE);
break;
}
// save the contents and delete the tree item
DeleteADMItems(hTreeView, szWorkDir, GetInsFile(hDlg), TRUE);
TreeView_DeleteAllItems(hTreeView);
DestroyADMWindow(hTreeView);
if (PathIsDirectoryEmpty(szWorkDir))
PathRemovePath(szWorkDir);
// Copy this ADM file to the same dir as the INF files so we can
// use the two files to display results from RSoP.
CopyFileToDirEx(GetCurrentAdmFile(hDlg), szWorkDir);
SignalPolicyChanged(hDlg, FALSE, TRUE, &g_guidClientExt, &g_guidSnapinExt, TRUE);
}
break;
case PSN_QUERYCANCEL:
DeleteADMItems(hTreeView, szWorkDir, GetInsFile(hDlg), FALSE);
TreeView_DeleteAllItems(hTreeView);
DestroyADMWindow(hTreeView);
if (PathIsDirectoryEmpty(szWorkDir))
PathRemovePath(szWorkDir);
break;
case TVN_SELCHANGED:
hParentItem = TreeView_GetParent(hTreeView, lpNMTreeView->itemNew.hItem);
// save and remove the previous item
SelectADMItem(hDlg, hTreeView, &lpNMTreeView->itemOld, FALSE, FALSE);
// display the information for the newly selected item
DisplayADMItem(hDlg, hTreeView, &lpNMTreeView->itemNew, FALSE);
break;
case TVN_ITEMEXPANDED:
tvItem.mask = TVIF_IMAGE;
tvItem.hItem = lpNMTreeView->itemNew.hItem;
TreeView_GetItem(hTreeView, &tvItem);
// If tree item is EXPANDING (opening up) and
// current icon == CloseFolder, change icon to OpenFolder
if((lpNMTreeView->action == TVE_EXPAND) &&
(tvItem.iImage == g_ADMClose))
{
tvItem1.hItem = lpNMTreeView->itemNew.hItem;
tvItem1.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvItem1.iImage = g_ADMOpen;
tvItem1.iSelectedImage = g_ADMOpen;
TreeView_SetItem(hTreeView, &tvItem1);
}
// If tree item is COLLAPSING (closing up) and
// current icon == OpenFolder, change icon to CloseFolder
else if((lpNMTreeView->action == TVE_COLLAPSE) &&
(tvItem.iImage == g_ADMOpen))
{
tvItem1.hItem = lpNMTreeView->itemNew.hItem;
tvItem1.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE;
tvItem1.iImage = g_ADMClose;
tvItem1.iSelectedImage = g_ADMClose;
TreeView_SetItem(hTreeView, &tvItem1);
}
break;
default:
return FALSE;
}
break;
default:
return FALSE;
}
return TRUE;
}