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
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;
|
|
}
|
|
|