117
bool TextEntry::worksheetContextMenuEvent(QContextMenuEvent* event, const QTextCursor& cursor)
120
KMenu* defaultMenu = new KMenu(m_worksheet);
122
defaultMenu->addAction(KStandardAction::cut(m_worksheet));
123
defaultMenu->addAction(KStandardAction::copy(m_worksheet));
124
defaultMenu->addAction(KStandardAction::paste(m_worksheet));
125
defaultMenu->addSeparator();
127
if(!m_worksheet->isRunning())
128
defaultMenu->addAction(KIcon("system-run"),i18n("Evaluate Worksheet"),m_worksheet,SLOT(evaluate()),0);
130
defaultMenu->addAction(KIcon("process-stop"),i18n("Interrupt"),m_worksheet,SLOT(interrupt()),0);
131
defaultMenu->addSeparator();
133
defaultMenu->addAction(KIcon("edit-delete"),i18n("Remove Entry"), m_worksheet, SLOT(removeCurrentEntry()));
135
createSubMenuInsert(defaultMenu);
137
defaultMenu->popup(event->globalPos());
94
143
void TextEntry::setContent(const QString& content)
96
145
firstValidCursorPosition().insertText(content);
115
164
Q_UNUSED(archive);
117
QTextCursor cursor = firstValidCursorPosition();
166
bool needsEval=false;
167
//make sure that the latex code is shown instead of the rendered formulas
168
QTextCursor cursor = m_worksheet->document()->find(QString(QChar::ObjectReplacementCharacter), m_frame->firstCursorPosition());
169
while(!cursor.isNull()&&cursor.position()<=m_frame->lastPosition())
171
QTextCharFormat format=cursor.charFormat();
172
if (format.objectType() == FormulaTextObject::FormulaTextFormat)
174
showLatexCode(cursor);
178
cursor = m_worksheet->document()->find(QString(QChar::ObjectReplacementCharacter), cursor);
182
cursor = firstValidCursorPosition();
118
183
cursor.setPosition(lastValidPosition(), QTextCursor::KeepAnchor);
119
185
const QString& html = cursor.selection().toHtml();
120
186
kDebug() << html;
121
187
QDomElement el = doc.createElement("Text");
122
188
QDomDocument myDoc = QDomDocument();
123
189
myDoc.setContent(html);
124
190
el.appendChild(myDoc.documentElement().firstChildElement("body"));
147
216
bool TextEntry::evaluate(bool current)
149
218
Q_UNUSED(current);
220
QTextDocument *doc = m_frame->document();
221
//blahtex::Interface *translator = m_worksheet->translator();
223
QTextCursor cursor = findLatexCode(doc);
224
while (!cursor.isNull())
226
QString latexCode = cursor.selectedText();
227
kDebug()<<"found latex: "<<latexCode;
229
latexCode.remove(0, 2);
230
latexCode.remove(latexCode.length() - 2, 2);
233
Cantor::LatexRenderer* renderer=new Cantor::LatexRenderer(this);
234
renderer->setLatexCode(latexCode);
235
renderer->setEquationOnly(true);
236
renderer->setEquationType(Cantor::LatexRenderer::InlineEquation);
237
renderer->setMethod(Cantor::LatexRenderer::LatexMethod);
239
renderer->renderBlocking();
242
QTextCharFormat mmlCharFormat;
243
mmlCharFormat.setObjectType(MmlTextObject::MmlTextFormat);
244
mmlCharFormat.setProperty(MmlTextObject::LatexCode, latexCode);
246
if (!translator->ProcessInput(latexCode.toStdWString()))
248
QString mmlCode = QString::fromStdWString(translator->GetMathml());
250
if (mmlCode.isEmpty())
253
QtMmlDocument renderer;
254
renderer.setBaseFontPointSize(cursor.charFormat().fontPointSize());
255
renderer.setFontName(QtMmlWidget::NormalFont, "STIXGeneral");
256
renderer.setContent(mmlCode);
258
QImage mmlBufferImage(renderer.size(), QImage::Format_ARGB32);
259
mmlBufferImage.fill(QColor(0, 0, 0, 0).value());
260
QPainter painter(&mmlBufferImage);
261
renderer.paint(&painter, mmlBufferImage.rect().topLeft ());
263
mmlCharFormat.setProperty(MmlTextObject::MmlData, mmlBufferImage);
265
cursor.removeSelectedText();
266
cursor.insertText(QString(QChar::ObjectReplacementCharacter), mmlCharFormat);
270
bool success=m_worksheet->resultProxy()->renderEpsToResource(renderer->imagePath());
271
kDebug()<<"rendering successfull? "<<success;
273
QString path=renderer->imagePath();
274
KUrl internal=KUrl(path);
275
internal.setProtocol("internal");
276
kDebug()<<"int: "<<internal;
278
QTextCharFormat formulaFormat;
279
formulaFormat.setObjectType(FormulaTextObject::FormulaTextFormat);
280
formulaFormat.setProperty( FormulaTextObject::Data,renderer->imagePath());
281
formulaFormat.setProperty( FormulaTextObject::ResourceUrl, internal);
282
formulaFormat.setProperty( FormulaTextObject::LatexCode, latexCode);
283
formulaFormat.setProperty( FormulaTextObject::FormulaType, renderer->method());
285
cursor.insertText(QString(QChar::ObjectReplacementCharacter), formulaFormat);
288
cursor = findLatexCode(doc);
153
295
void TextEntry::update()
297
QTextCursor cursor = m_worksheet->document()->find(QString(QChar::ObjectReplacementCharacter), m_frame->firstCursorPosition());
298
while(!cursor.isNull()&&cursor.position()<=m_frame->lastPosition())
300
QTextCharFormat format=cursor.charFormat();
301
if (format.objectType() == FormulaTextObject::FormulaTextFormat)
303
kDebug()<<"found a formula... rendering the eps...";
304
QUrl url=qVariantValue<QUrl>(format.property(FormulaTextObject::Data));
305
bool success=m_worksheet->resultProxy()->renderEpsToResource(url);
306
kDebug()<<"rendering successfull? "<<success;
308
//HACK: reinsert this image, to make sure the layout is updated to the new size
309
cursor.deletePreviousChar();
310
cursor.insertText(QString(QChar::ObjectReplacementCharacter), format);
313
cursor = m_worksheet->document()->find(QString(QChar::ObjectReplacementCharacter), cursor);
317
QTextCursor TextEntry::findLatexCode(QTextDocument *doc) const
319
QTextCursor startCursor = doc->find("$$");
320
if (startCursor.isNull())
322
const QTextCursor endCursor = doc->find("$$", startCursor);
323
if (endCursor.isNull())
325
startCursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::MoveAnchor, 2);
326
startCursor.setPosition(endCursor.position(), QTextCursor::KeepAnchor);
330
void TextEntry::showLatexCode(QTextCursor cursor)
332
QString latexCode = qVariantValue<QString>(cursor.charFormat().property(FormulaTextObject::LatexCode));
333
cursor.deletePreviousChar();
334
cursor.insertText("$$"+latexCode+"$$");