Cadabra
Computer algebra system for field theory problems
DocumentThread.hh
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include <queue>
5 #include <mutex>
6 #include <stack>
7 #include <map>
8 #include <thread>
9 
10 #include "DataCell.hh"
11 #include "tree.hh"
12 
13 namespace cadabra {
14 
15  class ActionBase;
16  class ActionAddCell;
17  class ActionPositionCursor;
18  class ActionRemoveCell;
19  class ActionSetRunStatus;
20  class ActionSplitCell;
21  class ActionInsertText;
22  class ActionCompleteText;
23  class ActionEraseText;
24  class ComputeThread;
25  class GUIBase;
26 
39 
40 
42  public:
44 
48 
50 
54 
55  virtual void set_compute_thread(ComputeThread *);
56 
61 
63 
69 
70  void queue_action(std::shared_ptr<ActionBase>);
71 
73 
74  void new_document();
75 
79 
80  void load_from_string(const std::string&);
81 
82  virtual void on_interactive_output(const nlohmann::json& msg);
83 
84  virtual void set_progress(const std::string& msg, int cur_step, int total_steps);
85 
87  void undo();
88 
90  void redo();
91 
93  std::pair<DTree::iterator, size_t> find_string(DTree::iterator start_it, size_t start_pos, const std::string& f, bool case_ins) const;
94 
95  friend ActionBase;
96  friend ActionAddCell;
104 
105  class Prefs {
106  public:
107  using ColorMap = std::map<std::string, std::string>;
108  Prefs(bool use_defaults = false);
109  void save();
111  bool highlight;
114  std::map<std::string, ColorMap> colours;
115  std::string git_path;
116  std::string python_path;
119  bool microtex;
120  private:
121  nlohmann::json data;
122  std::string config_path;
123  };
125 
128 
129  void set_user_details(const std::string& name, const std::string& email, const std::string& affiliation);
130 
133  std::thread::id main_thread_id;
134 
135  protected:
138 
144 
146 
152 
153  std::mutex stack_mutex;
154  typedef std::stack<std::shared_ptr<ActionBase> > ActionStack;
156  std::queue<std::shared_ptr<ActionBase> > pending_actions;
158 
162 
163  void process_action_queue();
164  virtual bool on_unhandled_error(const std::exception& err);
165 
166 
167 
169  enum class help_t { algorithm, property, latex, none };
170  bool help_type_and_topic(const std::string& before, const std::string& after,
171  help_t& help_type, std::string& help_topic) const;
172 
173  };
174 
175  }
Base class which talks to the server and sends Action objects back to the DocumentThread.
Definition: ComputeThread.hh:36
Definition: DocumentThread.hh:105
bool tab_completion
Definition: DocumentThread.hh:118
std::map< std::string, ColorMap > colours
Definition: DocumentThread.hh:114
Prefs(bool use_defaults=false)
Definition: DocumentThread.cc:235
std::map< std::string, std::string > ColorMap
Definition: DocumentThread.hh:107
std::string git_path
Definition: DocumentThread.hh:115
bool microtex
Definition: DocumentThread.hh:119
nlohmann::json data
Definition: DocumentThread.hh:121
std::string python_path
Definition: DocumentThread.hh:116
bool is_anonymous
Definition: DocumentThread.hh:113
std::string config_path
Definition: DocumentThread.hh:122
void save()
Definition: DocumentThread.cc:323
bool move_into_new_cell
Definition: DocumentThread.hh:117
bool highlight
Definition: DocumentThread.hh:111
bool is_registered
Definition: DocumentThread.hh:112
int font_step
Definition: DocumentThread.hh:110
A base class with all the logic to manipulate a Cadabra notebook document.
Definition: DocumentThread.hh:41
help_t
Help system.
Definition: DocumentThread.hh:169
void queue_action(std::shared_ptr< ActionBase >)
All changes to the document should be made by submitting ActionBase derived objects to the 'queue_act...
Definition: DocumentThread.cc:187
virtual void on_interactive_output(const nlohmann::json &msg)
Definition: DocumentThread.cc:37
std::thread::id main_thread_id
For debugging purposes we store the main thread idea here (the main Cadabra class sets it).
Definition: DocumentThread.hh:133
void undo()
One undo step.
Definition: DocumentThread.cc:85
ActionStack undo_stack
Definition: DocumentThread.hh:155
void load_from_string(const std::string &)
Load a new notebook from a JSON string.
Definition: DocumentThread.cc:75
virtual bool on_unhandled_error(const std::exception &err)
Definition: DocumentThread.cc:230
virtual void set_compute_thread(ComputeThread *)
Let the notebook know about the ComputeThread so that it can send cells for evaluation.
Definition: DocumentThread.cc:47
friend ActionSetRunStatus
Definition: DocumentThread.hh:100
void redo()
One redo step.
Definition: DocumentThread.cc:107
friend ActionPositionCursor
Definition: DocumentThread.hh:97
friend ActionEraseText
Definition: DocumentThread.hh:103
DTree doc
The actual document tree.
Definition: DocumentThread.hh:145
void set_user_details(const std::string &name, const std::string &email, const std::string &affiliation)
Set user details which will be sent to the Cadabra log server.
Definition: DocumentThread.cc:346
friend ActionRemoveCell
Definition: DocumentThread.hh:98
std::queue< std::shared_ptr< ActionBase > > pending_actions
Definition: DocumentThread.hh:156
std::stack< std::shared_ptr< ActionBase > > ActionStack
Definition: DocumentThread.hh:154
GUIBase * gui
Definition: DocumentThread.hh:136
virtual void set_progress(const std::string &msg, int cur_step, int total_steps)
Definition: DocumentThread.cc:42
std::mutex stack_mutex
The action undo/redo/todo stacks and logic to execute them.
Definition: DocumentThread.hh:153
DocumentThread(GUIBase *)
Definition: DocumentThread.cc:24
friend ActionCompleteText
Definition: DocumentThread.hh:102
ActionStack redo_stack
Definition: DocumentThread.hh:155
void build_visual_representation()
Ensure that the gui has an up-to-date representation of the dtree.
Definition: DocumentThread.cc:128
friend ActionBase
Definition: DocumentThread.hh:95
void new_document()
Setup an empty new document with a single Python input cell.
Definition: DocumentThread.cc:52
friend ActionAddCell
Definition: DocumentThread.hh:96
friend ActionSplitCell
Definition: DocumentThread.hh:99
std::pair< DTree::iterator, size_t > find_string(DTree::iterator start_it, size_t start_pos, const std::string &f, bool case_ins) const
Find string, return match, or a (doc.end(), std::string::npos).
Definition: DocumentThread.cc:164
DocumentThread(const DocumentThread &)=delete
It is not possible to copy-construct a DocumentThread as it holds on to resources which are not easil...
bool help_type_and_topic(const std::string &before, const std::string &after, help_t &help_type, std::string &help_topic) const
Definition: DocumentThread.cc:355
friend ActionInsertText
Definition: DocumentThread.hh:101
ComputeThread * compute
Definition: DocumentThread.hh:137
void process_action_queue()
Process the action queue.
Definition: DocumentThread.cc:194
Prefs prefs
Definition: DocumentThread.hh:124
bool disable_stacks
Definition: DocumentThread.hh:157
Abstract base class with methods that need to be implemented by any GUI.
Definition: GUIBase.hh:16
Functions to handle the exchange properties of two or more symbols in a product.
Definition: Adjform.cc:83
tree< DataCell > DTree
Definition: DataCell.hh:109
f
Definition: nevaluate.py:14
const char email[]
Definition: Snoop.hh:340