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.

257 lines
7.1 KiB

  1. // ADFDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "msqscan.h"
  5. #include "ADFDlg.h"
  6. #include "uitables.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. extern WIA_DOCUMENT_HANDLING_TABLE_ENTRY g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[];
  13. extern WIA_DOCUMENT_HANDLING_TABLE_ENTRY g_WIA_DOCUMENT_HANDLING_CAPABILITES_TABLE[];
  14. extern WIA_DOCUMENT_HANDLING_TABLE_ENTRY g_WIA_DOCUMENT_HANDLING_SELECT_TABLE[];
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CADFDlg dialog
  17. CADFDlg::CADFDlg(ADF_SETTINGS *pADFSettings, CWnd* pParent /*=NULL*/)
  18. : CDialog(CADFDlg::IDD, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CADFDlg)
  21. m_ADFStatusText = _T("No document feeder is attached..");
  22. m_NumberOfPages = 1;
  23. m_pADFSettings = pADFSettings;
  24. m_MaxPagesAllowed = m_pADFSettings->lDocumentHandlingCapacity;
  25. m_DocumentHandlingSelectBackup = m_pADFSettings->lDocumentHandlingSelect;
  26. //}}AFX_DATA_INIT
  27. if(m_MaxPagesAllowed <= 0){
  28. m_MaxPagesAllowed = 50; // set to a large max value
  29. }
  30. }
  31. void CADFDlg::DoDataExchange(CDataExchange* pDX)
  32. {
  33. CDialog::DoDataExchange(pDX);
  34. //{{AFX_DATA_MAP(CADFDlg)
  35. DDX_Control(pDX, IDC_ADF_MODE_COMBOBOX, m_ADFModeComboBox);
  36. DDX_Control(pDX, IDC_NUMBER_OF_PAGES_EDITBOX, m_ScanNumberOfPagesEditBox);
  37. DDX_Text(pDX, IDC_FEEDER_STATUS_TEXT, m_ADFStatusText);
  38. DDX_Text(pDX, IDC_NUMBER_OF_PAGES_EDITBOX, m_NumberOfPages);
  39. DDV_MinMaxUInt(pDX, m_NumberOfPages, 0, m_MaxPagesAllowed);
  40. DDX_Control(pDX, IDC_SCAN_ALL_PAGES_RADIOBUTTON, m_ScanAllPages);
  41. DDX_Control(pDX, IDC_SCAN_SPECIFIED_PAGES_RADIOBUTTON, m_ScanNumberOfPages);
  42. //}}AFX_DATA_MAP
  43. }
  44. BEGIN_MESSAGE_MAP(CADFDlg, CDialog)
  45. //{{AFX_MSG_MAP(CADFDlg)
  46. ON_EN_KILLFOCUS(IDC_NUMBER_OF_PAGES_EDITBOX, OnKillfocusNumberOfPagesEditbox)
  47. ON_BN_CLICKED(IDC_SCAN_ALL_PAGES_RADIOBUTTON, OnScanAllPagesRadiobutton)
  48. ON_BN_CLICKED(IDC_SCAN_SPECIFIED_PAGES_RADIOBUTTON, OnScanSpecifiedPagesRadiobutton)
  49. ON_CBN_SELCHANGE(IDC_ADF_MODE_COMBOBOX, OnSelchangeAdfModeCombobox)
  50. //}}AFX_MSG_MAP
  51. END_MESSAGE_MAP()
  52. /////////////////////////////////////////////////////////////////////////////
  53. // CADFDlg message handlers
  54. void CADFDlg::OnKillfocusNumberOfPagesEditbox()
  55. {
  56. //
  57. // write number of pages to member variable/forcing validation
  58. //
  59. UpdateData(TRUE);
  60. m_pADFSettings->lPages = m_NumberOfPages;
  61. }
  62. BOOL CADFDlg::OnInitDialog()
  63. {
  64. CDialog::OnInitDialog();
  65. //
  66. // default to scanning only a single page
  67. //
  68. m_ScanNumberOfPages.SetCheck(1);
  69. OnScanSpecifiedPagesRadiobutton();
  70. //
  71. // Initialize Scanner status text
  72. //
  73. InitStatusText();
  74. //
  75. // Initialize Feeder Mode combo box, and handle
  76. // special case, for FLATBED selection
  77. //
  78. InitFeederModeComboBox();
  79. OnSelchangeAdfModeCombobox();
  80. return TRUE; // return TRUE unless you set the focus to a control
  81. // EXCEPTION: OCX Property Pages should return FALSE
  82. }
  83. void CADFDlg::OnScanAllPagesRadiobutton()
  84. {
  85. //
  86. // disable pages edit box
  87. //
  88. m_NumberOfPages = 0;
  89. UpdateData(FALSE);
  90. m_ScanNumberOfPagesEditBox.EnableWindow(FALSE);
  91. }
  92. void CADFDlg::OnScanSpecifiedPagesRadiobutton()
  93. {
  94. //
  95. // enable pages edit box
  96. //
  97. m_ScanNumberOfPagesEditBox.EnableWindow(TRUE);
  98. }
  99. VOID CADFDlg::InitStatusText()
  100. {
  101. for(ULONG index = 0;index < NUM_WIA_DOC_HANDLING_STATUS_ENTRIES;index++) {
  102. if((m_pADFSettings->lDocumentHandlingStatus &
  103. g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[index].lFlagValue) ==
  104. g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[index].lFlagValue) {
  105. //
  106. // we found a match, so add it to the text
  107. //
  108. m_ADFStatusText = g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[index].szFlagName;
  109. UpdateData(FALSE);
  110. }
  111. }
  112. }
  113. VOID CADFDlg::InitFeederModeComboBox()
  114. {
  115. //
  116. // check all three possible modes, FEEDER, FLATBED, and DUPLEX
  117. //
  118. ULONG NumModes = 3;
  119. for(ULONG index = 0;index < NumModes;index++) {
  120. if((m_pADFSettings->lDocumentHandlingCapabilites &
  121. g_WIA_DOCUMENT_HANDLING_CAPABILITES_TABLE[index].lFlagValue) ==
  122. g_WIA_DOCUMENT_HANDLING_CAPABILITES_TABLE[index].lFlagValue) {
  123. //
  124. // we found a match, so add it to the combobox along with the flag value
  125. //
  126. INT InsertIndex = m_ADFModeComboBox.AddString(g_WIA_DOCUMENT_HANDLING_SELECT_TABLE[index].szFlagName);
  127. m_ADFModeComboBox.SetItemData(InsertIndex, g_WIA_DOCUMENT_HANDLING_SELECT_TABLE[index].lFlagValue);
  128. //
  129. // set the combobox to the current setting value using the Document Handling Select
  130. //
  131. if((m_pADFSettings->lDocumentHandlingSelect &
  132. g_WIA_DOCUMENT_HANDLING_SELECT_TABLE[index].lFlagValue) ==
  133. g_WIA_DOCUMENT_HANDLING_SELECT_TABLE[index].lFlagValue) {
  134. m_ADFModeComboBox.SetCurSel(InsertIndex);
  135. }
  136. }
  137. }
  138. }
  139. INT CADFDlg::GetIDAndStringFromDocHandlingStatus(LONG lDocHandlingStatus, TCHAR *pszString)
  140. {
  141. INT index = 0;
  142. while(g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[index].lFlagValue != lDocHandlingStatus && index < NUM_WIA_DOC_HANDLING_STATUS_ENTRIES) {
  143. index++;
  144. }
  145. if(index > NUM_WIA_DOC_HANDLING_STATUS_ENTRIES)
  146. index = NUM_WIA_DOC_HANDLING_STATUS_ENTRIES;
  147. lstrcpy(pszString, g_WIA_DOCUMENT_HANDLING_STATUS_TABLE[index].szFlagName);
  148. return index;
  149. }
  150. void CADFDlg::OnSelchangeAdfModeCombobox()
  151. {
  152. INT Index = m_ADFModeComboBox.GetCurSel();
  153. LONG lFlagValue = 0;
  154. lFlagValue = (LONG)m_ADFModeComboBox.GetItemData(Index);
  155. //
  156. // check for FLATBED setting, and adjust UI
  157. //
  158. if((lFlagValue & FLATBED) == FLATBED) {
  159. m_ScanAllPages.EnableWindow(FALSE);
  160. m_ScanNumberOfPages.EnableWindow(FALSE);
  161. if(m_ScanNumberOfPages.GetCheck() == 1) {
  162. m_ScanNumberOfPagesEditBox.EnableWindow(FALSE);
  163. }
  164. } else {
  165. m_ScanAllPages.EnableWindow(TRUE);
  166. m_ScanNumberOfPages.EnableWindow(TRUE);
  167. if(m_ScanNumberOfPages.GetCheck() == 1) {
  168. m_ScanNumberOfPagesEditBox.EnableWindow(TRUE);
  169. }
  170. }
  171. }
  172. void CADFDlg::OnOK()
  173. {
  174. //
  175. // get current Mode setting
  176. //
  177. LONG lModeflag = 0;
  178. INT Index = m_ADFModeComboBox.GetCurSel();
  179. lModeflag = (LONG)m_ADFModeComboBox.GetItemData(Index);
  180. //
  181. // clear old settings
  182. //
  183. m_pADFSettings->lDocumentHandlingSelect = 0;
  184. //
  185. // set new settings
  186. //
  187. m_pADFSettings->lDocumentHandlingSelect = lModeflag;
  188. //
  189. // set page count
  190. //
  191. m_pADFSettings->lPages = m_NumberOfPages;
  192. CDialog::OnOK();
  193. }
  194. void CADFDlg::OnCancel()
  195. {
  196. m_pADFSettings->lDocumentHandlingSelect = m_DocumentHandlingSelectBackup;
  197. m_pADFSettings->lPages = 1;
  198. CDialog::OnCancel();
  199. }