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.
 
 
 
 
 
 

288 lines
6.4 KiB

// formatta.cpp : implementation file
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1995 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.
#include "stdafx.h"
#include "wordpad.h"
#include "formatta.h"
#include "ddxm.h"
#include "helpids.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
const DWORD CFormatTabDlg::m_nHelpIDs[] =
{
IDC_BUTTON_SET, IDH_WORDPAD_TABSET,
IDC_BUTTON_CLEAR, IDH_WORDPAD_TABCLEAR,
IDC_BUTTON_CLEARALL, IDH_WORDPAD_TAB_CLEARALL,
IDC_COMBO1, IDH_WORDPAD_TABSTOPS,
IDC_BOX, (DWORD) -1,
0, 0
};
/////////////////////////////////////////////////////////////////////////////
// CFormatTabDlg dialog
CFormatTabDlg::CFormatTabDlg(PARAFORMAT& pf, CWnd* pParent /*=NULL*/)
: CCSDialog(CFormatTabDlg::IDD, pParent)
{
m_pf = pf;
m_tabarray = new LONG[MAX_TAB_STOPS];
m_nCount = 0;
if (m_pf.dwMask & PFM_TABSTOPS)
{
m_nCount = m_pf.cTabCount;
ASSERT(m_pf.cTabCount <= MAX_TAB_STOPS);
for (int i=0;i<m_pf.cTabCount;i++)
m_tabarray[i] = m_pf.rgxTabs[i];
}
//{{AFX_DATA_INIT(CFormatTabDlg)
//}}AFX_DATA_INIT
}
CFormatTabDlg::~CFormatTabDlg()
{
delete [] m_tabarray;
}
void CFormatTabDlg::DoDataExchange(CDataExchange* pDX)
{
CCSDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CFormatTabDlg)
DDX_Control(pDX, IDC_BUTTON_CLEARALL, m_buttonClearAll);
DDX_Control(pDX, IDC_BUTTON_SET, m_buttonSet);
DDX_Control(pDX, IDC_BUTTON_CLEAR, m_buttonClear);
DDX_Control(pDX, IDC_COMBO1, m_comboBox);
//}}AFX_DATA_MAP
if (!pDX->m_bSaveAndValidate)
UpdateListBox();
}
BEGIN_MESSAGE_MAP(CFormatTabDlg, CCSDialog)
//{{AFX_MSG_MAP(CFormatTabDlg)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClickedClear)
ON_BN_CLICKED(IDC_BUTTON_CLEARALL, OnClickedClearAll)
ON_BN_CLICKED(IDC_BUTTON_SET, OnClickedSet)
ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditChange)
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchange)
ON_MESSAGE(WM_HELP, OnHelp)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFormatTabDlg message handlers
void CFormatTabDlg::OnClickedClear()
{
int nTab;
int nSel = m_comboBox.GetCurSel();
if (nSel == CB_ERR)
{
CDataExchange dx(this, TRUE);
DDX_Twips(&dx, IDC_COMBO1, nTab);
DDV_MinMaxTwips(&dx, nTab, 0, 31680);
if (nTab != DDXM_BLANK)
{
if (RemoveTabFromArray(nTab))
UpdateListBox();
}
}
else
{
ASSERT(nSel < m_nCount);
RemoveTabFromArrayByIndex(nSel);
UpdateListBox();
}
UpdateButtons();
SetEditFocus();
}
void CFormatTabDlg::OnClickedClearAll()
{
m_nCount = 0;
m_comboBox.ResetContent();
UpdateButtons();
SetEditFocus();
}
void CFormatTabDlg::OnClickedSet()
{
Set();
UpdateButtons();
SetEditFocus();
}
BOOL CFormatTabDlg::Set()
{
int nTab = 0;
CDataExchange dx(this, TRUE);
DDX_Twips(&dx, IDC_COMBO1, nTab);
DDV_MinMaxTwips(&dx, nTab, 0, 31680);
if (nTab != DDXM_BLANK)
{
if (m_nCount == MAX_TAB_STOPS)
{
AfxMessageBox(IDS_NOMORETABS);
m_comboBox.Clear();
return FALSE;
}
if (AddTabToArray(nTab))
UpdateListBox();
return TRUE;
}
return FALSE;
}
void CFormatTabDlg::SetEditFocus()
{
m_comboBox.SetFocus();
m_comboBox.SetEditSel(0,-1);
}
BOOL CFormatTabDlg::RemoveTabFromArray(LONG lTab)
{
int i;
for (i=0;i<m_nCount;i++)
{
if (m_tabarray[i] == lTab)
{
RemoveTabFromArrayByIndex(i);
return TRUE;
}
}
return FALSE;
}
void CFormatTabDlg::RemoveTabFromArrayByIndex(int nIndex)
{
memmove(&m_tabarray[nIndex], &m_tabarray[nIndex+1],
(m_nCount-nIndex-1)*sizeof(LONG));
m_nCount--;
}
BOOL CFormatTabDlg::AddTabToArray(LONG lTab)
{
int i;
BOOL bInsert = FALSE;
LONG lTemp;
for (i=0;i<m_nCount;i++)
{
if (!bInsert && lTab < m_tabarray[i])
bInsert = TRUE;
else if (lTab == m_tabarray[i]) // we don't want repeats
return FALSE;
if (bInsert)
{
lTemp = m_tabarray[i];
m_tabarray[i] = lTab;
lTab = lTemp;
}
}
m_tabarray[m_nCount++] = lTab;
return TRUE;
}
void CFormatTabDlg::UpdateListBox()
{
int i;
TCHAR szT[64];
ASSERT(m_nCount >= 0);
m_comboBox.ResetContent();
for (i=0;i<m_nCount;i++)
{
theApp.PrintTwips(szT, ARRAYSIZE(szT), m_tabarray[i], 2);
m_comboBox.AddString(szT);
}
}
void CFormatTabDlg::OnOK()
{
if (m_buttonSet.IsWindowEnabled())
{
if (!Set())
return;
}
CCSDialog::OnOK();
m_pf.cTabCount = (SHORT) m_nCount;
for (int i=0;i<m_nCount;i++)
m_pf.rgxTabs[i] = m_tabarray[i];
m_pf.dwMask = PFM_TABSTOPS;
}
void CFormatTabDlg::OnEditChange()
{
UpdateButtons();
}
void CFormatTabDlg::UpdateButton(CButton& button, BOOL b)
{
if (b != button.IsWindowEnabled())
button.EnableWindow(b);
}
void CFormatTabDlg::UpdateButtons()
{
UpdateButton(m_buttonClearAll, m_nCount > 0);
BOOL bHasText = (m_comboBox.GetWindowTextLength() > 0);
UpdateButton(m_buttonSet, bHasText);
UpdateButton(m_buttonClear, bHasText);
WORD wID = LOWORD(GetDefID());
if (bHasText && wID != IDC_BUTTON_SET)
SetDefID(IDC_BUTTON_SET);
else if (!bHasText && wID != IDOK)
SetDefID(IDOK);
}
BOOL CFormatTabDlg::OnInitDialog()
{
CCSDialog::OnInitDialog();
UpdateButtons();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CFormatTabDlg::OnSelchange()
{
UpdateButton(m_buttonClearAll, m_nCount > 0);
// force these since if the edit control is empty and
// an item in the box is clicked on, the edit control will
// not be filled in first
UpdateButton(m_buttonSet, TRUE);
UpdateButton(m_buttonClear, TRUE);
WORD wID = LOWORD(GetDefID());
if (wID != IDC_BUTTON_SET)
SetDefID(IDC_BUTTON_SET);
}
LONG CFormatTabDlg::OnHelp(WPARAM, LPARAM lParam)
{
LPHELPINFO phi = (LPHELPINFO) lParam ;
HWND hWndCombo = ::GetDlgItem(m_hWnd, IDC_COMBO1) ;
HWND hWndItem = (HWND) phi->hItemHandle ;
if (::GetParent(hWndItem) == hWndCombo)
{
hWndItem = hWndCombo ;
}
::WinHelp(hWndItem, AfxGetApp()->m_pszHelpFilePath,
HELP_WM_HELP, (DWORD_PTR)GetHelpIDs());
return 0;
}