定义TabGroup
上面我们定义完了一个type。一般来说我们双击就可以产生一个configuration。但是现在我们双击,会出现一个异常:
很明白的意思:我们没有定义Tab Group。简单的说,我们要生成一个configuration,对应需要有一些tab页去配置内容,所以每个configuration都有一个对应的tabgroup。因为我们还没有为他定义这些,所它不知道生成的configuration需要显示什么样的tab,所以就出错了。下面我们就来扩展这个tab group吧。
这里要用的扩展点是:org.eclipse.debug.ui.launchConfigurationTabGroups。一个type下的所有configuration显示的是同样的tab group。当然了这个扩展也应该定义在UI插件里。我的定义如下:
<extension
point="org.eclipse.debug.ui.launchConfigurationTabGroups">
<launchConfigurationTabGroup
class="com.tibco.cdc.liugang.launcher.ui.tabs.LiugangLaunchConfigurationTabGroup"
id="com.tibco.cdc.liugang.launcher.ui.configuration.tabGroup"
type="com.tibco.cdc.liugang.launcher.type">
</launchConfigurationTabGroup>
</extension>
这里的几个关键点是:
1. class:实现完成tab页的类
2. type:还是对应上面我们定义的configurationType
下面就是要完成这个类。
有些Eclipse内置的Tab类,我们可以直接拿来就用。例如CommonTab。下面我们就实现一个Tab页。自定义的Tab页,需要实现接口:
org.eclipse.debug.ui.ILaunchConfigurationTab
不过通常我们只要继承AbstractLaunchConfigurationTab类就行了。我实现如下:
class MainTab extends AbstractLaunchConfigurationTab {
private Text nameText;
public void createControl(Composite parent) {
Composite composite = new Composite(parent,SWT.NONE);
composite.setLayout(new GridLayout(2,false));
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Label label = new Label(composite,SWT.NONE);
label.setText("Name");
nameText = new Text(composite,SWT.SINGLE|SWT.BORDER);
nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
setControl(composite);
}
public String getName() {
return "Main";
}
public void initializeFrom(ILaunchConfiguration configuration) {
try {
String name = configuration.getAttribute("name", "<unnamed>");
nameText.setText(name);
} catch (CoreException e) {
e.printStackTrace();
}
}
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute("name", nameText.getText());
}
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
configuration.setAttribute("name", "<unnamed>");
}
}
最后我们完成我们的TabGroup如下:
public class LiugangLaunchConfigurationTabGroup extends
AbstractLaunchConfigurationTabGroup {
public LiugangLaunchConfigurationTabGroup() {
}
public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
setTabs(new ILaunchConfigurationTab[]{new MainTab(),new CommonTab()});
}
}
其实现在我们已经有了一个可运行的东西了。我们先假装完成我们的delegate。如下:
public class LiugangLaunchConfigurationType implements
ILaunchConfigurationDelegate {
public void launch(ILaunchConfiguration configuration, String mode,
ILaunch launch, IProgressMonitor monitor) throws CoreException {
System.out.println("You selected liugang launchconfiguration type to run");
}
}
其实啥也没写。好了,运行我们的插件先:
图五
看到了,我们现在已经可以加一个或多个configuration了。而且对应的Tab也已经出来了。并且我们也可以运行。点“run”,试试效果:
“You selected liugang launchconfiguration type to run”
被打印出来了。这就完成了一个简单的运行器的添加。我们看到在我们创建的Tab里几个需要实现的方法里都有一个configuration参数,这个参数就是用来存储了获取配置参数的地方。最后点运行的时候,在我们的type的launch方法里获得的configuration就是从这里传入的。所以在那里可以得到我们在Tab页上的配置信息。
以上我们虽然完成了一个运行过程。不过实在是太简单了。下面我们加一点东西。