38#include <unordered_map>
49 GC_TYPE_SUBSUBSECTION,
93 const wxString &initString = {});
96 std::unique_ptr<Cell> Copy()
const;
99 std::unique_ptr<GroupCell> CopyList()
const;
110 const wxString &GetAnswer(
size_t answer)
const;
111 const wxString &GetAnswer(
const wxString &question)
const;
116 void SetAutoAnswer(
bool autoAnswer);
129 void SetAnswer(
const wxString &question,
const wxString &answer);
169 const wxString
GetToolTip(wxPoint point)
const override;
175 wxString
GetLinkAt(wxPoint point)
override;
185 Range GetCellsInOutput()
const;
187 Range GetCellsInOutputRect(
const wxRect &rect, wxPoint one, wxPoint two)
const;
191 bool SetEditableContent(
const wxString &text);
193 void AppendOutput(std::unique_ptr<Cell> &&cell);
228 wxString
ToTeX(
const wxString &imgDir,
const wxString &filename, std::size_t *imgCounter)
const;
230 wxString
ToRTF()
const override;
232 wxString ToTeXCodeCell(
const wxString &imgDir,
const wxString &filename, std::size_t *imgCounter)
const;
234 static wxString ToTeXImage(
const Cell *tmp,
const wxString &imgDir,
const wxString &filename, std::size_t *imgCounter);
242 static wxString
ToTeXAnimation(
const Cell *tmp,
const wxString &imgDir,
const wxString &filename, std::size_t *imgCounter);
244 wxString
ToTeX()
const override;
246 wxString
ToXML()
const override;
248 void Hide(
bool hide)
override;
252 wxRect HideRect()
const;
293 void SetInput(std::unique_ptr<Cell> &&input);
295 void SetOutput(std::unique_ptr<Cell> &&output);
297 void AppendInput(std::unique_ptr<Cell> &&cell);
307 static wxString TexEscapeOutputCell(wxString Input);
334 Cell *first =
nullptr;
335 Cell *last =
nullptr;
373 if (fontsize.IsValid())
374 m_mathFontSize = fontsize;
380 bool Recalculate()
const;
381 bool Reposition()
const;
386 wxPoint CalculateInputPosition()
const;
390 wxRect
GetRect(
bool all =
false)
const override;
433 bool HideTree(std::unique_ptr<GroupCell> &&tree);
492 bool IsMainInput(
const Cell *active)
const;
494 bool IsHeading()
const;
503 void Number(
int §ion,
int &subsection,
int &subsubsection,
int &heading5,
int &heading6,
int &image)
const;
516 void Draw(wxDC *dc, wxDC *antialiassingDC)
override;
556 using CmdsAndVariables = std::unordered_map<wxString, int, wxStringHash>;
561#if wxUSE_ACCESSIBILITY
562 wxAccStatus GetName (
int childId, wxString *name)
const override;
563 wxAccStatus GetDescription(
int childId, wxString *description)
const override;
564 wxAccStatus GetLocation (wxRect &rect,
int elementId)
override;
565 wxAccStatus GetRole (
int childId, wxAccRole *role)
const override;
571 void UpdateOutputPositions()
const;
573 void UpdateYPositionList()
const;
579 wxCoord GetInputIndent()
const;
580 void UpdateCellsInGroup();
638 mutable int16_t m_numberedAnswersCount = 0;
651 bool m_inEvaluationQueue : 1 =
false;
652 bool m_lastInEvaluationQueue : 1 =
false;
653 bool m_updateConfusableCharWarnings : 1 =
true;
667 static wxString m_lookalikeChars;
The definition of the base class of all cells the worksheet consists of.
This file contains the definition of the class EditorCell.
std::ostream & operator<<(std::ostream &out, const GroupType grouptype)
Allow Standard c++ streams to print out our enum values as text.
Definition: GroupCell.cpp:2467
GroupType
All types a GroupCell can be of.
Definition: GroupCell.h:43
A Type-Safe Fixed-Point Font Size.
Definition: FontAttribs.h:99
A weak non-owning pointer that becomes null whenever the observed object is destroyed.
Definition: CellPtr.h:539
A class that carries information about the type of a cell.
Definition: Cell.h:93
The base class all cell types the worksheet can consist of are derived from.
Definition: Cell.h:148
Cell * GetNext() const
Get the next cell in the list.
Definition: Cell.h:914
bool ContainsPoint(wxPoint point) const
Is a given point inside this cell?
Definition: Cell.h:399
Cell * GetPrevious() const
Returns a pointer to the previous cell in the current cell list.
Definition: Cell.h:911
Cell * last() const
Get the last cell in this list of cells.
Definition: Cell.cpp:1556
AFontSize m_fontSize
The unscaled font size.
Definition: Cell.h:1291
Configuration * m_configuration
A pointer to the configuration responsible for this worksheet.
Definition: Cell.h:1249
DocumentCellPointers * GetDocumentCellPointers() const
The document-model half of the cell-pointer registry this cell uses.
Definition: Cell.cpp:70
virtual void SetCurrentPoint(wxPoint point) const
Pass 2: Arrangement.
Definition: Cell.cpp:532
ViewCellPointers * GetViewCellPointers() const
The transient view-state half of the cell-pointer registry this cell uses.
Definition: Cell.cpp:74
bool NeedsRecalculation() const
True, if something that affects the cell size has changed.
Definition: Cell.h:631
Cell * first() const
Get the first cell in this list of cells.
Definition: Cell.cpp:1547
The configuration storage for the current worksheet.
Definition: Configuration.h:102
The document-model half of the cell-pointer registry.
Definition: CellPointers.h:54
This class defines what the user sees as input cell.
Definition: EditorCell.h:67
A cell grouping input (and, if there is one, also the output) cell to a foldable item.
Definition: GroupCell.h:88
wxCoord GetMaxDrop() const override
Returns the maximum distance between center and bottom of this line.
Definition: GroupCell.cpp:1048
bool ContainsSavedAnswers() const
Does this GroupCell know the answer to any of maxima's questions?
Definition: GroupCell.h:113
void Draw(wxDC *dc, wxDC *antialiassingDC) override
Draw this GroupCell.
Definition: GroupCell.cpp:969
bool Contains(GroupCell *cell) const
Does this tree contain the cell "cell"?
Definition: GroupCell.cpp:2267
void Hide(bool hide) override
Hide this cell. See IsHidden() for details.
Definition: GroupCell.cpp:1976
GroupCell * m_hiddenTreeParent
store linkage to the parent of the fold
Definition: GroupCell.h:598
std::vector< std::pair< wxString, wxString > > m_knownAnswers
A list of answers provided by the user.
Definition: GroupCell.h:559
bool IsFoldable() const
folding and unfolding
Definition: GroupCell.cpp:204
void BreakLines() const
Break this cell into lines.
Definition: GroupCell.cpp:1940
Cell * DisplayedOutput() const
The cell list to lay out and draw as this group's output.
Definition: GroupCell.cpp:711
bool FirstLineOnlyEditor() const override
True, if this GroupCell is folded and its editor shows only its first line.
Definition: GroupCell.cpp:1970
bool RevealHidden()
Unfold all that is needed to make the current cell seen.
Definition: GroupCell.cpp:2040
std::vector< OutputResult > GetOutputResults() const
The results the output consists of, top to bottom.
Definition: GroupCell.cpp:689
void CellUnderPointer(GroupCell *cell)
Marks the cell that is under the mouse pointer.
Definition: GroupCell.cpp:1044
void Number(int §ion, int &subsection, int &subsubsection, int &heading5, int &heading6, int &image) const
Return this cell's section- or image number.
Definition: GroupCell.cpp:2187
GroupType m_groupType
Which type this cell is of?
Definition: GroupCell.h:645
wxPoint CalculateLabelPosition() const
Where this group cell's label (the "(%i1)", or a section's number) goes.
Definition: GroupCell.cpp:783
void OutputHeightChanged()
Reset the data when the output size changes.
Definition: GroupCell.cpp:515
wxCoord BracketColumnLeft() const
The left edge of the gutter column the cell bracket is drawn in.
Definition: GroupCell.cpp:777
wxString GetLinkAt(wxPoint point) override
The link at point, if any: in the text cell's text or in the output.
Definition: GroupCell.cpp:1913
bool NeedsRecalculation(AFontSize fontSize) const override
True, if something that affects the cell size has changed.
Definition: GroupCell.cpp:730
wxRect GetBracketRect() const
The on-screen rectangle occupied by this cell's bracket.
Definition: GroupCell.cpp:1056
wxRect m_outputRect
Bounding rectangle of this group's output (results) area, in worksheet coordinates.
Definition: GroupCell.h:590
GroupCell * GetHiddenTree() const
Get the tree of cells that got hidden by folding this cell.
Definition: GroupCell.h:425
std::unique_ptr< GroupCell > UnhideTree()
Unfold the current cell.
Definition: GroupCell.cpp:2026
static bool IsOutputLabel(const Cell &cell)
Is this output cell one of the labels that start a line, like "(%o1)"?
Definition: GroupCell.cpp:830
wxString ToTeX() const override
Convert this cell to its LaTeX representation.
Definition: GroupCell.cpp:1267
bool m_autoAnswer
Does this GroupCell automatically fill in the answer to questions?
Definition: GroupCell.h:650
size_t GetInnerCellCount() const override
The number of inner cells - for use by the iterators.
Definition: GroupCell.h:139
wxString ToRTF() const override
Returns the cell's representation as RTF.
Definition: GroupCell.cpp:1271
void DrawBracket(wxDC *dc, wxDC *antialiassingDC)
Draw the bracket of this cell.
Definition: GroupCell.cpp:1064
CellPtr< Cell > m_lastAppendedOutput
The last cell AppendOutput() appended, to find the end of the output without walking it (GH #2594): a...
Definition: GroupCell.h:623
void RemoveOutput()
Remove all output cells attached to this one.
Definition: GroupCell.cpp:310
Cell * GetLabel() const
Returns the list of cells the output consists of, starting with the label.
Definition: GroupCell.h:318
void MarkNeedsRecalculate()
Mark this group as needing a recalculation.
Definition: GroupCell.cpp:241
const wxString GetToolTip(wxPoint point) const override
Returns the tooltip for the element at the position point.
Definition: GroupCell.cpp:1873
Range GetInnerCellsInRect(const wxRect &rect) const override
Select the cells inside this cell described by the rectangle rect.
Definition: GroupCell.cpp:1815
std::unique_ptr< Cell > m_inputLabel
The input label of this cell. Is followed by the input of the cell.
Definition: GroupCell.h:604
std::unique_ptr< Cell > Copy(GroupCell *group) const override
Create a copy of this cell.
int m_inputWidth
Width and height of this group's input area (input label plus editor), computed by RecalculateInput()...
Definition: GroupCell.h:632
wxRect GetRect(bool all=false) const override
Get the smallest rectangle this cell fits in.
Definition: GroupCell.cpp:1032
GroupCell * SectioningUnitGetEndOf() const
Get the end of this section/subsection/...
void RemoveMathOutput()
Drop a code cell's output, except for its images and animations.
Definition: GroupCell.cpp:344
void UpdateConfusableCharWarnings()
GroupCells warn if they contain both greek and latin lookalike chars.
Definition: GroupCell.cpp:412
const CellTypeInfo & GetInfo() override
Returns the information about this cell's type.
void RecalculateInput() const
Recalculate the height of the input part of the cell.
Definition: GroupCell.cpp:542
void SetHiddenTreeParent(GroupCell *parent, GroupCell *last=nullptr)
Set the parent cell of hidden cells.
Definition: GroupCell.cpp:2053
void InputHeightChanged()
Reset the data when the input size changes.
Definition: GroupCell.cpp:494
bool m_cellsAppended
Output cells were appended since the last layout, so a recalculation is needed (see NeedsRecalculatio...
Definition: GroupCell.h:658
void ResetInputLabel()
Reset the input label of the current cell.
Definition: GroupCell.cpp:188
static std::vector< OutputLineWidths > MeasureOutputLines(Cell *displayed)
The width of every line of output, so a line can be placed before it is walked.
Definition: GroupCell.cpp:836
wxCoord ContentColumnRight() const
The x just past the right edge of the content column. See the definition.
Definition: GroupCell.cpp:772
void Recalculate(const AFontSize fontsize) const override
Recalculates the size of this GroupCell and all cells inside it if needed.
Definition: GroupCell.h:372
bool Empty() const
Is this list of cells empty?
Definition: GroupCell.cpp:180
bool DrawThisCell()
Does a repaint need this cell drawn?
Definition: GroupCell.cpp:957
wxRect GetOutputRect() const
Determine which rectangle is occupied by this GroupCell.
Definition: GroupCell.h:345
void ForgetAnswers()
Forget all answers this cell remembers from earlier runs (GH #1018)
Definition: GroupCell.cpp:260
bool SectioningCanMoveIn() const
Can this chapter/section/... converted to a 'smaller' cell, e.g. section->subsection,...
Definition: GroupCell.h:496
wxCoord GetCenterList() const override
Returns the maximum distance between top and center of this line.
Definition: GroupCell.cpp:1052
void OnSize()
Called on MathCtrl resize.
Definition: GroupCell.cpp:530
static wxString ToTeXAnimation(const Cell *tmp, const wxString &imgDir, const wxString &filename, std::size_t *imgCounter)
Write an animation's frames as images and emit an \animategraphics for it.
Definition: GroupCell.cpp:1649
GroupCell * Fold()
Fold this cell.
Definition: GroupCell.cpp:2061
void SetAnswer(const wxString &question, const wxString &answer)
Add a new answer to the cell.
Definition: GroupCell.cpp:248
void InEvaluationQueue(bool inQueue)
Is this cell part of the evaluation Queue?
Definition: GroupCell.h:542
int16_t m_cellsInGroup
The number of cells the current group contains (-1, if no GroupCell)
Definition: GroupCell.h:637
GroupCell * UnfoldAll(std::vector< GroupCell * > *affected=nullptr)
Unfold all cells.
Definition: GroupCell.cpp:2126
bool SectioningCanMoveOut() const
Can this chapter/section/... converted to a 'larger' cell, e.g. subsection->section,...
Definition: GroupCell.h:498
void UpdateYPosition() const
Recalculate the cell's y position using the position and height of the last one.
GroupCell * GetHiddenTreeParent() const
The cell this cell is hidden inside, if it is part of a folded subtree.
Definition: GroupCell.h:453
Cell * GetOutput() const
Returns the list of cells the output consists of, starting after the label.
Definition: GroupCell.h:324
bool HideTree(std::unique_ptr< GroupCell > &&tree)
Fold the current cell.
Definition: GroupCell.cpp:2006
int m_labelWidth_cached
Cache of the last width computed by GetInputIndent(); reused as the input indent while the input labe...
Definition: GroupCell.h:629
std::unique_ptr< GroupCell > m_hiddenTree
here hidden (folded) tree of GCs is stored
Definition: GroupCell.h:597
void LastInEvaluationQueue(bool last)
Is this cell the last cell in the evaluation Queue?
Definition: GroupCell.h:545
wxString ToString() const override
A textual representation of this cell.
Definition: GroupCell.cpp:1239
void SetCurrentPoint(wxPoint point) const override
Pass 2 (Arrange): Sets the GroupCell position and triggers child layout.
Definition: GroupCell.cpp:941
bool AutoAnswer() const
Does this GroupCell save the answer to a question?
Definition: GroupCell.h:115
GroupCell * GetLastWorkingGroup() const
Which GroupCell was the last maxima was working on?
Definition: GroupCell.cpp:265
GroupCell * GetPrevious() const
Get the previous GroupCell in the list.
Definition: GroupCell.h:301
std::unique_ptr< Cell > m_layoutSuppressedNotice
Cached placeholder shown instead of the output while layout is suppressed.
Definition: GroupCell.h:618
bool AddEnding() override
Add a semicolon to a code cell, if needed.
Definition: GroupCell.cpp:1028
GroupCell * GetNext() const
Get the next GroupCell in the list.
Definition: GroupCell.h:305
bool m_layoutSuppressed
Laying out this group's output exceeded the configured deadline.
Definition: GroupCell.h:665
Cell * GetInnerCell(size_t index) const override
Retrieve an inner cell with given index which must be less than GetInnerCellCount.
Definition: GroupCell.h:140
wxString ToXML() const override
Convert this cell to a representation fit for saving in a .wxmx file.
Definition: GroupCell.cpp:1690
void RecalculateOutput() const
Recalculate the height of the output part of the cell.
Definition: GroupCell.cpp:620
void ResetInputLabelList()
Call ResetInputLabel() on all cells in the list of cells this GroupCell starts with.
Definition: GroupCell.cpp:195
GroupCell * Unfold()
Unfold this cell.
Definition: GroupCell.cpp:2098
GroupCell * FoldAll(std::vector< GroupCell * > *affected=nullptr)
Fold all cells.
Definition: GroupCell.cpp:2109
std::unique_ptr< Cell > m_output
The maxima output this cell contains.
Definition: GroupCell.h:606
bool IsLesserGCType(GroupType comparedTo) const
Document structure: Can this cell type be part of the contents of comparedTo?
Definition: GroupCell.cpp:2141
bool ContainsPointOrOutput(wxPoint point) const
Is this point inside the cell or its output?
Definition: GroupCell.h:355
bool m_suppressTooltipMarker
Suppress the yellow ToolTip marker?
Definition: GroupCell.h:655
The view/interaction half of the cell-pointer registry.
Definition: CellPointers.h:341
The widths of one line of output, split at the label that starts it.
Definition: GroupCell.h:268
One result of this cell's output, as the keyboard steps through it (GH #2382)
Definition: GroupCell.h:333