1////////////////////////////////////////////////////////////////////////////
2// Name:        ScintillaWX.h
3// Purpose:     A wxWidgets implementation of Scintilla.  A class derived
4//              from ScintillaBase that uses the "wx platform" defined in
5//              PlatWX.cpp.  This class is one end of a bridge between
6//              the wx world and the Scintilla world.  It needs a peer
7//              object of type wxStyledTextCtrl to function.
8//
9// Author:      Robin Dunn
10//
11// Created:     13-Jan-2000
12// RCS-ID:      $Id: ScintillaWX.h 55221 2008-08-24 04:06:41Z RD $
13// Copyright:   (c) 2000 by Total Control Software
14// Licence:     wxWindows license
15/////////////////////////////////////////////////////////////////////////////
16
17#ifndef __ScintillaWX_h__
18#define __ScintillaWX_h__
19
20//----------------------------------------------------------------------
21
22#include <ctype.h>
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "Platform.h"
28
29#include "Scintilla.h"
30#include "CharClassify.h"
31#include "XPM.h"
32#ifdef SCI_LEXER
33#include "SciLexer.h"
34#include "PropSet.h"
35#include "Accessor.h"
36#include "KeyWords.h"
37#endif
38#include "ContractionState.h"
39#include "SVector.h"
40#include "CellBuffer.h"
41#include "CallTip.h"
42#include "KeyMap.h"
43#include "Indicator.h"
44#include "LineMarker.h"
45#include "Style.h"
46#include "ViewStyle.h"
47#include "AutoComplete.h"
48#include "Document.h"
49#include "Editor.h"
50#include "ScintillaBase.h"
51
52//----------------------------------------------------------------------
53
54#ifdef WXMAKINGDLL_STC
55    #define WXDLLIMPEXP_STC WXEXPORT
56#elif defined(WXUSINGDLL)
57    #define WXDLLIMPEXP_STC WXIMPORT
58#else // not making nor using DLL
59    #define WXDLLIMPEXP_STC
60#endif
61
62class WXDLLIMPEXP_STC wxStyledTextCtrl;           // forward
63class ScintillaWX;
64
65
66//----------------------------------------------------------------------
67// Helper classes
68
69#if wxUSE_DRAG_AND_DROP
70class wxSTCDropTarget : public wxTextDropTarget {
71public:
72    void SetScintilla(ScintillaWX* swx) {
73        this->swx = swx;
74    }
75
76    bool OnDropText(wxCoord x, wxCoord y, const wxString& data);
77    wxDragResult OnEnter(wxCoord x, wxCoord y, wxDragResult def);
78    wxDragResult OnDragOver(wxCoord x, wxCoord y, wxDragResult def);
79    void OnLeave();
80
81private:
82    ScintillaWX* swx;
83};
84#endif
85
86//----------------------------------------------------------------------
87
88class ScintillaWX : public ScintillaBase {
89public:
90
91    ScintillaWX(wxStyledTextCtrl* win);
92    ~ScintillaWX();
93
94    // base class virtuals
95    virtual void Initialise();
96    virtual void Finalise();
97    virtual void StartDrag();
98    virtual bool SetIdle(bool on);
99    virtual void SetTicking(bool on);
100    virtual void SetMouseCapture(bool on);
101    virtual bool HaveMouseCapture();
102    virtual void ScrollText(int linesToMove);
103    virtual void SetVerticalScrollPos();
104    virtual void SetHorizontalScrollPos();
105    virtual bool ModifyScrollBars(int nMax, int nPage);
106    virtual void Copy();
107    virtual void Paste();
108    virtual void CopyToClipboard(const SelectionText &selectedText);
109
110    virtual void CreateCallTipWindow(PRectangle rc);
111    virtual void AddToPopUp(const char *label, int cmd = 0, bool enabled = true);
112    virtual void ClaimSelection();
113
114    virtual sptr_t DefWndProc(unsigned int iMessage,
115                              uptr_t wParam,
116                              sptr_t lParam);
117    virtual sptr_t WndProc(unsigned int iMessage,
118                           uptr_t wParam,
119                           sptr_t lParam);
120
121    virtual void NotifyChange();
122    virtual void NotifyParent(SCNotification scn);
123
124    virtual void CancelModes();
125
126    virtual void UpdateSystemCaret();
127
128    // Event delegates
129    void DoPaint(wxDC* dc, wxRect rect);
130    void DoHScroll(int type, int pos);
131    void DoVScroll(int type, int pos);
132    void DoSize(int width, int height);
133    void DoLoseFocus();
134    void DoGainFocus();
135    void DoSysColourChange();
136    void DoLeftButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt);
137    void DoLeftButtonUp(Point pt, unsigned int curTime, bool ctrl);
138    void DoLeftButtonMove(Point pt);
139    void DoMiddleButtonUp(Point pt);
140    void DoMouseWheel(int rotation, int delta, int linesPerAction, int ctrlDown, bool isPageScroll);
141    void DoAddChar(int key);
142    int  DoKeyDown(const wxKeyEvent& event, bool* consumed);
143    void DoTick() { Tick(); }
144    void DoOnIdle(wxIdleEvent& evt);
145    void DoStartDrag();
146
147#if wxUSE_DRAG_AND_DROP
148    bool DoDropText(long x, long y, const wxString& data);
149    wxDragResult DoDragEnter(wxCoord x, wxCoord y, wxDragResult def);
150    wxDragResult DoDragOver(wxCoord x, wxCoord y, wxDragResult def);
151    void DoDragLeave();
152#endif
153
154    void DoCommand(int ID);
155    void DoContextMenu(Point pt);
156    void DoOnListBox();
157
158
159    // helpers
160    void FullPaint();
161    bool CanPaste();
162    bool GetHideSelection() { return hideSelection; }
163    void DoScrollToLine(int line);
164    void DoScrollToColumn(int column);
165    void ClipChildren(wxDC& dc, PRectangle rect);
166    void SetUseAntiAliasing(bool useAA);
167    bool GetUseAntiAliasing();
168
169private:
170    bool                capturedMouse;
171    bool                focusEvent;
172    wxStyledTextCtrl*   stc;
173
174#if wxUSE_DRAG_AND_DROP
175    wxSTCDropTarget*    dropTarget;
176    wxDragResult        dragResult;
177    wxTimer*            startDragTimer;
178#endif
179
180    int                 wheelRotation;
181
182    // For use in creating a system caret
183    bool HasCaretSizeChanged();
184    bool CreateSystemCaret();
185    bool DestroySystemCaret();
186#ifdef __WXMSW__
187    HBITMAP sysCaretBitmap;
188    int sysCaretWidth;
189    int sysCaretHeight;
190#endif
191
192    friend class wxSTCCallTip;
193};
194
195//----------------------------------------------------------------------
196#endif
197