Windows NT 4.0 source code leak
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.

268 lines
7.8 KiB

4 years ago
  1. /************************************************************************
  2. * *
  3. * EDITCONT.CPP *
  4. * *
  5. * Copyright (C) Microsoft Corporation 1995 *
  6. * All Rights reserved. *
  7. * *
  8. ************************************************************************/
  9. #include "stdafx.h"
  10. #include "resource.h"
  11. #pragma hdrstop
  12. #include "editcont.h"
  13. #include <ctype.h>
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. #pragma data_seg(".text", "CODE")
  19. const char txtColonInclude[] = ":include ";
  20. #pragma data_seg()
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CEditContent dialog
  23. CEditContent::CEditContent(
  24. CString* pcszCtx, CString* pcszText, CString* pcszHelpFile,
  25. CString* pcszWindow, BOOL fEditing,
  26. CWnd* pParent /*=NULL*/)
  27. : CDialog(CEditContent::IDD, pParent)
  28. {
  29. pcszSaveCtx = pcszCtx;
  30. pcszSaveText = pcszText;
  31. pcszSaveHelpFile = pcszHelpFile;
  32. pcszSaveWindow = pcszWindow;
  33. pcszSaveWindow = pcszWindow;
  34. fEdit = fEditing;
  35. //{{AFX_DATA_INIT(CEditContent)
  36. m_cszCtx = *pcszCtx;
  37. m_cszText = *pcszText;
  38. m_cszHelpFile = *pcszHelpFile;
  39. m_cszWindow = *pcszWindow;
  40. //}}AFX_DATA_INIT
  41. if (isdigit(*m_cszText)) {
  42. m_Level = atoi(m_cszText);
  43. m_cszText = FirstNonSpace(((PCSTR) m_cszText) + 1, _fDBCSSystem);
  44. }
  45. else
  46. m_Level = 1; // level undefined
  47. }
  48. void CEditContent::DoDataExchange(CDataExchange* pDX)
  49. {
  50. CDialog::DoDataExchange(pDX);
  51. //{{AFX_DATA_MAP(CEditContent)
  52. DDX_Text(pDX, IDC_EDIT_CTX, m_cszCtx);
  53. DDV_MaxChars(pDX, m_cszCtx, 256);
  54. DDX_Text(pDX, IDC_EDIT_TEXT, m_cszText);
  55. DDX_Text(pDX, IDC_EDIT_HELP_FILE, m_cszHelpFile);
  56. DDV_MaxChars(pDX, m_cszHelpFile, 260);
  57. DDX_Text(pDX, IDC_EDIT_WINDOW, m_cszWindow);
  58. DDV_MaxChars(pDX, m_cszWindow, 8);
  59. //}}AFX_DATA_MAP
  60. if (pDX->m_bSaveAndValidate) { // dialog is ending
  61. // Do some additional validatation here.
  62. if (isspace(*m_cszText))
  63. m_cszText = FirstNonSpace(m_cszText, _fDBCSSystem);
  64. if (m_fTopic)
  65. DDV_NonEmptyString(pDX, m_cszCtx, IDS_MISSING_CTX);
  66. DDV_NonEmptyString(pDX, m_cszText, m_fInclude ?
  67. IDS_MISSING_INCLUDE : IDS_MISSING_TEXT);
  68. // Save the "visible text" string.
  69. if (m_fInclude) { // include files
  70. // If user specified ":include" use the exact string;
  71. // otherwise, prefix the string with ":include ".
  72. if (nstrisubcmp(m_cszText, (LPCSTR)txtColonInclude)) {
  73. *pcszSaveText = m_cszText;
  74. }
  75. else {
  76. *pcszSaveText = txtColonInclude;
  77. *pcszSaveText += m_cszText;
  78. }
  79. }
  80. else { // books and topics
  81. if (*m_cszText != ':' && *m_cszText != ';') {
  82. char szBuf[5];
  83. _itoa(m_Level, szBuf, 10);
  84. strcat(szBuf, " ");
  85. *pcszSaveText = szBuf;
  86. *pcszSaveText += m_cszText;
  87. }
  88. else
  89. *pcszSaveText = m_cszText;
  90. }
  91. // Topics have ctx, help file, and window; books and includes don't.
  92. if (m_fTopic) {
  93. *pcszSaveCtx = FirstNonSpace(m_cszCtx, _fDBCSSystem);
  94. *pcszSaveHelpFile = FirstNonSpace(m_cszHelpFile, _fDBCSSystem);
  95. *pcszSaveWindow = FirstNonSpace(m_cszWindow, _fDBCSSystem);
  96. }
  97. else {
  98. *pcszSaveCtx = "";
  99. *pcszSaveHelpFile = "";
  100. *pcszSaveWindow = "";
  101. }
  102. }
  103. }
  104. BOOL CEditContent::OnInitDialog()
  105. {
  106. CDialog::OnInitDialog();
  107. if (fTranslator) {
  108. ((CStatic*) GetDlgItem(IDC_STATIC_CONTEXT))->EnableWindow(!fTranslator);
  109. ((CStatic*) GetDlgItem(IDC_STATIC_HELP_FILE))->EnableWindow(!fTranslator);
  110. ((CStatic*) GetDlgItem(IDC_STATIC_WINDOW))->EnableWindow(!fTranslator);
  111. ((CEdit*) GetDlgItem(IDC_EDIT_CTX))->EnableWindow(!fTranslator);
  112. ((CEdit*) GetDlgItem(IDC_EDIT_HELP_FILE))->EnableWindow(!fTranslator);
  113. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW))->EnableWindow(!fTranslator);
  114. }
  115. SetChicagoDialogStyles(m_hWnd);
  116. m_fTopic = (!fEdit || !m_cszCtx.IsEmpty());
  117. if (!m_cszText.IsEmpty() && nstrisubcmp(m_cszText, (LPCSTR)txtColonInclude))
  118. m_fInclude = TRUE;
  119. else
  120. m_fInclude = FALSE;
  121. CheckRadioButton(IDC_RADIO_BOOK, IDC_RADIO_INCLUDE,
  122. (m_fInclude ? IDC_RADIO_INCLUDE :
  123. (!m_fTopic ? IDC_RADIO_BOOK : IDC_RADIO_TOPIC)));
  124. // Enable/disable controls depending on what's chosen
  125. if (m_fInclude) {
  126. // Remove ":include"
  127. m_cszText = FirstNonSpace(((PCSTR) m_cszText) + strlen((LPCSTR)txtColonInclude),
  128. _fDBCSSystem);
  129. ((CEdit*) GetDlgItem(IDC_EDIT_TEXT))->
  130. SetWindowText(m_cszText);
  131. OnRadioInclude();
  132. }
  133. else if (!m_fTopic && !m_fInclude)
  134. OnRadioBook();
  135. if (fEdit) {
  136. ((CButton*) GetDlgItem(IDC_RADIO_BOOK))->EnableWindow(FALSE);
  137. ((CButton*) GetDlgItem(IDC_RADIO_TOPIC))->EnableWindow(FALSE);
  138. ((CButton*) GetDlgItem(IDC_RADIO_INCLUDE))->EnableWindow(FALSE);
  139. }
  140. return TRUE; // return TRUE unless you set the focus to a control
  141. }
  142. BEGIN_MESSAGE_MAP(CEditContent, CDialog)
  143. //{{AFX_MSG_MAP(CEditContent)
  144. ON_BN_CLICKED(IDC_RADIO_BOOK, OnRadioBook)
  145. ON_BN_CLICKED(IDC_RADIO_TOPIC, OnRadioTopic)
  146. ON_BN_CLICKED(IDC_RADIO_INCLUDE, OnRadioInclude)
  147. //}}AFX_MSG_MAP
  148. ON_MESSAGE(WM_CONTEXTMENU, OnContextMenu)
  149. ON_MESSAGE(WM_HELP, OnF1Help)
  150. END_MESSAGE_MAP()
  151. static const DWORD aHelpIds[] = {
  152. IDC_EDIT_TEXT, IDH_EDIT_TEXT,
  153. IDC_EDIT_CTX, IDH_EDIT_CTX,
  154. IDC_EDIT_HELP_FILE, IDH_EDIT_HELP_FILE,
  155. IDC_EDIT_WINDOW, IDH_EDIT_WINDOW,
  156. IDC_RADIO_BOOK, IDH_RADIO_BOOK,
  157. IDC_RADIO_TOPIC, IDH_RADIO_TOPIC,
  158. IDC_RADIO_INCLUDE, IDH_RADIO_INCLUDE,
  159. 0, 0
  160. };
  161. LRESULT CEditContent::OnContextMenu(WPARAM wParam, LPARAM lParam)
  162. {
  163. ::WinHelp((HWND) wParam,
  164. AfxGetApp()->m_pszHelpFilePath,
  165. HELP_CONTEXTMENU, (DWORD) (LPVOID) aHelpIds);
  166. return 0;
  167. }
  168. LRESULT CEditContent::OnF1Help(WPARAM wParam, LPARAM lParam)
  169. {
  170. ::WinHelp((HWND) ((LPHELPINFO) lParam)->hItemHandle,
  171. AfxGetApp()->m_pszHelpFilePath,
  172. HELP_WM_HELP, (DWORD) (LPVOID) aHelpIds);
  173. return 0;
  174. }
  175. void CEditContent::OnRadioBook()
  176. {
  177. if (!m_cszStaticText.IsEmpty()) {
  178. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->
  179. SetWindowText(m_cszStaticText);
  180. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->EnableWindow(TRUE);
  181. }
  182. ((CStatic*) GetDlgItem(IDC_STATIC_CONTEXT))->EnableWindow(FALSE);
  183. ((CStatic*) GetDlgItem(IDC_STATIC_HELP_FILE))->EnableWindow(FALSE);
  184. ((CStatic*) GetDlgItem(IDC_STATIC_WINDOW))->EnableWindow(FALSE);
  185. ((CEdit*) GetDlgItem(IDC_EDIT_CTX))->EnableWindow(FALSE);
  186. ((CEdit*) GetDlgItem(IDC_EDIT_HELP_FILE))->EnableWindow(FALSE);
  187. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW))->EnableWindow(FALSE);
  188. m_fInclude = FALSE;
  189. m_fTopic = FALSE;
  190. }
  191. void CEditContent::OnRadioTopic()
  192. {
  193. if (!m_cszStaticText.IsEmpty()) {
  194. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->
  195. SetWindowText(m_cszStaticText);
  196. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->EnableWindow(TRUE);
  197. }
  198. ((CStatic*) GetDlgItem(IDC_STATIC_CONTEXT))->EnableWindow(!fTranslator);
  199. ((CStatic*) GetDlgItem(IDC_STATIC_HELP_FILE))->EnableWindow(!fTranslator);
  200. ((CStatic*) GetDlgItem(IDC_STATIC_WINDOW))->EnableWindow(!fTranslator);
  201. ((CEdit*) GetDlgItem(IDC_EDIT_CTX))->EnableWindow(!fTranslator);
  202. ((CEdit*) GetDlgItem(IDC_EDIT_HELP_FILE))->EnableWindow(!fTranslator);
  203. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW))->EnableWindow(!fTranslator);
  204. m_fInclude = FALSE;
  205. m_fTopic = TRUE;
  206. }
  207. void CEditContent::OnRadioInclude()
  208. {
  209. /*
  210. * Since we're going to change the text for this static control, we
  211. * save off the current text which will be restored if the user clicks
  212. * the topic or book buttons.
  213. */
  214. if (m_cszStaticText.IsEmpty())
  215. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->
  216. GetWindowText(m_cszStaticText);
  217. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->
  218. SetWindowText(GetStringResource(IDS_INCLUDE_FILE));
  219. ((CStatic*) GetDlgItem(IDC_STATIC_VISIBLE))->EnableWindow(!fTranslator);
  220. ((CStatic*) GetDlgItem(IDC_STATIC_CONTEXT))->EnableWindow(FALSE);
  221. ((CStatic*) GetDlgItem(IDC_STATIC_HELP_FILE))->EnableWindow(FALSE);
  222. ((CStatic*) GetDlgItem(IDC_STATIC_WINDOW))->EnableWindow(FALSE);
  223. ((CEdit*) GetDlgItem(IDC_EDIT_CTX))->EnableWindow(FALSE);
  224. ((CEdit*) GetDlgItem(IDC_EDIT_HELP_FILE))->EnableWindow(FALSE);
  225. ((CEdit*) GetDlgItem(IDC_EDIT_WINDOW))->EnableWindow(FALSE);
  226. m_fInclude = TRUE;
  227. m_fTopic = FALSE;
  228. }