//-------------------------------------------------------------------------
// File: EditPropertyDlgs.h
//
// Author : Kishnan Nedungadi
//
// created : 3/27/2000
//-------------------------------------------------------------------------

class CEditProperty
{
	public:
		CEditProperty(HWND hWndParent, LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue, IWbemServices *pIWbemServices, long lSpecialCaseProperty=0);
		~CEditProperty();

		long Run();

		enum prop_special_cases
		{
			psc_rules = 0,
			psc_rule = 1,
			psc_ranges = 2,
			psc_range = 3
		};

	protected:
		
		HWND m_hWnd;
		VARIANT * pvSrcValue;
		CComBSTR m_bstrName;
		CComBSTR m_bstrType;
		CComPtr<IWbemServices>m_pIWbemServices;

		long m_lSpecialCaseProperty;
};

//-------------------------------------------------------------------------

class CEditPropertyDlg
{
	public:
		CEditPropertyDlg(LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue);
		~CEditPropertyDlg();

		CComVariant m_vValue;
	protected:
		
		virtual STDMETHODIMP InitializeDialog();
		virtual STDMETHODIMP DestroyDialog();

		HWND m_hWnd;
		VARIANT * pvSrcValue;
		CComBSTR m_bstrName;
		CComBSTR m_bstrType;
};

//-------------------------------------------------------------------------

class CEditStringPropertyDlg : public CEditPropertyDlg
{
	public:
		CEditStringPropertyDlg(LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue);
		~CEditStringPropertyDlg();
		INT_PTR CALLBACK EditStringPropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();


	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();
};

//-------------------------------------------------------------------------

class CEditNumberPropertyDlg : public CEditPropertyDlg
{
	public:
		CEditNumberPropertyDlg(LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue);
		~CEditNumberPropertyDlg();
		INT_PTR CALLBACK EditNumberPropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();


	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();
};

//-------------------------------------------------------------------------

class CEditRulesPropertyDlg : public CEditPropertyDlg
{
	public:
		CEditRulesPropertyDlg(LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue, IWbemServices *pIWbemServices);
		~CEditRulesPropertyDlg();
		INT_PTR CALLBACK EditRulesPropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();
		STDMETHODIMP ClearItems();
		STDMETHODIMP PopulateItems();
		STDMETHODIMP AddItemToList(IWbemClassObject * pIWbemClassObject, long lIndex=MAX_LIST_ITEMS);
		STDMETHODIMP OnAdd();
		STDMETHODIMP OnEdit();
		STDMETHODIMP OnDelete();

	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();

		HWND m_hwndListView;
		CComPtr<IWbemServices>m_pIWbemServices;
};

//-------------------------------------------------------------------------

class CEditRulePropertyDlg
{
	public:
		CEditRulePropertyDlg(IWbemClassObject* pIWbemClassObject);
		~CEditRulePropertyDlg();

		INT_PTR CALLBACK EditRulePropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();

	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();

		CComPtr<IWbemClassObject>m_pIWbemClassObject;

		HWND m_hWnd;
};

//-------------------------------------------------------------------------

class CEditRangeParametersPropertyDlg : public CEditPropertyDlg
{
	public:
		CEditRangeParametersPropertyDlg(LPCTSTR pszName, LPCTSTR pszType, VARIANT * pvValue, IWbemServices *pIWbemServices);
		~CEditRangeParametersPropertyDlg();
		INT_PTR CALLBACK EditRangeParametersPropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();
		STDMETHODIMP ClearItems();
		STDMETHODIMP PopulateItems();
		STDMETHODIMP AddItemToList(IWbemClassObject * pIWbemClassObject, long lIndex=MAX_LIST_ITEMS);
		STDMETHODIMP OnAdd();
		STDMETHODIMP OnEdit();
		STDMETHODIMP OnDelete();

	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();

		HWND m_hwndListView;
		CComPtr<IWbemServices>m_pIWbemServices;
};

//-------------------------------------------------------------------------

class CEditRangeParameterPropertyDlg
{
	public:
		CEditRangeParameterPropertyDlg(IWbemClassObject* pIWbemClassObject, IWbemServices* pIWbemServices);
		~CEditRangeParameterPropertyDlg();
		INT_PTR CALLBACK EditRangeParameterPropertyDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
		STDMETHODIMP OnOK();
		STDMETHODIMP ClearItems();
		STDMETHODIMP PopulateItems();
		STDMETHODIMP AddItemToList(IWbemClassObject * pIWbemClassObject, long lIndex=MAX_LIST_ITEMS);
		STDMETHODIMP OnAdd();
		STDMETHODIMP OnEdit();
		STDMETHODIMP OnDelete();
		STDMETHODIMP GetSintRangeValues();
		STDMETHODIMP SetSintRangeValues();
		STDMETHODIMP GetUintRangeValues();
		STDMETHODIMP SetUintRangeValues();
		STDMETHODIMP GetRealRangeValues();
		STDMETHODIMP SetRealRangeValues();
		STDMETHODIMP GetSintSetValues();
		STDMETHODIMP SetSintSetValues();
		STDMETHODIMP GetUintSetValues();
		STDMETHODIMP SetUintSetValues();
		STDMETHODIMP GetStringSetValues();
		STDMETHODIMP SetStringSetValues();
		STDMETHODIMP SetRangeParamValues();

		enum range_types
		{
			rt_sintrange = 0,
			rt_uintrange = 1,
			rt_realrange = 2,
			rt_sintset = 3,
			rt_uintset = 4,
			rt_stringset = 5
		};

		CComVariant m_vValue;

	protected:
		
		STDMETHODIMP InitializeDialog();
		STDMETHODIMP DestroyDialog();
		STDMETHODIMP ShowControls();

		HWND m_hwndListView;
		HWND m_hWnd;
		CComPtr<IWbemClassObject>m_pIWbemClassObject;
		CComPtr<IWbemServices>m_pIWbemServices;
};

//-------------------------------------------------------------------------