aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Editor.h
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-05-24 19:31:06 +1000
committerNeil <nyamatongwe@gmail.com>2021-05-24 19:31:06 +1000
commit92290868cf9753d2df0d494cb44e2ff62a570b58 (patch)
tree001e6cfce84372a03997de3138d630751ee8d38a /src/Editor.h
parentee1886079d0a5cd350ee8e3379be347943ba93ae (diff)
downloadscintilla-mirror-92290868cf9753d2df0d494cb44e2ff62a570b58.tar.gz
Define C++ version of the Scintilla API in ScintillaTypes.h, ScintillaMessages.h
and ScintillaStructures.h using scoped enumerations. Use these headers instead of Scintilla.h internally. External definitions go in the Scintilla namespace and internal definitio0ns in Scintilla::Internal.
Diffstat (limited to 'src/Editor.h')
-rw-r--r--src/Editor.h177
1 files changed, 95 insertions, 82 deletions
diff --git a/src/Editor.h b/src/Editor.h
index 42944929b..08e7d134b 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -8,7 +8,7 @@
#ifndef EDITOR_H
#define EDITOR_H
-namespace Scintilla {
+namespace Scintilla::Internal {
/**
*/
@@ -55,7 +55,7 @@ public:
upTo = 0;
}
void Need(WorkItems items_, Sci::Position pos) noexcept {
- if (FlagSet(items_, WorkItems::style) && (upTo < pos))
+ if (Scintilla::FlagSet(items_, WorkItems::style) && (upTo < pos))
upTo = pos;
items = static_cast<WorkItems>(static_cast<int>(items) | static_cast<int>(items_));
}
@@ -70,16 +70,16 @@ public:
bool rectangular;
bool lineCopy;
int codePage;
- int characterSet;
- SelectionText() noexcept : rectangular(false), lineCopy(false), codePage(0), characterSet(0) {}
+ Scintilla::CharacterSet characterSet;
+ SelectionText() noexcept : rectangular(false), lineCopy(false), codePage(0), characterSet(Scintilla::CharacterSet::Ansi) {}
void Clear() noexcept {
s.clear();
rectangular = false;
lineCopy = false;
codePage = 0;
- characterSet = 0;
+ characterSet = Scintilla::CharacterSet::Ansi;
}
- void Copy(const std::string &s_, int codePage_, int characterSet_, bool rectangular_, bool lineCopy_) {
+ void Copy(const std::string &s_, int codePage_, Scintilla::CharacterSet characterSet_, bool rectangular_, bool lineCopy_) {
s = s_;
codePage = codePage_;
characterSet = characterSet_;
@@ -145,16 +145,25 @@ struct WrapPending {
}
};
-struct CaretPolicy {
- int policy; // Combination from CARET_SLOP, CARET_STRICT, CARET_JUMPS, CARET_EVEN
+struct CaretPolicySlop {
+ Scintilla::CaretPolicy policy; // Combination from CaretPolicy::Slop, CaretPolicy::Strict, CaretPolicy::Jumps, CaretPolicy::Even
int slop; // Pixels for X, lines for Y
- CaretPolicy(uptr_t policy_=0, sptr_t slop_=0) noexcept :
- policy(static_cast<int>(policy_)), slop(static_cast<int>(slop_)) {}
+ CaretPolicySlop(Scintilla::CaretPolicy policy_, intptr_t slop_) noexcept :
+ policy(policy_), slop(static_cast<int>(slop_)) {}
+ CaretPolicySlop(uintptr_t policy_=0, intptr_t slop_=0) noexcept :
+ policy(static_cast<Scintilla::CaretPolicy>(policy_)), slop(static_cast<int>(slop_)) {}
};
struct CaretPolicies {
- CaretPolicy x;
- CaretPolicy y;
+ CaretPolicySlop x;
+ CaretPolicySlop y;
+};
+
+struct VisiblePolicySlop {
+ Scintilla::VisiblePolicy policy; // Combination from VisiblePolicy::Slop, VisiblePolicy::Strict
+ int slop; // Pixels for X, lines for Y
+ VisiblePolicySlop(uintptr_t policy_ = 0, intptr_t slop_ = 0) noexcept :
+ policy(static_cast<Scintilla::VisiblePolicy>(policy_)), slop(static_cast<int>(slop_)) {}
};
enum class XYScrollOptions {
@@ -165,6 +174,10 @@ enum class XYScrollOptions {
all = useMargin | vertical | horizontal
};
+constexpr XYScrollOptions operator|(XYScrollOptions a, XYScrollOptions b) noexcept {
+ return static_cast<XYScrollOptions>(static_cast<int>(a) | static_cast<int>(b));
+}
+
/**
*/
class Editor : public EditModel, public DocWatcher {
@@ -179,14 +192,14 @@ protected: // ScintillaBase subclass needs access to much of Editor
* When a style attribute is changed, this cache is flushed. */
bool stylesValid;
ViewStyle vs;
- int technology;
+ Scintilla::Technology technology;
Point sizeRGBAImage;
float scaleRGBAImage;
MarginView marginView;
EditView view;
- int cursorMode;
+ Scintilla::CursorShape cursorMode;
bool mouseDownCaptures;
bool mouseWheelCaptures;
@@ -196,14 +209,14 @@ protected: // ScintillaBase subclass needs access to much of Editor
int scrollWidth;
bool verticalScrollBarVisible;
bool endAtLastLine;
- int caretSticky;
- int marginOptions;
+ Scintilla::CaretSticky caretSticky;
+ Scintilla::MarginOption marginOptions;
bool mouseSelectionRectangularSwitch;
bool multipleSelection;
bool additionalSelectionTyping;
- int multiPasteMode;
+ Scintilla::MultiPaste multiPasteMode;
- int virtualSpaceOptions;
+ Scintilla::VirtualSpace virtualSpaceOptions;
KeyMap kmap;
@@ -232,12 +245,12 @@ protected: // ScintillaBase subclass needs access to much of Editor
Sci::Position wordSelectAnchorEndPos;
Sci::Position wordSelectInitialCaretPos;
SelectionSegment targetRange;
- int searchFlags;
+ Scintilla::FindOption searchFlags;
Sci::Line topLine;
Sci::Position posTopLine;
Sci::Position lengthForEncode;
- int needUpdateUI;
+ Scintilla::Update needUpdateUI;
enum class PaintState { notPainting, painting, abandoned } paintState;
bool paintAbandonedByStyling;
@@ -245,23 +258,23 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool paintingAllText;
bool willRedrawAll;
WorkNeeded workNeeded;
- int idleStyling;
+ Scintilla::IdleStyling idleStyling;
bool needIdleStyling;
- int modEventMask;
+ Scintilla::ModificationFlags modEventMask;
bool commandEvents;
SelectionText drag;
CaretPolicies caretPolicies;
- CaretPolicy visiblePolicy;
+ VisiblePolicySlop visiblePolicy;
Sci::Position searchAnchor;
bool recordingMacro;
- int foldAutomatic;
+ Scintilla::AutomaticFold foldAutomatic;
// Wrapping support
WrapPending wrapPending;
@@ -317,7 +330,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
void InvalidateRange(Sci::Position start, Sci::Position end);
bool UserVirtualSpace() const noexcept {
- return ((virtualSpaceOptions & SCVS_USERACCESSIBLE) != 0);
+ return (FlagSet(virtualSpaceOptions, Scintilla::VirtualSpace::UserAccessible));
}
Sci::Position CurrentPosition() const;
bool SelectionEmpty() const noexcept;
@@ -389,8 +402,8 @@ protected: // ScintillaBase subclass needs access to much of Editor
void PaintSelMargin(Surface *surfaceWindow, const PRectangle &rc);
void RefreshPixMaps(Surface *surfaceWindow);
void Paint(Surface *surfaceWindow, PRectangle rcArea);
- Sci::Position FormatRange(bool draw, const Sci_RangeToFormat *pfr);
- long TextWidth(uptr_t style, const char *text);
+ Sci::Position FormatRange(bool draw, const Scintilla::RangeToFormat *pfr);
+ long TextWidth(Scintilla::uptr_t style, const char *text);
virtual void SetVerticalScrollPos() = 0;
virtual void SetHorizontalScrollPos() = 0;
@@ -403,7 +416,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
Sci::Position RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace);
SelectionPosition RealizeVirtualSpace(const SelectionPosition &position);
void AddChar(char ch);
- virtual void InsertCharacter(std::string_view sv, CharacterSource charSource);
+ virtual void InsertCharacter(std::string_view sv, Scintilla::CharacterSource charSource);
void ClearBeforeTentativeStart();
void InsertPaste(const char *text, Sci::Position len);
enum class PasteShape { stream=0, rectangular = 1, line = 2 };
@@ -424,25 +437,25 @@ protected: // ScintillaBase subclass needs access to much of Editor
void DelCharBack(bool allowLineStartDeletion);
virtual void ClaimSelection() = 0;
- static int ModifierFlags(bool shift, bool ctrl, bool alt, bool meta=false, bool super=false) noexcept;
+ static Scintilla::KeyMod ModifierFlags(bool shift, bool ctrl, bool alt, bool meta=false, bool super=false) noexcept;
virtual void NotifyChange() = 0;
virtual void NotifyFocus(bool focus);
virtual void SetCtrlID(int identifier);
virtual int GetCtrlID() { return ctrlID; }
- virtual void NotifyParent(SCNotification scn) = 0;
+ virtual void NotifyParent(Scintilla::NotificationData scn) = 0;
virtual void NotifyStyleToNeeded(Sci::Position endStyleNeeded);
- void NotifyChar(int ch, CharacterSource charSource);
+ void NotifyChar(int ch, Scintilla::CharacterSource charSource);
void NotifySavePoint(bool isSavePoint);
void NotifyModifyAttempt();
- virtual void NotifyDoubleClick(Point pt, int modifiers);
- void NotifyHotSpotClicked(Sci::Position position, int modifiers);
- void NotifyHotSpotDoubleClicked(Sci::Position position, int modifiers);
- void NotifyHotSpotReleaseClick(Sci::Position position, int modifiers);
+ virtual void NotifyDoubleClick(Point pt, Scintilla::KeyMod modifiers);
+ void NotifyHotSpotClicked(Sci::Position position, Scintilla::KeyMod modifiers);
+ void NotifyHotSpotDoubleClicked(Sci::Position position, Scintilla::KeyMod modifiers);
+ void NotifyHotSpotReleaseClick(Sci::Position position, Scintilla::KeyMod modifiers);
bool NotifyUpdateUI();
void NotifyPainted();
- void NotifyIndicatorClick(bool click, Sci::Position position, int modifiers);
- bool NotifyMarginClick(Point pt, int modifiers);
- bool NotifyMarginRightClick(Point pt, int modifiers);
+ void NotifyIndicatorClick(bool click, Sci::Position position, Scintilla::KeyMod modifiers);
+ bool NotifyMarginClick(Point pt, Scintilla::KeyMod modifiers);
+ bool NotifyMarginRightClick(Point pt, Scintilla::KeyMod modifiers);
void NotifyNeedShown(Sci::Position pos, Sci::Position len);
void NotifyDwelling(Point pt, bool state);
void NotifyZoom();
@@ -454,10 +467,10 @@ protected: // ScintillaBase subclass needs access to much of Editor
void NotifyDeleted(Document *document, void *userData) noexcept override;
void NotifyStyleNeeded(Document *doc, void *userData, Sci::Position endStyleNeeded) override;
void NotifyLexerChanged(Document *doc, void *userData) override;
- void NotifyErrorOccurred(Document *doc, void *userData, int status) override;
- void NotifyMacroRecord(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ void NotifyErrorOccurred(Document *doc, void *userData, Scintilla::Status status) override;
+ void NotifyMacroRecord(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
- void ContainerNeedsUpdate(int flags) noexcept;
+ void ContainerNeedsUpdate(Scintilla::Update flags) noexcept;
void PageMove(int direction, Selection::SelTypes selt=Selection::SelTypes::none, bool stuttered = false);
enum class CaseMapping { same, upper, lower };
virtual std::string CaseMapString(const std::string &s, CaseMapping caseMapping);
@@ -475,18 +488,18 @@ protected: // ScintillaBase subclass needs access to much of Editor
Sci::Position VCHomeDisplayPosition(Sci::Position position);
Sci::Position VCHomeWrapPosition(Sci::Position position);
Sci::Position LineEndWrapPosition(Sci::Position position);
- int HorizontalMove(unsigned int iMessage);
- int DelWordOrLine(unsigned int iMessage);
- virtual int KeyCommand(unsigned int iMessage);
- virtual int KeyDefault(int /* key */, int /*modifiers*/);
- int KeyDownWithModifiers(int key, int modifiers, bool *consumed);
+ int HorizontalMove(Scintilla::Message iMessage);
+ int DelWordOrLine(Scintilla::Message iMessage);
+ virtual int KeyCommand(Scintilla::Message iMessage);
+ virtual int KeyDefault(Scintilla::Keys /* key */, Scintilla::KeyMod /*modifiers*/);
+ int KeyDownWithModifiers(Scintilla::Keys key, Scintilla::KeyMod modifiers, bool *consumed);
void Indent(bool forwards);
virtual std::unique_ptr<CaseFolder> CaseFolderForEncoding();
- Sci::Position FindText(uptr_t wParam, sptr_t lParam);
+ Sci::Position FindText(Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
void SearchAnchor();
- Sci::Position SearchText(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ Sci::Position SearchText(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
Sci::Position SearchInTarget(const char *text, Sci::Position length);
void GoToLine(Sci::Line lineNo);
@@ -511,10 +524,10 @@ protected: // ScintillaBase subclass needs access to much of Editor
void WordSelection(Sci::Position pos);
void DwellEnd(bool mouseMoved);
void MouseLeave();
- virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);
- virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers);
- void ButtonMoveWithModifiers(Point pt, unsigned int curTime, int modifiers);
- void ButtonUpWithModifiers(Point pt, unsigned int curTime, int modifiers);
+ virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers);
+ virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers);
+ void ButtonMoveWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers);
+ void ButtonUpWithModifiers(Point pt, unsigned int curTime, Scintilla::KeyMod modifiers);
bool Idle();
enum class TickReason { caret, scroll, widen, dwell, platform };
@@ -534,13 +547,13 @@ protected: // ScintillaBase subclass needs access to much of Editor
void StartIdleStyling(bool truncatedLastStyling);
void StyleAreaBounded(PRectangle rcArea, bool scrolling);
constexpr bool SynchronousStylingToVisible() const noexcept {
- return (idleStyling == SC_IDLESTYLING_NONE) || (idleStyling == SC_IDLESTYLING_AFTERVISIBLE);
+ return (idleStyling == Scintilla::IdleStyling::None) || (idleStyling == Scintilla::IdleStyling::AfterVisible);
}
- void IdleStyling();
+ void IdleStyle();
virtual void IdleWork();
virtual void QueueIdleWork(WorkItems items, Sci::Position upTo=0);
- virtual int SupportsFeature(int feature);
+ virtual int SupportsFeature(Scintilla::Supports feature);
virtual bool PaintContains(PRectangle rc);
bool PaintContainsMargin();
void CheckForChangeOutsidePaint(Range r);
@@ -549,18 +562,18 @@ protected: // ScintillaBase subclass needs access to much of Editor
void SetAnnotationHeights(Sci::Line start, Sci::Line end);
virtual void SetDocPointer(Document *document);
- void SetAnnotationVisible(int visible);
- void SetEOLAnnotationVisible(int visible);
+ void SetAnnotationVisible(Scintilla::AnnotationVisible visible);
+ void SetEOLAnnotationVisible(Scintilla::EOLAnnotationVisible visible);
Sci::Line ExpandLine(Sci::Line line);
void SetFoldExpanded(Sci::Line lineDoc, bool expanded);
- void FoldLine(Sci::Line line, int action);
- void FoldExpand(Sci::Line line, int action, int level);
+ void FoldLine(Sci::Line line, Scintilla::FoldAction action);
+ void FoldExpand(Sci::Line line, Scintilla::FoldAction action, Scintilla::FoldLevel level);
Sci::Line ContractedFoldNext(Sci::Line lineStart) const;
void EnsureLineVisible(Sci::Line lineDoc, bool enforcePolicy);
- void FoldChanged(Sci::Line line, int levelNow, int levelPrev);
+ void FoldChanged(Sci::Line line, Scintilla::FoldLevel levelNow, Scintilla::FoldLevel levelPrev);
void NeedShown(Sci::Position pos, Sci::Position len);
- void FoldAll(int action);
+ void FoldAll(Scintilla::FoldAction action);
Sci::Position GetTag(char *tagValue, int tagNumber);
Sci::Position ReplaceTarget(bool replacePatterns, const char *text, Sci::Position length=-1);
@@ -580,39 +593,39 @@ protected: // ScintillaBase subclass needs access to much of Editor
Sci::Line WrapCount(Sci::Line line);
void AddStyledText(const char *buffer, Sci::Position appendLength);
- virtual sptr_t DefWndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) = 0;
- bool ValidMargin(uptr_t wParam) const noexcept;
- void StyleSetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- sptr_t StyleGetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
- void SetSelectionNMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ virtual Scintilla::sptr_t DefWndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam) = 0;
+ bool ValidMargin(Scintilla::uptr_t wParam) const noexcept;
+ void StyleSetMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
+ Scintilla::sptr_t StyleGetMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
+ void SetSelectionNMessage(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
- static const char *StringFromEOLMode(int eolMode) noexcept;
+ static const char *StringFromEOLMode(Scintilla::EndOfLine eolMode) noexcept;
// Coercion functions for transforming WndProc parameters into pointers
- static void *PtrFromSPtr(sptr_t lParam) noexcept {
+ static void *PtrFromSPtr(Scintilla::sptr_t lParam) noexcept {
return reinterpret_cast<void *>(lParam);
}
- static const char *ConstCharPtrFromSPtr(sptr_t lParam) noexcept {
+ static const char *ConstCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept {
return static_cast<const char *>(PtrFromSPtr(lParam));
}
- static const unsigned char *ConstUCharPtrFromSPtr(sptr_t lParam) noexcept {
+ static const unsigned char *ConstUCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept {
return static_cast<const unsigned char *>(PtrFromSPtr(lParam));
}
- static char *CharPtrFromSPtr(sptr_t lParam) noexcept {
+ static char *CharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept {
return static_cast<char *>(PtrFromSPtr(lParam));
}
- static unsigned char *UCharPtrFromSPtr(sptr_t lParam) noexcept {
+ static unsigned char *UCharPtrFromSPtr(Scintilla::sptr_t lParam) noexcept {
return static_cast<unsigned char *>(PtrFromSPtr(lParam));
}
- static void *PtrFromUPtr(uptr_t wParam) noexcept {
+ static void *PtrFromUPtr(Scintilla::uptr_t wParam) noexcept {
return reinterpret_cast<void *>(wParam);
}
- static const char *ConstCharPtrFromUPtr(uptr_t wParam) noexcept {
+ static const char *ConstCharPtrFromUPtr(Scintilla::uptr_t wParam) noexcept {
return static_cast<const char *>(PtrFromUPtr(wParam));
}
- static sptr_t StringResult(sptr_t lParam, const char *val) noexcept;
- static sptr_t BytesResult(sptr_t lParam, const unsigned char *val, size_t len) noexcept;
+ static Scintilla::sptr_t StringResult(Scintilla::sptr_t lParam, const char *val) noexcept;
+ static Scintilla::sptr_t BytesResult(Scintilla::sptr_t lParam, const unsigned char *val, size_t len) noexcept;
// Set a variable controlling appearance to a value and invalidates the display
// if a change was made. Avoids extra text and the possibility of mistyping.
@@ -633,11 +646,11 @@ public:
// Public so the COM thunks can access it.
bool IsUnicodeMode() const noexcept;
// Public so scintilla_send_message can use it.
- virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+ virtual Scintilla::sptr_t WndProc(Scintilla::Message iMessage, Scintilla::uptr_t wParam, Scintilla::sptr_t lParam);
// Public so scintilla_set_id can use it.
int ctrlID;
// Public so COM methods for drag and drop can set it.
- int errorStatus;
+ Scintilla::Status errorStatus;
friend class AutoSurface;
};
@@ -648,16 +661,16 @@ class AutoSurface {
private:
std::unique_ptr<Surface> surf;
public:
- AutoSurface(const Editor *ed, int technology = -1) {
+ AutoSurface(const Editor *ed) {
if (ed->wMain.GetID()) {
- surf = Surface::Allocate(technology != -1 ? technology : ed->technology);
+ surf = Surface::Allocate(ed->technology);
surf->Init(ed->wMain.GetID());
surf->SetMode(SurfaceMode(ed->CodePage(), ed->BidirectionalR2L()));
}
}
- AutoSurface(SurfaceID sid, Editor *ed, int technology = -1) {
+ AutoSurface(SurfaceID sid, Editor *ed, std::optional<Scintilla::Technology> technology = {}) {
if (ed->wMain.GetID()) {
- surf = Surface::Allocate(technology != -1 ? technology : ed->technology);
+ surf = Surface::Allocate(technology ? *technology : ed->technology);
surf->Init(sid, ed->wMain.GetID());
surf->SetMode(SurfaceMode(ed->CodePage(), ed->BidirectionalR2L()));
}