LMMS
Loading...
Searching...
No Matches
juce_CodeEditorComponent.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29class CodeTokeniser;
30
31
32//==============================================================================
43 public TextInputTarget
44{
45public:
46 //==============================================================================
57
59 ~CodeEditorComponent() override;
60
61 //==============================================================================
64
69 void loadContent (const String& newContent);
70
71 //==============================================================================
74
77
83
86
91
94
96 Rectangle<int> getCaretRectangle() override;
97
103 void moveCaretTo (const CodeDocument::Position& newPos, bool selecting);
104
108 Rectangle<int> getCharacterBounds (const CodeDocument::Position& pos) const;
109
113 CodeDocument::Position getPositionAt (int x, int y) const;
114
117
120
122 void setLineNumbersShown (bool shouldBeShown);
123
124 //==============================================================================
125 bool moveCaretLeft (bool moveInWholeWordSteps, bool selecting);
126 bool moveCaretRight (bool moveInWholeWordSteps, bool selecting);
127 bool moveCaretUp (bool selecting);
128 bool moveCaretDown (bool selecting);
129 bool scrollDown();
130 bool scrollUp();
131 bool pageUp (bool selecting);
132 bool pageDown (bool selecting);
133 bool moveCaretToTop (bool selecting);
134 bool moveCaretToStartOfLine (bool selecting);
135 bool moveCaretToEnd (bool selecting);
136 bool moveCaretToEndOfLine (bool selecting);
137 bool deleteBackwards (bool moveInWholeWordSteps);
138 bool deleteForwards (bool moveInWholeWordSteps);
139 bool deleteWhitespaceBackwardsToTabStop();
140 virtual bool copyToClipboard();
141 virtual bool cutToClipboard();
142 virtual bool pasteFromClipboard();
143 bool undo();
144 bool redo();
145
146 void selectRegion (const CodeDocument::Position& start, const CodeDocument::Position& end);
147 bool selectAll();
148 void deselectAll();
149
150 void scrollToLine (int newFirstLineOnScreen);
151 void scrollBy (int deltaLines);
152 void scrollToColumn (int newFirstColumnOnScreen);
153 void scrollToKeepCaretOnScreen();
154 void scrollToKeepLinesOnScreen (Range<int> linesToShow);
155
156 void insertTextAtCaret (const String& textToInsert) override;
157 void insertTabAtCaret();
158
159 void indentSelection();
160 void unindentSelection();
161
162 //==============================================================================
163 Range<int> getHighlightedRegion() const override;
164 bool isHighlightActive() const noexcept;
165 void setHighlightedRegion (const Range<int>& newRange) override;
166 String getTextInRange (const Range<int>& range) const override;
167
168 //==============================================================================
170 struct State
171 {
173 State (const CodeEditorComponent&);
175 State (const String& stringifiedVersion);
176 State (const State&) noexcept;
177
179 void restoreState (CodeEditorComponent&) const;
180
182 String toString() const;
183
184 private:
186 };
187
188 //==============================================================================
193 void setTabSize (int numSpacesPerTab, bool insertSpacesInsteadOfTabCharacters);
194
199
204
206 String getTabString (int numSpaces) const;
207
211 void setFont (const Font& newFont);
212
214 const Font& getFont() const noexcept { return font; }
215
217 void setReadOnly (bool shouldBeReadOnly) noexcept;
218
221
222 //==============================================================================
225 {
232
234
235 void set (const String& name, Colour colour);
236 };
237
243 void setColourScheme (const ColourScheme& scheme);
244
247
252 Colour getColourForTokenType (int tokenType) const;
253
265 void retokenise (int startIndex, int endIndex);
266
267 //==============================================================================
276 {
277 backgroundColourId = 0x1004500,
278 highlightColourId = 0x1004502,
281 lineNumberTextId = 0x1004505,
282 };
283
284 //==============================================================================
286 void setScrollbarThickness (int thickness);
287
290
291 //==============================================================================
293 virtual void handleReturnKey();
295 virtual void handleTabKey();
297 virtual void handleEscapeKey();
298
300 virtual void editorViewportPositionChanged();
301
303 virtual void caretPositionMoved();
304
305 //==============================================================================
323 virtual void addPopupMenuItems (PopupMenu& menuToAddTo,
324 const MouseEvent* mouseClickEvent);
325
337 virtual void performPopupMenuAction (int menuItemID);
338
346 void setCommandManager (ApplicationCommandManager* newManager) noexcept;
347
348 //==============================================================================
350 void paint (Graphics&) override;
352 void resized() override;
354 bool keyPressed (const KeyPress&) override;
356 void mouseDown (const MouseEvent&) override;
358 void mouseDrag (const MouseEvent&) override;
360 void mouseUp (const MouseEvent&) override;
362 void mouseDoubleClick (const MouseEvent&) override;
364 void mouseWheelMove (const MouseEvent&, const MouseWheelDetails&) override;
366 void focusGained (FocusChangeType) override;
368 void focusLost (FocusChangeType) override;
370 bool isTextInputActive() const override;
372 void setTemporaryUnderlining (const Array<Range<int>>&) override;
374 ApplicationCommandTarget* getNextCommandTarget() override;
376 void getAllCommands (Array<CommandID>&) override;
378 void getCommandInfo (CommandID, ApplicationCommandInfo&) override;
380 bool perform (const InvocationInfo&) override;
382 void lookAndFeelChanged() override;
383
384private:
385 //==============================================================================
387
390 float charWidth = 0;
394 double xOffset = 0;
396
397 std::unique_ptr<CaretComponent> caret;
398 ScrollBar verticalScrollBar { true }, horizontalScrollBar { false };
400
401 class Pimpl;
402 std::unique_ptr<Pimpl> pimpl;
403
404 class GutterComponent;
405 std::unique_ptr<GutterComponent> gutter;
406
408
415
417
418 //==============================================================================
421
422 class CodeEditorLine;
424 void rebuildLineTokens();
426 void codeDocumentChanged (int start, int end);
427
429 void clearCachedIterators (int firstLineToBeInvalid);
430 void updateCachedIterators (int maxLineNum);
432
433 void moveLineDelta (int delta, bool selecting);
435
436 //==============================================================================
438 void insertText (const String&);
439 virtual void updateCaretPosition();
440 void updateScrollBars();
441 void scrollToLineInternal (int line);
442 void scrollToColumnInternal (double column);
443 void newTransaction();
444 void cut();
445 void indentSelectedLines (int spacesToAdd);
448 void setSelection (CodeDocument::Position, CodeDocument::Position);
449
450 int indexToColumn (int line, int index) const noexcept;
451 int columnToIndex (int line, int column) const noexcept;
452
454};
455
456} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define override
Definition DistrhoDefines.h:73
Definition juce_AccessibilityHandler.h:41
Definition juce_ApplicationCommandManager.h:88
Definition juce_ApplicationCommandTarget.h:47
ApplicationCommandTarget()
Definition juce_ApplicationCommandTarget.cpp:51
Definition juce_Array.h:56
Definition juce_CodeDocument.h:360
Definition juce_CodeDocument.h:63
Definition juce_CodeDocument.h:46
Definition juce_CodeEditorComponent.cpp:31
Definition juce_CodeEditorComponent.cpp:161
Definition juce_CodeEditorComponent.cpp:415
Definition juce_CodeEditorComponent.cpp:382
CodeTokeniser * codeTokeniser
Definition juce_CodeEditorComponent.h:419
int getFirstLineOnScreen() const noexcept
Definition juce_CodeEditorComponent.h:85
int lineHeight
Definition juce_CodeEditorComponent.h:391
void rebuildLineTokensAsync()
Definition juce_CodeEditorComponent.cpp:638
Array< CodeDocument::Iterator > cachedIterators
Definition juce_CodeEditorComponent.h:428
double xOffset
Definition juce_CodeEditorComponent.h:394
CodeEditorComponent(CodeDocument &document, CodeTokeniser *codeTokeniser)
Definition juce_CodeEditorComponent.cpp:465
void scrollToLineInternal(int line)
Definition juce_CodeEditorComponent.cpp:808
DragType dragType
Definition juce_CodeEditorComponent.h:416
std::unique_ptr< GutterComponent > gutter
Definition juce_CodeEditorComponent.h:405
void codeDocumentChanged(int start, int end)
Definition juce_CodeEditorComponent.cpp:685
void updateCachedIterators(int maxLineNum)
Definition juce_CodeEditorComponent.cpp:1731
int getLineHeight() const noexcept
Definition juce_CodeEditorComponent.h:76
ApplicationCommandManager * appCommandManager
Definition juce_CodeEditorComponent.h:399
void clearCachedIterators(int firstLineToBeInvalid)
Definition juce_CodeEditorComponent.cpp:1721
ScrollBar verticalScrollBar
Definition juce_CodeEditorComponent.h:398
void scrollToColumnInternal(double column)
Definition juce_CodeEditorComponent.cpp:826
void setSelection(CodeDocument::Position, CodeDocument::Position)
Definition juce_CodeEditorComponent.cpp:1491
void updateScrollBars()
Definition juce_CodeEditorComponent.cpp:799
void newTransaction()
Definition juce_CodeEditorComponent.cpp:1314
int linesOnScreen
Definition juce_CodeEditorComponent.h:391
bool readOnly
Definition juce_CodeEditorComponent.h:393
int getNumLinesOnScreen() const noexcept
Definition juce_CodeEditorComponent.h:82
CodeDocument::Position selectionEnd
Definition juce_CodeEditorComponent.h:395
int getGutterSize() const noexcept
Definition juce_CodeEditorComponent.cpp:509
void moveLineDelta(int delta, bool selecting)
Definition juce_CodeEditorComponent.cpp:1105
bool areSpacesInsertedForTabs() const
Definition juce_CodeEditorComponent.h:203
void indentSelectedLines(int spacesToAdd)
Definition juce_CodeEditorComponent.cpp:971
int columnToTryToMaintain
Definition juce_CodeEditorComponent.h:392
int indexToColumn(int line, int index) const noexcept
Definition juce_CodeEditorComponent.cpp:1637
CodeDocument::Position getCaretPos() const
Definition juce_CodeEditorComponent.h:93
void getIteratorForPosition(int position, CodeDocument::Iterator &)
Definition juce_CodeEditorComponent.cpp:1766
int scrollbarThickness
Definition juce_CodeEditorComponent.h:392
float charWidth
Definition juce_CodeEditorComponent.h:390
void setTabSize(int numSpacesPerTab, bool insertSpacesInsteadOfTabCharacters)
Definition juce_CodeEditorComponent.cpp:1619
DragType
Definition juce_CodeEditorComponent.h:410
@ notDragging
Definition juce_CodeEditorComponent.h:411
@ draggingSelectionStart
Definition juce_CodeEditorComponent.h:412
@ draggingSelectionEnd
Definition juce_CodeEditorComponent.h:413
float getCharWidth() const noexcept
Definition juce_CodeEditorComponent.h:73
bool useSpacesForTabs
Definition juce_CodeEditorComponent.h:393
bool performCommand(CommandID)
Definition juce_CodeEditorComponent.cpp:1474
void insertText(const String &)
Definition juce_CodeEditorComponent.cpp:902
int getScrollbarThickness() const noexcept
Definition juce_CodeEditorComponent.h:289
CodeDocument::Position caretPos
Definition juce_CodeEditorComponent.h:395
const ColourScheme & getColourScheme() const noexcept
Definition juce_CodeEditorComponent.h:246
CodeDocument & getDocument() const noexcept
Definition juce_CodeEditorComponent.h:63
int getNumColumnsOnScreen() const noexcept
Definition juce_CodeEditorComponent.h:90
bool skipBackwardsToPreviousTab()
Definition juce_CodeEditorComponent.cpp:1234
int spacesPerTab
Definition juce_CodeEditorComponent.h:389
int columnToIndex(int line, int column) const noexcept
Definition juce_CodeEditorComponent.cpp:1660
int getTabSize() const noexcept
Definition juce_CodeEditorComponent.h:198
void setColourScheme(const ColourScheme &scheme)
Definition juce_CodeEditorComponent.cpp:1708
int firstLineOnScreen
Definition juce_CodeEditorComponent.h:389
std::unique_ptr< Pimpl > pimpl
Definition juce_CodeEditorComponent.h:402
CodeDocument & document
Definition juce_CodeEditorComponent.h:386
void rebuildLineTokens()
Definition juce_CodeEditorComponent.cpp:643
CodeDocument::Position getSelectionStart() const
Definition juce_CodeEditorComponent.h:116
bool showLineNumbers
Definition juce_CodeEditorComponent.h:393
virtual void updateCaretPosition()
Definition juce_CodeEditorComponent.cpp:718
OwnedArray< CodeEditorLine > lines
Definition juce_CodeEditorComponent.h:423
CodeDocument::Position getSelectionEnd() const
Definition juce_CodeEditorComponent.h:119
Font font
Definition juce_CodeEditorComponent.h:388
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_CodeEditorComponent.cpp:1839
void cut()
Definition juce_CodeEditorComponent.cpp:1021
bool isReadOnly() const noexcept
Definition juce_CodeEditorComponent.h:220
const Font & getFont() const noexcept
Definition juce_CodeEditorComponent.h:214
bool shouldFollowDocumentChanges
Definition juce_CodeEditorComponent.h:393
ColourIds
Definition juce_CodeEditorComponent.h:276
@ lineNumberTextId
Definition juce_CodeEditorComponent.h:281
@ backgroundColourId
Definition juce_CodeEditorComponent.h:277
@ highlightColourId
Definition juce_CodeEditorComponent.h:278
@ lineNumberBackgroundId
Definition juce_CodeEditorComponent.h:280
@ defaultTextColourId
Definition juce_CodeEditorComponent.h:279
std::unique_ptr< CaretComponent > caret
Definition juce_CodeEditorComponent.h:397
int columnsOnScreen
Definition juce_CodeEditorComponent.h:391
ColourScheme colourScheme
Definition juce_CodeEditorComponent.h:420
CodeDocument::Position selectionStart
Definition juce_CodeEditorComponent.h:395
Definition juce_CodeTokeniser.h:39
Definition juce_Colour.h:38
Component() noexcept
Definition juce_Component.cpp:517
Definition juce_Font.h:42
Definition juce_GraphicsContext.h:45
Definition juce_KeyPress.h:40
Definition juce_MouseEvent.h:39
Definition juce_OwnedArray.h:51
Definition juce_PopupMenu.h:80
Definition juce_Range.h:40
Definition juce_Rectangle.h:67
Definition juce_ScrollBar.h:54
Definition juce_String.h:53
int y
Definition inflate.c:1588
unsigned x[BMAX+1]
Definition inflate.c:1586
static const char * name
Definition pugl.h:1582
virtual ASIOError start()=0
#define JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(className)
#define JUCE_API
Definition juce_StandardHeader.h:152
Definition carla_juce.cpp:31
int CommandID
Definition juce_ApplicationCommandID.h:37
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Definition juce_RangedDirectoryIterator.h:184
Definition juce_Uuid.h:141
Definition juce_ApplicationCommandInfo.h:45
Definition juce_CodeEditorComponent.h:228
Colour colour
Definition juce_CodeEditorComponent.h:230
String name
Definition juce_CodeEditorComponent.h:229
Definition juce_CodeEditorComponent.h:225
Array< TokenType > types
Definition juce_CodeEditorComponent.h:233
void set(const String &name, Colour colour)
Definition juce_CodeEditorComponent.cpp:1691
State(const CodeEditorComponent &)
Definition juce_CodeEditorComponent.cpp:1795
int lastCaretPos
Definition juce_CodeEditorComponent.h:185
int lastSelectionEnd
Definition juce_CodeEditorComponent.h:185
void restoreState(CodeEditorComponent &) const
Definition juce_CodeEditorComponent.cpp:1815
String toString() const
Definition juce_CodeEditorComponent.cpp:1833
int lastTopLine
Definition juce_CodeEditorComponent.h:185
Definition juce_MouseEvent.h:392
#define const
Definition zconf.h:137