2013-07-22 69 views
0

我正在开发一个使用eclipse插件开发的向导。Eclipse插件开发--- PopupMenuCreation

要求:

我要创建一个需要得到尽快用户右键点击在Java项目中的源文件夹中填充的上下文菜单。一旦用户执行第一步,我的处理程序需要在我的向导中获取选定的src文件夹。我的向导包含一个treeviewer,我需要将选定的src文件夹打包。

我的分析:

我有我的处理程序类,获取所选套餐

SampleHandler.java

public Object execute(ExecutionEvent event) throws ExecutionException { 

    shell = HandlerUtil.getActiveShell(event); 
    // Initializing workbench window object 
    IWorkbenchWindow window = (IWorkbenchWindow) HandlerUtil.getActiveWorkbenchWindow(event); 

    ISelection sel = HandlerUtil.getActiveMenuSelection(event); 
    final IStructuredSelection selection = (IStructuredSelection) sel; 

    Object firstElement = selection.getFirstElement(); 

    if (firstElement instanceof IPackageFragment) { 
     // Get the selected fragment 
     IPackageFragment packageFragment = (IPackageFragment) firstElement; 
     modelPackage = packageFragment.getElementName(); 
     boolean a =!ProjectResourceHelper.isEntityBasePackage(modelPackage); 
     if(a == true){ 

      MessageDialog.openInformation(shell, "Warning", "Please click from entity base package"); 
      Shell shell = HandlerUtil.getActiveShell(event);  
      GreenWizard wizard = new GreenWizard(); 
      WizardDialog dialog = new WizardDialog(part.getSite().getShell(), wizard); 
      dialog.create(); 


      dialog.open();  
      return null; 


     } 

     try{    
      window.run(true, true, new IRunnableWithProgress(){     
       @Override 
       public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { 
        monitor.beginTask("Layer codes are being generated...", 1); 

        // Invocation of generate layers method 


        monitor.worked(1); 

        // Done with operation completion. 
        monitor.done(); 
       } 

      }); 
     } 
     catch(InvocationTargetException ite){ 
      MessageDialog.openError(shell, "Greenfield Code Generation Exception", ite.getMessage()); 
     } 
     catch (InterruptedException ie) { 
      MessageDialog.openError(shell, "Greenfield Code Generation Exception", ie.getMessage()); 
     } 


    } 

我有一个调用此方法中我的主要向导类。

GreenWizard wizard = new GreenWizard();

和我的主要向导回电话我的向导页,我需要让用户在点击右键进行选择。

我Wizardpageclass

public GenerateGreenfieldLayer(IWorkbench workbench, 
     IStructuredSelection selection) { 
    super("Greenfield"); 
    setImageDescriptor(ResourceManager 
      .getImageDescriptor("\\icons\\greenfield-new-wiz.png")); 
    setTitle("GreenField Generate layer"); 
    setDescription("Select specfic class to grenerate Layers"); 
} 

/** 
* Create contents of the wizard. 
* 
* @param parent 
*/ 
@Override 
public void createControl(Composite parent) { 

    Composite container = new Composite(parent, SWT.NULL); 

    setControl(container); 
    container.setLayout(new GridLayout(2, false)); 

    final CheckboxTreeViewer treeViewer = new CheckboxTreeViewer(container, 
      SWT.BORDER); 
    tree = treeViewer.getTree(); 
    tree.setToolTipText("Choose package"); 
    GridData gd_tree = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); 
    gd_tree.widthHint = 280; 
    gd_tree.heightHint = 140; 
    tree.setLayoutData(gd_tree); 
    treeViewer.setContentProvider(new GreenfieldTreeContentProvider()); 
    treeViewer.setLabelProvider(new WorkbenchLabelProvider()); 
    treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { 
     public void selectionChanged(SelectionChangedEvent event) { 

     } 
     }); 


    } 

任何人都可以请指导我如何从对象方法的选择,并通过在我的向导页面的TreeViewer初始输入。

如果我缺少任何步骤,请纠正我,因为我对此很新。

在此先感谢

回答

0

您应该将代码分成以下几部分和数据流:

  • 处理程序:获得选择和创建向导,向导对话框(如你做的话)
  • Handler-> Wizard:使用向导的构造函数或自定义的init(foo)方法(您可以从处理函数中调用)来设置选定对象(或任何您想要作为初始dat传递的对象a)从处理器
  • 向导 - >向导页面:创建向导时,实例化WizardPage(s)并将选择传递给向导页面。 (如果你需要一个在Wizard和它的页面之间共享的更复杂的模型,可以考虑创建一个简单的值持有者类作为你的向导模型;也就是说,一个简单的java类和你的数据以及getters/setters。创建向导页面UI,让用户修改模型
  • WizardPage->向导:如果你没有这个对象就可以跨页,如果你把它传递给每一个页面的构造函数)
  • WizardPage共享通过值持有者类使用共享向导模式,有getXxx()方法让向导访问从页面
  • 向导用户的输入:实现Wizard.performFinish()使用getContainer().run()做的工作,在向导的结束,而不是在您的处理程序中调用window.run()
+0

感谢您的回复Stefan您可以请举一个例子,以便我可以实现并了解它是如何工作的。由于我对此很新,所以我敦促寻求帮助...... –

+0

运行示例请让我知道,因为我正在选择对象作为JAVA PACAKGE在我的项目中,并希望将它存储在MYWIZARDPAGE TREEVIEWER CONTROL中。哪种方式最好。这个模型类将是最好的方法或直接。谢谢 –