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