/*
* 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.hierarchyviewerlib.ui;
import com.android.hierarchyviewerlib.HierarchyViewerDirector;
import com.android.hierarchyviewerlib.models.TreeViewModel;
import com.android.hierarchyviewerlib.models.TreeViewModel.ITreeChangeListener;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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.swt.widgets.Label;
import org.eclipse.swt.widgets.Slider;
import org.eclipse.swt.widgets.Text;
public class TreeViewControls extends Composite implements ITreeChangeListener {
private Text mFilterText;
private Slider mZoomSlider;
public TreeViewControls(Composite parent) {
super(parent, SWT.NONE);
GridLayout layout = new GridLayout(5, false);
layout.marginWidth = layout.marginHeight = 2;
layout.verticalSpacing = layout.horizontalSpacing = 4;
setLayout(layout);
Label filterLabel = new Label(this, SWT.NONE);
filterLabel.setText("Filter by class or id:");
filterLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
mFilterText = new Text(this, SWT.LEFT | SWT.SINGLE);
mFilterText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
mFilterText.addModifyListener(mFilterTextModifyListener);
mFilterText.setText(HierarchyViewerDirector.getDirector().getFilterText());
Label smallZoomLabel = new Label(this, SWT.NONE);
smallZoomLabel.setText(" 20%");
smallZoomLabel
.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
mZoomSlider = new Slider(this, SWT.HORIZONTAL);
GridData zoomSliderGridData = new GridData(GridData.CENTER, GridData.CENTER, false, false);
zoomSliderGridData.widthHint = 190;
mZoomSlider.setLayoutData(zoomSliderGridData);
mZoomSlider.setMinimum((int) (TreeViewModel.MIN_ZOOM * 10));
mZoomSlider.setMaximum((int) (TreeViewModel.MAX_ZOOM * 10 + 1));
mZoomSlider.setThumb(1);
mZoomSlider.setSelection((int) Math.round(TreeViewModel.getModel().getZoom() * 10));
mZoomSlider.addSelectionListener(mZoomSliderSelectionListener);
Label largeZoomLabel = new Label(this, SWT.NONE);
largeZoomLabel
.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, true));
largeZoomLabel.setText("200%");
addDisposeListener(mDisposeListener);
TreeViewModel.getModel().addTreeChangeListener(this);
}
private DisposeListener mDisposeListener = new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
TreeViewModel.getModel().removeTreeChangeListener(TreeViewControls.this);
}
};
private SelectionListener mZoomSliderSelectionListener = new SelectionListener() {
private int oldValue;
public void widgetDefaultSelected(SelectionEvent e) {
// pass
}
public void widgetSelected(SelectionEvent e) {
int newValue = mZoomSlider.getSelection();
if (oldValue != newValue) {
TreeViewModel.getModel().removeTreeChangeListener(TreeViewControls.this);
TreeViewModel.getModel().setZoom(newValue / 10.0);
TreeViewModel.getModel().addTreeChangeListener(TreeViewControls.this);
oldValue = newValue;
}
}
};
private ModifyListener mFilterTextModifyListener = new ModifyListener() {
public void modifyText(ModifyEvent e) {
HierarchyViewerDirector.getDirector().filterNodes(mFilterText.getText());
}
};
public void selectionChanged() {
// pass
}
public void treeChanged() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
if (TreeViewModel.getModel().getTree() != null) {
mZoomSlider.setSelection((int) Math
.round(TreeViewModel.getModel().getZoom() * 10));
}
mFilterText.setText(""); //$NON-NLS-1$
}
});
}
public void viewportChanged() {
// pass
}
public void zoomChanged() {
Display.getDefault().syncExec(new Runnable() {
public void run() {
mZoomSlider.setSelection((int) Math.round(TreeViewModel.getModel().getZoom() * 10));
}
});
};
}