| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/caret.h
 
- // Purpose:     wxCaretBase class - the interface of wxCaret
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     23.05.99
 
- // Copyright:   (c) wxWidgets team
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_CARET_H_BASE_
 
- #define _WX_CARET_H_BASE_
 
- #include "wx/defs.h"
 
- #if wxUSE_CARET
 
- // ---------------------------------------------------------------------------
 
- // forward declarations
 
- // ---------------------------------------------------------------------------
 
- class WXDLLIMPEXP_FWD_CORE wxWindow;
 
- class WXDLLIMPEXP_FWD_CORE wxWindowBase;
 
- // ----------------------------------------------------------------------------
 
- // headers we have to include
 
- // ----------------------------------------------------------------------------
 
- #include "wx/gdicmn.h"  // for wxPoint, wxSize
 
- // ----------------------------------------------------------------------------
 
- // A caret is a blinking cursor showing the position where the typed text will
 
- // appear. It can be either a solid block or a custom bitmap (TODO)
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_CORE wxCaretBase
 
- {
 
- public:
 
-     // ctors
 
-     // -----
 
-         // default - use Create
 
-     wxCaretBase() { Init(); }
 
-         // create the caret of given (in pixels) width and height and associate
 
-         // with the given window
 
-     wxCaretBase(wxWindowBase *window, int width, int height)
 
-     {
 
-         Init();
 
-         (void)Create(window, width, height);
 
-     }
 
-         // same as above
 
-     wxCaretBase(wxWindowBase *window, const wxSize& size)
 
-     {
 
-         Init();
 
-         (void)Create(window, size);
 
-     }
 
-     // a virtual dtor has been provided since this class has virtual members
 
-     virtual ~wxCaretBase() { }
 
-     // Create() functions - same as ctor but returns the success code
 
-     // --------------------------------------------------------------
 
-         // same as ctor
 
-     bool Create(wxWindowBase *window, int width, int height)
 
-         { return DoCreate(window, width, height); }
 
-         // same as ctor
 
-     bool Create(wxWindowBase *window, const wxSize& size)
 
-         { return DoCreate(window, size.x, size.y); }
 
-     // accessors
 
-     // ---------
 
-         // is the caret valid?
 
-     bool IsOk() const { return m_width != 0 && m_height != 0; }
 
-         // is the caret currently shown?
 
-     bool IsVisible() const { return m_countVisible > 0; }
 
-         // get the caret position
 
-     void GetPosition(int *x, int *y) const
 
-     {
 
-         if ( x ) *x = m_x;
 
-         if ( y ) *y = m_y;
 
-     }
 
-     wxPoint GetPosition() const { return wxPoint(m_x, m_y); }
 
-         // get the caret size
 
-     void GetSize(int *width, int *height) const
 
-     {
 
-         if ( width ) *width = m_width;
 
-         if ( height ) *height = m_height;
 
-     }
 
-     wxSize GetSize() const { return wxSize(m_width, m_height); }
 
-         // get the window we're associated with
 
-     wxWindow *GetWindow() const { return (wxWindow *)m_window; }
 
-         // change the size of the caret
 
-     void SetSize(int width, int height) {
 
-         m_width = width;
 
-         m_height = height;
 
-         DoSize();
 
-     }
 
-     void SetSize(const wxSize& size) { SetSize(size.x, size.y); }
 
-     // operations
 
-     // ----------
 
-         // move the caret to given position (in logical coords)
 
-     void Move(int x, int y) { m_x = x; m_y = y; DoMove(); }
 
-     void Move(const wxPoint& pt) { m_x = pt.x; m_y = pt.y; DoMove(); }
 
-         // show/hide the caret (should be called by wxWindow when needed):
 
-         // Show() must be called as many times as Hide() + 1 to make the caret
 
-         // visible
 
-     virtual void Show(bool show = true)
 
-         {
 
-             if ( show )
 
-             {
 
-                 if ( m_countVisible++ == 0 )
 
-                     DoShow();
 
-             }
 
-             else
 
-             {
 
-                 if ( --m_countVisible == 0 )
 
-                     DoHide();
 
-             }
 
-         }
 
-     virtual void Hide() { Show(false); }
 
-         // blink time is measured in milliseconds and is the time elapsed
 
-         // between 2 inversions of the caret (blink time of the caret is common
 
-         // to all carets in the Universe, so these functions are static)
 
-     static int GetBlinkTime();
 
-     static void SetBlinkTime(int milliseconds);
 
-     // implementation from now on
 
-     // --------------------------
 
-     // these functions should be called by wxWindow when the window gets/loses
 
-     // the focus - we create/show and hide/destroy the caret here
 
-     virtual void OnSetFocus() { }
 
-     virtual void OnKillFocus() { }
 
- protected:
 
-     // these functions may be overridden in the derived classes, but they
 
-     // should call the base class version first
 
-     virtual bool DoCreate(wxWindowBase *window, int width, int height)
 
-     {
 
-         m_window = window;
 
-         m_width = width;
 
-         m_height = height;
 
-         return true;
 
-     }
 
-     // pure virtuals to implement in the derived class
 
-     virtual void DoShow() = 0;
 
-     virtual void DoHide() = 0;
 
-     virtual void DoMove() = 0;
 
-     virtual void DoSize() { }
 
-     // the common initialization
 
-     void Init()
 
-     {
 
-         m_window = NULL;
 
-         m_x = m_y = 0;
 
-         m_width = m_height = 0;
 
-         m_countVisible = 0;
 
-     }
 
-     // the size of the caret
 
-     int m_width, m_height;
 
-     // the position of the caret
 
-     int m_x, m_y;
 
-     // the window we're associated with
 
-     wxWindowBase *m_window;
 
-     // visibility count: the caret is visible only if it's positive
 
-     int m_countVisible;
 
- private:
 
-     wxDECLARE_NO_COPY_CLASS(wxCaretBase);
 
- };
 
