/* */ package NET.worlds.console; /* */ /* */ import NET.worlds.core.IniFile; /* */ import java.awt.Color; /* */ import java.awt.Component; /* */ import java.awt.Event; /* */ import java.awt.FontMetrics; /* */ import java.awt.Graphics; /* */ import java.awt.Image; /* */ import java.awt.Point; /* */ import java.awt.Rectangle; /* */ import java.awt.TextArea; /* */ 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 ClassicSharedTextArea /* */ extends TextArea /* */ implements SharedTextArea /* */ { /* */ private static final long serialVersionUID = -3315186117230082655L; /* */ private static String sharedText; /* */ private boolean isShared; /* */ private String unsharedText; /* */ private String unaddedText; /* */ private boolean haveFocus; /* */ private PrintWriter logFile; /* */ private String logFileName; /* */ private static final long oneMeg = 1048576L; /* */ private static final long logLengthLimit = 524288L; /* */ /* */ public ClassicSharedTextArea(int rows, int cols, boolean isShared) /* */ { /* 445 */ super("", rows, cols, 1); /* 446 */ this.isShared = isShared; /* 447 */ setEditable(false); /* */ } /* */ /* */ public Component getComponent() { /* 451 */ return this; /* */ } /* */ /* */ /* */ public void finalize() /* */ { /* 457 */ disableLogging(); /* */ } /* */ /* */ public synchronized void validate() /* */ { /* 462 */ super.validate(); /* 463 */ String text = this.isShared ? sharedText : this.unsharedText; /* 464 */ if (text != null) { /* 465 */ replaceRange("", 0, getText().length()); /* 466 */ append(text); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void enableLogging(String fileName, String title, boolean append) /* */ { /* 483 */ if (this.logFile != null) /* */ { /* 485 */ if (this.logFileName.equals(fileName)) { /* 486 */ return; /* */ } /* 488 */ this.logFile.close(); /* */ } /* */ try { /* 491 */ if ((append) && (new File(fileName).exists())) { /* 492 */ truncateIfExceeds(fileName, title, 524288L); /* 493 */ this.logFile = new PrintWriter(new FileWriter(fileName, true)); /* */ } else { /* 495 */ this.logFile = new PrintWriter(new FileWriter(fileName, false)); /* 496 */ obsLogFile.setChanged(true); /* 497 */ this.logFile.println(""); /* 498 */ this.logFile.println(""); /* 499 */ this.logFile.println("" + title + ""); /* 500 */ this.logFile.println(""); /* 501 */ this.logFile.println(""); /* */ } /* 503 */ this.logFileName = fileName; /* 504 */ this.logFile.println("
"); /* 505 */ this.logFile.println("

Conversation of " + /* 506 */ DateFormat.getDateTimeInstance().format(new Date()) + /* 507 */ "

"); /* 508 */ this.logFile.flush(); /* 509 */ obsLogFile.notifyObservers(this); /* */ } catch (IOException ex) { /* 511 */ System.out.println("Log file not opened: " + ex); /* */ } /* */ } /* */ /* */ /* 516 */ private static PublicObservable obsLogFile = new PublicObservable(); /* */ /* */ /* */ /* */ /* */ public static void addLogObserver(Observer o) /* */ { /* 523 */ obsLogFile.addObserver(o); /* */ } /* */ /* */ public static void deleteLogObserver(Observer o) /* */ { /* 528 */ obsLogFile.deleteObserver(o); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ private void truncateIfExceeds(String fileName, String title, long lengthLimit) /* */ { /* 539 */ File f = new File(fileName); /* 540 */ if (f.length() > lengthLimit) { /* 541 */ File tf = new File(fileName + ".temp"); /* */ /* */ try /* */ { /* 545 */ BufferedReader in = new BufferedReader(new FileReader(f)); /* 546 */ PrintWriter out = new PrintWriter(new FileWriter(tf)); /* 547 */ out.println(""); /* 548 */ out.println(""); /* 549 */ out.println("" + title + ""); /* 550 */ out.println(""); /* 551 */ out.println(""); /* 552 */ in.skip(f.length() - lengthLimit / 2L); /* 553 */ String line = in.readLine(); /* 554 */ line = in.readLine(); /* 555 */ while (line != null) { /* 556 */ out.println(line); /* 557 */ line = in.readLine(); /* */ } /* 559 */ in.close(); /* 560 */ out.close(); /* */ /* */ /* 563 */ f.delete(); /* 564 */ f = new File(fileName); /* 565 */ tf.renameTo(f); /* */ } catch (FileNotFoundException ex) { /* 567 */ System.out.println("DuplexPart fatal: " + ex); /* */ } catch (IOException ex) { /* 569 */ System.out.println("DuplexPart: Unable to write, " + ex); /* */ } /* */ } /* */ } /* */ /* */ public synchronized void disableLogging() /* */ { /* 576 */ if (this.logFile != null) { /* 577 */ this.logFile.close(); /* 578 */ this.logFile = null; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public boolean canAddText() /* */ { /* 588 */ if (!this.haveFocus) { /* 589 */ return true; /* */ } /* 591 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 614 */ public static int chatLengthLimit = IniFile.gamma().getIniInt("ChatLengthLimit", 20000); /* */ /* */ /* */ /* */ /* */ /* */ /* */ public synchronized void println(String msg) /* */ { /* 623 */ if ((this.logFile != null) && (msg != null)) { /* 624 */ this.logFile.println(DuplexPart.toHtml(msg) + "
"); /* 625 */ this.logFile.flush(); /* */ } /* */ /* */ /* */ /* */ /* 631 */ if (this.unaddedText == null) { /* 632 */ this.unaddedText = msg; /* 633 */ } else if (msg != null) { /* 634 */ this.unaddedText = (this.unaddedText + "\n" + msg); /* */ } /* 636 */ if ((this.unaddedText == null) || (!canAddText())) { /* 637 */ return; /* */ } /* 639 */ if (getText().length() == 0) { /* 640 */ append(this.unaddedText); /* */ } else /* 642 */ append("\n" + this.unaddedText); /* 643 */ this.unaddedText = null; /* */ /* */ /* 646 */ String text = getText(); /* 647 */ if (text.length() > chatLengthLimit) { /* 648 */ int linePos = text.indexOf('\n', chatLengthLimit / 2 - 80); /* 649 */ if (linePos >= 0) { /* 650 */ text = text.substring(linePos + 1); /* */ /* */ /* 653 */ linePos = text.lastIndexOf('\n'); /* 654 */ if (linePos > 0) { /* 655 */ setText(text.substring(0, linePos)); /* 656 */ append(text.substring(linePos)); /* */ } /* */ } /* */ } /* */ /* 661 */ if (this.isShared) { /* 662 */ sharedText = text; /* */ } else { /* 664 */ this.unsharedText = text; /* */ } /* */ } /* */ /* */ public synchronized void scrollToBottom() { /* 669 */ String text = getText(); /* 670 */ int textlen = text.length(); /* 671 */ select(textlen, textlen); /* */ } /* */ /* */ /* */ /* */ @Deprecated /* */ public boolean handleEvent(Event event) /* */ { /* 679 */ if (event.id == 1004) { /* 680 */ this.haveFocus = true; /* 681 */ } else if (event.id == 1005) { /* 682 */ this.haveFocus = false; /* */ } /* */ /* 685 */ poll(); /* */ /* 687 */ return super.handleEvent(event); /* */ } /* */ /* */ public void poll() /* */ { /* 692 */ if (this.unaddedText != null) { /* 693 */ println(null); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public boolean isFocusTraversable() /* */ { /* 702 */ return false; /* */ } /* */ /* */ public synchronized void paint(Graphics g) /* */ { /* 707 */ String[] fulltext = getText().split("\n"); /* 708 */ Rectangle r = getBounds(); /* 709 */ if ((r.height < 0) || (r.width < 0)) { /* 710 */ return; /* */ } /* */ /* */ /* 714 */ Point offset = new Point(0, 0); /* */ /* */ /* */ /* 718 */ Image offImage = createImage(r.width, r.height); /* 719 */ Graphics offGraphic = offImage.getGraphics(); /* */ /* 721 */ offGraphic.setColor(GammaTextArea.getBackgroundColor()); /* 722 */ offGraphic.fillRect(r.x, r.y, r.width, r.height); /* 723 */ offGraphic.setColor(Color.black); /* */ /* 725 */ offGraphic.setFont(getFont()); /* 726 */ FontMetrics fm = offGraphic.getFontMetrics(getFont()); /* 727 */ int windowY = offset.y; /* 728 */ int curY = fm.getHeight(); /* 729 */ int curLine = 0; /* */ /* 731 */ int mode = -1; /* */ /* 733 */ System.out.println("paint (" + r.x + "," + r.y + "):" + r.height + "," + /* 734 */ r.width + " Offset=" + offset.x + "," + offset.y + " lines=" + /* 735 */ fulltext.length); /* */ /* */ /* */ /* */ /* */ /* */ /* 742 */ System.out.println("curLine=" + curLine + " curY=" + curY); /* 743 */ for (int i = curLine; (i < fulltext.length) && (curY <= windowY + r.height); i++) /* */ { /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 752 */ if (mode != 0) /* */ { /* 754 */ offGraphic.drawString(fulltext[i], offset.x, curY); /* 755 */ curY += fm.getHeight(); /* */ } /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\console\ClassicSharedTextArea.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */