1/////////////////////////////////////////////////////////////////////////////
2// Name:        hintanimpl.h
3// Purpose:     Header for cbHintAnimationPlugin class.
4// Author:      Aleksandras Gluchovas
5// Modified by:
6// Created:     9/11/98
7// RCS-ID:      $Id: hintanimpl.h 35650 2005-09-23 12:56:45Z MR $
8// Copyright:   (c) Aleksandras Gluchovas
9// Licence:     wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef __HINTANIMPL_G__
13#define __HINTANIMPL_G__
14
15#include "wx/fl/controlbar.h"
16
17#include "wx/timer.h"
18
19class WXDLLIMPEXP_FL cbHintAnimTimer;
20
21/*
22A plugin to draw animated hints when the user drags a pane.
23*/
24
25class WXDLLIMPEXP_FL cbHintAnimationPlugin : public cbPluginBase
26{
27    DECLARE_DYNAMIC_CLASS( cbHintAnimationPlugin )
28protected:
29    friend class cbHintAnimTimer;
30
31    wxScreenDC*      mpScrDc;     // created while tracking hint-rect
32    cbHintAnimTimer* mpAnimTimer;
33
34    // FOR NOW:: try it without mutually exculisve locks
35    volatile wxRect  mCurRect;
36
37    // state variables
38
39    bool   mAnimStarted;
40    bool   mStopPending;
41
42    bool   mPrevInClient;
43    bool   mCurInClient;
44
45    wxRect mPrevRect;
46
47public:
48    int    mMorphDelay;         // delay between frames in miliseconds,     default: 20
49    int    mMaxFrames;          // number  of iterations for hint morphing, default: 30
50                                // (morph duration = mMorphDelay * mMaxFrames msec)
51
52    int    mInClientHintBorder; // default: 4 pixels
53
54    bool   mAccelerationOn;     // true, if morph accelerates, otherwise morph
55                                // speed is constant. Default: true
56
57    // TBD:: get/set methods for above members
58
59protected:
60
61        // Internal function for starting tracking.
62    void StartTracking();
63
64        // Internal function for drawing a hint rectangle.
65    void DrawHintRect ( wxRect& rect, bool isInClientRect);
66
67        // Internal function for erasing a hint rectangle.
68    void EraseHintRect( wxRect& rect, bool isInClientRect);
69
70        // Internal function for finishing tracking.
71    void FinishTracking();
72
73        // Internal function for drawing a hint rectangle.
74    void DoDrawHintRect( wxRect& rect, bool isInClientRect);
75
76        // Internal function for translating coordinates.
77    void RectToScr( wxRect& frameRect, wxRect& scrRect );
78
79public:
80        // Default constructor.
81    cbHintAnimationPlugin();
82
83        // Constructor, taking a layout panel and pane mask.
84    cbHintAnimationPlugin( wxFrameLayout* pPanel, int paneMask = wxALL_PANES );
85
86        // Destructor.
87    ~cbHintAnimationPlugin();
88
89        // Event handler respoding to hint draw events.
90    void OnDrawHintRect( cbDrawHintRectEvent& event );
91
92    DECLARE_EVENT_TABLE()
93};
94
95
96/*
97A private helper class.
98*/
99
100struct WXDLLIMPEXP_FL MorphInfoT
101{
102    wxPoint mFrom;
103    wxPoint mTill;
104};
105
106/*
107A private helper class.
108*/
109
110class WXDLLIMPEXP_FL cbHintAnimTimer : public wxTimer
111{
112protected:
113
114    friend class cbHintAnimationPlugin;
115
116    wxRect      mPrevMorphed;
117
118    MorphInfoT  mUpperLeft;
119    MorphInfoT  mLowerRight;
120    int         mCurIter;
121
122    long        mLock;
123
124    cbHintAnimationPlugin* mpPl;
125
126    void MorphPoint( wxPoint& origin, MorphInfoT& info, wxPoint& point );
127
128public:
129
130    cbHintAnimTimer(void);
131
132    virtual void Notify(void);
133
134    virtual bool Init( cbHintAnimationPlugin* pAnimPl, bool reinit );
135};
136
137#endif /* __HINTANIMPL_G__ */
138
139