242 lines
7.5 KiB
C++
242 lines
7.5 KiB
C++
#ifndef _INC_DSKQUOTA_VOLPROP_H
|
|
#define _INC_DSKQUOTA_VOLPROP_H
|
|
|
|
/* File: volprop.h
|
|
|
|
Description: Provides declarations for quota property pages.
|
|
|
|
|
|
Revision History:
|
|
|
|
Date Description Programmer
|
|
-------- --------------------------------------------------- ----------
|
|
08/15/96 Initial creation. BrianAu
|
|
*/
|
|
|
|
#ifndef _INC_DSKQUOTA_PRSHTEXT_H
|
|
# include "prshtext.h"
|
|
#endif
|
|
#ifndef _INC_DSKQUOTA_DETAILS_H
|
|
# include "details.h"
|
|
#endif
|
|
|
|
#ifdef POLICY_MMC_SNAPIN
|
|
# ifndef _INC_DSKQUOTA_POLICY_H
|
|
# include "policy.h"
|
|
# endif
|
|
#endif
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
const DWORD IDT_STATUS_UPDATE = 1;
|
|
const DWORD STATUS_UPDATE_TIMER_PERIOD = 2000; // Update every 2 sec.
|
|
|
|
#define TLM_SETSTATE (WM_USER + 100) // TLM = Traffic Light Message.
|
|
|
|
|
|
// Volume property page.
|
|
|
|
class VolumePropPage : public DiskQuotaPropSheetExt
|
|
{
|
|
protected:
|
|
class TrafficLight
|
|
{
|
|
private:
|
|
HWND m_hwndAnimateCtl;
|
|
INT m_idAviClipRes;
|
|
|
|
|
|
// Prevent copy.
|
|
|
|
TrafficLight(const TrafficLight& rhs);
|
|
TrafficLight& operator = (const TrafficLight& rhs);
|
|
|
|
public:
|
|
TrafficLight(VOID)
|
|
: m_hwndAnimateCtl(NULL),
|
|
m_idAviClipRes(-1)
|
|
{ }
|
|
|
|
TrafficLight(HWND hwndAnimateCtl, INT idAviClipRes)
|
|
: m_hwndAnimateCtl(hwndAnimateCtl),
|
|
m_idAviClipRes(idAviClipRes)
|
|
{
|
|
Initialize(hwndAnimateCtl, idAviClipRes);
|
|
}
|
|
|
|
VOID Initialize(HWND hwndAnimateCtl, INT idAviClipRes);
|
|
|
|
~TrafficLight(VOID)
|
|
{ Animate_Close(m_hwndAnimateCtl); }
|
|
|
|
enum { YELLOW, OFF, RED, GREEN, FLASHING_YELLOW };
|
|
|
|
VOID Show(INT eShow);
|
|
|
|
INT_PTR ForwardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
DWORD m_dwQuotaState;
|
|
DWORD m_dwQuotaLogFlags;
|
|
LONGLONG m_llDefaultQuotaThreshold;
|
|
LONGLONG m_llDefaultQuotaLimit;
|
|
UINT64 m_cVolumeMaxBytes;
|
|
UINT_PTR m_idStatusUpdateTimer;
|
|
DWORD m_dwLastStatusMsgID;
|
|
int m_idCtlNextFocus;
|
|
DetailsView *m_pDetailsView;
|
|
XBytes *m_pxbDefaultLimit;
|
|
XBytes *m_pxbDefaultThreshold;
|
|
TrafficLight m_TrafficLight;
|
|
|
|
|
|
virtual INT_PTR OnInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnCommand(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnNotify(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
|
|
INT_PTR OnContextMenu(HWND hwndItem, int xPos, int yPos);
|
|
INT_PTR OnHelp(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnTimer(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnButtonDetails(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnButtonEventLog(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
// PSN_xxxx handlers.
|
|
|
|
virtual INT_PTR OnSheetNotifyApply(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifyKillActive(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifyReset(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifySetActive(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
// EN_xxxx handlers.
|
|
|
|
INT_PTR OnEditNotifyUpdate(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnEditNotifyKillFocus(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
INT_PTR OnEditNotifySetFocus(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
// CBN_xxxx handlers.
|
|
|
|
INT_PTR OnComboNotifySelChange(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
|
|
|
|
HRESULT UpdateControls(HWND hDlg) const;
|
|
HRESULT InitializeControls(HWND hDlg);
|
|
HRESULT EnableControls(HWND hDlg);
|
|
HRESULT RefreshCachedVolumeQuotaInfo(VOID);
|
|
HRESULT ApplySettings(HWND hDlg);
|
|
HRESULT QuotaStateFromControls(HWND hDlg, LPDWORD pdwState) const;
|
|
HRESULT LogFlagsFromControls(HWND hDlg, LPDWORD pdwLogFlags) const;
|
|
BOOL ActivateExistingDetailsView(VOID) const;
|
|
bool SetByPolicy(LPCTSTR pszPolicyValue);
|
|
|
|
HRESULT UpdateStatusIndicators(HWND hDlg);
|
|
|
|
VOID SetStatusUpdateTimer(HWND hDlg)
|
|
{
|
|
if (0 == m_idStatusUpdateTimer)
|
|
m_idStatusUpdateTimer = SetTimer(hDlg,
|
|
IDT_STATUS_UPDATE,
|
|
STATUS_UPDATE_TIMER_PERIOD,
|
|
NULL);
|
|
}
|
|
VOID KillStatusUpdateTimer(HWND hDlg)
|
|
{
|
|
if (0 != m_idStatusUpdateTimer)
|
|
{
|
|
KillTimer(hDlg, m_idStatusUpdateTimer);
|
|
m_idStatusUpdateTimer = 0;
|
|
}
|
|
}
|
|
|
|
|
|
// Prevent copy.
|
|
|
|
VolumePropPage(const VolumePropPage& rhs);
|
|
VolumePropPage& operator = (const VolumePropPage& rhs);
|
|
|
|
public:
|
|
VolumePropPage(VOID);
|
|
~VolumePropPage(VOID);
|
|
|
|
|
|
// Dialog Proc callback.
|
|
|
|
static INT_PTR APIENTRY DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
#ifdef POLICY_MMC_SNAPIN
|
|
|
|
|
|
// A specialization of VolumePropPage to address the specific needs of
|
|
// of the disk quota policy property sheet displayed from within MMC. The
|
|
// similarities between the two classes called for reusing as much of the
|
|
// VolumePropPage implementation as possible.
|
|
// The differences from VolumePropPage are:
|
|
|
|
// 1. "Quota Entries" and "Event Log" buttons are hidden.
|
|
// 2. Traffic light and status messages are hidden.
|
|
// 3. Page is not opened up "over" a specific volume.
|
|
// 4. When user selects "OK" or "Apply", quota information is written to
|
|
// the registry.
|
|
|
|
class CSnapInCompData; // fwd decl.
|
|
class SnapInVolPropPage : public VolumePropPage
|
|
{
|
|
public:
|
|
SnapInVolPropPage(void)
|
|
: m_pPolicy(NULL) { }
|
|
|
|
~SnapInVolPropPage(void);
|
|
|
|
private:
|
|
LPDISKQUOTAPOLICY m_pPolicy;
|
|
|
|
virtual INT_PTR OnInitDialog(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual HRESULT CreateDiskQuotaPolicyObject(IDiskQuotaPolicy **ppOut);
|
|
|
|
|
|
// PSN_xxxx handlers.
|
|
|
|
virtual INT_PTR OnSheetNotifyApply(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifyKillActive(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifyReset(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
virtual INT_PTR OnSheetNotifySetActive(HWND hDlg, WPARAM wParam, LPARAM lParam);
|
|
};
|
|
|
|
#endif // POLICY_MMC_SNAPIN
|
|
|
|
|
|
#ifdef PER_DIRECTORY_QUOTAS
|
|
|
|
// Folder property page.
|
|
|
|
class FolderPropPage : public DiskQuotaPropSheetExt
|
|
{
|
|
|
|
// This class has not been implemented.
|
|
// At some future date, we may implement per-directory quota management.
|
|
// If such support is required, look at class VolumePropPage.
|
|
// You should be able to provide a similar implementation only with
|
|
// directory-specific features. All features common to volumes and
|
|
// directories are in class DiskQuotaPropSheetExt.
|
|
|
|
public:
|
|
|
|
// Dialog Proc callback.
|
|
|
|
static INT_PTR APIENTRY DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{ return FALSE; }
|
|
};
|
|
|
|
|
|
#endif // PER_DIRECTORY_QUOTAS
|
|
|
|
|
|
|
|
|
|
#endif // __DSKQUOTA_PROPSHEET_EXT_H
|
|
|