]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/DefaultIsCheckedProcessor.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / DefaultIsCheckedProcessor.java
index 7cd4f6d542c32414159d04751e8cb498321e73fe..d39f6e640c6dde48e1eebbaf15302fd121e39e9e 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.browsing.ui.swt;\r
-\r
-import java.util.HashMap;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Listener;\r
-import org.eclipse.swt.widgets.Tree;\r
-import org.eclipse.swt.widgets.TreeItem;\r
-import org.eclipse.swt.widgets.Widget;\r
-import org.simantics.browsing.ui.BuiltinKeys;\r
-import org.simantics.browsing.ui.CheckedState;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.browsing.ui.NodeContext;\r
-import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
-import org.simantics.browsing.ui.NodeContext.PrimitiveQueryKey;\r
-import org.simantics.browsing.ui.common.processors.AbstractPrimitiveQueryProcessor;\r
-import org.simantics.browsing.ui.common.processors.IsCheckedProcessor;\r
-import org.simantics.browsing.ui.common.processors.ProcessorLifecycle;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class DefaultIsCheckedProcessor extends AbstractPrimitiveQueryProcessor<CheckedState> implements\r
-IsCheckedProcessor, ProcessorLifecycle {\r
-\r
-    private static final boolean DEBUG = false;\r
-\r
-    /**\r
-     * The map of node contexts that currently have another checked state than\r
-     * {@link CheckedState#NOT_CHECKED}.\r
-     */\r
-    private final HashMap<NodeContext, CheckedState>          checkedStates  = new HashMap<NodeContext, CheckedState>();\r
-    private final HashMap<NodeContext, PrimitiveQueryUpdater> checkedQueries = new HashMap<NodeContext, PrimitiveQueryUpdater>();\r
-\r
-    private final CheckedState                                defaultState;\r
-\r
-    private Tree                                              tree;\r
-\r
-    private boolean                                           viewerSupportsChecking;\r
-\r
-    public DefaultIsCheckedProcessor() {\r
-        this(CheckedState.NOT_CHECKED);\r
-    }\r
-\r
-    public DefaultIsCheckedProcessor(CheckedState defaultState) {\r
-        if (defaultState == null)\r
-            throw new NullPointerException("null default state");\r
-        this.defaultState = defaultState;\r
-    }\r
-\r
-    @Override\r
-    public Object getIdentifier() {\r
-        return BuiltinKeys.IS_CHECKED;\r
-    }\r
-\r
-    @Override\r
-    public String toString() {\r
-        return "IsCheckedProcessor";\r
-    }\r
-\r
-    @Override\r
-    public CheckedState query(PrimitiveQueryUpdater updater, NodeContext context, PrimitiveQueryKey<CheckedState> key) {\r
-        // Don't gather records if the Tree we are attached to does not support\r
-        // checked items. This optimizes memory consumption while allowing this\r
-        // processor to exist in the attached GraphExplorer.\r
-        if (!viewerSupportsChecking)\r
-            return defaultState;\r
-\r
-        CheckedState checked = checkedStates.get(context);\r
-\r
-        if (DEBUG)\r
-            System.out.println("isChecked(" + updater + ", " + context + "): " + checked);\r
-\r
-        checkedQueries.put(context, updater);\r
-        return checked != null ? checked : CheckedState.NOT_CHECKED;\r
-    }\r
-\r
-    @Override\r
-    public boolean setChecked(NodeContext context, CheckedState checked) {\r
-        return _setChecked(context, checked);\r
-    }\r
-\r
-    private boolean _setChecked(NodeContext context, CheckedState checked) {\r
-        if (checked != defaultState) {\r
-            return this.checkedStates.put(context, checked) != checked;\r
-        } else {\r
-            return this.checkedStates.remove(context) != null;\r
-        }\r
-    }\r
-\r
-    Listener treeListener = new Listener() {\r
-        @Override\r
-        public void handleEvent(Event event) {\r
-            NodeContext context = (NodeContext) event.item.getData();\r
-            switch (event.type) {\r
-                case SWT.Selection:\r
-                    if (event.detail == SWT.CHECK && event.item != null) {\r
-                        TreeItem item = (TreeItem) event.item;\r
-                        boolean checked = item.getChecked();\r
-                        boolean grayed = item.getGrayed();\r
-                        nodeStatusChanged(context, toCheckedState(checked, grayed));\r
-                    }\r
-                    break;\r
-            }\r
-        }\r
-    };\r
-\r
-    protected void nodeStatusChanged(NodeContext context, CheckedState checked) {\r
-        if (DEBUG)\r
-            System.out.println("isChecked status changed for " + context + ": " + checked);\r
-\r
-        _setChecked(context, checked);\r
-//        PrimitiveQueryUpdater updater = checkedQueries.get(context);\r
-//        if (updater != null)\r
-//            updater.scheduleReplace(context, BuiltinKeys.IS_CHECKED, checked);\r
-    }\r
-\r
-    @Override\r
-    public void attached(GraphExplorer explorer) {\r
-        if (DEBUG)\r
-            System.out.println(this + " attaching to " + explorer);\r
-\r
-        Object control = explorer.getControl();\r
-        if (control instanceof Tree) {\r
-            this.tree = (Tree) control;\r
-            viewerSupportsChecking = supportsChecking(tree);\r
-            if (viewerSupportsChecking) {\r
-                if (DEBUG)\r
-                    System.out.println("\ttree supports checking, adding listener");\r
-                tree.addListener(SWT.Selection, treeListener);\r
-            }\r
-        } else {\r
-            System.out.println("WARNING: " + getClass().getSimpleName() + " attached to unsupported control: " + control);\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void clear() {\r
-        checkedStates.clear();\r
-        checkedQueries.clear();\r
-    }\r
-\r
-    @Override\r
-    public void detached(GraphExplorer explorer) {\r
-        if (DEBUG)\r
-            System.out.println(this + " detaching from " + explorer);\r
-\r
-        clear();\r
-        if (tree != null) {\r
-            if (viewerSupportsChecking) {\r
-                if (DEBUG)\r
-                    System.out.println("\ttree supported checking, removing listener");\r
-                tree.removeListener(SWT.Selection, treeListener);\r
-            }\r
-            tree = null;\r
-            viewerSupportsChecking = false;\r
-        }\r
-    }\r
-\r
-    private static boolean supportsChecking(Widget control) {\r
-        return (control.getStyle() & SWT.CHECK) != 0;\r
-    }\r
-\r
-    private static CheckedState toCheckedState(boolean checked, boolean grayed) {\r
-        if (checked)\r
-            return grayed ? CheckedState.GRAYED : CheckedState.CHECKED;\r
-        return CheckedState.NOT_CHECKED;\r
-    }\r
-\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 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.HashMap;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.swt.widgets.Widget;
+import org.simantics.browsing.ui.BuiltinKeys;
+import org.simantics.browsing.ui.CheckedState;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.browsing.ui.NodeContext;
+import org.simantics.browsing.ui.PrimitiveQueryUpdater;
+import org.simantics.browsing.ui.NodeContext.PrimitiveQueryKey;
+import org.simantics.browsing.ui.common.processors.AbstractPrimitiveQueryProcessor;
+import org.simantics.browsing.ui.common.processors.IsCheckedProcessor;
+import org.simantics.browsing.ui.common.processors.ProcessorLifecycle;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class DefaultIsCheckedProcessor extends AbstractPrimitiveQueryProcessor<CheckedState> implements
+IsCheckedProcessor, ProcessorLifecycle {
+
+    private static final boolean DEBUG = false;
+
+    /**
+     * The map of node contexts that currently have another checked state than
+     * {@link CheckedState#NOT_CHECKED}.
+     */
+    private final HashMap<NodeContext, CheckedState>          checkedStates  = new HashMap<NodeContext, CheckedState>();
+    private final HashMap<NodeContext, PrimitiveQueryUpdater> checkedQueries = new HashMap<NodeContext, PrimitiveQueryUpdater>();
+
+    private final CheckedState                                defaultState;
+
+    private Tree                                              tree;
+
+    private boolean                                           viewerSupportsChecking;
+
+    public DefaultIsCheckedProcessor() {
+        this(CheckedState.NOT_CHECKED);
+    }
+
+    public DefaultIsCheckedProcessor(CheckedState defaultState) {
+        if (defaultState == null)
+            throw new NullPointerException("null default state");
+        this.defaultState = defaultState;
+    }
+
+    @Override
+    public Object getIdentifier() {
+        return BuiltinKeys.IS_CHECKED;
+    }
+
+    @Override
+    public String toString() {
+        return "IsCheckedProcessor";
+    }
+
+    @Override
+    public CheckedState query(PrimitiveQueryUpdater updater, NodeContext context, PrimitiveQueryKey<CheckedState> key) {
+        // Don't gather records if the Tree we are attached to does not support
+        // checked items. This optimizes memory consumption while allowing this
+        // processor to exist in the attached GraphExplorer.
+        if (!viewerSupportsChecking)
+            return defaultState;
+
+        CheckedState checked = checkedStates.get(context);
+
+        if (DEBUG)
+            System.out.println("isChecked(" + updater + ", " + context + "): " + checked);
+
+        checkedQueries.put(context, updater);
+        return checked != null ? checked : CheckedState.NOT_CHECKED;
+    }
+
+    @Override
+    public boolean setChecked(NodeContext context, CheckedState checked) {
+        return _setChecked(context, checked);
+    }
+
+    private boolean _setChecked(NodeContext context, CheckedState checked) {
+        if (checked != defaultState) {
+            return this.checkedStates.put(context, checked) != checked;
+        } else {
+            return this.checkedStates.remove(context) != null;
+        }
+    }
+
+    Listener treeListener = new Listener() {
+        @Override
+        public void handleEvent(Event event) {
+            NodeContext context = (NodeContext) event.item.getData();
+            switch (event.type) {
+                case SWT.Selection:
+                    if (event.detail == SWT.CHECK && event.item != null) {
+                        TreeItem item = (TreeItem) event.item;
+                        boolean checked = item.getChecked();
+                        boolean grayed = item.getGrayed();
+                        nodeStatusChanged(context, toCheckedState(checked, grayed));
+                    }
+                    break;
+            }
+        }
+    };
+
+    protected void nodeStatusChanged(NodeContext context, CheckedState checked) {
+        if (DEBUG)
+            System.out.println("isChecked status changed for " + context + ": " + checked);
+
+        _setChecked(context, checked);
+//        PrimitiveQueryUpdater updater = checkedQueries.get(context);
+//        if (updater != null)
+//            updater.scheduleReplace(context, BuiltinKeys.IS_CHECKED, checked);
+    }
+
+    @Override
+    public void attached(GraphExplorer explorer) {
+        if (DEBUG)
+            System.out.println(this + " attaching to " + explorer);
+
+        Object control = explorer.getControl();
+        if (control instanceof Tree) {
+            this.tree = (Tree) control;
+            viewerSupportsChecking = supportsChecking(tree);
+            if (viewerSupportsChecking) {
+                if (DEBUG)
+                    System.out.println("\ttree supports checking, adding listener");
+                tree.addListener(SWT.Selection, treeListener);
+            }
+        } else {
+            System.out.println("WARNING: " + getClass().getSimpleName() + " attached to unsupported control: " + control);
+        }
+    }
+
+    @Override
+    public void clear() {
+        checkedStates.clear();
+        checkedQueries.clear();
+    }
+
+    @Override
+    public void detached(GraphExplorer explorer) {
+        if (DEBUG)
+            System.out.println(this + " detaching from " + explorer);
+
+        clear();
+        if (tree != null) {
+            if (viewerSupportsChecking) {
+                if (DEBUG)
+                    System.out.println("\ttree supported checking, removing listener");
+                tree.removeListener(SWT.Selection, treeListener);
+            }
+            tree = null;
+            viewerSupportsChecking = false;
+        }
+    }
+
+    private static boolean supportsChecking(Widget control) {
+        return (control.getStyle() & SWT.CHECK) != 0;
+    }
+
+    private static CheckedState toCheckedState(boolean checked, boolean grayed) {
+        if (checked)
+            return grayed ? CheckedState.GRAYED : CheckedState.CHECKED;
+        return CheckedState.NOT_CHECKED;
+    }
+
 }
\ No newline at end of file