|
|
#ifndef _TRAYITEM_H
#define _TRAYITEM_H
#include "traycmn.h"
#define TNUP_AUTOMATIC 0
#define TNUP_DEMOTED 1
#define TNUP_PROMOTED 2
// IMPORTANT : Should be kept in sync with any flags defined in shellapi.w
typedef enum ICONSTATEFLAG { TIF_HIDDEN = 0, TIF_DEMOTED, TIF_STARTUPICON, TIF_SHARED, TIF_SHAREDICONSOURCE, TIF_ONCEVISIBLE, TIF_ITEMCLICKED, TIF_ITEMSAMEICONMODIFY, } ICONSTATEFLAG;
class CTrayItem { public: CTrayItem() : dwUserPref(TNUP_AUTOMATIC), guidItem(GUID_NULL) { } ~CTrayItem() { }
// The icon should have an associated exe name, and it should either be
// demoted or its preference should be set to something other than automatic
BOOL ShouldSaveIcon() { return ( (szExeName[0] != 0) && (WasOnceVisible()) && (szIconText[0] != 0) ); }
BOOL IsDemoted() { return (_CheckIconState(TIF_DEMOTED)); } BOOL IsHidden() { return (_CheckIconState(TIF_HIDDEN)); } BOOL IsIconShared() { return (_CheckIconState(TIF_SHARED)); } BOOL IsSharedIconSource() { return (_CheckIconState(TIF_SHAREDICONSOURCE)); } BOOL IsStartupIcon() { return (_CheckIconState(TIF_STARTUPICON)); } BOOL WasOnceVisible() { return (_CheckIconState(TIF_ONCEVISIBLE)); } BOOL IsItemClicked() { return (_CheckIconState(TIF_ITEMCLICKED)); } BOOL IsItemSameIconModify() { return (_CheckIconState(TIF_ITEMSAMEICONMODIFY)); }
BOOL IsGuidItemValid() { return (guidItem != GUID_NULL); }
BOOL IsIconTimerCurrent() { return (uIconDemoteTimerID != 0); }
void SetDemoted(BOOL bDemoted) { _SetIconState(TIF_DEMOTED, bDemoted); } void SetStartupIcon(BOOL bIsStartupIcon) { _SetIconState(TIF_STARTUPICON, bIsStartupIcon); } void SetSharedIconSource(BOOL bSharedIconSource) { _SetIconState(TIF_SHAREDICONSOURCE, bSharedIconSource); } void SetOnceVisible(BOOL bOnceVisible) { _SetIconState(TIF_ONCEVISIBLE, bOnceVisible); } void SetItemClicked(BOOL bItemClicked) { _SetIconState(TIF_ITEMCLICKED, bItemClicked); } void SetItemSameIconModify(BOOL bItemSameIconModify) { _SetIconState(TIF_ITEMSAMEICONMODIFY, bItemSameIconModify); } public: HWND hWnd; UINT uID; UINT uCallbackMessage; DWORD dwState; UINT uVersion; HICON hIcon; // *** may be stale, not guaranteed to be a valid hicon ***
ULONG uIconDemoteTimerID; DWORD dwUserPref; // user preference (hidden? visible? automatic?)
DWORD dwLastSoundTime; TCHAR szExeName[MAX_PATH]; TCHAR szIconText[MAX_PATH]; UINT uNumSeconds; GUID guidItem;
private: DWORD _GetStateFlag(ICONSTATEFLAG sf); void _SetIconState(ICONSTATEFLAG sf, BOOL bSet); BOOL _CheckIconState(ICONSTATEFLAG sf); };
// Item Count helper flags..
#define GIC_PROMOTED 0
#define GIC_DEMOTED 1
#define GIC_ALL 2
class CTrayItemManager { public: CTrayItemManager() { } ~CTrayItemManager() { }
INT_PTR FindItemAssociatedWithGuid(GUID guidItemToCheck); INT_PTR FindItemAssociatedWithTimer(UINT_PTR uIconDemoteTimerID); INT_PTR FindItemAssociatedWithHwndUid(HWND hwnd, UINT uID);
INT_PTR GetItemCount(int nItemCountThreshold = -1) { return _GetItemCountHelper(GIC_ALL, nItemCountThreshold); }
INT_PTR GetDemotedItemCount(int nItemCountThreshold = -1) { return _GetItemCountHelper(GIC_DEMOTED, nItemCountThreshold); }
INT_PTR GetPromotedItemCount(int nItemCountThreshold = -1) { return _GetItemCountHelper(GIC_PROMOTED, nItemCountThreshold); }
void SetTBBtnImage(INT_PTR iIndex, int iImage); int GetTBBtnImage(INT_PTR iIndex, BOOL fByIndex = TRUE); void SetTBBtnText(INT_PTR iIndex, LPTSTR pszText);
BOOL SetTBBtnStateHelper(INT_PTR iIndex, BYTE fsState, BOOL_PTR bSet);
BOOL GetTrayItem(INT_PTR nIndex, CNotificationItem * pni, BOOL * pbStat);
int FindImageIndex(HICON hIcon, BOOL fSetAsSharedSource);
BOOL DemotedItemsPresent(int nMinDemotedItemsThreshold);
CTrayItem * GetItemData(INT_PTR i, BOOL byIndex, HWND hwndToolbar); CTrayItem * GetItemDataByIndex(INT_PTR i) { return GetItemData(i, TRUE, m_hwndToolbar); }
void SetIconList(HIMAGELIST hImageList) { m_himlIcons = hImageList; } void SetTrayToolbar(HWND hwndToolbar) { m_hwndToolbar = hwndToolbar; }
private: INT_PTR _GetItemCountHelper(int nItemFlag, int nItemCountThreshold);
HIMAGELIST m_himlIcons; HWND m_hwndToolbar; };
#endif // _TRAYITEM_H
|