Fix for #359411, courtesy of Hannes Wallnoefer

This commit is contained in:
szegedia%freemail.hu 2006-12-17 14:42:39 +00:00
Родитель 4e47ae6eee
Коммит 96ccfe5ac5
2 изменённых файлов: 67 добавлений и 46 удалений

Просмотреть файл

@ -227,7 +227,7 @@ public class Main implements ContextListener {
/**
* Main entry point. Creates a debugger attached to a Rhino
* {@link org.mozilla.tools.shell.Main} shell session.
* {@link org.mozilla.javascript.tools.shell.Main} shell session.
*/
public static void main(String[] args) {
Main main = new Main("Rhino JavaScript Debugger");

Просмотреть файл

@ -24,8 +24,9 @@
* Contributor(s):
* Igor Bukanov
* Matt Gould
* Christopher Oliver
* Cameron McCormack
* Christopher Oliver
* Hannes Wallnoefer
*
* Alternatively, the contents of this file may be used under the terms of
* the GNU General Public License Version 2 or later (the "GPL"), in which
@ -437,21 +438,54 @@ public class SwingGui extends JFrame implements GuiCallback {
console.show();
}
} else {
showFileWindow(sourceName, -1);
int lineNumber = frame.getLineNumber();
FileWindow w = getFileWindow(sourceName);
if (w != null) {
setFilePosition(w, lineNumber);
} else {
Dim.SourceInfo si = frame.sourceInfo();
createFileWindow(si, lineNumber);
}
}
}
/**
* Shows a {@link FileWindow} for the given source, creating it
* if it doesn't exist yet. if <code>lineNumber</code> is greater
* than -1, it indicates the line number to select and display.
* @param sourceUrl the source URL
* @param lineNumber the line number to select, or -1
*/
protected void showFileWindow(String sourceUrl, int lineNumber) {
FileWindow w = getFileWindow(sourceUrl);
if (w == null) {
Dim.SourceInfo si = dim.sourceInfo(sourceUrl);
createFileWindow(si, -1);
w = getFileWindow(sourceUrl);
}
if (lineNumber > -1) {
int start = w.getPosition(lineNumber-1);
int end = w.getPosition(lineNumber)-1;
w.textArea.select(start);
w.textArea.setCaretPosition(start);
w.textArea.moveCaretPosition(end);
}
try {
if (w.isIcon()) {
w.setIcon(false);
}
w.setVisible(true);
w.moveToFront();
w.setSelected(true);
requestFocus();
w.requestFocus();
w.textArea.requestFocus();
} catch (Exception exc) {
}
}
/**
* Creates and shows a new {@link FileWindow} for the given source.
*/
void createFileWindow(Dim.SourceInfo sourceInfo, int line) {
protected void createFileWindow(Dim.SourceInfo sourceInfo, int line) {
boolean activate = true;
String url = sourceInfo.url();
@ -488,6 +522,25 @@ public class SwingGui extends JFrame implements GuiCallback {
}
}
/**
* Update the source text for <code>sourceInfo</code>. This returns true
* if a {@link FileWindow} for the given source exists and could be updated.
* Otherwise, this does nothing and returns false.
* @param sourceInfo the source info
* @return true if a {@link FileWindow} for the given source exists
* and could be updated, false otherwise.
*/
protected boolean updateFileWindow(Dim.SourceInfo sourceInfo) {
String fileName = sourceInfo.url();
FileWindow w = getFileWindow(fileName);
if (w != null) {
w.updateText(sourceInfo);
w.show();
return true;
}
return false;
}
/**
* Moves the current position in the given {@link FileWindow} to the
* given line.
@ -1551,20 +1604,15 @@ class MoreWindows extends JDialog implements ActionListener {
private JList list;
/**
* Table of file windows.
* Our parent frame.
*/
private Hashtable fileWindows;
private SwingGui swingGui;
/**
* The "Select" button.
*/
private JButton setButton;
/**
* The "Refresh" button.
*/
private JButton refreshButton;
/**
* The "Cancel" button.
*/
@ -1573,10 +1621,10 @@ class MoreWindows extends JDialog implements ActionListener {
/**
* Creates a new MoreWindows.
*/
MoreWindows(JFrame frame, Hashtable fileWindows, String title,
MoreWindows(SwingGui frame, Hashtable fileWindows, String title,
String labelText) {
super(frame, title, true);
this.fileWindows = fileWindows;
this.swingGui = frame;
//buttons
cancelButton = new JButton("Cancel");
setButton = new JButton("Select");
@ -1676,14 +1724,7 @@ class MoreWindows extends JDialog implements ActionListener {
} else if (cmd.equals("Select")) {
value = (String)list.getSelectedValue();
setVisible(false);
JInternalFrame w = (JInternalFrame)fileWindows.get(value);
if (w != null) {
try {
w.show();
w.setSelected(true);
} catch (Exception exc) {
}
}
swingGui.showFileWindow(value, -1);
}
}
@ -1853,24 +1894,7 @@ class FindFunction extends JDialog implements ActionListener {
Dim.SourceInfo si = item.sourceInfo();
String url = si.url();
int lineNumber = item.firstLine();
FileWindow w = debugGui.getFileWindow(url);
if (w == null) {
debugGui.createFileWindow(si, lineNumber);
w = debugGui.getFileWindow(url);
w.setPosition(-1);
}
int start = w.getPosition(lineNumber-1);
int end = w.getPosition(lineNumber)-1;
w.textArea.select(start);
w.textArea.setCaretPosition(start);
w.textArea.moveCaretPosition(end);
try {
w.show();
debugGui.requestFocus();
w.requestFocus();
w.textArea.requestFocus();
} catch (Exception exc) {
}
debugGui.showFileWindow(url, lineNumber);
}
}
}
@ -3541,11 +3565,8 @@ class RunProxy implements Runnable {
case UPDATE_SOURCE_TEXT:
{
String fileName = sourceInfo.url();
FileWindow w = debugGui.getFileWindow(fileName);
if (w != null) {
w.updateText(sourceInfo);
w.show();
} else if (!fileName.equals("<stdin>")) {
if (!debugGui.updateFileWindow(sourceInfo) &&
!fileName.equals("<stdin>")) {
debugGui.createFileWindow(sourceInfo, -1);
}
}