|
|
#ifndef _DCOMP_H_
#define _DCOMP_H_
#include <cowsite.h>
EXTERN_C IActiveDesktop * g_pActiveDeskAdv;
//
// Whether a particular desktop icon is shown or not depends on whether start panel is on or off.
// So, the individual preferences are persisted in two different registry locations given below!
#define REGSTR_PATH_HIDDEN_DESKTOP_ICONS REGSTR_PATH_EXPLORER TEXT("\\HideDesktopIcons\\%s")
#define REGSTR_VALUE_STARTPANEL TEXT("NewStartPanel")
#define REGSTR_VALUE_CLASSICMENU TEXT("ClassicStartMenu")
#define REGSTR_PATH_HIDDEN_MYCOMP_ICONS REGSTR_PATH_EXPLORER TEXT("\\HideMyComputerIcons")
#define REGSTR_PATH_EXP_SHELLFOLDER REGSTR_PATH_EXPLORER TEXT("\\CLSID\\%s\\ShellFolder")
#define REGVAL_ATTRIBUTES TEXT("Attributes")
// The following array has the two registry sub-locations where the desktop icon on/off data
// is stored based on whether start panel is off/on.
const LPTSTR c_apstrRegLocation[] = { REGSTR_VALUE_CLASSICMENU, // Use this if classic menu is on.
REGSTR_VALUE_STARTPANEL // Use this if start panel is on.
};
// Name of the file that holds each icon, and an index for which icon to use in the file
typedef struct tagIconKeys { TCHAR szOldFile[MAX_PATH]; int iOldIndex; TCHAR szNewFile[MAX_PATH]; int iNewIndex; }ICONDATA;
extern GUID CLSID_EffectsPage;
// Registry Info for the icons
typedef struct tagIconRegKeys { const CLSID* pclsid; TCHAR szIconValue[16]; int iTitleResource; int iDefaultTitleResource; LPCWSTR pszDefault; int nDefaultIndex; }ICONREGKEYS;
static const ICONREGKEYS c_aIconRegKeys[] = { { &CLSID_MyComputer, TEXT("\0"), 0, IDS_MYCOMPUTER, L"%WinDir%\\explorer.exe", 0}, { &CLSID_MyDocuments, TEXT("\0"), 0, IDS_MYDOCUMENTS2, L"%WinDir%\\system32\\mydocs.dll", 0}, { &CLSID_NetworkPlaces, TEXT("\0"), 0, IDS_NETNEIGHBOUR, L"%WinDir%\\system32\\shell32.dll", 17}, { &CLSID_RecycleBin, TEXT("full"), IDS_FULL, IDS_TRASHFULL, L"%WinDir%\\system32\\shell32.dll", 32}, { &CLSID_RecycleBin, TEXT("empty"), IDS_EMPTY2, IDS_TRASHEMPTY, L"%WinDir%\\system32\\shell32.dll", 31}, };
#define NUM_ICONS (ARRAYSIZE(c_aIconRegKeys))
enum ICON_SIZE_TYPES { ICON_DEFAULT = 0, ICON_LARGE = 1, ICON_INDETERMINATE = 2 };
#define ICON_DEFAULT_SMALL 16
#define ICON_DEFAULT_NORMAL 32
#define ICON_DEFAULT_LARGE 48
typedef struct tagDeskIconId { int iDeskIconDlgItemId; LPCWSTR pwszCLSID; const CLSID *pclsid; BOOL fCheckNonEnumAttrib; BOOL fCheckNonEnumPolicy; } DESKICONID;
// Array if desktop icons we would like to turn-on/off individually
static const DESKICONID c_aDeskIconId[] = { {IDC_DESKTOP_ICON_MYDOCS, L"{450D8FBA-AD25-11D0-98A8-0800361B1103}", &CLSID_MyDocuments, TRUE , TRUE }, // My Documents
{IDC_DESKTOP_ICON_MYCOMP, L"{20D04FE0-3AEA-1069-A2D8-08002B30309D}", &CLSID_MyComputer, FALSE , TRUE }, // My Computer
{IDC_DESKTOP_ICON_MYNET, L"{208D2C60-3AEA-1069-A2D7-08002B30309D}", &CLSID_NetworkPlaces, TRUE , TRUE }, // Network Places
{IDC_DESKTOP_ICON_IE, L"{871C5380-42A0-1069-A2EA-08002B30309D}", &CLSID_Internet, TRUE , TRUE } // Internet Explorer
};
// The sub-string that preceeds the CLSID when passed as the property name.
// For example, when "SP_1{645FF040-5081-101B-9F08-00AA002F954E}" is passed as the property name,
// it refers to the recycle icon when StartPage is ON.
//
static const LPWSTR c_awszSP[] = { L"SP_0", //Indicates StartPage Off.
L"SP_1", //Indicates StartPage On.
L"POLI" //Indicates that we want the policy info!
};
static const LPWSTR c_wszPropNameFormat = L"%s%s";
#define STARTPAGE_ON_PREFIX c_awszSP[1] //The prefix string for StartPage_On.
#define STARTPAGE_OFF_PREFIX c_awszSP[0] //The prefix string for StartPage_Off.
#define LEN_PROP_PREFIX lstrlenW(c_awszSP[0]) //Length of the prefix string.
#define POLICY_PREFIX c_awszSP[2]
#define NUM_DESKICONS (ARRAYSIZE(c_aDeskIconId))
#ifndef EXCLUDE_COMPPROPSHEET
class CCompPropSheetPage : public CObjectWithSite , public IAdvancedDialog { public: //////////////////////////////////////////////////////
// Public Interfaces
//////////////////////////////////////////////////////
// *** IUnknown ***
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void);
// *** IAdvancedDialog ***
virtual STDMETHODIMP DisplayAdvancedDialog(IN HWND hwndParent, IN IPropertyBag * pAdvPage, IN BOOL * pfEnableApply);
CCompPropSheetPage(void);
protected: int _cRef;
ICONDATA _IconData[NUM_ICONS];
HWND _hwndLV; BOOL _fAllowAdd; BOOL _fAllowDel; BOOL _fAllowEdit; BOOL _fAllowClose; BOOL _fAllowReset; BOOL _fLockDesktopItems; BOOL _fForceAD; BOOL _fLaunchGallery; // Did we launch the gallery at any time?
BOOL _fInitialized; // Did we finished adding the items to the list view?
HWND _hWndList; // handle to the list view window
HIMAGELIST _hIconList; // handles to image lists for large icons
BOOL _fCustomizeDesktopOK; // was OK clicked when the customize desktop property sheet dialog was closed?
int _iStartPanelOn; BOOL _afHideIcon[2][NUM_DESKICONS]; BOOL _afDisableCheckBox[NUM_DESKICONS]; int _iPreviousSelection; int m_nIndex;
void _AddComponentToLV(COMPONENTA *pcomp); void _SetUIFromDeskState(BOOL fEmpty); void _OnInitDialog(HWND hwnd, INT iPage); void _OnNotify(HWND hwnd, WPARAM wParam, LPNMHDR lpnm); void _OnCommand(HWND hwnd, WORD wNotifyCode, WORD wID, HWND hwndCtl); void _OnDestroy(INT iPage); void _OnGetCurSel(int *piIndex); void _EnableControls(HWND hwnd); BOOL _VerifyFolderOptions(void); void _SelectComponent(LPWSTR pwszUrl);
HRESULT _OnInitDesktopOptionsUI(HWND hwnd); HRESULT _LoadIconState(IN IPropertyBag * pAdvPage); HWND _CreateListView(HWND hWndParent);
void _NewComponent(HWND hwnd); void _EditComponent(HWND hwnd); void _DeleteComponent(HWND hwnd); void _SynchronizeAllComponents(IActiveDesktop *pActDesktop); void _TryIt(void);
void _DesktopCleaner(HWND hwnd);
HRESULT _IsDirty(IN BOOL * pIsDirty); HRESULT _MergeIconState(IN IPropertyBag * pAdvPage); HRESULT _LoadDeskIconState(IN IPropertyBag * pAdvPage); HRESULT _MergeDeskIconState(IN IPropertyBag * pAdvPage); HRESULT _UpdateDesktopIconsUI(HWND hwnd); private: virtual ~CCompPropSheetPage(void);
// Private Member Functions
INT_PTR _CustomizeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam, INT iPage);
static INT_PTR _CustomizeDlgProcHelper(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam, INT iPage); static INT_PTR CALLBACK CustomizeDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK WebDlgProc(HWND hDlg, UINT uMessage, WPARAM wParam, LPARAM lParam); };
BOOL FindComponent(IN LPCTSTR pszUrl, IN IActiveDesktop * pActiveDesktop); void CreateComponent(COMPONENTA *pcomp, LPCTSTR pszUrl); INT_PTR NewComponent(HWND hwndOwner, IActiveDesktop * pad, BOOL fDeferGallery, COMPONENT * pcomp); BOOL LooksLikeFile(LPCTSTR psz); BOOL IsUrlPicture(LPCTSTR pszUrl);
#endif // EXCLUDE_COMPPROPSHEET
#define WM_COMP_GETCURSEL (WM_USER+1)
#endif
|