package org.jboss.tools.aesh.example;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.jboss.aesh.terminal.POSIXTerminal;
import org.jboss.aesh.terminal.TerminalSize;
public class ExampleTerminal extends POSIXTerminal {
private ITextViewer textViewer;
private TerminalSize terminalSize;
public ExampleTerminal(ITextViewer textViewer) {
this.textViewer = textViewer;
initControlListener();
updateTerminalSize();
}
private void initControlListener() {
textViewer.getTextWidget().addControlListener(new ControlAdapter() {
@Override
public void controlResized(ControlEvent e) {
updateTerminalSize();
}
});
}
private void updateTerminalSize() {
StyledText textWidget = textViewer.getTextWidget();
GC gc = new GC(textWidget);
gc.setFont(textWidget.getFont());
Point p = gc.stringExtent("w");
gc.dispose();
Point size = textWidget.getSize();
terminalSize =
new TerminalSize(
Math.max(1, size.y / p.y),
Math.max(1, size.x / p.x));
}
@Override
public TerminalSize getSize() {
return terminalSize;
}
}