001 package escjava.gui;
002
003 import javax.swing.*;
004
005 public class WindowThread extends Thread {
006
007 static TaskQueue windowTasks = new TaskQueue();
008
009 public void run() {
010 while (true) {
011 Object o = windowTasks.getTask();
012 String out = "";
013 if (o instanceof GUI.EscTreeValue) {
014 ((GUI.EscTreeValue)o).showOutput(true);
015 } else if (o instanceof HtmlTask) {
016 HtmlTask ht = (HtmlTask)o;
017 EscHtml jf = EscHtml.make(ht.title,ht.filename,
018 GUI.gui.escframe,500,0,600,400);
019 jf.showit();
020 } else if (o instanceof String) {
021 // Pop up an editor window
022 try {
023 // Here we parse the various kinds of error messages
024 // that Esc/java2 produces to find a file name and
025 // line number
026 final String aheader =
027 "Associated declaration is \"";
028 final String linetext = "\", line ";
029 final String coltext = ", col ";
030 String s = (String)o;
031 String name;
032 int lin;
033 if (s.startsWith(aheader)) {
034 int i = s.indexOf('\"',aheader.length());
035 name = s.substring(aheader.length(),i);
036 i += linetext.length();
037 int j = s.indexOf(',',i);
038 try {
039 lin = Integer.parseInt(s.substring(i,j));
040 } catch (NumberFormatException e) {
041 lin = 0;
042 }
043 } else {
044 final String jarending = ".jar:";
045 int i = s.indexOf(jarending);
046 i = i == -1 ? 0 : i + jarending.length();
047 i = s.indexOf(':',i);
048 if (i == -1) continue;
049 name = s.substring(0,i);
050 i++;
051 int ii = s.indexOf(':',i);
052 if (ii == -1) continue;
053 try {
054 lin = Integer.parseInt(s.substring(i,ii));
055 } catch (NumberFormatException e) {
056 lin = 0;
057 }
058 }
059 if (name.endsWith(".class")) {
060 int result =
061 JOptionPane.showConfirmDialog(GUI.gui.escframe,
062 "The referenced location is in a class file, "
063 + " so there is probably no java or specification"
064 + Project.eol
065 + " file for this class. Would you like to "
066 + " create a skeleton specification file and edit it?" + Project.eol + "[[[ Sorry - not yet implemented ]]]",
067 "Generate skeleton?",
068 JOptionPane.YES_NO_OPTION);
069 if (result == JOptionPane.NO_OPTION) continue;
070 continue;
071
072 }
073 EscEditor.make(name,lin,null,null).showit();
074 } catch (Exception e) {
075 JOptionPane.showMessageDialog(GUI.gui.escframe,
076 "Failed to open editor window: " + Project.eol +
077 out +
078 o + Project.eol + e);
079 }
080 }
081 }
082 }
083
084 static class HtmlTask {
085 String filename;
086 String title;
087 public HtmlTask(String title, String filename) {
088 this.title = title;
089 this.filename = filename;
090 }
091 }
092
093 }
094