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.
591 lines
15 KiB
591 lines
15 KiB
/****************************************************************************************
|
|
* NAME: EnumCondEdit.cpp
|
|
*
|
|
* CLASS: CEnumConditionEditor
|
|
*
|
|
* OVERVIEW
|
|
*
|
|
* Internet Authentication Server:
|
|
* This dialog box is used to edit enum-typed editor
|
|
*
|
|
* e.x. attr = <value1>\|<value2>
|
|
*
|
|
*
|
|
* Copyright (C) Microsoft Corporation, 1998 - 1999 . All Rights Reserved.
|
|
*
|
|
* History:
|
|
* 1/27/98 Created by Byao (using ATL wizard)
|
|
*
|
|
*****************************************************************************************/
|
|
|
|
#include "precompiled.h"
|
|
#include "EnumCondEdit.h"
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CEnumConditionEditor
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: constructor for CEnumConditionEditor.
|
|
//
|
|
// Arguments: LPTSTR pszAttrName - The attribute that needs to be edited
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
// History: Created byao 1/30/98 6:14:32 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CEnumConditionEditor::CEnumConditionEditor()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: OnInitDialog
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: initialize the dialog box
|
|
//
|
|
// Arguments: UINT uMsg -
|
|
// WPARAM wParam -
|
|
// LPARAM lParam -
|
|
// BOOL& bHandled -
|
|
//
|
|
// Returns: LRESULT -
|
|
//
|
|
// History: Created Header 1/30/98 6:15:41 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnInitDialog");
|
|
|
|
LVCOLUMN lvCol;
|
|
|
|
lvCol.mask = LVCF_FMT | LVCF_WIDTH ;
|
|
lvCol.fmt = LVCFMT_LEFT;
|
|
lvCol.cx = 200; // will readjust with later in the program
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_INSERTCOLUMN,
|
|
1,
|
|
(LPARAM) &lvCol
|
|
);
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_INSERTCOLUMN,
|
|
1,
|
|
(LPARAM) &lvCol
|
|
);
|
|
|
|
//
|
|
// populate the possible multiple selections
|
|
//
|
|
PopulateSelections();
|
|
|
|
// change the title to the name of the attribute
|
|
SetWindowText(m_strAttrName);
|
|
|
|
return 1; // Let the system set the focus
|
|
}
|
|
|
|
|
|
LRESULT CEnumConditionEditor::OnOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnOK");
|
|
|
|
m_pSelectedList->clear();
|
|
|
|
|
|
TCHAR buffer[MAX_PATH * 2];
|
|
//
|
|
// get the current selection index in the source list box
|
|
//
|
|
|
|
// LVM_GETSELECTIONMARK
|
|
int iTotal = SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_GETITEMCOUNT,
|
|
0,
|
|
0);
|
|
|
|
// put the text into the list
|
|
for( int i = 0; i < iTotal; i++)
|
|
{
|
|
LVITEM lvItem;
|
|
|
|
|
|
lvItem.mask = 0;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.iItem = i;
|
|
lvItem.pszText = buffer;
|
|
lvItem.cchTextMax = MAX_PATH * 2;
|
|
|
|
|
|
if (SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_GETITEMTEXT,
|
|
i,
|
|
(LPARAM)&lvItem
|
|
) > 0)
|
|
{
|
|
try
|
|
{
|
|
CComBSTR bstrValue = buffer;
|
|
m_pSelectedList->push_back( bstrValue );
|
|
}
|
|
catch (...)
|
|
{
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
EndDialog(wID);
|
|
return 0;
|
|
}
|
|
|
|
LRESULT CEnumConditionEditor::OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnCancel");
|
|
EndDialog(wID);
|
|
return 0;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: OnAdd
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: Add a selected value from the "Choices" list to "Selection" list
|
|
//
|
|
// Arguments: WORD wNotifyCode - notify code for this WM_COMMAND msg
|
|
// WORD wID - ID of the control
|
|
// HWND hWndCtl - Window Handle for this msg
|
|
// BOOL& bHandled - whether it's handled or not
|
|
//
|
|
// Returns: LRESULT -
|
|
// S_FALSE: failure
|
|
// 0: succeed
|
|
//
|
|
// History: Created byao 1/30/98 3:47:33 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::OnAdd(WORD wNotifyCode,
|
|
WORD wID,
|
|
HWND hWndCtl,
|
|
BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnAdd");
|
|
|
|
//
|
|
// see if the current focus is in "Selection" listbox
|
|
//
|
|
|
|
|
|
return SwapSelection(IDC_LIST_ENUMCOND_CHOICE,
|
|
IDC_LIST_ENUMCOND_SELECTION);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: OnDelete
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: Delete a selected value from the "Selection" list
|
|
// and move it back to "Choices" list
|
|
//
|
|
// Arguments: WORD wNotifyCode - notify code for this WM_COMMAND msg
|
|
// WORD wID - ID of the control
|
|
// HWND hWndCtl - Window Handle for this msg
|
|
// BOOL& bHandled - whether it's handled or not
|
|
//
|
|
// Returns: LRESULT -
|
|
// S_FALSE: failure
|
|
// 0: succeed
|
|
//
|
|
// History: Created byao 1/30/98 3:47:33 PM
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::OnDelete(WORD wNotifyCode,
|
|
WORD wID,
|
|
HWND hWndCtl,
|
|
BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnDelete");
|
|
|
|
return SwapSelection(IDC_LIST_ENUMCOND_SELECTION,
|
|
IDC_LIST_ENUMCOND_CHOICE);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: OnChoiceDblclk
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: Double click on the "Choice" list --> move it to selection list
|
|
//
|
|
// Arguments: WORD wNotifyCode - notify code for this WM_COMMAND msg
|
|
// WORD wID - ID of the control
|
|
// HWND hWndCtl - Window Handle for this msg
|
|
// BOOL& bHandled - whether it's handled or not
|
|
//
|
|
// Returns: LRESULT -
|
|
// S_FALSE: failure
|
|
// 0: succeed
|
|
//
|
|
// History: Created byao 4/7/98 3:47:33 PM
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::OnChoiceDblclk(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnChoiceDblclk");
|
|
|
|
return SwapSelection(IDC_LIST_ENUMCOND_CHOICE,
|
|
IDC_LIST_ENUMCOND_SELECTION);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: OnSelectionDblclk
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: Double click on the "Selection" list --> move it back to choice list
|
|
//
|
|
// Arguments: WORD wNotifyCode - notify code for this WM_COMMAND msg
|
|
// WORD wID - ID of the control
|
|
// HWND hWndCtl - Window Handle for this msg
|
|
// BOOL& bHandled - whether it's handled or not
|
|
//
|
|
// Returns: LRESULT -
|
|
// S_FALSE: failure
|
|
// 0: succeed
|
|
//
|
|
// History: Created byao 4/7/98 3:47:33 PM
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::OnSelectionDblclk(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::OnSelectionDblclk");
|
|
|
|
return SwapSelection(IDC_LIST_ENUMCOND_SELECTION,
|
|
IDC_LIST_ENUMCOND_CHOICE);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: PopulateSelections
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: Populate the multiple selection list
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL -
|
|
//
|
|
// History: Created byao 1/30/98 3:24:22 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
BOOL CEnumConditionEditor::PopulateSelections()
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::PopulateSelections");
|
|
|
|
LONG lIndex;
|
|
HRESULT hr;
|
|
LONG lMaxWidth = 0;
|
|
LONG tempSize;
|
|
|
|
LVITEM lvItem;
|
|
|
|
lvItem.mask = LVIF_TEXT | LVIF_PARAM;
|
|
|
|
CComQIPtr< IIASEnumerableAttributeInfo, &IID_IIASEnumerableAttributeInfo > spEnumerableAttributeInfo( m_spAttributeInfo );
|
|
_ASSERTE( spEnumerableAttributeInfo );
|
|
|
|
|
|
LONG lSize;
|
|
LONG lTotalChoices;
|
|
hr = spEnumerableAttributeInfo->get_CountEnumerateDescription( &lSize );
|
|
lTotalChoices = lSize;
|
|
_ASSERTE( SUCCEEDED( hr ) );
|
|
|
|
// set item count
|
|
// LVM_SETITEMCOUNT
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_SETITEMCOUNT,
|
|
lSize + 1,
|
|
(LPARAM) 0
|
|
);
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_SETITEMCOUNT,
|
|
lSize + 1,
|
|
(LPARAM) 0
|
|
);
|
|
for (lIndex=0; lIndex < lSize; lIndex++)
|
|
{
|
|
|
|
CComBSTR bstrDescription;
|
|
hr = spEnumerableAttributeInfo->get_EnumerateDescription( lIndex, &bstrDescription );
|
|
_ASSERTE( SUCCEEDED( hr ) );
|
|
|
|
lvItem.mask = LVIF_PARAM;
|
|
|
|
lvItem.pszText = bstrDescription;
|
|
lvItem.lParam = lIndex;
|
|
lvItem.iItem = lIndex;
|
|
lvItem.iSubItem = 0;
|
|
|
|
int lvItemIndex = SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_INSERTITEM,
|
|
0,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = lvItemIndex;
|
|
lvItem.iSubItem = 0;
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_SETITEMTEXT,
|
|
lvItemIndex,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
tempSize = SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_GETSTRINGWIDTH,
|
|
0,
|
|
(LPARAM) (BSTR)bstrDescription
|
|
);
|
|
|
|
if(tempSize> lMaxWidth)
|
|
lMaxWidth = tempSize;
|
|
|
|
}
|
|
|
|
lMaxWidth += 20;
|
|
|
|
// set the width
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_SETCOLUMNWIDTH,
|
|
0,
|
|
MAKELPARAM(lMaxWidth, 0)
|
|
);
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_SETCOLUMNWIDTH,
|
|
0,
|
|
MAKELPARAM(lMaxWidth, 0)
|
|
);
|
|
|
|
// now populate the pre-selected values;
|
|
|
|
LVFINDINFO lvFindInfo;
|
|
lvFindInfo.flags = LVFI_STRING;
|
|
lvFindInfo.psz = NULL;
|
|
|
|
for (lIndex=0; lIndex < m_pSelectedList->size(); lIndex++)
|
|
{
|
|
CComBSTR bstrTemp = m_pSelectedList->at(lIndex);
|
|
|
|
lvItem.mask = LVIF_PARAM;
|
|
|
|
lvItem.pszText = bstrTemp;
|
|
lvItem.lParam = lIndex;
|
|
lvItem.iItem = lIndex;
|
|
lvItem.iSubItem = 0;
|
|
|
|
int lvItemIndex = SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_INSERTITEM,
|
|
0,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = lvItemIndex;
|
|
lvItem.iSubItem = 0;
|
|
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_SELECTION,
|
|
LVM_SETITEMTEXT,
|
|
lvItemIndex,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
|
|
// remove the item from choice
|
|
// find it and remove it
|
|
lvFindInfo.psz = bstrTemp;
|
|
int iDelIndex = SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_FINDITEM,
|
|
-1,
|
|
(LPARAM) &lvFindInfo
|
|
);
|
|
|
|
if(iDelIndex != -1)
|
|
SendDlgItemMessage(IDC_LIST_ENUMCOND_CHOICE,
|
|
LVM_DELETEITEM,
|
|
iDelIndex,
|
|
(LPARAM) 0
|
|
);
|
|
|
|
|
|
} // for
|
|
|
|
if(m_pSelectedList->size() > 0) // set default selection -- first one
|
|
ListView_SetItemState(GetDlgItem(IDC_LIST_ENUMCOND_SELECTION), 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
|
|
if(lTotalChoices > m_pSelectedList->size()) // still some in availableset default selection -- first one
|
|
ListView_SetItemState(GetDlgItem(IDC_LIST_ENUMCOND_CHOICE), 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: SwapSelection
|
|
//
|
|
// Class: CEnumConditionEditor
|
|
//
|
|
// Synopsis: move a selected item from one list box to another list box
|
|
// and move it back to "Choices" list
|
|
//
|
|
// Arguments: int iSource - source list box
|
|
// int iDest - destination list box
|
|
//
|
|
// Returns: LRESULT -
|
|
// S_FALSE: failure
|
|
// S_OK: succeed
|
|
//
|
|
// History: Created byao 1/30/98 3:47:33 PM
|
|
//+---------------------------------------------------------------------------
|
|
LRESULT CEnumConditionEditor::SwapSelection(int iSource, int iDest)
|
|
{
|
|
TRACE_FUNCTION("CEnumConditionEditor::SwapSelection");
|
|
|
|
LRESULT lErrCode;
|
|
TCHAR buffer[MAX_PATH * 2];
|
|
//
|
|
// get the current selection index in the source list box
|
|
//
|
|
|
|
// LVM_GETSELECTIONMARK
|
|
int iTotalSel = SendDlgItemMessage(iSource,
|
|
LVM_GETSELECTEDCOUNT,
|
|
0,
|
|
0
|
|
);
|
|
|
|
int iCurSel = SendDlgItemMessage(iSource,
|
|
LVM_GETSELECTIONMARK,
|
|
0,
|
|
0
|
|
);
|
|
|
|
// no selection
|
|
if(iCurSel == -1 || iTotalSel < 1)
|
|
return S_OK;
|
|
|
|
LVITEM lvItem;
|
|
|
|
|
|
lvItem.mask = 0;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.iItem = iCurSel;
|
|
lvItem.pszText = buffer;
|
|
lvItem.cchTextMax = MAX_PATH * 2;
|
|
|
|
// since we only allow single selection
|
|
if (SendDlgItemMessage(iSource,
|
|
LVM_GETITEMTEXT,
|
|
iCurSel,
|
|
(LPARAM)&lvItem
|
|
) > 0)
|
|
{
|
|
// remove the item from source
|
|
SendDlgItemMessage(iSource,
|
|
LVM_DELETEITEM,
|
|
iCurSel,
|
|
(LPARAM)&lvItem
|
|
);
|
|
|
|
// add the new item in the dest list
|
|
lvItem.mask = 0;
|
|
|
|
lvItem.iItem = 0;
|
|
lvItem.iSubItem = 0;
|
|
|
|
int lvItemIndex = SendDlgItemMessage(iDest,
|
|
LVM_INSERTITEM,
|
|
0,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = lvItemIndex;
|
|
lvItem.iSubItem = 0;
|
|
|
|
SendDlgItemMessage(iDest,
|
|
LVM_SETITEMTEXT,
|
|
lvItemIndex,
|
|
(LPARAM) &lvItem
|
|
);
|
|
|
|
// total number of items
|
|
int i = SendDlgItemMessage(iSource,
|
|
LVM_GETITEMCOUNT,
|
|
0,
|
|
0);
|
|
|
|
// select the new added on in dest
|
|
ListView_SetItemState(GetDlgItem(iDest), lvItemIndex, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
|
|
// select next item -- source
|
|
if ( i > iCurSel)
|
|
{
|
|
ListView_SetItemState(GetDlgItem(iSource), iCurSel, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
}
|
|
else if ( i > 0)
|
|
{
|
|
ListView_SetItemState(GetDlgItem(iSource), i - 1, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
}
|
|
}
|
|
|
|
|
|
return S_OK; // succeed
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
CEnumConditionEditor::GetHelpPath
|
|
|
|
Remarks:
|
|
This method is called to get the help file path within
|
|
an compressed HTML document when the user presses on the Help
|
|
button of a property sheet.
|
|
|
|
It is an override of CIASDialog::OnGetHelpPath.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
HRESULT CEnumConditionEditor::GetHelpPath( LPTSTR szHelpPath )
|
|
{
|
|
TRACE_FUNCTION("CEnumCondEditor::GetHelpPath");
|
|
|
|
#if 0
|
|
// ISSUE: We seemed to have a problem with passing WCHAR's to the hhctrl.ocx
|
|
// installed on this machine -- it appears to be non-unicode.
|
|
lstrcpy( szHelpPath, _T("html/idh_proc_cond.htm") );
|
|
#else
|
|
strcpy( (CHAR *) szHelpPath, "html/idh_proc_cond.htm" );
|
|
#endif
|
|
|
|
return S_OK;
|
|
}
|