package org.simantics.views.swt.client.impl; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.jface.viewers.IPostSelectionProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IWorkbenchSite; import org.simantics.browsing.ui.Column; import org.simantics.browsing.ui.StatePersistor; import org.simantics.browsing.ui.swt.PassThruInputSource; import org.simantics.browsing.ui.swt.widgets.ModelBrowser; import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupportImpl; import org.simantics.scl.runtime.function.Function1; import org.simantics.views.ViewUtils.ColumnBean; import org.simantics.views.ViewUtils.LayoutBean; import org.simantics.views.swt.client.base.SWTViewUtils; import org.simantics.views.swt.client.base.SingleSWTViewNode; public class SWTExplorer extends SingleSWTViewNode { private static final long serialVersionUID = 7932335224632082902L; public LayoutBean layout; public String browseContext; public String contextMenuId; public String uiContext; public Function1 selectionListener; public Object input; public List columns; public List editingColumns; public Boolean columnsVisible; public Boolean displayFilter; public Boolean publishSelection; public Boolean useNodeBrowseContexts; public Boolean useNodeActionContexts; public StatePersistor persistor; public ISelection lastSelection; private ISelectionChangedListener internalToExternalSelectionPropagator = event -> { IWorkbenchSite site = getSite(); if (site != null) { ISelectionProvider sp = site.getSelectionProvider(); if (sp != null) { sp.setSelection(event.getSelection()); } } }; @Override public void createControls(Composite parent) { if(browseContext == null) return; final IWorkbenchSite site = getSite(); Map args = new HashMap(); args.put("displaySelectors", Boolean.FALSE); args.put("displayFilter", displayFilter != null ? displayFilter : Boolean.FALSE); if(useNodeBrowseContexts != null && useNodeBrowseContexts) { args.put("useNodeBrowseContexts", true); } if(useNodeActionContexts != null && useNodeActionContexts) { args.put("useNodeActionContexts", true); } control = new ModelBrowser(Collections.singleton(browseContext), args, site, parent, new WidgetSupportImpl(), style); control.setContextMenuId(contextMenuId); if (uiContext != null) { control.setUiContexts(Collections.singleton(uiContext)); } control.setStatePersistor(persistor); control.finish(); setProperties(); control.setInputSource(PassThruInputSource.INSTANCE); ISelectionProvider isp = (ISelectionProvider)control.getExplorer().getAdapter(ISelectionProvider.class); if (isp instanceof IPostSelectionProvider) { ((IPostSelectionProvider) isp).addPostSelectionChangedListener(internalToExternalSelectionPropagator); } else { isp.addSelectionChangedListener(internalToExternalSelectionPropagator); } control.addListenerToControl(SWT.Selection, event -> { if(selectionListener != null) selectionListener.apply(event); ISelection selection = (ISelection)control.getExplorer().getWidgetSelection(); propertyCallback.apply("selection", selection); lastSelection = selection; }); } public void synchronizeColumnsVisible(Boolean columnsVisible) { if(columnsVisible != null) control.setColumnsVisible(columnsVisible); } public void synchronizeDisplayFilter(Boolean displayFilter) { // if(displayFilter != null) control.setColumnsVisible(displayFilter); } public void synchronizePublishSelection(Boolean publishSelection) { } public void synchronizeInput(Object input) { if(input != null) control.setInput(input, false); } public void synchronizeBrowseContext(String browseContext) { } public void synchronizeContextMenuId(String contextMenuId) { } public void synchronizeSelectionListener(Function1 selectionListener) { } public void synchronizePersistor(StatePersistor persistor) { } public void synchronizeColumns(ArrayList columns) { if(columns != null) { Column[] cols = new Column[columns.size()]; for(int i=0;i columns) { if(columns != null) { String[] ecs = new String[columns.size()]; for(int i=0;i