Guitar
AbstractCharacterBasedApplication.h
Go to the documentation of this file.
1 #ifndef ABSTRACTCHARACTERBASEDAPPLICATION_H
2 #define ABSTRACTCHARACTERBASEDAPPLICATION_H
3 
4 #include <QByteArray>
5 #include <QColor>
6 #include <QKeyEvent>
7 #include <QRect>
8 #include <QString>
9 #include <functional>
10 #include <memory>
11 #include <optional>
12 #include <variant>
13 #include <vector>
14 
15 // class MyTextCodec {
16 // private:
17 // public:
18 // MyTextCodec() = default;
19 // MyTextCodec(char const *name) //@ TODO:
20 // {
21 // }
22 // QString toUnicode(QByteArray const &ba) const
23 // {
24 // return QString::fromUtf8(ba);
25 // }
26 // QByteArray fromUnicode(QString const &s) const
27 // {
28 // return s.toUtf8();
29 // }
30 // };
31 
32 namespace EscapeCode {
33 enum EscapeCode {
34  Up = 0x1b5b4100,
35  Down = 0x1b5b4200,
36  Right = 0x1b5b4300,
37  Left = 0x1b5b4400,
38  Home = 0x1b4f4800,
39  End = 0x1b4f4600,
40  Insert = 0x1b5b327e,
41  Delete = 0x1b5b337e,
42  PageUp = 0x1b5b357e,
43  PageDown = 0x1b5b367e,
44 };
45 }
46 
47 struct CharAttr {
48  enum Index {
52  };
53  enum Flag {
54  Selected = 0x0001,
55  CurrentLine = 0x0002,
56  Underline1 = 0x0004,
57  Underline2 = 0x0008,
58  };
59  uint16_t index = 0;
60  uint16_t flags = 0;
61  QColor color;
63  : index(index)
64  {
65  }
66  bool operator == (CharAttr const &r) const
67  {
68  return index == r.index && color == r.color;
69  }
70  bool operator != (CharAttr const &r) const
71  {
72  return !operator == (r);
73  }
74 };
75 
76 class Document {
77 public:
78  typedef std::variant<std::vector<char>, std::string_view> varline_t;
79 
80  enum LineType {
83  Add,
84  Del,
85  };
86  struct Line {
88  int line_number = 0;
89  size_t byte_offset = 0;
90  varline_t text_ = std::string_view();
91  std::optional<std::vector<CharAttr>> attr_;
92 
93  Line() = default;
94 
95  explicit Line(std::vector<char> const &ba, LineType type = Normal)
96  : type(type)
97  , text_(ba)
98  {
99  }
100 
101  explicit Line(QByteArray const &ba, LineType type = Normal)
102  : type(type)
103  , text_(std::vector<char>(ba.data(), ba.data() + ba.size()))
104  {
105  }
106 
107  static Line View(std::string_view v, LineType type = Normal)
108  {
109  Line line;
110  line.type = type;
111  line.text_ = v;
112  return line;
113  }
114 
115  bool endsWithNewLine() const
116  {
117  int c = text().empty() ? 0 : text().back();
118  return c == '\n' || c == '\r';
119  }
120 
121  std::string_view text() const
122  {
123  if (std::holds_alternative<std::string_view>(text_)) {
124  return std::get<std::string_view>(text_);
125  } else {
126  std::vector<char> const &vec = std::get<std::vector<char>>(text_);
127  return std::string_view(vec.data(), vec.size());
128  }
129  }
130 
131  void set_text(const std::vector<char> &new_text)
132  {
133  text_ = new_text;
134  attr_ = std::nullopt; // invalidate cached attributes
135  }
136 
137  std::vector<char> *to_vector()
138  {
139  if (std::string_view *sv = std::get_if<std::string_view>(&text_)) {
140  text_ = std::vector<char>(sv->data(), sv->data() + sv->size());
141  }
142  std::vector<char> *v = std::get_if<std::vector<char>>(&text_);
143  assert(v);
144  return v;
145  }
146 
147  void append_text(std::string_view new_text)
148  {
149  if (!new_text.empty()) {
150  std::vector<char> *v = to_vector();
151  v->insert(v->end(), new_text.data(), new_text.data() + new_text.size());
152  }
153  }
154 
155  void append_text(const std::vector<char> &new_text)
156  {
157  if (!new_text.empty()) {
158  append_text(std::string_view(new_text.data(), new_text.size()));
159  }
160  }
161 
162  void append_text(char c)
163  {
164  append_text(std::string_view(&c, 1));
165  }
166  };
167 
168 
169  QByteArray all;
170  std::vector<varline_t> raw_lines;
171 
172  std::vector<Line> lines;
173 };
174 
176 public:
178 };
179 
181  enum Enabled {
184  };
185 
187  int row = 0;
188  int col = 0;
189  int compare(SelectionAnchor const &a) const
190  {
191  if (enabled && a.enabled) {
192  if (row < a.row) return -1;
193  if (row > a.row) return 1;
194  if (col < a.col) return -1;
195  if (col > a.col) return 1;
196  } else {
197  if (a.enabled) return -1;
198  if (enabled) return 1;
199  }
200  return 0;
201  }
202  bool operator == (SelectionAnchor const &a) const
203  {
204  return compare(a) == 0;
205  }
206  bool operator != (SelectionAnchor const &a) const
207  {
208  return compare(a) != 0;
209  }
210  bool operator < (SelectionAnchor const &a) const
211  {
212  return compare(a) < 0;
213  }
214  bool operator > (SelectionAnchor const &a) const
215  {
216  return compare(a) > 0;
217  }
218  bool operator <= (SelectionAnchor const &a) const
219  {
220  return compare(a) <= 0;
221  }
222  bool operator >= (SelectionAnchor const &a) const
223  {
224  return compare(a) >= 0;
225  }
226 };
227 
228 using TextEditorEngine_sp = std::shared_ptr<TextEditorEngine>;
229 
231  QRect cursor_rect;
232  bool single_line = false;
233  int current_row = 0;
234  int current_col = 0; // 桁位置
236  int current_col_pixel_x = 0; // 桁ピクセル座標
237  int current_row_pixel_y = 0; // 行ピクセル座標
238  int saved_row = 0;
239  int saved_col = 0;
240  int saved_col_hint = 0;
242  int scroll_row_pos = 0;
243  int scroll_col_pos = 0;
244  int viewport_org_x = 0;
245  int viewport_org_y = 1;
246  int viewport_width = 80;
247  int viewport_height = 23;
249  int bottom_line_y = -1;
251 };
252 
253 struct RowCol {
254  int row = 0;
255  int col = 0;
256  RowCol(int row = 0, int col = 0)
257  : row(row)
258  , col(col)
259  {
260  }
261 };
262 
263 using DialogHandler = std::function<void (bool, QString const &)>;
264 
266 public:
267  static const int LEFT_MARGIN = 8;
268  static const int RIGHT_MARGIN = 10;
269 
270  enum class WriteMode {
271  Insert,
272  Overwrite,
273  };
274 
275  enum class State {
276  Normal,
277  Exit,
278  };
279 
280  struct Option {
282  QRect clip;
283  };
284 
285  struct Character {
286  uint16_t c = 0;
288  };
289 
290  struct Char {
291  char32_t unicode = 0;
292  int left_x = 0;
293  int right_x = 0;
295  Char() = default;
296  Char(char32_t unicode)
297  : unicode(unicode)
298  {
299  }
300  operator char32_t () const
301  {
302  return unicode;
303  }
304  };
305 
306  enum LineFlag {
308  };
309 
310  static int charWidth(uint32_t c);
311 
313  public:
314  QString text;
315  enum Attr {
316  StyleID = 0x00ffffff,
317  Selected = 0x01000000,
318  };
319  uint32_t atts;
320  FormattedLine(QString const &text, int atts)
321  : text(text)
322  , atts(atts)
323  {
324  }
325  bool isSelected() const
326  {
327  return atts & Selected;
328  }
329  };
330 
331  std::vector<FormattedLine> formatLine_(const Document::Line &line, int tab_indent_size, int anchor_a = -1, int anchor_b = -1) const;
332 
333 private:
334  struct Private;
336 protected:
339  const int reference_char_width_ = 1; // TODO: remove
340 protected:
341 
342  int char_screen_w() const;
343  int char_screen_h() const;
344  std::vector<Character> *char_screen();
345  std::vector<Character> const *char_screen() const;
346  std::vector<uint8_t> *line_flags();
347 
348  void initEditor();
349 
350 public:
351  Document::Line *fetchLine(int row);
352 protected:
353  void fetchCurrentLine();
354  void clearParsedLine();
355 
356  int currentColX() const;
357  void setCurrentRow(int row);
358  void setCurrentCol(int col);
359 
360  int cursorCol() const;
361  int cursorRow() const;
362 
363  int editorViewportWidth() const;
364  int editorViewportHeight() const;
365 
366  virtual int print(int x, int y, QString const &text, Option const &opt);
367 
368  std::shared_ptr<TextEditorContext> editor_cx;
369  std::shared_ptr<TextEditorContext> dialog_cx;
370 
372  TextEditorContext const *cx() const;
373 
374  Document *document();
375  Document const *document() const;
376  int documentLines() const;
377 
378  bool isSingleLineMode() const;
379 
381  int decideColumnScrollPos() const;
382 
383  int calcVisualWidth(Document::Line const &line) const;
384 
385  int leftMargin_() const;
386 
387  void makeBuffer();
388  int printArea(const TextEditorContext *cx, SelectionAnchor const *sel_a = nullptr, SelectionAnchor const *sel_b = nullptr);
389 
390  virtual void updateVisibility(bool ensure_current_line_visible, bool change_col, bool auto_scroll) = 0;
391  void commitLine(const std::vector<Char> &vec);
392 
393  void doDelete();
394  void doBackspace();
395 
396  bool isDialogMode();
397  void setDialogMode(bool f);
398  void closeDialog(bool result);
399  void setDialogOption(QString const &title, QString const &value, const DialogHandler &handler);
400  void execDialog(QString const &dialog_title, const QString &dialog_value, const DialogHandler &handler);
401 private:
402  int internalParseLine(Document::Line *parsed_line, int current_col, std::vector<Char> *out, std::vector<CharAttr> *out2);
403  void internalWrite(const ushort *begin, const ushort *end);
404  void pressLetterWithControl(int c);
406  void onQuit();
407  void onOpenFile();
408  void onSaveFile();
409  void printInvertedBar(int x, int y, char const *text, int padchar);
411  enum class EditOperation {
412  Cut,
413  Copy,
414  };
415  void editSelected(EditOperation op, std::vector<Char> *cutbuffer);
416  int calcColumnToIndex(int column);
417  void edit_(EditOperation op);
418  bool isCurrentLineWritable() const;
419  void initEngine(const std::shared_ptr<TextEditorContext>& cx);
420  void writeCR();
421  bool deleteIfSelected();
422  // static int findSyntax(const std::vector<Document::CharAttr_> *list, size_t offset);
423  // static void insertSyntax(std::vector<Document::CharAttr_> *list, size_t offset, const Document::CharAttr_ &a);
424  void setCursorCol_(int col, bool auto_scroll = true, bool by_mouse = false);
425  virtual void invalidateLineFormat(int row = -1);
426 protected:
427  void deselect();
428  void parseCurrentLine(std::vector<Char> *chars, std::vector<CharAttr> *attrs, bool force);
429  void parseLine(int row, std::vector<Char> *chars, std::vector<CharAttr> *attrs);
430 
431  virtual void setCursorRow(int row, bool auto_scroll = true, bool by_mouse = false);
432  virtual void setCursorCol(int col)
433  {
434  setCursorCol_(col, true, false);
435  }
436  void setCursorPosByMouse(RowCol pos, QPoint pt)
437  {
438  setCursorRow(pos.row, false, true);
439  setCursorCol_(pos.col, false, true);
440  cx()->current_col_pixel_x = pt.x();
441  }
442  void setCursorPos(int row, int col)
443  {
444  setCursorRow(row, false);
445  setCursorCol_(col, false, false);
446  }
447  int nextTabStop(int x) const;
448  int scrollBottomLimit() const;
449  int scrollBottomLimit2() const;
450  bool isPaintingSuppressed() const;
451  void setPaintingSuppressed(bool f);
452 
453  void addNewLineToBottom();
454  void appendNewLine(std::vector<Char> *vec);
455  void writeNewLine();
456  void updateCursorPos(bool auto_scroll);
457 
458  QString statusLine() const;
459 
460  void preparePaintScreen();
461  void setRecentlyUsedPath(QString const &path);
462  QString recentlyUsedPath();
463  void clearRect(int x, int y, int w, int h);
464  void paintLineNumbers(std::function<void(int, QString const &, Document::Line const *)> const &draw);
465  bool isAutoLayout() const;
466  void invalidateArea(int top_y = 0);
467  void savePos();
468  void restorePos();
469 public:
470 
471  int currentRow() const;
472  int currentCol() const;
473 
474  virtual void layoutEditor();
475  void scrollUp();
476  void scrollDown();
477  void moveCursorOut();
478  void moveCursorHome();
479  void moveCursorEnd();
480  void moveCursorUp();
481  virtual void moveCursorDown();
482  void moveCursorLeft();
483  void moveCursorRight();
484  void movePageUp();
485  void movePageDown();
486  void scrollToTop();
487 
490  TextEditorEngine_sp engine() const;
491  int screenWidth() const;
492  int screenHeight() const;
493  void setScreenSize(int w, int h, bool update_layout);
495  void openFile(QString const &path);
496  void saveFile(QString const &path);
497  void loadExampleFile();
498  void pressEnter();
499  void pressEscape();
500  State state() const;
501  bool isLineNumberVisible() const;
502  void showLineNumber(bool show, int left_margin = LEFT_MARGIN);
503  void showHeader(bool f);
504  void showFooter(bool f);
505  void setAutoLayout(bool f);
506  void setDocument(const std::vector<Document::Line> *source);
507  void setSelectionAnchor(SelectionAnchor::Enabled enabled, bool update_anchor, bool auto_scroll);
508  void setNormalTextEditorMode(bool f);
509  void setToggleSelectionAnchorEnabled(bool f);
510  void setReadOnly(bool f);
511  bool isReadOnly() const;
512  void editPaste();
513  void editCopy();
514  void editCut();
515  void setWriteMode(WriteMode wm);
516  bool isInsertMode() const;
517  bool isOverwriteMode() const;
518  void setTerminalMode(bool f);
519  bool isTerminalMode() const;
520  void moveToTop();
521  void moveToBottom();
522  bool isBottom() const;
523  void setLineMargin(int n);
524  void write(uint32_t c, bool by_keyboard);
525  void write(char const *ptr, int len, bool by_keyboard);
526  void write(std::string const &text);
527  void write(QKeyEvent *e);
528  void setCursorVisible(bool show);
529  bool isCursorVisible();
530  void setModifierKeys(Qt::KeyboardModifiers const &keymod);
531  bool isControlModifierPressed() const;
532  bool isShiftModifierPressed() const;
533  void clearShiftModifier();
534  bool isChanged() const;
535  void setChanged(bool f);
536  void logicalMoveToBottom();
537  void logicalMoveToBottom2();
538  void appendBulk(std::string_view const &str);
539  void clear();
540  std::vector<AbstractCharacterBasedApplication::Char> *parsedCurrentLine();
541 protected:
542  void write_(char const *ptr, bool by_keyboard);
543  void write_(QString const &text, bool by_keyboard);
544  void makeColumnPosList(std::vector<int> *out);
545  bool isValidRowIndex(int row_index) const;
546  bool hasSelection() const;
547  void updateSelectionAnchor1(bool auto_scroll);
548  void updateSelectionAnchor2(bool auto_scroll);
549 };
550 
552 
553 };
554 
555 #endif // ABSTRACTCHARACTERBASEDAPPLICATION_H
std::shared_ptr< TextEditorEngine > TextEditorEngine_sp
Definition: AbstractCharacterBasedApplication.h:228
std::function< void(bool, QString const &)> DialogHandler
Definition: AbstractCharacterBasedApplication.h:263
Definition: AbstractCharacterBasedApplication.h:312
bool isSelected() const
Definition: AbstractCharacterBasedApplication.h:325
QString text
Definition: AbstractCharacterBasedApplication.h:314
FormattedLine(QString const &text, int atts)
Definition: AbstractCharacterBasedApplication.h:320
Attr
Definition: AbstractCharacterBasedApplication.h:315
@ StyleID
Definition: AbstractCharacterBasedApplication.h:316
@ Selected
Definition: AbstractCharacterBasedApplication.h:317
uint32_t atts
Definition: AbstractCharacterBasedApplication.h:319
Definition: AbstractCharacterBasedApplication.h:265
void moveCursorLeft()
Definition: AbstractCharacterBasedApplication.cpp:1497
bool isValidRowIndex(int row_index) const
Definition: AbstractCharacterBasedApplication.cpp:348
std::shared_ptr< TextEditorContext > editor_cx
Definition: AbstractCharacterBasedApplication.h:368
std::vector< FormattedLine > formatLine_(const Document::Line &line, int tab_indent_size, int anchor_a=-1, int anchor_b=-1) const
Definition: AbstractCharacterBasedApplication.cpp:262
Document::Line * fetchLine(int row)
現在行を取得
Definition: AbstractCharacterBasedApplication.cpp:358
void showFooter(bool f)
Definition: AbstractCharacterBasedApplication.cpp:155
void moveToTop()
Definition: AbstractCharacterBasedApplication.cpp:2105
int cursorCol() const
Definition: AbstractCharacterBasedApplication.cpp:407
void moveToBottom()
Definition: AbstractCharacterBasedApplication.cpp:2159
void invalidateArea(int top_y=0)
Definition: AbstractCharacterBasedApplication.cpp:1348
void setDialogOption(QString const &title, QString const &value, const DialogHandler &handler)
Definition: AbstractCharacterBasedApplication.cpp:1254
int decideColumnScrollPos() const
Definition: AbstractCharacterBasedApplication.cpp:864
static const int RIGHT_MARGIN
Definition: AbstractCharacterBasedApplication.h:268
void edit_(EditOperation op)
Definition: AbstractCharacterBasedApplication.cpp:1133
bool isChanged() const
Definition: AbstractCharacterBasedApplication.cpp:177
void addNewLineToBottom()
Definition: AbstractCharacterBasedApplication.cpp:1617
bool isSingleLineMode() const
Definition: AbstractCharacterBasedApplication.cpp:839
void openFile(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:730
bool isPaintingSuppressed() const
Definition: AbstractCharacterBasedApplication.cpp:436
void onQuit()
Definition: AbstractCharacterBasedApplication.cpp:1953
State
Definition: AbstractCharacterBasedApplication.h:275
void showHeader(bool f)
Definition: AbstractCharacterBasedApplication.cpp:149
int leftMargin_() const
Definition: AbstractCharacterBasedApplication.cpp:187
std::vector< uint8_t > * line_flags()
Definition: AbstractCharacterBasedApplication.cpp:222
void moveCursorUp()
Definition: AbstractCharacterBasedApplication.cpp:1463
void makeColumnPosList(std::vector< int > *out)
現在行の桁座標リストを作成する
Definition: AbstractCharacterBasedApplication.cpp:1675
LineFlag
Definition: AbstractCharacterBasedApplication.h:306
@ LineChanged
Definition: AbstractCharacterBasedApplication.h:307
State state() const
Definition: AbstractCharacterBasedApplication.cpp:819
void moveCursorRight()
Definition: AbstractCharacterBasedApplication.cpp:1527
void setWriteMode(WriteMode wm)
Definition: AbstractCharacterBasedApplication.cpp:2061
int documentLines() const
Definition: AbstractCharacterBasedApplication.cpp:834
int calcColumnToIndex(int column)
Definition: AbstractCharacterBasedApplication.cpp:1311
void movePageUp()
Definition: AbstractCharacterBasedApplication.cpp:1573
bool isControlModifierPressed() const
Definition: AbstractCharacterBasedApplication.cpp:133
void movePageDown()
Definition: AbstractCharacterBasedApplication.cpp:1591
Document * document()
Definition: AbstractCharacterBasedApplication.cpp:824
void setCursorVisible(bool show)
Definition: AbstractCharacterBasedApplication.cpp:167
void setModifierKeys(Qt::KeyboardModifiers const &keymod)
Definition: AbstractCharacterBasedApplication.cpp:121
bool isOverwriteMode() const
Definition: AbstractCharacterBasedApplication.cpp:2071
int scrollBottomLimit2() const
Definition: AbstractCharacterBasedApplication.cpp:1380
void setAutoLayout(bool f)
Definition: AbstractCharacterBasedApplication.cpp:143
void editPaste()
Definition: AbstractCharacterBasedApplication.cpp:2032
TextEditorEngine_sp engine() const
Definition: AbstractCharacterBasedApplication.cpp:714
WriteMode
Definition: AbstractCharacterBasedApplication.h:270
virtual void moveCursorDown()
Definition: AbstractCharacterBasedApplication.cpp:1474
void doDelete()
Definition: AbstractCharacterBasedApplication.cpp:1168
int internalParseLine(Document::Line *parsed_line, int current_col, std::vector< Char > *out, std::vector< CharAttr > *out2)
桁位置を求める
Definition: AbstractCharacterBasedApplication.cpp:515
Private * m
Definition: AbstractCharacterBasedApplication.h:334
int cursorRow() const
Definition: AbstractCharacterBasedApplication.cpp:412
void clearShiftModifier()
Definition: AbstractCharacterBasedApplication.cpp:128
void commitLine(const std::vector< Char > &vec)
Definition: AbstractCharacterBasedApplication.cpp:460
void logicalMoveToBottom2()
Definition: AbstractCharacterBasedApplication.cpp:2140
void setCursorPos(int row, int col)
Definition: AbstractCharacterBasedApplication.h:442
void updateSelectionAnchor1(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:948
TextEditorContext * cx()
Definition: AbstractCharacterBasedApplication.cpp:695
AbstractCharacterBasedApplication()
Definition: AbstractCharacterBasedApplication.cpp:111
const int reference_char_width_
Definition: AbstractCharacterBasedApplication.h:339
void clearParsedLine()
Definition: AbstractCharacterBasedApplication.cpp:400
virtual void invalidateLineFormat(int row=-1)
Definition: AbstractCharacterBasedApplication.cpp:446
QString statusLine() const
Definition: AbstractCharacterBasedApplication.cpp:1759
bool isShiftModifierPressed() const
Definition: AbstractCharacterBasedApplication.cpp:138
void setLineMargin(int n)
Definition: AbstractCharacterBasedApplication.cpp:844
void setToggleSelectionAnchorEnabled(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2006
void scrollDown()
Definition: AbstractCharacterBasedApplication.cpp:1452
void setReadOnly(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2011
SelectionAnchor selection_end
Definition: AbstractCharacterBasedApplication.h:338
SelectionAnchor selection_start
Definition: AbstractCharacterBasedApplication.h:337
void setPaintingSuppressed(bool f)
Definition: AbstractCharacterBasedApplication.cpp:441
static int charWidth(uint32_t c)
Definition: AbstractCharacterBasedApplication.cpp:257
int char_screen_h() const
Definition: AbstractCharacterBasedApplication.cpp:212
virtual void setCursorRow(int row, bool auto_scroll=true, bool by_mouse=false)
Definition: AbstractCharacterBasedApplication.cpp:969
bool isLineNumberVisible() const
Definition: AbstractCharacterBasedApplication.cpp:252
void setScreenSize(int w, int h, bool update_layout)
Definition: AbstractCharacterBasedApplication.cpp:427
int currentColX() const
Definition: AbstractCharacterBasedApplication.cpp:385
int scrollBottomLimit() const
Definition: AbstractCharacterBasedApplication.cpp:1375
void restorePos()
Definition: AbstractCharacterBasedApplication.cpp:927
void loadExampleFile()
Definition: TextEditorView.cpp:184
void parseLine(int row, std::vector< Char > *chars, std::vector< CharAttr > *attrs)
行の桁位置を求める
Definition: AbstractCharacterBasedApplication.cpp:598
void closeDialog(bool result)
Definition: AbstractCharacterBasedApplication.cpp:1294
void savePos()
Definition: AbstractCharacterBasedApplication.cpp:917
int screenWidth() const
Definition: AbstractCharacterBasedApplication.cpp:417
void setNormalTextEditorMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:1989
void updateCursorPos(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:1694
int screenHeight() const
Definition: AbstractCharacterBasedApplication.cpp:422
int nextTabStop(int x) const
Definition: AbstractCharacterBasedApplication.cpp:999
void initEditor()
Definition: AbstractCharacterBasedApplication.cpp:246
void moveCursorHome()
Definition: AbstractCharacterBasedApplication.cpp:1399
static const int LEFT_MARGIN
Definition: AbstractCharacterBasedApplication.h:267
bool isDialogMode()
Definition: AbstractCharacterBasedApplication.cpp:1249
bool isInsertMode() const
Definition: AbstractCharacterBasedApplication.cpp:2066
QString recentlyUsedPath()
Definition: AbstractCharacterBasedApplication.cpp:197
void write(uint32_t c, bool by_keyboard)
Definition: AbstractCharacterBasedApplication.cpp:2267
void doBackspace()
Definition: AbstractCharacterBasedApplication.cpp:1231
bool isAutoLayout() const
Definition: AbstractCharacterBasedApplication.cpp:1895
virtual void setCursorCol(int col)
Definition: AbstractCharacterBasedApplication.h:432
void moveCursorEnd()
Definition: AbstractCharacterBasedApplication.cpp:1430
void appendNewLine(std::vector< Char > *vec)
Definition: AbstractCharacterBasedApplication.cpp:1626
void moveCursorOut()
Definition: AbstractCharacterBasedApplication.cpp:1394
void onSaveFile()
Definition: AbstractCharacterBasedApplication.cpp:1976
virtual int print(int x, int y, QString const &text, Option const &opt)
Definition: AbstractCharacterBasedApplication.cpp:627
std::vector< AbstractCharacterBasedApplication::Char > * parsedCurrentLine()
Definition: AbstractCharacterBasedApplication.cpp:502
void onOpenFile()
Definition: AbstractCharacterBasedApplication.cpp:1962
void pressLetterWithControl(int c)
Definition: AbstractCharacterBasedApplication.cpp:2236
void editCopy()
Definition: AbstractCharacterBasedApplication.cpp:2049
void logicalMoveToBottom()
Definition: AbstractCharacterBasedApplication.cpp:2121
void printInvertedBar(int x, int y, char const *text, int padchar)
Definition: AbstractCharacterBasedApplication.cpp:1739
EditOperation
Definition: AbstractCharacterBasedApplication.h:411
void writeCR()
Definition: AbstractCharacterBasedApplication.cpp:1385
virtual void layoutEditor()
Definition: AbstractCharacterBasedApplication.cpp:237
virtual void updateVisibility(bool ensure_current_line_visible, bool change_col, bool auto_scroll)=0
void makeBuffer()
Definition: AbstractCharacterBasedApplication.cpp:227
bool isCurrentLineWritable() const
Definition: AbstractCharacterBasedApplication.cpp:604
void setTerminalMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2076
void setDialogMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:1261
void setSelectionAnchor(SelectionAnchor::Enabled enabled, bool update_anchor, bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:2021
void paintLineNumbers(std::function< void(int, QString const &, Document::Line const *)> const &draw)
Definition: AbstractCharacterBasedApplication.cpp:1840
void editSelected(EditOperation op, std::vector< Char > *cutbuffer)
Definition: AbstractCharacterBasedApplication.cpp:1006
void setChanged(bool f)
Definition: AbstractCharacterBasedApplication.cpp:182
bool isBottom() const
Definition: AbstractCharacterBasedApplication.cpp:2095
void scrollToTop()
Definition: AbstractCharacterBasedApplication.cpp:1485
bool hasSelection() const
Definition: AbstractCharacterBasedApplication.cpp:943
void writeNewLine()
Definition: AbstractCharacterBasedApplication.cpp:1634
int calcVisualWidth(Document::Line const &line) const
Definition: AbstractCharacterBasedApplication.cpp:872
void parseCurrentLine(std::vector< Char > *chars, std::vector< CharAttr > *attrs, bool force)
行のレイアウトを解析
Definition: AbstractCharacterBasedApplication.cpp:572
int currentCol() const
Definition: AbstractCharacterBasedApplication.cpp:380
void setCurrentCol(int col)
Definition: AbstractCharacterBasedApplication.cpp:395
void deselect()
Definition: AbstractCharacterBasedApplication.cpp:937
virtual ~AbstractCharacterBasedApplication()
Definition: AbstractCharacterBasedApplication.cpp:116
std::vector< Character > * char_screen()
Definition: AbstractCharacterBasedApplication.cpp:202
int printArea(const TextEditorContext *cx, SelectionAnchor const *sel_a=nullptr, SelectionAnchor const *sel_b=nullptr)
Definition: AbstractCharacterBasedApplication.cpp:1766
void ensureCurrentLineVisible()
Definition: AbstractCharacterBasedApplication.cpp:849
void fetchCurrentLine()
Definition: AbstractCharacterBasedApplication.cpp:368
void write_(char const *ptr, bool by_keyboard)
Definition: AbstractCharacterBasedApplication.cpp:2422
void setTextEditorEngine(const TextEditorEngine_sp &e)
Definition: AbstractCharacterBasedApplication.cpp:720
void appendBulk(std::string_view const &str)
Definition: AbstractCharacterBasedApplication.cpp:2363
void showLineNumber(bool show, int left_margin=LEFT_MARGIN)
Definition: AbstractCharacterBasedApplication.cpp:161
void setCursorPosByMouse(RowCol pos, QPoint pt)
Definition: AbstractCharacterBasedApplication.h:436
void setCursorCol_(int col, bool auto_scroll=true, bool by_mouse=false)
Definition: AbstractCharacterBasedApplication.cpp:982
void invalidateAreaBelowTheCurrentLine()
Definition: AbstractCharacterBasedApplication.cpp:1362
void clear()
Definition: AbstractCharacterBasedApplication.cpp:725
bool isReadOnly() const
Definition: AbstractCharacterBasedApplication.cpp:2016
void setCurrentRow(int row)
Definition: AbstractCharacterBasedApplication.cpp:390
SelectionAnchor currentAnchor(SelectionAnchor::Enabled enabled)
Definition: AbstractCharacterBasedApplication.cpp:1997
bool isCursorVisible()
Definition: AbstractCharacterBasedApplication.cpp:172
int editorViewportHeight() const
Definition: AbstractCharacterBasedApplication.cpp:622
void execDialog(QString const &dialog_title, const QString &dialog_value, const DialogHandler &handler)
Definition: AbstractCharacterBasedApplication.cpp:1288
void setDocument(const std::vector< Document::Line > *source)
Definition: AbstractCharacterBasedApplication.cpp:450
void editCut()
Definition: AbstractCharacterBasedApplication.cpp:2054
bool isTerminalMode() const
Definition: AbstractCharacterBasedApplication.cpp:2090
void pressEscape()
Definition: AbstractCharacterBasedApplication.cpp:803
int currentRow() const
Definition: AbstractCharacterBasedApplication.cpp:375
void initEngine(const std::shared_ptr< TextEditorContext > &cx)
Definition: AbstractCharacterBasedApplication.cpp:690
void scrollUp()
Definition: AbstractCharacterBasedApplication.cpp:1442
void pressEnter()
Definition: AbstractCharacterBasedApplication.cpp:792
std::shared_ptr< TextEditorContext > dialog_cx
Definition: AbstractCharacterBasedApplication.h:369
void saveFile(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:782
void clearRect(int x, int y, int w, int h)
Definition: AbstractCharacterBasedApplication.cpp:897
void setRecentlyUsedPath(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:192
void internalWrite(const ushort *begin, const ushort *end)
Definition: AbstractCharacterBasedApplication.cpp:2170
bool deleteIfSelected()
Definition: AbstractCharacterBasedApplication.cpp:1157
void updateSelectionAnchor2(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:961
int char_screen_w() const
Definition: AbstractCharacterBasedApplication.cpp:207
int editorViewportWidth() const
Definition: AbstractCharacterBasedApplication.cpp:617
void preparePaintScreen()
Definition: AbstractCharacterBasedApplication.cpp:1900
Definition: AbstractCharacterBasedApplication.h:551
Definition: AbstractCharacterBasedApplication.h:76
LineType
Definition: AbstractCharacterBasedApplication.h:80
@ Unknown
Definition: AbstractCharacterBasedApplication.h:81
@ Normal
Definition: AbstractCharacterBasedApplication.h:82
@ Del
Definition: AbstractCharacterBasedApplication.h:84
@ Add
Definition: AbstractCharacterBasedApplication.h:83
QByteArray all
Definition: AbstractCharacterBasedApplication.h:169
std::vector< varline_t > raw_lines
Definition: AbstractCharacterBasedApplication.h:170
std::variant< std::vector< char >, std::string_view > varline_t
Definition: AbstractCharacterBasedApplication.h:78
std::vector< Line > lines
Definition: AbstractCharacterBasedApplication.h:172
Definition: AbstractCharacterBasedApplication.h:175
Document document
Definition: AbstractCharacterBasedApplication.h:177
Definition: AbstractCharacterBasedApplication.h:32
@ Right
Definition: AbstractCharacterBasedApplication.h:36
@ Delete
Definition: AbstractCharacterBasedApplication.h:41
@ Home
Definition: AbstractCharacterBasedApplication.h:38
@ End
Definition: AbstractCharacterBasedApplication.h:39
@ Insert
Definition: AbstractCharacterBasedApplication.h:40
@ PageUp
Definition: AbstractCharacterBasedApplication.h:42
@ Down
Definition: AbstractCharacterBasedApplication.h:35
@ PageDown
Definition: AbstractCharacterBasedApplication.h:43
@ Left
Definition: AbstractCharacterBasedApplication.h:37
@ Up
Definition: AbstractCharacterBasedApplication.h:34
Definition: GitObjectManager.h:7
Definition: AbstractCharacterBasedApplication.h:290
int left_x
Definition: AbstractCharacterBasedApplication.h:292
Char(char32_t unicode)
Definition: AbstractCharacterBasedApplication.h:296
char32_t unicode
Definition: AbstractCharacterBasedApplication.h:291
CharAttr attr
Definition: AbstractCharacterBasedApplication.h:294
int right_x
Definition: AbstractCharacterBasedApplication.h:293
Definition: AbstractCharacterBasedApplication.h:285
uint16_t c
Definition: AbstractCharacterBasedApplication.h:286
CharAttr a
Definition: AbstractCharacterBasedApplication.h:287
Definition: AbstractCharacterBasedApplication.h:280
QRect clip
Definition: AbstractCharacterBasedApplication.h:282
CharAttr char_attr
Definition: AbstractCharacterBasedApplication.h:281
Definition: AbstractCharacterBasedApplication.cpp:68
Definition: AbstractCharacterBasedApplication.h:47
uint16_t flags
Definition: AbstractCharacterBasedApplication.h:60
Flag
Definition: AbstractCharacterBasedApplication.h:53
@ Selected
Definition: AbstractCharacterBasedApplication.h:54
@ Underline1
Definition: AbstractCharacterBasedApplication.h:56
@ CurrentLine
Definition: AbstractCharacterBasedApplication.h:55
@ Underline2
wip
Definition: AbstractCharacterBasedApplication.h:57
bool operator==(CharAttr const &r) const
Definition: AbstractCharacterBasedApplication.h:66
CharAttr(int index=Normal)
Definition: AbstractCharacterBasedApplication.h:62
QColor color
Definition: AbstractCharacterBasedApplication.h:61
uint16_t index
Definition: AbstractCharacterBasedApplication.h:59
Index
Definition: AbstractCharacterBasedApplication.h:48
@ Hilite
Definition: AbstractCharacterBasedApplication.h:51
@ Normal
Definition: AbstractCharacterBasedApplication.h:49
@ Invert
Definition: AbstractCharacterBasedApplication.h:50
bool operator!=(CharAttr const &r) const
Definition: AbstractCharacterBasedApplication.h:70
Definition: AbstractCharacterBasedApplication.h:86
int line_number
Definition: AbstractCharacterBasedApplication.h:88
void append_text(const std::vector< char > &new_text)
Definition: AbstractCharacterBasedApplication.h:155
static Line View(std::string_view v, LineType type=Normal)
Definition: AbstractCharacterBasedApplication.h:107
size_t byte_offset
Definition: AbstractCharacterBasedApplication.h:89
std::vector< char > * to_vector()
Definition: AbstractCharacterBasedApplication.h:137
bool endsWithNewLine() const
Definition: AbstractCharacterBasedApplication.h:115
LineType type
Definition: AbstractCharacterBasedApplication.h:87
varline_t text_
Definition: AbstractCharacterBasedApplication.h:90
std::string_view text() const
Definition: AbstractCharacterBasedApplication.h:121
Line()=default
Line(std::vector< char > const &ba, LineType type=Normal)
Definition: AbstractCharacterBasedApplication.h:95
void set_text(const std::vector< char > &new_text)
Definition: AbstractCharacterBasedApplication.h:131
void append_text(std::string_view new_text)
Definition: AbstractCharacterBasedApplication.h:147
void append_text(char c)
Definition: AbstractCharacterBasedApplication.h:162
std::optional< std::vector< CharAttr > > attr_
Definition: AbstractCharacterBasedApplication.h:91
Line(QByteArray const &ba, LineType type=Normal)
Definition: AbstractCharacterBasedApplication.h:101
Definition: AbstractCharacterBasedApplication.h:253
RowCol(int row=0, int col=0)
Definition: AbstractCharacterBasedApplication.h:256
int col
Definition: AbstractCharacterBasedApplication.h:255
int row
Definition: AbstractCharacterBasedApplication.h:254
Definition: AbstractCharacterBasedApplication.h:180
int col
Definition: AbstractCharacterBasedApplication.h:188
bool operator!=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:206
bool operator<(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:210
Enabled
Definition: AbstractCharacterBasedApplication.h:181
@ True
Definition: AbstractCharacterBasedApplication.h:183
@ False
Definition: AbstractCharacterBasedApplication.h:182
bool operator>=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:222
int row
Definition: AbstractCharacterBasedApplication.h:187
bool operator>(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:214
bool operator<=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:218
int compare(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:189
Enabled enabled
Definition: AbstractCharacterBasedApplication.h:186
bool operator==(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:202
Definition: AbstractCharacterBasedApplication.h:230
int bottom_line_y
Definition: AbstractCharacterBasedApplication.h:249
int viewport_height
Definition: AbstractCharacterBasedApplication.h:247
int scroll_col_pos
Definition: AbstractCharacterBasedApplication.h:243
int viewport_org_y
Definition: AbstractCharacterBasedApplication.h:245
int saved_col_hint
Definition: AbstractCharacterBasedApplication.h:240
int scroll_row_pos
Definition: AbstractCharacterBasedApplication.h:242
int current_row_pixel_y
Definition: AbstractCharacterBasedApplication.h:237
int viewport_org_x
Definition: AbstractCharacterBasedApplication.h:244
TextEditorEngine_sp engine
Definition: AbstractCharacterBasedApplication.h:250
int current_col_hint
Definition: AbstractCharacterBasedApplication.h:235
bool single_line
Definition: AbstractCharacterBasedApplication.h:232
int viewport_width
Definition: AbstractCharacterBasedApplication.h:246
int saved_row
Definition: AbstractCharacterBasedApplication.h:238
int saved_col
Definition: AbstractCharacterBasedApplication.h:239
int current_col_pixel_x
Definition: AbstractCharacterBasedApplication.h:236
int current_char_span
Definition: AbstractCharacterBasedApplication.h:241
QRect cursor_rect
Definition: AbstractCharacterBasedApplication.h:231
int tab_indent_size
Definition: AbstractCharacterBasedApplication.h:248
int current_row
Definition: AbstractCharacterBasedApplication.h:233
int current_col
Definition: AbstractCharacterBasedApplication.h:234