39#include <wx/xml/xml.h>
40#include <wx/aui/aui.h>
41#include <wx/textfile.h>
42#include <wx/fdrepdlg.h>
48#include "CellPointers.h"
53#include "cells/ImgCell.h"
54#include "cells/ImgCellBase.h"
57#include "cells/TextCell.h"
117 wxString m_maximaDocDir;
119 bool m_updateControls =
true;
121 bool m_scrollToCaret =
false;
125 int m_newxPosition = -1;
127 int m_newyPosition = -1;
129 double m_zoomAtGestureStart = 1.0;
131 bool m_scrollToTopOfCell =
false;
133 bool m_windowActive =
true;
135 wxRegion m_regionToRefresh;
142 int m_scrollUnit = 10;
151 bool m_fullRedrawRequested =
false;
155 static wxDataFormat m_wxmFormat;
157 static wxDataFormat m_mathmlFormat;
159 static wxDataFormat m_mathmlFormat2;
161 static wxDataFormat m_rtfFormat;
163 static wxDataFormat m_rtfFormat2;
167 class MathMLDataObject :
public wxCustomDataObject
170 explicit MathMLDataObject(
const wxString &data);
175 wxCharBuffer m_databuf;
179 class wxmDataObject :
public wxCustomDataObject
182 explicit wxmDataObject(
const wxString &data);
187 wxCharBuffer m_databuf;
190 class MathMLDataObject2 :
public wxCustomDataObject
193 explicit MathMLDataObject2(
const wxString &data);
198 wxCharBuffer m_databuf;
203 class RtfDataObject :
public wxCustomDataObject
206 explicit RtfDataObject(
const wxString &data);
211 wxCharBuffer m_databuf;
214 class RtfDataObject2 :
public wxCustomDataObject
217 explicit RtfDataObject2(
const wxString &data);
222 wxCharBuffer m_databuf;
226 bool m_hasFocus =
true;
230 long m_lastBottom = 0;
258 TreeUndoAction(
GroupCell *start,
const wxString &oldText,
259 long long oldSelStart = -1,
long long oldSelEnd = -1) :
260 m_start(start), m_oldText(oldText),
261 m_oldSelStart(oldSelStart), m_oldSelEnd(oldSelEnd)
263 wxASSERT_MSG(start, _(
"Bug: Trying to record a cell contents change for undo without a cell."));
266 m_start(start), m_newCellsEnd(end)
268 wxASSERT_MSG(start, _(
"Bug: Trying to record a cell contents change for undo without a cell."));
271 m_start(start), m_newCellsEnd(end), m_oldCells(oldCells)
280 bool m_partOfAtomicAction =
false;
299 const wxString m_oldText;
307 const long long m_oldSelStart = -1;
308 const long long m_oldSelEnd = -1;
328 std::unique_ptr<GroupCell> m_oldCells;
332 using UndoActions = std::list<TreeUndoAction>;
335 UndoActions treeUndoActions;
338 UndoActions treeRedoActions;
341 wxString m_treeUndo_ActiveCellOldText;
343 long long m_treeUndo_ActiveCellOldSelStart = -1;
344 long long m_treeUndo_ActiveCellOldSelEnd = -1;
347 void TreeUndo_ClearRedoActionList();
350 void TreeUndo_ClearUndoActionList();
353 static void TreeUndo_DiscardAction(UndoActions *actionList);
356 static void TreeUndo_AppendAction(UndoActions *actionList)
358 if(!actionList->empty())
359 actionList->front().m_partOfAtomicAction =
true;
363 void TreeUndo_AppendAction(){TreeUndo_AppendAction(&treeUndoActions);}
372 void TreeUndo_LimitUndoBuffer();
379 bool TreeUndo(UndoActions *sourcelist, UndoActions *undoForThisOperation);
384 bool TreeUndoTextChange(UndoActions *sourcelist, UndoActions *undoForThisOperation);
388 bool TreeUndoCellDeletion(UndoActions *sourcelist, UndoActions *undoForThisOperation);
392 bool TreeUndoCellAddition(UndoActions *sourcelist, UndoActions *undoForThisOperation);
396 {
return TreeUndo(&treeUndoActions, &treeRedoActions); }
400 {
return TreeUndo(&treeRedoActions, &treeUndoActions); }
403 bool CanTreeUndo()
const;
406 bool CanTreeRedo()
const;
410 void TreeUndo_CellEntered();
414 void TreeUndo_CellLeft();
424 void TreeUndo_MarkCellsAsAdded(
GroupCell *start,
GroupCell *end, UndoActions *undoBuffer);
435 bool m_scrolledAwayFromEvaluation =
false;
441 wxString EscapeHTMLChars(wxString input);
444 wxString PrependNBSP(wxString input);
450 CLICK_TYPE_GROUP_SELECTION,
451 CLICK_TYPE_INPUT_SELECTION,
452 CLICK_TYPE_INPUT_LABEL_SELECTION,
453 CLICK_TYPE_OUTPUT_SELECTION
465 static void AddLineToFile(wxTextFile &output,
const wxString &s);
468 std::unique_ptr<Cell> CopySelection(
bool asData =
false)
const;
478 std::unique_ptr<Cell> CopySelection(
Cell *start,
Cell *end,
bool asData =
false)
const;
481 void GetMaxPoint(
int *width,
int *height);
484 void OnTimer(wxTimerEvent &event);
486#if wxCHECK_VERSION(3, 1, 1)
488 void OnZoom(wxZoomGestureEvent &event);
491 void OnMouseExit(wxMouseEvent &event);
493 void OnMouseEnter(wxMouseEvent &event);
507 void OnPaint(wxPaintEvent &event);
509 void DrawGroupCell(wxDC &dc, wxDC &adc,
GroupCell &cell);
517 void DrawGroupCell_UsingBitmap(wxDC *dc,
GroupCell *cell);
520 void PrepareDrawGC(wxDC &dc)
const;
522 void OnSize(wxSizeEvent &event);
524 void OnMouseRightDown(wxMouseEvent &event);
526 void OnSidebarKey(wxCommandEvent &event);
528 void OnMouseLeftUp(wxMouseEvent &event);
531 void OnMouseCaptureLost(wxMouseCaptureLostEvent &event);
533 void OnMouseLeftDown(wxMouseEvent &event);
535 void OnMouseLeftInGcCell(wxMouseEvent &event,
GroupCell *clickedInGC);
537 void OnMouseLeftInGcLeft(wxMouseEvent &event,
GroupCell *clickedInGC);
539 void OnMouseLeftInGc(wxMouseEvent &event,
GroupCell *clickedInGC);
541 void OnMouseMotion(wxMouseEvent &event);
544 void OnDoubleClick(wxMouseEvent &event);
547 void OnCharInActive(wxKeyEvent &event);
550 void OnCharNoActive(wxKeyEvent &event);
553 void SelectEditable(
EditorCell *editor,
bool up);
561 void SelectWithChar(
int ccode);
577 void ClickNDrag(wxPoint down, wxPoint up);
580 void SelectGroupCells(wxPoint down, wxPoint up);
589 void CheckUnixCopy();
591 void OnMouseMiddleUp(wxMouseEvent &event);
593 static bool IsLesserGCType(
int type,
int comparedTo);
614 wxPoint m_mousePoint;
638 bool m_leftDown =
false;
641 bool m_mouseDrag =
false;
642 bool m_mouseOutside =
false;
646 int m_clickType = CLICK_TYPE_NONE;
658 std::vector<wxString> m_completions;
659 bool m_autocompleteTemplates =
true;
665 {
return !m_tree || (!m_tree->GetNext() && m_tree->GetEditable()->GetValue().Length() <= 1); }
669 if(m_autocompletePopup != NULL)
670 m_autocompletePopup->Destroy();
678 void OnChar(wxKeyEvent &event);
705 void SetNotification(
const wxString &message,
int flags = wxICON_INFORMATION);
711 std::unique_ptr<GroupCell> m_tree;
715 static std::mutex m_drawDCLock;
720 void FocusFindDialogue()
743 int IndexSearchStartedAt()
const
746 CellPointers &GetCellPointers() {
return m_cellPointers; }
778 m_redrawStart = NULL;
779 m_fullRedrawRequested =
false;
857 bool CanUndo()
const;
859 bool CanRedo()
const;
869 void TreeUndo_ClearBuffers();
881 wxPoint pos = wxDefaultPosition, wxSize size = wxDefaultSize,
882 bool reactToEvents =
true);
894 std::unique_ptr<GroupCell>
CopyTree()
const;
908 UndoActions *undoBuffer);
922 void InsertLine(std::unique_ptr<Cell> &&newCell,
bool forceNewLine =
false);
946 void ResetInputPrompts();
955 bool CanPaste()
const
983 UndoActions *undoBuffer
1002 void DeleteSelection();
1063 void Animate(
bool run =
true)
const;
1069 void SetLastQuestion(
const wxString &lastQuestion){m_lastQuestion = lastQuestion;}
1070 wxString GetLastQuestion()
const {
return m_lastQuestion;}
1075 void PasteFromClipboard();
1083 bool Copy(
bool astext =
false)
const;
1115#if wxUSE_ENH_METAFILE
1117 bool CopyEMF()
const;
1123 wxSize CopyToFile(
const wxString &file)
const;
1125 wxSize CopyToFile(
const wxString &file,
Cell *start,
Cell *end,
bool asData =
false,
double scale = 1)
const;
1127 void CalculateReorderedCellIndices(
GroupCell *tree,
int &cellIndex, std::vector<int> &cellMap);
1140 ExportToMAC(wxTextFile &output,
GroupCell *tree,
bool wxm,
const std::vector<int> &cellMap,
bool fixReorderedIndices);
1159 wxString
GetString(
bool lb =
false)
const;
1161 GroupCell *GetTree()
const {
return m_tree.get(); }
1162 std::unique_ptr<GroupCell> *GetTreeAddress() {
return &m_tree; }
1197 bool ActivatePrevInput() {
return ActivateInput(-1); }
1198 bool ActivateNextInput() {
return ActivateInput(+1); }
1199 wxString GetStatusText()
const {
return m_statusText;}
1200 bool StatusTextChangedHas() {
1201 bool retval = (m_statusTextHas != m_statusTextHas_old) ||
1202 (m_statusText != m_statusText_old);
1203 m_statusText_old = m_statusText;
1204 m_statusTextHas_old = m_statusTextHas;
1207 bool StatusTextHas()
const {
return m_statusTextHas;}
1220 wxTimer m_displayTimeoutTimer;
1222 template <
class T_SRC,
class T_DEST>
1223 inline std::unique_ptr<T_DEST> unique_cast(std::unique_ptr<T_SRC> &&src)
1225 if (!src)
return std::unique_ptr<T_DEST>();
1227 T_DEST *dest_ptr = &
dynamic_cast<T_DEST &
>(*src.get());
1229 (void) src.release();
1230 return std::unique_ptr<T_DEST>(dest_ptr);
1232 wxString m_statusText;
1233 wxString m_statusText_old;
1234 bool m_statusTextHas =
false;
1235 bool m_statusTextHas_old =
false;
1236 void StatusText(
const wxString &text){m_statusText = text; m_statusTextHas =
true;}
1237 void UnsetStatusText(){m_statusTextHas =
false;}
1238 bool ActivateInput(
int direction);
1245 m_scrollToCaret =
true;
1257 m_cellPointers.ScrollToCell(cell);
1258 m_scrollToTopOfCell = scrollToTop;
1259 m_scrollToCaret =
false;
1354 void UndoInsideCell();
1362 void RedoInsideCell();
1384 void ScrolledAwayFromEvaluation(
bool ScrolledAway);
1386 bool ScrolledAwayFromEvaluation()
const
1387 {
return m_scrolledAwayFromEvaluation; }
1391 bool IsSaved()
const
1394 void SetSaved(
bool saved)
1395 {
if(
m_saved != saved) m_updateControls =
true;
m_saved = saved;}
1397 void OutputChanged()
1403 void RemoveAllOutput();
1418 void AddDocumentToEvaluationQueue();
1457 void SetZoomFactor(
double newzoom);
1459 void CommentSelection();
1466 void OnScrollEvent(wxScrollWinEvent &ev);
1467 void CheckIfActiveCellScrolledOut();
1479 bool FindIncremental(
const wxString &str,
bool down,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true);
1480 bool FindIncremental_RegEx(
const wxString &str,
bool down,
bool searchInInput =
true,
bool searchInOutput =
true);
1486 bool FindNext(
const wxString &str,
bool down,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true,
bool warn =
true);
1487 bool FindNext_Regex(
const wxString &str,
const bool &down,
bool searchInInput =
true,
bool searchInOutput =
true,
bool warn =
true);
1493 void Replace(
const wxString &oldString,
const wxString &newString,
bool ignoreCase);
1494 void Replace_RegEx(
const wxString &oldString,
const wxString &newString);
1500 int ReplaceAll(
const wxString &oldString,
const wxString &newString,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true);
1501 int ReplaceAll_RegEx(
const wxString &oldString,
const wxString &newString,
bool searchInInput =
true,
bool searchInOutput =
true);
1503 wxString GetInputAboveCaret();
1505 wxString GetOutputAboveCaret();
1523 void SetActiveCellText(
const wxString &text);
1525 bool InsertText(
const wxString &text);
1527 void OpenNextOrCreateCell();
1563 void SetMaximaDocDir(
const wxString &dir)
1565 m_maximaDocDir = dir;
1585 wxString GetHelpfileAnchorName(
const wxString &keyword)
1586 {
return m_maximaManual.GetHelpfileAnchorName(keyword);}
1587 wxString GetHelpfileURL(
const wxString &keyword)
1588 {
return m_maximaManual.GetHelpfileURL(keyword);}
1594#if wxUSE_ACCESSIBILITY
1595 int GetAccessibilityId(
Cell *cell)
const;
1605 bool isValid()
const
1606 {
return pos <
input.length(); }
1609 inline wxChar operator*()
const
1610 {
return input.at(pos); }
1621#if wxUSE_ACCESSIBILITY
1622 class AccessibilityInfo:
public wxAccessible
1625 AccessibilityInfo(wxWindow *parent,
Worksheet *worksheet);
1626 wxAccStatus GetName (
int childId, wxString *name);
1627 wxAccStatus GetChildCount (
int *childCount);
1628 wxAccStatus GetChild (
int childId, wxAccessible **child);
1629 wxAccStatus GetDefaultAction(
int childId, wxString *actionName);
1630 wxAccStatus GetParent (wxAccessible ** parent);
1631 wxAccStatus GetFocus (
int *childId, wxAccessible **child);
1632 wxAccStatus GetLocation (wxRect &rect,
int elementId);
1633 wxAccStatus HitTest (
const wxPoint &pt,
1634 int *childId, wxAccessible **childObject);
1635 wxAccStatus GetDescription(
int childId, wxString *description);
1636 wxAccStatus GetRole(
int childId, wxAccRole *role);
1637 wxAccStatus GetState(
int childId,
long *state);
1639 wxWindow *m_parent = NULL;
1642 class CaretAccessibilityInfo :
public wxAccessible {
1644 CaretAccessibilityInfo(AccessibilityInfo* parent,
Worksheet* worksheet)
1645 : wxAccessible(worksheet->GetTargetWindow()), m_parent(parent), m_worksheet(worksheet) {}
1647 wxAccStatus GetName(
int childId, wxString *name)
override;
1648 wxAccStatus GetDescription(
int WXUNUSED(childId), wxString *description)
override;
1649 wxAccStatus GetParent(wxAccessible **parent)
override;
1650 wxAccStatus GetChildCount(
int *childCount)
override;
1651 wxAccStatus GetChild(
int childId, wxAccessible **child)
override;
1652 wxAccStatus GetRole(
int childId, wxAccRole *role)
override;
1654 AccessibilityInfo* m_parent;
1657 CaretAccessibilityInfo* m_caretAccessible =
nullptr;
1661 MaximaManual *GetMaximaManual() {
return &m_maximaManual;}
1663 void FocusTextControl();
1664 wxString m_lastQuestion;
1665 int m_virtualWidth_Last = -1;
1666 int m_virtualHeight_Last = -1;
1667 int m_maxWidth_Cached = -1;
1670 virtual wxSize DoGetBestClientSize()
const override;
1671#if wxUSE_ACCESSIBILITY
1672 AccessibilityInfo *m_accessibilityInfo = NULL;
1686inline Worksheet *Cell::GetWorksheet()
const
1689 wxASSERT(worksheet != NULL);
1690 return static_cast<Worksheet*
>(worksheet);
1693wxDECLARE_EVENT(TOC_UPDATE_NEEDED_EVENT, wxCommandEvent);
This file declares the class AnimationCell.
This file declares the class AutoComplete.
The definition of the base class of all cells the worksheet consists of.
CellType
The supported types of math cells.
Definition: Cell.h:64
@ MC_TYPE_GROUP
A group cells that bundles several individual cells together.
Definition: Cell.h:82
This file contains the definition of the class EditorCell.
This file declares the class EventIDs that contains unique IDs for many events wxMaxima needs.
This file defines the class FindReplaceDialog.
This file defines the class GroupCell that bundles input and output in the worksheet.
GroupType
All types a GroupCell can be of.
Definition: GroupCell.h:42
This file declares the class MaximaManual.
This file defines the class Notification.
The definition of the class RecentDocuments that provides a recent files mechanism that is extensible...
The file that contains the "variables" sidepane.
Definition: AnimationCell.h:46
Definition: Autocomplete.h:61
autoCompletionType
All types of things we can autocomplete.
Definition: Autocomplete.h:68
void AddSymbols(wxString xml)
Interprets the XML autocompletable symbol list maxima can send us.
Definition: Autocomplete.cpp:135
void AddSymbol(wxString fun, autoCompletionType type=command)
Manually add an autocompletable symbol to our symbols lists.
Definition: Autocomplete.cpp:647
A list of editor cells containing error messages.
Definition: CellPointers.h:70
The storage for pointers to cells.
Definition: CellPointers.h:45
ErrorList m_errorList
The list of cells maxima has complained about errors in.
Definition: CellPointers.h:93
bool m_scrollToCell
Is scrolling to a cell scheduled?
Definition: CellPointers.h:199
CellPtr< EditorCell > m_activeCell
Which EditCell the blinking cursor is in?
Definition: CellPointers.h:103
CellPtr< EditorCell > m_cellKeyboardSelectionStartedIn
The EditorCell the keyboard selection has started in.
Definition: CellPointers.h:97
void SetWorkingGroup(GroupCell *group)
Sets the cell maxima currently works on. NULL if there isn't such a cell.
Definition: CellPointers.cpp:90
CellPtr< Cell > m_selectionStart
The first cell of the currently selected range of Cells.
Definition: CellPointers.h:147
int m_indexSearchStartedAt
Which cursor position incremental search has started at?
Definition: CellPointers.h:101
CellPtr< EditorCell > m_cellMouseSelectionStartedIn
The EditorCell the mouse selection has started in.
Definition: CellPointers.h:95
CellPtr< EditorCell > m_cellSearchStartedIn
The EditorCell the search was started in.
Definition: CellPointers.h:99
CellPtr< TextCell > m_currentTextCell
The textcell the text maxima is sending us was ending in.
Definition: CellPointers.h:111
CellPtr< Cell > m_selectionEnd
The last cell of the currently selected range of Cells.
Definition: CellPointers.h:168
A weak non-owning pointer that becomes null whenever the observed object is destroyed.
Definition: CellPtr.h:489
The base class all cell types the worksheet can consist of are derived from.
Definition: Cell.h:142
GroupCell * GetGroup() const
Returns the group cell this cell belongs to.
Definition: Cell.cpp:278
CellType GetType() const
Returns the type of this cell.
Definition: Cell.h:453
Configuration * m_configuration
A pointer to the configuration responsible for this worksheet.
Definition: Cell.h:1066
The configuration storage for the current worksheet.
Definition: Configuration.h:87
wxWindow * GetWorkSheet() const
Get the worksheet this configuration storage is valid for.
Definition: Configuration.h:945
void ReadConfig()
Read the config from the wxConfig object.
Definition: Configuration.cpp:771
This class defines what the user sees as input cell.
Definition: EditorCell.h:59
bool CanCopy() const override
Select Can we copy the editable text of this cell?
Definition: EditorCell.h:288
A simple FIFO queue with manual removal of elements.
Definition: EvaluationQueue.h:43
The find+replace dialog.
Definition: FindReplaceDialog.h:42
A cell grouping input (and, if there is one, also the output) cell to a foldable item.
Definition: GroupCell.h:87
Definition: ImgCellBase.h:42
Definition: MaximaManual.h:59
void LoadHelpFileAnchors(const wxString &docdir, const wxString &maximaVersion)
Search maxima's help file for command and variable names.
Definition: MaximaManual.cpp:532
A class that maintains a list of recent documents.
Definition: RecentDocuments.h:42
A Text cell.
Definition: TextCell.h:38
Definition: Worksheet.h:1599
const wxString & input
reference to input string (must be a reference, so it can be modified)
Definition: Worksheet.h:1618
The canvas that contains the spreadsheet the whole program is about.
Definition: Worksheet.h:109
bool IsActiveInLast() const
Is the editor active in the last cell of the worksheet?
Definition: Worksheet.h:1306
GroupCell * ToggleFold(GroupCell *which)
Fold or unfold a cell.
Definition: Worksheet.cpp:1252
void ClearSelection()
Clear the selection - make it empty, i.e. no selection.
Definition: Worksheet.h:1179
const wxString UnicodeToMaxima(wxString s)
Make a few unicode characters interpretable by maxima.
Definition: Worksheet.cpp:5831
bool CanMergeSelection() const
Can we merge the selected cells into one?
Definition: Worksheet.cpp:6458
ImgCellBase * GetSelectedImgCellBase() const
Returns the selected cell - or NULL, if the selection isn't image nor animation.
Definition: Worksheet.h:1035
wxString RTFStart() const
The start of a RTF document.
Definition: Worksheet.cpp:8448
int m_pointer_x
The x position of the mouse pointer.
Definition: Worksheet.h:1677
void SetDefaultHCaret()
Set the HCaret to its default location, at the end of the document.
Definition: Worksheet.cpp:7081
bool CanDeleteRegion(GroupCell *start, const GroupCell *end) const
Is it possible to delete the cells between start and end?
Definition: Worksheet.cpp:3007
void AddSectionToEvaluationQueue(GroupCell *start)
Adds a chapter, a section or a subsection to the evaluation queue.
Definition: Worksheet.cpp:6194
void AddSymbols(const wxString &xml)
Add a xml-encoded list of symbols to the autocompletion list.
Definition: Worksheet.h:1517
void FoldAll()
Recursively folds the whole document.
Definition: Worksheet.cpp:1289
virtual ~Worksheet()
The destructor.
Definition: Worksheet.cpp:441
bool CutToClipboard()
Add the currently selected cells to the clipboard and delete them.
Definition: Worksheet.cpp:6776
GroupCell * GetInsertGroup() const
The group that the line's cells will belong to - used by InsertLine.
Definition: Worksheet.cpp:861
bool QuestionPending() const
Does maxima wait for the answer of a question?
Definition: Worksheet.h:1553
void AddEntireDocumentToEvaluationQueue()
Schedule all cells in the document for evaluation.
Definition: Worksheet.cpp:6185
GroupCell * FirstVisibleGC()
The first groupCell that is currently visible.
Definition: Worksheet.cpp:2404
void UpdateConfigurationClientSize()
Inform the configuration about the current client size.
Definition: Worksheet.cpp:3492
int ReplaceAll(const wxString &oldString, const wxString &newString, bool ignoreCase, bool searchInInput=true, bool searchInOutput=true)
Replace all occurrences of a string.
Definition: Worksheet.cpp:7897
void AddSymbols(wxXmlDocument xml)
Add a xml-encoded list of symbols to the autocompletion list.
Definition: Worksheet.h:1520
void LoadHelpFileAnchors(const wxString &docdir, const wxString &maximaVersion)
Tries to parse maxima's manual in order to find out which anchors it contains.
Definition: Worksheet.h:1583
bool ExportToHTML(const wxString &file)
Export the file to an html document.
Definition: Worksheet.cpp:4792
void OpenHCaret(const wxString &txt={})
Place the cursor into a new cell where the horizontal cursor is.
Definition: Worksheet.h:1334
TextCell * GetSelectedTextCell() const
Returns the selected cell - or NULL, if the selection isn't a text cell.
Definition: Worksheet.h:1043
void ScrollToError()
Unfold the cell that produced the error, if necessary and, if requested, scroll to it.
Definition: Worksheet.cpp:811
bool HCaretActive() const
Is the vertically-drawn cursor active?
Definition: Worksheet.h:848
void OnEraseBackground(wxEraseEvent &WXUNUSED(event))
Cannot be static as it is called using a function pointer to an object.
Definition: Worksheet.h:586
void ClearDocument()
Empties the current document.
Definition: Worksheet.cpp:1146
wxString RTFEnd() const
The end of a RTF document.
Definition: Worksheet.cpp:8500
void UnfoldAll()
Recursively unfolds the whole document.
Definition: Worksheet.cpp:1299
void UpdateTableOfContents()
Update the table of contents.
Definition: Worksheet.cpp:8824
Cell * GetSelectionEnd() const
Return the last of the currently selected cells.
Definition: Worksheet.h:1175
bool m_blinkDisplayCaret
true = blink the cursor
Definition: Worksheet.h:649
void QuestionPending(bool pending)
Does maxima currently wait for the answer of a question?
Definition: Worksheet.h:1560
void DeleteCurrentCell()
Delete the currently active cell - or the cell above this one.
Definition: Worksheet.cpp:2992
AnimationCell * GetSelectedAnimation() const
Returns the selected cell - or NULL, if the selection isn't an animation.
Definition: Worksheet.h:1019
void Replace(const wxString &oldString, const wxString &newString, bool ignoreCase)
Replace the current occurrence of a string.
Definition: Worksheet.cpp:7863
bool CopyMatlab() const
Copy a Matlab representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2814
bool CopyText() const
Copy a textual representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2877
bool m_inPopupMenu
Is there an active popup menu?
Definition: Worksheet.h:1683
wxTimer m_keyboardInactiveTimer
The timer that tells us when the keyboard is inactive so an autosave isn't disrupting.
Definition: Worksheet.h:888
void Animate(bool run=true) const
Animate the current slide show.
Definition: Worksheet.cpp:7053
static GroupCell * StartOfSectioningUnit(GroupCell *start)
Finds the start of the current chapter/section/...
Definition: Worksheet.cpp:3455
bool CopyRTF() const
Copy a rtf version of the current selection to the clipboard.
Definition: Worksheet.cpp:4543
void UpdateConfig()
Re-read the configuration.
Definition: Worksheet.h:823
int m_pointer_y
The y position of the mouse pointer.
Definition: Worksheet.h:1679
bool Copy(bool astext=false) const
Copy the current selection to the clipboard.
Definition: Worksheet.cpp:2657
bool CopyAnimation() const
Copy the current animation to the clipboard.
Definition: Worksheet.cpp:4521
void StepAnimation(int change=1)
Set the slide of the currently selected animation or advance it by one step.
Definition: Worksheet.cpp:4372
void SetAnswer(const wxString &answer)
Handling questions from and answers for maxima.
Definition: Worksheet.cpp:3190
GroupCell * ToggleFoldAll(GroupCell *which)
Toggles the status of the fold for the given GroupCell and its children.
Definition: Worksheet.cpp:1273
void OnChar(wxKeyEvent &event)
Key for a printable character pressed.
Definition: Worksheet.cpp:4164
void AddSelectionToEvaluationQueue()
Schedule all cells in the selection to be evaluated.
Definition: Worksheet.cpp:6223
bool CanEdit()
We can edit the input if the we have the whole input in selection!
Definition: Worksheet.cpp:6075
bool HasCellsSelected() const
Is at least one entire cell selected?
Definition: Worksheet.h:968
void OnSetFocus(wxFocusEvent &event)
What to do if the worksheet is in the input focus.
Definition: Worksheet.cpp:7006
void SetNotification(const wxString &message, int flags=wxICON_INFORMATION)
Inform the user that something happened in a non-active window.
Definition: Worksheet.cpp:4142
void ScheduleScrollToCell(Cell *cell, bool scrollToTop=true)
Schedules scrolling to a given cell.
Definition: Worksheet.h:1255
GroupCell * InsertGroupCells(std::unique_ptr< GroupCell > &&cells, GroupCell *where, UndoActions *undoBuffer)
Insert group cells into the worksheet.
Definition: Worksheet.cpp:741
void AddDocumentTillHereToEvaluationQueue()
Schedule all cells stopping with the one the caret is in for evaluation.
Definition: Worksheet.cpp:6243
void OnComplete(wxCommandEvent &event)
Is called if an action from the autocomplete menu is selected.
Definition: Worksheet.cpp:8198
bool CanAnimate() const
Does it make sense to enable the "Play" button and the slider now?
Definition: Worksheet.h:1051
bool m_mouseMotionWas
Was there a mouse motion we didn't react to until now?
Definition: Worksheet.h:1681
void SelectAll()
Select the whole document.
Definition: Worksheet.cpp:6929
void OnKillFocus(wxFocusEvent &event)
What to do if the worksheet looses the input focus.
Definition: Worksheet.cpp:7018
void InsertLine(std::unique_ptr< Cell > &&newCell, bool forceNewLine=false)
Add a new line to the output cell of the working group.
Definition: Worksheet.cpp:870
void ClearNotification()
Clears the notification message from SetNotification.
Definition: Worksheet.cpp:4140
void OnFollow()
Called when the "Scroll to currently evaluated" button is pressed.
Definition: Worksheet.cpp:8382
bool m_hCaretActive
Is the active cursor the one represented by a horizontal line?
Definition: Worksheet.h:620
Cell * GetSelectionStart() const
Return the first of the currently selected cells.
Definition: Worksheet.h:1168
void FoldOccurred()
Call when a fold action was detected, to update the state in response to a fold occurring.
Definition: Worksheet.cpp:1240
ImgCell * GetSelectedImgCell() const
Returns the selected cell - or NULL, if the selection isn't an image.
Definition: Worksheet.h:1027
Cell * FindCellByUUID(const wxString &uuid)
Find a cell by its UUID.
Definition: Worksheet.cpp:6291
void EraseBackground(wxEraseEvent &event)
Is called if wxWidgets wants to erase the worksheet's background.
Definition: Worksheet.cpp:244
bool CanDeleteSelection() const
Is it possible to delete the currently selected cells?
Definition: Worksheet.cpp:2976
AutoComplete m_autocomplete
The storage for the autocompletion feature.
Definition: Worksheet.h:726
ToolBar * m_mainToolBar
The toolbar of the main window: We need to access it and therefore have it defined here.
Definition: Worksheet.h:1533
CellPtr< GroupCell > m_hCaretPositionEnd
The end of the selection when selecting group with the horizontally drawn cursor.
Definition: Worksheet.h:637
bool m_questionPrompt
true = the last reply from maxima was a question
Definition: Worksheet.h:1547
bool CaretVisibleIs()
Is the caret (hcaret or vcaret) currently visible on the worksheet?
Definition: Worksheet.cpp:7806
EditorCell * GetActiveCell() const
Get the currently active EditorCell.
Definition: Worksheet.h:731
bool UpdateControlsNeeded()
Is an update of the worksheet controls needed?
Definition: Worksheet.h:113
bool CopyCells() const
Copy the selection to the clipboard as it would appear in a .wxm file.
Definition: Worksheet.cpp:2906
bool OpenQuestionCaret(const wxString &txt={})
Move the cursor to the question maxima currently asks and if needed add a cell for user input.
Definition: Worksheet.cpp:3198
bool FindIncremental(const wxString &str, bool down, bool ignoreCase, bool searchInInput=true, bool searchInOutput=true)
Do an incremental search from the cursor or the point the last search started at.
Definition: Worksheet.cpp:7290
GroupCell * GetLastCell()
Returns the last cell of the worksheet.
Definition: Worksheet.h:1310
GroupCell * GetHCaret()
The cell the horizontal cursor is above. NULL means at the start of the document.
Definition: Worksheet.cpp:7064
bool IsSelected(CellType type)
Does the selection start with a cell of the type "type".
Definition: Worksheet.cpp:7044
wxString ConvertSelectionToMathML() const
Convert the current selection to MathML.
Definition: Worksheet.cpp:2738
bool CanUndoInsideCell() const
Is it possible to issue an undo in the currently selected cell?
Definition: Worksheet.cpp:7130
bool RecalculateIfNeeded(bool timeout=false)
Actually recalculate the worksheet.
Definition: Worksheet.cpp:945
void SetHCaret(GroupCell *where)
Set the HCaret at the location of the given Cell.
Definition: Worksheet.cpp:7091
bool CanRedoInsideCell() const
Is it possible to issue an undo in the currently selected cell?
Definition: Worksheet.cpp:7144
bool GCContainsCurrentQuestion(const GroupCell *cell)
Does the GroupCell cell points to contain the question currently asked by maxima?
Definition: Worksheet.cpp:3427
bool IsEmpty() const
Is this worksheet empty?
Definition: Worksheet.h:664
void NumberSections() const
Renumber all sections.
Definition: Worksheet.cpp:1179
CellPtr< GroupCell > m_recalculateStart
Where to start recalculation. NULL = No recalculation needed.
Definition: Worksheet.h:1675
bool m_saved
True if no changes have to be saved.
Definition: Worksheet.h:657
void OnKeyDown(wxKeyEvent &event)
A special key has been pressed.
Definition: Worksheet.cpp:3322
EditorCell * KeyboardSelectionStart() const
Tells us which cell the keyboard selection has started in.
Definition: Worksheet.h:734
void ExportToMAC(wxTextFile &output, GroupCell *tree, bool wxm, const std::vector< int > &cellMap, bool fixReorderedIndices)
Export a region of the file to a .wxm or .mac file maxima's load command can read.
Definition: Worksheet.cpp:5955
void SetSelection(Cell *sel)
Select the cell sel.
Definition: Worksheet.h:1182
void AddCellToEvaluationQueue(GroupCell *gc)
Schedule this cell for evaluation.
Definition: Worksheet.cpp:6265
void SetCellStyle(GroupCell *group, GroupType style)
Change the style of a cell.
Definition: Worksheet.cpp:3103
bool Autocomplete(AutoComplete::autoCompletionType type=AutoComplete::command)
Definition: Worksheet.cpp:7957
wxBitmap m_memory
A memory we can manually buffer the contents of the area that is to be redrawn in.
Definition: Worksheet.h:1669
wxTimer m_caretTimer
The cursor blink rate. Also the timeout for redrawing the worksheet.
Definition: Worksheet.h:655
void LoadSymbols()
Compile a list of known autocompletion symbols.
Definition: Worksheet.cpp:5829
void SelectGroupCell(GroupCell *cell)
Set this cell as the currently selected one.
Definition: Worksheet.cpp:8368
void ShowPoint(wxPoint point)
Scrolls to a point on the worksheet.
Definition: Worksheet.cpp:6732
void WindowActive(bool active)
Is this window active?
Definition: Worksheet.h:698
bool ExportToTeX(const wxString &file)
export to a LaTeX file
Definition: Worksheet.cpp:5712
bool IsSelectionInWorkingGroup()
Is the selection in the current working group?
Definition: Worksheet.cpp:7059
void ShowHCaret()
Activates the horizontal cursor.
Definition: Worksheet.cpp:7123
void CodeCellVisibilityChanged()
To be called after enabling or disabling the visibility of code cells.
Definition: Worksheet.cpp:5700
void ScrollToCaret()
Request to scroll to the cursor as soon as wxMaxima is idle.
Definition: Worksheet.h:1242
bool m_hCaretBlinkVisible
Is the blinking vertically-drawn cursor currently visible?
Definition: Worksheet.h:651
void MarkRefreshAsDone()
Handle redrawing the worksheet or of parts of it.
Definition: Worksheet.h:776
bool CopyMathML() const
Copy the MathML representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2787
bool CopyBitmap() const
Copy a bitmap of the current selection to the clipboard.
Definition: Worksheet.cpp:4514
bool PointVisibleIs(wxPoint point)
Is the point currently visible on the worksheet?
Definition: Worksheet.cpp:6711
GroupCell * GetLastCellInWorksheet() const
Returns a pointer to the last cell of this worksheet.
Definition: Worksheet.cpp:2542
void ScrollToStart()
Scroll to the start of the worksheet.
Definition: Worksheet.h:839
void Recalculate(Cell *start)
Schedule a recalculation of the worksheet starting with the cell start.
Definition: Worksheet.cpp:1075
void AddSymbol(const wxString &fun, AutoComplete::autoCompletionType type=AutoComplete::command)
Add a symbol to the autocompletion list.
Definition: Worksheet.h:1513
bool FindNext(const wxString &str, bool down, bool ignoreCase, bool searchInInput=true, bool searchInOutput=true, bool warn=true)
Find the next occurrence of a string.
Definition: Worksheet.cpp:7312
bool SectioningMoveIn(GroupCell *parent)
Make this chapter/section/... a section/subsection/... changing its subheadings, too.
Definition: Worksheet.cpp:8235
wxBitmap ConvertSelectionToBitmap() const
Convert the current selection to a bitmap.
std::optional< Notification > m_notificationMessage
A error notification message.
Definition: Worksheet.h:696
void RequestRedraw(GroupCell *start=NULL)
Request the worksheet to be redrawn.
Definition: Worksheet.cpp:413
int GetCellIndex(Cell *cell) const
Returns the index in (i...) or (o...)
Definition: Worksheet.cpp:4695
bool RedrawIfRequested()
Redraw the worksheet if RequestRedraw() has been called.
Definition: Worksheet.cpp:256
void UpdateScrollPos()
Execute all collected scroll events in one go.
Definition: Worksheet.cpp:3444
CellPtr< GroupCell > m_hCaretPosition
The group above the hcaret, NULL for the top of the document See EditorCell::GetActiveCell() for the ...
Definition: Worksheet.h:625
void SetActiveCell(EditorCell *cell)
Mark an editor cell as the active one.
Definition: Worksheet.cpp:6627
FindReplaceDialog * m_findDialog
The find-and-replace-dialog.
Definition: Worksheet.h:845
void QuestionAnswered()
Mark the current question from maxima as "answered"..
Definition: Worksheet.cpp:3431
void DeleteRegion(GroupCell *start, GroupCell *end, UndoActions *undoBuffer)
Definition: Worksheet.cpp:3127
bool ScrollToCaretIfNeeded()
Scrolls to the cursor, if requested.
Definition: Worksheet.cpp:7833
std::unique_ptr< GroupCell > CopyTree() const
Copies the worksheet's entire contents.
Definition: Worksheet.cpp:4510
GroupCell * EndOfSectioningUnit(GroupCell *start)
Finds the end of the current chapter/section/...
Definition: Worksheet.cpp:3472
std::vector< wxString > m_replacementsForCurrentWord
Suggestions for how the word that was right-clicked on could continue.
Definition: Worksheet.h:1593
EvaluationQueue m_evaluationQueue
The list of cells that have to be evaluated.
Definition: Worksheet.h:1442
void ForceRedraw()
Redraw the window now and mark any pending redraw request as "handled".
Definition: Worksheet.h:813
bool CopyTeX() const
Copy the TeX representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2842
void AddRestToEvaluationQueue()
Add all cells below the cursor to the evaluation queue.
Definition: Worksheet.cpp:6203
void ScrollToCellIfNeeded()
Scrolls to the cell given by ScheduleScrollToCell; Is called once we have time to do so.
Definition: Worksheet.cpp:6313
wxTimer m_timer
Time step for autoscrolll when the mouse is outside the window.
Definition: Worksheet.h:653
void OnMouseWheel(wxMouseEvent &event)
Called if the mouse wheel sents events.
Definition: Worksheet.cpp:2438
void CloseAutoCompletePopup()
Close the autocompletion pop-up if it is currently open.
Definition: Worksheet.h:667
bool SectioningMoveOut(GroupCell *parent)
Make this section/subsection/... a chapter/section/... changing its subheadings, too.
Definition: Worksheet.cpp:8277
bool FollowEvaluation() const
Query if we want to automatically scroll to the cell that is currently evaluated.
Definition: Worksheet.h:1376
CellPtr< GroupCell > m_hCaretPositionStart
The start for the selection when selecting group with the horizontally drawn cursor.
Definition: Worksheet.h:631
void DestroyTree()
Clear the whole worksheet.
Definition: Worksheet.cpp:4501
wxString GetString(bool lb=false) const
Convert the current selection to a string.
Definition: Worksheet.cpp:2639
GroupCell * GetWorkingGroup(bool resortToLast=false) const
Returns the cell maxima currently works on.
Definition: Worksheet.cpp:839
bool m_followEvaluation
Do we want to automatically scroll to a cell as soon as it is being evaluated?
Definition: Worksheet.h:640
bool CopySVG() const
Copy a svg of the current selection to the clipboard.
Definition: Worksheet.cpp:4529
wxPoint m_leftDownPosition
The position the left mouse key was pressed at.
Definition: Worksheet.h:611
wxString m_currentFile
The name of the currently-opened file.
Definition: Worksheet.h:830
void Evaluate()
Trigger the evaluation of the current cell(s)
Definition: Worksheet.cpp:3313
void OnScrollChanged(wxScrollEvent &ev)
Called if the user is using the scrollbar for scrolling through the document.
Definition: Worksheet.cpp:7227
void OnActivate(wxActivateEvent &event)
Is called if this element looses or gets the focus.
Definition: Worksheet.cpp:7083
void AddToEvaluationQueue(GroupCell *cell)
Adds a group cell to the evaluation queue marking its contents as "outdated".
Definition: Worksheet.cpp:6171