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 */