aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Editor.h
diff options
context:
space:
mode:
authornyamatongwe <unknown>2000-03-08 01:43:56 +0000
committernyamatongwe <unknown>2000-03-08 01:43:56 +0000
commitc196d2fc7c3ece7ccb7d89c425499a75ead7e59b (patch)
tree3ea3c536f04e88499b86ed82e8a9a457f96b4978 /src/Editor.h
parent7fbd8e2a34d2f5084ce26ad95d7c70ae4de6a233 (diff)
downloadscintilla-mirror-c196d2fc7c3ece7ccb7d89c425499a75ead7e59b.tar.gz
Initial revision
Diffstat (limited to 'src/Editor.h')
-rw-r--r--src/Editor.h281
1 files changed, 281 insertions, 0 deletions
diff --git a/src/Editor.h b/src/Editor.h
new file mode 100644
index 000000000..4ff334767
--- /dev/null
+++ b/src/Editor.h
@@ -0,0 +1,281 @@
+// Scintilla source code edit control
+// Editor.h - defines the main editor class
+// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
+// The License.txt file describes the conditions under which this software may be distributed.
+
+#ifndef EDITOR_H
+#define EDITOR_H
+
+class Caret {
+public:
+ bool active;
+ bool on;
+ int period;
+
+ Caret();
+};
+
+class Timer {
+
+public:
+ bool ticking;
+ int ticksToWait;
+ enum {tickSize = 100};
+ int tickerID;
+
+ Timer();
+};
+
+class LineLayout {
+public:
+ // Drawing is only performed for maxLineLength characters on each line.
+ enum {maxLineLength = 4000};
+ int numCharsInLine;
+ char chars[maxLineLength];
+ char styles[maxLineLength];
+ char indicators[maxLineLength];
+ int positions[maxLineLength];
+};
+
+class Editor : public DocWatcher {
+protected: // ScintillaBase subclass needs access to much of Editor
+
+ // On GTK+, Scintilla is a container widget holding two scroll bars and a drawing area
+ // whereas on Windows there is just one window with both scroll bars turned on.
+ // Therefore, on GTK+ the following are separate windows but only one window on Windows.
+ Window wMain; // The Scintilla parent window
+ Window wDraw; // The text drawing area
+
+ // Style resources may be expensive to allocate so are cached between uses.
+ // When a style attribute is changed, this cache is flushed.
+ bool stylesValid;
+ ViewStyle vs;
+ Palette palette;
+
+ bool hideSelection;
+ bool inOverstrike;
+
+ // In bufferedDraw mode, graphics operations are drawn to a pixmap and then copied to
+ // the screen. This avoids flashing but is about 30% slower.
+ bool bufferedDraw;
+
+ int xOffset; // Horizontal scrolled amount in pixels
+ int xCaretMargin; // Ensure this many pixels visible on both sides of caret
+
+ Surface pixmapLine;
+ Surface pixmapSelMargin;
+ Surface pixmapSelPattern;
+ // Intellimouse support - currently only implemented for Windows
+ unsigned int ucWheelScrollLines;
+ short cWheelDelta; //wheel delta from roll
+
+ KeyMap kmap;
+
+ Caret caret;
+ Timer timer;
+
+ Point lastClick;
+ unsigned int lastClickTime;
+ enum { selChar, selWord, selLine } selectionType;
+ Point ptMouseLast;
+ bool firstExpose;
+ bool inDragDrop;
+ bool dropWentOutside;
+ int posDrag;
+ int posDrop;
+ int lastXChosen;
+ int lineAnchor;
+ int originalAnchorPos;
+ int currentPos;
+ int anchor;
+ int topLine;
+ int posTopLine;
+
+ bool needUpdateUI;
+ Position braces[2];
+ int bracesMatchStyle;
+
+ int edgeState;
+ int theEdge;
+
+ enum { notPainting, painting, paintAbandoned } paintState;
+ PRectangle rcPaint;
+ bool paintingAllText;
+
+ int modEventMask;
+
+ char *dragChars;
+ int lenDrag;
+ bool dragIsRectangle;
+ enum { selStream, selRectangle, selRectangleFixed } selType;
+ int xStartSelect;
+ int xEndSelect;
+
+ int caretPolicy;
+ int caretSlop;
+
+ int searchAnchor;
+
+#ifdef MACRO_SUPPORT
+ int recordingMacro;
+#endif
+
+ int foldFlags;
+ ContractionState cs;
+
+ Document *pdoc;
+
+ Editor();
+ virtual ~Editor();
+ virtual void Initialise() = 0;
+ virtual void Finalise();
+
+ void InvalidateStyleData();
+ void InvalidateStyleRedraw();
+ virtual void RefreshColourPalette(Palette &pal, bool want);
+ void RefreshStyleData();
+ void DropGraphics();
+
+ PRectangle GetClientRectangle();
+ PRectangle GetTextRectangle();
+
+ int LinesOnScreen();
+ int LinesToScroll();
+ int MaxScrollPos();
+ Point LocationFromPosition(unsigned int pos);
+ int XFromPosition(unsigned int pos);
+ int PositionFromLocation(Point pt);
+ int PositionFromLineX(int line, int x);
+ int LineFromLocation(Point pt);
+ void SetTopLine(int topLineNew);
+
+ void RedrawRect(PRectangle rc);
+ void Redraw();
+ void RedrawSelMargin();
+ PRectangle RectangleFromRange(int start, int end);
+ void InvalidateRange(int start, int end);
+
+ int CurrentPosition();
+ bool SelectionEmpty();
+ int SelectionStart(int line=-1);
+ int SelectionEnd(int line=-1);
+ void SetSelection(int currentPos_, int anchor_);
+ void SetSelection(int currentPos_);
+ void SetEmptySelection(int currentPos_);
+ int MovePositionTo(int newPos, bool extend = false);
+ int MovePositionSoVisible(int pos, int moveDir);
+ void SetLastXChosen();
+
+ void ScrollTo(int line);
+ virtual void ScrollText(int linesToMove);
+ void HorizontalScrollTo(int xPos);
+ void EnsureCaretVisible(bool useMargin=true);
+ void ShowCaretAtCurrentPosition();
+ void DropCaret();
+ void InvalidateCaret();
+
+ void PaintSelMargin(Surface *surface, PRectangle &rc);
+ void LayoutLine(int line, Surface *surface, ViewStyle &vstyle, LineLayout &ll);
+ void DrawLine(Surface *surface, ViewStyle &vsDraw, int line, int xStart,
+ PRectangle rcLine, LineLayout &ll);
+ void Paint(Surface *surfaceWindow, PRectangle rcArea);
+ long FormatRange(bool draw, FORMATRANGE *pfr);
+
+ virtual void SetVerticalScrollPos() = 0;
+ virtual void SetHorizontalScrollPos() = 0;
+ virtual bool ModifyScrollBars(int nMax, int nPage) = 0;
+ void SetScrollBarsTo(PRectangle rsClient);
+ void SetScrollBars();
+
+ virtual void AddChar(char ch);
+ void ClearSelection();
+ void ClearAll();
+ void Cut();
+ void PasteRectangular(int pos, const char *ptr, int len);
+ virtual void Copy() = 0;
+ virtual void Paste() = 0;
+ void Clear();
+ void SelectAll();
+ void Undo();
+ void Redo();
+ void DelChar();
+ void DelCharBack();
+ virtual void ClaimSelection() = 0;
+
+ virtual void NotifyChange() = 0;
+ virtual void NotifyFocus(bool focus);
+ virtual void NotifyParent(SCNotification scn) = 0;
+ virtual void NotifyStyleNeeded(int endStyleNeeded);
+ void NotifyChar(char ch);
+ void NotifySavePoint(bool isSavePoint);
+ void NotifyModifyAttempt();
+ virtual void NotifyDoubleClick(Point pt, bool shift);
+ void NotifyUpdateUI();
+ bool NotifyMarginClick(Point pt, bool shift, bool ctrl, bool alt);
+ void NotifyNeedShown(int pos, int len);
+
+ void NotifyModifyAttempt(Document *document, void *userData);
+ void NotifySavePoint(Document *document, void *userData, bool atSavePoint);
+ void NotifyModified(Document *document, DocModification mh, void *userData);
+ void NotifyDeleted(Document *document, void *userData);
+
+#ifdef MACRO_SUPPORT
+ void NotifyMacroRecord(UINT iMessage, WPARAM wParam, LPARAM lParam);
+#endif
+
+ void PageMove(int direction, bool extend=false);
+ virtual int KeyCommand(UINT iMessage);
+ virtual int KeyDefault(int /* key */, int /*modifiers*/);
+ int KeyDown(int key, bool shift, bool ctrl, bool alt);
+
+ bool GetWhitespaceVisible();
+ void SetWhitespaceVisible(bool view);
+
+ void Indent(bool forwards);
+
+ long FindText(UINT iMessage,WPARAM wParam,LPARAM lParam);
+ void SearchAnchor();
+ long SearchText(UINT iMessage,WPARAM wParam,LPARAM lParam);
+ void GoToLine(int lineNo);
+
+ char *CopyRange(int start, int end);
+ int SelectionRangeLength();
+ char *CopySelectionRange();
+ void CopySelectionIntoDrag();
+ void SetDragPosition(int newPos);
+ virtual void StartDrag();
+ void DropAt(int position, const char *value, bool moving, bool rectangular);
+ // PositionInSelection returns 0 if position in selection, -1 if position before selection, and 1 if after.
+ // Before means either before any line of selection or before selection on its line, with a similar meaning to after
+ int PositionInSelection(int pos);
+ bool PointInSelection(Point pt);
+ bool PointInSelMargin(Point pt);
+ virtual void ButtonDown(Point pt, unsigned int curTime, bool shift, bool ctrl, bool alt);
+ void ButtonMove(Point pt);
+ void ButtonUp(Point pt, unsigned int curTime, bool ctrl);
+
+ void Tick();
+ virtual void SetTicking(bool on) = 0;
+ virtual void SetMouseCapture(bool on) = 0;
+ virtual bool HaveMouseCapture() = 0;
+
+ void CheckForChangeOutsidePaint(Range r);
+ int BraceMatch(int position, int maxReStyle);
+ void SetBraceHighlight(Position pos0, Position pos1, int matchStyle);
+
+ void SetDocPointer(Document *document);
+
+ void Expand(int &line, bool doExpand);
+ void ToggleContraction(int line);
+ void EnsureLineVisible(int line);
+
+ virtual LRESULT DefWndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) = 0;
+
+public:
+ // Public so scintilla_send_message can use it
+ virtual LRESULT WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam);
+ // Public so scintilla_set_id can use it
+ int ctrlID;
+};
+
+#endif