/*++

Copyright (C) 1996-1999 Microsoft Corporation

Module Name:

    intrvbar.h

Abstract:

    Definition of the interval bar class used by the CTimeRange class.

--*/

#ifndef _INTRVBAR_H_
#define _INTRVBAR_H_

class CIntervalBar {

    friend LRESULT APIENTRY IntervalBarWndProc (
        HWND hWnd,
        UINT uiMsg,
        WPARAM wParam,
        LPARAM lParam
        );

    private:
        enum {
        ModeNone,
        ModeLeft,
        ModeRight,
        ModeCenter
        };

       HWND           m_hWnd ;
       INT            m_iBeginValue ;        // user-supplied lowest range
       INT            m_iEndValue ;          // user-supplied highest range
       INT            m_iStartValue ;        // current start of selected interval
       INT            m_iStopValue ;         // current end of selected interval

       RECT           m_rectBorder ;
       RECT           m_rectLeftBk ;
       RECT           m_rectLeftGrab ;
       RECT           m_rectCenterGrab ;
       RECT           m_rectRightGrab ;
       RECT           m_rectRightBk ;

       HBRUSH         m_hBrushBk ;

       POINTS         m_ptsMouse ;
       INT            m_iMode ;              // who is being tracked?

       void NotifyChange ( void );
       BOOL GrabRect ( LPRECT lpRect );
       void DrawGrab (HDC hDC, LPRECT lprectGrab, BOOL bDown );
       INT  ValueToPixel ( INT iValue );
       INT  PixelToValue ( INT xPixel );
       void CalcPositions ( void );
       void Draw ( HDC hDC, LPRECT lprectUpdate );
       void MoveLeftRight ( BOOL bStart, BOOL bLeft, INT iMoveAmt );
       void StartGrab ( void );
       void EndGrab ( void );
       void Update ( void );

       BOOL OnKeyDown ( WPARAM wParam );
       void OnLButtonDown ( POINTS ptsMouse );
       void OnLButtonUp ( void );
       void OnMouseMove ( POINTS ptsMouse );

       
    public:
        CIntervalBar ( void );
        ~CIntervalBar ( void );
        BOOL Init ( HWND hWndParent );
        HWND Window ( void ) { return m_hWnd; }

        void SetRange ( INT iBegin, INT iEnd );
        void SetStart ( INT iStart );
        void SetStop  ( INT iStop );

        INT  Start ( void ) { return m_iStartValue; }
        INT  Stop  ( void ) { return m_iStopValue; }
        INT  XStart ( void ) { return m_rectLeftGrab.left; }
        INT  XStop  ( void ) { return m_rectRightGrab.right; }

};

typedef CIntervalBar *PCIntervalBar ;


//==========================================================================//
//                                  Constants                               //
//==========================================================================//

#define ILN_SELCHANGED        (WM_USER + 0x200)

#endif