Home | History | Annotate | Download | only in ui
      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.hierarchyviewerlib.ui;
     18 
     19 import com.android.hierarchyviewerlib.HierarchyViewerDirector;
     20 import com.android.hierarchyviewerlib.models.PixelPerfectModel;
     21 import com.android.hierarchyviewerlib.models.PixelPerfectModel.IImageChangeListener;
     22 
     23 import org.eclipse.swt.SWT;
     24 import org.eclipse.swt.events.DisposeEvent;
     25 import org.eclipse.swt.events.DisposeListener;
     26 import org.eclipse.swt.events.SelectionEvent;
     27 import org.eclipse.swt.events.SelectionListener;
     28 import org.eclipse.swt.graphics.Image;
     29 import org.eclipse.swt.layout.FormAttachment;
     30 import org.eclipse.swt.layout.FormData;
     31 import org.eclipse.swt.layout.FormLayout;
     32 import org.eclipse.swt.widgets.Composite;
     33 import org.eclipse.swt.widgets.Display;
     34 import org.eclipse.swt.widgets.Label;
     35 import org.eclipse.swt.widgets.Slider;
     36 
     37 public class PixelPerfectControls extends Composite implements IImageChangeListener {
     38 
     39     private Slider mOverlaySlider;
     40 
     41     private Slider mZoomSlider;
     42 
     43     private Slider mAutoRefreshSlider;
     44 
     45     public PixelPerfectControls(Composite parent) {
     46         super(parent, SWT.NONE);
     47         setLayout(new FormLayout());
     48 
     49         Label overlayTransparencyRight = new Label(this, SWT.NONE);
     50         overlayTransparencyRight.setText("100%");
     51         FormData overlayTransparencyRightData = new FormData();
     52         overlayTransparencyRightData.right = new FormAttachment(100, -2);
     53         overlayTransparencyRightData.top = new FormAttachment(0, 2);
     54         overlayTransparencyRight.setLayoutData(overlayTransparencyRightData);
     55 
     56         Label refreshRight = new Label(this, SWT.NONE);
     57         refreshRight.setText("40s");
     58         FormData refreshRightData = new FormData();
     59         refreshRightData.right = new FormAttachment(100, -2);
     60         refreshRightData.top = new FormAttachment(overlayTransparencyRight, 2);
     61         refreshRightData.left = new FormAttachment(overlayTransparencyRight, 0, SWT.LEFT);
     62         refreshRight.setLayoutData(refreshRightData);
     63 
     64         Label zoomRight = new Label(this, SWT.NONE);
     65         zoomRight.setText("24x");
     66         FormData zoomRightData = new FormData();
     67         zoomRightData.right = new FormAttachment(100, -2);
     68         zoomRightData.top = new FormAttachment(refreshRight, 2);
     69         zoomRightData.left = new FormAttachment(overlayTransparencyRight, 0, SWT.LEFT);
     70         zoomRight.setLayoutData(zoomRightData);
     71 
     72         Label overlayTransparency = new Label(this, SWT.NONE);
     73         Label refresh = new Label(this, SWT.NONE);
     74 
     75         overlayTransparency.setText("Overlay:");
     76         FormData overlayTransparencyData = new FormData();
     77         overlayTransparencyData.left = new FormAttachment(0, 2);
     78         overlayTransparencyData.top = new FormAttachment(0, 2);
     79         overlayTransparencyData.right = new FormAttachment(refresh, 0, SWT.RIGHT);
     80         overlayTransparency.setLayoutData(overlayTransparencyData);
     81 
     82         refresh.setText("Refresh Rate:");
     83         FormData refreshData = new FormData();
     84         refreshData.top = new FormAttachment(overlayTransparency, 2);
     85         refreshData.left = new FormAttachment(0, 2);
     86         refresh.setLayoutData(refreshData);
     87 
     88         Label zoom = new Label(this, SWT.NONE);
     89         zoom.setText("Zoom:");
     90         FormData zoomData = new FormData();
     91         zoomData.right = new FormAttachment(refresh, 0, SWT.RIGHT);
     92         zoomData.top = new FormAttachment(refresh, 2);
     93         zoomData.left = new FormAttachment(0, 2);
     94         zoom.setLayoutData(zoomData);
     95 
     96         Label overlayTransparencyLeft = new Label(this, SWT.RIGHT);
     97         overlayTransparencyLeft.setText("0%");
     98         FormData overlayTransparencyLeftData = new FormData();
     99         overlayTransparencyLeftData.top = new FormAttachment(0, 2);
    100         overlayTransparencyLeftData.left = new FormAttachment(overlayTransparency, 2);
    101         overlayTransparencyLeft.setLayoutData(overlayTransparencyLeftData);
    102 
    103         Label refreshLeft = new Label(this, SWT.RIGHT);
    104         refreshLeft.setText("1s");
    105         FormData refreshLeftData = new FormData();
    106         refreshLeftData.top = new FormAttachment(overlayTransparencyLeft, 2);
    107         refreshLeftData.left = new FormAttachment(refresh, 2);
    108         refreshLeft.setLayoutData(refreshLeftData);
    109 
    110         Label zoomLeft = new Label(this, SWT.RIGHT);
    111         zoomLeft.setText("2x");
    112         FormData zoomLeftData = new FormData();
    113         zoomLeftData.top = new FormAttachment(refreshLeft, 2);
    114         zoomLeftData.left = new FormAttachment(zoom, 2);
    115         zoomLeft.setLayoutData(zoomLeftData);
    116 
    117         mOverlaySlider = new Slider(this, SWT.HORIZONTAL);
    118         mOverlaySlider.setMinimum(0);
    119         mOverlaySlider.setMaximum(101);
    120         mOverlaySlider.setThumb(1);
    121         mOverlaySlider.setSelection((int) Math.round(PixelPerfectModel.getModel()
    122                 .getOverlayTransparency() * 100));
    123 
    124         Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
    125         mOverlaySlider.setEnabled(overlayImage != null);
    126         FormData overlaySliderData = new FormData();
    127         overlaySliderData.right = new FormAttachment(overlayTransparencyRight, -4);
    128         overlaySliderData.top = new FormAttachment(0, 2);
    129         overlaySliderData.left = new FormAttachment(overlayTransparencyLeft, 4);
    130         mOverlaySlider.setLayoutData(overlaySliderData);
    131 
    132         mOverlaySlider.addSelectionListener(overlaySliderSelectionListener);
    133 
    134         mAutoRefreshSlider = new Slider(this, SWT.HORIZONTAL);
    135         mAutoRefreshSlider.setMinimum(1);
    136         mAutoRefreshSlider.setMaximum(41);
    137         mAutoRefreshSlider.setThumb(1);
    138         mAutoRefreshSlider.setSelection(HierarchyViewerDirector.getDirector()
    139                 .getPixelPerfectAutoRefreshInverval());
    140         FormData refreshSliderData = new FormData();
    141         refreshSliderData.right = new FormAttachment(overlayTransparencyRight, -4);
    142         refreshSliderData.top = new FormAttachment(overlayTransparencyRight, 2);
    143         refreshSliderData.left = new FormAttachment(mOverlaySlider, 0, SWT.LEFT);
    144         mAutoRefreshSlider.setLayoutData(refreshSliderData);
    145 
    146         mAutoRefreshSlider.addSelectionListener(mRefreshSliderSelectionListener);
    147 
    148         mZoomSlider = new Slider(this, SWT.HORIZONTAL);
    149         mZoomSlider.setMinimum(2);
    150         mZoomSlider.setMaximum(25);
    151         mZoomSlider.setThumb(1);
    152         mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
    153         FormData zoomSliderData = new FormData();
    154         zoomSliderData.right = new FormAttachment(overlayTransparencyRight, -4);
    155         zoomSliderData.top = new FormAttachment(refreshRight, 2);
    156         zoomSliderData.left = new FormAttachment(mOverlaySlider, 0, SWT.LEFT);
    157         mZoomSlider.setLayoutData(zoomSliderData);
    158 
    159         mZoomSlider.addSelectionListener(mZoomSliderSelectionListener);
    160 
    161         addDisposeListener(mDisposeListener);
    162 
    163         PixelPerfectModel.getModel().addImageChangeListener(this);
    164     }
    165 
    166     private DisposeListener mDisposeListener = new DisposeListener() {
    167         @Override
    168         public void widgetDisposed(DisposeEvent e) {
    169             PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
    170         }
    171     };
    172 
    173     private SelectionListener overlaySliderSelectionListener = new SelectionListener() {
    174         private int oldValue;
    175 
    176         @Override
    177         public void widgetDefaultSelected(SelectionEvent e) {
    178             // pass
    179         }
    180 
    181         @Override
    182         public void widgetSelected(SelectionEvent e) {
    183             int newValue = mOverlaySlider.getSelection();
    184             if (oldValue != newValue) {
    185                 PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
    186                 PixelPerfectModel.getModel().setOverlayTransparency(newValue / 100.0);
    187                 PixelPerfectModel.getModel().addImageChangeListener(PixelPerfectControls.this);
    188                 oldValue = newValue;
    189             }
    190         }
    191     };
    192 
    193     private SelectionListener mRefreshSliderSelectionListener = new SelectionListener() {
    194         private int oldValue;
    195 
    196         @Override
    197         public void widgetDefaultSelected(final SelectionEvent e) {
    198             // pass
    199         }
    200 
    201         @Override
    202         public void widgetSelected(SelectionEvent e) {
    203             int newValue = mAutoRefreshSlider.getSelection();
    204             if (oldValue != newValue) {
    205                 HierarchyViewerDirector.getDirector().setPixelPerfectAutoRefreshInterval(newValue);
    206             }
    207         }
    208     };
    209 
    210     private SelectionListener mZoomSliderSelectionListener = new SelectionListener() {
    211         private int oldValue;
    212 
    213         @Override
    214         public void widgetDefaultSelected(SelectionEvent e) {
    215             // pass
    216         }
    217 
    218         @Override
    219         public void widgetSelected(SelectionEvent e) {
    220             int newValue = mZoomSlider.getSelection();
    221             if (oldValue != newValue) {
    222                 PixelPerfectModel.getModel().removeImageChangeListener(PixelPerfectControls.this);
    223                 PixelPerfectModel.getModel().setZoom(newValue);
    224                 PixelPerfectModel.getModel().addImageChangeListener(PixelPerfectControls.this);
    225                 oldValue = newValue;
    226             }
    227         }
    228     };
    229 
    230     @Override
    231     public void crosshairMoved() {
    232         // pass
    233     }
    234 
    235     @Override
    236     public void treeChanged() {
    237         // pass
    238     }
    239 
    240     @Override
    241     public void imageChanged() {
    242         // pass
    243     }
    244 
    245     @Override
    246     public void imageLoaded() {
    247         Display.getDefault().syncExec(new Runnable() {
    248             @Override
    249             public void run() {
    250                 Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
    251                 mOverlaySlider.setEnabled(overlayImage != null);
    252                 if (PixelPerfectModel.getModel().getImage() == null) {
    253                 } else {
    254                     mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
    255                 }
    256             }
    257         });
    258     }
    259 
    260     @Override
    261     public void overlayChanged() {
    262         Display.getDefault().syncExec(new Runnable() {
    263             @Override
    264             public void run() {
    265                 Image overlayImage = PixelPerfectModel.getModel().getOverlayImage();
    266                 mOverlaySlider.setEnabled(overlayImage != null);
    267             }
    268         });
    269     }
    270 
    271     @Override
    272     public void overlayTransparencyChanged() {
    273         Display.getDefault().syncExec(new Runnable() {
    274             @Override
    275             public void run() {
    276                 mOverlaySlider.setSelection((int) (PixelPerfectModel.getModel()
    277                         .getOverlayTransparency() * 100));
    278             }
    279         });
    280     }
    281 
    282     @Override
    283     public void selectionChanged() {
    284         // pass
    285     }
    286 
    287     @Override
    288     public void zoomChanged() {
    289         Display.getDefault().syncExec(new Runnable() {
    290             @Override
    291             public void run() {
    292                 mZoomSlider.setSelection(PixelPerfectModel.getModel().getZoom());
    293             }
    294         });
    295     }
    296 }
    297