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