X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.swt%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fswt%2FUpdateRunner.java;h=72c17ed747fe5f8d41f1e670cc5358993324a12d;hb=HEAD;hp=3d90dfac578321676a4394b2ee00ca4b4d886df3;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/UpdateRunner.java b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/UpdateRunner.java index 3d90dfac5..72c17ed74 100644 --- a/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/UpdateRunner.java +++ b/bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/UpdateRunner.java @@ -1,135 +1,135 @@ -/******************************************************************************* - * Copyright (c) 2007, 2012 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 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.browsing.ui.swt; - -import java.util.HashSet; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.TreeItem; -import org.simantics.browsing.ui.BuiltinKeys; -import org.simantics.browsing.ui.CheckedState; -import org.simantics.browsing.ui.NodeContext; -import org.simantics.browsing.ui.NodeQueryManager; -import org.simantics.browsing.ui.common.internal.GENodeQueryManager; -import org.simantics.browsing.ui.common.internal.IGraphExplorerContext; -import org.simantics.browsing.ui.content.PrunedChildrenResult; - -/** - * This class is responsible for updating the {@link TreeItem}s contained by the - * SWT Tree in {@link GraphExplorerImpl}. - * - * It will reschedule itself for as long as there are UI items to update in the - * explorer. This class is not responsible for performing any throttling of - * UpdateRunner executions. - * - * @author Antti Villberg - */ -class UpdateRunner implements Runnable { - - final GraphExplorerImpl ge; - //final IGraphExplorerContext geContext; - - UpdateRunner(GraphExplorerImpl ge, IGraphExplorerContext geContext) { - this.ge = ge; - // this.geContext = geContext; - } - - public void run() { - try { - doRun(); - } catch (Throwable t) { - t.printStackTrace(); - } - - } - - public void doRun() { - - if (ge.isDisposed()) - return; - - HashSet items = new HashSet(); - boolean doRoot; - - synchronized (ge.pendingItems) { - - doRoot = ge.pendingRoot; - - for (TreeItem item : ge.pendingItems) { - //if(item.isDisposed()) continue; - //if(item.getParentItem() == null) doRoot = true; - //else items.add(item.getParentItem()); - if (item == null) { - doRoot = true; - } else { - if(item.isDisposed()) continue; - items.add(item); - } - } - - ge.pendingItems = new HashSet(); - ge.pendingRoot = false; - - } - - if (doRoot) { - - NodeQueryManager manager = new GENodeQueryManager(ge.explorerContext, null, null, TreeItemReference.create(null)); - - PrunedChildrenResult children = manager.query(ge.rootContext, BuiltinKeys.PRUNED_CHILDREN); - int maxChildren = ge.getMaxChildren(manager, ge.rootContext); - int childCount = Math.min(children.getPrunedChildren().length, maxChildren); - ge.tree.clearAll(true); - ge.tree.setItemCount(childCount); - - } else { - - int itemIndex = 0; - for (TreeItem item : items) { - if (item.isDisposed()) - continue; - - final NodeContext context = (NodeContext)item.getData(); - assert(context != null); - - NodeQueryManager manager = new GENodeQueryManager(ge.explorerContext, null, null, TreeItemReference.create(item)); - - PrunedChildrenResult children = manager.query(context, BuiltinKeys.PRUNED_CHILDREN); - - int maxChildren = ge.getMaxChildren(manager, context); - item.setItemCount(Math.min(children.getPrunedChildren().length, maxChildren)); - - ge.setTextAndImage(item, manager, context, itemIndex); - - item.clearAll(true); - - boolean isExpanded = manager.query(context, BuiltinKeys.IS_EXPANDED); - item.setExpanded(isExpanded); - - if ((((Control) ge.getControl()).getStyle() & SWT.CHECK) != 0) { - CheckedState checked = manager.query(context, BuiltinKeys.IS_CHECKED); - item.setChecked(CheckedState.CHECKED_STATES.contains(checked)); - item.setGrayed(CheckedState.GRAYED == checked); - } - - ++itemIndex; - } - } - - synchronized (ge.pendingItems) { - if (!ge.scheduleUpdater()) - ge.updating = false; - } - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2012 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 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.browsing.ui.swt; + +import java.util.HashSet; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.TreeItem; +import org.simantics.browsing.ui.BuiltinKeys; +import org.simantics.browsing.ui.CheckedState; +import org.simantics.browsing.ui.NodeContext; +import org.simantics.browsing.ui.NodeQueryManager; +import org.simantics.browsing.ui.common.internal.GENodeQueryManager; +import org.simantics.browsing.ui.common.internal.IGraphExplorerContext; +import org.simantics.browsing.ui.content.PrunedChildrenResult; + +/** + * This class is responsible for updating the {@link TreeItem}s contained by the + * SWT Tree in {@link GraphExplorerImpl}. + * + * It will reschedule itself for as long as there are UI items to update in the + * explorer. This class is not responsible for performing any throttling of + * UpdateRunner executions. + * + * @author Antti Villberg + */ +class UpdateRunner implements Runnable { + + final GraphExplorerImpl ge; + //final IGraphExplorerContext geContext; + + UpdateRunner(GraphExplorerImpl ge, IGraphExplorerContext geContext) { + this.ge = ge; + // this.geContext = geContext; + } + + public void run() { + try { + doRun(); + } catch (Throwable t) { + t.printStackTrace(); + } + + } + + public void doRun() { + + if (ge.isDisposed()) + return; + + HashSet items = new HashSet(); + boolean doRoot; + + synchronized (ge.pendingItems) { + + doRoot = ge.pendingRoot; + + for (TreeItem item : ge.pendingItems) { + //if(item.isDisposed()) continue; + //if(item.getParentItem() == null) doRoot = true; + //else items.add(item.getParentItem()); + if (item == null) { + doRoot = true; + } else { + if(item.isDisposed()) continue; + items.add(item); + } + } + + ge.pendingItems = new HashSet(); + ge.pendingRoot = false; + + } + + if (doRoot) { + + NodeQueryManager manager = new GENodeQueryManager(ge.explorerContext, null, null, TreeItemReference.create(null)); + + PrunedChildrenResult children = manager.query(ge.rootContext, BuiltinKeys.PRUNED_CHILDREN); + int maxChildren = ge.getMaxChildren(manager, ge.rootContext); + int childCount = Math.min(children.getPrunedChildren().length, maxChildren); + ge.tree.clearAll(true); + ge.tree.setItemCount(childCount); + + } else { + + int itemIndex = 0; + for (TreeItem item : items) { + if (item.isDisposed()) + continue; + + final NodeContext context = (NodeContext)item.getData(); + assert(context != null); + + NodeQueryManager manager = new GENodeQueryManager(ge.explorerContext, null, null, TreeItemReference.create(item)); + + PrunedChildrenResult children = manager.query(context, BuiltinKeys.PRUNED_CHILDREN); + + int maxChildren = ge.getMaxChildren(manager, context); + item.setItemCount(Math.min(children.getPrunedChildren().length, maxChildren)); + + ge.setTextAndImage(item, manager, context, itemIndex); + + item.clearAll(true); + + boolean isExpanded = manager.query(context, BuiltinKeys.IS_EXPANDED); + item.setExpanded(isExpanded); + + if ((((Control) ge.getControl()).getStyle() & SWT.CHECK) != 0) { + CheckedState checked = manager.query(context, BuiltinKeys.IS_CHECKED); + item.setChecked(CheckedState.CHECKED_STATES.contains(checked)); + item.setGrayed(CheckedState.GRAYED == checked); + } + + ++itemIndex; + } + } + + synchronized (ge.pendingItems) { + if (!ge.scheduleUpdater()) + ge.updating = false; + } + } + +}