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.TreeViewModel;
     21 import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
     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.ModifyEvent;
     27 import org.eclipse.swt.events.ModifyListener;
     28 import org.eclipse.swt.events.SelectionEvent;
     29 import org.eclipse.swt.events.SelectionListener;
     30 import org.eclipse.swt.layout.GridData;
     31 import org.eclipse.swt.layout.GridLayout;
     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 import org.eclipse.swt.widgets.Text;
     37 
     38 public class TreeViewControls extends Composite implements ITreeChangeListener {
     39 
     40     private Text mFilterText;
     41 
     42     private Slider mZoomSlider;
     43 
     44     public TreeViewControls(Composite parent) {
     45         super(parent, SWT.NONE);
     46         GridLayout layout = new GridLayout(5, false);
     47         layout.marginWidth = layout.marginHeight = 2;
     48         layout.verticalSpacing = layout.horizontalSpacing = 4;
     49         setLayout(layout);
     50 
     51         Label filterLabel = new Label(this, SWT.NONE);
     52         filterLabel.setText("Filter by class or id:");
     53         filterLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
     54 
     55         mFilterText = new Text(this, SWT.LEFT | SWT.SINGLE);
     56         mFilterText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
     57         mFilterText.addModifyListener(mFilterTextModifyListener);
     58         mFilterText.setText(HierarchyViewerDirector.getDirector().getFilterText());
     59 
     60         Label smallZoomLabel = new Label(this, SWT.NONE);
     61         smallZoomLabel.setText(" 20%");
     62         smallZoomLabel
     63                 .setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
     64 
     65         mZoomSlider = new Slider(this, SWT.HORIZONTAL);
     66         GridData zoomSliderGridData = new GridData(GridData.CENTER, GridData.CENTER, false, false);
     67         zoomSliderGridData.widthHint = 190;
     68         mZoomSlider.setLayoutData(zoomSliderGridData);
     69         mZoomSlider.setMinimum((int) (TreeViewModel.MIN_ZOOM * 10));
     70         mZoomSlider.setMaximum((int) (TreeViewModel.MAX_ZOOM * 10 + 1));
     71         mZoomSlider.setThumb(1);
     72         mZoomSlider.setSelection((int) Math.round(TreeViewModel.getModel().getZoom() * 10));
     73 
     74         mZoomSlider.addSelectionListener(mZoomSliderSelectionListener);
     75 
     76         Label largeZoomLabel = new Label(this, SWT.NONE);
     77         largeZoomLabel
     78                 .setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
     79         largeZoomLabel.setText("200%");
     80 
     81         addDisposeListener(mDisposeListener);
     82 
     83         TreeViewModel.getModel().addTreeChangeListener(this);
     84     }
     85 
     86     private DisposeListener mDisposeListener = new DisposeListener() {
     87         @Override
     88         public void widgetDisposed(DisposeEvent e) {
     89             TreeViewModel.getModel().removeTreeChangeListener(TreeViewControls.this);
     90         }
     91     };
     92 
     93     private SelectionListener mZoomSliderSelectionListener = new SelectionListener() {
     94         private int oldValue;
     95 
     96         @Override
     97         public void widgetDefaultSelected(SelectionEvent e) {
     98             // pass
     99         }
    100 
    101         @Override
    102         public void widgetSelected(SelectionEvent e) {
    103             int newValue = mZoomSlider.getSelection();
    104             if (oldValue != newValue) {
    105                 TreeViewModel.getModel().removeTreeChangeListener(TreeViewControls.this);
    106                 TreeViewModel.getModel().setZoom(newValue / 10.0);
    107                 TreeViewModel.getModel().addTreeChangeListener(TreeViewControls.this);
    108                 oldValue = newValue;
    109             }
    110         }
    111     };
    112 
    113     private ModifyListener mFilterTextModifyListener = new ModifyListener() {
    114         @Override
    115         public void modifyText(ModifyEvent e) {
    116             HierarchyViewerDirector.getDirector().filterNodes(mFilterText.getText());
    117         }
    118     };
    119 
    120     @Override
    121     public void selectionChanged() {
    122         // pass
    123     }
    124 
    125     @Override
    126     public void treeChanged() {
    127         Display.getDefault().syncExec(new Runnable() {
    128             @Override
    129             public void run() {
    130                 if (TreeViewModel.getModel().getTree() != null) {
    131                     mZoomSlider.setSelection((int) Math
    132                             .round(TreeViewModel.getModel().getZoom() * 10));
    133                 }
    134                 mFilterText.setText(""); //$NON-NLS-1$
    135             }
    136         });
    137     }
    138 
    139     @Override
    140     public void viewportChanged() {
    141         // pass
    142     }
    143 
    144     @Override
    145     public void zoomChanged() {
    146         Display.getDefault().syncExec(new Runnable() {
    147             @Override
    148             public void run() {
    149                 mZoomSlider.setSelection((int) Math.round(TreeViewModel.getModel().getZoom() * 10));
    150             }
    151         });
    152     };
    153 }
    154