0

Eclipse プラグイン開発を使用してウィザードを開発しています。

要件:

ユーザーが Java プロジェクトのソース フォルダーを右クリックするとすぐにデータを入力する必要があるコンテキスト メニューを作成する必要があります。ユーザーが最初のステップを実行すると、ハンドラーはウィザードで選択された src フォルダーを取得する必要があります。私のウィザードには、選択した 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) {

        } 
        }); 


    }

オブジェクトメソッドから選択を取得し、ウィザードページでツリービューアーの初期入力として渡す方法を教えてください。

私はこれに非常に慣れていないため、手順が不足している場合は修正してください。

前もって感謝します

4

1 に答える 1

0

コードを次の部分とデータフローに分割する必要があります。

  • ハンドラー:選択を取得し、ウィザードとウィザード ダイアログを作成します (既に行っているように)
  • Handler->Wizard:ウィザードのコンストラクターまたはカスタムinit(foo)メソッド (ハンドラーから呼び出す) を使用して、選択したオブジェクト (または初期データとして渡したいもの) をハンドラーから設定します。
  • Wizard->WizardPage: Wizard を作成するときに、WizardPage をインスタンス化し、選択内容をウィザード ページに渡します。(ウィザードとそのページ間で共有されるより複雑なモデルが必要な場合は、ウィザード モデルとして単純な値保持クラスをインスタンス化することを検討してください。つまり、データと getter/setter を持つ単純な Java クラスです。そのオブジェクトは、すべてのページのコンストラクターに渡すと、ページ間で共有されます)
  • WizardPage:ウィザード ページの UI を作成し、ユーザーがモデルを変更できるようにします
  • WizardPage->Wizard:値ホルダー クラスを介して共有ウィザード モデルを使用しない場合はgetXxx()、ウィザードがページからユーザーの入力にアクセスできるようにするメソッドを用意します。
  • ウィザード:ハンドラーで呼び出しを行う代わりにWizard.performFinish()、ウィザードの最後に使用して作業を行うように実装します。getContainer().run()window.run()
于 2013-07-23T12:10:37.550 に答える