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 m_start(start), m_oldText(oldText)
261 wxASSERT_MSG(start, _(
"Bug: Trying to record a cell contents change for undo without a cell."));
264 m_start(start), m_newCellsEnd(end)
266 wxASSERT_MSG(start, _(
"Bug: Trying to record a cell contents change for undo without a cell."));
269 m_start(start), m_newCellsEnd(end), m_oldCells(oldCells)
278 bool m_partOfAtomicAction =
false;
291 const wxString m_oldText;
299 GroupCell *
const m_newCellsEnd =
nullptr;
308 std::unique_ptr<GroupCell> m_oldCells;
312 using UndoActions = std::list<TreeUndoAction>;
315 UndoActions treeUndoActions;
318 UndoActions treeRedoActions;
321 wxString m_treeUndo_ActiveCellOldText;
324 void TreeUndo_ClearRedoActionList();
327 void TreeUndo_ClearUndoActionList();
330 static void TreeUndo_DiscardAction(UndoActions *actionList);
333 static void TreeUndo_AppendAction(UndoActions *actionList)
335 if(!actionList->empty())
336 actionList->front().m_partOfAtomicAction =
true;
340 void TreeUndo_AppendAction(){TreeUndo_AppendAction(&treeUndoActions);}
349 void TreeUndo_LimitUndoBuffer();
356 bool TreeUndo(UndoActions *sourcelist, UndoActions *undoForThisOperation);
361 bool TreeUndoTextChange(UndoActions *sourcelist, UndoActions *undoForThisOperation);
365 bool TreeUndoCellDeletion(UndoActions *sourcelist, UndoActions *undoForThisOperation);
369 bool TreeUndoCellAddition(UndoActions *sourcelist, UndoActions *undoForThisOperation);
373 {
return TreeUndo(&treeUndoActions, &treeRedoActions); }
377 {
return TreeUndo(&treeRedoActions, &treeUndoActions); }
380 bool CanTreeUndo()
const;
383 bool CanTreeRedo()
const;
387 void TreeUndo_CellEntered();
391 void TreeUndo_CellLeft();
401 void TreeUndo_MarkCellsAsAdded(
GroupCell *start,
GroupCell *end, UndoActions *undoBuffer);
412 bool m_scrolledAwayFromEvaluation =
false;
418 wxString EscapeHTMLChars(wxString input);
421 wxString PrependNBSP(wxString input);
427 CLICK_TYPE_GROUP_SELECTION,
428 CLICK_TYPE_INPUT_SELECTION,
429 CLICK_TYPE_INPUT_LABEL_SELECTION,
430 CLICK_TYPE_OUTPUT_SELECTION
442 static void AddLineToFile(wxTextFile &output,
const wxString &s);
445 std::unique_ptr<Cell> CopySelection(
bool asData =
false)
const;
455 std::unique_ptr<Cell> CopySelection(
Cell *start,
Cell *end,
bool asData =
false)
const;
458 void GetMaxPoint(
int *width,
int *height);
461 void OnTimer(wxTimerEvent &event);
463#if wxCHECK_VERSION(3, 1, 1)
465 void OnZoom(wxZoomGestureEvent &event);
468 void OnMouseExit(wxMouseEvent &event);
470 void OnMouseEnter(wxMouseEvent &event);
484 void OnPaint(wxPaintEvent &event);
486 void DrawGroupCell(wxDC &dc, wxDC &adc,
GroupCell &cell);
494 void DrawGroupCell_UsingBitmap(wxDC *dc,
GroupCell *cell);
497 void PrepareDrawGC(wxDC &dc)
const;
499 void OnSize(wxSizeEvent &event);
501 void OnMouseRightDown(wxMouseEvent &event);
503 void OnSidebarKey(wxCommandEvent &event);
505 void OnMouseLeftUp(wxMouseEvent &event);
508 void OnMouseCaptureLost(wxMouseCaptureLostEvent &event);
510 void OnMouseLeftDown(wxMouseEvent &event);
512 void OnMouseLeftInGcCell(wxMouseEvent &event,
GroupCell *clickedInGC);
514 void OnMouseLeftInGcLeft(wxMouseEvent &event,
GroupCell *clickedInGC);
516 void OnMouseLeftInGc(wxMouseEvent &event,
GroupCell *clickedInGC);
518 void OnMouseMotion(wxMouseEvent &event);
521 void OnDoubleClick(wxMouseEvent &event);
524 void OnCharInActive(wxKeyEvent &event);
527 void OnCharNoActive(wxKeyEvent &event);
530 void SelectEditable(
EditorCell *editor,
bool up);
538 void SelectWithChar(
int ccode);
554 void ClickNDrag(wxPoint down, wxPoint up);
557 void SelectGroupCells(wxPoint down, wxPoint up);
566 void CheckUnixCopy();
568 void OnMouseMiddleUp(wxMouseEvent &event);
570 static bool IsLesserGCType(
int type,
int comparedTo);
591 wxPoint m_mousePoint;
615 bool m_leftDown =
false;
618 bool m_mouseDrag =
false;
619 bool m_mouseOutside =
false;
624 int m_clickType = CLICK_TYPE_NONE;
636 std::vector<wxString> m_completions;
637 bool m_autocompleteTemplates =
true;
643 {
return !m_tree || (!m_tree->GetNext() && m_tree->GetEditable()->GetValue().Length() <= 1); }
647 if(m_autocompletePopup != NULL)
648 m_autocompletePopup->Destroy();
656 void OnChar(wxKeyEvent &event);
683 void SetNotification(
const wxString &message,
int flags = wxICON_INFORMATION);
689 std::unique_ptr<GroupCell> m_tree;
693 static std::mutex m_drawDCLock;
698 void FocusFindDialogue()
721 int IndexSearchStartedAt()
const
724 CellPointers &GetCellPointers() {
return m_cellPointers; }
756 m_redrawStart = NULL;
757 m_fullRedrawRequested =
false;
835 bool CanUndo()
const;
837 bool CanRedo()
const;
847 void TreeUndo_ClearBuffers();
859 wxPoint pos = wxDefaultPosition, wxSize size = wxDefaultSize,
860 bool reactToEvents =
true);
872 std::unique_ptr<GroupCell>
CopyTree()
const;
886 UndoActions *undoBuffer);
900 void InsertLine(std::unique_ptr<Cell> &&newCell,
bool forceNewLine =
false);
924 void ResetInputPrompts();
933 bool CanPaste()
const
961 UndoActions *undoBuffer
980 void DeleteSelection();
1041 void Animate(
bool run =
true)
const;
1047 void SetLastQuestion(
const wxString &lastQuestion){m_lastQuestion = lastQuestion;}
1048 wxString GetLastQuestion()
const {
return m_lastQuestion;}
1053 void PasteFromClipboard();
1061 bool Copy(
bool astext =
false)
const;
1093#if wxUSE_ENH_METAFILE
1095 bool CopyEMF()
const;
1101 wxSize CopyToFile(
const wxString &file)
const;
1103 wxSize CopyToFile(
const wxString &file,
Cell *start,
Cell *end,
bool asData =
false,
double scale = 1)
const;
1105 void CalculateReorderedCellIndices(
GroupCell *tree,
int &cellIndex, std::vector<int> &cellMap);
1118 ExportToMAC(wxTextFile &output,
GroupCell *tree,
bool wxm,
const std::vector<int> &cellMap,
bool fixReorderedIndices);
1137 wxString
GetString(
bool lb =
false)
const;
1139 GroupCell *GetTree()
const {
return m_tree.get(); }
1140 std::unique_ptr<GroupCell> *GetTreeAddress() {
return &m_tree; }
1175 bool ActivatePrevInput() {
return ActivateInput(-1); }
1176 bool ActivateNextInput() {
return ActivateInput(+1); }
1177 wxString GetStatusText()
const {
return m_statusText;}
1178 bool StatusTextChangedHas() {
1179 bool retval = (m_statusTextHas != m_statusTextHas_old) ||
1180 (m_statusText != m_statusText_old);
1181 m_statusText_old = m_statusText;
1182 m_statusTextHas_old = m_statusTextHas;
1185 bool StatusTextHas()
const {
return m_statusTextHas;}
1198 wxTimer m_displayTimeoutTimer;
1200 template <
class T_SRC,
class T_DEST>
1201 inline std::unique_ptr<T_DEST> unique_cast(std::unique_ptr<T_SRC> &&src)
1203 if (!src)
return std::unique_ptr<T_DEST>();
1205 T_DEST *dest_ptr = &
dynamic_cast<T_DEST &
>(*src.get());
1207 (void) src.release();
1208 return std::unique_ptr<T_DEST>(dest_ptr);
1210 wxString m_statusText;
1211 wxString m_statusText_old;
1212 bool m_statusTextHas =
false;
1213 bool m_statusTextHas_old =
false;
1214 void StatusText(
const wxString &text){m_statusText = text; m_statusTextHas =
true;}
1215 void UnsetStatusText(){m_statusTextHas =
false;}
1216 bool ActivateInput(
int direction);
1223 m_scrollToCaret =
true;
1235 m_cellPointers.ScrollToCell(cell);
1236 m_scrollToTopOfCell = scrollToTop;
1237 m_scrollToCaret =
false;
1332 void UndoInsideCell();
1340 void RedoInsideCell();
1362 void ScrolledAwayFromEvaluation(
bool ScrolledAway);
1364 bool ScrolledAwayFromEvaluation()
const
1365 {
return m_scrolledAwayFromEvaluation; }
1369 bool IsSaved()
const
1372 void SetSaved(
bool saved)
1373 {
if(
m_saved != saved) m_updateControls =
true;
m_saved = saved;}
1375 void OutputChanged()
1381 void RemoveAllOutput();
1396 void AddDocumentToEvaluationQueue();
1435 void SetZoomFactor(
double newzoom);
1437 void CommentSelection();
1444 void OnScrollEvent(wxScrollWinEvent &ev);
1456 bool FindIncremental(
const wxString &str,
bool down,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true);
1457 bool FindIncremental_RegEx(
const wxString &str,
bool down,
bool searchInInput =
true,
bool searchInOutput =
true);
1463 bool FindNext(
const wxString &str,
bool down,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true,
bool warn =
true);
1464 bool FindNext_Regex(
const wxString &str,
const bool &down,
bool searchInInput =
true,
bool searchInOutput =
true,
bool warn =
true);
1470 void Replace(
const wxString &oldString,
const wxString &newString,
bool ignoreCase);
1471 void Replace_RegEx(
const wxString &oldString,
const wxString &newString);
1477 int ReplaceAll(
const wxString &oldString,
const wxString &newString,
bool ignoreCase,
bool searchInInput =
true,
bool searchInOutput =
true);
1478 int ReplaceAll_RegEx(
const wxString &oldString,
const wxString &newString,
bool searchInInput =
true,
bool searchInOutput =
true);
1480 wxString GetInputAboveCaret();
1482 wxString GetOutputAboveCaret();
1500 void SetActiveCellText(
const wxString &text);
1502 bool InsertText(
const wxString &text);
1504 void OpenNextOrCreateCell();
1540 void SetMaximaDocDir(
const wxString &dir)
1542 m_maximaDocDir = dir;
1562 wxString GetHelpfileAnchorName(
const wxString &keyword)
1563 {
return m_maximaManual.GetHelpfileAnchorName(keyword);}
1564 wxString GetHelpfileURL(
const wxString &keyword)
1565 {
return m_maximaManual.GetHelpfileURL(keyword);}
1571#if wxUSE_ACCESSIBILITY
1572 int GetAccessibilityId(
Cell *cell)
const;
1582 bool isValid()
const
1583 {
return pos <
input.length(); }
1586 inline wxChar operator*()
const
1587 {
return input.at(pos); }
1598#if wxUSE_ACCESSIBILITY
1599 class AccessibilityInfo:
public wxAccessible
1602 AccessibilityInfo(wxWindow *parent,
Worksheet *worksheet);
1603 wxAccStatus GetChildCount (
int *childCount);
1604 wxAccStatus GetChild (
int childId, wxAccessible **child);
1605 wxAccStatus GetDefaultAction(
int childId, wxString *actionName);
1606 wxAccStatus GetParent (wxAccessible ** parent);
1607 wxAccStatus GetFocus (
int *childId, wxAccessible **child);
1608 wxAccStatus GetLocation (wxRect &rect,
int elementId);
1609 wxAccStatus HitTest (
const wxPoint &pt,
1610 int *childId, wxAccessible **childObject);
1611 wxAccStatus GetDescription(
int childId, wxString *description);
1612 wxAccStatus GetRole(
int childId, wxAccRole *role);
1614 wxWindow *m_parent = NULL;
1617 class CaretAccessibilityInfo :
public wxAccessible {
1619 CaretAccessibilityInfo(AccessibilityInfo* parent,
Worksheet* worksheet)
1620 : wxAccessible(worksheet->GetTargetWindow()), m_parent(parent), m_worksheet(worksheet) {}
1622 wxAccStatus GetDescription(
int WXUNUSED(childId), wxString *description)
override;
1623 wxAccStatus GetParent(wxAccessible **parent)
override;
1624 wxAccStatus GetChildCount(
int *childCount)
override;
1625 wxAccStatus GetChild(
int childId, wxAccessible **child)
override;
1626 wxAccStatus GetRole(
int childId, wxAccRole *role)
override;
1628 AccessibilityInfo* m_parent;
1631 CaretAccessibilityInfo* m_caretAccessible =
nullptr;
1635 MaximaManual *GetMaximaManual() {
return &m_maximaManual;}
1637 void FocusTextControl();
1638 wxString m_lastQuestion;
1639 int m_virtualWidth_Last = -1;
1640 int m_virtualHeight_Last = -1;
1643 virtual wxSize DoGetBestClientSize()
const override;
1644#if wxUSE_ACCESSIBILITY
1645 AccessibilityInfo *m_accessibilityInfo = NULL;
1659inline Worksheet *Cell::GetWorksheet()
const
1662 wxASSERT(worksheet != NULL);
1663 return static_cast<Worksheet*
>(worksheet);
1666wxDECLARE_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:194
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:480
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:265
CellType GetType() const
Returns the type of this cell.
Definition: Cell.h:449
Configuration * m_configuration
A pointer to the configuration responsible for this worksheet.
Definition: Cell.h:1062
The configuration storage for the current worksheet.
Definition: Configuration.h:86
wxWindow * GetWorkSheet() const
Get the worksheet this configuration storage is valid for.
Definition: Configuration.h:895
void ReadConfig()
Read the config from the wxConfig object.
Definition: Configuration.cpp:769
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:286
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:525
A class that maintains a list of recent documents.
Definition: RecentDocuments.h:42
A Text cell.
Definition: TextCell.h:38
Definition: Worksheet.h:1576
const wxString & input
reference to input string (must be a reference, so it can be modified)
Definition: Worksheet.h:1595
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:1284
GroupCell * ToggleFold(GroupCell *which)
Fold or unfold a cell.
Definition: Worksheet.cpp:1150
void ClearSelection()
Clear the selection - make it empty, i.e. no selection.
Definition: Worksheet.h:1157
const wxString UnicodeToMaxima(wxString s)
Make a few unicode characters interpretable by maxima.
Definition: Worksheet.cpp:5682
bool CanMergeSelection() const
Can we merge the selected cells into one?
Definition: Worksheet.cpp:6309
ImgCellBase * GetSelectedImgCellBase() const
Returns the selected cell - or NULL, if the selection isn't image nor animation.
Definition: Worksheet.h:1013
wxString RTFStart() const
The start of a RTF document.
Definition: Worksheet.cpp:8258
int m_pointer_x
The x position of the mouse pointer.
Definition: Worksheet.h:1650
void SetDefaultHCaret()
Set the HCaret to its default location, at the end of the document.
Definition: Worksheet.cpp:6915
bool CanDeleteRegion(GroupCell *start, const GroupCell *end) const
Is it possible to delete the cells between start and end?
Definition: Worksheet.cpp:2905
void AddSectionToEvaluationQueue(GroupCell *start)
Adds a chapter, a section or a subsection to the evaluation queue.
Definition: Worksheet.cpp:6045
void AddSymbols(const wxString &xml)
Add a xml-encoded list of symbols to the autocompletion list.
Definition: Worksheet.h:1494
void FoldAll()
Recursively folds the whole document.
Definition: Worksheet.cpp:1187
virtual ~Worksheet()
The destructor.
Definition: Worksheet.cpp:431
bool CutToClipboard()
Add the currently selected cells to the clipboard and delete them.
Definition: Worksheet.cpp:6611
GroupCell * GetInsertGroup() const
The group that the line's cells will belong to - used by InsertLine.
Definition: Worksheet.cpp:829
bool QuestionPending() const
Does maxima wait for the answer of a question?
Definition: Worksheet.h:1530
void AddEntireDocumentToEvaluationQueue()
Schedule all cells in the document for evaluation.
Definition: Worksheet.cpp:6036
GroupCell * FirstVisibleGC()
The first groupCell that is currently visible.
Definition: Worksheet.cpp:2302
void UpdateConfigurationClientSize()
Inform the configuration about the current client size.
Definition: Worksheet.cpp:3380
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:7711
void AddSymbols(wxXmlDocument xml)
Add a xml-encoded list of symbols to the autocompletion list.
Definition: Worksheet.h:1497
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:1560
bool ExportToHTML(const wxString &file)
Export the file to an html document.
Definition: Worksheet.cpp:4643
void OpenHCaret(const wxString &txt={})
Place the cursor into a new cell where the horizontal cursor is.
Definition: Worksheet.h:1312
TextCell * GetSelectedTextCell() const
Returns the selected cell - or NULL, if the selection isn't a text cell.
Definition: Worksheet.h:1021
void ScrollToError()
Unfold the cell that produced the error, if necessary and, if requested, scroll to it.
Definition: Worksheet.cpp:779
bool HCaretActive() const
Is the vertically-drawn cursor active?
Definition: Worksheet.h:826
void OnEraseBackground(wxEraseEvent &WXUNUSED(event))
Cannot be static as it is called using a function pointer to an object.
Definition: Worksheet.h:563
void ClearDocument()
Empties the current document.
Definition: Worksheet.cpp:1044
wxString RTFEnd() const
The end of a RTF document.
Definition: Worksheet.cpp:8310
void UnfoldAll()
Recursively unfolds the whole document.
Definition: Worksheet.cpp:1197
void UpdateTableOfContents()
Update the table of contents.
Definition: Worksheet.cpp:8595
Cell * GetSelectionEnd() const
Return the last of the currently selected cells.
Definition: Worksheet.h:1153
bool m_blinkDisplayCaret
true = blink the cursor
Definition: Worksheet.h:627
void QuestionPending(bool pending)
Does maxima currently wait for the answer of a question?
Definition: Worksheet.h:1537
void DeleteCurrentCell()
Delete the currently active cell - or the cell above this one.
Definition: Worksheet.cpp:2890
AnimationCell * GetSelectedAnimation() const
Returns the selected cell - or NULL, if the selection isn't an animation.
Definition: Worksheet.h:997
void Replace(const wxString &oldString, const wxString &newString, bool ignoreCase)
Replace the current occurrence of a string.
Definition: Worksheet.cpp:7677
bool CopyMatlab() const
Copy a Matlab representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2712
bool CopyText() const
Copy a textual representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2775
bool m_inPopupMenu
Is there an active popup menu?
Definition: Worksheet.h:1656
wxTimer m_keyboardInactiveTimer
The timer that tells us when the keyboard is inactive so an autosave isn't disrupting.
Definition: Worksheet.h:866
void Animate(bool run=true) const
Animate the current slide show.
Definition: Worksheet.cpp:6887
static GroupCell * StartOfSectioningUnit(GroupCell *start)
Finds the start of the current chapter/section/...
Definition: Worksheet.cpp:3343
bool CopyRTF() const
Copy a rtf version of the current selection to the clipboard.
Definition: Worksheet.cpp:4395
void UpdateConfig()
Re-read the configuration.
Definition: Worksheet.h:801
int m_pointer_y
The y position of the mouse pointer.
Definition: Worksheet.h:1652
bool Copy(bool astext=false) const
Copy the current selection to the clipboard.
Definition: Worksheet.cpp:2555
bool CopyAnimation() const
Copy the current animation to the clipboard.
Definition: Worksheet.cpp:4373
void StepAnimation(int change=1)
Set the slide of the currently selected animation or advance it by one step.
Definition: Worksheet.cpp:4224
void SetAnswer(const wxString &answer)
Handling questions from and answers for maxima.
Definition: Worksheet.cpp:3081
GroupCell * ToggleFoldAll(GroupCell *which)
Toggles the status of the fold for the given GroupCell and its children.
Definition: Worksheet.cpp:1171
void OnChar(wxKeyEvent &event)
Key for a printable character pressed.
Definition: Worksheet.cpp:4047
void AddSelectionToEvaluationQueue()
Schedule all cells in the selection to be evaluated.
Definition: Worksheet.cpp:6074
bool CanEdit()
We can edit the input if the we have the whole input in selection!
Definition: Worksheet.cpp:5926
bool HasCellsSelected() const
Is at least one entire cell selected?
Definition: Worksheet.h:946
void OnSetFocus(wxFocusEvent &event)
What to do if the worksheet is in the input focus.
Definition: Worksheet.cpp:6840
void SetNotification(const wxString &message, int flags=wxICON_INFORMATION)
Inform the user that something happened in a non-active window.
Definition: Worksheet.cpp:4025
void ScheduleScrollToCell(Cell *cell, bool scrollToTop=true)
Schedules scrolling to a given cell.
Definition: Worksheet.h:1233
GroupCell * InsertGroupCells(std::unique_ptr< GroupCell > &&cells, GroupCell *where, UndoActions *undoBuffer)
Insert group cells into the worksheet.
Definition: Worksheet.cpp:715
void AddDocumentTillHereToEvaluationQueue()
Schedule all cells stopping with the one the caret is in for evaluation.
Definition: Worksheet.cpp:6094
void OnComplete(wxCommandEvent &event)
Is called if an action from the autocomplete menu is selected.
Definition: Worksheet.cpp:8012
bool CanAnimate() const
Does it make sense to enable the "Play" button and the slider now?
Definition: Worksheet.h:1029
bool m_mouseMotionWas
Was there a mouse motion we didn't react to until now?
Definition: Worksheet.h:1654
void SelectAll()
Select the whole document.
Definition: Worksheet.cpp:6763
void OnKillFocus(wxFocusEvent &event)
What to do if the worksheet looses the input focus.
Definition: Worksheet.cpp:6852
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:838
void ClearNotification()
Clears the notification message from SetNotification.
Definition: Worksheet.cpp:4023
void OnFollow()
Called when the "Scroll to currently evaluated" button is pressed.
Definition: Worksheet.cpp:8192
bool m_hCaretActive
Is the active cursor the one represented by a horizontal line?
Definition: Worksheet.h:597
Cell * GetSelectionStart() const
Return the first of the currently selected cells.
Definition: Worksheet.h:1146
void FoldOccurred()
Call when a fold action was detected, to update the state in response to a fold occurring.
Definition: Worksheet.cpp:1138
ImgCell * GetSelectedImgCell() const
Returns the selected cell - or NULL, if the selection isn't an image.
Definition: Worksheet.h:1005
Cell * FindCellByUUID(const wxString &uuid)
Find a cell by its UUID.
Definition: Worksheet.cpp:6142
void EraseBackground(wxEraseEvent &event)
Is called if wxWidgets wants to erase the worksheet's background.
Definition: Worksheet.cpp:245
bool CanDeleteSelection() const
Is it possible to delete the currently selected cells?
Definition: Worksheet.cpp:2874
AutoComplete m_autocomplete
The storage for the autocompletion feature.
Definition: Worksheet.h:704
ToolBar * m_mainToolBar
The toolbar of the main window: We need to access it and therefore have it defined here.
Definition: Worksheet.h:1510
CellPtr< GroupCell > m_hCaretPositionEnd
The end of the selection when selecting group with the horizontally drawn cursor.
Definition: Worksheet.h:614
bool m_questionPrompt
true = the last reply from maxima was a question
Definition: Worksheet.h:1524
bool CaretVisibleIs()
Is the caret (hcaret or vcaret) currently visible on the worksheet?
Definition: Worksheet.cpp:7620
EditorCell * GetActiveCell() const
Get the currently active EditorCell.
Definition: Worksheet.h:709
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:2804
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:3089
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:7104
GroupCell * GetLastCell()
Returns the last cell of the worksheet.
Definition: Worksheet.h:1288
GroupCell * GetHCaret()
The cell the horizontal cursor is above. NULL means at the start of the document.
Definition: Worksheet.cpp:6898
bool IsSelected(CellType type)
Does the selection start with a cell of the type "type".
Definition: Worksheet.cpp:6878
wxString ConvertSelectionToMathML() const
Convert the current selection to MathML.
Definition: Worksheet.cpp:2636
bool CanUndoInsideCell() const
Is it possible to issue an undo in the currently selected cell?
Definition: Worksheet.cpp:6964
bool RecalculateIfNeeded(bool timeout=false)
Actually recalculate the worksheet.
Definition: Worksheet.cpp:910
void SetHCaret(GroupCell *where)
Set the HCaret at the location of the given Cell.
Definition: Worksheet.cpp:6925
bool CanRedoInsideCell() const
Is it possible to issue an undo in the currently selected cell?
Definition: Worksheet.cpp:6978
bool GCContainsCurrentQuestion(const GroupCell *cell)
Does the GroupCell cell points to contain the question currently asked by maxima?
Definition: Worksheet.cpp:3315
bool IsEmpty() const
Is this worksheet empty?
Definition: Worksheet.h:642
void NumberSections() const
Renumber all sections.
Definition: Worksheet.cpp:1077
CellPtr< GroupCell > m_recalculateStart
Where to start recalculation. NULL = No recalculation needed.
Definition: Worksheet.h:1648
bool m_saved
True if no changes have to be saved.
Definition: Worksheet.h:635
void OnKeyDown(wxKeyEvent &event)
A special key has been pressed.
Definition: Worksheet.cpp:3210
EditorCell * KeyboardSelectionStart() const
Tells us which cell the keyboard selection has started in.
Definition: Worksheet.h:712
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:5806
void SetSelection(Cell *sel)
Select the cell sel.
Definition: Worksheet.h:1160
void AddCellToEvaluationQueue(GroupCell *gc)
Schedule this cell for evaluation.
Definition: Worksheet.cpp:6116
void SetCellStyle(GroupCell *group, GroupType style)
Change the style of a cell.
Definition: Worksheet.cpp:2994
bool Autocomplete(AutoComplete::autoCompletionType type=AutoComplete::command)
Definition: Worksheet.cpp:7771
wxBitmap m_memory
A memory we can manually buffer the contents of the area that is to be redrawn in.
Definition: Worksheet.h:1642
bool m_adjustWorksheetSizeNeeded
Request adjusting the worksheet size?
Definition: Worksheet.h:621
wxTimer m_caretTimer
The cursor blink rate. Also the timeout for redrawing the worksheet.
Definition: Worksheet.h:633
void LoadSymbols()
Compile a list of known autocompletion symbols.
Definition: Worksheet.cpp:5680
void SelectGroupCell(GroupCell *cell)
Set this cell as the currently selected one.
Definition: Worksheet.cpp:8178
void ShowPoint(wxPoint point)
Scrolls to a point on the worksheet.
Definition: Worksheet.cpp:6567
void WindowActive(bool active)
Is this window active?
Definition: Worksheet.h:676
bool ExportToTeX(const wxString &file)
export to a LaTeX file
Definition: Worksheet.cpp:5563
bool IsSelectionInWorkingGroup()
Is the selection in the current working group?
Definition: Worksheet.cpp:6893
void ShowHCaret()
Activates the horizontal cursor.
Definition: Worksheet.cpp:6957
void CodeCellVisibilityChanged()
To be called after enabling or disabling the visibility of code cells.
Definition: Worksheet.cpp:5551
void ScrollToCaret()
Request to scroll to the cursor as soon as wxMaxima is idle.
Definition: Worksheet.h:1220
bool m_hCaretBlinkVisible
Is the blinking vertically-drawn cursor currently visible?
Definition: Worksheet.h:629
void MarkRefreshAsDone()
Handle redrawing the worksheet or of parts of it.
Definition: Worksheet.h:754
bool CopyMathML() const
Copy the MathML representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2685
bool CopyBitmap() const
Copy a bitmap of the current selection to the clipboard.
Definition: Worksheet.cpp:4366
bool PointVisibleIs(wxPoint point)
Is the point currently visible on the worksheet?
Definition: Worksheet.cpp:6546
GroupCell * GetLastCellInWorksheet() const
Returns a pointer to the last cell of this worksheet.
Definition: Worksheet.cpp:2440
void ScrollToStart()
Scroll to the start of the worksheet.
Definition: Worksheet.h:817
void Recalculate(Cell *start)
Schedule a recalculation of the worksheet starting with the cell start.
Definition: Worksheet.cpp:975
void AddSymbol(const wxString &fun, AutoComplete::autoCompletionType type=AutoComplete::command)
Add a symbol to the autocompletion list.
Definition: Worksheet.h:1490
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:7126
bool SectioningMoveIn(GroupCell *parent)
Make this chapter/section/... a section/subsection/... changing its subheadings, too.
Definition: Worksheet.cpp:8049
wxBitmap ConvertSelectionToBitmap() const
Convert the current selection to a bitmap.
std::optional< Notification > m_notificationMessage
A error notification message.
Definition: Worksheet.h:674
void RequestRedraw(GroupCell *start=NULL)
Request the worksheet to be redrawn.
Definition: Worksheet.cpp:403
int GetCellIndex(Cell *cell) const
Returns the index in (i...) or (o...)
Definition: Worksheet.cpp:4546
bool RedrawIfRequested()
Redraw the worksheet if RequestRedraw() has been called.
Definition: Worksheet.cpp:257
void UpdateScrollPos()
Execute all collected scroll events in one go.
Definition: Worksheet.cpp:3332
CellPtr< GroupCell > m_hCaretPosition
The group above the hcaret, NULL for the top of the document See EditorCell::GetActiveCell() for the ...
Definition: Worksheet.h:602
void SetActiveCell(EditorCell *cell)
Mark an editor cell as the active one.
Definition: Worksheet.cpp:6463
FindReplaceDialog * m_findDialog
The find-and-replace-dialog.
Definition: Worksheet.h:823
void QuestionAnswered()
Mark the current question from maxima as "answered"..
Definition: Worksheet.cpp:3319
void DeleteRegion(GroupCell *start, GroupCell *end, UndoActions *undoBuffer)
Definition: Worksheet.cpp:3018
bool ScrollToCaretIfNeeded()
Scrolls to the cursor, if requested.
Definition: Worksheet.cpp:7647
std::unique_ptr< GroupCell > CopyTree() const
Copies the worksheet's entire contents.
Definition: Worksheet.cpp:4362
GroupCell * EndOfSectioningUnit(GroupCell *start)
Finds the end of the current chapter/section/...
Definition: Worksheet.cpp:3360
std::vector< wxString > m_replacementsForCurrentWord
Suggestions for how the word that was right-clicked on could continue.
Definition: Worksheet.h:1570
EvaluationQueue m_evaluationQueue
The list of cells that have to be evaluated.
Definition: Worksheet.h:1420
void ForceRedraw()
Redraw the window now and mark any pending redraw request as "handled".
Definition: Worksheet.h:791
bool CopyTeX() const
Copy the TeX representation of the current selection to the clipboard.
Definition: Worksheet.cpp:2740
void AddRestToEvaluationQueue()
Add all cells below the cursor to the evaluation queue.
Definition: Worksheet.cpp:6054
void ScrollToCellIfNeeded()
Scrolls to the cell given by ScheduleScrollToCell; Is called once we have time to do so.
Definition: Worksheet.cpp:6164
wxTimer m_timer
Time step for autoscrolll when the mouse is outside the window.
Definition: Worksheet.h:631
void OnMouseWheel(wxMouseEvent &event)
Called if the mouse wheel sents events.
Definition: Worksheet.cpp:2336
void CloseAutoCompletePopup()
Close the autocompletion pop-up if it is currently open.
Definition: Worksheet.h:645
bool SectioningMoveOut(GroupCell *parent)
Make this section/subsection/... a chapter/section/... changing its subheadings, too.
Definition: Worksheet.cpp:8091
bool FollowEvaluation() const
Query if we want to automatically scroll to the cell that is currently evaluated.
Definition: Worksheet.h:1354
CellPtr< GroupCell > m_hCaretPositionStart
The start for the selection when selecting group with the horizontally drawn cursor.
Definition: Worksheet.h:608
void DestroyTree()
Clear the whole worksheet.
Definition: Worksheet.cpp:4353
wxString GetString(bool lb=false) const
Convert the current selection to a string.
Definition: Worksheet.cpp:2537
GroupCell * GetWorkingGroup(bool resortToLast=false) const
Returns the cell maxima currently works on.
Definition: Worksheet.cpp:807
bool m_followEvaluation
Do we want to automatically scroll to a cell as soon as it is being evaluated?
Definition: Worksheet.h:617
bool CopySVG() const
Copy a svg of the current selection to the clipboard.
Definition: Worksheet.cpp:4381
wxPoint m_leftDownPosition
The position the left mouse key was pressed at.
Definition: Worksheet.h:588
wxString m_currentFile
The name of the currently-opened file.
Definition: Worksheet.h:808
void Evaluate()
Trigger the evaluation of the current cell(s)
Definition: Worksheet.cpp:3201
void OnScrollChanged(wxScrollEvent &ev)
Called if the user is using the scrollbar for scrolling through the document.
Definition: Worksheet.cpp:7061
void OnActivate(wxActivateEvent &event)
Is called if this element looses or gets the focus.
Definition: Worksheet.cpp:6917
void AddToEvaluationQueue(GroupCell *cell)
Adds a group cell to the evaluation queue marking its contents as "outdated".
Definition: Worksheet.cpp:6022