package rene.viewer; import java.io.*; import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; //import rene.list.*; //import rene.gui.*; class ClipboardCopy extends Thread { String S; ClipboardOwner C; Canvas Cv; public ClipboardCopy (ClipboardOwner c, Canvas cv, String s) { S=s; C=c; Cv=cv; start(); } public void run () { Clipboard clip=Cv.getToolkit().getSystemClipboard(); StringSelection cont=new StringSelection(S); clip.setContents(cont,C); } } public class TextDisplay extends Canvas implements ClipboardOwner { ListClass L; Font F=null; FontMetrics FM; Viewer V; int Leading,Height,Ascent,Descent; int LineCount,TopLineCount; int PageSize; ListElement TopLine; Image I; Graphics IG; int W,H; public int Tabsize=4; public int Offset; boolean LineFinished=true; int Widths[],HW[]; long LastScrollTime; public TextDisplay (Viewer v) { L=new ListClass(); F=null; V=v; LineCount=0; TopLineCount=0; TopLine=null; I=null; W=H=0; PageSize=10; HW=new int[1024]; addKeyListener(v); } void init (Font f) { F=f; FM=getFontMetrics(F); Leading=FM.getLeading(); Height=FM.getHeight(); Ascent=FM.getAscent(); Descent=FM.getDescent(); Widths=FM.getWidths(); } int [] getwidth (char a[]) { try { for (int i=0; i 10000) showlast(); repaint(); V.setVerticalScrollbar(); } public void setText (String s) { TopLine=null; TopLineCount=0; LineCount=0; L=new ListClass(); if (!s.equals("")) append(s,Color.black); repaint(); } public synchronized void appendlast (String s, Color c) { if (LineFinished || L.last()==null) { L.append(new ListElement(new Line(s,this,c))); LineCount++; if (LineCount==1) TopLine=L.first(); } else { ((Line)L.last().content()).append(s); } } public void showlast () { ListElement e=L.last(); if (e==null) return; TopLineCount=LineCount; for (int i=0; i0) return TopLineCount*1000/LineCount; else return 0; } public int setVertical (int v) { if (TopLine==null) return 0; int NewTop=LineCount*v/1000; if (NewTop>TopLineCount) { for (int i=TopLineCount; iNewTop; i--) { if (TopLine.previous()==null) break; TopLine=TopLine.previous(); TopLineCount--; } repaint(); } LastScrollTime=System.currentTimeMillis(); return v; } public void verticalUp () { if (TopLine==null) return; if (TopLine.next()==null) return; TopLine=TopLine.next(); TopLineCount++; repaint(); LastScrollTime=System.currentTimeMillis(); } public void verticalDown () { if (TopLine==null) return; if (TopLine.previous()==null) return; TopLine=TopLine.previous(); TopLineCount--; repaint(); LastScrollTime=System.currentTimeMillis(); } public void verticalPageUp () { if (TopLine==null) return; for (int i=0; i