2013-07-22 67 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中。哪種方式最好。這個模型類將是最好的方法或直接。謝謝 –