package org.eclipse.debug.internal.ui; | |
/* | |
* (c) Copyright IBM Corp. 2000, 2001. | |
* All Rights Reserved. | |
*/ | |
import java.util.ResourceBundle; | |
import org.eclipse.jface.dialogs.IInputValidator; | |
import org.eclipse.jface.dialogs.InputDialog; | |
import org.eclipse.jface.text.BadLocationException; | |
import org.eclipse.jface.text.IDocument; | |
import org.eclipse.swt.graphics.Point; | |
import org.eclipse.swt.widgets.Shell; | |
public class ConsoleGotoLineAction extends ConsoleViewerAction { | |
/** | |
* Validates whether the text found in the input field of the | |
* dialog forms a valid line number, i.e. one to which can be | |
* jumped. | |
*/ | |
class NumberValidator implements IInputValidator { | |
public String isValid(String input) { | |
try { | |
int i= Integer.parseInt(input); | |
if (i <= 0 || fLastLine < i) | |
return fBundle.getString(fPrefix + "dialog.invalid_range"); | |
} catch (NumberFormatException x) { | |
return fBundle.getString(fPrefix + "dialog.invalid_input"); | |
} | |
return ""; | |
} | |
}; | |
protected int fLastLine; | |
protected ResourceBundle fBundle; | |
protected String fPrefix; | |
protected ConsoleViewer fConsoleViewer; | |
/** | |
* Constructs a goto line action for the console using the provided resource bundle | |
*/ | |
public ConsoleGotoLineAction(ResourceBundle bundle, String prefix, ConsoleViewer viewer) { | |
super(bundle, prefix, viewer, -1); | |
fBundle= bundle; | |
fPrefix= prefix; | |
fConsoleViewer= viewer; | |
} | |
/** | |
* @see TextEditorAction | |
*/ | |
public void update() { | |
} | |
/** | |
* Jumps to the line. | |
*/ | |
protected void gotoLine(int line) { | |
IDocument document= fConsoleViewer.getDocument(); | |
try { | |
int start= document.getLineOffset(line); | |
int length= document.getLineLength(line); | |
fConsoleViewer.getTextWidget().setSelection(start, start + length); | |
fConsoleViewer.revealRange(start, length); | |
} catch (BadLocationException x) { | |
// ignore | |
} | |
} | |
/** | |
* @see Action | |
*/ | |
public void run() { | |
try { | |
Point selection= fConsoleViewer.getTextWidget().getSelection(); | |
IDocument document= fConsoleViewer.getDocument(); | |
fLastLine= document.getLineOfOffset(document.getLength()) + 1; | |
int startLine= selection == null ? 1 : fConsoleViewer.getTextWidget().getLineAtOffset(selection.x) + 1; | |
String title= fBundle.getString(fPrefix + "dialog.title"); | |
String message= fBundle.getString(fPrefix + "dialog.message"); | |
String value= Integer.toString(startLine); | |
Shell activeShell= DebugUIPlugin.getActiveWorkbenchWindow().getShell(); | |
InputDialog d= new InputDialog(activeShell, title, message, value, new NumberValidator()); | |
d.open(); | |
try { | |
int line= Integer.parseInt(d.getValue()); | |
gotoLine(line - 1); | |
} catch (NumberFormatException x) { | |
} | |
} catch (BadLocationException x) { | |
return; | |
} | |
} | |
} | |