From: <ls...@us...> - 2006-12-10 19:10:18
|
Revision: 2886 http://jnode.svn.sourceforge.net/jnode/?rev=2886&view=rev Author: lsantha Date: 2006-12-10 11:10:11 -0800 (Sun, 10 Dec 2006) Log Message: ----------- Added tab handling and status line. Modified Paths: -------------- trunk/distr/src/apps/org/jnode/apps/editor/TextEditor.java Modified: trunk/distr/src/apps/org/jnode/apps/editor/TextEditor.java =================================================================== --- trunk/distr/src/apps/org/jnode/apps/editor/TextEditor.java 2006-12-10 17:40:01 UTC (rev 2885) +++ trunk/distr/src/apps/org/jnode/apps/editor/TextEditor.java 2006-12-10 19:10:11 UTC (rev 2886) @@ -45,16 +45,16 @@ te.loadFile(f); } - public TextEditor(TextConsole first) { - this.console = first; - first.addKeyboardListener(this); - console.setCursorVisible(true); + public TextEditor(TextConsole console) { + this.console = console; + console.addKeyboardListener(this); + this.console.setCursorVisible(true); cx = 0; cy = 0; - sh = first.getHeight(); - sw = first.getWidth(); + sh = console.getHeight(); + sw = console.getWidth(); cxm = sw - 1; - cym = sh - 1; + cym = sh - 1 - 1; fx = 0; fy = 0; ls = new ArrayList<StringBuilder>(); @@ -107,19 +107,61 @@ }); } + private void updateScreen(){ - char[] data = new char[sw * sh]; + char[] data = new char[sw * (cym + 1 + 1)]; int k = 0; StringBuilder e = new StringBuilder(); - for(int i = 0; i < sh; i ++){ + List<StringBuilder> rl = new ArrayList<StringBuilder>(); + for(int i = 0; i < cym + 1; i ++){ StringBuilder l = (fy + i < ls.size()) ? ls.get(fy + i) : e; + StringBuilder sb = new StringBuilder(); + for(int j = 0; j < l.length(); j++){ + char c = l.charAt(j); + if(c == '\t'){ + sb.append(' '); + sb.append(' '); + sb.append(' '); + sb.append(' '); + } else if(c == '\n'){ + sb.append(' '); + } else{ + sb.append(c); + } + } + rl.add(sb); + } + + int tab_count = 0; + if(ls.size() > 0){ + CharSequence l = ls.get(oy()).subSequence(0, fx + cx); + for(int i = 0; i < l.length(); i ++ ){ + if(l.charAt(i) == '\t') tab_count ++; + } + } + + int tx = fx + cx + 3 * tab_count; + int cx2 = cx + 3 * tab_count; + int fx2 = fx; + if(tx >= sw){ + cx2 = sw -1; + fx2 = tx - cx2; + } + + for(int i = 0; i < cym + 1; i ++){ + StringBuilder l = rl.get(i); for(int j = 0; j < sw; j++){ - char c = (fx + j < l.length()) ? l.charAt(fx + j) : ' '; - data[k++] = (c == '\n' || c == '\t') ? ' ' : c; + char c = (fx2 + j < l.length()) ? l.charAt(fx2 + j) : ' '; + data[k++] = c; } } + + e.append(file.getName()).append(" [").append(fx2 + cx2 + 1).append(",").append(oy() + 1).append("]"); + for(int j = 0; j < sw; j++){ + data[k++] = (j < e.length()) ? e.charAt(j) : ' '; + } console.setChar(0, 0, data, 7); - console.setCursor(cx, cy); + console.setCursor(cx2, cy); } public void keyPressed(KeyboardEvent e) { @@ -131,8 +173,8 @@ case KeyEvent.VK_LEFT: {if(fx > 0) fx --; break;} case KeyEvent.VK_RIGHT: {if(fx < mx()) fx ++; break;} case KeyEvent.VK_HOME: {cx = fx = cy = fy = 0; break;} - case KeyEvent.VK_END: { if(my() < cym) cy = my(); else {cy = cym; fy = my() - cy;}; end(); break;} - case KeyEvent.VK_Y: { ls.remove(oy()); if(oy() > my()) cy --; break;} + case KeyEvent.VK_END: { if(my() < cym) cy = my(); else {cy = cym; fy = my() - cy;} end(); break;} + case KeyEvent.VK_Y: { if(oy() >= 0 && oy() <= my()) {ls.remove(oy()); if(cy > 0) cy --; else if(fy > 0) fy --;} break;} case KeyEvent.VK_S: { saveFile(); break;} case KeyEvent.VK_Q: { console.getManager().unregisterConsole(console); break;} @@ -170,6 +212,11 @@ cx = l2.length() - 1; l2.deleteCharAt(l2.length() - 1).append(ls.remove(oy())); cy --; + } else if(fy > 0){ + StringBuilder l2 = ls.get(oy() - 1); + cx = l2.length() - 1; + l2.deleteCharAt(l2.length() - 1).append(ls.remove(oy())); + fy --; } } else if(cx > 0){ cx --; @@ -201,6 +248,7 @@ } if(oy() > my()){ fy -= oy() - my(); + fy = fy < 0 ? 0 : fy ; } if(ox() > mx()) { if(mx() > cxm){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |