36 : AccessibilityRole::editableText,
51 bool isDisplayingProtectedText()
const override
56 bool isReadOnly()
const override
58 return codeEditorComponent.isReadOnly();
61 int getTotalNumCharacters()
const override
63 return codeEditorComponent.document.getAllContent().length();
68 return { codeEditorComponent.selectionStart.getPosition(),
69 codeEditorComponent.selectionEnd.getPosition() };
74 codeEditorComponent.setHighlightedRegion (r);
79 auto&
doc = codeEditorComponent.document;
87 codeEditorComponent.document.replaceAllContent (
newText);
90 int getTextInsertionOffset()
const override
92 return codeEditorComponent.caretPos.getPosition();
107 int getOffsetAtPoint (
Point<int> point)
const override
109 return codeEditorComponent.getPositionAt (point.
x, point.
y).getPosition();
138 addToken (
newTokens, line, line.length(), -1);
179 return getHighlightArea (x, y,
lineH,
characterWidth, { highlightColumnStart, highlightColumnEnd });
197 const float rightClip,
const float x,
const int y,
205 for (
auto&
token : tokens)
212 column +=
token.length;
221 SyntaxToken (
const String& t,
const int len,
const int type) noexcept
222 : text (t), length (len), tokenType (type)
225 bool operator== (
const SyntaxToken&
other)
const noexcept
227 return tokenType ==
other.tokenType
228 && length ==
other.length
229 && text ==
other.text;
238 int highlightColumnStart = 0, highlightColumnEnd = 0;
246 const int lineLength =
lineText.length();
250 int tokenType =
tokeniser.readNextToken (source);
276 static void replaceTabsWithSpaces (
Array<SyntaxToken>& tokens,
const int spacesPerTab)
280 for (
auto& t : tokens)
284 const int tabPos = t.text.indexOfChar (
'\t');
290 t.length = t.text.length();
297 int indexToColumn (
int index,
const String& line,
int tabSpaces)
const noexcept
304 for (
int i = 0; i < index; ++i)
306 if (t.getAndAdvance() !=
'\t')
320 addToken (dest, text.
substring (0, length / 2), length / 2, type);
321 addToken (dest, text.
substring (length / 2), length - length / 2, type);
325 dest.
add (SyntaxToken (text, length, type));
330namespace CodeEditorHelpers
332 static int findFirstNonWhitespaceChar (
StringRef line)
noexcept
337 while (! t.isEmpty())
339 if (! t.isWhitespace())
362 void timerCallback()
override { owner.newTransaction(); }
363 void handleAsyncUpdate()
override { owner.rebuildLineTokens(); }
373 void codeDocumentTextInserted (
const String&
newText,
int pos)
override
375 owner.codeDocumentChanged (pos, pos +
newText.length());
378 void codeDocumentTextDeleted (
int start,
int end)
override
380 owner.codeDocumentChanged (start,
end);
401 const int lineH = editor.lineHeight;
405 lastNumLines - editor.firstLineOnScreen);
433 int firstLine = 0, lastNumLines = 0;
440 caretPos (
doc, 0, 0),
441 selectionStart (
doc, 0, 0),
442 selectionEnd (
doc, 0, 0),
465 if (codeTokeniser !=
nullptr)
480 peer->refreshTextInputTarget();
485int CodeEditorComponent::getGutterSize()
const noexcept
487 return showLineNumbers ? 35 : 5;
492 clearCachedIterators (0);
514 if (showLineNumbers != shouldBeShown)
516 showLineNumbers = shouldBeShown;
536 removeChildComponent (caret.get());
538 addAndMakeVisible (caret.get());
540 invalidateAccessibilityHandler();
548 linesOnScreen =
jmax (1, (
getHeight() - scrollbarThickness) / lineHeight);
552 updateCaretPosition();
554 if (gutter !=
nullptr)
555 gutter->setBounds (0, 0, getGutterSize() - 2,
getHeight());
558 scrollbarThickness,
getHeight() - scrollbarThickness);
587 if (
const auto area = lines.getUnchecked (i)->getHighlightArea (x, lineHeight * i, lineHeight, charWidth))
595 lines.getUnchecked (i)->draw (*
this, g, font,
rightClip, x, lineHeight * i, lineHeight, charWidth);
600 if (scrollbarThickness != thickness)
602 scrollbarThickness = thickness;
607void CodeEditorComponent::rebuildLineTokensAsync()
609 pimpl->triggerAsyncUpdate();
612void CodeEditorComponent::rebuildLineTokens()
614 pimpl->cancelPendingUpdate();
625 lines.add (
new CodeEditorLine());
633 CodeDocument::Iterator source (document);
634 getIteratorForPosition (CodeDocument::Position (document, firstLineOnScreen, 0).
getPosition(), source);
638 if (lines.getUnchecked (i)->update (document, firstLineOnScreen + i, source, codeTokeniser,
639 spacesPerTab, selectionStart, selectionEnd))
650 if (gutter !=
nullptr)
651 gutter->documentChanged (document, firstLineOnScreen);
654void CodeEditorComponent::codeDocumentChanged (
const int startIndex,
const int endIndex)
661 updateCaretPosition();
662 columnToTryToMaintain = -1;
668 if (shouldFollowDocumentChanges)
682 rebuildLineTokensAsync();
686void CodeEditorComponent::updateCaretPosition()
688 if (caret !=
nullptr)
700 columnToTryToMaintain = -1;
705 if (dragType == notDragging)
709 < std::abs (oldCaretPos - selectionEnd.
getPosition());
711 dragType =
isStart ? draggingSelectionStart : draggingSelectionEnd;
714 if (dragType == draggingSelectionStart)
718 setSelection (selectionEnd, caretPos);
719 dragType = draggingSelectionEnd;
723 setSelection (caretPos, selectionEnd);
730 setSelection (caretPos, selectionStart);
731 dragType = draggingSelectionStart;
735 setSelection (selectionStart, caretPos);
739 rebuildLineTokensAsync();
746 updateCaretPosition();
747 scrollToKeepCaretOnScreen();
758void CodeEditorComponent::deselectAll()
760 if (isHighlightActive())
761 rebuildLineTokensAsync();
763 setSelection (caretPos, caretPos);
764 dragType = notDragging;
767void CodeEditorComponent::updateScrollBars()
784 updateCaretPosition();
786 updateCachedIterators (firstLineOnScreen);
787 rebuildLineTokensAsync();
788 pimpl->handleUpdateNowIfNeeded();
794void CodeEditorComponent::scrollToColumnInternal (
double column)
801 updateCaretPosition();
818void CodeEditorComponent::scrollBy (
int deltaLines)
820 scrollToLine (firstLineOnScreen +
deltaLines);
823void CodeEditorComponent::scrollToKeepLinesOnScreen (Range<int>
rangeToShow)
826 scrollBy (
rangeToShow.getStart() - firstLineOnScreen);
827 else if (
rangeToShow.getEnd() >= firstLineOnScreen + linesOnScreen)
828 scrollBy (
rangeToShow.getEnd() - (firstLineOnScreen + linesOnScreen - 1));
831void CodeEditorComponent::scrollToKeepCaretOnScreen()
840 if (column >= xOffset + columnsOnScreen - 1)
841 scrollToColumn (column + 1 - columnsOnScreen);
842 else if (column < xOffset)
843 scrollToColumn (column);
857 const int line = y / lineHeight + firstLineOnScreen;
858 const int column =
roundToInt ((x - (getGutterSize() - xOffset * charWidth)) / charWidth);
859 const int index = columnToIndex (line, column);
910 scrollToKeepCaretOnScreen();
918void CodeEditorComponent::insertTabAtCaret()
928 if (useSpacesForTabs)
941bool CodeEditorComponent::deleteWhitespaceBackwardsToTabStop()
952 moveCaretLeft (
false,
true);
957 if (selected.isNotEmpty() && selected.trim().isEmpty())
967void CodeEditorComponent::indentSelection() { indentSelectedLines ( spacesPerTab); }
968void CodeEditorComponent::unindentSelection() { indentSelectedLines (-spacesPerTab); }
970void CodeEditorComponent::indentSelectedLines (
const int spacesToAdd)
979 oldCaret.setPositionMaintained (
true);
994 const CodeDocument::Position
wsStart (document, line, 0);
1020void CodeEditorComponent::cut()
1025bool CodeEditorComponent::copyToClipboard()
1028 auto selection = document.
getTextBetween (selectionStart, selectionEnd);
1030 if (selection.isNotEmpty())
1036bool CodeEditorComponent::cutToClipboard()
1044bool CodeEditorComponent::pasteFromClipboard()
1049 if (clip.isNotEmpty())
1060 if (
selecting && dragType == notDragging)
1062 selectRegion (CodeDocument::Position (selectionEnd), CodeDocument::Position (selectionStart));
1063 dragType = draggingSelectionStart;
1084 if (
selecting && dragType == notDragging)
1086 selectRegion (CodeDocument::Position (selectionStart), CodeDocument::Position (selectionEnd));
1087 dragType = draggingSelectionEnd;
1104void CodeEditorComponent::moveLineDelta (
const int delta,
const bool selecting)
1106 CodeDocument::Position pos (caretPos);
1107 auto newLineNum = pos.getLineNumber() + delta;
1109 if (columnToTryToMaintain < 0)
1110 columnToTryToMaintain = indexToColumn (pos.getLineNumber(), pos.getIndexInLine());
1119bool CodeEditorComponent::moveCaretDown (
const bool selecting)
1131bool CodeEditorComponent::moveCaretUp (
const bool selecting)
1143bool CodeEditorComponent::pageDown (
const bool selecting)
1146 scrollBy (
jlimit (0, linesOnScreen, 1 + document.
getNumLines() - firstLineOnScreen - linesOnScreen));
1147 moveLineDelta (linesOnScreen,
selecting);
1151bool CodeEditorComponent::pageUp (
const bool selecting)
1154 scrollBy (-linesOnScreen);
1155 moveLineDelta (-linesOnScreen,
selecting);
1159bool CodeEditorComponent::scrollUp()
1165 moveLineDelta (1,
false);
1170bool CodeEditorComponent::scrollDown()
1175 if (caretPos.
getLineNumber() >= firstLineOnScreen + linesOnScreen)
1176 moveLineDelta (-1,
false);
1181bool CodeEditorComponent::moveCaretToTop (
const bool selecting)
1188bool CodeEditorComponent::moveCaretToStartOfLine (
const bool selecting)
1192 int index = CodeEditorHelpers::findFirstNonWhitespaceChar (caretPos.
getLineText());
1201bool CodeEditorComponent::moveCaretToEnd (
const bool selecting)
1209bool CodeEditorComponent::moveCaretToEndOfLine (
const bool selecting)
1224 else if (selectionStart == selectionEnd && ! skipBackwardsToPreviousTab())
1226 selectionStart.
moveBy (-1);
1233bool CodeEditorComponent::skipBackwardsToPreviousTab()
1264 if (selectionStart == selectionEnd)
1274bool CodeEditorComponent::selectAll()
1279 CodeDocument::Position (document, 0, 0));
1283void CodeEditorComponent::selectRegion (
const CodeDocument::Position& start,
1284 const CodeDocument::Position&
end)
1291bool CodeEditorComponent::undo()
1298 scrollToKeepCaretOnScreen();
1302bool CodeEditorComponent::redo()
1309 scrollToKeepCaretOnScreen();
1313void CodeEditorComponent::newTransaction()
1316 pimpl->startTimer (600);
1331bool CodeEditorComponent::isHighlightActive()
const noexcept
1333 return selectionStart != selectionEnd;
1370 pimpl->handleUpdateNowIfNeeded();
1423 result.
setInfo (
TRANS (
"Cut"),
TRANS (
"Copies the currently selected text to the clipboard and deletes it."),
"Editing", 0);
1429 result.
setInfo (
TRANS (
"Copy"),
TRANS (
"Copies the currently selected text to the clipboard."),
"Editing", 0);
1435 result.
setInfo (
TRANS (
"Paste"),
TRANS (
"Inserts text from the clipboard."),
"Editing", 0);
1441 result.
setInfo (
TRANS (
"Delete"),
TRANS (
"Deletes any selected text."),
"Editing", 0);
1446 result.
setInfo (
TRANS (
"Select All"),
TRANS (
"Selects all the text in the editor."),
"Editing", 0);
1478bool CodeEditorComponent::performCommand (
const CommandID commandID)
1489 default:
return false;
1495void CodeEditorComponent::setSelection (CodeDocument::Position
newSelectionStart,
1538 dragType = notDragging;
1550 selectRegion (start,
end);
1577 dragType = notDragging;
1592 dragType = notDragging;
1630 rebuildLineTokensAsync();
1641int CodeEditorComponent::indexToColumn (
int lineNum,
int index)
const noexcept
1643 auto line = document.getLine (
lineNum);
1644 auto t = line.getCharPointer();
1647 for (
int i = 0; i < index; ++i)
1655 if (t.getAndAdvance() !=
'\t')
1658 col += getTabSize() - (
col % getTabSize());
1664int CodeEditorComponent::columnToIndex (
int lineNum,
int column)
const noexcept
1666 auto line = document.getLine (
lineNum);
1667 auto t = line.getCharPointer();
1670 while (! t.isEmpty())
1672 if (t.getAndAdvance() !=
'\t')
1675 col += getTabSize() - (
col % getTabSize());
1695void CodeEditorComponent::ColourScheme::set (
const String& name,
Colour colour)
1697 for (
auto&
tt : types)
1699 if (
tt.name == name)
1721 ? colourScheme.types.getReference (tokenType).colour
1728 for (i = cachedIterators.size(); --i >= 0;)
1732 cachedIterators.removeRange (
jmax (0, i - 1), cachedIterators.size());
1735void CodeEditorComponent::updateCachedIterators (
int maxLineNum)
1740 if (cachedIterators.size() == 0)
1741 cachedIterators.add (CodeDocument::Iterator (document));
1743 if (codeTokeniser !=
nullptr)
1747 const auto last = cachedIterators.getLast();
1752 cachedIterators.add (CodeDocument::Iterator (last));
1753 auto& t = cachedIterators.getReference (cachedIterators.size() - 1);
1770void CodeEditorComponent::getIteratorForPosition (
int position, CodeDocument::Iterator& source)
1772 if (codeTokeniser !=
nullptr)
1774 for (
int i = cachedIterators.size(); --i >= 0;)
1776 auto& t = cachedIterators.getReference (i);
1778 if (t.getPosition() <= position)
1785 while (source.getPosition() < position)
1787 const CodeDocument::Iterator
original (source);
1790 if (source.getPosition() > position || source.isEOF())
1802 lastSelectionEnd (lastCaretPos)
1806 if (lastCaretPos == selection.getStart())
1807 lastSelectionEnd = selection.getEnd();
1809 lastSelectionEnd = selection.getStart();
1813 : lastTopLine (
other.lastTopLine),
1814 lastCaretPos (
other.lastCaretPos),
1815 lastSelectionEnd (
other.lastSelectionEnd)
1825 editor.scrollToLine (lastTopLine);
1832 lastTopLine = tokens[0].getIntValue();
1833 lastCaretPos = tokens[1].getIntValue();
1834 lastSelectionEnd = tokens[2].getIntValue();
1839 return String (lastTopLine) +
":" +
String (lastCaretPos) +
":" +
String (lastSelectionEnd);
1845 return std::make_unique<CodeEditorAccessibilityHandler> (*
this);
Base class for accessible Components.
An abstract interface which represents a UI element that supports a text interface.
One of these objects holds a list of all the commands your app can perform, and despatches these comm...
void commandStatusChanged()
This should be called to tell the manager that one of its registered commands may have changed its ac...
A command target publishes a list of command IDs that it can perform.
ApplicationCommandTarget * findFirstTargetParentComponent()
If this object is a Component, this method will search upwards in its current UI hierarchy for the ne...
Holds a resizable array of primitive or copy-by-value objects.
void swapWith(OtherArrayType &otherArray) noexcept
This swaps the contents of this array with those of another array.
void ensureStorageAllocated(int minNumElements)
Increases the array's internal storage to hold a minimum number of elements.
void addArray(const Type *elementsToAdd, int numElementsToAdd)
Adds elements from an array to the end of this array.
void add(const ElementType &newElement)
Appends a new element at the end of the array.
Has a callback method that is triggered asynchronously.
A text string with a set of colour/font settings that are associated with sub-ranges of the text.
void setJustification(Justification newJustification) noexcept
Sets the justification that should be used for laying-out the text.
static bool isWhitespace(char character) noexcept
Checks whether a character is whitespace.
Iterates the text in a CodeDocument.
int getPosition() const noexcept
Returns the position as the number of characters from the start of the document.
An object that receives callbacks from the CodeDocument when its text changes.
A position in a code document.
juce_wchar getCharacter() const
Returns the character in the document at this position.
int getIndexInLine() const noexcept
Returns the number of characters from the start of the line.
int getPosition() const noexcept
Returns the position as the number of characters from the start of the document.
int getLineNumber() const noexcept
Returns the line number of this position.
void moveBy(int characterDelta)
Moves the position forwards or backwards by the specified number of characters.
void setPositionMaintained(bool isMaintained)
Allows the position to be automatically updated when the document changes.
Position movedBy(int characterDelta) const
Returns a position which is the same as this one, moved by the specified number of characters.
void setPosition(int charactersFromStartOfDocument)
Points this object at a new position within the document.
String getLineText() const
Returns the line from the document that this position is within.
A class for storing and manipulating a source code file.
void undo()
Undo the last operation.
Position findWordBreakBefore(const Position &position) const noexcept
Searches for a word-break.
void addListener(Listener *listener)
Registers a listener object to receive callbacks when the document changes.
void replaceAllContent(const String &newContent)
Clears the document and replaces it with some new text.
String getLine(int lineIndex) const noexcept
Returns a line from the document.
void clearUndoHistory()
Clears the undo history.
void newTransaction()
Begins a new undo transaction.
int getNumLines() const noexcept
Returns the number of lines in the document.
UndoManager & getUndoManager() noexcept
Returns the document's UndoManager.
Position findWordBreakAfter(const Position &position) const noexcept
Searches for a word-break.
void findLineContaining(const Position &pos, Position &start, Position &end) const noexcept
Finds the line that contains the given position.
void removeListener(Listener *listener)
Deregisters a listener.
void insertText(const Position &position, const String &text)
Inserts some text into the document at a given position.
void deleteSection(const Position &startPosition, const Position &endPosition)
Deletes a section of the text.
int getMaximumLineLength() noexcept
Returns the number of characters in the longest line of the document.
String getNewLineCharacters() const noexcept
Returns the preferred new-line characters for the document.
void redo()
Redo the last operation.
void findTokenContaining(const Position &pos, Position &start, Position &end) const noexcept
Finds the token that contains the given position.
void setSavePoint() noexcept
Makes a note that the document's current state matches the one that is saved.
String getTextBetween(const Position &start, const Position &end) const
Returns a section of the document's text.
void paint(Graphics &g) override
Components can override this method to draw their content.
A text editor component designed specifically for source code.
int getFirstLineOnScreen() const noexcept
Returns the index of the first line that's visible at the top of the editor.
void getCommandInfo(CommandID, ApplicationCommandInfo &) override
This must provide details about one of the commands that this target can perform.
void lookAndFeelChanged() override
Called to let the component react to a change in the look-and-feel setting.
void mouseUp(const MouseEvent &) override
Called when a mouse button is released.
void mouseDrag(const MouseEvent &) override
Called when the mouse is moved while a button is held down.
~CodeEditorComponent() override
Destructor.
String getTabString(int numSpaces) const
Returns a string containing spaces or tab characters to generate the given number of spaces.
CodeEditorComponent(CodeDocument &document, CodeTokeniser *codeTokeniser)
Creates an editor for a document.
void setTemporaryUnderlining(const Array< Range< int > > &) override
Sets a number of temporarily underlined sections.
int getLineHeight() const noexcept
Returns the height of a line of text, in pixels.
virtual void handleTabKey()
Called when the tab key is pressed - this can be overridden for custom behaviour.
void retokenise(int startIndex, int endIndex)
Rebuilds the syntax highlighting for a section of text.
virtual void handleReturnKey()
Called when the return key is pressed - this can be overridden for custom behaviour.
void setHighlightedRegion(const Range< int > &newRange) override
Sets the currently-selected text region.
Colour getColourForTokenType(int tokenType) const
Returns one the syntax highlighting colour for the given token.
void setReadOnly(bool shouldBeReadOnly) noexcept
Makes the editor read-only.
void loadContent(const String &newContent)
Loads the given content into the document.
void setScrollbarThickness(int thickness)
Changes the size of the scrollbars.
void focusLost(FocusChangeType) override
Called to indicate that this component has just lost the keyboard focus.
void paint(Graphics &) override
Components can override this method to draw their content.
virtual void performPopupMenuAction(int menuItemID)
This is called to perform one of the items that was shown on the popup menu.
CodeDocument::Position getCaretPos() const
Returns the current caret position.
virtual void caretPositionMoved()
Called when the caret position moves.
void setTabSize(int numSpacesPerTab, bool insertSpacesInsteadOfTabCharacters)
Changes the current tab settings.
void setLineNumbersShown(bool shouldBeShown)
Enables or disables the line-number display in the gutter.
Range< int > getHighlightedRegion() const override
Returns the extents of the selected text region, or an empty range if nothing is selected,...
void resized() override
Called when this component's size has been changed.
bool perform(const InvocationInfo &) override
This must actually perform the specified command.
void focusGained(FocusChangeType) override
Called to indicate that this component has just acquired the keyboard focus.
void insertTextAtCaret(const String &textToInsert) override
Inserts some text, overwriting the selected text region, if there is one.
CodeDocument & getDocument() const noexcept
Returns the code document that this component is editing.
void mouseDown(const MouseEvent &) override
Called when a mouse button is pressed.
void setCommandManager(ApplicationCommandManager *newManager) noexcept
Specifies a command-manager which the editor will notify whenever the state of any of its commands ch...
virtual void handleEscapeKey()
Called when the escape key is pressed - this can be overridden for custom behaviour.
void mouseDoubleClick(const MouseEvent &) override
Called when a mouse button has been double-clicked on a component.
void setColourScheme(const ColourScheme &scheme)
Changes the syntax highlighting scheme.
Rectangle< int > getCharacterBounds(const CodeDocument::Position &pos) const
Returns the on-screen position of a character in the document.
String getTextInRange(const Range< int > &range) const override
Returns a specified sub-section of the text.
ApplicationCommandTarget * getNextCommandTarget() override
This must return the next target to try after this one.
bool isTextInputActive() const override
Returns true if this input target is currently accepting input.
void getAllCommands(Array< CommandID > &) override
This must return a complete list of commands that this target can handle.
void setFont(const Font &newFont)
Changes the font.
CodeDocument::Position getPositionAt(int x, int y) const
Finds the character at a given on-screen position.
RectangleList< int > getTextBounds(Range< int > textRange) const override
Returns the bounding box for a range of text in the editor.
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Override this method to return a custom AccessibilityHandler for this component.
void mouseWheelMove(const MouseEvent &, const MouseWheelDetails &) override
Called when the mouse-wheel is moved.
bool keyPressed(const KeyPress &) override
Called when a key is pressed.
virtual void editorViewportPositionChanged()
Called when the view position is scrolled horizontally or vertically.
virtual void addPopupMenuItems(PopupMenu &menuToAddTo, const MouseEvent *mouseClickEvent)
This adds the items to the popup menu.
@ lineNumberTextId
The colour to use for drawing the line numbers.
@ backgroundColourId
A colour to use to fill the editor's background.
@ highlightColourId
The colour to use for the highlighted background under selected text.
@ lineNumberBackgroundId
The colour to use for filling the background of the line-number gutter.
@ defaultTextColourId
The colour to use for text when no syntax colouring is enabled.
void moveCaretTo(const CodeDocument::Position &newPos, bool selecting)
Moves the caret.
int getCharIndexForPoint(Point< int > point) const override
A base class for tokenising code so that the syntax can be displayed in a code editor.
virtual CodeEditorComponent::ColourScheme getDefaultColourScheme()=0
Returns a suggested syntax highlighting colour scheme.
virtual int readNextToken(CodeDocument::Iterator &source)=0
Reads the next token from the source and returns its token type.
Represents a colour, also including a transparency value.
The base class for all JUCE user-interface objects.
bool isVisible() const noexcept
Tests whether the component is visible or not.
Component * getParentComponent() const noexcept
Returns the component which this component is inside.
Point< int > getPosition() const noexcept
Returns the component's top-left position as a Point.
int getHeight() const noexcept
Returns the component's height in pixels.
int getX() const noexcept
Returns the x coordinate of the component's left edge.
void addAndMakeVisible(Component *child, int zOrder=-1)
Adds a child component to this one, and also makes the child visible if it isn't already.
FocusChangeType
Enumeration used by the focusGained() and focusLost() methods.
AccessibilityHandler * getAccessibilityHandler()
Returns the accessibility handler for this component, or nullptr if this component is not accessible.
void setOpaque(bool shouldBeOpaque)
Indicates whether any parts of the component might be transparent.
void setMouseCursor(const MouseCursor &cursorType)
Changes the mouse cursor shape to use when the mouse is over this component.
void repaint()
Marks the whole component as needing to be redrawn.
int getY() const noexcept
Returns the y coordinate of the top of this component.
void setBounds(int x, int y, int width, int height)
Changes the component's position and size.
void setWantsKeyboardFocus(bool wantsFocus) noexcept
Sets a flag to indicate whether this component wants keyboard focus or not.
Colour findColour(int colourID, bool inheritFromParent=false) const
Looks for a colour that has been registered with the given colour ID number.
int getWidth() const noexcept
Returns the component's width in pixels.
void mouseWheelMove(const MouseEvent &event, const MouseWheelDetails &wheel) override
Called when the mouse-wheel is moved.
static void JUCE_CALLTYPE beginDragAutoRepeat(int millisecondsBetweenCallbacks)
Ensures that a non-stop stream of mouse-drag events will be sent during the current mouse-drag operat...
ComponentPeer * getPeer() const
Returns the heavyweight window that contains this component.
LookAndFeel & getLookAndFeel() const noexcept
Finds the appropriate look-and-feel to use for this component.
Represents a particular font, including its size, style, etc.
float getHeight() const noexcept
Returns the total height of this font, in pixels.
static const String & getDefaultMonospacedFontName()
Returns a typeface font family that represents the default monospaced font.
float getStringWidthFloat(const String &text) const
Returns the total width of a string as it would be drawn using this font.
void setTypefaceName(const String &faceName)
Changes the font family of the typeface.
A set of glyphs, each with a position.
void addFittedText(const Font &font, const String &text, float x, float y, float width, float height, Justification layout, int maximumLinesToUse, float minimumHorizontalScale=0.0f)
Tries to fit some text within a given space.
A graphics context, used for drawing a component or image.
void setFont(const Font &newFont)
Changes the font to use for subsequent text-drawing functions.
void fillRectList(const RectangleList< float > &rectangles) const
Fills a set of rectangles using the current colour or brush.
bool reduceClipRegion(int x, int y, int width, int height)
Intersects the current clipping region with another region.
Rectangle< int > getClipBounds() const
Returns the position of the bounding box for the current clipping region.
void setColour(Colour newColour)
Changes the current drawing colour.
void fillAll() const
Fills the context's entire clip region with the current colour or brush.
@ centredRight
Indicates that the item should be centred vertically but placed on the right hand side.
@ centredLeft
Indicates that the item should be centred vertically but placed on the left hand side.
Represents a key press, including any modifier keys that are needed.
static const int tabKey
key-code for the tab key
juce_wchar getTextCharacter() const noexcept
Returns the character that is associated with this keypress.
static const int escapeKey
key-code for the escape key
static const int returnKey
key-code for the return key
static ModalComponentManager::Callback * forComponent(void(*functionToCall)(int, ComponentType *), ComponentType *component)
This is a utility function to create a ModalComponentManager::Callback that will call a static functi...
bool isPopupMenu() const noexcept
Checks whether the user is trying to launch a pop-up menu.
bool isShiftDown() const noexcept
Checks whether the shift key's flag is set.
@ commandModifier
Command key flag - on windows this is the same as the CTRL key flag.
@ shiftModifier
Shift key flag.
@ NormalCursor
The standard arrow cursor.
@ IBeamCursor
A vertical I-beam for positioning within text.
Contains position and status information about a mouse event.
const ModifierKeys mods
The key modifiers associated with the event.
const int x
The x-position of the mouse when the event occurred.
const int y
The y-position of the mouse when the event occurred.
int getNumberOfClicks() const noexcept
For a click event, the number of times the mouse was clicked in succession.
A pair of (x, y) coordinates.
ValueType y
The point's Y coordinate.
ValueType x
The point's X coordinate.
A general-purpose range object, that simply represents any linear range with a start and end point.
constexpr ValueType getStart() const noexcept
Returns the start of the range.
constexpr ValueType getEnd() const noexcept
Returns the end of the range.
Maintains a set of rectangles as a complex region.
void add(RectangleType rect)
Merges a new rectangle into the list.
Manages a rectangle and allows geometric operations to be performed on it.
Point< ValueType > getTopLeft() const noexcept
Returns the rectangle's top-left position as a Point.
static StringArray fromTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
Returns an array containing the tokens in a given string.
A simple class for holding temporary references to a string literal or String.
CharPointerType getCharPointer() const noexcept
Returns the character pointer currently being used to store this string.
static String repeatedString(StringRef stringToRepeat, int numberOfTimesToRepeat)
Creates a string which is a version of a string repeated and joined together.
int length() const noexcept
Returns the number of characters in the string.
String removeCharacters(StringRef charactersToRemove) const
Returns a version of this string with a set of characters removed.
static String charToString(juce_wchar character)
Creates a string from a single character.
String substring(int startIndex, int endIndex) const
Returns a subsection of the string.
static String getTextFromClipboard()
Gets the current clipboard's contents.
static void copyTextToClipboard(const String &text)
Copies a string of text onto the clipboard.
Makes repeated callbacks to a virtual method at a specified time interval.
bool canUndo() const
Returns true if there's at least one action in the list to undo.
bool canRedo() const
Returns true if there's at least one action in the list to redo.
#define TRANS(stringLiteral)
Uses the LocalisedStrings class to translate the given string literal.
@ paste
The command ID that should be used to send a "Paste from clipboard" command.
@ del
The command ID that should be used to send a "Delete" command.
@ redo
The command ID that should be used to send a "redo" command.
@ undo
The command ID that should be used to send a "undo" command.
@ cut
The command ID that should be used to send a "Cut" command.
@ copy
The command ID that should be used to send a "Copy to clipboard" command.
@ selectAll
The command ID that should be used to send a "Select all" command.
constexpr bool approximatelyEqual(Type a, Type b, Tolerance< Type > tolerance=Tolerance< Type >{} .withAbsolute(std::numeric_limits< Type >::min()) .withRelative(std::numeric_limits< Type >::epsilon()))
Returns true if the two floating-point numbers are approximately equal.
constexpr Type jmin(Type a, Type b)
Returns the smaller of two values.
constexpr Type jmax(Type a, Type b)
Returns the larger of two values.
RangedDirectoryIterator end(const RangedDirectoryIterator &)
Returns a default-constructed sentinel value.
Type jlimit(Type lowerLimit, Type upperLimit, Type valueToConstrain) noexcept
Constrains a value to keep it within a given range.
@ textChanged
Indicates that the visible text of a text element has changed.
@ textSelectionChanged
Indicates that the selection of a text element has changed.
float deltaY
The amount that the wheel has been moved in the Y axis.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
float deltaX
The amount that the wheel has been moved in the X axis.
bool isPositiveAndBelow(Type1 valueToTest, Type2 upperLimit) noexcept
Returns true if a value is at least zero, and also below a specified upper limit.
int CommandID
A type used to hold the unique ID for an application command.
int roundToInt(const FloatType value) noexcept
Fast floating-point-to-integer conversion.
constexpr int numElementsInArray(Type(&)[N]) noexcept
Handy function for getting the number of elements in a simple const C array.
Contains status information about a mouse wheel event.
Holds information describing an application command.
Array< KeyPress > defaultKeypresses
A list of zero or more keypresses that should be used as the default keys for this command.
void setActive(bool isActive) noexcept
An easy way to set or remove the isDisabled bit in the structure's flags field.
void setInfo(const String &shortName, const String &description, const String &categoryName, int flags) noexcept
Sets a number of the structures values at once.
Contains contextual details about the invocation of a command.
CommandID commandID
The UID of the command that should be performed.
Defines a syntax highlighting colour scheme.
Can be used to save and restore the editor's caret position, selection state, etc.
State(const CodeEditorComponent &)
Creates an object containing the state of the given editor.
void restoreState(CodeEditorComponent &) const
Updates the given editor with this saved state.
String toString() const
Returns a stringified version of this state that can be used to recreate it later.
This class is used to invoke a range of text-editor navigation methods on an object,...