Guitar
AbstractCharacterBasedApplication.h
Go to the documentation of this file.
1 #ifndef ABSTRACTCHARACTERBASEDAPPLICATION_H
2 #define ABSTRACTCHARACTERBASEDAPPLICATION_H
3 
4 #include <QList>
5 #include <QRect>
6 #include <QString>
7 #include <QByteArray>
8 #include <memory>
9 #include <vector>
10 #include <functional>
11 #include <QKeyEvent>
12 #include <QColor>
13 // #include <QTextCodec>
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 class Document {
48 public:
49  struct CharAttr_ {
50  size_t offset = 0;
51  int color = -1;
52  };
53  struct Line {
54  enum Type {
57  Add,
58  Del,
59  };
61  int hunk_number = -1;
62  int line_number = 0;
63  size_t byte_offset = 0;
64  QByteArray text;
65 
66  Line() = default;
67 
68  explicit Line(QByteArray const &ba)
69  : type(Normal)
70  , text(ba)
71  {
72  }
73 
74  explicit Line(std::string const &str, Type type = Normal)
75  : type(type)
76  {
77  text.append(str.c_str(), (int)str.size());
78  }
79 
80  bool endsWithNewLine() const
81  {
82  int c = text.isEmpty() ? 0 : text.at(text.size() - 1);
83  return c == '\n' || c == '\r';
84 
85  }
86  };
87 
88  QList<Line> lines;
89  void retrieveLastText(std::vector<char> *out, int maxlen) const;
90 };
91 
93 public:
96  {
97  document.lines.push_back(Document::Line(QByteArray()));
98  }
99 };
100 
102  enum Enabled {
105  };
106 
108  int row = 0;
109  int col = 0;
110  int compare(SelectionAnchor const &a) const
111  {
112  if (enabled && a.enabled) {
113  if (row < a.row) return -1;
114  if (row > a.row) return 1;
115  if (col < a.col) return -1;
116  if (col > a.col) return 1;
117  } else {
118  if (a.enabled) return -1;
119  if (enabled) return 1;
120  }
121  return 0;
122  }
123  bool operator == (SelectionAnchor const &a) const
124  {
125  return compare(a) == 0;
126  }
127  bool operator != (SelectionAnchor const &a) const
128  {
129  return compare(a) != 0;
130  }
131  bool operator < (SelectionAnchor const &a) const
132  {
133  return compare(a) < 0;
134  }
135  bool operator > (SelectionAnchor const &a) const
136  {
137  return compare(a) > 0;
138  }
139  bool operator <= (SelectionAnchor const &a) const
140  {
141  return compare(a) <= 0;
142  }
143  bool operator >= (SelectionAnchor const &a) const
144  {
145  return compare(a) >= 0;
146  }
147 };
148 
149 using TextEditorEnginePtr = std::shared_ptr<TextEditorEngine>;
150 
152  QRect cursor_rect;
153  bool single_line = false;
154  int current_row = 0;
155  int current_col = 0; // 桁位置
157  int current_col_pixel_x = 0; // 桁ピクセル座標
158  int current_row_pixel_y = 0; // 行ピクセル座標
159  int saved_row = 0;
160  int saved_col = 0;
161  int saved_col_hint = 0;
163  int scroll_row_pos = 0;
164  int scroll_col_pos = 0;
165  int viewport_org_x = 0;
166  int viewport_org_y = 1;
167  int viewport_width = 80;
168  int viewport_height = 23;
169  int tab_span = 4;
170  int bottom_line_y = -1;
172 };
173 
174 struct RowCol {
175  int row = 0;
176  int col = 0;
177  RowCol(int row = 0, int col = 0)
178  : row(row)
179  , col(col)
180  {
181  }
182 };
183 
184 using DialogHandler = std::function<void (bool, QString const &)>;
185 
187 public:
188 // enum RenderingMode {
189 // CharacterMode,
190 // GraphicMode,
191 // };
192 
193  static const int LEFT_MARGIN = 8;
194  static const int RIGHT_MARGIN = 10;
195 
196  enum class WriteMode {
197  Insert,
198  Overwrite,
199  };
200 
201  enum class State {
202  Normal,
203  Exit,
204  };
205 
206  struct CharAttr {
207  uint16_t index;
208  uint16_t flags = 0;
209  QColor color;
211  : index(index)
212  {
213  }
214  bool operator == (CharAttr const &r) const
215  {
216  return index == r.index && color == r.color;
217  }
218  bool operator != (CharAttr const &r) const
219  {
220  return !operator == (r);
221  }
222  enum Index {
226  };
227  enum Flag {
228  Selected = 0x0001,
229  CurrentLine = 0x0002,
230  Underline1 = 0x0004,
231  Underline2 = 0x0008,
232  };
233  };
234 
235  struct Option {
237  QRect clip;
238  };
239 
240  struct Character {
241  uint16_t c = 0;
243  };
244 
245  struct Char {
246  int left_x = 0;
247  int right_x = 0;
248  uint32_t unicode = 0;
250  Char() = default;
251  Char(uint32_t unicode)
252  : unicode(unicode)
253  {
254 
255  }
256  operator uint32_t () const
257  {
258  return unicode;
259  }
260 // operator unsigned int () const = delete;
261  };
262 
263  enum LineFlag {
265  };
266 
267  static int charWidth(uint32_t c);
268 
270  public:
271  QString text;
272  enum Attr {
273  StyleID = 0x00ffffff,
274  Selected = 0x01000000,
275  };
276  uint32_t atts;
277  FormattedLine2(QString const &text, int atts)
278  : text(text)
279  , atts(atts)
280  {
281  }
282  bool isSelected() const
283  {
284  return atts & Selected;
285  }
286  };
287 
288  QList<FormattedLine2> formatLine_(const Document::Line &line, int tab_span, int anchor_a = -1, int anchor_b = -1) const;
289  QList<FormattedLine2> formatLine2_(int row_index) const;
290 
291 private:
292  struct Private;
294 protected:
297  const int reference_char_width_ = 1; // TODO: remove
298 protected:
299 
300  int char_screen_w() const;
301  int char_screen_h() const;
302  std::vector<Character> *char_screen();
303  std::vector<Character> const *char_screen() const;
304  std::vector<uint8_t> *line_flags();
305 
306  void initEditor();
307 
308  void fetchCurrentLine() const;
309  QByteArray fetchLine(int row) const;
310  void clearParsedLine();
311 
312  int currentColX() const;
313  void setCurrentRow(int row);
314  void setCurrentCol(int col);
315 
316  int cursorCol() const;
317  int cursorRow() const;
318 
319  int editorViewportWidth() const;
320  int editorViewportHeight() const;
321 
322  virtual int print(int x, int y, QString const &text, Option const &opt);
323 
324  std::shared_ptr<TextEditorContext> editor_cx;
325  std::shared_ptr<TextEditorContext> dialog_cx;
326 
328  TextEditorContext const *cx() const;
329 
330  Document *document();
331  int documentLines() const;
332 
333  bool isSingleLineMode() const;
334 
336  int decideColumnScrollPos() const;
337 
338  int calcVisualWidth(Document::Line const &line) const;
339 
340  int leftMargin_() const;
341 
342  void makeBuffer();
343  int printArea(const TextEditorContext *cx, SelectionAnchor const *sel_a = nullptr, SelectionAnchor const *sel_b = nullptr);
344 
345  virtual void updateVisibility(bool ensure_current_line_visible, bool change_col, bool auto_scroll) = 0;
346  void commitLine(const std::vector<Char> &vec);
347 
348  void doDelete();
349  void doBackspace();
350 
351  bool isDialogMode();
352  void setDialogMode(bool f);
353  void closeDialog(bool result);
354  void setDialogOption(QString const &title, QString const &value, const DialogHandler &handler);
355  void execDialog(QString const &dialog_title, const QString &dialog_value, const DialogHandler &handler);
356 private:
357  int internalParseLine(const QByteArray &parsed_line, int current_col, std::vector<Char> *vec, int increase_hint) const;
358  void internalWrite(const ushort *begin, const ushort *end);
359  void pressLetterWithControl(int c);
361  void onQuit();
362  void onOpenFile();
363  void onSaveFile();
364  void printInvertedBar(int x, int y, char const *text, int padchar);
366  enum class EditOperation {
367  Cut,
368  Copy,
369  };
370  void editSelected(EditOperation op, std::vector<Char> *cutbuffer);
371  int calcColumnToIndex(int column);
372  void edit_(EditOperation op);
373  bool isCurrentLineWritable() const;
374  void initEngine(const std::shared_ptr<TextEditorContext>& cx);
375  void writeCR();
376  bool deleteIfSelected();
377  static int findSyntax(const QList<Document::CharAttr_> *list, size_t offset);
378  static void insertSyntax(QList<Document::CharAttr_> *list, size_t offset, const Document::CharAttr_ &a);
379  void setCursorCol_(int col, bool auto_scroll = true, bool by_mouse = false);
380 protected:
381  void deselect();
382  std::vector<Char> *parseCurrentLine(std::vector<Char> *vec, int increase_hint, bool force);
383  void parseLine(int row, std::vector<Char> *vec) const;
384 
385  virtual void setCursorRow(int row, bool auto_scroll = true, bool by_mouse = false);
386  virtual void setCursorCol(int col)
387  {
388  setCursorCol_(col, true, false);
389  }
390  void setCursorPosByMouse(RowCol pos, QPoint pt)
391  {
392  setCursorRow(pos.row, false, true);
393  setCursorCol_(pos.col, false, true);
394  cx()->current_col_pixel_x = pt.x();
395  }
396  void setCursorPos(int row, int col)
397  {
398  setCursorRow(row, false);
399  setCursorCol_(col, false, false);
400  }
401  int nextTabStop(int x) const;
402  int scrollBottomLimit() const;
403  int scrollBottomLimit2() const;
404  bool isPaintingSuppressed() const;
405  void setPaintingSuppressed(bool f);
406 
407  void addNewLineToBottom();
408  void appendNewLine(std::vector<Char> *vec);
409  void writeNewLine();
410  void updateCursorPos(bool auto_scroll);
411 
412  QString statusLine() const;
413 
414  void preparePaintScreen();
415  void setRecentlyUsedPath(QString const &path);
416  QString recentlyUsedPath();
417  void clearRect(int x, int y, int w, int h);
418  void paintLineNumbers(std::function<void(int, QString const &, Document::Line const *)> const &draw);
419  bool isAutoLayout() const;
420  void invalidateArea(int top_y = 0);
421  void savePos();
422  void restorePos();
423 public:
424 
425  int currentRow() const;
426  int currentCol() const;
427 
428  virtual void layoutEditor();
429  void scrollUp();
430  void scrollDown();
431  void moveCursorOut();
432  void moveCursorHome();
433  void moveCursorEnd();
434  void moveCursorUp();
435  virtual void moveCursorDown();
436  void moveCursorLeft();
437  void moveCursorRight();
438  void movePageUp();
439  void movePageDown();
440  void scrollToTop();
441 
444  TextEditorEnginePtr engine() const;
445  int screenWidth() const;
446  int screenHeight() const;
447  void setScreenSize(int w, int h, bool update_layout);
449  void openFile(QString const &path);
450  void saveFile(QString const &path);
451  void loadExampleFile();
452  void pressEnter();
453  void pressEscape();
454  State state() const;
455  bool isLineNumberVisible() const;
456  void showLineNumber(bool show, int left_margin = LEFT_MARGIN);
457  void showHeader(bool f);
458  void showFooter(bool f);
459  void setAutoLayout(bool f);
460  void setDocument(const QList<Document::Line> *source);
461  void setSelectionAnchor(SelectionAnchor::Enabled enabled, bool update_anchor, bool auto_scroll);
462  void setNormalTextEditorMode(bool f);
463  void setToggleSelectionAnchorEnabled(bool f);
464  void setReadOnly(bool f);
465  bool isReadOnly() const;
466  void editPaste();
467  void editCopy();
468  void editCut();
469  void setWriteMode(WriteMode wm);
470  bool isInsertMode() const;
471  bool isOverwriteMode() const;
472  void setTerminalMode(bool f);
473  bool isTerminalMode() const;
474  void moveToTop();
475  void moveToBottom();
476  bool isBottom() const;
477  void setLineMargin(int n);
478  void write(uint32_t c, bool by_keyboard);
479  void write(char const *ptr, int len, bool by_keyboard);
480  void write(std::string const &text);
481  void write(QKeyEvent *e);
482  void setTextCodec(std::shared_ptr<MyTextCodec> codec);
483  void setCursorVisible(bool show);
484  bool isCursorVisible();
485  void setModifierKeys(Qt::KeyboardModifiers const &keymod);
486  bool isControlModifierPressed() const;
487  bool isShiftModifierPressed() const;
488  void clearShiftModifier();
489  void retrieveLastText(std::vector<char> *out, int maxlen) const;
490  bool isChanged() const;
491  void setChanged(bool f);
492  void logicalMoveToBottom();
493  void logicalMoveToBottom2();
494  void appendBulk(std::string_view const &str);
495  void clear();
496 protected:
497  void write_(char const *ptr, bool by_keyboard);
498  void write_(QString const &text, bool by_keyboard);
499  void makeColumnPosList(std::vector<int> *out);
500  bool isValidRowIndex(int row_index) const;
501  bool hasSelection() const;
502  void updateSelectionAnchor1(bool auto_scroll);
503  void updateSelectionAnchor2(bool auto_scroll);
504 };
505 
507 
508 };
509 
510 
511 #endif // ABSTRACTCHARACTERBASEDAPPLICATION_H
std::shared_ptr< TextEditorEngine > TextEditorEnginePtr
Definition: AbstractCharacterBasedApplication.h:149
std::function< void(bool, QString const &)> DialogHandler
Definition: AbstractCharacterBasedApplication.h:184
Definition: AbstractCharacterBasedApplication.h:269
FormattedLine2(QString const &text, int atts)
Definition: AbstractCharacterBasedApplication.h:277
Attr
Definition: AbstractCharacterBasedApplication.h:272
@ StyleID
Definition: AbstractCharacterBasedApplication.h:273
@ Selected
Definition: AbstractCharacterBasedApplication.h:274
bool isSelected() const
Definition: AbstractCharacterBasedApplication.h:282
QString text
Definition: AbstractCharacterBasedApplication.h:271
uint32_t atts
Definition: AbstractCharacterBasedApplication.h:276
Definition: AbstractCharacterBasedApplication.h:186
void moveCursorLeft()
Definition: AbstractCharacterBasedApplication.cpp:1524
bool isValidRowIndex(int row_index) const
Definition: AbstractCharacterBasedApplication.cpp:413
std::shared_ptr< TextEditorContext > editor_cx
Definition: AbstractCharacterBasedApplication.h:324
void showFooter(bool f)
Definition: AbstractCharacterBasedApplication.cpp:165
void moveToTop()
Definition: AbstractCharacterBasedApplication.cpp:2166
int cursorCol() const
Definition: AbstractCharacterBasedApplication.cpp:482
void moveToBottom()
Definition: AbstractCharacterBasedApplication.cpp:2216
void invalidateArea(int top_y=0)
Definition: AbstractCharacterBasedApplication.cpp:1379
void setDialogOption(QString const &title, QString const &value, const DialogHandler &handler)
Definition: AbstractCharacterBasedApplication.cpp:1289
int decideColumnScrollPos() const
Definition: AbstractCharacterBasedApplication.cpp:895
void parseLine(int row, std::vector< Char > *vec) const
行の桁位置を求める
Definition: AbstractCharacterBasedApplication.cpp:638
static const int RIGHT_MARGIN
Definition: AbstractCharacterBasedApplication.h:194
void edit_(EditOperation op)
Definition: AbstractCharacterBasedApplication.cpp:1171
bool isChanged() const
Definition: AbstractCharacterBasedApplication.cpp:192
void addNewLineToBottom()
Definition: AbstractCharacterBasedApplication.cpp:1650
bool isSingleLineMode() const
Definition: AbstractCharacterBasedApplication.cpp:870
void openFile(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:779
bool isPaintingSuppressed() const
Definition: AbstractCharacterBasedApplication.cpp:511
void onQuit()
Definition: AbstractCharacterBasedApplication.cpp:2014
State
Definition: AbstractCharacterBasedApplication.h:201
void showHeader(bool f)
Definition: AbstractCharacterBasedApplication.cpp:159
int leftMargin_() const
Definition: AbstractCharacterBasedApplication.cpp:202
std::vector< uint8_t > * line_flags()
Definition: AbstractCharacterBasedApplication.cpp:237
void moveCursorUp()
Definition: AbstractCharacterBasedApplication.cpp:1490
void makeColumnPosList(std::vector< int > *out)
現在行の桁座標リストを作成する
Definition: AbstractCharacterBasedApplication.cpp:1708
LineFlag
Definition: AbstractCharacterBasedApplication.h:263
@ LineChanged
Definition: AbstractCharacterBasedApplication.h:264
State state() const
Definition: AbstractCharacterBasedApplication.cpp:855
void moveCursorRight()
Definition: AbstractCharacterBasedApplication.cpp:1554
void setWriteMode(WriteMode wm)
Definition: AbstractCharacterBasedApplication.cpp:2122
int documentLines() const
Definition: AbstractCharacterBasedApplication.cpp:865
int calcColumnToIndex(int column)
Definition: AbstractCharacterBasedApplication.cpp:1346
void movePageUp()
Definition: AbstractCharacterBasedApplication.cpp:1606
void setTextCodec(std::shared_ptr< MyTextCodec > codec)
Definition: AbstractCharacterBasedApplication.cpp:145
bool isControlModifierPressed() const
Definition: AbstractCharacterBasedApplication.cpp:135
void movePageDown()
Definition: AbstractCharacterBasedApplication.cpp:1624
static int findSyntax(const QList< Document::CharAttr_ > *list, size_t offset)
Definition: AbstractCharacterBasedApplication.cpp:2227
Document * document()
Definition: AbstractCharacterBasedApplication.cpp:860
void setCursorVisible(bool show)
Definition: AbstractCharacterBasedApplication.cpp:177
void setModifierKeys(Qt::KeyboardModifiers const &keymod)
Definition: AbstractCharacterBasedApplication.cpp:123
bool isOverwriteMode() const
Definition: AbstractCharacterBasedApplication.cpp:2132
int scrollBottomLimit2() const
Definition: AbstractCharacterBasedApplication.cpp:1411
void setAutoLayout(bool f)
Definition: AbstractCharacterBasedApplication.cpp:153
void editPaste()
Definition: AbstractCharacterBasedApplication.cpp:2093
WriteMode
Definition: AbstractCharacterBasedApplication.h:196
virtual void moveCursorDown()
Definition: AbstractCharacterBasedApplication.cpp:1501
void doDelete()
Definition: AbstractCharacterBasedApplication.cpp:1206
Private * m
Definition: AbstractCharacterBasedApplication.h:292
int cursorRow() const
Definition: AbstractCharacterBasedApplication.cpp:487
void clearShiftModifier()
Definition: AbstractCharacterBasedApplication.cpp:130
void commitLine(const std::vector< Char > &vec)
Definition: AbstractCharacterBasedApplication.cpp:521
void logicalMoveToBottom2()
Definition: AbstractCharacterBasedApplication.cpp:2199
void setCursorPos(int row, int col)
Definition: AbstractCharacterBasedApplication.h:396
void updateSelectionAnchor1(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:986
QList< FormattedLine2 > formatLine2_(int row_index) const
Definition: AbstractCharacterBasedApplication.cpp:418
TextEditorContext * cx()
Definition: AbstractCharacterBasedApplication.cpp:735
AbstractCharacterBasedApplication()
Definition: AbstractCharacterBasedApplication.cpp:113
const int reference_char_width_
Definition: AbstractCharacterBasedApplication.h:297
void clearParsedLine()
Definition: AbstractCharacterBasedApplication.cpp:475
QString statusLine() const
Definition: AbstractCharacterBasedApplication.cpp:1803
bool isShiftModifierPressed() const
Definition: AbstractCharacterBasedApplication.cpp:140
void setLineMargin(int n)
Definition: AbstractCharacterBasedApplication.cpp:875
void setToggleSelectionAnchorEnabled(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2067
void scrollDown()
Definition: AbstractCharacterBasedApplication.cpp:1479
void setReadOnly(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2072
SelectionAnchor selection_end
Definition: AbstractCharacterBasedApplication.h:296
std::vector< Char > * parseCurrentLine(std::vector< Char > *vec, int increase_hint, bool force)
行のレイアウトを解析
Definition: AbstractCharacterBasedApplication.cpp:567
SelectionAnchor selection_start
Definition: AbstractCharacterBasedApplication.h:295
void setPaintingSuppressed(bool f)
Definition: AbstractCharacterBasedApplication.cpp:516
static int charWidth(uint32_t c)
Definition: AbstractCharacterBasedApplication.cpp:272
int internalParseLine(const QByteArray &parsed_line, int current_col, std::vector< Char > *vec, int increase_hint) const
桁位置を求める
Definition: AbstractCharacterBasedApplication.cpp:598
int char_screen_h() const
Definition: AbstractCharacterBasedApplication.cpp:227
virtual void setCursorRow(int row, bool auto_scroll=true, bool by_mouse=false)
Definition: AbstractCharacterBasedApplication.cpp:1007
bool isLineNumberVisible() const
Definition: AbstractCharacterBasedApplication.cpp:267
void setScreenSize(int w, int h, bool update_layout)
Definition: AbstractCharacterBasedApplication.cpp:502
int currentColX() const
Definition: AbstractCharacterBasedApplication.cpp:453
int scrollBottomLimit() const
Definition: AbstractCharacterBasedApplication.cpp:1406
void restorePos()
Definition: AbstractCharacterBasedApplication.cpp:965
void loadExampleFile()
Definition: TextEditorView.cpp:188
void closeDialog(bool result)
Definition: AbstractCharacterBasedApplication.cpp:1329
void savePos()
Definition: AbstractCharacterBasedApplication.cpp:955
int screenWidth() const
Definition: AbstractCharacterBasedApplication.cpp:492
void setTextEditorEngine(const TextEditorEnginePtr &e)
Definition: AbstractCharacterBasedApplication.cpp:760
void setNormalTextEditorMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2050
void updateCursorPos(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:1736
int screenHeight() const
Definition: AbstractCharacterBasedApplication.cpp:497
int nextTabStop(int x) const
Definition: AbstractCharacterBasedApplication.cpp:1037
void initEditor()
Definition: AbstractCharacterBasedApplication.cpp:261
void moveCursorHome()
Definition: AbstractCharacterBasedApplication.cpp:1430
static const int LEFT_MARGIN
Definition: AbstractCharacterBasedApplication.h:193
void fetchCurrentLine() const
Definition: AbstractCharacterBasedApplication.cpp:468
bool isDialogMode()
Definition: AbstractCharacterBasedApplication.cpp:1284
bool isInsertMode() const
Definition: AbstractCharacterBasedApplication.cpp:2127
QString recentlyUsedPath()
Definition: AbstractCharacterBasedApplication.cpp:212
void write(uint32_t c, bool by_keyboard)
Definition: AbstractCharacterBasedApplication.cpp:2379
void doBackspace()
Definition: AbstractCharacterBasedApplication.cpp:1266
bool isAutoLayout() const
Definition: AbstractCharacterBasedApplication.cpp:1956
virtual void setCursorCol(int col)
Definition: AbstractCharacterBasedApplication.h:386
void moveCursorEnd()
Definition: AbstractCharacterBasedApplication.cpp:1459
void appendNewLine(std::vector< Char > *vec)
Definition: AbstractCharacterBasedApplication.cpp:1659
void moveCursorOut()
Definition: AbstractCharacterBasedApplication.cpp:1425
void onSaveFile()
Definition: AbstractCharacterBasedApplication.cpp:2037
virtual int print(int x, int y, QString const &text, Option const &opt)
Definition: AbstractCharacterBasedApplication.cpp:667
void onOpenFile()
Definition: AbstractCharacterBasedApplication.cpp:2023
void pressLetterWithControl(int c)
Definition: AbstractCharacterBasedApplication.cpp:2348
void editCopy()
Definition: AbstractCharacterBasedApplication.cpp:2110
void logicalMoveToBottom()
Definition: AbstractCharacterBasedApplication.cpp:2182
void printInvertedBar(int x, int y, char const *text, int padchar)
Definition: AbstractCharacterBasedApplication.cpp:1783
EditOperation
Definition: AbstractCharacterBasedApplication.h:366
void writeCR()
Definition: AbstractCharacterBasedApplication.cpp:1416
virtual void layoutEditor()
Definition: AbstractCharacterBasedApplication.cpp:252
virtual void updateVisibility(bool ensure_current_line_visible, bool change_col, bool auto_scroll)=0
void makeBuffer()
Definition: AbstractCharacterBasedApplication.cpp:242
bool isCurrentLineWritable() const
Definition: AbstractCharacterBasedApplication.cpp:644
void retrieveLastText(std::vector< char > *out, int maxlen) const
Definition: AbstractCharacterBasedApplication.cpp:187
void setTerminalMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:2137
void setDialogMode(bool f)
Definition: AbstractCharacterBasedApplication.cpp:1296
void setSelectionAnchor(SelectionAnchor::Enabled enabled, bool update_anchor, bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:2082
void paintLineNumbers(std::function< void(int, QString const &, Document::Line const *)> const &draw)
Definition: AbstractCharacterBasedApplication.cpp:1884
void editSelected(EditOperation op, std::vector< Char > *cutbuffer)
Definition: AbstractCharacterBasedApplication.cpp:1044
void setChanged(bool f)
Definition: AbstractCharacterBasedApplication.cpp:197
bool isBottom() const
Definition: AbstractCharacterBasedApplication.cpp:2156
void scrollToTop()
Definition: AbstractCharacterBasedApplication.cpp:1512
bool hasSelection() const
Definition: AbstractCharacterBasedApplication.cpp:981
void writeNewLine()
Definition: AbstractCharacterBasedApplication.cpp:1667
int calcVisualWidth(Document::Line const &line) const
Definition: AbstractCharacterBasedApplication.cpp:903
int currentCol() const
Definition: AbstractCharacterBasedApplication.cpp:448
void setCurrentCol(int col)
Definition: AbstractCharacterBasedApplication.cpp:463
void deselect()
Definition: AbstractCharacterBasedApplication.cpp:975
virtual ~AbstractCharacterBasedApplication()
Definition: AbstractCharacterBasedApplication.cpp:118
std::vector< Character > * char_screen()
Definition: AbstractCharacterBasedApplication.cpp:217
QByteArray fetchLine(int row) const
現在行を取得
Definition: AbstractCharacterBasedApplication.cpp:433
int printArea(const TextEditorContext *cx, SelectionAnchor const *sel_a=nullptr, SelectionAnchor const *sel_b=nullptr)
Definition: AbstractCharacterBasedApplication.cpp:1810
void ensureCurrentLineVisible()
Definition: AbstractCharacterBasedApplication.cpp:880
void write_(char const *ptr, bool by_keyboard)
Definition: AbstractCharacterBasedApplication.cpp:2533
void appendBulk(std::string_view const &str)
Definition: AbstractCharacterBasedApplication.cpp:2475
void showLineNumber(bool show, int left_margin=LEFT_MARGIN)
Definition: AbstractCharacterBasedApplication.cpp:171
static void insertSyntax(QList< Document::CharAttr_ > *list, size_t offset, const Document::CharAttr_ &a)
Definition: AbstractCharacterBasedApplication.cpp:2246
void setCursorPosByMouse(RowCol pos, QPoint pt)
Definition: AbstractCharacterBasedApplication.h:390
void setCursorCol_(int col, bool auto_scroll=true, bool by_mouse=false)
Definition: AbstractCharacterBasedApplication.cpp:1020
void invalidateAreaBelowTheCurrentLine()
Definition: AbstractCharacterBasedApplication.cpp:1393
void clear()
Definition: AbstractCharacterBasedApplication.cpp:765
bool isReadOnly() const
Definition: AbstractCharacterBasedApplication.cpp:2077
void setCurrentRow(int row)
Definition: AbstractCharacterBasedApplication.cpp:458
SelectionAnchor currentAnchor(SelectionAnchor::Enabled enabled)
Definition: AbstractCharacterBasedApplication.cpp:2058
bool isCursorVisible()
Definition: AbstractCharacterBasedApplication.cpp:182
int editorViewportHeight() const
Definition: AbstractCharacterBasedApplication.cpp:662
void execDialog(QString const &dialog_title, const QString &dialog_value, const DialogHandler &handler)
Definition: AbstractCharacterBasedApplication.cpp:1323
void editCut()
Definition: AbstractCharacterBasedApplication.cpp:2115
bool isTerminalMode() const
Definition: AbstractCharacterBasedApplication.cpp:2151
void setDocument(const QList< Document::Line > *source)
Definition: AbstractCharacterBasedApplication.cpp:770
QList< FormattedLine2 > formatLine_(const Document::Line &line, int tab_span, int anchor_a=-1, int anchor_b=-1) const
Definition: AbstractCharacterBasedApplication.cpp:277
void pressEscape()
Definition: AbstractCharacterBasedApplication.cpp:839
int currentRow() const
Definition: AbstractCharacterBasedApplication.cpp:443
void initEngine(const std::shared_ptr< TextEditorContext > &cx)
Definition: AbstractCharacterBasedApplication.cpp:730
void scrollUp()
Definition: AbstractCharacterBasedApplication.cpp:1469
void pressEnter()
Definition: AbstractCharacterBasedApplication.cpp:828
std::shared_ptr< TextEditorContext > dialog_cx
Definition: AbstractCharacterBasedApplication.h:325
void saveFile(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:818
void clearRect(int x, int y, int w, int h)
Definition: AbstractCharacterBasedApplication.cpp:935
void setRecentlyUsedPath(QString const &path)
Definition: AbstractCharacterBasedApplication.cpp:207
void internalWrite(const ushort *begin, const ushort *end)
Definition: AbstractCharacterBasedApplication.cpp:2278
bool deleteIfSelected()
Definition: AbstractCharacterBasedApplication.cpp:1195
void updateSelectionAnchor2(bool auto_scroll)
Definition: AbstractCharacterBasedApplication.cpp:999
int char_screen_w() const
Definition: AbstractCharacterBasedApplication.cpp:222
int editorViewportWidth() const
Definition: AbstractCharacterBasedApplication.cpp:657
void preparePaintScreen()
Definition: AbstractCharacterBasedApplication.cpp:1961
TextEditorEnginePtr engine() const
Definition: AbstractCharacterBasedApplication.cpp:754
Definition: AbstractCharacterBasedApplication.h:506
Definition: AbstractCharacterBasedApplication.h:47
void retrieveLastText(std::vector< char > *out, int maxlen) const
Definition: AbstractCharacterBasedApplication.cpp:2644
QList< Line > lines
Definition: AbstractCharacterBasedApplication.h:88
Definition: AbstractCharacterBasedApplication.h:15
MyTextCodec()=default
QByteArray fromUnicode(QString const &s) const
Definition: AbstractCharacterBasedApplication.h:26
MyTextCodec(char const *name)
Definition: AbstractCharacterBasedApplication.h:19
QString toUnicode(QByteArray const &ba) const
Definition: AbstractCharacterBasedApplication.h:22
Definition: AbstractCharacterBasedApplication.h:92
TextEditorEngine()
Definition: AbstractCharacterBasedApplication.h:95
Document document
Definition: AbstractCharacterBasedApplication.h:94
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: AbstractCharacterBasedApplication.h:206
bool operator==(CharAttr const &r) const
Definition: AbstractCharacterBasedApplication.h:214
QColor color
Definition: AbstractCharacterBasedApplication.h:209
Index
Definition: AbstractCharacterBasedApplication.h:222
@ Hilite
Definition: AbstractCharacterBasedApplication.h:225
@ Normal
Definition: AbstractCharacterBasedApplication.h:223
@ Invert
Definition: AbstractCharacterBasedApplication.h:224
bool operator!=(CharAttr const &r) const
Definition: AbstractCharacterBasedApplication.h:218
CharAttr(int index=Normal)
Definition: AbstractCharacterBasedApplication.h:210
uint16_t index
Definition: AbstractCharacterBasedApplication.h:207
uint16_t flags
Definition: AbstractCharacterBasedApplication.h:208
Flag
Definition: AbstractCharacterBasedApplication.h:227
@ Underline2
wip
Definition: AbstractCharacterBasedApplication.h:231
@ Selected
Definition: AbstractCharacterBasedApplication.h:228
@ Underline1
Definition: AbstractCharacterBasedApplication.h:230
@ CurrentLine
Definition: AbstractCharacterBasedApplication.h:229
Definition: AbstractCharacterBasedApplication.h:245
uint32_t unicode
Definition: AbstractCharacterBasedApplication.h:248
int left_x
Definition: AbstractCharacterBasedApplication.h:246
Char(uint32_t unicode)
Definition: AbstractCharacterBasedApplication.h:251
CharAttr attr
Definition: AbstractCharacterBasedApplication.h:249
int right_x
Definition: AbstractCharacterBasedApplication.h:247
Definition: AbstractCharacterBasedApplication.h:240
uint16_t c
Definition: AbstractCharacterBasedApplication.h:241
CharAttr a
Definition: AbstractCharacterBasedApplication.h:242
Definition: AbstractCharacterBasedApplication.h:235
QRect clip
Definition: AbstractCharacterBasedApplication.h:237
CharAttr char_attr
Definition: AbstractCharacterBasedApplication.h:236
Definition: AbstractCharacterBasedApplication.cpp:70
Definition: AbstractCharacterBasedApplication.h:49
size_t offset
Definition: AbstractCharacterBasedApplication.h:50
int color
Definition: AbstractCharacterBasedApplication.h:51
Definition: AbstractCharacterBasedApplication.h:53
int line_number
Definition: AbstractCharacterBasedApplication.h:62
Line(QByteArray const &ba)
Definition: AbstractCharacterBasedApplication.h:68
int hunk_number
Definition: AbstractCharacterBasedApplication.h:61
size_t byte_offset
Definition: AbstractCharacterBasedApplication.h:63
bool endsWithNewLine() const
Definition: AbstractCharacterBasedApplication.h:80
Line(std::string const &str, Type type=Normal)
Definition: AbstractCharacterBasedApplication.h:74
QByteArray text
Definition: AbstractCharacterBasedApplication.h:64
Line()=default
Type type
Definition: AbstractCharacterBasedApplication.h:60
Type
Definition: AbstractCharacterBasedApplication.h:54
@ Unknown
Definition: AbstractCharacterBasedApplication.h:55
@ Del
Definition: AbstractCharacterBasedApplication.h:58
@ Normal
Definition: AbstractCharacterBasedApplication.h:56
@ Add
Definition: AbstractCharacterBasedApplication.h:57
Definition: AbstractCharacterBasedApplication.h:174
RowCol(int row=0, int col=0)
Definition: AbstractCharacterBasedApplication.h:177
int col
Definition: AbstractCharacterBasedApplication.h:176
int row
Definition: AbstractCharacterBasedApplication.h:175
Definition: AbstractCharacterBasedApplication.h:101
int col
Definition: AbstractCharacterBasedApplication.h:109
bool operator!=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:127
bool operator<(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:131
Enabled
Definition: AbstractCharacterBasedApplication.h:102
@ True
Definition: AbstractCharacterBasedApplication.h:104
@ False
Definition: AbstractCharacterBasedApplication.h:103
bool operator>=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:143
int row
Definition: AbstractCharacterBasedApplication.h:108
bool operator>(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:135
bool operator<=(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:139
int compare(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:110
Enabled enabled
Definition: AbstractCharacterBasedApplication.h:107
bool operator==(SelectionAnchor const &a) const
Definition: AbstractCharacterBasedApplication.h:123
Definition: AbstractCharacterBasedApplication.h:151
int bottom_line_y
Definition: AbstractCharacterBasedApplication.h:170
int viewport_height
Definition: AbstractCharacterBasedApplication.h:168
int scroll_col_pos
Definition: AbstractCharacterBasedApplication.h:164
int viewport_org_y
Definition: AbstractCharacterBasedApplication.h:166
int saved_col_hint
Definition: AbstractCharacterBasedApplication.h:161
int scroll_row_pos
Definition: AbstractCharacterBasedApplication.h:163
int current_row_pixel_y
Definition: AbstractCharacterBasedApplication.h:158
int viewport_org_x
Definition: AbstractCharacterBasedApplication.h:165
int tab_span
Definition: AbstractCharacterBasedApplication.h:169
int current_col_hint
Definition: AbstractCharacterBasedApplication.h:156
TextEditorEnginePtr engine
Definition: AbstractCharacterBasedApplication.h:171
bool single_line
Definition: AbstractCharacterBasedApplication.h:153
int viewport_width
Definition: AbstractCharacterBasedApplication.h:167
int saved_row
Definition: AbstractCharacterBasedApplication.h:159
int saved_col
Definition: AbstractCharacterBasedApplication.h:160
int current_col_pixel_x
Definition: AbstractCharacterBasedApplication.h:157
int current_char_span
Definition: AbstractCharacterBasedApplication.h:162
QRect cursor_rect
Definition: AbstractCharacterBasedApplication.h:152
int current_row
Definition: AbstractCharacterBasedApplication.h:154
int current_col
Definition: AbstractCharacterBasedApplication.h:155