package org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.menu.gcodeprovider;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.action.MenuManager;
import org.goko.core.common.exception.GkException;
import org.goko.core.gcode.rs274ngcv3.IRS274NGCService;
import org.goko.core.log.GkLog;
import org.goko.gcode.rs274ngcv3.ui.workspace.IRS274WorkspaceService;
import org.goko.gcode.rs274ngcv3.ui.workspace.modifierbuilder.ModifierUiProviderSorter;
import org.goko.gcode.rs274ngcv3.ui.workspace.modifierbuilder.ModifierUiProviderSorter.EnumModifierUiProviderSort;
import org.goko.gcode.rs274ngcv3.ui.workspace.uiprovider.IModifierUiProvider;
public class ModifierSubMenu extends MenuManager {
/** LOG */
private static final GkLog LOG = GkLog.getLogger(ModifierSubMenu.class);
/** IRS274NGCService */
private IRS274NGCService rs274Service;
/** IRS274WorkspaceService */
private IRS274WorkspaceService rs274WorkspaceService;
/** Id of the target GCode Provider */
private Integer idGCodeProvider;
public ModifierSubMenu(IRS274NGCService rs274Service, IRS274WorkspaceService rs274WorkspaceService, Integer idGCodeProvider) throws GkException {
super("Modifiers");
this.rs274Service = rs274Service;
this.rs274WorkspaceService = rs274WorkspaceService;
this.idGCodeProvider = idGCodeProvider;
buildMenu();
}
/** (inheritDoc)
* @see org.eclipse.jface.action.MenuManager#isEnabled()
*/
@Override
public boolean isEnabled() {
boolean locked = true;
try {
locked = rs274Service.getGCodeProvider(idGCodeProvider).isLocked();
} catch (GkException e) {
LOG.error(e);
}
return !locked;
}
/**
* Builds the actual menu
* @throws GkException GkException
*/
private void buildMenu() throws GkException {
List<IModifierUiProvider<?>> lstBuilders = rs274WorkspaceService.getModifierBuilder();
Collections.sort(lstBuilders, new ModifierUiProviderSorter(EnumModifierUiProviderSort.ALPHABETICAL));
for (final IModifierUiProvider<?> iModifierUiProvider : lstBuilders) {
// Actions for the sub menu
CreateModifierAction action = new CreateModifierAction(rs274Service, iModifierUiProvider, idGCodeProvider);
add(action);
}
}
}