• 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 
117     @Override
crosshairMoved()118     public void crosshairMoved() {
119         // pass
120     }
121 
122     @Override
treeChanged()123     public void treeChanged() {
124         // pass
125     }
126 
127     @Override
imageChanged()128     public void imageChanged() {
129         // pass
130     }
131 
132     @Override
imageLoaded()133     public void imageLoaded() {
134         Display.getDefault().syncExec(new Runnable() {
135             @Override
136             public void run() {
137                 Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
138                 mShowInLoupeAction.setEnabled(overlayImage != null);
139             }
140         });
141     }
142 
143     @Override
overlayChanged()144     public void overlayChanged() {
145         Display.getDefault().syncExec(new Runnable() {
146             @Override
147             public void run() {
148                 mShowInLoupeAction
149                         .setEnabled(PixelPerfectModel.getModel().getOverlayImage() != null);
150             }
151         });
152     }
153 
154     @Override
overlayTransparencyChanged()155     public void overlayTransparencyChanged() {
156         // pass
157     }
158 
159     @Override
selectionChanged()160     public void selectionChanged() {
161         // pass
162     }
163 
164     @Override
zoomChanged()165     public void zoomChanged() {
166         // pass
167     }
168 
169 }
170