com.mobilesorcery.sdk.ui.internal.actions.ChangeBuildConfigContextAction.java Source code

Java tutorial

Introduction

Here is the source code for com.mobilesorcery.sdk.ui.internal.actions.ChangeBuildConfigContextAction.java

Source

/*  Copyright (C) 2010 Mobile Sorcery AB
    
This program is free software; you can redistribute it and/or modify it
under the terms of the Eclipse Public License v1.0.
    
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for
more details.
    
You should have received a copy of the Eclipse Public License v1.0 along
with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html
 */
package com.mobilesorcery.sdk.ui.internal.actions;

import java.util.Set;

import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;

import com.mobilesorcery.sdk.core.CoreMoSyncPlugin;
import com.mobilesorcery.sdk.core.IBuildConfiguration;
import com.mobilesorcery.sdk.core.MoSyncProject;

public class ChangeBuildConfigContextAction implements IMenuCreator, IObjectActionDelegate {

    private MoSyncProject project;

    public ChangeBuildConfigContextAction() {
    }

    public void dispose() {
    }

    public Menu getMenu(Control parent) {
        return null;
    }

    public Menu getMenu(Menu parent) {
        Menu menu = new Menu(parent);
        menu.addMenuListener(new MenuAdapter() {
            public void menuShown(MenuEvent e) {
                fillMenu((Menu) e.widget);
            }
        });
        return menu;
    }

    protected void fillMenu(Menu menu) {
        MenuItem[] items = menu.getItems();
        for (MenuItem item : items)
            item.dispose();

        if (project.areBuildConfigurationsSupported()) {
            Set<String> cfgs = project.getBuildConfigurations();
            for (String cfg : cfgs) {
                IAction action = new ChangeBuildConfigAction(project, cfg);
                IBuildConfiguration activeCfg = project.getActiveBuildConfiguration();
                action.setChecked(activeCfg != null && activeCfg.getId().equals(cfg));

                ActionContributionItem item = new ActionContributionItem(action);
                item.fill(menu, -1);
            }
        } else {
            IAction action = new ActivateBuildConfigurationsAction(project);
            ActionContributionItem item = new ActionContributionItem(action);
            item.fill(menu, -1);
        }
    }

    public void setActivePart(IAction action, IWorkbenchPart targetPart) {
    }

    public void run(IAction action) {
    }

    public void selectionChanged(IAction action, ISelection selection) {
        IStructuredSelection ssel = (IStructuredSelection) selection;
        project = CoreMoSyncPlugin.getDefault().extractProject(ssel.toList());
        action.setMenuCreator(this);
    }

}