/* */ package NET.worlds.console; /* */ /* */ import NET.worlds.core.IniFile; /* */ import java.awt.AWTEvent; /* */ import java.awt.Component; /* */ import java.awt.event.FocusEvent; /* */ import java.io.BufferedReader; /* */ import java.io.File; /* */ import java.io.FileNotFoundException; /* */ import java.io.FileReader; /* */ import java.io.FileWriter; /* */ import java.io.IOException; /* */ import java.io.PrintStream; /* */ import java.io.PrintWriter; /* */ import java.text.DateFormat; /* */ import java.util.Date; /* */ import java.util.Observer; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ class NewSharedTextArea /* */ extends GammaTextArea /* */ implements SharedTextArea /* */ { /* */ private static final long serialVersionUID = 6732411958099438561L; /* */ private static String sharedText; /* */ private boolean isShared; /* */ private String unsharedText; /* 138 */ private String unaddedText = null; /* */ /* */ /* */ private PrintWriter logFile; /* */ /* */ private String logFileName; /* */ /* */ private static final long oneMeg = 1048576L; /* */ /* */ private static final long logLengthLimit = 524288L; /* */ /* */ /* */ public NewSharedTextArea(int rows, int cols, boolean isShared) /* */ { /* 152 */ super("", rows, cols, 2); /* 153 */ this.isShared = isShared; /* 154 */ setEditable(false); /* */ } /* */ /* */ /* */ public void finalize() /* */ { /* 160 */ disableLogging(); /* */ } /* */ /* */ public Component getComponent() /* */ { /* 165 */ return this; /* */ } /* */ /* */ public synchronized void validate() /* */ { /* 170 */ super.validate(); /* 171 */ String text = this.isShared ? sharedText : this.unsharedText; /* 172 */ if (text != null) /* */ { /* */ /* 175 */ setText(text); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void enableLogging(String fileName, String title, boolean append) /* */ { /* 192 */ if (this.logFile != null) /* */ { /* 194 */ if (this.logFileName.equals(fileName)) { /* 195 */ return; /* */ } /* 197 */ this.logFile.close(); /* */ } /* */ try { /* 200 */ if ((append) && (new File(fileName).exists())) { /* 201 */ truncateIfExceeds(fileName, title, 524288L); /* 202 */ this.logFile = new PrintWriter(new FileWriter(fileName, true)); /* */ } else { /* 204 */ this.logFile = new PrintWriter(new FileWriter(fileName, false)); /* 205 */ obsLogFile.setChanged(true); /* 206 */ this.logFile.println(""); /* 207 */ this.logFile.println(""); /* 208 */ this.logFile.println("" + title + ""); /* 209 */ this.logFile.println(""); /* 210 */ this.logFile.println(""); /* */ } /* 212 */ this.logFileName = fileName; /* 213 */ this.logFile.println("
"); /* 214 */ this.logFile.println("

Conversation of " + /* 215 */ DateFormat.getDateTimeInstance().format(new Date()) + /* 216 */ "

"); /* 217 */ this.logFile.flush(); /* 218 */ obsLogFile.notifyObservers(this); /* */ } catch (IOException ex) { /* 220 */ System.out.println("Log file not opened: " + ex); /* */ } /* */ } /* */ /* */ /* 225 */ private static PublicObservable obsLogFile = new PublicObservable(); /* */ /* */ /* */ /* */ /* */ public static void addLogObserver(Observer o) /* */ { /* 232 */ obsLogFile.addObserver(o); /* */ } /* */ /* */ public static void deleteLogObserver(Observer o) /* */ { /* 237 */ obsLogFile.deleteObserver(o); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ private void truncateIfExceeds(String fileName, String title, long lengthLimit) /* */ { /* 247 */ File f = new File(fileName); /* 248 */ if (f.length() > lengthLimit) { /* 249 */ File tf = new File(fileName + ".temp"); /* */ /* */ try /* */ { /* 253 */ BufferedReader in = new BufferedReader(new FileReader(f)); /* 254 */ PrintWriter out = new PrintWriter(new FileWriter(tf)); /* 255 */ out.println(""); /* 256 */ out.println(""); /* 257 */ out.println("" + title + ""); /* 258 */ out.println(""); /* 259 */ out.println(""); /* 260 */ in.skip(f.length() - lengthLimit / 2L); /* 261 */ String line = in.readLine(); /* 262 */ line = in.readLine(); /* 263 */ while (line != null) { /* 264 */ out.println(line); /* 265 */ line = in.readLine(); /* */ } /* 267 */ in.close(); /* 268 */ out.close(); /* */ /* */ /* 271 */ f.delete(); /* 272 */ f = new File(fileName); /* 273 */ tf.renameTo(f); /* */ } catch (FileNotFoundException ex) { /* 275 */ System.out.println("DuplexPart fatal: " + ex); /* */ } catch (IOException ex) { /* 277 */ System.out.println("DuplexPart: Unable to write, " + ex); /* */ } /* */ } /* */ } /* */ /* */ /* */ public synchronized void disableLogging() /* */ { /* 285 */ if (this.logFile != null) { /* 286 */ this.logFile.close(); /* 287 */ this.logFile = null; /* */ } /* */ } /* */ /* 291 */ private static int autoScrollLimit = IniFile.gamma().getIniInt("AutoScrollLimit", 0); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public boolean canAddText() /* */ { /* 302 */ if (getText().length() < 3) { /* 303 */ return true; /* */ } /* */ /* */ /* 307 */ if ((autoScrollLimit > 0) && (autoScrollLimit < this.unaddedText.length())) { /* 308 */ return true; /* */ } /* 310 */ return isLastLineVisible(); /* */ } /* */ /* 313 */ public static int chatLengthLimit = IniFile.gamma().getIniInt("ChatLengthLimit", 20000); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void println(String msg) /* */ { /* 323 */ if ((this.logFile != null) && (msg != null)) { /* 324 */ this.logFile.println(DuplexPart.toHtml(msg) + "
"); /* 325 */ this.logFile.flush(); /* */ } /* */ /* */ /* */ /* */ /* 331 */ if (this.unaddedText == null) { /* 332 */ this.unaddedText = msg; /* 333 */ } else if (msg != null) { /* 334 */ this.unaddedText = (this.unaddedText + "\n" + msg); /* */ } /* 336 */ if ((this.unaddedText == null) || (!canAddText())) { /* 337 */ return; /* */ } /* 339 */ if (getText().length() == 0) { /* 340 */ append(this.unaddedText); /* */ } else /* 342 */ append("\n" + this.unaddedText); /* 343 */ this.unaddedText = null; /* */ /* */ /* 346 */ String text = getText(); /* 347 */ if (text.length() > chatLengthLimit) { /* 348 */ int linePos = text.indexOf('\n', chatLengthLimit / 2 - 80); /* 349 */ if (linePos >= 0) { /* 350 */ text = text.substring(linePos + 1); /* */ /* */ /* 353 */ linePos = text.lastIndexOf('\n'); /* 354 */ if (linePos > 0) { /* 355 */ setText(text.substring(0, linePos)); /* 356 */ append(text.substring(linePos)); /* */ } /* */ } /* */ } /* 360 */ if (this.isShared) { /* 361 */ sharedText = text; /* */ } else { /* 363 */ this.unsharedText = text; /* */ } /* 365 */ repaint(); /* */ } /* */ /* */ /* */ public synchronized void scrollToBottom() /* */ { /* 371 */ String text = getText(); /* 372 */ setText(""); /* 373 */ append(text); /* 374 */ repaint(); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ protected void processFocusEvent(FocusEvent e) /* */ { /* 384 */ super.processFocusEvent(e); /* */ } /* */ /* */ protected void processEvent(AWTEvent e) /* */ { /* 389 */ poll(); /* */ /* 391 */ super.processEvent(e); /* */ } /* */ /* */ /* */ public synchronized void poll() /* */ { /* 397 */ if (this.unaddedText != null) { /* 398 */ println(null); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public boolean isFocusTraversable() /* */ { /* 407 */ return false; /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\console\NewSharedTextArea.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */