• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.ide.eclipse.hierarchyviewer.views;
18 
19 import com.android.ddmuilib.ImageLoader;
20 import com.android.hierarchyviewerlib.HierarchyViewerDirector;
21 import com.android.hierarchyviewerlib.actions.PixelPerfectAutoRefreshAction;
22 import com.android.hierarchyviewerlib.models.PixelPerfectModel;
23 import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
24 import com.android.hierarchyviewerlib.ui.PixelPerfectControls;
25 import com.android.hierarchyviewerlib.ui.PixelPerfectLoupe;
26 import com.android.hierarchyviewerlib.ui.PixelPerfectPixelPanel;
27 
28 import org.eclipse.jface.action.Action;
29 import org.eclipse.jface.action.IMenuManager;
30 import org.eclipse.jface.action.IToolBarManager;
31 import org.eclipse.jface.resource.ImageDescriptor;
32 import org.eclipse.swt.SWT;
33 import org.eclipse.swt.graphics.Image;
34 import org.eclipse.swt.layout.GridData;
35 import org.eclipse.swt.layout.GridLayout;
36 import org.eclipse.swt.widgets.Composite;
37 import org.eclipse.swt.widgets.Display;
38 import org.eclipse.ui.IActionBars;
39 import org.eclipse.ui.part.ViewPart;
40 
41 public class PixelPerfectLoupeView extends ViewPart implements IImageChangeListener {
42 
43     public static final String ID =
44             "com.android.ide.eclipse.hierarchyviewer.views.PixelPerfectLoupeView"; //$NON-NLS-1$
45 
46     private PixelPerfectLoupe mPixelPerfectLoupe;
47 
48     private Action mShowInLoupeAction = new Action("&Show Overlay", Action.AS_CHECK_BOX) {
49         @Override
50         public void run() {
51             mPixelPerfectLoupe.setShowOverlay(isChecked());
52         }
53     };
54     @Override
createPartControl(Composite parent)55     public void createPartControl(Composite parent) {
56         mShowInLoupeAction.setAccelerator(SWT.MOD1 + 'S');
57         ImageLoader imageLoader = ImageLoader.getLoader(HierarchyViewerDirector.class);
58         Image image = imageLoader.loadImage("show-overlay.png", Display.getDefault()); //$NON-NLS-1$
59         mShowInLoupeAction.setImageDescriptor(ImageDescriptor.createFromImage(image));
60         mShowInLoupeAction.setToolTipText("Show the overlay in the loupe view");
61         mShowInLoupeAction.setEnabled(PixelPerfectModel.getModel().getOverlayImage() != null);
62         PixelPerfectModel.getModel().addImageChangeListener(this);
63 
64         GridLayout loupeLayout = new GridLayout();
65         loupeLayout.marginWidth = loupeLayout.marginHeight = 0;
66         loupeLayout.horizontalSpacing = loupeLayout.verticalSpacing = 0;
67         parent.setLayout(loupeLayout);
68 
69         Composite pixelPerfectLoupeBorder = new Composite(parent, SWT.BORDER);
70         pixelPerfectLoupeBorder.setLayoutData(new GridData(GridData.FILL_BOTH));
71         GridLayout pixelPerfectLoupeBorderGridLayout = new GridLayout();
72         pixelPerfectLoupeBorderGridLayout.marginWidth =
73                 pixelPerfectLoupeBorderGridLayout.marginHeight = 0;
74         pixelPerfectLoupeBorderGridLayout.horizontalSpacing =
75                 pixelPerfectLoupeBorderGridLayout.verticalSpacing = 0;
76         pixelPerfectLoupeBorder.setLayout(pixelPerfectLoupeBorderGridLayout);
77 
78         mPixelPerfectLoupe = new PixelPerfectLoupe(pixelPerfectLoupeBorder);
79         mPixelPerfectLoupe.setLayoutData(new GridData(GridData.FILL_BOTH));
80 
81         PixelPerfectPixelPanel pixelPerfectPixelPanel =
82                 new PixelPerfectPixelPanel(pixelPerfectLoupeBorder);
83         pixelPerfectPixelPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
84 
85         PixelPerfectControls pixelPerfectControls =
86                 new PixelPerfectControls(parent);
87         pixelPerfectControls.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
88 
89         placeActions();
90     }
91 
placeActions()92     private void placeActions() {
93         IActionBars actionBars = getViewSite().getActionBars();
94 
95         IMenuManager mm = actionBars.getMenuManager();
96         mm.removeAll();
97         mm.add(PixelPerfectAutoRefreshAction.getAction());
98         mm.add(mShowInLoupeAction);
99 
100         IToolBarManager tm = actionBars.getToolBarManager();
101         tm.removeAll();
102         tm.add(PixelPerfectAutoRefreshAction.getAction());
103         tm.add(mShowInLoupeAction);
104     }
105 
106     @Override
dispose()107     public void dispose() {
108         super.dispose();
109         PixelPerfectModel.getModel().removeImageChangeListener(this);
110     }
111 
112     @Override
setFocus()113     public void setFocus() {
114         mPixelPerfectLoupe.setFocus();
115     }
116 
crosshairMoved()117     public void crosshairMoved() {
118         // pass
119     }
120 
treeChanged()121     public void treeChanged() {
122         // pass
123     }
124 
imageChanged()125     public void imageChanged() {
126         // pass
127     }
128 
imageLoaded()129     public void imageLoaded() {
130         Display.getDefault().syncExec(new Runnable() {
131             public void run() {
132                 Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
133                 mShowInLoupeAction.setEnabled(overlayImage != null);
134             }
135         });
136     }
137 
overlayChanged()138     public void overlayChanged() {
139         Display.getDefault().syncExec(new Runnable() {
140             public void run() {
141                 mShowInLoupeAction
142                         .setEnabled(PixelPerfectModel.getModel().getOverlayImage() != null);
143             }
144         });
145     }
146 
overlayTransparencyChanged()147     public void overlayTransparencyChanged() {
148         // pass
149     }
150 
selectionChanged()151     public void selectionChanged() {
152         // pass
153     }
154 
zoomChanged()155     public void zoomChanged() {
156         // pass
157     }
158 
159 }
160