1bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev/* 2bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * Copyright (C) 2010 The Android Open Source Project 3bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * 4bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * Licensed under the Apache License, Version 2.0 (the "License"); 5bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * you may not use this file except in compliance with the License. 6bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * You may obtain a copy of the License at 7bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * 8bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * http://www.apache.org/licenses/LICENSE-2.0 9bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * 10bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * Unless required by applicable law or agreed to in writing, software 11bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * distributed under the License is distributed on an "AS IS" BASIS, 12bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * See the License for the specific language governing permissions and 14bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev * limitations under the License. 15bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev */ 16bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 1770a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrevpackage com.android.hierarchyviewerlib.ui; 18bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 19bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport com.android.ddmuilib.ImageLoader; 20bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport com.android.hierarchyviewerlib.device.ViewNode; 21bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport com.android.hierarchyviewerlib.models.PixelPerfectModel; 22901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrevimport com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener; 23bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 24bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.jface.viewers.ILabelProvider; 25bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.jface.viewers.ILabelProviderListener; 26bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.jface.viewers.ITreeContentProvider; 27c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrevimport org.eclipse.jface.viewers.TreeSelection; 28bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.jface.viewers.TreeViewer; 29bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.jface.viewers.Viewer; 30bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.SWT; 31e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrevimport org.eclipse.swt.events.DisposeEvent; 32e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrevimport org.eclipse.swt.events.DisposeListener; 33bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.events.SelectionEvent; 34bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.events.SelectionListener; 35bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.graphics.Image; 36c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrevimport org.eclipse.swt.layout.FillLayout; 37bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.widgets.Composite; 38bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.widgets.Display; 39bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport org.eclipse.swt.widgets.Tree; 40bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 41bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrevimport java.util.List; 42bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 43901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrevpublic class PixelPerfectTree extends Composite implements IImageChangeListener, SelectionListener { 44bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 45901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private TreeViewer mTreeViewer; 46bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 47901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private Tree mTree; 48bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 49901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private PixelPerfectModel mModel; 50bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 51901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private Image mFolderImage; 52bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 53901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private Image mFileImage; 54bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 55bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev private class ContentProvider implements ITreeContentProvider, ILabelProvider { 56f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 57bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public Object[] getChildren(Object element) { 58bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof ViewNode) { 59bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev List<ViewNode> children = ((ViewNode) element).children; 60bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return children.toArray(new ViewNode[children.size()]); 61bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 62bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return null; 63bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 64bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 65f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 66bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public Object getParent(Object element) { 67bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof ViewNode) { 68bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return ((ViewNode) element).parent; 69bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 70bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return null; 71bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 72bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 73f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 74bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public boolean hasChildren(Object element) { 75bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof ViewNode) { 76bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return ((ViewNode) element).children.size() != 0; 77bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 78bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return false; 79bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 80bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 81f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 82bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public Object[] getElements(Object element) { 83bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof PixelPerfectModel) { 84bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev ViewNode viewNode = ((PixelPerfectModel) element).getViewNode(); 85bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (viewNode == null) { 86bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return new Object[0]; 87bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 88bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return new Object[] { 89bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev viewNode 90bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev }; 91bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 92bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return new Object[0]; 93bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 94bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 95f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 96bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void dispose() { 97bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 98bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 99bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 100f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 101bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 102bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 103bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 104bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 105f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 106bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public Image getImage(Object element) { 107bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof ViewNode) { 108bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (hasChildren(element)) { 109901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev return mFolderImage; 110bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 111901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev return mFileImage; 112bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 113bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return null; 114bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 115bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 116f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 117bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public String getText(Object element) { 118bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev if (element instanceof ViewNode) { 119bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return ((ViewNode) element).name; 120bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 121bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return null; 122bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 123bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 124f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 125bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void addListener(ILabelProviderListener listener) { 126bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 127bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 128bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 129f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 130bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public boolean isLabelProperty(Object element, String property) { 131bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 132bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev return false; 133bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 134bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 135f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 136bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void removeListener(ILabelProviderListener listener) { 137bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 138bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 139bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 140bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 141bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public PixelPerfectTree(Composite parent) { 142c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev super(parent, SWT.NONE); 143c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev setLayout(new FillLayout()); 144901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer = new TreeViewer(this, SWT.SINGLE); 145901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS); 146bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 147901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTree = mTreeViewer.getTree(); 148901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTree.addSelectionListener(this); 149bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 150bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev loadResources(); 151bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 152901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev addDisposeListener(mDisposeListener); 153e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrev 154901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mModel = PixelPerfectModel.getModel(); 155bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev ContentProvider contentProvider = new ContentProvider(); 156901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.setContentProvider(contentProvider); 157901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.setLabelProvider(contentProvider); 158901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.setInput(mModel); 159901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mModel.addImageChangeListener(this); 160bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 161bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 162bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 16397b0639645d9c387cdd9884272e053c467a240daKonstantin Lopyrev private void loadResources() { 164bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev ImageLoader loader = ImageLoader.getDdmUiLibLoader(); 165901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mFileImage = loader.loadImage("file.png", Display.getDefault()); 166901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mFolderImage = loader.loadImage("folder.png", Display.getDefault()); 167bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 168bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 169901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private DisposeListener mDisposeListener = new DisposeListener() { 170f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 171e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrev public void widgetDisposed(DisposeEvent e) { 172901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mModel.removeImageChangeListener(PixelPerfectTree.this); 173e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrev } 174e361a961cbe1ead74659b4a761453b312d026e55Konstantin Lopyrev }; 175bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 176c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev @Override 177c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev public boolean setFocus() { 178901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev return mTree.setFocus(); 179bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 180bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 181f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 182bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void imageLoaded() { 18399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev Display.getDefault().syncExec(new Runnable() { 184f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 185bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void run() { 186901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.refresh(); 187901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mTreeViewer.expandAll(); 188bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 189bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev }); 190bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 191bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 192f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 193bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void imageChanged() { 194bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 195bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 196bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 197f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 198bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void crosshairMoved() { 199bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 200bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 201bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 202f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 203bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void selectionChanged() { 204bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 205bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 206bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 207f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 20897b0639645d9c387cdd9884272e053c467a240daKonstantin Lopyrev public void treeChanged() { 209bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev imageLoaded(); 210bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 211bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 212f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 213bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void widgetDefaultSelected(SelectionEvent e) { 214bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev // pass 215bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 216bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 217f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 218bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev public void widgetSelected(SelectionEvent e) { 219c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev // To combat phantom selection... 220901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev if (((TreeSelection) mTreeViewer.getSelection()).isEmpty()) { 221901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mModel.setSelected(null); 222c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev } else { 223901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mModel.setSelected((ViewNode) e.item.getData()); 224c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev } 225c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev } 226c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev 227f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 228c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev public void zoomChanged() { 229c1db1ab270b953da579e657de11d4486a49e1c1eKonstantin Lopyrev // pass 230bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev } 231bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev 232f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 23370a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev public void overlayChanged() { 23470a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev // pass 23570a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev } 23670a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev 237f526dc3bb658b07c5a96d0372b17ffa2fbbe6079Xavier Ducrohet @Override 23870a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev public void overlayTransparencyChanged() { 23970a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev // pass 24070a830d8ab396328ab984c75f923400af6a52e55Konstantin Lopyrev } 241bc494ce06410728bef8a6fa25f3da361cb66df79Konstantin Lopyrev} 242