Eclipse运行(launcher)框架二

定义TabGroup

上面我们定义完了一个type。一般来说我们双击就可以产生一个configuration。但是现在我们双击,会出现一个异常:

tu4

图四

 

很明白的意思:我们没有定义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");
      }

}
 

 

其实啥也没写。好了,运行我们的插件先:

tu5

图五

看到了,我们现在已经可以加一个或多个configuration了。而且对应的Tab也已经出来了。并且我们也可以运行。点“run”,试试效果:

You selected liugang launchconfiguration type to run

 

被打印出来了。这就完成了一个简单的运行器的添加。我们看到在我们创建的Tab里几个需要实现的方法里都有一个configuration参数,这个参数就是用来存储了获取配置参数的地方。最后点运行的时候,在我们的typelaunch方法里获得的configuration就是从这里传入的。所以在那里可以得到我们在Tab页上的配置信息。

 

以上我们虽然完成了一个运行过程。不过实在是太简单了。下面我们加一点东西。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值