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.

458 lines
7.9 KiB

  1. /*++
  2. Copyright (C) Microsoft Corporation, 1995 - 1999
  3. All rights reserved.
  4. Module Name:
  5. queue.hxx
  6. Abstract:
  7. Manages the print queue.
  8. Author:
  9. Albert Ting (AlbertT) 15-Jun-1995
  10. Revision History:
  11. --*/
  12. #ifndef _QUEUE_HXX
  13. #define _QUEUE_HXX
  14. typedef struct STATUS_MAP {
  15. DWORD dwMask;
  16. UINT uIDS;
  17. } *PSTATUS_MAP;
  18. typedef struct ERROR_MAP {
  19. DWORD dwError;
  20. UINT uIDS;
  21. } *PERROR_MAP;
  22. /********************************************************************
  23. TQueue
  24. ********************************************************************/
  25. class TQueue: public MGenericWin,
  26. public MPrinterClient
  27. {
  28. SIGNATURE( 'prqu' )
  29. SAFE_NEW
  30. public:
  31. enum _CONSTANTS {
  32. kIcolMax = 0x20, // Maximum number of columns.
  33. kColStrMax = 258,
  34. //
  35. // Panes identifiers for status bar.
  36. //
  37. kStatusPaneJobs = 1,
  38. kStatusPaneError = 2,
  39. //
  40. // Base
  41. //
  42. kMenuHelpMax = 4
  43. };
  44. enum {
  45. //
  46. // Copy data signature, used for duplicate
  47. // queue view window detection.
  48. //
  49. kQueueSignature = 0xDEADFEED
  50. };
  51. struct POSINFO {
  52. UINT uColMax;
  53. FIELD aField[kIcolMax+1];
  54. INT anWidth[kIcolMax+1];
  55. WINDOWPLACEMENT wp;
  56. BOOL bStatusBar;
  57. BOOL bToolbar;
  58. INT anColOrder[kIcolMax+1];
  59. };
  60. DLINK( TQueue, Queue );
  61. TQueue(
  62. IN TPrintLib *pPrintLib,
  63. IN LPCTSTR pszPrinter,
  64. IN HANDLE hEventClose
  65. );
  66. ~TQueue(
  67. VOID
  68. );
  69. BOOL
  70. bInitialize(
  71. IN HWND hwndOwner,
  72. IN INT nCmdShow
  73. );
  74. BOOL
  75. bValid(
  76. VOID
  77. ) const
  78. {
  79. return _pPrinter != NULL;
  80. }
  81. VOID
  82. vWindowClosing(
  83. VOID
  84. );
  85. LPTSTR
  86. pszPrinterName(
  87. size_t cchBuffer,
  88. LPTSTR pszPrinterBuffer
  89. ) const
  90. {
  91. return _pPrinter->pszPrinterName( cchBuffer, pszPrinterBuffer );
  92. }
  93. static
  94. BOOL
  95. bIsDuplicateWindow(
  96. IN HWND hwndOwner,
  97. IN LPCTSTR pszPrinterName,
  98. IN HWND *phwnd
  99. );
  100. static
  101. VOID
  102. TQueue::
  103. vRemove(
  104. IN LPCTSTR pszPrinterName
  105. );
  106. private:
  107. BOOL _bStatusBar : 1;
  108. BOOL _bToolbar : 1;
  109. BOOL _bMinimized : 1;
  110. BOOL _bWindowClosing : 1;
  111. TString _strUrl;
  112. HANDLE _hEventClose;
  113. HWND _hwndLV;
  114. HWND _hwndSB;
  115. HWND _hwndTB;
  116. UINT _uColMax;
  117. BOOL _bDefaultPrinter;
  118. CAutoHandleIcon _shIconLarge;
  119. CAutoHandleIcon _shIconSmall;
  120. UINT _idsConnectStatus;
  121. DWORD _dwErrorStatus;
  122. DWORD _dwAttributes;
  123. DWORD _dwStatusPrinter;
  124. COUNT _cItems;
  125. TRefLock<TPrintLib> _pPrintLib;
  126. IPrintQueueDT *_pDropTarget;
  127. struct SAVE_SELECTION {
  128. IDENT _idFocused;
  129. TSelection* _pSelection;
  130. } SaveSelection;
  131. TQueue(
  132. const TQueue &
  133. );
  134. TQueue &
  135. operator =(
  136. const TQueue &
  137. );
  138. PFIELD
  139. pGetColFields(
  140. VOID
  141. ) const
  142. {
  143. return (PFIELD)gPQPos.aField;
  144. }
  145. /********************************************************************
  146. MPrinterClient / MDataClient virtual definitions.
  147. ********************************************************************/
  148. VOID
  149. vContainerChanged(
  150. CONTAINER_CHANGE ContainerChange,
  151. INFO Info
  152. );
  153. VOID
  154. vItemChanged(
  155. ITEM_CHANGE ItemChange,
  156. HITEM hItem,
  157. INFO Info,
  158. INFO InfoNew
  159. );
  160. VOID
  161. vSaveSelections(
  162. VOID
  163. );
  164. VOID
  165. vRestoreSelections(
  166. VOID
  167. );
  168. VDataNotify*
  169. pNewNotify(
  170. MDataClient* pDataClient
  171. ) const;
  172. VDataRefresh*
  173. pNewRefresh(
  174. MDataClient* pDataClient
  175. ) const;
  176. COUNT
  177. cSelected(
  178. VOID
  179. ) const;
  180. HITEM
  181. GetFirstSelItem(
  182. VOID
  183. ) const;
  184. HITEM
  185. GetNextSelItem(
  186. HITEM hItem
  187. ) const;
  188. IDENT
  189. GetId(
  190. HITEM hItem
  191. ) const;
  192. BOOL
  193. bGetPrintLib(
  194. TRefLock<TPrintLib> &refLock
  195. ) const;
  196. VOID
  197. vRefZeroed(
  198. VOID
  199. );
  200. /********************************************************************
  201. Internal functions for implementation.
  202. ********************************************************************/
  203. VOID
  204. vContainerChangedHandler(
  205. CONTAINER_CHANGE ContainerChange,
  206. INFO Info
  207. );
  208. VOID
  209. vItemPositionChanged(
  210. HITEM hItem,
  211. NATURAL_INDEX NaturalIndex,
  212. NATURAL_INDEX NaturalIndexNew
  213. );
  214. BOOL
  215. bDeletingAndNoJobs(
  216. VOID
  217. );
  218. VOID
  219. vClearItems(
  220. VOID
  221. );
  222. VOID
  223. vReloadItems(
  224. COUNT cItems
  225. );
  226. VOID
  227. vBlockProcess(
  228. VOID
  229. );
  230. VOID
  231. vSaveColumns(
  232. VOID
  233. );
  234. VOID
  235. vAddColumns(
  236. const POSINFO* pPosInfo
  237. );
  238. VOID
  239. vInitPrinterMenu(
  240. HMENU hMenu
  241. );
  242. VOID
  243. vInitDocMenu(
  244. BOOL bAllowModify,
  245. HMENU hMenu
  246. );
  247. VOID
  248. vInitViewMenu(
  249. HMENU hMenu
  250. );
  251. LPARAM
  252. nHandleMessage(
  253. UINT uMsg,
  254. WPARAM wParam,
  255. LPARAM lParam
  256. );
  257. LRESULT
  258. lrOnLVNotify(
  259. LPARAM lParam
  260. );
  261. LRESULT
  262. lrOnLVGetDispInfo(
  263. const LV_DISPINFO* plvdi
  264. );
  265. LRESULT
  266. lrOnLVBeginDrag(
  267. const NM_LISTVIEW *plv
  268. );
  269. LRESULT
  270. lrOnLVRClick(
  271. NMHDR* pnmhdr
  272. );
  273. LRESULT
  274. lrProcessCommand(
  275. UINT uCommand
  276. );
  277. VOID
  278. vProcessItemCommand(
  279. UINT uCommand
  280. );
  281. LRESULT
  282. lrOnLVDoubleClick(
  283. VOID
  284. );
  285. BOOL
  286. bOnCopyData(
  287. IN WPARAM wParam,
  288. IN LPARAM lParam
  289. );
  290. VOID
  291. vUpdateTitle(
  292. VOID
  293. );
  294. VOID
  295. vCheckDefaultPrinterChanged(
  296. VOID
  297. );
  298. /********************************************************************
  299. Status bar helper routines.
  300. ********************************************************************/
  301. LPTSTR
  302. pszStatusString(
  303. LPTSTR pszDest,
  304. UINT& cchMark,
  305. DWORD dwStatus,
  306. BOOL bInitialSep,
  307. BOOL bFirstOnly,
  308. const STATUS_MAP pStatusMaps[]
  309. );
  310. /********************************************************************
  311. List Item VIEW_INDEX adding/deleting
  312. ********************************************************************/
  313. BOOL
  314. bInsertItem(
  315. HITEM hItem,
  316. LIST_INDEX ListIndex
  317. );
  318. BOOL
  319. bDeleteItem(
  320. LIST_INDEX ListIndex
  321. )
  322. {
  323. return ListView_DeleteItem( _hwndLV, (INT)ListIndex );
  324. }
  325. /********************************************************************
  326. Saving and restoring state.
  327. ********************************************************************/
  328. BOOL
  329. bGetSelected(
  330. TSelection** ppSelection, ORPHAN
  331. PIDENT pidFocused OPTIONAL
  332. );
  333. VOID
  334. vFreeSelectedBuffer(
  335. PIDENT pidSelected
  336. );
  337. /********************************************************************
  338. Statics
  339. ********************************************************************/
  340. static const POSINFO gPQPos;
  341. static UINT gauMenuHelp[kMenuHelpMax];
  342. static
  343. CCSLock&
  344. csPrinter(
  345. VOID
  346. )
  347. {
  348. return *gpCritSec;
  349. }
  350. };
  351. #endif // ndef _QUEUE_HXX