/*++

Copyright (C) 1996-1999 Microsoft Corporation

Module Name:

    smonctrl.odl

Abstract:

    <abstract>

--*/

#include <olectl.h>

#define DISPID_VALUE 0
#define DISPID_NEWENUM -4

//LIBID_SystemMonitor
[

uuid(1B773E42-2509-11cf-942F-008029004347)
    , helpstring("System Monitor Control")
    , lcid(0x0000)
    , version(3.4)
]

library SystemMonitor
    {
    //importlib("stdole32.tlb");
    importlib(STDOLE_TLB);
    importlib(STDTYPE_TLB);

    // Display type constants
    typedef
    [
        helpstring("System Monitor display type constants")
    ]
    enum eDisplayTypeConstant {
        [helpstring("Line graph.")] sysmonLineGraph = 0x0001,
        [helpstring("Histogram.")]  sysmonHistogram = 0x0002,
        [helpstring("Report.")]     sysmonReport = 0x0003
    } DisplayTypeConstants;

    // Report value type constants
    typedef
    [
        helpstring("System Monitor report value type constants")
    ]
    enum eReportValueTypeConstant {
        [helpstring("Use default.")]    
            sysmonDefaultValue = 0x0000,
        [helpstring("Current value.")]  
            sysmonCurrentValue = 0x0001,
        [helpstring("Average value over the graph display interval.")]   
            sysmonAverage = 0x0002,
        [helpstring("Minimum value in the graph display interval.")]      
            sysmonMinimum = 0x0003,
        [helpstring("Maximum value in the graph display interval.")]      
            sysmonMaximum = 0x0004
    } ReportValueTypeConstants;

    // Data source type constants
    typedef
    [
        helpstring("System Monitor data source type constants")
    ]
    enum eDataSourceTypeConstant {
        [helpstring("No data source.")]     sysmonNullDataSource = 0xFFFFFFFF,
        [helpstring("Current activity.")]   sysmonCurrentActivity = 0x0001,
        [helpstring("Log files.")]          sysmonLogFiles = 0x0002,
        [helpstring("SQL Log.")]            sysmonSqlLog = 0x0003
    } DataSourceTypeConstants;

    //IID_ICounterItem
    [
    uuid(771A9520-EE28-11ce-941E-008029004347)
        , helpstring("Definition of interface ICounterItem")
        , hidden
        , odl
    ]

    interface ICounterItem : IUnknown
        {
        //Properties
        [id(DISPID_VALUE), propget, helpstring("Current value.")]
            HRESULT Value([out, retval] double *pdblValue); 

        [id(1), propput, helpstring("Color.")]
            HRESULT Color([in] OLE_COLOR Color);

        [id(1), propget]
            HRESULT Color([out, retval] OLE_COLOR *pColor);

        [id(2), propput, helpstring("Width.")]
            HRESULT Width([in] INT iWidth);

        [id(2), propget]
            HRESULT Width([out, retval] INT *piValue);

        [id(3), propput, helpstring("Line style.")]
            HRESULT LineStyle([in] INT iLineStyle);

        [id(3), propget]
            HRESULT LineStyle([out, retval] INT *piValue);

        [id(4), propput, helpstring("Scale factor.")]
            HRESULT ScaleFactor([in] INT iScale);

        [id(4), propget]
            HRESULT ScaleFactor([out, retval] INT *piValue);

        [id(5), propget]
            HRESULT Path([out, retval] BSTR *pstrValue);

        //Beta 1: [id(6), propget, helpstring("Current value.")]
        HRESULT GetValue([out]double *Value, [out]long *Status);

        HRESULT GetStatistics([out]double *Max, [out]double *Min,
                             [out]double *Avg, [out]long *Status);
        }

 
    //DIID_DICounterItem
    [
    uuid(C08C4FF2-0E2E-11cf-942C-008029004347)
        , hidden
        , helpstring("Definition of dispinterface DICounterItem")
    ]
    dispinterface DICounterItem
        {
        interface ICounterItem;
        }


     //
     // IID_ICounters
     //
    [
    uuid(79167962-28FC-11cf-942F-008029004347),
        helpstring("Counter collection"),
        dual,
        hidden,
        odl
    ]
    interface ICounters : IDispatch
    {
    [propget]
        HRESULT Count([out,retval]long *pLong);

    [propget, restricted, id(DISPID_NEWENUM)]
        HRESULT _NewEnum([out,retval]IUnknown** ppIunk);

    [propget, id(DISPID_VALUE)]
        HRESULT Item([in]VARIANT index,[out,retval]DICounterItem **ppI);

    HRESULT Add([in]BSTR pathname, [out,retval]DICounterItem **ppI);
    HRESULT Remove([in]VARIANT index);
    }

    //IID_ILogFileItem
    [
    uuid(D6B518DD-05C7-418a-89E6-4F9CE8C6841E)
        , helpstring("Definition of interface ILogFileItem")
        , hidden
        , odl
    ]

    interface ILogFileItem : IUnknown
        {
        //Properties
        [id(DISPID_VALUE), propget, helpstring("Log file path.")]
            HRESULT Path([out, retval] BSTR *pstrValue); 
        }

 
    //DIID_DILogFileItem
    [
    uuid(8D093FFC-F777-4917-82D1-833FBC54C58F)
        , hidden
        , helpstring("Definition of dispinterface DILogFileItem")
    ]
    dispinterface DILogFileItem
        {
        interface ILogFileItem;
        }
        
     //
     // IID_ILogFiles
     //
    [
    uuid(6A2A97E6-6851-41ea-87AD-2A8225335865),
        helpstring("Log file collection"),
        dual,
        hidden,
        odl
    ]
    interface ILogFiles : IDispatch
    {
    [propget]
        HRESULT Count([out,retval]long *pLong);

    [propget, restricted, id(DISPID_NEWENUM)]
        HRESULT _NewEnum([out,retval]IUnknown** ppIunk);

    [propget, id(DISPID_VALUE)]
        HRESULT Item([in]VARIANT index,[out,retval]DILogFileItem **ppI);

    HRESULT Add([in]BSTR pathname, [out,retval]DILogFileItem **ppI);
    HRESULT Remove([in]VARIANT index);
    }

    //
    // IID_ISystemMonitor
    //
    [
    uuid(194EB241-C32C-11cf-9398-00AA00A3DDEA)
        , helpstring("Definition of interface ISystemMonitor")
        , hidden
        , odl
    ]

    interface ISystemMonitor : IUnknown
        {
        //Properties

        [id(DISPID_APPEARANCE), propget, helpstring("The appearance.")]
            HRESULT Appearance([out, retval] INT *iAppearance);
        
        [id(DISPID_APPEARANCE), propput]
            HRESULT Appearance([in] INT iAppearance);

        [id(DISPID_BACKCOLOR), propget, helpstring("The background color.")]
            HRESULT BackColor([out, retval] OLE_COLOR *pColor);
        
        [id(DISPID_BACKCOLOR), propput]
            HRESULT BackColor([in] OLE_COLOR Color);

        [id(DISPID_BORDERSTYLE), propget, helpstring("The border style.")]
            HRESULT BorderStyle([out, retval] INT *iBorderStyle);
        
        [id(DISPID_BORDERSTYLE), propput]
            HRESULT BorderStyle([in] INT iBorderStyle);

        [id(DISPID_FORECOLOR), propget, helpstring("The foreground color.")]
            HRESULT ForeColor([out, retval] OLE_COLOR *pColor);
        
        [id(DISPID_FORECOLOR), propput]
            HRESULT ForeColor([in] OLE_COLOR Color);

        [id(DISPID_FONT), propget, helpstring("The font for all text.")]
            HRESULT Font([out,retval] IFontDisp **ppFont);

        [id(DISPID_FONT), propputref]
            HRESULT Font([in] IFontDisp *pFont);

        [id(DISPID_VALUE), propget, helpstring("The counter collection.")]
            HRESULT Counters([out, retval] ICounters **ppICounters);

        [id(1), propput, helpstring("Show vertical grid.")]
            HRESULT ShowVerticalGrid([in] boolean bState);

        [id(1), propget]
            HRESULT ShowVerticalGrid([out, retval] boolean *pbState);

        [id(2), propput, helpstring("Show horizontal grid.")]
            HRESULT ShowHorizontalGrid([in] boolean bState);

        [id(2), propget]
            HRESULT ShowHorizontalGrid([out, retval] boolean *pbState);

        [id(3), propput, helpstring("Show counters legend.")]
            HRESULT ShowLegend([in] boolean bState);

        [id(3), propget]
            HRESULT ShowLegend([out, retval] boolean *pbState);

        [id(4), propput, helpstring("Show scale labels.")]
            HRESULT ShowScaleLabels([in] boolean bState);

        [id(4), propget]
            HRESULT ShowScaleLabels([out, retval] boolean *pbState);

        [id(5), propput, helpstring("Show value bar.")]
            HRESULT ShowValueBar([in] boolean bState);

        [id(5), propget]
            HRESULT ShowValueBar([out, retval] boolean *pbState);       

        [id(6), propput, helpstring("Maximum scale value.")]
            HRESULT MaximumScale([in] INT iValue);

        [id(6), propget]
            HRESULT MaximumScale([out, retval] INT *piValue);

        [id(7), propput, helpstring("Minimum scale value.")]
            HRESULT MinimumScale([in] INT iValue);

        [id(7), propget]
            HRESULT MinimumScale([out, retval] INT *piValue);

        [id(8), propput, helpstring("Data sample interval.")]
            HRESULT UpdateInterval([in] FLOAT fValue);

        [id(8), propget]
            HRESULT UpdateInterval([out, retval] FLOAT *pfValue);

        [id(9), propput, helpstring("Display type.")]
            HRESULT DisplayType([in] DisplayTypeConstants eDisplayType);

        [id(9), propget]
            HRESULT DisplayType([out, retval] DisplayTypeConstants *peDisplayType);

        [id(10), propput, helpstring("Manual update.")]
            HRESULT ManualUpdate([in] boolean bState);

        [id(10), propget]
            HRESULT ManualUpdate([out, retval] boolean *pbState);

        [id(11), propput, helpstring("Graph title.")]
            HRESULT GraphTitle([in] BSTR bsTitle);

        [id(11), propget]
            HRESULT GraphTitle([out, retval] BSTR *pbsTitle);

        [id(12), propput, helpstring("Y axis label.")]
            HRESULT YAxisLabel([in] BSTR bsTitle);

        [id(12), propget]
            HRESULT YAxisLabel([out, retval] BSTR *pbsTitle);

        //Beta 1: [id(13), propget, helpstring("Counter collection.")]

        [id(14), helpstring("Collect sample for each counter.")]        
            HRESULT CollectSample(void);

        [id(15), helpstring("Apply visual changes to graph.")]
            HRESULT UpdateGraph(void);

        [id(16), helpstring("Display counter browser.")]
            HRESULT BrowseCounters(void);

        [id(17), helpstring("Display properties.")]
            HRESULT DisplayProperties(void);

        [id(18), hidden]
            HRESULT Counter([in] INT iIndex, [out] ICounterItem **ppICounter);

        [id(19), hidden]
            HRESULT AddCounter([in] BSTR bsPath, [out] ICounterItem **ppICounter);

        [id(20), hidden]
            HRESULT DeleteCounter([in] ICounterItem *pCtr);

        [id(21), propget, helpstring("Control panel background color.")]
            HRESULT BackColorCtl([out, retval] OLE_COLOR *pColor);
        
        [id(21), propput]
            HRESULT BackColorCtl([in] OLE_COLOR Color);

        [id(22), propput, helpstring("Log file name.")]
            HRESULT LogFileName([in] BSTR bsFileName);

        [id(22), propget]
            HRESULT LogFileName([out, retval] BSTR *bsFileName);

        [id(23), propput, helpstring("Start time of log file view.")]
            HRESULT LogViewStart([in] DATE StartTime);

        [id(23), propget]
            HRESULT LogViewStart([out, retval] DATE *StartTime);

        [id(24), propput, helpstring("Stop time of log file view.")]
            HRESULT LogViewStop([in] DATE StopTime);
            
        [id(24), propget]
            HRESULT LogViewStop([out, retval] DATE *StopTime); 

        [id(25), propget, helpstring("Graph grid color.")]
            HRESULT GridColor([out, retval] OLE_COLOR *pColor);
        
        [id(25), propput]
            HRESULT GridColor([in] OLE_COLOR Color);

        [id(26), propget, helpstring("Graph time bar color.")]
            HRESULT TimeBarColor([out, retval] OLE_COLOR *pColor);
        
        [id(26), propput]
            HRESULT TimeBarColor([in] OLE_COLOR Color);

        [id(27), propget, helpstring("Highlight the selected counter..")]
            HRESULT Highlight([out, retval] boolean *pbState);
        
        [id(27), propput]
            HRESULT Highlight([in] boolean bState);

        [id(28), propget, helpstring("Show the toolbar")]
            HRESULT ShowToolbar([out, retval] boolean *pbState);

        [id(28), propput]
            HRESULT ShowToolbar([in] boolean bState);

        [id(29), helpstring("Paste Counters from clipboard.")]
            HRESULT Paste (void);

        [id(30), helpstring("Copy Counters to clipboard.")]
            HRESULT Copy (void);

        [id(31), helpstring("Delete all counters in the control.")]
            HRESULT Reset (void);

        [id(32), propput, helpstring("Disallow property modifications.")]
            HRESULT ReadOnly([in] boolean bState);

        [id(32), propget]
            HRESULT ReadOnly([out, retval] boolean *pbState);

        [id(33), propput, helpstring("Report value.")]
            HRESULT ReportValueType([in] ReportValueTypeConstants eReportValueType);

        [id(33), propget]
            HRESULT ReportValueType([out, retval] ReportValueTypeConstants *peReportValueType);

        [id(34), propput, helpstring("Allow monitoring of duplicate counter instances.")]
            HRESULT MonitorDuplicateInstances([in] boolean bState);

        [id(34), propget]
            HRESULT MonitorDuplicateInstances([out, retval] boolean* pbState);

        [id(35), propput, helpstring("Number of samples per display interval.")]
            HRESULT DisplayFilter([in] INT iValue);

        [id(35), propget]
            HRESULT DisplayFilter([out, retval] INT* piValue);

        [id(36), propget, helpstring("The log file collection.")]
            HRESULT LogFiles([out, retval] ILogFiles** ppILogFiles);

        [id(37), propput, helpstring("Data source type.")]
            HRESULT DataSourceType([in] DataSourceTypeConstants eDataSourceType);

        [id(37), propget]
            HRESULT DataSourceType([out, retval] DataSourceTypeConstants *peDataSourceType);

        [id(38), propput, helpstring("SQL DSN name.")]
            HRESULT SqlDsnName([in] BSTR bsSqlDsnName);

        [id(38), propget]
            HRESULT SqlDsnName([out, retval] BSTR *bsSqlDsnName);

        [id(39), propput, helpstring("SQL logset name.")]
            HRESULT SqlLogSetName([in] BSTR bsSqlLogSetName);

        [id(39), propget]
            HRESULT SqlLogSetName([out, retval] BSTR *bsSqlLogSetName);

        }

    //
    //DIID_DISystemMonitorInternal
    //
    [
    uuid(194EB242-C32C-11cf-9398-00AA00A3DDEA)
        , hidden
        , helpstring("Definition of dispinterface DISystemMonitorInternal`")
    ]
    dispinterface DISystemMonitorInternal
        {
        interface ISystemMonitor;
        }

    //DIID_DISystemMonitor
 
    [
    uuid(13D73D81-C32E-11cf-9398-00AA00A3DDEA)
        , hidden
        , helpstring("Definition of dispinterface DISystemMonitor")
    ]
    dispinterface DISystemMonitor
        {
        
    properties:

        [id(DISPID_APPEARANCE), helpstring("The appearance.")] INT Appearance;

        [id(DISPID_BACKCOLOR), helpstring("The background color.")] OLE_COLOR BackColor;
        
        [id(DISPID_BORDERSTYLE), helpstring("The border style.")] INT BorderStyle;

        [id(DISPID_FORECOLOR), helpstring("The foreground color.")] OLE_COLOR ForeColor;

        [id(DISPID_FONT), helpstring("The font for all text.")] IFontDisp *Font;

        [id(1), helpstring("Show vertical grid.")] boolean ShowVerticalGrid;

        [id(2), helpstring("Show horizontal grid.")] boolean ShowHorizontalGrid;

        [id(3), helpstring("Show counters legend.")] boolean ShowLegend;

        [id(4), helpstring("Show scale labels.")] boolean ShowScaleLabels;

        [id(5), helpstring("Show value bar.")] boolean ShowValueBar;

        [id(6), helpstring("Maximum scale value.")] INT MaximumScale;

        [id(7), helpstring("Minimum scale value.")] INT MinimumScale;

        [id(8), helpstring("Data sample interval.")] FLOAT UpdateInterval;

        [id(9), helpstring("Display type.")] DisplayTypeConstants DisplayType;

        [id(10), helpstring("Manual update.")] boolean ManualUpdate;

        [id(11), helpstring("Graph title.")] BSTR GraphTitle;

        [id(12), helpstring("Y axis label.")] BSTR YAxisLabel;
        
        [id(DISPID_VALUE), helpstring("The counter collection.")] ICounters *Counters;
        //[id(13)] ICounters *Counters;

        [id(21), helpstring("Control panel background color.")] OLE_COLOR BackColorCtl;

        [id(22), helpstring("Log file name.")] BSTR LogFileName;
        
        [id(23), helpstring("Start time of log file view.")] DATE LogViewStart;

        [id(24), helpstring("Stop time of log file view.")] DATE LogViewStop;

        [id(25), helpstring("Graph grid color.")] OLE_COLOR GridColor;

        [id(26), helpstring("Graph time bar color.")] OLE_COLOR TimeBarColor;

        [id(27), helpstring("Highlight the selected counter.")] boolean Highlight;

        [id(28), helpstring("Show the toolbar")] boolean ShowToolbar;

        [id(32), helpstring("Disallow property modifications.")] boolean ReadOnly;

        [id(33), helpstring("Report value.")] ReportValueTypeConstants ReportValueType;

        [id(34), helpstring("Allow monitoring of duplicate counter instances.")] boolean MonitorDuplicateInstances;

        [id(35), helpstring("Number of samples per display interval.")] INT DisplayFilter;

        [id(36), helpstring("The log file collection.")] ILogFiles* LogFiles;

        [id(37), helpstring("Data source type.")] DataSourceTypeConstants DataSourceType;
        [id(38), helpstring("SQL DSN name.")] BSTR SqlDsnName;
        [id(39), helpstring("SQL logset name.")] BSTR SqlLogSetName;

    methods:
        [id(14), helpstring("Collect sample for each counter.")]        
            void CollectSample(void);

        [id(15), helpstring("Apply visual changes to graph.")]
            void UpdateGraph(void);

        [id(16), helpstring("Display counter browser.")]
            void BrowseCounters(void);

        [id(17), helpstring("Display properties.")]
            void DisplayProperties(void);
/*
        [id(18), hidden]
            void Counter([in] INT iIndex, [out] ICounterItem **ppICounter);

        [id(19), hidden]
            void AddCounter([in] BSTR bsPath, [out] ICounterItem **ppICounter);

        [id(20), hidden]
            void DeleteCounter([in] ICounterItem *pCtr);
*/
        [id(29), helpstring("Paste Counters from clipboard.")]
            void Paste (void);

        [id(30), helpstring("Copy Counters to clipboard.")]
            void Copy (void);

        [id(31), helpstring("Delete all counters in the control.")]
            void Reset (void);

        }


     //IID_ISystemMonitorEvents
     [
     uuid(EE660EA0-4ABD-11cf-943A-008029004347)
         , helpstring("System Monitor Events")
         , odl
     ]
     interface ISystemMonitorEvents : IUnknown
         {
        [id(1), helpstring("A counter was selected.")]
            void OnCounterSelected([in] INT Index);

        [id(2), helpstring("A counter was added.")]
            void OnCounterAdded([in] INT Index);

        [id(3), helpstring("A counter was deleted.")]
            void OnCounterDeleted([in] INT Index);

        [id(4), helpstring("A sample of all counter values was collected.")]
            void OnSampleCollected(void);

        [id(5), helpstring("The left mouse button was double clicked.")]
            void OnDblClick([in] INT Index);
         }
 

    //
    // DIID_DISystemMonitorEvents
    //
    [
    uuid(84979930-4AB3-11cf-943A-008029004347)
        , helpstring("System Monitor Events")
    ]
    dispinterface DISystemMonitorEvents
        {
        properties:

        methods:

        [id(1), helpstring("A counter was selected.")]
            void OnCounterSelected([in] INT iIndex);

        [id(2), helpstring("A counter was added.")]
            void OnCounterAdded([in] INT iIndex);

        [id(3), helpstring("A counter was deleted.")]
            void OnCounterDeleted([in] INT iIndex);

        [id(4), helpstring("A sample of all counter values was collected.")]
            void OnSampleCollected(void);

        [id(5), helpstring("The left mouse button was double clicked.")]
            void OnDblClick([in ] INT Index);
        }

    //
    // CLSID_SystemMonitor                  
    //
    [
    uuid(C4D2D8E0-D1DD-11ce-940F-008029004347)
        , helpstring("System Monitor Control Type Information")
        , control
    ]
    coclass SystemMonitor
        {
        [default] dispinterface DISystemMonitor;
        interface     ISystemMonitor;
        [default, source] dispinterface DISystemMonitorEvents;
        }

    //
    //  CLSID_CounterItem
    // 
    [
    uuid(C4D2D8E0-D1DD-11ce-940F-008029004348)
        , helpstring("System Monitor Counter Item Type Information")
        , control
    ]
    coclass CounterItem
        {
        [default] dispinterface DICounterItem;
        interface     ICounterItem;
        }

    //
    //  CLSID_Counters
    // 
    [
    uuid(B2B066D2-2AAC-11cf-942F-008029004347)
        , helpstring("System Monitor Counter Collection Type Information")
    ]
    coclass Counters
        {
        interface ICounters;
        }

    //
    //  CLSID_LogFileItem
    // 
    [
    uuid(16EC5BE8-DF93-4237-94E4-9EE918111D71)
        , helpstring("System Monitor Log File Item Type Information")
        , control
    ]
    coclass LogFileItem
        {
        [default] dispinterface DILogFileItem;
        interface     ILogFileItem;
        }

    //
    //  CLSID_LogFiles
    // 
    [
    uuid(2735D9FD-F6B9-4f19-A5D9-E2D068584BC5)
        , helpstring("System Monitor Log File Collection Type Information")
    ]
    coclass LogFiles
        {
        interface ILogFiles;
        }

    };