Cadabra
Computer algebra system for field theory problems
Actions.hh
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include "DataCell.hh"
5 #include "DocumentThread.hh"
6 
7 #include <memory>
8 
9 namespace cadabra {
10 
11  class DocumentThread;
12  class GUIBase;
13 
30 
31 
32  class ActionBase {
33  public:
35 
40 
41  virtual void execute(DocumentThread&, GUIBase&);
42 
44 
45  virtual void revert(DocumentThread&, GUIBase&)=0;
46 
48  virtual bool undoable() const;
49 
51  protected:
52  DTree::iterator ref;
53  };
54 
58 
59  class ActionAddCell : public ActionBase {
60  public:
61  enum class Position { before, after, child };
62 
64  virtual ~ActionAddCell() {};
65 
66  virtual void execute(DocumentThread&, GUIBase&) override;
67  virtual void revert(DocumentThread&, GUIBase&) override;
68 
70  virtual bool undoable() const override;
71  private:
72  // Keep track of the location where this cell is inserted into
73  // the notebook.
74 
76  DTree::iterator newref;
78  int child_num;
79 
80  // If we are replacing a cell, keep track of that so we
81  // report that we are not undoable.
83 
84  // For input-form cells, we want no undo, as they will go
85  // when the owner cell will be reverted.
87  };
88 
89 
94 
96  public:
97  enum class Position { in, next, previous };
98 
100  virtual ~ActionPositionCursor() {};
101 
102  virtual void execute(DocumentThread&, GUIBase&) override;
103  virtual void revert(DocumentThread&, GUIBase&) override;
104 
105  private:
107  DTree::iterator newref;
109  };
110 
114 
116  public:
117  ActionSetRunStatus(DataCell::id_t ref_id_, bool running);
118  virtual ~ActionSetRunStatus() {};
119 
120  virtual void execute(DocumentThread&, GUIBase&) override;
121  virtual void revert(DocumentThread&, GUIBase&) override;
122 
123  virtual bool undoable() const override;
124  private:
125  DTree::iterator this_cell;
127  };
128 
129 
133 
134  class ActionRemoveCell : public ActionBase {
135  public:
137  virtual ~ActionRemoveCell();
138 
139  virtual void execute(DocumentThread&, GUIBase&) override;
140  virtual void revert(DocumentThread&, GUIBase&) override;
141 
142  private:
143  // Keep track of the location where this cell (and its child
144  // cells) was in the notebook. We keep a reference to the
145  // parent cell and the index of the current cell as child of
146  // that parent.
147 
149  DTree::iterator reference_parent_cell;
151  };
152 
156 
157  class ActionReplaceCell : public ActionBase {
158  public:
160  virtual ~ActionReplaceCell();
161 
162  virtual void execute(DocumentThread&, GUIBase&) override;
163  virtual void revert(DocumentThread&, GUIBase&) override;
164 
165  virtual bool undoable() const override;
166  private:
167  };
168 
172 
173  class ActionSplitCell : public ActionBase {
174  public:
176  virtual ~ActionSplitCell();
177 
178  virtual void execute(DocumentThread&, GUIBase&) override;
179  virtual void revert(DocumentThread&, GUIBase&) override;
180 
181  private:
182  DTree::iterator newref; // the newly created cell
183  };
184 
185 
194 
195  class ActionInsertText : public ActionBase {
196  public:
197  ActionInsertText(DataCell::id_t ref_id, int pos, const std::string&);
198  virtual ~ActionInsertText() {};
199 
200  virtual void execute(DocumentThread&, GUIBase&) override;
201  virtual void revert(DocumentThread&, GUIBase&) override;
202 
203  private:
204  DTree::iterator this_cell;
206  std::string text;
207  };
208 
216 
218  public:
219  ActionCompleteText(DataCell::id_t ref_id, int pos, const std::string&, int alternative);
220  virtual ~ActionCompleteText() {};
221 
222  virtual void execute(DocumentThread&, GUIBase&) override;
223  virtual void revert(DocumentThread&, GUIBase&) override;
224 
225  int length() const;
226  int alternative() const;
227 
228  private:
229  DTree::iterator this_cell;
231  std::string text;
232  int alternative_; // in case there is more than one completion alternative
233  };
234 
243 
244  class ActionEraseText : public ActionBase {
245  public:
247  virtual ~ActionEraseText() {};
248 
249  virtual void execute(DocumentThread&, GUIBase&) override;
250  virtual void revert(DocumentThread&, GUIBase&) override;
251 
252  private:
253  DTree::iterator this_cell;
255  std::string removed_text;
256  };
257 
258  }
259 
260 
261 //
262 // class ActionMergeCells
263 
264 
265 
Add a cell to the notebook.
Definition: Actions.hh:59
Position pos
Definition: Actions.hh:77
virtual ~ActionAddCell()
Definition: Actions.hh:64
int child_num
Definition: Actions.hh:78
bool is_input_form
Definition: Actions.hh:86
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:46
DTree::iterator newref
Definition: Actions.hh:76
bool is_replacement
Definition: Actions.hh:82
Position
Definition: Actions.hh:61
DataCell newcell
Definition: Actions.hh:75
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:93
ActionAddCell(DataCell, DataCell::id_t ref_, Position pos_)
Definition: Actions.cc:41
virtual bool undoable() const override
Can this action be undone?
Definition: Actions.cc:121
All actions derive from the ActionBase object, which defines the interface they need to implement.
Definition: Actions.hh:32
DTree::iterator ref
Definition: Actions.hh:52
virtual void execute(DocumentThread &, GUIBase &)
Perform the action.
Definition: Actions.cc:27
ActionBase(DataCell::id_t ref_id)
Definition: Actions.cc:17
virtual bool undoable() const
Can this action be undone?
Definition: Actions.cc:22
DataCell::id_t ref_id
Definition: Actions.hh:50
virtual void revert(DocumentThread &, GUIBase &)=0
Revert the change to the DTree document and the GUI.
Complete text at a point in a GUI cell with one or more alternative.
Definition: Actions.hh:217
int alternative() const
Definition: Actions.cc:387
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:365
std::string text
Definition: Actions.hh:231
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:375
virtual ~ActionCompleteText()
Definition: Actions.hh:220
int alternative_
Definition: Actions.hh:232
ActionCompleteText(DataCell::id_t ref_id, int pos, const std::string &, int alternative)
Definition: Actions.cc:360
int length() const
Definition: Actions.cc:382
DTree::iterator this_cell
Definition: Actions.hh:229
int insert_pos
Definition: Actions.hh:230
Remove a text string starting at the indicated position, and with the indicated length,...
Definition: Actions.hh:244
int to_pos
Definition: Actions.hh:254
std::string removed_text
Definition: Actions.hh:255
virtual ~ActionEraseText()
Definition: Actions.hh:247
int from_pos
Definition: Actions.hh:254
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:397
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:406
DTree::iterator this_cell
Definition: Actions.hh:253
ActionEraseText(DataCell::id_t ref_id, int, int)
Definition: Actions.cc:392
Add a text string (can be just a single character) at the point of the cursor.
Definition: Actions.hh:195
virtual ~ActionInsertText()
Definition: Actions.hh:198
std::string text
Definition: Actions.hh:206
ActionInsertText(DataCell::id_t ref_id, int pos, const std::string &)
Definition: Actions.cc:338
int insert_pos
Definition: Actions.hh:205
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:352
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:343
DTree::iterator this_cell
Definition: Actions.hh:204
Position the cursor relative to the indicated cell.
Definition: Actions.hh:95
virtual ~ActionPositionCursor()
Definition: Actions.hh:100
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:202
ActionPositionCursor(DataCell::id_t ref_id_, Position pos_)
Definition: Actions.cc:126
DTree::iterator newref
Definition: Actions.hh:107
Position pos
Definition: Actions.hh:108
Position
Definition: Actions.hh:97
uint64_t needed_new_cell_with_id
Definition: Actions.hh:106
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:131
Remove a cell and all its child cells from the document.
Definition: Actions.hh:134
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:234
DTree::iterator reference_parent_cell
Definition: Actions.hh:149
size_t reference_child_index
Definition: Actions.hh:150
ActionRemoveCell(DataCell::id_t ref_id_)
Definition: Actions.cc:212
DTree removed_tree
Definition: Actions.hh:148
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:221
virtual ~ActionRemoveCell()
Definition: Actions.cc:217
Replace the contents of a cell.
Definition: Actions.hh:157
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:265
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:261
ActionReplaceCell(DataCell::id_t ref_id_)
Definition: Actions.cc:252
virtual bool undoable() const override
Can this action be undone?
Definition: Actions.cc:269
virtual ~ActionReplaceCell()
Definition: Actions.cc:257
Update the running status of the indicated cell.
Definition: Actions.hh:115
DTree::iterator this_cell
Definition: Actions.hh:125
bool was_running_
Definition: Actions.hh:126
virtual ~ActionSetRunStatus()
Definition: Actions.hh:118
virtual bool undoable() const override
Can this action be undone?
Definition: Actions.cc:318
bool new_running_
Definition: Actions.hh:126
ActionSetRunStatus(DataCell::id_t ref_id_, bool running)
Definition: Actions.cc:313
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:323
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:333
Split a cell into two separate cells, at the point of the cursor.
Definition: Actions.hh:173
virtual void revert(DocumentThread &, GUIBase &) override
Revert the change to the DTree document and the GUI.
Definition: Actions.cc:306
ActionSplitCell(DataCell::id_t ref_id)
Definition: Actions.cc:274
virtual ~ActionSplitCell()
Definition: Actions.cc:279
virtual void execute(DocumentThread &, GUIBase &) override
Perform the action.
Definition: Actions.cc:283
DTree::iterator newref
Definition: Actions.hh:182
Each cell is identified by a serial number 'id' which is used to keep track of it across network call...
Definition: DataCell.hh:52
DataCells are the basic building blocks for a document.
Definition: DataCell.hh:27
A base class with all the logic to manipulate a Cadabra notebook document.
Definition: DocumentThread.hh:41
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