more TEditor stubs
[fanfix.git] / src / jexer / teditor / Line.java
CommitLineData
cd92b0ba
KL
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 */
29package jexer.teditor;
30
31import java.util.ArrayList;
32import java.util.List;
33
cd92b0ba 34/**
12b55d76
KL
35 * A Line represents a single line of text on the screen, as a collection of
36 * words.
cd92b0ba 37 */
12b55d76 38public class Line {
cd92b0ba
KL
39
40 /**
12b55d76 41 * The list of words.
cd92b0ba 42 */
12b55d76 43 private ArrayList<Word> words = new ArrayList<Word>();
cd92b0ba
KL
44
45 /**
12b55d76 46 * The current cursor position on this line.
cd92b0ba 47 */
12b55d76 48 private int cursorX;
cd92b0ba
KL
49
50 /**
12b55d76 51 * The current word that the cursor position is in.
cd92b0ba 52 */
12b55d76 53 private Word currentWord;
cd92b0ba
KL
54
55 /**
12b55d76 56 * We use getDisplayLength() a lot, so cache the value.
cd92b0ba 57 */
12b55d76 58 private int displayLength = -1;
cd92b0ba
KL
59
60 /**
12b55d76 61 * Get a (shallow) copy of the list of words.
cd92b0ba 62 *
12b55d76 63 * @return the list of words
cd92b0ba 64 */
12b55d76
KL
65 public List<Word> getWords() {
66 return new ArrayList<Word>(words);
cd92b0ba
KL
67 }
68
69 /**
12b55d76 70 * Get the on-screen display length.
cd92b0ba 71 *
12b55d76 72 * @return the number of cells needed to display this line
cd92b0ba 73 */
12b55d76
KL
74 public int getDisplayLength() {
75 if (displayLength != -1) {
76 return displayLength;
cd92b0ba 77 }
12b55d76
KL
78 int n = 0;
79 for (Word word: words) {
80 n += word.getDisplayLength();
cd92b0ba 81 }
12b55d76
KL
82 displayLength = n;
83 return displayLength;
cd92b0ba
KL
84 }
85
86 /**
12b55d76 87 * Construct a new Line from an existing text string.
cd92b0ba 88 *
12b55d76
KL
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 }
cd92b0ba 101 }
cd92b0ba
KL
102 }
103
104 /**
12b55d76 105 * Decrement the cursor by one. If at the first column, do nothing.
cd92b0ba 106 */
12b55d76
KL
107 public void left() {
108 if (cursorX == 0) {
109 return;
cd92b0ba 110 }
12b55d76 111 // TODO
cd92b0ba
KL
112 }
113
114 /**
12b55d76 115 * Increment the cursor by one. If at the last column, do nothing.
cd92b0ba 116 */
12b55d76
KL
117 public void right() {
118 if (cursorX == getDisplayLength() - 1) {
119 return;
cd92b0ba 120 }
12b55d76 121 // TODO
cd92b0ba
KL
122 }
123
124 /**
12b55d76 125 * Go to the first column of this line.
cd92b0ba 126 */
12b55d76
KL
127 public void home() {
128 // TODO
cd92b0ba
KL
129 }
130
131 /**
12b55d76 132 * Go to the last column of this line.
cd92b0ba 133 */
12b55d76
KL
134 public void end() {
135 // TODO
cd92b0ba
KL
136 }
137
138 /**
12b55d76 139 * Delete the character under the cursor.
cd92b0ba 140 */
12b55d76
KL
141 public void del() {
142 // TODO
cd92b0ba
KL
143 }
144
145 /**
12b55d76 146 * Delete the character immediately preceeding the cursor.
cd92b0ba 147 */
12b55d76
KL
148 public void backspace() {
149 // TODO
cd92b0ba
KL
150 }
151
152 /**
12b55d76
KL
153 * Replace or insert a character at the cursor, depending on overwrite
154 * flag.
cd92b0ba 155 *
12b55d76 156 * @param ch the character to replace or insert
cd92b0ba 157 */
12b55d76
KL
158 public void addChar(final char ch) {
159 // TODO
cd92b0ba
KL
160 }
161
162}