blob: dda07bc4b99b9d1e653049257b5b85d8379c2af3 [file] [log] [blame]
swissChili25620b02022-02-23 17:15:16 -08001#pragma once
2
3#include <QObject>
swissChili505de412022-03-24 12:35:08 -07004#include <QJsonDocument>
5#include <QFile>
swissChili25620b02022-02-23 17:15:16 -08006
7#include "Cell.h"
swissChilid85daa92022-02-24 15:29:02 -08008#include "NbRuntime.h"
swissChilie386bc72022-02-24 21:31:31 -08009#include "CellModel.h"
swissChili25620b02022-02-23 17:15:16 -080010
11class Notebook : public QObject
12{
13 Q_OBJECT
14 QML_ELEMENT
15
16 Q_PROPERTY(CellModel *cellModel READ cellModel NOTIFY cellModelChanged)
swissChili505de412022-03-24 12:35:08 -070017 Q_PROPERTY(QString savePath READ savePath WRITE setSavePath NOTIFY savePathChanged)
swissChili25620b02022-02-23 17:15:16 -080018
19public:
swissChili732628e2022-02-25 10:35:56 -080020 ~Notebook();
swissChili25620b02022-02-23 17:15:16 -080021 explicit Notebook(QObject *parent = nullptr);
22 Notebook(const Notebook &other, QObject *parent = nullptr);
23
24 CellModel *cellModel();
25
swissChilid85daa92022-02-24 15:29:02 -080026 Q_INVOKABLE void runCell(QUuid uuid);
27 Q_INVOKABLE void quitCell(QUuid uuid);
28
swissChili505de412022-03-24 12:35:08 -070029 Q_INVOKABLE QJsonDocument toJson() const;
30 Q_INVOKABLE void save();
31
32 Q_INVOKABLE bool savePathSet();
33
34 QString savePath();
35 void setSavePath(QString savePath);
36
swissChili25620b02022-02-23 17:15:16 -080037signals:
38 void cellModelChanged();
swissChili505de412022-03-24 12:35:08 -070039 void saveError(QString message);
40 void savePathChanged(QString savePath);
swissChili25620b02022-02-23 17:15:16 -080041
swissChilid85daa92022-02-24 15:29:02 -080042protected slots:
43 void cellFinishedRunning(Cell *cell, RuntimeResult result);
swissChiliece1ac82022-02-25 11:20:42 -080044 void cellFailedToParse(Cell *cell, ParseResult result, Parser parser);
swissChilid85daa92022-02-24 15:29:02 -080045 void cellWaiting(Cell *cell);
46 void cellRunning(Cell *cell);
47 void cellQuit(Cell *cell);
48
swissChili25620b02022-02-23 17:15:16 -080049protected:
50 friend class CellModel;
51
swissChilid85daa92022-02-24 15:29:02 -080052 QList<Cell *> _cells;
swissChili25620b02022-02-23 17:15:16 -080053 CellModel *_cellModel;
swissChili732628e2022-02-25 10:35:56 -080054 QThread *_rtThread;
swissChiliece1ac82022-02-25 11:20:42 -080055 NbRuntime *_rt;
swissChili505de412022-03-24 12:35:08 -070056 QString _savePath = "";
swissChili25620b02022-02-23 17:15:16 -080057};
58
59Q_DECLARE_METATYPE(Notebook)