Line.java
2.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package pad.prac1;
import java.util.Observable;
public class Line extends Observable
{
private String line;
private int cursorPosition;
private int writeMode;
private Console console;
public Line(Console cons)
{
console = cons;
line = "";
writeMode = EditableBufferedReader.INSERT;
cursorPosition = 1;
addObserver(console);
}
public int length()
{
return line.length();
}
public int getCursorPosition()
{
return cursorPosition;
}
public void toggleMode()
{
writeMode = 1 - writeMode;
}
private void sendCommand(int type, int value)
{
setChanged();
notifyObservers(new Command(type,value));
}
private void sendCommand(int type)
{
setChanged();
notifyObservers(new Command(type));
}
private void insertCharAt(char c, int pos)
{
if(pos == 0)
{
String s = "";
s += c;
line = s + line;
}
else if(pos == line.length())
{
line += c;
}
else
{
String s = "";
s += c;
line = line.substring(0, pos).concat(s).concat(line.substring(pos,line.length()));
}
}
private void removeCharAt(int pos)
{
if(pos >= 0)
{
if(pos == 0)
{
line = line.substring(1);
}
else if(pos == line.length()-1)
{
line = line.substring(0, line.length()-1);
}
else
{
line = line.substring(0, pos).concat(line.substring(pos+1,line.length()));
}
}
}
public void addChar(char c)
{
if(c == EditableBufferedReader.LINE_FEED)
{
sendCommand(Command.INSERT_CHAR,EditableBufferedReader.RETURN_KEY);
}
switch(writeMode)
{
case EditableBufferedReader.INSERT:
sendCommand(Command.INSERT_CHAR,(int)c);
insertCharAt(c, cursorPosition-1);
cursorPosition++;
break;
case EditableBufferedReader.OVERWRITE:
if(cursorPosition != line.length()+1)
{
removeCharAt(cursorPosition-1);
}
sendCommand(Command.INSERT_CHAR,(int)c);
insertCharAt(c, cursorPosition-1);
cursorPosition++;
break;
}
}
public void delChar(int mode)
{
switch(mode)
{
case EditableBufferedReader.DEL_BACKWARD:
if(cursorPosition != 1)
{
sendCommand(Command.MOVE_CURSOR,cursorPosition-1);
sendCommand(Command.DELETE_CHAR);
removeCharAt(cursorPosition-2);
cursorPosition--;
}
break;
case EditableBufferedReader.DEL_FORWARD:
if(cursorPosition != (line.length()+1))
{
removeCharAt(cursorPosition-1);
sendCommand(Command.DELETE_CHAR,1);
}
break;
}
}
public void setCursorTo(int pos)
{
if((pos <= line.length()+1) && (pos >= 1) && (pos != cursorPosition))
{
sendCommand(Command.MOVE_CURSOR,pos);
cursorPosition = pos;
}
}
public String toString()
{
return line;
}
}