package com.arc.embeddedcdt.gui;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import com.arc.embeddedcdt.common.ArcGdbServer;
public class FirstlaunchDialog extends Dialog {
public static String[] value = new String[2];;
public Combo fFirstlaunchPrgmArgumentsComCom;// this variable is for getting user's
// input COM port
protected Label fPrgmArgumentsLabelCom;
/**
* @param parent
*/
public FirstlaunchDialog(Shell parent) {
super(parent);
}
/**
* @param parent
* @param style
*/
public FirstlaunchDialog(Shell parent, int style) {
super(parent, style);
}
/**
* Makes the dialog visible.
*
* @return
*/
public String[] open() {
Shell parent = getParent();
final Shell shell = new Shell(parent, SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL);
shell.setLocation(
Display.getCurrent().getClientArea().width / 2 - shell.getShell().getSize().x / 2,
Display.getCurrent().getClientArea().height / 2 - shell.getSize().y / 2);
shell.setText("Before Debug as Configuration");
shell.setLayout(new GridLayout(2, true));
Label label = new Label(shell, SWT.NULL);
label.setText("ARC GDB Server:");
Combo fPrgmArgumentsComboInit = new Combo(shell, SWT.SINGLE | SWT.BORDER);
fPrgmArgumentsComboInit.add(ArcGdbServer.JTAG_OPENOCD.toString());
fPrgmArgumentsComboInit.add(ArcGdbServer.JTAG_ASHLING.toString());
fPrgmArgumentsComboInit.add(ArcGdbServer.NSIM.toString());
fPrgmArgumentsLabelCom = new Label(shell, SWT.NULL);
fPrgmArgumentsLabelCom.setText("COM Ports:"); //$NON-NLS-1$
fFirstlaunchPrgmArgumentsComCom = new Combo(shell, SWT.SINGLE | SWT.BORDER);
List COM = ARCTerminalTab.COMserialport();
for (int ii = 0; ii < COM.size(); ii++) {
String currentcom = (String) COM.get(ii);
fFirstlaunchPrgmArgumentsComCom.add(currentcom);
}
fFirstlaunchPrgmArgumentsComCom.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
Combo combo = (Combo) evt.widget;
value[1] = combo.getText();
}
});
fPrgmArgumentsComboInit.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent evt) {
Combo combo = (Combo) evt.widget;
value[0] = combo.getText();
ArcGdbServer gdbServer;
try {
gdbServer = ArcGdbServer.fromString(combo.getText());
} catch (IllegalArgumentException e) {
gdbServer = ArcGdbServer.DEFAULT_GDB_SERVER;
}
if (gdbServer == ArcGdbServer.NSIM || gdbServer == ArcGdbServer.GENERIC_GDBSERVER) {
fFirstlaunchPrgmArgumentsComCom.setVisible(false);
fPrgmArgumentsLabelCom.setVisible(false);
} else {
fFirstlaunchPrgmArgumentsComCom.setVisible(true);
fPrgmArgumentsLabelCom.setVisible(true);
}
}
});
final Button buttonOK = new Button(shell, SWT.PUSH);
buttonOK.setText(" Ok ");
buttonOK.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END));
Button buttonCancel = new Button(shell, SWT.PUSH);
buttonCancel.setText("Cancel");
buttonOK.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
shell.dispose();
}
});
buttonCancel.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
value[0] = "";
value[1] = "";
shell.dispose();
}
});
shell.addListener(SWT.Traverse, new Listener() {
public void handleEvent(Event event) {
if (event.detail == SWT.TRAVERSE_ESCAPE)
event.doit = false;
}
});
fFirstlaunchPrgmArgumentsComCom.setText("");
fPrgmArgumentsComboInit.setText("");
shell.pack();
shell.open();
Display display = parent.getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
System.out.println("gdbserver: \"" + value[0] + "\" COM serial port: \"" + value[1] + "\"");
return value;
}
public static void main(String[] args) {
Shell shell = new Shell();
FirstlaunchDialog dialog = new FirstlaunchDialog(shell);
dialog.open();
}
}