wxMaxima
Loading...
Searching...
No Matches
TextCell.h
1// -*- mode: c++; c-file-style: "linux"; c-basic-offset: 2; indent-tabs-mode: nil -*-
2//
3// Copyright (C) 2004-2015 Andrej Vodopivec <andrej.vodopivec@gmail.com>
4// (C) 2014-2018 Gunter Königsmann <wxMaxima@physikbuch.de>
5// (C) 2020 Kuba Ober <kuba@bertec.com>
6//
7// This program is free software; you can redistribute it and/or modify
8// it under the terms of the GNU General Public License as published by
9// the Free Software Foundation; either version 2 of the License, or
10// (at your option) any later version.
11//
12// This program is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16//
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21//
22// SPDX-License-Identifier: GPL-2.0+
23
24#ifndef TEXTCELL_H
25#define TEXTCELL_H
26
27#include <wx/regex.h>
28#include "Cell.h"
29
35// 304 bytes <- 744 bytes
36// cppcheck-suppress ctuOneDefinitionRuleViolation
37class TextCell : public Cell
38{
39public:
40 TextCell(GroupCell *group, Configuration *config, const wxString &text = {}, TextStyle style = TS_FUNCTION);
41 TextCell(GroupCell *group, const TextCell &cell);
42 virtual ~TextCell(){}
43 virtual const CellTypeInfo &GetInfo() override;
44 std::unique_ptr<Cell> Copy(GroupCell *group) const override;
45
46 AFontSize GetScaledTextSize() const;
47
48 void SetStyle(TextStyle style) override;
49
51 void SetValue(const wxString &text) override;
52
53 virtual void Recalculate(AFontSize fontsize) override;
54
55 void Draw(wxPoint point, wxDC *dc, wxDC *antialiassingDC) override;
56 const wxFont &GetFont(AFontSize fontsize) const {
57 return m_configuration->GetStyle(GetTextStyle())->GetFont(fontsize);
58 }
59 //cppcheck-suppress functionConst
60 void SetFont(wxDC *dc, AFontSize fontsize);
61
67
68 wxString ToMatlab() const override;
69 wxString ToMathML() const override;
70 wxString ToOMML() const override;
71 wxString ToRTF() const override;
72 virtual wxString ToString() const override;
73 virtual const wxString GetDisplayedString() const override {return m_displayedText;}
74 wxString ToTeX() const override;
75 wxString ToXML() const override;
76
77 bool IsOperator() const override;
78
79 const wxString &GetValue() const override { return m_text; }
80
81 wxString GetGreekStringTeX() const;
82
83 wxString GetSymbolTeX() const;
84
85 wxString GetGreekStringUnicode() const;
86
87 wxString GetSymbolUnicode(bool keepPercent) const;
88
89 bool IsShortNum() const override;
90
91 void SetType(CellType type) override;
92
93 void SetAltCopyText(const wxString &text) override {m_altCopyText = text;}
94
95 void SetPromptTooltip(bool use) { m_promptTooltip = use; }
96
97protected:
98 mutable wxString m_altCopyText;
100 virtual wxString GetXMLFlags() const;
102 virtual void UpdateDisplayedText();
104 void UpdateToolTip();
105 const wxString &GetAltCopyText() const override { return m_altCopyText; }
106
107 void FontsChanged() override
108 {
109 m_sizeCache.clear();
110 }
111
112 enum TextIndex : int8_t
113 {
114 noText,
115 cellText,
116 userLabelText,
117 numberStart,
118 ellipsis,
119 numberEnd
120 };
121
122 struct SizeEntry {
123 wxSize textSize;
124 AFontSize fontSize;
125 TextIndex index = cellText;
126 SizeEntry(wxSize textSize, AFontSize fontSize, TextIndex index) :
127 textSize(textSize), fontSize(fontSize), index(index) {}
128 SizeEntry() = default;
129 };
130
131 wxSize CalculateTextSize(wxDC *dc, const wxString &text, TextCell::TextIndex const index);
132
133 static wxRegEx m_unescapeRegEx;
134 static wxRegEx m_roundingErrorRegEx1;
135 static wxRegEx m_roundingErrorRegEx2;
136 static wxRegEx m_roundingErrorRegEx3;
137 static wxRegEx m_roundingErrorRegEx4;
138
139//** Large objects (120 bytes)
140//**
142 wxString m_text;
145 std::vector<SizeEntry> m_sizeCache;
146
147//** Bitfield objects (1 bytes)
148//**
149 void InitBitFields_TextCell()
150 { // Keep the initialization order below same as the order
151 // of bit fields in this class!
153 m_promptTooltip = false;
154 }
155
157 bool m_dontEscapeOpeningParenthesis : 1 /* InitBitFields_TextCell */;
159 bool m_promptTooltip : 1 /* InitBitFields_TextCell */;
160};
161
162#endif // TEXTCELL_H
The definition of the base class of all cells the worksheet consists of.
CellType
The supported types of math cells.
Definition: Cell.h:64
TextStyle
All text styles known to wxMaxima.
Definition: TextStyle.h:231
A Type-Safe Fixed-Point Font Size.
Definition: FontAttribs.h:98
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:142
Configuration * m_configuration
A pointer to the configuration responsible for this worksheet.
Definition: Cell.h:978
const TextStyle & GetTextStyle() const
Get the text style.
Definition: Cell.h:523
The configuration storage for the current worksheet.
Definition: Configuration.h:85
const Style * GetStyle(TextStyle textStyle) const
Get the text Style for a given text style identifier.
Definition: Configuration.h:873
A cell grouping input (and, if there is one, also the output) cell to a foldable item.
Definition: GroupCell.h:74
const wxFont & GetFont(AFontSize fontSize) const
Returns the font associated with this style, but with the size fontSize.
Definition: TextStyle.cpp:349
A Text cell.
Definition: TextCell.h:38
void SetStyle(TextStyle style) override
Sets the TextStyle of this cell.
Definition: TextCell.cpp:136
wxString ToTeX() const override
Convert this cell to its LaTeX representation.
Definition: TextCell.cpp:617
wxString m_text
The text we keep inside this cell.
Definition: TextCell.h:142
bool m_dontEscapeOpeningParenthesis
Is an ending "(" of a function name the opening parenthesis of the function?
Definition: TextCell.h:157
void UpdateToolTip()
Update the tooltip for this cell.
Definition: TextCell.cpp:153
bool IsOperator() const override
Is this cell an operator?
Definition: TextCell.cpp:484
wxString ToMathML() const override
Convert this cell to a representation fit for saving in a .wxmx file.
Definition: TextCell.cpp:1011
const wxString & GetAltCopyText() const override
Get the text set using SetAltCopyText - may be empty.
Definition: TextCell.h:105
void FontsChanged() override
To be called if the font has changed.
Definition: TextCell.h:107
const wxString & GetValue() const override
Gets the text this text cell contains.
Definition: TextCell.h:79
void SetType(CellType type) override
Sets the text style according to the type.
Definition: TextCell.cpp:148
wxString ToMatlab() const override
Convert this cell to its Matlab representation.
Definition: TextCell.cpp:554
void Draw(wxPoint point, wxDC *dc, wxDC *antialiassingDC) override
Draw this cell.
Definition: TextCell.cpp:454
virtual const CellTypeInfo & GetInfo() override
Returns the information about this cell's type.
wxString ToOMML() const override
Returns the cell's representation as OMML.
Definition: TextCell.cpp:1083
virtual void Recalculate(AFontSize fontsize) override
Recalculate the size of the cell and the difference between top and center.
Definition: TextCell.cpp:425
virtual wxString GetXMLFlags() const
Returns the XML flags this cell needs in wxMathML.
Definition: TextCell.cpp:1167
wxString m_displayedText
The text we display: We might want to convert some characters or do similar things.
Definition: TextCell.h:144
bool IsShortNum() const override
True if this cell represents a short number.
Definition: TextCell.cpp:1244
void DontEscapeOpeningParenthesis()
Calling this function signals that the "(" this cell ends in isn't part of the function name.
Definition: TextCell.h:66
wxString ToXML() const override
Convert this cell to a representation fit for saving in a .wxmx file.
Definition: TextCell.cpp:1197
bool m_promptTooltip
Default to a special tooltip for prompts?
Definition: TextCell.h:159
std::unique_ptr< Cell > Copy(GroupCell *group) const override
Create a copy of this cell.
wxString ToRTF() const override
Returns the cell's representation as RTF.
Definition: TextCell.cpp:1149
virtual wxString ToString() const override
Returns the cell's representation as a string.
Definition: TextCell.cpp:494
void SetValue(const wxString &text) override
Set the text contained in this cell.
Definition: TextCell.cpp:360
void SetAltCopyText(const wxString &text) override
What should end up if placing this cell on the clipboard?
Definition: TextCell.h:93
virtual void UpdateDisplayedText()
The text we actually display depends on many factors, unfortunately.
Definition: TextCell.cpp:381
Definition: TextCell.h:122