/*++ Copyright (c) 1995 Microsoft Corporation 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 }; struct POSINFO { UINT uColMax; FIELD aField[kIcolMax+1]; INT anWidth[kIcolMax+1]; WINDOWPLACEMENT wp; BOOL bStatusBar; BOOL bToolbar; }; DLINK( TQueue, Queue ); TQueue( HWND hwndOwner, LPCTSTR pszPrinter, INT nCmdShow, HANDLE hEventClose ); ~TQueue( VOID ); BOOL bValid( VOID ) const { return _hwndLV != NULL; } VOID vWindowClosing( VOID ); LPTSTR pszPrinterName( LPTSTR pszPrinterBuffer ) const { return _pPrinter->pszPrinterName( pszPrinterBuffer ); } static LPTSTR pszFormattedPrinterName( LPCTSTR pszFullPrinter, LPTSTR pszPrinterBuffer ); private: BOOL _bStatusBar : 1; BOOL _bToolbar : 1; BOOL _bMinimized : 1; BOOL _bWindowClosing : 1; HANDLE _hEventClose; HWND _hwndLV; HWND _hwndSB; HWND _hwndTB; UINT _uColMax; HICON _hIconLarge; HICON _hIconSmall; UINT _idsConnectStatus; DWORD _dwErrorStatus; DWORD _dwAttributes; DWORD _dwStatusPrinter; COUNT _cItems; struct SAVE_SELECTION { IDENT _idFocused; TSelection* _pSelection; } SaveSelection; 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; 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( HMENU hMenu, INT iSel ); VOID vInitViewMenu( HMENU hMenu ); LPARAM nHandleMessage( UINT uMsg, WPARAM wParam, LPARAM lParam ); LRESULT lrOnLVNotify( LPARAM lParam ); LRESULT lrOnLVGetDispInfo( const LV_DISPINFO* plvdi ); LRESULT lrOnLVRClick( NMHDR* pnmhdr ); LRESULT lrProcessCommand( UINT uCommand ); HMENU hMenuLoad( UINT id, UINT uSubOffset ); VOID vProcessItemCommand( UINT uCommand ); LRESULT lrOnLVDoubleClick( 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 MCritSec& csPrinter( VOID ) { return *gpCritSec; } }; /******************************************************************** Location where the printer window settings are stored in HKEY_CURRENT_USER. Win95 uses \Printers, this conflicts with NT's Default/DeviceOld values, so create a subkey called Settings. REGSTR_PATH_EXPLORER ********************************************************************/ #ifdef WINNT const TCHAR gszPrinterPositions[] = TEXT( "Printers\\Settings" ); #else const TCHAR gszPrinterPositions[] = TEXT( "Printers" ); #endif #endif // ndef _QUEUE_HXX