/*++ Copyright (c) 1996 Microsoft Corporation Module Name: ginfo.cpp : implementation file CPropertyPage support for User mgmt wizard File History: JonY Apr-96 created --*/ #include "stdafx.h" #include "Speckle.h" #include "userlist.h" #include "wizbased.h" #include "ginfo.h" #include #include #include #ifdef _DEBUG //#define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CGroupInfo property page IMPLEMENT_DYNCREATE(CGroupInfo, CWizBaseDlg) CGroupInfo::CGroupInfo() : CWizBaseDlg(CGroupInfo::IDD) { //{{AFX_DATA_INIT(CGroupInfo) m_csCaption = _T(""); //}}AFX_DATA_INIT } CGroupInfo::~CGroupInfo() { } void CGroupInfo::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGroupInfo) DDX_Control(pDX, IDC_GROUP_MEMBER_LIST, m_lbSelectedGroups); DDX_Control(pDX, IDC_GROUP_AVAILABLE_LIST, m_lbAvailableGroups); DDX_Text(pDX, IDC_STATIC1, m_csCaption); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGroupInfo, CWizBaseDlg) //{{AFX_MSG_MAP(CGroupInfo) ON_BN_CLICKED(IDC_ADD_BUTTON, OnAddButton) ON_BN_CLICKED(IDC_REMOVE_BUTTON, OnRemoveButton) ON_LBN_SETFOCUS(IDC_GROUP_AVAILABLE_LIST, OnSetfocusGroupAvailableList) ON_LBN_SETFOCUS(IDC_GROUP_MEMBER_LIST, OnSetfocusGroupMemberList) ON_LBN_SELCHANGE(IDC_GROUP_MEMBER_LIST, OnSelchangeGroupMemberList) ON_WM_SHOWWINDOW() ON_LBN_DBLCLK(IDC_GROUP_AVAILABLE_LIST, OnDblclkGroupAvailableList) ON_LBN_DBLCLK(IDC_GROUP_MEMBER_LIST, OnDblclkGroupMemberList) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGroupInfo message handlers BOOL CGroupInfo::OnInitDialog() { CWizBaseDlg::OnInitDialog(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CGroupInfo::OnAddButton() { UpdateData(TRUE); USHORT usSel = m_lbAvailableGroups.GetCurSel(); if (usSel == LB_ERR) { GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE); m_lbSelectedGroups.SetCurSel(0); return; } CString csSel; m_lbAvailableGroups.GetText(usSel, csSel); USHORT usBmp = m_lbAvailableGroups.GetBitmapID(usSel); m_lbSelectedGroups.AddString(csSel, usBmp); m_lbAvailableGroups.DeleteString(usSel); // anybody left? if (m_lbAvailableGroups.GetCount() != 0) m_lbAvailableGroups.SetCurSel(0); else { m_lbSelectedGroups.SetCurSel(0); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE); m_lbAvailableGroups.SetHorizontalExtent(0); } } void CGroupInfo::OnRemoveButton() { UpdateData(TRUE); USHORT usSel = m_lbSelectedGroups.GetCurSel(); if (usSel == 65535) { GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE); m_lbAvailableGroups.SetCurSel(0); return; } CString csSel; m_lbSelectedGroups.GetText(usSel, csSel); USHORT usBmp = m_lbSelectedGroups.GetBitmapID(usSel); m_lbAvailableGroups.AddString(csSel, usBmp); m_lbSelectedGroups.DeleteString(usSel); // anybody left? if (m_lbSelectedGroups.GetCount() != 0) m_lbSelectedGroups.SetCurSel(0); else { m_lbAvailableGroups.SetCurSel(0); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE); m_lbSelectedGroups.SetHorizontalExtent(0); } } LRESULT CGroupInfo::OnWizardBack() { return CPropertyPage::OnWizardBack(); } LRESULT CGroupInfo::OnWizardNext() { UpdateData(TRUE); CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp(); // add selected groups to list pApp->m_csaSelectedLocalGroups.RemoveAll(); pApp->m_csaSelectedGlobalGroups.RemoveAll(); short sGroupCount = m_lbSelectedGroups.GetCount(); short sCount; CString csVal; for (sCount = 0; sCount < sGroupCount; sCount++) { USHORT usBmp = m_lbSelectedGroups.GetBitmapID(sCount); m_lbSelectedGroups.GetText(sCount, csVal); if (usBmp == 3) pApp->m_csaSelectedLocalGroups.Add(csVal); else if (usBmp == 1) pApp->m_csaSelectedGlobalGroups.Add(csVal); } pApp->m_cps1.SetWizardButtons(PSWIZB_NEXT | PSWIZB_BACK); return CPropertyPage::OnWizardNext(); } void CGroupInfo::OnSetfocusGroupAvailableList() { m_lbSelectedGroups.SetCurSel(-1); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE); } void CGroupInfo::OnSetfocusGroupMemberList() { UpdateData(TRUE); m_lbAvailableGroups.SetCurSel(-1); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE); } void CGroupInfo::OnSelchangeGroupMemberList() { UpdateData(TRUE); } void CGroupInfo::OnShowWindow(BOOL bShow, UINT nStatus) { CWizBaseDlg::OnShowWindow(bShow, nStatus); if (!bShow) return; CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp(); if (!pApp->m_bGReset) return; pApp->m_bGReset = FALSE; m_lbAvailableGroups.ResetContent(); m_lbSelectedGroups.ResetContent(); CWaitCursor wait; DWORD dwEntriesRead = 0; DWORD dwTotalEntries = 0; DWORD dwResumeHandle = 0; NET_API_STATUS nApi; unsigned long sIndex; TCHAR* pServer = pApp->m_csServer.GetBuffer(pApp->m_csServer.GetLength()); pApp->m_csServer.ReleaseBuffer(); // if this is on a domain, check for global groups if (pApp->m_bDomain) { PGROUP_INFO_1 pInfo; do { nApi = NetGroupEnum(pServer, (DWORD)1, (PBYTE*)&pInfo, (DWORD)5000, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); for (sIndex = 0; sIndex < dwEntriesRead; sIndex++) { TCHAR sTemp[50]; swprintf(sTemp, TEXT("%s"), pInfo[sIndex].grpi1_name); m_lbAvailableGroups.AddString(1, sTemp); } NetApiBufferFree(pInfo); } while (dwResumeHandle != 0); // m_lbSelectedGroups.AddString(1, TEXT("Domain Users")); UpdateData(FALSE); } PLOCALGROUP_INFO_1 pLocalInfo; dwResumeHandle = 0; do { nApi = NetLocalGroupEnum(pServer, (DWORD)1, (PBYTE*)&pLocalInfo, (DWORD)5000, &dwEntriesRead, &dwTotalEntries, &dwResumeHandle); for (sIndex = 0; sIndex < dwEntriesRead; sIndex++) { TCHAR sTemp[50]; swprintf(sTemp, TEXT("%s"), pLocalInfo[sIndex].lgrpi1_name); m_lbAvailableGroups.AddString(3, sTemp); } NetApiBufferFree(pLocalInfo); } while (dwResumeHandle != 0); m_lbAvailableGroups.SetCurSel(0); // set caption text CString csTemp; csTemp.LoadString(IDS_GROUP_CAPTION); CString csTemp2; csTemp2.Format(csTemp, pApp->m_csUserName); m_csCaption = csTemp2; UpdateData(FALSE); } void CGroupInfo::OnDblclkGroupAvailableList() { UpdateData(TRUE); USHORT usSel = m_lbAvailableGroups.GetCurSel(); CString csSel; m_lbAvailableGroups.GetText(usSel, csSel); USHORT usBmp = m_lbAvailableGroups.GetBitmapID(usSel); m_lbSelectedGroups.AddString(csSel, usBmp); m_lbAvailableGroups.DeleteString(usSel); // anybody left? if (m_lbAvailableGroups.GetCount() != 0) m_lbAvailableGroups.SetCurSel(0); else { m_lbSelectedGroups.SetCurSel(0); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(FALSE); m_lbAvailableGroups.SetHorizontalExtent(0); } } void CGroupInfo::OnDblclkGroupMemberList() { UpdateData(TRUE); USHORT usSel = m_lbSelectedGroups.GetCurSel(); CString csSel; m_lbSelectedGroups.GetText(usSel, csSel); USHORT usBmp = m_lbSelectedGroups.GetBitmapID(usSel); m_lbAvailableGroups.AddString(csSel, usBmp); m_lbSelectedGroups.DeleteString(usSel); // anybody left? if (m_lbSelectedGroups.GetCount() != 0) m_lbSelectedGroups.SetCurSel(0); else { m_lbAvailableGroups.SetCurSel(0); GetDlgItem(IDC_ADD_BUTTON)->EnableWindow(TRUE); GetDlgItem(IDC_REMOVE_BUTTON)->EnableWindow(FALSE); m_lbSelectedGroups.SetHorizontalExtent(0); } }