/*++ Copyright (C) Microsoft Corporation, 1995 - 1999 All rights reserved. Module Name: queue.hxx Abstract: Manages the print queue. Author: Albert Ting (AlbertT) 15-Jun-1995 Revision History: --*/ #ifndef _QUEUE_HXX #define _QUEUE_HXX typedef struct STATUS_MAP { DWORD dwMask; UINT uIDS; } *PSTATUS_MAP; typedef struct ERROR_MAP { DWORD dwError; UINT uIDS; } *PERROR_MAP; /******************************************************************** TQueue ********************************************************************/ class TQueue: public MGenericWin, public MPrinterClient { SIGNATURE( 'prqu' ) SAFE_NEW public: enum _CONSTANTS { kIcolMax = 0x20, // Maximum number of columns. kColStrMax = 258, // // Panes identifiers for status bar. // kStatusPaneJobs = 1, kStatusPaneError = 2, // // Base // kMenuHelpMax = 4 }; enum { // // Copy data signature, used for duplicate // queue view window detection. // kQueueSignature = 0xDEADFEED }; struct POSINFO { UINT uColMax; FIELD aField[kIcolMax+1]; INT anWidth[kIcolMax+1]; WINDOWPLACEMENT wp; BOOL bStatusBar; BOOL bToolbar; INT anColOrder[kIcolMax+1]; }; DLINK( TQueue, Queue ); TQueue( IN TPrintLib *pPrintLib, IN LPCTSTR pszPrinter, IN HANDLE hEventClose ); ~TQueue( VOID ); BOOL bInitialize( IN HWND hwndOwner, IN INT nCmdShow ); BOOL bValid( VOID ) const { return _pPrinter != NULL; } VOID vWindowClosing( VOID ); LPTSTR pszPrinterName( LPTSTR pszPrinterBuffer ) const { return _pPrinter->pszPrinterName( pszPrinterBuffer ); } static BOOL bIsDuplicateWindow( IN HWND hwndOwner, IN LPCTSTR pszPrinterName, IN HWND *phwnd ); static VOID TQueue:: vRemove( IN LPCTSTR pszPrinterName ); private: BOOL _bStatusBar : 1; BOOL _bToolbar : 1; BOOL _bMinimized : 1; BOOL _bWindowClosing : 1; TString _strUrl; HANDLE _hEventClose; HWND _hwndLV; HWND _hwndSB; HWND _hwndTB; UINT _uColMax; BOOL _bDefaultPrinter; CAutoHandleIcon _shIconLarge; CAutoHandleIcon _shIconSmall; UINT _idsConnectStatus; DWORD _dwErrorStatus; DWORD _dwAttributes; DWORD _dwStatusPrinter; COUNT _cItems; TRefLock _pPrintLib; IPrintQueueDT *_pDropTarget; struct SAVE_SELECTION { IDENT _idFocused; TSelection* _pSelection; } SaveSelection; TQueue( const TQueue & ); TQueue & operator =( const TQueue & ); PFIELD pGetColFields( VOID ) const { return (PFIELD)gPQPos.aField; } /******************************************************************** MPrinterClient / MDataClient virtual definitions. ********************************************************************/ VOID vContainerChanged( CONTAINER_CHANGE ContainerChange, INFO Info ); VOID vItemChanged( ITEM_CHANGE ItemChange, HITEM hItem, INFO Info, INFO InfoNew ); VOID vSaveSelections( VOID ); VOID vRestoreSelections( VOID ); VDataNotify* pNewNotify( MDataClient* pDataClient ) const; VDataRefresh* pNewRefresh( MDataClient* pDataClient ) const; COUNT cSelected( VOID ) const; HITEM GetFirstSelItem( VOID ) const; HITEM GetNextSelItem( HITEM hItem ) const; IDENT GetId( HITEM hItem ) const; BOOL bGetPrintLib( TRefLock &refLock ) const; VOID vRefZeroed( VOID ); /******************************************************************** Internal functions for implementation. ********************************************************************/ VOID vContainerChangedHandler( CONTAINER_CHANGE ContainerChange, INFO Info ); VOID vItemPositionChanged( HITEM hItem, NATURAL_INDEX NaturalIndex, NATURAL_INDEX NaturalIndexNew ); BOOL bDeletingAndNoJobs( VOID ); VOID vClearItems( VOID ); VOID vReloadItems( COUNT cItems ); VOID vBlockProcess( VOID ); VOID vSaveColumns( VOID ); VOID vAddColumns( const POSINFO* pPosInfo ); VOID vInitPrinterMenu( HMENU hMenu ); VOID vInitDocMenu( BOOL bAllowModify, HMENU hMenu ); VOID vInitViewMenu( HMENU hMenu ); LPARAM nHandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ); LRESULT lrOnLVNotify( LPARAM lParam ); LRESULT lrOnLVGetDispInfo( const LV_DISPINFO* plvdi ); LRESULT lrOnLVBeginDrag( const NM_LISTVIEW *plv ); LRESULT lrOnLVRClick( NMHDR* pnmhdr ); LRESULT lrProcessCommand( UINT uCommand ); VOID vProcessItemCommand( UINT uCommand ); LRESULT lrOnLVDoubleClick( VOID ); BOOL bOnCopyData( IN WPARAM wParam, IN LPARAM lParam ); VOID vUpdateTitle( VOID ); VOID vCheckDefaultPrinterChanged( VOID ); /******************************************************************** Status bar helper routines. ********************************************************************/ LPTSTR pszStatusString( LPTSTR pszDest, UINT& cchMark, DWORD dwStatus, BOOL bInitialSep, BOOL bFirstOnly, const STATUS_MAP pStatusMaps[] ); /******************************************************************** List Item VIEW_INDEX adding/deleting ********************************************************************/ BOOL bInsertItem( HITEM hItem, LIST_INDEX ListIndex ); BOOL bDeleteItem( LIST_INDEX ListIndex ) { return ListView_DeleteItem( _hwndLV, (INT)ListIndex ); } /******************************************************************** Saving and restoring state. ********************************************************************/ BOOL bGetSelected( TSelection** ppSelection, ORPHAN PIDENT pidFocused OPTIONAL ); VOID vFreeSelectedBuffer( PIDENT pidSelected ); /******************************************************************** Statics ********************************************************************/ static const POSINFO gPQPos; static UINT gauMenuHelp[kMenuHelpMax]; static CCSLock& csPrinter( VOID ) { return *gpCritSec; } }; #endif // ndef _QUEUE_HXX