X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.swt%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fswt%2Fwidgets%2FGraphExplorerComposite.java;h=d27eeaa79244a5785070cbb0da57b6bebe52ecda;hp=0ee36b3659507240d8ae817dc1ea9ca14a88acfe;hb=e4ffdffae875e518a4eb070b8bda6ead1a9843d3;hpb=b844ca924d129072e11f7e4c18918dd388a37e8c diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java index 0ee36b365..d27eeaa79 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/widgets/GraphExplorerComposite.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2012 Association for Decentralized Information Management + * Copyright (c) 2007, 2018 Association for Decentralized Information Management * in Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -17,10 +17,8 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.function.BiFunction; -import java.util.function.Consumer; import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.Platform; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; @@ -45,11 +43,11 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.contexts.IContextService; +import org.simantics.Simantics; import org.simantics.browsing.ui.BuiltinKeys; import org.simantics.browsing.ui.Column; import org.simantics.browsing.ui.ExplorerState; @@ -71,6 +69,7 @@ import org.simantics.browsing.ui.common.processors.LabelerFactoryResolver; import org.simantics.browsing.ui.common.processors.UserSelectedComparableFactoryQueryProcessor; import org.simantics.browsing.ui.common.processors.UserSelectedViewpointFactoryQueryProcessor; import org.simantics.browsing.ui.common.processors.ViewpointFactoryResolver; +import org.simantics.browsing.ui.common.state.ExplorerStates; import org.simantics.browsing.ui.common.views.FilterAreaSource; import org.simantics.browsing.ui.common.views.IFilterArea; import org.simantics.browsing.ui.common.views.IFilterAreaProvider; @@ -82,7 +81,6 @@ import org.simantics.browsing.ui.graph.impl.RelatedObjectsQueryProcessor; import org.simantics.browsing.ui.graph.impl.SessionContextInputSource; import org.simantics.browsing.ui.model.browsecontexts.BrowseContext; import org.simantics.browsing.ui.model.nodetypes.NodeType; -import org.simantics.browsing.ui.swt.Activator; import org.simantics.browsing.ui.swt.ComparatorSelector; import org.simantics.browsing.ui.swt.ContextMenuInitializer; import org.simantics.browsing.ui.swt.DefaultExplorerSelectionListener; @@ -134,6 +132,7 @@ import org.simantics.utils.datastructures.hints.IHintContext.Key; import org.simantics.utils.datastructures.hints.IHintListener; import org.simantics.utils.datastructures.hints.IHintObservable; import org.simantics.utils.datastructures.hints.IHintTracker; +import org.simantics.utils.ui.SWTUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -409,7 +408,7 @@ public class GraphExplorerComposite extends Composite implements Widget, IAdapta if(site != null) return SimanticsUI.getSessionContextProvider(site.getWorkbenchWindow()); else - return SimanticsUI.getSessionContextProvider(); + return Simantics.getSessionContextProvider(); } public GraphExplorer getExplorer() { @@ -428,6 +427,10 @@ public class GraphExplorerComposite extends Composite implements Widget, IAdapta ((Control)explorer.getControl()).addListener(eventType, listener); } + public void removeListenerFromControl(int eventType, Listener listener) { + ((Control)explorer.getControl()).removeListener(eventType, listener); + } + public void finish() { created = true; createControls(site); @@ -1193,52 +1196,48 @@ public class GraphExplorerComposite extends Composite implements Widget, IAdapta } private int getColumnWidth(Column column, ExplorerState state) { - // Get saved width from the persistor if there is one. + // Get saved width from the persistor if there is one. if (state != null && state.columnWidths != null) { - Integer width = state.columnWidths.get(column.getLabel()); - if (width != null) - return width; + Integer width = state.columnWidths.get(column.getLabel()); + if (width != null) + return width; } return column.getWidth(); } - - public void setColumns(Column[] columns) { - - explorer.setColumns(columns, new Consumer>() { - - @Override - public void accept(Map objects) { - ExplorerState state = null; - if (persistor != null) { - state = persistor.deserialize( - Platform.getStateLocation(Activator.getDefault().getBundle()).toFile(), - explorer.getRoot()); - } - - for(Map.Entry entry : objects.entrySet()) { - Column column = entry.getKey(); - TreeColumn treeColumn = (TreeColumn)entry.getValue(); - - if (column.getWidth() < 0) { - throw new IllegalArgumentException("Column minimum width cannot be < 0, got " + column.getWidth()); - } - - int width = getColumnWidth(column, state); - if(column.hasGrab()) { - - ad.setColumnData(treeColumn, new ColumnWeightData(column.getWeight(), width)); - - } else { - ad.setColumnData(treeColumn, new ColumnWeightData(0, width)); - - } - - } - } + protected void restoreColumnSizes(Map columns) { + if (persistor != null) { + setColumnData(columns, null); + ExplorerStates.scheduleRead(explorer.getRoot(), persistor).thenAccept(state -> { + SWTUtils.asyncExec(GraphExplorerComposite.this, () -> { + if (explorerComposite.isDisposed()) + setColumnData(columns, state); + }); + }); + } else { + setColumnData(columns, null); + } + } + protected void setColumnData(Map columns, ExplorerState state) { + columns.forEach((column, widget) -> { + org.eclipse.swt.widgets.Widget columnWidget = (org.eclipse.swt.widgets.Widget) widget; + ad.setColumnData(columnWidget, + new ColumnWeightData( + column.hasGrab() ? column.getWeight() : 0, + getColumnWidth(column, state))); }); + } + public void setColumns(Column[] columns) { + // ColumnWeightData does not support column weight/width < 0 + for (Column column : columns) { + if (column.getWeight() < 0) + throw new IllegalArgumentException("Column weight must be >= 0, got " + column.getWeight() + " for " + column); + if (column.getWidth() < 0) + throw new IllegalArgumentException("Column minimum width must be >= 0, got " + column.getWidth() + " for " + column); + } + explorer.setColumns(columns, this::restoreColumnSizes); } @Override