/******************************************************************************
* Copyright (c) 2007, 2008 Edgar Espina.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
*******************************************************************************/
package org.deved.antlride.internal.debug.ui;
import org.deved.antlride.core.model.IGrammar;
import org.deved.antlride.debug.model.AntlrDebugTarget;
import org.deved.antlride.debug.model.event.AntlrDebugTokenEvent;
import org.deved.antlride.debug.model.event.AntlrDebugEvent;
import org.deved.antlride.debug.model.event.AntlrDebugEventKind;
import org.deved.antlride.ui.AntlrUIHelper;
import org.deved.antlride.ui.text.AntlrInputSourceViewer;
import org.deved.antlride.ui.text.AntlrTextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.widgets.Composite;
public class AntlrDebugInputView extends AntlrDebugView {
private AntlrInputSourceViewer fSourceViewer;
public static final String ID = "org.deved.antlride.debug.ui.AntlrDebugInputView";
public AntlrDebugInputView() {
}
@Override
protected void onTerminate(AntlrDebugTarget debugTarget) {
super.onTerminate(debugTarget);
}
public void setSelection(ISelection selection) {
AntlrUIHelper.select(getTextWidget(), (AntlrTextSelection) selection);
}
@Override
protected void onStart(AntlrDebugTarget debugTarget) {
StyledText styledText = getTextWidget();
styledText.setText("");
}
private void scrollText() {
AntlrUIHelper.select(getTextWidget(), getTextWidget().getCharCount());
}
protected StyledText getTextWidget() {
return fSourceViewer.getTextWidget();
}
@Override
protected void onDebugEvents(AntlrDebugEvent[] events) {
processEvents(events);
}
private void processEvents(AntlrDebugEvent[] events) {
StringBuilder buffer = new StringBuilder();
for (AntlrDebugEvent event : events) {
buffer.append(getTextFromEvent(event));
IGrammar grammar = event.getDebugTarget().getGrammar();
fSourceViewer.setGrammar(grammar);
}
StyledText styledText = getTextWidget();
styledText.setText(buffer.toString());
buffer.delete(0, buffer.length());
buffer = null;
scrollText();
}
@Override
protected boolean accept(AntlrDebugEvent e) {
AntlrDebugEventKind kind = e.getEventKind();
switch (kind) {
case CONSUME_HIDDEN_TOKEN:
case CONSUME_TOKEN:
return !isInDecision();
}
return false;
}
private String getTextFromEvent(AntlrDebugEvent e) {
return getTextFromEvent((AntlrDebugTokenEvent) e);
}
private String getTextFromEvent(AntlrDebugTokenEvent e) {
return e.getText();
}
@Override
protected Viewer internalCreateViewer(Composite parent) {
fSourceViewer = new AntlrInputSourceViewer(parent, false);
return fSourceViewer;
}
}