File indexing completed on 2024-05-12 11:32:34
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2009 Alexander Rieder <alexanderrieder@gmail.com> 0004 */ 0005 0006 #ifndef _RSERVER_H 0007 #define _RSERVER_H 0008 0009 #include <QObject> 0010 #include <QChar> 0011 #include <QMap> 0012 #include <QString> 0013 #include <QStringList> 0014 0015 class Expression 0016 { 0017 public: 0018 QString cmd; 0019 int returnCode; 0020 bool hasOtherResults; 0021 QString err_buffer; 0022 QString std_buffer; 0023 }; 0024 0025 class RServer : public QObject 0026 { 0027 Q_OBJECT 0028 Q_CLASSINFO("D-Bus Interface", "org.kde.Cantor.R") 0029 0030 public: 0031 enum Status { Idle=0, Busy }; 0032 enum ReturnCode { SuccessCode=0, ErrorCode, InterruptedCode}; 0033 RServer( ); 0034 ~RServer() override; 0035 0036 void initR(); 0037 void autoload(); 0038 void endR(); 0039 0040 QString requestInput(const QString& prompt); 0041 void addFileToOutput(const QString& file); 0042 0043 Q_SIGNALS: 0044 void ready(); 0045 void statusChanged(int status); 0046 void expressionFinished(int returnCode, const QString& text, const QStringList& files); 0047 void inputRequested(const QString& prompt); 0048 0049 void requestAnswered(); 0050 0051 public Q_SLOTS: 0052 void runCommand(const QString& cmd, bool internal=false); 0053 void answerRequest(const QString& answer); 0054 0055 private: 0056 struct CachedParsedNamespace { 0057 QStringList functions; 0058 QStringList constants; 0059 }; 0060 0061 private: 0062 void setStatus(Status status); 0063 void newPlotDevice(); 0064 void completeCommand(const QString& cmd); // TODO: comment properly, only takes command from start to cursor 0065 void listSymbols(); 0066 0067 private: 0068 const static QChar recordSep; 0069 const static QChar unitSep; 0070 0071 private: 0072 bool m_isInitialized; 0073 bool m_isCompletionAvailable; 0074 Status m_status; 0075 QString m_requestCache; 0076 QString m_tmpDir; 0077 QString m_curPlotFile; 0078 QStringList m_expressionFiles; 0079 QMap<QString, CachedParsedNamespace> m_parsedNamespaces; 0080 }; 0081 0082 #endif /* _RSERVER_H */