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.
253 lines
6.3 KiB
253 lines
6.3 KiB
// strarrdlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "strarrdlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// StringArrayEditor dialog
|
|
|
|
|
|
CDhcpStringArrayEditor::CDhcpStringArrayEditor(
|
|
CDhcpOption *pdhcType,
|
|
DHCP_OPTION_SCOPE_TYPE dhcScopeType,
|
|
CWnd *pParent )
|
|
: CBaseDialog( CDhcpStringArrayEditor::IDD, pParent ),
|
|
m_p_type( pdhcType ),
|
|
m_option_type( dhcScopeType )
|
|
{
|
|
//{{AFX_DATA_INIT(StringArrayEditor)
|
|
// m_edit_value.Empty();
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
void CDhcpStringArrayEditor::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CDhcpStringArrayEditor)
|
|
DDX_Control(pDX, IDC_STATIC_OPTION_NAME, m_static_option_name);
|
|
DDX_Control(pDX, IDC_STATIC_APPLICATION, m_static_application);
|
|
DDX_Control(pDX, IDC_BUTN_UP, m_b_up);
|
|
DDX_Control(pDX, IDC_BUTN_DOWN, m_b_down);
|
|
DDX_Control(pDX, IDC_BUTN_DELETE, m_b_delete);
|
|
DDX_Control(pDX, IDC_BUTN_ADD, m_b_add);
|
|
DDX_Control(pDX, IDC_LIST_STRING, m_lb_str);
|
|
DDX_Control(pDX, IDC_EDIT_STRING, m_edit);
|
|
DDX_Text(pDX, IDC_EDIT_STRING, m_edit_value);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CDhcpStringArrayEditor, CBaseDialog)
|
|
//{{AFX_MSG_MAP(CDhcpStringArrayEditor)
|
|
ON_BN_CLICKED(IDC_BUTN_ADD, OnButnAdd)
|
|
ON_BN_CLICKED(IDC_BUTN_DELETE, OnButnDelete)
|
|
ON_BN_CLICKED(IDC_BUTN_DOWN, OnButnDown)
|
|
ON_BN_CLICKED(IDC_BUTN_UP, OnButnUp)
|
|
ON_EN_CHANGE(IDC_EDIT_STRING, OnChangeEditString)
|
|
ON_LBN_SELCHANGE(IDC_LIST_STRING, OnSelchangeListString)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDhcpStringArrayEditor message handlers
|
|
|
|
void CDhcpStringArrayEditor::OnButnAdd()
|
|
{
|
|
UpdateData();
|
|
|
|
m_lb_str.InsertString( 0, m_edit_value );
|
|
m_edit_value.Empty();
|
|
m_lb_str.SetCurSel( 0 );
|
|
|
|
// Set the focus back to the edit_value
|
|
m_edit.SetFocus();
|
|
|
|
UpdateData( FALSE );
|
|
HandleActivation();
|
|
|
|
} // CDhcpStringArrayEditor::OnButnAdd()
|
|
|
|
void CDhcpStringArrayEditor::OnButnDelete()
|
|
{
|
|
int nSel = m_lb_str.GetCurSel();
|
|
|
|
m_lb_str.GetText( nSel, m_edit_value );
|
|
m_lb_str.DeleteString( nSel );
|
|
nSel--;
|
|
if ( nSel < 0 ) {
|
|
nSel = 0;
|
|
}
|
|
m_lb_str.SetCurSel( nSel );
|
|
m_lb_str.SetFocus();
|
|
|
|
UpdateData( FALSE );
|
|
HandleActivation();
|
|
} // CDhcpStringArrayEditor::OnButnDelete()
|
|
|
|
void CDhcpStringArrayEditor::OnButnDown()
|
|
{
|
|
int nSel = m_lb_str.GetCurSel();
|
|
CString str;
|
|
|
|
m_lb_str.GetText( nSel, str );
|
|
m_lb_str.DeleteString( nSel );
|
|
nSel++;
|
|
m_lb_str.InsertString( nSel, str );
|
|
m_lb_str.SetCurSel( nSel );
|
|
|
|
UpdateData( FALSE );
|
|
HandleActivation();
|
|
} // CDhcpStringArrayEditor::OnButnDown()
|
|
|
|
void CDhcpStringArrayEditor::OnButnUp()
|
|
{
|
|
int nSel = m_lb_str.GetCurSel();
|
|
CString str;
|
|
|
|
m_lb_str.GetText( nSel, str );
|
|
m_lb_str.DeleteString( nSel );
|
|
nSel--;
|
|
m_lb_str.InsertString( nSel, str );
|
|
m_lb_str.SetCurSel( nSel );
|
|
|
|
UpdateData( FALSE );
|
|
HandleActivation();
|
|
} // CDhcpStringArrayEditor::OnButnUp()
|
|
|
|
void CDhcpStringArrayEditor::OnChangeEditString()
|
|
{
|
|
UpdateData();
|
|
m_b_add.EnableWindow( !m_edit_value.IsEmpty());
|
|
|
|
} // CDhcpStringArrayEditor::OnChangeEditString()
|
|
|
|
void CDhcpStringArrayEditor::OnSelchangeListString()
|
|
{
|
|
HandleActivation();
|
|
} // CDhcpStringArrayEditor::OnSelchangeListString()
|
|
|
|
|
|
void CDhcpStringArrayEditor::OnCancel()
|
|
{
|
|
CBaseDialog::OnCancel();
|
|
}
|
|
|
|
void CDhcpStringArrayEditor::OnOK()
|
|
{
|
|
int cItems = ( int ) m_lb_str.GetCount();
|
|
DWORD err = 0;
|
|
CString str;
|
|
|
|
UpdateData();
|
|
|
|
CATCH_MEM_EXCEPTION {
|
|
CDhcpOptionValue *pdhcValue = &m_p_type->QueryValue();
|
|
|
|
pdhcValue->RemoveAll();
|
|
|
|
pdhcValue->SetUpperBound( cItems );
|
|
|
|
for ( int i = 0; i < cItems; i++ ) {
|
|
m_lb_str.GetText( i, str );
|
|
pdhcValue->SetString( str, i );
|
|
} // for
|
|
m_p_type->SetDirty();
|
|
}
|
|
END_MEM_EXCEPTION( err );
|
|
|
|
if ( err ) {
|
|
::DhcpMessageBox( err );
|
|
OnCancel();
|
|
}
|
|
else {
|
|
CBaseDialog::OnOK();
|
|
}
|
|
} // CDhcpStringArrayEditor::OnOK()
|
|
|
|
BOOL CDhcpStringArrayEditor::OnInitDialog()
|
|
{
|
|
CBaseDialog::OnInitDialog();
|
|
|
|
DWORD err = 0;
|
|
|
|
int cStrId = ( m_option_type == DhcpDefaultOptions)
|
|
? IDS_INFO_TITLE_DEFAULT_OPTIONS
|
|
: (( m_option_type == DhcpGlobalOptions )
|
|
? IDS_INFO_TITLE_GLOBAL_OPTIONS
|
|
: IDS_INFO_TITLE_SCOPE_OPTIONS );
|
|
|
|
CString str;
|
|
|
|
CATCH_MEM_EXCEPTION {
|
|
m_static_option_name.SetWindowText( m_p_type->QueryName());
|
|
str.LoadString( cStrId );
|
|
m_static_application.SetWindowText( str );
|
|
|
|
// fill the internal list form the current value
|
|
|
|
int cMax = m_p_type->QueryValue().QueryUpperBound();
|
|
for ( int i = 0; i < cMax; i++ ) {
|
|
str = m_p_type->QueryValue().QueryString( i );
|
|
if ( !str.IsEmpty()) {
|
|
m_lb_str.AddString( str );
|
|
}
|
|
} // for
|
|
|
|
// Select the top most value
|
|
if ( cMax > 0 ) {
|
|
m_lb_str.SetCurSel( 0 );
|
|
}
|
|
|
|
// Set proper button states.
|
|
HandleActivation();
|
|
}
|
|
END_MEM_EXCEPTION( err );
|
|
|
|
UpdateData( FALSE );
|
|
|
|
if ( err ) {
|
|
::DhcpMessageBox( err );
|
|
EndDialog( -1 );
|
|
}
|
|
|
|
m_edit_value.Empty();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
} // CDhcpStringArrayEditor::OnInitDialog()
|
|
|
|
void CDhcpStringArrayEditor::HandleActivation()
|
|
{
|
|
|
|
int cItems = m_lb_str.GetCount();
|
|
int cSel = m_lb_str.GetCurSel();
|
|
|
|
m_b_add.EnableWindow( !m_edit_value.IsEmpty());
|
|
|
|
if ( 0 == cItems ) {
|
|
m_b_delete.EnableWindow( FALSE );
|
|
m_b_down.EnableWindow( FALSE );
|
|
m_b_up.EnableWindow( FALSE );
|
|
return;
|
|
}
|
|
if ( LB_ERR != cSel ) {
|
|
m_b_delete.EnableWindow( TRUE );
|
|
m_b_down.EnableWindow( cItems > ( cSel + 1 ));
|
|
m_b_up.EnableWindow( cSel > 0 );
|
|
} // else
|
|
|
|
// check if the focus in on a disabled control
|
|
// If yes, put the focus back to list box
|
|
if ( !::IsWindowEnabled( ::GetFocus())) {
|
|
m_lb_str.SetFocus();
|
|
}
|
|
|
|
} // CDhcpStringArrayEditor::HandleActivation()
|