199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev/* 299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * Copyright (C) 2010 The Android Open Source Project 399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * 499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * Licensed under the Apache License, Version 2.0 (the "License"); 599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * you may not use this file except in compliance with the License. 699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * You may obtain a copy of the License at 799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * 899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * http://www.apache.org/licenses/LICENSE-2.0 999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * 1099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * Unless required by applicable law or agreed to in writing, software 1199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * distributed under the License is distributed on an "AS IS" BASIS, 1299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * See the License for the specific language governing permissions and 1499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev * limitations under the License. 1599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev */ 1699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 1799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevpackage com.android.ide.eclipse.hierarchyviewer.views; 1899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 1999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.hierarchyviewerlib.actions.InspectScreenshotAction; 2099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.hierarchyviewerlib.actions.LoadViewHierarchyAction; 2199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.hierarchyviewerlib.actions.RefreshWindowsAction; 2299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.hierarchyviewerlib.ui.DeviceSelector; 2399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.ide.eclipse.hierarchyviewer.PixelPerfectPespective; 2499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport com.android.ide.eclipse.hierarchyviewer.TreeViewPerspective; 2599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 2699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.jface.action.IMenuManager; 2799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.jface.action.IToolBarManager; 2899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.swt.layout.FillLayout; 2999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.swt.widgets.Composite; 3099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.ui.IActionBars; 3199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.ui.IPerspectiveDescriptor; 3299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.ui.IPerspectiveListener; 3399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.ui.IWorkbenchPage; 3499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevimport org.eclipse.ui.part.ViewPart; 3599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 3699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrevpublic class DeviceSelectorView extends ViewPart implements IPerspectiveListener { 3799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 3899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public static final String ID = 39901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev "com.android.ide.eclipse.hierarchyviewer.views.DeviceSelectorView"; //$NON-NLS-1$ 4099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 41901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev private DeviceSelector mDeviceSelector; 4299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 4399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev @Override 4499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public void createPartControl(Composite parent) { 4599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev parent.setLayout(new FillLayout()); 4699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 4799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 4899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev IPerspectiveDescriptor perspective = getViewSite().getPage().getPerspective(); 4999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev boolean doTreeViewStuff = true; 5099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev boolean doPixelPerfectStuff = true; 5199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev if (perspective.getId().equals(PixelPerfectPespective.ID)) { 5299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev doTreeViewStuff = false; 5399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } else if (perspective.getId().equals(TreeViewPerspective.ID)) { 5499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev doPixelPerfectStuff = false; 5599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 56901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mDeviceSelector = new DeviceSelector(parent, doTreeViewStuff, doPixelPerfectStuff); 5799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 5899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev placeActions(doTreeViewStuff, doPixelPerfectStuff); 5999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 6099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev getViewSite().getWorkbenchWindow().addPerspectiveListener(this); 6199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 6299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 6399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev @Override 6499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public void dispose() { 6599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev super.dispose(); 6699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev getViewSite().getWorkbenchWindow().removePerspectiveListener(this); 6799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 6899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 6999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev private void placeActions(boolean doTreeViewStuff, boolean doPixelPerfectStuff) { 7099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev IActionBars actionBars = getViewSite().getActionBars(); 7199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 7299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev IMenuManager mm = actionBars.getMenuManager(); 7399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev mm.removeAll(); 7499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev mm.add(RefreshWindowsAction.getAction()); 7599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 7699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev IToolBarManager tm = actionBars.getToolBarManager(); 7799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev tm.removeAll(); 7899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev tm.add(RefreshWindowsAction.getAction()); 7999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 8099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev if (doTreeViewStuff) { 8199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev mm.add(LoadViewHierarchyAction.getAction()); 8299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev tm.add(LoadViewHierarchyAction.getAction()); 8399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 8499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev if (doPixelPerfectStuff) { 8599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev mm.add(InspectScreenshotAction.getAction()); 8699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev tm.add(InspectScreenshotAction.getAction()); 8799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 8899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 8999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev mm.updateAll(true); 9099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev tm.update(true); 9199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev actionBars.updateActionBars(); 9299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 9399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 9499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev @Override 9599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public void setFocus() { 96901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mDeviceSelector.setFocus(); 9799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 9899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 99ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 10099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public void perspectiveActivated(IWorkbenchPage page, IPerspectiveDescriptor perspective) { 10199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev if (perspective.getId().equals(PixelPerfectPespective.ID)) { 102901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mDeviceSelector.setMode(false, true); 10399bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev placeActions(false, true); 10499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } else if (perspective.getId().equals(TreeViewPerspective.ID)) { 105901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mDeviceSelector.setMode(true, false); 10699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev placeActions(true, false); 10799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } else { 108901803a3b2aaeafb4074974ec5bf9b08cc39d1c8Konstantin Lopyrev mDeviceSelector.setMode(true, true); 10999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev placeActions(true, true); 11099bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 11199bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 11299bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 113ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye @Override 11499bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev public void perspectiveChanged(IWorkbenchPage page, IPerspectiveDescriptor perspective, 11599bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev String changeId) { 11699bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev // pass 11799bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev } 11899bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev 11999bd6912e7b5b97fc6d4bb787e76b2d9dfffd7aeKonstantin Lopyrev} 120