|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1998.
//
// File: Hndlrq.h
//
// Contents: Keeps tracks of Handlers and UI assignments
//
// Classes: CHndlrQueue
//
// Notes:
//
// History: 05-Nov-97 rogerg Created.
// 17-Nov-97 susia Converted to an Autosync Queue
//
//--------------------------------------------------------------------------
#ifndef _HANDLERQUEUE_
#define _HANDLERQUEUE_
typedef enum _tagHANDLERSTATE { HANDLERSTATE_CREATE = 0x01, // state is initialized to this.
HANDLERSTATE_INCREATE = 0x02, // state is initialized to this.
HANDLERSTATE_INITIALIZE = 0x03, // set after a successfull creation.
HANDLERSTATE_ININITIALIZE = 0x04, // set during initialization call
HANDLERSTATE_ADDHANDLERTEMS = 0x05, // items need to be enumerated
HANDLERSTATE_INADDHANDLERITEMS = 0x06, // in the items enumerator
HANDLERSTATE_PREPAREFORSYNC = 0x07, // set during queue tranfers
HANDLERSTATE_INPREPAREFORSYNC = 0x08, // handler is currently in a prepfosync call.
HANDLERSTATE_DEAD = 0x0F, // handler has been released. Data Stays around.
} HANDLERSTATE; typedef enum _tagQUEUETYPE { QUEUETYPE_SETTINGS = 0x3, // set during queue tranfers
QUEUETYPE_SCHEDULE = 0x4, // set during queue tranfers
} QUEUETYPE;
// so can share the queue with AutoSync and Idle just define a checkstate struct
// to keep track of items.
typedef struct _tagITEMCHECKSTATE { DWORD dwAutoSync; DWORD dwIdle; DWORD dwSchedule; } ITEMCHECKSTATE;
typedef struct _ITEMLIST { struct _ITEMLIST *pnextItem; WORD wItemId; // Id that uniquely identifies Item within a handler.
void *pHandlerInfo; // pointer to the handler that owns this item
INT iItem; // Index of Item in the current ListView.!!!Initialize to -1
SYNCMGRITEM offlineItem; // enumerator structure item returned
ITEMCHECKSTATE *pItemCheckState; // list of check states per connection
} ITEMLIST;
typedef ITEMLIST* LPITEMLIST;
typedef struct _HANDLERINFO { struct _HANDLERINFO *pNextHandler; // next handler in queue
WORD wHandlerId; // Id that uniquely identifies this instance of the Handler
CLSID clsidHandler; // CLSID of the handler Handler
SYNCMGRHANDLERINFO SyncMgrHandlerInfo; // copy of handler info GetHandlerInfo CallHANDLERSTATE HandlerState; // Current state of the handler
HANDLERSTATE HandlerState; DWORD dwRegistrationFlags; // flags as item is registered
DWORD dwSyncFlags; // sync flags originally passed in Initialize.
WORD wItemCount; // number of items on this handler
LPITEMLIST pFirstItem; // ptr to first Item of the handler in the list.
LPSYNCMGRSYNCHRONIZE pSyncMgrHandler; } HANDLERINFO;
typedef HANDLERINFO* LPHANDLERINFO;
class CHndlrQueue {
private:
LPHANDLERINFO m_pFirstHandler; // first handler in queue
WORD m_wHandlerCount; // number of handlers in this queue
QUEUETYPE m_QueueType; // type of queue this is.
CRITICAL_SECTION m_CriticalSection; // critical section for the queue.
LPCONNECTIONSETTINGS m_ConnectionList; // hold the settings per connection
int m_ConnectionCount; // number of connections
BOOL m_fItemsMissing; // set if any handlers have missing items.
public: CHndlrQueue(QUEUETYPE QueueType); ~CHndlrQueue(); STDMETHODIMP_(ULONG) AddRef(); STDMETHODIMP_(ULONG) Release();
// main queue routines
STDMETHODIMP AddHandler(REFCLSID clsidHandler, WORD *wHandlerId); STDMETHODIMP RemoveHandler(WORD wHandlerId);
STDMETHODIMP FreeAllHandlers(void);
// For updating hWnd and ListView Information.
STDMETHODIMP GetHandlerInfo(REFCLSID clsidHandler,LPSYNCMGRHANDLERINFO pSyncMgrHandlerInfo);
STDMETHODIMP FindFirstHandlerInState (HANDLERSTATE hndlrState, WORD *wHandlerID); STDMETHODIMP FindNextHandlerInState (WORD wLastHandlerID, HANDLERSTATE hndlrState, WORD *wHandlerID);
STDMETHODIMP GetHandlerIDFromClsid (REFCLSID clsidHandlerIn, WORD *pwHandlerId);
STDMETHODIMP FindFirstItemOnConnection (TCHAR *pszConnectionName, CLSID *pclsidHandler, SYNCMGRITEMID* OfflineItemID, WORD *pwHandlerId,WORD *pwItemID); STDMETHODIMP FindNextItemOnConnection (TCHAR *pszConnectionName, WORD wLastHandlerId, WORD wLastItemID, CLSID *pclsidHandler, SYNCMGRITEMID* OfflineItemID, WORD *pwHandlerId, WORD *pwItemID, BOOL fAllHandlers, DWORD *pdwCheckState); STDMETHODIMP GetSyncItemDataOnConnection (int iConnectionIndex, WORD wHandlerId, WORD wItemID, CLSID *pclsidHandler, SYNCMGRITEM* offlineItem, ITEMCHECKSTATE *pItemCheckState, BOOL fSchedSync, BOOL fClear); STDMETHODIMP SetSyncCheckStateFromListViewItem (SYNCTYPE SyncType,INT iItem, BOOL fChecked, INT iConnectionItem);
//AutoSync specific methods
STDMETHODIMP ReadSyncSettingsPerConnection(SYNCTYPE syncType,WORD wHandlerID); STDMETHODIMP InitSyncSettings(SYNCTYPE syncType,HWND hwndRasCombo); STDMETHODIMP CommitSyncChanges(SYNCTYPE syncType,CRasUI *pRas);
// Idle Specific methods.
STDMETHODIMP ReadAdvancedIdleSettings(LPCONNECTIONSETTINGS pConnectionSettings); STDMETHODIMP WriteAdvancedIdleSettings(LPCONNECTIONSETTINGS pConnectionSettings);
//SchedSync specific methods
STDMETHODIMP ReadSchedSyncSettingsOnConnection(WORD wHandlerID, TCHAR *pszSchedName); STDMETHODIMP InitSchedSyncSettings(LPCONNECTIONSETTINGS pConnectionSettings); STDMETHODIMP CommitSchedSyncChanges(TCHAR * pszSchedName, TCHAR * pszFriendlyName, TCHAR * pszConnectionName, DWORD dwConnType,BOOL fCleanReg);
STDMETHODIMP InsertItem(LPHANDLERINFO pCurHandler, LPSYNC_HANDLER_ITEM_INFO pHandlerItemInfo);
STDMETHODIMP AddHandlerItem(LPSYNC_HANDLER_ITEM_INFO pHandlerItemInfo);
STDMETHODIMP SetItemCheck(REFCLSID pclsidHandler, SYNCMGRITEMID *OfflineItemID, DWORD dwCheckState);
STDMETHODIMP GetItemCheck(REFCLSID pclsidHandler, SYNCMGRITEMID *OfflineItemID, DWORD *pdwCheckState); STDMETHODIMP SetItemListViewID(CLSID clsidHandler,SYNCMGRITEMID OfflineItemID,INT iItem); // assigns list view ID to an Item.
DWORD GetCheck(WORD wParam, INT iItem); STDMETHODIMP SetConnectionCheck(WORD wParam, DWORD dwState, INT iConnectionItem);
STDMETHODIMP ListViewItemHasProperties(INT iItem); // determines if there are properties associated with this item.
STDMETHODIMP ShowProperties(HWND hwndParent,INT iItem); // show properties for this listView Item.
STDMETHODIMP CreateServer(WORD wHandlerId, const CLSID *pCLSIDServer); STDMETHODIMP Initialize(WORD wHandlerId,DWORD dwReserved,DWORD dwSyncFlags, DWORD cbCookie,const BYTE *lpCookie); STDMETHODIMP SetHandlerInfo(WORD wHandlerId,LPSYNCMGRHANDLERINFO pSyncMgrHandlerInfo); STDMETHODIMP AddHandlerItemsToQueue(WORD wHandlerId); STDMETHODIMP AddItemToHandler(WORD wHandlerId,SYNCMGRITEM *pOffineItem);
STDMETHODIMP GetItemName(WORD wHandlerId, WORD wItemID, WCHAR *pwszName); STDMETHODIMP GetItemIcon(WORD wHandlerId, WORD wItemID, HICON *phIcon);
private: // private functions for finding proper handlers and items.
STDMETHODIMP LookupHandlerFromId(WORD wHandlerId,LPHANDLERINFO *pHandlerInfo); ULONG m_cRef;
};
#endif // _HANDLERQUEUE_
|