diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/src/com/android/ide/eclipse/hierarchyviewer/views/PixelPerfectLoupeView.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/src/com/android/ide/eclipse/hierarchyviewer/views/PixelPerfectLoupeView.java | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/src/com/android/ide/eclipse/hierarchyviewer/views/PixelPerfectLoupeView.java b/eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/src/com/android/ide/eclipse/hierarchyviewer/views/PixelPerfectLoupeView.java new file mode 100644 index 000000000..93ad5986a --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.hierarchyviewer/src/com/android/ide/eclipse/hierarchyviewer/views/PixelPerfectLoupeView.java @@ -0,0 +1,171 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.hierarchyviewer.views; + +import com.android.ddmuilib.ImageLoader; +import com.android.hierarchyviewerlib.HierarchyViewerDirector; +import com.android.hierarchyviewerlib.actions.PixelPerfectAutoRefreshAction; +import com.android.hierarchyviewerlib.models.PixelPerfectModel; +import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener; +import com.android.hierarchyviewerlib.ui.PixelPerfectControls; +import com.android.hierarchyviewerlib.ui.PixelPerfectLoupe; +import com.android.hierarchyviewerlib.ui.PixelPerfectPixelPanel; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.part.ViewPart; + +public class PixelPerfectLoupeView extends ViewPart implements IImageChangeListener { + + public static final String ID = + "com.android.ide.eclipse.hierarchyviewer.views.PixelPerfectLoupeView"; //$NON-NLS-1$ + + private PixelPerfectLoupe mPixelPerfectLoupe; + + private Action mShowInLoupeAction = new Action("&Show Overlay", Action.AS_CHECK_BOX) { + @Override + public void run() { + mPixelPerfectLoupe.setShowOverlay(isChecked()); + } + }; + @Override + public void createPartControl(Composite parent) { + mShowInLoupeAction.setAccelerator(SWT.MOD1 + 'S'); + ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class); + Image image = imageLoader.loadImage("show-overlay.png", Display.getDefault()); //$NON-NLS-1$ + mShowInLoupeAction.setImageDescriptor(ImageDescriptor.createFromImage(image)); + mShowInLoupeAction.setToolTipText("Show the overlay in the loupe view"); + mShowInLoupeAction.setEnabled(PixelPerfectModel.getModel().getOverlayImage() != null); + PixelPerfectModel.getModel().addImageChangeListener(this); + + GridLayout loupeLayout = new GridLayout(); + loupeLayout.marginWidth = loupeLayout.marginHeight = 0; + loupeLayout.horizontalSpacing = loupeLayout.verticalSpacing = 0; + parent.setLayout(loupeLayout); + + Composite pixelPerfectLoupeBorder = new Composite(parent, SWT.BORDER); + pixelPerfectLoupeBorder.setLayoutData(new GridData(GridData.FILL_BOTH)); + GridLayout pixelPerfectLoupeBorderGridLayout = new GridLayout(); + pixelPerfectLoupeBorderGridLayout.marginWidth = + pixelPerfectLoupeBorderGridLayout.marginHeight = 0; + pixelPerfectLoupeBorderGridLayout.horizontalSpacing = + pixelPerfectLoupeBorderGridLayout.verticalSpacing = 0; + pixelPerfectLoupeBorder.setLayout(pixelPerfectLoupeBorderGridLayout); + + mPixelPerfectLoupe = new PixelPerfectLoupe(pixelPerfectLoupeBorder); + mPixelPerfectLoupe.setLayoutData(new GridData(GridData.FILL_BOTH)); + + PixelPerfectPixelPanel pixelPerfectPixelPanel = + new PixelPerfectPixelPanel(pixelPerfectLoupeBorder); + pixelPerfectPixelPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + // https://code.google.com/p/android/issues/detail?id=69199 + // Disabled until accessibility issues are fixed + // PixelPerfectControls pixelPerfectControls = + // new PixelPerfectControls(parent); + // pixelPerfectControls.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + placeActions(); + } + + private void placeActions() { + IActionBars actionBars = getViewSite().getActionBars(); + + IMenuManager mm = actionBars.getMenuManager(); + mm.removeAll(); + mm.add(PixelPerfectAutoRefreshAction.getAction()); + mm.add(mShowInLoupeAction); + + IToolBarManager tm = actionBars.getToolBarManager(); + tm.removeAll(); + tm.add(PixelPerfectAutoRefreshAction.getAction()); + tm.add(mShowInLoupeAction); + } + + @Override + public void dispose() { + super.dispose(); + PixelPerfectModel.getModel().removeImageChangeListener(this); + } + + @Override + public void setFocus() { + mPixelPerfectLoupe.setFocus(); + } + + @Override + public void crosshairMoved() { + // pass + } + + @Override + public void treeChanged() { + // pass + } + + @Override + public void imageChanged() { + // pass + } + + @Override + public void imageLoaded() { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + Image overlayImage = PixelPerfectModel.getModel().getOverlayImage(); + mShowInLoupeAction.setEnabled(overlayImage != null); + } + }); + } + + @Override + public void overlayChanged() { + Display.getDefault().syncExec(new Runnable() { + @Override + public void run() { + mShowInLoupeAction + .setEnabled(PixelPerfectModel.getModel().getOverlayImage() != null); + } + }); + } + + @Override + public void overlayTransparencyChanged() { + // pass + } + + @Override + public void selectionChanged() { + // pass + } + + @Override + public void zoomChanged() { + // pass + } + +} |