WindowsXP-SP1/admin/select/src/stringdlg.cxx
2020-09-30 16:53:49 +02:00

355 lines
8.4 KiB
C++

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997 - 2000.
//
// File: StringDlg.cxx
//
// Contents: Implementation of child dialog for entering string attribute
// condition and value
//
// Classes: CStringDlg
//
// History: 05-26-2000 DavidMun Created
//
//---------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
//
// SStringDlgSavedState - self-initializing structure used to persist the
// state of the string dialog.
//
struct SStringDlgSavedState
{
SStringDlgSavedState():
iComboSelection(0)
{
wzValue[0] = L'\0';
}
int iComboSelection;
WCHAR wzValue[ANYSIZE_ARRAY];
private:
SStringDlgSavedState(const SStringDlgSavedState &);
SStringDlgSavedState &
operator= (const SStringDlgSavedState &);
};
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::GetLdapFilter
//
// Synopsis: Return an LDAP filter string corresponding to the user's
// entry.
//
// Arguments: [ak] - key of currently selected string attribute
//
// Returns: LDAP filter
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
String
CStringDlg::GetLdapFilter(
ATTR_KEY ak) const
{
TRACE_METHOD(CStringDlg, GetLdapFilter);
const CAttributeManager &ram = m_rop.GetAttributeManager();
const String &strLdapName = ram.GetAttrAdsiName(ak);
String strFilter = L"(" + strLdapName + L"=" + m_strValue;
if (m_iCondition)
{
strFilter += L")";
}
else
{
strFilter += L"*)";
}
return strFilter;
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::GetDescription
//
// Synopsis: Return a human-readable string describing the LDAP filter
//
// Arguments: [ak] - key of currently selected string attribute
//
// Returns: Description of filter that GetLdapFilter would return for
// the same value of [ak].
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
String
CStringDlg::GetDescription(
ATTR_KEY ak) const
{
TRACE_METHOD(CStringDlg, GetDescription);
String strFormat;
if (m_iCondition)
{
strFormat = String::load(IDS_STR_FILTER_EXACT_DESCRIPTION_FMT);
}
else
{
strFormat = String::load(IDS_STR_FILTER_PREFIX_DESCRIPTION_FMT);
}
const CAttributeManager &ram = m_rop.GetAttributeManager();
const String &strDisplayName = ram.GetAttrDisplayName(ak);
return String::format(strFormat.c_str(),
strDisplayName.c_str(),
m_strValue.c_str());
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::Show
//
// Synopsis: Make the dialog visible and enable its child controls
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
void
CStringDlg::Show() const
{
ShowWindow(m_hwnd, SW_SHOW);
EnableWindow(_hCtrl(IDC_CONDITION_COMBO), TRUE);
EnableWindow(_hCtrl(IDC_VALUE_EDIT), TRUE);
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::Hide
//
// Synopsis: Make the dialog invisible and disable its child controls
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
void
CStringDlg::Hide() const
{
ShowWindow(m_hwnd, SW_HIDE);
EnableWindow(_hCtrl(IDC_CONDITION_COMBO), FALSE);
EnableWindow(_hCtrl(IDC_VALUE_EDIT), FALSE);
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::Save
//
// Synopsis: Persist the dialog's state in a chunk of memory and put
// a pointer to that chunk in *[ppv].
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
void
CStringDlg::Save(
PVOID *ppv) const
{
TRACE_METHOD(CStringDlg, Save);
*ppv = new BYTE [sizeof(SStringDlgSavedState) +
m_strValue.length() * sizeof(WCHAR)];
SStringDlgSavedState *pssd = static_cast<SStringDlgSavedState *>(*ppv);
pssd->iComboSelection = m_iCondition;
lstrcpy(pssd->wzValue, m_strValue.c_str());
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::Load
//
// Synopsis: Restore the dialog's state from a SStringDlgSavedState
// structure pointed to by [pv].
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
void
CStringDlg::Load(
PVOID pv)
{
TRACE_METHOD(CStringDlg, Load);
SStringDlgSavedState *pssd = static_cast<SStringDlgSavedState *>(pv);
m_iCondition = pssd->iComboSelection;
m_strValue = pssd->wzValue;
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::Free
//
// Synopsis: Free the data stored in [pv] by Save.
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
void
CStringDlg::Free(
VOID *pv) const
{
TRACE_METHOD(CStringDlg, Free);
if (pv)
{
BYTE *pb = static_cast<BYTE *>(pv);
delete [] pb;
}
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::_OnCommand
//
// Synopsis: Handle a WM_COMMAND message
//
// Arguments: [wParam] - standard windows
// [lParam] - standard windows
//
// Returns: standard windows
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
BOOL
CStringDlg::_OnCommand(
WPARAM wParam,
LPARAM lParam)
{
BOOL fNotHandled = FALSE;
switch (LOWORD(wParam))
{
case IDC_VALUE_EDIT:
if (HIWORD(wParam) == EN_UPDATE &&
IsWindowEnabled(reinterpret_cast<HWND>(lParam)))
{
_ReadEditCtrl(IDC_VALUE_EDIT, &m_strValue);
m_strValue.strip(String::BOTH);
EnableWindow(GetDlgItem(GetParent(m_hwnd), IDOK),
!m_strValue.empty());
}
break;
case IDC_CONDITION_COMBO:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
m_iCondition = ComboBox_GetCurSel(reinterpret_cast<HWND>(lParam));
ASSERT(m_iCondition != CB_ERR);
if (m_iCondition == CB_ERR)
{
DBG_OUT_LASTERROR;
m_iCondition = 0;
}
Dbg(DEB_TRACE, "UA: (StringDlg) selected %ws\n",
(m_iCondition ? L"is exactly" : L"starts with"));
}
break;
default:
fNotHandled = TRUE;
break;
}
return fNotHandled;
}
//+--------------------------------------------------------------------------
//
// Member: CStringDlg::_OnInit
//
// Synopsis: Initialize the dialog
//
// Arguments: [pfSetFocus] - unused
//
// Returns: HRESULT
//
// History: 06-23-2000 DavidMun Created
//
//---------------------------------------------------------------------------
HRESULT
CStringDlg::_OnInit(
BOOL *pfSetFocus)
{
TRACE_METHOD(CStringDlg, _OnInit);
HRESULT hr = S_OK;
do
{
Edit_SetText(_hCtrl(IDC_VALUE_EDIT), m_strValue.c_str());
hr = AddStringToCombo(_hCtrl(IDC_CONDITION_COMBO), IDS_STARTS_WITH);
BREAK_ON_FAIL_HRESULT(hr);
hr = AddStringToCombo(_hCtrl(IDC_CONDITION_COMBO), IDS_IS_EXACTLY);
BREAK_ON_FAIL_HRESULT(hr);
ComboBox_SetCurSel(_hCtrl(IDC_CONDITION_COMBO), m_iCondition);
EnableWindow(GetDlgItem(GetParent(m_hwnd), IDOK),
!m_strValue.empty());
} while (0);
return hr;
}