windows-nt/Source/XPSP1/NT/shell/shell32/apdlglog.h
2020-09-26 16:20:57 +08:00

196 lines
5 KiB
C++

#ifndef APDLGLOG_H
#define APDLGLOG_H
#include "dlglogic.h"
#include "ctllogic.h"
#include <dpa.h>
#define MAX_CONTENTTYPEHANDLER 64
#define MAX_CONTENTTYPEHANDLERFRIENDLYNAME 128
#define MAX_DEVICENAME 50
#define MAX_HANDLER 64
class CHandlerData : public CDataImpl
{
public:
// from CDataImpl
void UpdateDirty();
// from CHandlerData
void Init(PWSTR pszHandler, PWSTR pszHandlerFriendlyName,
PWSTR pszIconLocation, PWSTR pszTileText);
HRESULT _GetCommand(PWSTR pszCommand, DWORD cchCommand)
{
WCHAR szProgid[260];
WCHAR szVerb[CCH_KEYMAX];
HRESULT hr = _GetHandlerInvokeProgIDAndVerb(_pszHandler,
szProgid, ARRAYSIZE(szProgid),
szVerb, ARRAYSIZE(szVerb));
if (SUCCEEDED(hr))
{
hr = AssocQueryStringW(0, ASSOCSTR_COMMAND, szProgid, szVerb, pszCommand, &cchCommand);
}
return hr;
}
HRESULT Compare(LPCWSTR pszHandler, int* piResult)
{
(*piResult) = StrCmpW(pszHandler, _pszHandler);
return S_OK;
};
~CHandlerData();
public:
PWSTR _pszHandler;
PWSTR _pszHandlerFriendlyName;
PWSTR _pszIconLocation;
PWSTR _pszTileText;
};
class CHandlerDataArray : public CDPA<CHandlerData>
{
public:
static int CALLBACK _ReleaseHandler(CHandlerData *pdata, void *)
{
pdata->Release();
return 1;
}
~CHandlerDataArray();
HRESULT AddHandler(CHandlerData *pdata);
BOOL IsDuplicateCommand(PCWSTR pszCommand);
protected:
BOOL _IsDemotedHandler(PCWSTR pszHandler);
};
class CContentBase : public CDataImpl
{
public:
CHandlerData* GetHandlerData(int i);
int GetHandlerCount() { return _dpaHandlerData.IsDPASet() ? _dpaHandlerData.GetPtrCount() : 0; }
void RemoveHandler(int i)
{
CHandlerData *pdata = _dpaHandlerData.DeletePtr(i);
if (pdata)
pdata->Release();
}
protected:
HRESULT _AddLegacyHandler(DWORD dwContentType);
HRESULT _EnumHandlerHelper(IAutoplayHandler* piah);
public: // members
CHandlerDataArray _dpaHandlerData;
};
class CNoContentData : public CContentBase
{
public:
// from CDataImpl
void UpdateDirty();
HRESULT CommitChangesToStorage();
// from CNoContentData
HRESULT Init(LPCWSTR pszDeviceID);
public:
CNoContentData() : _dwHandlerDefaultFlags(0) {}
~CNoContentData();
// MAX_DEVICE_ID_LEN == 200
WCHAR _szDeviceID[200];
LPWSTR _pszIconLabel; // e.g.: "Compaq iPaq"
LPWSTR _pszIconLocation;
// Latest settings (potentially modified by user)
// Current selection in ComboBox
LPWSTR _pszHandlerDefault;
// Original settings (unmodified)
// Current selection in ComboBox
LPWSTR _pszHandlerDefaultOriginal;
DWORD _dwHandlerDefaultFlags;
BOOL _fSoftCommit;
};
class CContentTypeData : public CContentBase
{
public:
// from CDataImpl
void UpdateDirty();
HRESULT CommitChangesToStorage();
// from CContentTypeData
HRESULT Init(LPCWSTR pszDrive, DWORD dwContentType);
public:
CContentTypeData() : _dwHandlerDefaultFlags(0) {}
~CContentTypeData();
DWORD _dwContentType;
WCHAR _szContentTypeHandler[MAX_CONTENTTYPEHANDLER];
WCHAR _szDrive[MAX_PATH];
// For ListView
WCHAR _szIconLabel[MAX_CONTENTTYPEHANDLERFRIENDLYNAME]; // e.g.: "Pictures"
WCHAR _szIconLocation[MAX_ICONLOCATION];
// Latest settings (potentially modified by user)
// Current selection in ComboBox
LPWSTR _pszHandlerDefault;
// Original settings (unmodified)
// Current selection in ComboBox
LPWSTR _pszHandlerDefaultOriginal;
DWORD _dwHandlerDefaultFlags;
BOOL _fSoftCommit;
};
class CContentTypeLVItem : public CDLUIDataLVItem<CContentTypeData>
{
public:
HRESULT GetText(LPWSTR pszText, DWORD cchText);
HRESULT GetIconLocation(LPWSTR pszIconLocation,
DWORD cchIconLocation);
};
class CContentTypeCBItem : public CDLUIDataCBItem<CContentTypeData>
{
public:
HRESULT GetText(LPWSTR pszText, DWORD cchText);
HRESULT GetIconLocation(LPWSTR pszIconLocation,
DWORD cchIconLocation);
};
class CHandlerCBItem : public CDLUIDataCBItem<CHandlerData>
{
HRESULT GetText(LPWSTR pszText, DWORD cchText);
};
class CHandlerLVItem : public CDLUIDataLVItem<CHandlerData>
{
public:
HRESULT GetText(LPWSTR pszText, DWORD cchText);
HRESULT GetIconLocation(LPWSTR pszIconLocation,
DWORD cchIconLocation);
HRESULT GetTileText(int i, LPWSTR pszTileText,
DWORD cchTileText);
};
HRESULT _SetHandlerDefault(LPWSTR* ppszHandlerDefault, LPCWSTR pszHandler);
#endif // APDLGLOG_H