- // ---------------------------------------------------------------------------
 
- // now include the real thing
 
- // ---------------------------------------------------------------------------
 
- #if defined(__WXMSW__)
 
-     #include "wx/msw/caret.h"
 
- #else
 
-     #include "wx/generic/caret.h"
 
- #endif // platform
 
- // ----------------------------------------------------------------------------
 
- // wxCaretSuspend: a simple class which hides the caret in its ctor and
 
- // restores it in the dtor, this should be used when drawing on the screen to
 
- // avoid overdrawing the caret
 
- // ----------------------------------------------------------------------------
 
- #ifdef wxHAS_CARET_USING_OVERLAYS
 
- // we don't need to hide the caret if it's rendered using overlays
 
- class WXDLLIMPEXP_CORE wxCaretSuspend
 
- {
 
- public:
 
-     wxCaretSuspend(wxWindow *WXUNUSED(win)) {}
 
-     wxDECLARE_NO_COPY_CLASS(wxCaretSuspend);
 
- };
 
- #else // !wxHAS_CARET_USING_OVERLAYS
 
- class WXDLLIMPEXP_CORE wxCaretSuspend
 
- {
 
- public:
 
-     wxCaretSuspend(wxWindow *win)
 
-     {
 
-         m_caret = win->GetCaret();
 
-         m_show = false;
 
-         if ( m_caret && m_caret->IsVisible() )
 
-         {
 
-             m_caret->Hide();
 
-             m_show = true;
 
-         }
 
-     }
 
-     ~wxCaretSuspend()
 
-     {
 
-         if ( m_caret && m_show )
 
-             m_caret->Show();
 
-     }
 
- private:
 
-     wxCaret *m_caret;
 
-     bool     m_show;
 
-     wxDECLARE_NO_COPY_CLASS(wxCaretSuspend);
 
- };
 
- #endif // wxHAS_CARET_USING_OVERLAYS/!wxHAS_CARET_USING_OVERLAYS
 
- #endif // wxUSE_CARET
 
- #endif // _WX_CARET_H_BASE_
 
 
  |