/*
* Copyright (C) 2013 Nagoya University All rights reserved.
*/
package net.dependableos.dcase.diagram.editor.command;
import static org.eclipse.swt.SWT.PUSH;
import java.util.List;
import net.dependableos.dcase.diagram.edit.parts.custom.DcaseNodeEditPart;
import net.dependableos.dcase.diagram.editor.common.util.DcaseEditorUtil;
import net.dependableos.dcase.diagram.editor.message.Menus;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
/**
* A contribution item that has sub menus represent converter names.
*/
public class NodeChildrenContributionItem extends ContributionItem {
/**
* Constructor for the class. Creates a NodeChildrenContributionItem.
*/
public NodeChildrenContributionItem() {
super();
}
/**
* Constructor for the class. Creates a SelectModuleContributionItem and
* initialize it.
*
* @param id
* the contribution item identifier, or null.
*/
public NodeChildrenContributionItem(String id) {
super(id);
}
/**
* {@inheritDoc}
*/
@Override
public void fill(Menu menu, int index) {
DcaseNodeEditPart selectedEditPart = DcaseEditorUtil
.getFirstCurrentSelectedPart();
if (selectedEditPart == null) {
return;
}
List list = selectedEditPart.getSourceConnections();
if (list == null || list.size() == 0) {
return;
}
for (int i = 0; i < 2; i++) {
MenuItem item = new MenuItem(menu, PUSH);
MenuSelectionAdapter adapter;
if (i == 0) {
item.setText(Menus.ShowChildren);
adapter = new MenuSelectionAdapter(true);
} else {
item.setText(Menus.HideChildren);
adapter = new MenuSelectionAdapter(false);
}
item.addSelectionListener(adapter);
}
}
/**
* {@inheritDoc}
*/
@Override
public boolean isDynamic() {
return true;
}
/**
* Adapter class for Show/Hide children.
*/
private class MenuSelectionAdapter extends SelectionAdapter {
/**
* the flag of whether show or hide.
*/
private boolean isShow = false;
/**
* Constructor for the class.
*/
public MenuSelectionAdapter(boolean isShow) {
super();
this.isShow = isShow;
}
/**
* {@inheritDoc}
*/
@Override
public void widgetSelected(SelectionEvent event) {
IHandler handler;
if (isShow) {
handler = new NodeChildrenShowHandler();
} else {
handler = new NodeChildrenHideHandler();
}
try {
handler.execute(null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}