1 /* 2 SPDX-FileCopyrightText: 2010 Miha Čančula <miha.cancula@gmail.com> 3 4 SPDX-License-Identifier: GPL-2.0-or-later 5 */ 6 7 #ifndef OCTAVESESSION_H 8 #define OCTAVESESSION_H 9 10 #include <session.h> 11 #include <QQueue> 12 #include <QTextStream> 13 #include <QRegularExpression> 14 #include <QPointer> 15 16 namespace Cantor { 17 class DefaultVariableModel; 18 } 19 20 class KDirWatch; 21 class OctaveExpression; 22 class KProcess; 23 24 25 class OctaveSession : public Cantor::Session 26 { 27 Q_OBJECT 28 public: 29 explicit OctaveSession(Cantor::Backend* backend); 30 ~OctaveSession() override; 31 void interrupt() override; 32 Cantor::Expression* evaluateExpression(const QString& command, Cantor::Expression::FinishingBehavior finishingBehavior = Cantor::Expression::FinishingBehavior::DoNotDelete, bool internal = false) override; 33 void logout() override; 34 void login() override; 35 Cantor::CompletionObject* completionFor(const QString& cmd, int index=-1) override; 36 Cantor::SyntaxHelpObject* syntaxHelpFor(const QString& cmd) override; 37 QSyntaxHighlighter* syntaxHighlighter(QObject* parent) override; 38 void runFirstExpression() override; 39 void setWorksheetPath(const QString& path) override; 40 41 bool isIntegratedPlotsEnabled() const; 42 QString plotFilePrefixPath() const; 43 44 private: 45 const static QRegularExpression PROMPT_UNCHANGEABLE_COMMAND; 46 47 private: 48 KProcess* m_process; 49 QTextStream m_stream; 50 QRegularExpression m_prompt; 51 QRegularExpression m_subprompt; 52 int m_previousPromptNumber; 53 54 bool m_syntaxError; 55 56 QString m_output; 57 QString m_plotFilePrefixPath; 58 QString m_worksheetPath; 59 bool m_isIntegratedPlotsEnabled; // Better move it in worksheet, like isCompletion, etc. 60 bool m_isIntegratedPlotsSettingsEnabled; 61 62 private: 63 void readFromOctave(QByteArray data); 64 bool isDoNothingCommand(const QString& command); 65 bool isSpecialOctaveCommand(const QString& command); 66 void updateGraphicPackagesFromSettings(); 67 QString graphicPackageErrorMessage(QString packageId) const override; 68 69 private Q_SLOTS: 70 void readOutput(); 71 void readError(); 72 void currentExpressionStatusChanged(Cantor::Expression::Status status); 73 void processError(); 74 void runSpecificCommands(); 75 }; 76 77 #endif // OCTAVESESSION_H 78