more TEditor stubs
[nikiroo-utils.git] / src / jexer / teditor / Line.java
1 /*
2 * Jexer - Java Text User Interface
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (C) 2017 Kevin Lamonte
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
27 * @version 1
28 */
29 package jexer.teditor;
30
31 import java.util.ArrayList;
32 import java.util.List;
33
34 /**
35 * A Line represents a single line of text on the screen, as a collection of
36 * words.
37 */
38 public class Line {
39
40 /**
41 * The list of words.
42 */
43 private ArrayList<Word> words = new ArrayList<Word>();
44
45 /**
46 * The current cursor position on this line.
47 */
48 private int cursorX;
49
50 /**
51 * The current word that the cursor position is in.
52 */
53 private Word currentWord;
54
55 /**
56 * We use getDisplayLength() a lot, so cache the value.
57 */
58 private int displayLength = -1;
59
60 /**
61 * Get a (shallow) copy of the list of words.
62 *
63 * @return the list of words
64 */
65 public List<Word> getWords() {
66 return new ArrayList<Word>(words);
67 }
68
69 /**
70 * Get the on-screen display length.
71 *
72 * @return the number of cells needed to display this line
73 */
74 public int getDisplayLength() {
75 if (displayLength != -1) {
76 return displayLength;
77 }
78 int n = 0;
79 for (Word word: words) {
80 n += word.getDisplayLength();
81 }
82 displayLength = n;
83 return displayLength;
84 }
85
86 /**
87 * Construct a new Line from an existing text string.
88 *
89 * @param str the text string
90 */
91 public Line(final String str) {
92 currentWord = new Word();
93 words.add(currentWord);
94 for (int i = 0; i < str.length(); i++) {
95 char ch = str.charAt(i);
96 Word newWord = currentWord.addChar(ch);
97 if (newWord != currentWord) {
98 words.add(newWord);
99 currentWord = newWord;
100 }
101 }
102 }
103
104 /**
105 * Decrement the cursor by one. If at the first column, do nothing.
106 */
107 public void left() {
108 if (cursorX == 0) {
109 return;
110 }
111 // TODO
112 }
113
114 /**
115 * Increment the cursor by one. If at the last column, do nothing.
116 */
117 public void right() {
118 if (cursorX == getDisplayLength() - 1) {
119 return;
120 }
121 // TODO
122 }
123
124 /**
125 * Go to the first column of this line.
126 */
127 public void home() {
128 // TODO
129 }
130
131 /**
132 * Go to the last column of this line.
133 */
134 public void end() {
135 // TODO
136 }
137
138 /**
139 * Delete the character under the cursor.
140 */
141 public void del() {
142 // TODO
143 }
144
145 /**
146 * Delete the character immediately preceeding the cursor.
147 */
148 public void backspace() {
149 // TODO
150 }
151
152 /**
153 * Replace or insert a character at the cursor, depending on overwrite
154 * flag.
155 *
156 * @param ch the character to replace or insert
157 */
158 public void addChar(final char ch) {
159 // TODO
160 }
161
162 }