package com.hundsun.ares.studio.jres.metadata.ui.editors;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.transaction.ResourceSetChangeEvent;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.hundsun.ares.studio.jres.metadata.ui.block.FunctionProxyViewerBlock;
import com.hundsun.ares.studio.jres.metadata.ui.block.MenuListViewerBlock;
import com.hundsun.ares.studio.jres.model.metadata.FunctionProxy;
import com.hundsun.ares.studio.jres.model.metadata.MetadataCategory;
import com.hundsun.ares.studio.jres.model.metadata.MetadataItem;
import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage;
import com.hundsun.ares.studio.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.blocks.ColumnViewerBlock;
public class MenuListPage extends AbstractMetadataFormPage {
private MenuListViewerBlock menuListViewerBlock;
private FunctionProxyViewerBlock functionProxyViewerBlock;
/**
* @param editor
* @param id
* @param title
*/
public MenuListPage(EMFFormEditor editor, String id, String title) {
super(editor, id, title);
}
/**
* @return the menuListViewerBlock
*/
public MenuListViewerBlock getMenuListViewerBlock() {
return menuListViewerBlock;
};
/**
* @return the functionProxyViewerBlock
*/
public FunctionProxyViewerBlock getFunctionProxyViewerBlock() {
return functionProxyViewerBlock;
};
@Override
protected boolean isNeedValidate(ResourceSetChangeEvent event) {
for (Notification notification : event.getNotifications()) {
if (notification.getNotifier() instanceof FunctionProxy) {
return true;
}
if (notification.getFeature() == MetadataPackage.Literals.METADATA_CATEGORY__CHILDREN
|| notification.getFeature() == MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS
|| notification.getNotifier() instanceof MetadataItem
|| notification.getNotifier() instanceof MetadataCategory) {
return true;
}
}
return false;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.metadata.ui.editors.AbstractMetadataFormPage#createMetadataComposite(org.eclipse.swt.widgets.Composite, org.eclipse.ui.forms.widgets.FormToolkit)
*/
@Override
protected void createMetadataComposite(Composite body, FormToolkit toolkit) {
SashForm sashForm = new SashForm(body, SWT.VERTICAL);
menuListViewerBlock = new MenuListViewerBlock(this, getEditingDomain(), getSite(), getEditor().getARESResource(), getProblemPool());
menuListViewerBlock.setEditableControl(getEditableControl());
menuListViewerBlock.createControl(sashForm, toolkit);
getEditor().getActionBarContributor().addGlobalActionHandlerProvider(menuListViewerBlock);
functionProxyViewerBlock = new FunctionProxyViewerBlock(getEditingDomain(), getEditor().getARESResource(), getProblemPool());
functionProxyViewerBlock.setEditableControl(getEditableControl());
functionProxyViewerBlock.createControl(sashForm, toolkit);
getEditor().getActionBarContributor().addGlobalActionHandlerProvider(functionProxyViewerBlock);
sashForm.setWeights(new int[] { 6, 4 });
menuListViewerBlock.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
if (selection instanceof IStructuredSelection) {
if (!selection.isEmpty()) {
Object element = ((IStructuredSelection)selection).getFirstElement();
functionProxyViewerBlock.setInput(element);
}else {
functionProxyViewerBlock.setInput(null);
}
}
}
});
addPropertyListener(menuListViewerBlock);
getEditingDomain().getCommandStack().addCommandStackListener(menuListViewerBlock);
addPropertyListener(functionProxyViewerBlock);
getEditingDomain().getCommandStack().addCommandStackListener(functionProxyViewerBlock);
}
@Override
public void infoChange() {
menuListViewerBlock.setInput(getInfo());
super.infoChange();
}
@Override
public void dispose() {
removePropertyListener(menuListViewerBlock);
getEditingDomain().getCommandStack().removeCommandStackListener(menuListViewerBlock);
removePropertyListener(functionProxyViewerBlock);
getEditingDomain().getCommandStack().removeCommandStackListener(functionProxyViewerBlock);
super.dispose();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.metadata.ui.editors.AbstractMetadataFormPage#getViewerBlock()
*/
@Override
protected ColumnViewerBlock getViewerBlock() {
return menuListViewerBlock;
}
}