diff options
Diffstat (limited to 'hierarchyviewer2/libs/hierarchyvieweruilib')
14 files changed, 0 insertions, 2303 deletions
diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/.classpath b/hierarchyviewer2/libs/hierarchyvieweruilib/.classpath deleted file mode 100644 index 4bddd6c..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/.classpath +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="src" path="src"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/ANDROID_SWT"/> - <classpathentry combineaccessrules="false" kind="src" path="/hierarchyviewerlib"/> - <classpathentry combineaccessrules="false" kind="src" path="/ddmlib"/> - <classpathentry combineaccessrules="false" kind="src" path="/ddmuilib"/> - <classpathentry kind="output" path="bin"/> -</classpath> diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/.gitignore b/hierarchyviewer2/libs/hierarchyvieweruilib/.gitignore deleted file mode 100644 index e660fd9..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -bin/ diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/.project b/hierarchyviewer2/libs/hierarchyvieweruilib/.project deleted file mode 100644 index e9b1298..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/.project +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>hierarchyvieweruilib</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - </natures> -</projectDescription> diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/Android.mk b/hierarchyviewer2/libs/hierarchyvieweruilib/Android.mk deleted file mode 100644 index 341880b..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/Android.mk +++ /dev/null @@ -1,16 +0,0 @@ -# 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. - -HIERARCHYVIEWERUILIB_LOCAL_DIR := $(call my-dir) -include $(HIERARCHYVIEWERUILIB_LOCAL_DIR)/src/Android.mk diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/Android.mk b/hierarchyviewer2/libs/hierarchyvieweruilib/src/Android.mk deleted file mode 100644 index 44d6b51..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/Android.mk +++ /dev/null @@ -1,29 +0,0 @@ -# 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. - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_SRC_FILES := $(call all-subdir-java-files) - -LOCAL_JAVA_LIBRARIES := \ - ddmlib \ - ddmuilib \ - hierarchyviewerlib \ - swt \ - org.eclipse.jface_3.4.2.M20090107-0800 -LOCAL_MODULE := hierarchyvieweruilib - -include $(BUILD_HOST_JAVA_LIBRARY) - diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java deleted file mode 100644 index 49eb418..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/DeviceSelector.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.ddmlib.IDevice; -import com.android.ddmuilib.ImageLoader; -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.device.Window; -import com.android.hierarchyviewerlib.models.DeviceSelectionModel; -import com.android.hierarchyviewerlib.models.DeviceSelectionModel.WindowChangeListener; - -import org.eclipse.jface.viewers.IFontProvider; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.FontData; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; - -public class DeviceSelector extends Composite implements WindowChangeListener, SelectionListener { - private TreeViewer treeViewer; - - private Tree tree; - - private DeviceSelectionModel model; - - private Font boldFont; - - private Image deviceImage; - - private Image emulatorImage; - - private final static int ICON_WIDTH = 16; - - private class ContentProvider implements ITreeContentProvider, ILabelProvider, IFontProvider { - public Object[] getChildren(Object parentElement) { - if (parentElement instanceof IDevice) { - Window[] list = model.getWindows((IDevice) parentElement); - if (list != null) { - return list; - } - } - return new Object[0]; - } - - public Object getParent(Object element) { - if (element instanceof Window) { - return ((Window) element).getDevice(); - } - return null; - } - - public boolean hasChildren(Object element) { - if (element instanceof IDevice) { - Window[] list = model.getWindows((IDevice) element); - if (list != null) { - return list.length != 0; - } - } - return false; - } - - public Object[] getElements(Object inputElement) { - if (inputElement instanceof DeviceSelectionModel) { - return model.getDevices(); - } - return new Object[0]; - } - - public void dispose() { - // pass - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // pass - } - - public Image getImage(Object element) { - if (element instanceof IDevice) { - if (((IDevice) element).isEmulator()) { - return emulatorImage; - } - return deviceImage; - } - return null; - } - - public String getText(Object element) { - if (element instanceof IDevice) { - return ((IDevice) element).toString(); - } else if (element instanceof Window) { - return ((Window) element).getTitle(); - } - return null; - } - - public Font getFont(Object element) { - if (element instanceof Window) { - int focusedWindow = model.getFocusedWindow(((Window) element).getDevice()); - if (focusedWindow == ((Window) element).getHashCode()) { - return boldFont; - } - } - return null; - } - - public void addListener(ILabelProviderListener listener) { - // pass - } - - public boolean isLabelProperty(Object element, String property) { - // pass - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // pass - } - } - - public DeviceSelector(Composite parent) { - super(parent, SWT.NONE); - setLayout(new FillLayout()); - treeViewer = new TreeViewer(this, SWT.SINGLE); - treeViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS); - - tree = treeViewer.getTree(); - tree.setLinesVisible(true); - tree.addSelectionListener(this); - - addDisposeListener(disposeListener); - - loadResources(); - - model = ComponentRegistry.getDeviceSelectionModel(); - ContentProvider contentProvider = new ContentProvider(); - treeViewer.setContentProvider(contentProvider); - treeViewer.setLabelProvider(contentProvider); - treeViewer.setInput(model); - model.addWindowChangeListener(this); - } - - public void loadResources() { - Display display = Display.getDefault(); - Font systemFont = display.getSystemFont(); - FontData[] fontData = systemFont.getFontData(); - FontData[] newFontData = new FontData[fontData.length]; - for (int i = 0; i < fontData.length; i++) { - newFontData[i] = - new FontData(fontData[i].getName(), fontData[i].getHeight(), fontData[i] - .getStyle() - | SWT.BOLD); - } - boldFont = new Font(Display.getDefault(), newFontData); - - ImageLoader loader = ImageLoader.getDdmUiLibLoader(); - deviceImage = - loader.loadImage(display, "device.png", ICON_WIDTH, ICON_WIDTH, display - .getSystemColor(SWT.COLOR_RED)); - - emulatorImage = - loader.loadImage(display, "emulator.png", ICON_WIDTH, ICON_WIDTH, display - .getSystemColor(SWT.COLOR_BLUE)); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeWindowChangeListener(DeviceSelector.this); - boldFont.dispose(); - } - }; - - @Override - public boolean setFocus() { - return tree.setFocus(); - } - - public void deviceConnected(final IDevice device) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - treeViewer.refresh(); - treeViewer.setExpandedState(device, true); - } - }); - } - - public void deviceChanged(final IDevice device) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - TreeSelection selection = (TreeSelection) treeViewer.getSelection(); - treeViewer.refresh(device); - if (selection.getFirstElement() instanceof Window - && ((Window) selection.getFirstElement()).getDevice() == device) { - treeViewer.setSelection(selection, true); - } - } - }); - } - - public void deviceDisconnected(final IDevice device) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - treeViewer.refresh(); - } - }); - } - - public void focusChanged(final IDevice device) { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - TreeSelection selection = (TreeSelection) treeViewer.getSelection(); - treeViewer.refresh(device); - if (selection.getFirstElement() instanceof Window - && ((Window) selection.getFirstElement()).getDevice() == device) { - treeViewer.setSelection(selection, true); - } - } - }); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // TODO: Double click to open view hierarchy - Object selection = ((TreeItem) e.item).getData(); - if (selection instanceof IDevice) { - ComponentRegistry.getDirector().loadPixelPerfectData((IDevice) selection); - } else if (selection instanceof Window) { - ComponentRegistry.getDirector().loadViewTreeData((Window) selection); - } - } - - public void widgetSelected(SelectionEvent e) { - Object selection = ((TreeItem) e.item).getData(); - if (selection instanceof IDevice) { - model.setSelection((IDevice) selection, null); - } else if (selection instanceof Window) { - model.setSelection(((Window) selection).getDevice(), (Window) selection); - } - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java deleted file mode 100644 index 8165c0b..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfect.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.ddmlib.RawImage; -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.device.ViewNode; -import com.android.hierarchyviewerlib.models.PixelPerfectModel; -import com.android.hierarchyviewerlib.models.PixelPerfectModel.ImageChangeListener; -import com.android.hierarchyviewerlib.models.PixelPerfectModel.Point; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.MouseMoveListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.PaletteData; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; - -public class PixelPerfect extends ScrolledComposite implements ImageChangeListener { - private Canvas canvas; - - private PixelPerfectModel model; - - private Image image; - - private Color crosshairColor; - - private Color marginColor; - - private Color borderColor; - - private Color paddingColor; - - private int width; - - private int height; - - private Point crosshairLocation; - - private ViewNode selectedNode; - - public PixelPerfect(Composite parent) { - super(parent, SWT.H_SCROLL | SWT.V_SCROLL); - canvas = new Canvas(this, SWT.NONE); - setContent(canvas); - setExpandHorizontal(true); - setExpandVertical(true); - model = ComponentRegistry.getPixelPerfectModel(); - model.addImageChangeListener(this); - - canvas.addPaintListener(paintListener); - canvas.addMouseListener(mouseListener); - canvas.addMouseMoveListener(mouseMoveListener); - - addDisposeListener(disposeListener); - - crosshairColor = new Color(Display.getDefault(), new RGB(0, 255, 255)); - borderColor = new Color(Display.getDefault(), new RGB(255, 0, 0)); - marginColor = new Color(Display.getDefault(), new RGB(0, 255, 0)); - paddingColor = new Color(Display.getDefault(), new RGB(0, 0, 255)); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeImageChangeListener(PixelPerfect.this); - if (image != null) { - image.dispose(); - } - crosshairColor.dispose(); - borderColor.dispose(); - paddingColor.dispose(); - } - }; - - @Override - public boolean setFocus() { - return canvas.setFocus(); - } - - private MouseListener mouseListener = new MouseListener() { - - public void mouseDoubleClick(MouseEvent e) { - // pass - } - - public void mouseDown(MouseEvent e) { - handleMouseEvent(e); - } - - public void mouseUp(MouseEvent e) { - handleMouseEvent(e); - } - - }; - - private MouseMoveListener mouseMoveListener = new MouseMoveListener() { - public void mouseMove(MouseEvent e) { - if (e.stateMask != 0) { - handleMouseEvent(e); - } - } - }; - - private void handleMouseEvent(MouseEvent e) { - synchronized (this) { - if (image == null) { - return; - } - int leftOffset = canvas.getSize().x / 2 - width / 2; - int topOffset = canvas.getSize().y / 2 - height / 2; - e.x -= leftOffset; - e.y -= topOffset; - e.x = Math.max(e.x, 0); - e.x = Math.min(e.x, width - 1); - e.y = Math.max(e.y, 0); - e.y = Math.min(e.y, height - 1); - } - model.setCrosshairLocation(e.x, e.y); - } - - private PaintListener paintListener = new PaintListener() { - public void paintControl(PaintEvent e) { - synchronized (this) { - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); - e.gc.fillRectangle(0, 0, canvas.getSize().x, canvas.getSize().y); - if (image != null) { - // Let's be cool and put it in the center... - int leftOffset = canvas.getSize().x / 2 - width / 2; - int topOffset = canvas.getSize().y / 2 - height / 2; - e.gc.drawImage(image, leftOffset, topOffset); - if (selectedNode != null) { - // There are a few quirks here. First of all, margins - // are sometimes negative or positive numbers... Yet, - // they are always treated as positive. - // Secondly, if the screen is in landscape mode, the - // coordinates are backwards. - int leftShift = 0; - int topShift = 0; - int nodeLeft = selectedNode.left; - int nodeTop = selectedNode.top; - int nodeWidth = selectedNode.width; - int nodeHeight = selectedNode.height; - int nodeMarginLeft = selectedNode.marginLeft; - int nodeMarginTop = selectedNode.marginTop; - int nodeMarginRight = selectedNode.marginRight; - int nodeMarginBottom = selectedNode.marginBottom; - int nodePadLeft = selectedNode.paddingLeft; - int nodePadTop = selectedNode.paddingTop; - int nodePadRight = selectedNode.paddingRight; - int nodePadBottom = selectedNode.paddingBottom; - ViewNode cur = selectedNode; - while (cur.parent != null) { - leftShift += cur.parent.left; - topShift += cur.parent.top; - cur = cur.parent; - } - - // Everything is sideways. - if (cur.width > cur.height) { - e.gc.setForeground(paddingColor); - e.gc.drawRectangle(leftOffset + width - nodeTop - topShift - nodeHeight - + nodePadBottom, - topOffset + leftShift + nodeLeft + nodePadLeft, nodeHeight - - nodePadBottom - nodePadTop, nodeWidth - nodePadRight - - nodePadLeft); - e.gc.setForeground(marginColor); - e.gc.drawRectangle(leftOffset + width - nodeTop - topShift - nodeHeight - - nodeMarginBottom, topOffset + leftShift + nodeLeft - - nodeMarginLeft, - nodeHeight + nodeMarginBottom + nodeMarginTop, nodeWidth - + nodeMarginRight + nodeMarginLeft); - e.gc.setForeground(borderColor); - e.gc.drawRectangle( - leftOffset + width - nodeTop - topShift - nodeHeight, topOffset - + leftShift + nodeLeft, nodeHeight, nodeWidth); - } else { - e.gc.setForeground(paddingColor); - e.gc.drawRectangle(leftOffset + leftShift + nodeLeft + nodePadLeft, - topOffset + topShift + nodeTop + nodePadTop, nodeWidth - - nodePadRight - nodePadLeft, nodeHeight - - nodePadBottom - nodePadTop); - e.gc.setForeground(marginColor); - e.gc.drawRectangle(leftOffset + leftShift + nodeLeft - nodeMarginLeft, - topOffset + topShift + nodeTop - nodeMarginTop, nodeWidth - + nodeMarginRight + nodeMarginLeft, nodeHeight - + nodeMarginBottom + nodeMarginTop); - e.gc.setForeground(borderColor); - e.gc.drawRectangle(leftOffset + leftShift + nodeLeft, topOffset - + topShift + nodeTop, nodeWidth, nodeHeight); - } - } - if (crosshairLocation != null) { - e.gc.setForeground(crosshairColor); - e.gc.drawLine(leftOffset, topOffset + crosshairLocation.y, leftOffset - + width - 1, topOffset + crosshairLocation.y); - e.gc.drawLine(leftOffset + crosshairLocation.x, topOffset, leftOffset - + crosshairLocation.x, topOffset + height - 1); - } - } - } - } - }; - - private void doRedraw() { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - canvas.redraw(); - } - }); - } - - private void loadImage() { - final RawImage rawImage = model.getImage(); - if (rawImage != null) { - ImageData imageData = - new ImageData(rawImage.width, rawImage.height, rawImage.bpp, - new PaletteData(rawImage.getRedMask(), rawImage.getGreenMask(), - rawImage.getBlueMask()), 1, rawImage.data); - if (image != null) { - image.dispose(); - } - image = new Image(Display.getDefault(), imageData); - width = rawImage.width; - height = rawImage.height; - - } else { - if (image != null) { - image.dispose(); - image = null; - } - width = 0; - height = 0; - } - Display.getDefault().asyncExec(new Runnable() { - public void run() { - setMinSize(width, height); - } - }); - } - - public void imageLoaded() { - synchronized (this) { - loadImage(); - crosshairLocation = model.getCrosshairLocation(); - selectedNode = model.getSelected(); - } - doRedraw(); - } - - public void imageChanged() { - synchronized (this) { - loadImage(); - } - doRedraw(); - } - - public void crosshairMoved() { - synchronized (this) { - crosshairLocation = model.getCrosshairLocation(); - } - doRedraw(); - } - - public void selectionChanged() { - synchronized (this) { - selectedNode = model.getSelected(); - } - doRedraw(); - } - - public void focusChanged() { - synchronized (this) { - loadImage(); - selectedNode = model.getSelected(); - } - doRedraw(); - } - - public void zoomChanged() { - // pass - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java deleted file mode 100644 index f0402f3..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectLoupe.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.ddmlib.RawImage; -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.models.PixelPerfectModel; -import com.android.hierarchyviewerlib.models.PixelPerfectModel.ImageChangeListener; -import com.android.hierarchyviewerlib.models.PixelPerfectModel.Point; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.MouseWheelListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.ImageData; -import org.eclipse.swt.graphics.PaletteData; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.graphics.Transform; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; - -public class PixelPerfectLoupe extends Canvas implements ImageChangeListener { - private PixelPerfectModel model; - - private Image image; - - private Image grid; - - private Color crosshairColor; - - private int width; - - private int height; - - private Point crosshairLocation; - - private int zoom; - - private Transform transform; - - private int canvasWidth; - - private int canvasHeight; - - public PixelPerfectLoupe(Composite parent) { - super(parent, SWT.NONE); - model = ComponentRegistry.getPixelPerfectModel(); - model.addImageChangeListener(this); - - addPaintListener(paintListener); - addMouseListener(mouseListener); - addMouseWheelListener(mouseWheelListener); - addDisposeListener(disposeListener); - - crosshairColor = new Color(Display.getDefault(), new RGB(255, 94, 254)); - - transform = new Transform(Display.getDefault()); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeImageChangeListener(PixelPerfectLoupe.this); - if (image != null) { - image.dispose(); - } - crosshairColor.dispose(); - transform.dispose(); - if (grid != null) { - grid.dispose(); - } - } - }; - - private MouseListener mouseListener = new MouseListener() { - - public void mouseDoubleClick(MouseEvent e) { - // pass - } - - public void mouseDown(MouseEvent e) { - handleMouseEvent(e); - } - - public void mouseUp(MouseEvent e) { - // - } - - }; - - private MouseWheelListener mouseWheelListener = new MouseWheelListener() { - public void mouseScrolled(MouseEvent e) { - int newZoom = -1; - synchronized (this) { - if (image != null && crosshairLocation != null) { - if (e.count > 0) { - newZoom = zoom + 1; - } else { - newZoom = zoom - 1; - } - } - } - if (newZoom != -1) { - model.setZoom(newZoom); - } - } - }; - - private void handleMouseEvent(MouseEvent e) { - int newX = -1; - int newY = -1; - synchronized (this) { - if (image == null) { - return; - } - int zoomedX = -crosshairLocation.x * zoom - zoom / 2 + getBounds().width / 2; - int zoomedY = -crosshairLocation.y * zoom - zoom / 2 + getBounds().height / 2; - int x = (e.x - zoomedX) / zoom; - int y = (e.y - zoomedY) / zoom; - if (x >= 0 && x < width && y >= 0 && y < height) { - newX = x; - newY = y; - } - } - if (newX != -1) { - model.setCrosshairLocation(newX, newY); - } - } - - private PaintListener paintListener = new PaintListener() { - public void paintControl(PaintEvent e) { - synchronized (this) { - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); - e.gc.fillRectangle(0, 0, getSize().x, getSize().y); - if (image != null && crosshairLocation != null) { - int zoomedX = -crosshairLocation.x * zoom - zoom / 2 + getBounds().width / 2; - int zoomedY = -crosshairLocation.y * zoom - zoom / 2 + getBounds().height / 2; - transform.translate(zoomedX, zoomedY); - transform.scale(zoom, zoom); - e.gc.setInterpolation(SWT.NONE); - e.gc.setTransform(transform); - e.gc.drawImage(image, 0, 0); - transform.identity(); - e.gc.setTransform(transform); - - // If the size of the canvas has changed, we need to make - // another grid. - if (grid != null - && (canvasWidth != getBounds().width || canvasHeight != getBounds().height)) { - grid.dispose(); - grid = null; - } - canvasWidth = getBounds().width; - canvasHeight = getBounds().height; - if (grid == null) { - // Make a transparent image; - ImageData imageData = - new ImageData(canvasWidth + zoom + 1, canvasHeight + zoom + 1, 1, - new PaletteData(new RGB[] { - new RGB(0, 0, 0) - })); - imageData.transparentPixel = 0; - - // Draw the grid. - grid = new Image(Display.getDefault(), imageData); - GC gc = new GC(grid); - gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); - for (int x = 0; x <= canvasWidth + zoom; x += zoom) { - gc.drawLine(x, 0, x, canvasHeight + zoom); - } - for (int y = 0; y <= canvasHeight + zoom; y += zoom) { - gc.drawLine(0, y, canvasWidth + zoom, y); - } - gc.dispose(); - } - - e.gc.setClipping(new Rectangle(zoomedX, zoomedY, width * zoom + 1, height - * zoom + 1)); - e.gc.setAlpha(76); - e.gc.drawImage(grid, (canvasWidth / 2 - zoom / 2) % zoom - zoom, - (canvasHeight / 2 - zoom / 2) % zoom - zoom); - e.gc.setAlpha(255); - - e.gc.setForeground(crosshairColor); - e.gc.drawLine(0, canvasHeight / 2, canvasWidth - 1, canvasHeight / 2); - e.gc.drawLine(canvasWidth / 2, 0, canvasWidth / 2, canvasHeight - 1); - } - } - } - }; - - private void doRedraw() { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - redraw(); - } - }); - } - - private void loadImage() { - final RawImage rawImage = model.getImage(); - if (rawImage != null) { - ImageData imageData = - new ImageData(rawImage.width, rawImage.height, rawImage.bpp, - new PaletteData(rawImage.getRedMask(), rawImage.getGreenMask(), - rawImage.getBlueMask()), 1, rawImage.data); - if (image != null) { - image.dispose(); - } - image = new Image(Display.getDefault(), imageData); - width = rawImage.width; - height = rawImage.height; - } else { - if (image != null) { - image.dispose(); - image = null; - } - width = 0; - height = 0; - } - } - - public void imageLoaded() { - synchronized (this) { - loadImage(); - crosshairLocation = model.getCrosshairLocation(); - zoom = model.getZoom(); - } - doRedraw(); - } - - public void imageChanged() { - synchronized (this) { - loadImage(); - } - doRedraw(); - } - - public void crosshairMoved() { - synchronized (this) { - crosshairLocation = model.getCrosshairLocation(); - } - doRedraw(); - } - - public void selectionChanged() { - // pass - } - - public void focusChanged() { - imageChanged(); - } - - public void zoomChanged() { - synchronized (this) { - if (grid != null) { - // To notify that the zoom level has changed, we get rid of the - // grid. - grid.dispose(); - grid = null; - zoom = model.getZoom(); - } - } - doRedraw(); - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java deleted file mode 100644 index 2c30857..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PixelPerfectTree.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.ddmuilib.ImageLoader; -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.device.ViewNode; -import com.android.hierarchyviewerlib.models.PixelPerfectModel; -import com.android.hierarchyviewerlib.models.PixelPerfectModel.ImageChangeListener; - -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; - -import java.util.List; - -public class PixelPerfectTree extends Composite implements ImageChangeListener, SelectionListener { - - private TreeViewer treeViewer; - - private Tree tree; - - private PixelPerfectModel model; - - private Image folderImage; - - private Image fileImage; - - private class ContentProvider implements ITreeContentProvider, ILabelProvider { - public Object[] getChildren(Object element) { - if (element instanceof ViewNode) { - List<ViewNode> children = ((ViewNode) element).children; - return children.toArray(new ViewNode[children.size()]); - } - return null; - } - - public Object getParent(Object element) { - if (element instanceof ViewNode) { - return ((ViewNode) element).parent; - } - return null; - } - - public boolean hasChildren(Object element) { - if (element instanceof ViewNode) { - return ((ViewNode) element).children.size() != 0; - } - return false; - } - - public Object[] getElements(Object element) { - if (element instanceof PixelPerfectModel) { - ViewNode viewNode = ((PixelPerfectModel) element).getViewNode(); - if (viewNode == null) { - return new Object[0]; - } - return new Object[] { - viewNode - }; - } - return new Object[0]; - } - - public void dispose() { - // pass - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // pass - } - - public Image getImage(Object element) { - if (element instanceof ViewNode) { - if (hasChildren(element)) { - return folderImage; - } - return fileImage; - } - return null; - } - - public String getText(Object element) { - if (element instanceof ViewNode) { - return ((ViewNode) element).name; - } - return null; - } - - public void addListener(ILabelProviderListener listener) { - // pass - } - - public boolean isLabelProperty(Object element, String property) { - // pass - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // pass - } - } - - public PixelPerfectTree(Composite parent) { - super(parent, SWT.NONE); - setLayout(new FillLayout()); - treeViewer = new TreeViewer(this, SWT.SINGLE); - treeViewer.setAutoExpandLevel(TreeViewer.ALL_LEVELS); - - tree = treeViewer.getTree(); - tree.addSelectionListener(this); - - loadResources(); - - addDisposeListener(disposeListener); - - model = ComponentRegistry.getPixelPerfectModel(); - ContentProvider contentProvider = new ContentProvider(); - treeViewer.setContentProvider(contentProvider); - treeViewer.setLabelProvider(contentProvider); - treeViewer.setInput(model); - model.addImageChangeListener(this); - - } - - public void loadResources() { - ImageLoader loader = ImageLoader.getDdmUiLibLoader(); - fileImage = loader.loadImage("file.png", Display.getDefault()); - - folderImage = loader.loadImage("folder.png", Display.getDefault()); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeImageChangeListener(PixelPerfectTree.this); - fileImage.dispose(); - folderImage.dispose(); - } - }; - - @Override - public boolean setFocus() { - return tree.setFocus(); - } - - public void imageLoaded() { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - treeViewer.refresh(); - treeViewer.expandAll(); - } - }); - } - - public void imageChanged() { - // pass - } - - public void crosshairMoved() { - // pass - } - - public void selectionChanged() { - // pass - } - - public void focusChanged() { - imageLoaded(); - } - - public void widgetDefaultSelected(SelectionEvent e) { - // pass - } - - public void widgetSelected(SelectionEvent e) { - // To combat phantom selection... - if (((TreeSelection) treeViewer.getSelection()).isEmpty()) { - model.setSelected(null); - } else { - model.setSelected((ViewNode) e.item.getData()); - } - } - - public void zoomChanged() { - // pass - } - -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/ProfileViewer.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/ProfileViewer.java deleted file mode 100644 index 400318c..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/ProfileViewer.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.models.TreeViewModel; -import com.android.hierarchyviewerlib.models.TreeViewModel.TreeChangeListener; -import com.android.hierarchyviewerlib.scene.DrawableViewNode; -import com.android.hierarchyvieweruilib.util.TreeColumnResizer; - -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; - -import java.text.DecimalFormat; - -public class ProfileViewer extends Composite implements TreeChangeListener { - private TreeViewModel model; - - private TreeViewer treeViewer; - - private Tree tree; - - private DrawableViewNode selectedNode; - - private class ContentProvider implements ITreeContentProvider, ITableLabelProvider { - - public Object[] getChildren(Object parentElement) { - synchronized (ProfileViewer.this) { - return new Object[0]; - } - } - - public Object getParent(Object element) { - synchronized (ProfileViewer.this) { - return new Object[0]; - } - } - - public boolean hasChildren(Object element) { - synchronized (ProfileViewer.this) { - return false; - } - } - - public Object[] getElements(Object inputElement) { - synchronized (ProfileViewer.this) { - if (selectedNode != null && selectedNode.viewNode.measureTime != -1) { - return new String[] { - "measure", "layout", "draw" - }; - } - return new Object[0]; - } - } - - public void dispose() { - // pass - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // pass - } - - public Image getColumnImage(Object element, int column) { - return null; - } - - public String getColumnText(Object element, int column) { - synchronized (ProfileViewer.this) { - if (selectedNode != null) { - if (column == 0) { - return (String) element; - } else if (column == 1) { - DecimalFormat formatter = new DecimalFormat("0.000"); - if(((String)element).equals("measure")) { - return formatter.format(selectedNode.viewNode.measureTime); - } else if (((String) element).equals("layout")) { - return formatter.format(selectedNode.viewNode.layoutTime); - } else { - return formatter.format(selectedNode.viewNode.drawTime); - } - } - } - return ""; - } - } - - public void addListener(ILabelProviderListener listener) { - // pass - } - - public boolean isLabelProperty(Object element, String property) { - // pass - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // pass - } - } - - public ProfileViewer(Composite parent) { - super(parent, SWT.NONE); - setLayout(new FillLayout()); - treeViewer = new TreeViewer(this, SWT.NONE); - - tree = treeViewer.getTree(); - tree.setLinesVisible(true); - tree.setHeaderVisible(true); - - TreeColumn operationColumn = new TreeColumn(tree, SWT.NONE); - operationColumn.setText("Operation"); - TreeColumn durationColumn = new TreeColumn(tree, SWT.NONE); - durationColumn.setText("Duration (ms)"); - - model = ComponentRegistry.getTreeViewModel(); - ContentProvider contentProvider = new ContentProvider(); - treeViewer.setContentProvider(contentProvider); - treeViewer.setLabelProvider(contentProvider); - treeViewer.setInput(model); - model.addTreeChangeListener(this); - - new TreeColumnResizer(this, operationColumn, durationColumn); - } - - public void selectionChanged() { - synchronized (this) { - selectedNode = model.getSelection(); - } - doRefresh(); - } - - public void treeChanged() { - synchronized (this) { - selectedNode = model.getSelection(); - } - doRefresh(); - } - - public void viewportChanged() { - // pass - } - - public void zoomChanged() { - // pass - } - - private void doRefresh() { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - treeViewer.refresh(); - } - }); - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PropertyViewer.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PropertyViewer.java deleted file mode 100644 index da4997b..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/PropertyViewer.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.device.ViewNode; -import com.android.hierarchyviewerlib.device.ViewNode.Property; -import com.android.hierarchyviewerlib.models.TreeViewModel; -import com.android.hierarchyviewerlib.models.TreeViewModel.TreeChangeListener; -import com.android.hierarchyviewerlib.scene.DrawableViewNode; -import com.android.hierarchyvieweruilib.util.TreeColumnResizer; - -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.FillLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeColumn; - -import java.util.ArrayList; - -public class PropertyViewer extends Composite implements TreeChangeListener { - private TreeViewModel model; - - private TreeViewer treeViewer; - - private Tree tree; - - private DrawableViewNode selectedNode; - - private class ContentProvider implements ITreeContentProvider, ITableLabelProvider { - - public Object[] getChildren(Object parentElement) { - synchronized (PropertyViewer.this) { - if (selectedNode != null && parentElement instanceof String) { - String category = (String) parentElement; - ArrayList<Property> returnValue = new ArrayList<Property>(); - for (Property property : selectedNode.viewNode.properties) { - if (category.equals(ViewNode.MISCELLANIOUS)) { - if (property.name.indexOf(':') == -1) { - returnValue.add(property); - } - } else { - if (property.name.startsWith(((String) parentElement) + ":")) { - returnValue.add(property); - } - } - } - return returnValue.toArray(new Property[returnValue.size()]); - } - return new Object[0]; - } - } - - public Object getParent(Object element) { - synchronized (PropertyViewer.this) { - if (selectedNode != null && element instanceof Property) { - if (selectedNode.viewNode.categories.size() == 0) { - return null; - } - String name = ((Property) element).name; - int index = name.indexOf(':'); - if (index == -1) { - return ViewNode.MISCELLANIOUS; - } - return name.substring(0, index); - } - return null; - } - } - - public boolean hasChildren(Object element) { - synchronized (PropertyViewer.this) { - if (selectedNode != null && element instanceof String) { - String category = (String) element; - for (String name : selectedNode.viewNode.namedProperties.keySet()) { - if (category.equals(ViewNode.MISCELLANIOUS)) { - if (name.indexOf(':') == -1) { - return true; - } - } else { - if (name.startsWith(((String) element) + ":")) { - return true; - } - } - } - } - return false; - } - } - - public Object[] getElements(Object inputElement) { - synchronized (PropertyViewer.this) { - if (selectedNode != null && inputElement instanceof TreeViewModel) { - if (selectedNode.viewNode.categories.size() == 0) { - return selectedNode.viewNode.properties - .toArray(new Property[selectedNode.viewNode.properties.size()]); - } else { - return selectedNode.viewNode.categories - .toArray(new String[selectedNode.viewNode.categories.size()]); - } - } - return new Object[0]; - } - } - - public void dispose() { - // pass - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - // pass - } - - public Image getColumnImage(Object element, int column) { - return null; - } - - public String getColumnText(Object element, int column) { - synchronized (PropertyViewer.this) { - if (selectedNode != null) { - if (element instanceof String && column == 0) { - String category = (String) element; - return Character.toUpperCase(category.charAt(0)) + category.substring(1); - } else if (element instanceof Property) { - if (column == 0) { - String returnValue = ((Property) element).name; - int index = returnValue.indexOf(':'); - if (index != -1) { - return returnValue.substring(index + 1); - } - return returnValue; - } else if (column == 1) { - return ((Property) element).value; - } - } - } - return ""; - } - } - - public void addListener(ILabelProviderListener listener) { - // pass - } - - public boolean isLabelProperty(Object element, String property) { - // pass - return false; - } - - public void removeListener(ILabelProviderListener listener) { - // pass - } - } - - public PropertyViewer(Composite parent) { - super(parent, SWT.NONE); - setLayout(new FillLayout()); - treeViewer = new TreeViewer(this, SWT.NONE); - - tree = treeViewer.getTree(); - tree.setLinesVisible(true); - tree.setHeaderVisible(true); - - TreeColumn propertyColumn = new TreeColumn(tree, SWT.NONE); - propertyColumn.setText("Property"); - TreeColumn valueColumn = new TreeColumn(tree, SWT.NONE); - valueColumn.setText("Value"); - - model = ComponentRegistry.getTreeViewModel(); - ContentProvider contentProvider = new ContentProvider(); - treeViewer.setContentProvider(contentProvider); - treeViewer.setLabelProvider(contentProvider); - treeViewer.setInput(model); - model.addTreeChangeListener(this); - - new TreeColumnResizer(this, propertyColumn, valueColumn); - } - - - public void selectionChanged() { - synchronized (this) { - selectedNode = model.getSelection(); - } - doRefresh(); - } - - public void treeChanged() { - synchronized (this) { - selectedNode = model.getSelection(); - } - doRefresh(); - } - - public void viewportChanged() { - // pass - } - - public void zoomChanged() { - // pass - } - - private void doRefresh() { - Display.getDefault().asyncExec(new Runnable() { - public void run() { - treeViewer.refresh(); - } - }); - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java deleted file mode 100644 index f5d7ae0..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeView.java +++ /dev/null @@ -1,361 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.models.TreeViewModel; -import com.android.hierarchyviewerlib.models.TreeViewModel.TreeChangeListener; -import com.android.hierarchyviewerlib.scene.DrawableViewNode; -import com.android.hierarchyviewerlib.scene.DrawableViewNode.Point; -import com.android.hierarchyviewerlib.scene.DrawableViewNode.Rectangle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.MouseMoveListener; -import org.eclipse.swt.events.MouseWheelListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Transform; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; - -public class TreeView extends Canvas implements TreeChangeListener { - - private TreeViewModel model; - - private DrawableViewNode tree; - - private DrawableViewNode selectedNode; - - private Rectangle viewport; - - private Transform transform; - - private Transform inverse; - - private double zoom; - - private Point lastPoint; - - private DrawableViewNode draggedNode; - - public TreeView(Composite parent) { - super(parent, SWT.NONE); - - model = ComponentRegistry.getTreeViewModel(); - model.addTreeChangeListener(this); - - addPaintListener(paintListener); - addMouseListener(mouseListener); - addMouseMoveListener(mouseMoveListener); - addMouseWheelListener(mouseWheelListener); - addListener(SWT.Resize, resizeListener); - addDisposeListener(disposeListener); - - transform = new Transform(Display.getDefault()); - inverse = new Transform(Display.getDefault()); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeTreeChangeListener(TreeView.this); - transform.dispose(); - inverse.dispose(); - } - }; - - private Listener resizeListener = new Listener() { - public void handleEvent(Event e) { - synchronized (this) { - if (tree != null && viewport != null) { - - // I don't know what the best behaviour is... This seems - // like a good idea. - Point viewCenter = - new Point(viewport.x + viewport.width / 2, viewport.y + viewport.height - / 2); - viewport.width = getBounds().width / zoom; - viewport.height = getBounds().height / zoom; - viewport.x = viewCenter.x - viewport.width / 2; - viewport.y = viewCenter.y - viewport.height / 2; - } - } - if (viewport != null) { - model.setViewport(viewport); - } - } - }; - - private MouseListener mouseListener = new MouseListener() { - - public void mouseDoubleClick(MouseEvent e) { - // pass - } - - public void mouseDown(MouseEvent e) { - boolean selectionChanged = false; - synchronized (this) { - if (tree != null && viewport != null) { - Point pt = transformPoint(e.x, e.y); - draggedNode = tree.getSelected(pt.x, pt.y); - if (draggedNode != null && draggedNode != selectedNode) { - selectedNode = draggedNode; - selectionChanged = true; - } - if (draggedNode == tree) { - draggedNode = null; - } - if (draggedNode != null) { - lastPoint = pt; - } else { - lastPoint = new Point(e.x, e.y); - } - } - } - if (selectionChanged) { - model.setSelection(selectedNode); - } - } - - public void mouseUp(MouseEvent e) { - boolean redraw = false; - boolean viewportChanged = false; - synchronized (this) { - if (tree != null && viewport != null && lastPoint != null) { - if (draggedNode == null) { - handleMouseDrag(new Point(e.x, e.y)); - viewportChanged = true; - } else { - handleMouseDrag(transformPoint(e.x, e.y)); - } - lastPoint = null; - draggedNode = null; - redraw = true; - } - } - if (viewportChanged) { - model.setViewport(viewport); - } else if (redraw) { - model.removeTreeChangeListener(TreeView.this); - model.notifyTreeChanged(); - model.addTreeChangeListener(TreeView.this); - doRedraw(); - } - } - - }; - - private MouseMoveListener mouseMoveListener = new MouseMoveListener() { - public void mouseMove(MouseEvent e) { - boolean redraw = false; - boolean viewportChanged = false; - synchronized (this) { - if (tree != null && viewport != null && lastPoint != null) { - if (draggedNode == null) { - handleMouseDrag(new Point(e.x, e.y)); - viewportChanged = true; - } else { - handleMouseDrag(transformPoint(e.x, e.y)); - } - redraw = true; - } - } - if (viewportChanged) { - model.setViewport(viewport); - } else if (redraw) { - model.removeTreeChangeListener(TreeView.this); - model.notifyTreeChanged(); - model.addTreeChangeListener(TreeView.this); - doRedraw(); - } - } - }; - - private void handleMouseDrag(Point pt) { - if (draggedNode != null) { - draggedNode.move(lastPoint.y - pt.y); - lastPoint = pt; - return; - } - double xDif = (lastPoint.x - pt.x) / zoom; - double yDif = (lastPoint.y - pt.y) / zoom; - - if (viewport.width > tree.bounds.width) { - if (xDif < 0 && viewport.x + viewport.width > tree.bounds.x + tree.bounds.width) { - viewport.x = - Math.max(viewport.x + xDif, tree.bounds.x + tree.bounds.width - - viewport.width); - } else if (xDif > 0 && viewport.x < tree.bounds.x) { - viewport.x = Math.min(viewport.x + xDif, tree.bounds.x); - } - } else { - if (xDif < 0 && viewport.x > tree.bounds.x) { - viewport.x = Math.max(viewport.x + xDif, tree.bounds.x); - } else if (xDif > 0 && viewport.x + viewport.width < tree.bounds.x + tree.bounds.width) { - viewport.x = - Math.min(viewport.x + xDif, tree.bounds.x + tree.bounds.width - - viewport.width); - } - } - if (viewport.height > tree.bounds.height) { - if (yDif < 0 && viewport.y + viewport.height > tree.bounds.y + tree.bounds.height) { - viewport.y = - Math.max(viewport.y + yDif, tree.bounds.y + tree.bounds.height - - viewport.height); - } else if (yDif > 0 && viewport.y < tree.bounds.y) { - viewport.y = Math.min(viewport.y + yDif, tree.bounds.y); - } - } else { - if (yDif < 0 && viewport.y > tree.bounds.y) { - viewport.y = Math.max(viewport.y + yDif, tree.bounds.y); - } else if (yDif > 0 - && viewport.y + viewport.height < tree.bounds.y + tree.bounds.height) { - viewport.y = - Math.min(viewport.y + yDif, tree.bounds.y + tree.bounds.height - - viewport.height); - } - } - lastPoint = pt; - } - - private Point transformPoint(double x, double y) { - float[] pt = { - (float) x, (float) y - }; - inverse.transform(pt); - return new Point(pt[0], pt[1]); - } - - private MouseWheelListener mouseWheelListener = new MouseWheelListener() { - - public void mouseScrolled(MouseEvent e) { - Point zoomPoint = null; - synchronized (this) { - if (tree != null && viewport != null) { - zoom += Math.ceil(e.count / 3.0) * 0.1; - zoomPoint = transformPoint(e.x, e.y); - } - } - if (zoomPoint != null) { - model.zoomOnPoint(zoom, zoomPoint); - } - } - }; - - private PaintListener paintListener = new PaintListener() { - public void paintControl(PaintEvent e) { - synchronized (this) { - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); - e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height); - if (tree != null && viewport != null) { - e.gc.setTransform(transform); - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY)); - paintRecursive(e.gc, tree); - } - } - } - }; - - private void paintRecursive(GC gc, DrawableViewNode node) { - if (selectedNode == node) { - gc.fillRectangle(node.left, (int) Math.round(node.top), DrawableViewNode.NODE_WIDTH, - DrawableViewNode.NODE_HEIGHT); - } else { - gc.drawRectangle(node.left, (int) Math.round(node.top), DrawableViewNode.NODE_WIDTH, - DrawableViewNode.NODE_HEIGHT); - } - int N = node.children.size(); - for (int i = 0; i < N; i++) { - DrawableViewNode child = node.children.get(i); - paintRecursive(gc, child); - gc.drawLine(node.left + DrawableViewNode.NODE_WIDTH, (int) Math.round(node.top) - + DrawableViewNode.NODE_HEIGHT / 2, child.left, (int) Math.round(child.top) - + DrawableViewNode.NODE_HEIGHT / 2); - } - } - - private void doRedraw() { - Display.getDefault().syncExec(new Runnable() { - public void run() { - redraw(); - } - }); - } - - public void treeChanged() { - synchronized (this) { - tree = model.getTree(); - selectedNode = model.getSelection(); - if (tree == null) { - viewport = null; - } else { - Display.getDefault().syncExec(new Runnable() { - public void run() { - viewport = - new Rectangle((tree.bounds.width - getBounds().width) / 2, - (tree.bounds.height - getBounds().height) / 2, - getBounds().width, getBounds().height); - } - }); - } - } - if (viewport != null) { - model.setViewport(viewport); - } - } - - private void setTransform() { - if (viewport != null && tree != null) { - // Set the transform. - transform.identity(); - inverse.identity(); - - transform.scale((float) zoom, (float) zoom); - inverse.scale((float) zoom, (float) zoom); - transform.translate((float) -viewport.x, (float) -viewport.y); - inverse.translate((float) -viewport.x, (float) -viewport.y); - inverse.invert(); - } - } - - public void viewportChanged() { - synchronized (this) { - viewport = model.getViewport(); - zoom = model.getZoom(); - setTransform(); - } - doRedraw(); - } - - public void zoomChanged() { - viewportChanged(); - } - - public void selectionChanged() { - synchronized (this) { - selectedNode = model.getSelection(); - } - doRedraw(); - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java deleted file mode 100644 index feed1af..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/TreeViewOverview.java +++ /dev/null @@ -1,289 +0,0 @@ -/* - * 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.hierarchyvieweruilib; - -import com.android.hierarchyviewerlib.ComponentRegistry; -import com.android.hierarchyviewerlib.models.TreeViewModel; -import com.android.hierarchyviewerlib.models.TreeViewModel.TreeChangeListener; -import com.android.hierarchyviewerlib.scene.DrawableViewNode; -import com.android.hierarchyviewerlib.scene.DrawableViewNode.Point; -import com.android.hierarchyviewerlib.scene.DrawableViewNode.Rectangle; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.DisposeEvent; -import org.eclipse.swt.events.DisposeListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.MouseMoveListener; -import org.eclipse.swt.events.PaintEvent; -import org.eclipse.swt.events.PaintListener; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Transform; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; - -public class TreeViewOverview extends Canvas implements TreeChangeListener { - - private TreeViewModel model; - - private DrawableViewNode tree; - - private Rectangle viewport; - - private Transform transform; - - private Transform inverse; - - private Rectangle bounds = new Rectangle(); - - private double scale; - - private boolean dragging = false; - - public TreeViewOverview(Composite parent) { - super(parent, SWT.NONE); - - model = ComponentRegistry.getTreeViewModel(); - model.addTreeChangeListener(this); - - addPaintListener(paintListener); - addMouseListener(mouseListener); - addMouseMoveListener(mouseMoveListener); - addListener(SWT.Resize, resizeListener); - addDisposeListener(disposeListener); - - transform = new Transform(Display.getDefault()); - inverse = new Transform(Display.getDefault()); - } - - private DisposeListener disposeListener = new DisposeListener() { - public void widgetDisposed(DisposeEvent e) { - model.removeTreeChangeListener(TreeViewOverview.this); - transform.dispose(); - inverse.dispose(); - } - }; - - private MouseListener mouseListener = new MouseListener() { - - public void mouseDoubleClick(MouseEvent e) { - // pass - } - - public void mouseDown(MouseEvent e) { - boolean redraw = false; - synchronized (this) { - if (tree != null && viewport != null) { - dragging = true; - redraw = true; - handleMouseEvent(transformPoint(e.x, e.y)); - } - } - if (redraw) { - model.removeTreeChangeListener(TreeViewOverview.this); - model.setViewport(viewport); - model.addTreeChangeListener(TreeViewOverview.this); - doRedraw(); - } - } - - public void mouseUp(MouseEvent e) { - boolean redraw = false; - synchronized (this) { - if (tree != null && viewport != null) { - dragging = false; - redraw = true; - handleMouseEvent(transformPoint(e.x, e.y)); - setBounds(); - setTransform(); - } - } - if (redraw) { - model.removeTreeChangeListener(TreeViewOverview.this); - model.setViewport(viewport); - model.addTreeChangeListener(TreeViewOverview.this); - doRedraw(); - } - } - - }; - - private MouseMoveListener mouseMoveListener = new MouseMoveListener() { - public void mouseMove(MouseEvent e) { - boolean moved = false; - synchronized (this) { - if (dragging) { - moved = true; - handleMouseEvent(transformPoint(e.x, e.y)); - } - } - if (moved) { - model.removeTreeChangeListener(TreeViewOverview.this); - model.setViewport(viewport); - model.addTreeChangeListener(TreeViewOverview.this); - doRedraw(); - } - } - }; - - private void handleMouseEvent(Point pt) { - viewport.x = pt.x - viewport.width / 2; - viewport.y = pt.y - viewport.height / 2; - if (viewport.x < bounds.x) { - viewport.x = bounds.x; - } - if (viewport.y < bounds.y) { - viewport.y = bounds.y; - } - if (viewport.x + viewport.width > bounds.x + bounds.width) { - viewport.x = bounds.x + bounds.width - viewport.width; - } - if (viewport.y + viewport.height > bounds.y + bounds.height) { - viewport.y = bounds.y + bounds.height - viewport.height; - } - } - - private Point transformPoint(double x, double y) { - float[] pt = { - (float) x, (float) y - }; - inverse.transform(pt); - return new Point(pt[0], pt[1]); - } - - private Listener resizeListener = new Listener() { - public void handleEvent(Event arg0) { - synchronized (this) { - setTransform(); - } - doRedraw(); - } - }; - - private PaintListener paintListener = new PaintListener() { - public void paintControl(PaintEvent e) { - if (tree != null && viewport != null) { - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); - e.gc.fillRectangle(0, 0, getBounds().width, getBounds().height); - e.gc.setTransform(transform); - paintRecursive(e.gc, tree); - - e.gc.setAlpha(80); - e.gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY)); - e.gc.fillRectangle((int) viewport.x, (int) viewport.y, (int) Math - .ceil(viewport.width), (int) Math.ceil(viewport.height)); - - e.gc.setAlpha(255); - e.gc.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK)); - e.gc.setLineWidth((int) Math.ceil(2 / scale)); - e.gc.drawRectangle((int) viewport.x, (int) viewport.y, (int) Math - .ceil(viewport.width), (int) Math.ceil(viewport.height)); - } - } - }; - - private void paintRecursive(GC gc, DrawableViewNode node) { - gc.drawRectangle(node.left, (int) Math.round(node.top), DrawableViewNode.NODE_WIDTH, - DrawableViewNode.NODE_HEIGHT); - int N = node.children.size(); - for (int i = 0; i < N; i++) { - DrawableViewNode child = node.children.get(i); - paintRecursive(gc, child); - gc.drawLine(node.left + DrawableViewNode.NODE_WIDTH, (int) Math.round(node.top) - + DrawableViewNode.NODE_HEIGHT / 2, child.left, (int) Math.round(child.top) - + DrawableViewNode.NODE_HEIGHT / 2); - } - } - - private void doRedraw() { - Display.getDefault().syncExec(new Runnable() { - public void run() { - redraw(); - } - }); - } - - public void treeChanged() { - synchronized (this) { - tree = model.getTree(); - setBounds(); - setTransform(); - } - doRedraw(); - } - - private void setBounds() { - if (viewport != null && tree != null) { - bounds.x = Math.min(viewport.x, tree.bounds.x); - bounds.y = Math.min(viewport.y, tree.bounds.y); - bounds.width = - Math.max(viewport.x + viewport.width, tree.bounds.x + tree.bounds.width) - - bounds.x; - bounds.height = - Math.max(viewport.y + viewport.height, tree.bounds.y + tree.bounds.height) - - bounds.y; - } - } - - private void setTransform() { - if (viewport != null && tree != null) { - - transform.identity(); - inverse.identity(); - final Point size = new Point(); - Display.getDefault().syncExec(new Runnable() { - public void run() { - size.x = getBounds().width; - size.y = getBounds().height; - } - }); - scale = Math.min(size.x / bounds.width, size.y / bounds.height); - transform.scale((float) scale, (float) scale); - inverse.scale((float) scale, (float) scale); - transform.translate((float) -bounds.x, (float) -bounds.y); - inverse.translate((float) -bounds.x, (float) -bounds.y); - if (size.x / bounds.width < size.y / bounds.height) { - transform.translate(0, (float) (size.y / scale - bounds.height) / 2); - inverse.translate(0, (float) (size.y / scale - bounds.height) / 2); - } else { - transform.translate((float) (size.x / scale - bounds.width) / 2, 0); - inverse.translate((float) (size.x / scale - bounds.width) / 2, 0); - } - inverse.invert(); - } - } - - public void viewportChanged() { - synchronized (this) { - viewport = model.getViewport(); - setBounds(); - setTransform(); - } - doRedraw(); - } - - public void zoomChanged() { - viewportChanged(); - } - - public void selectionChanged() { - // pass - } -} diff --git a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/util/TreeColumnResizer.java b/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/util/TreeColumnResizer.java deleted file mode 100644 index 09851c3..0000000 --- a/hierarchyviewer2/libs/hierarchyvieweruilib/src/com/android/hierarchyvieweruilib/util/TreeColumnResizer.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.hierarchyvieweruilib.util; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.TreeColumn; - -public class TreeColumnResizer { - - private TreeColumn column1; - private TreeColumn column2; - - private Composite control; - private int column1Width; - private int column2Width; - public TreeColumnResizer(Composite control, TreeColumn column1, TreeColumn column2) { - this.control = control; - this.column1 = column1; - this.column2 = column2; - control.addListener(SWT.Resize, resizeListener); - column1.addListener(SWT.Resize, column1ResizeListener); - column2.setResizable(false); - } - - private Listener resizeListener = new Listener() { - public void handleEvent(Event e) { - if (column1Width == 0 && column2Width == 0) { - column1Width = (control.getBounds().width - 18) / 2; - column2Width = (control.getBounds().width - 18) / 2; - } else { - int dif = control.getBounds().width - 18 - (column1Width + column2Width); - int columnDif = Math.abs(column1Width - column2Width); - int mainColumnChange = Math.min(Math.abs(dif), columnDif); - int left = Math.max(0, Math.abs(dif) - columnDif); - if (dif < 0) { - if (column1Width > column2Width) { - column1Width -= mainColumnChange; - } else { - column2Width -= mainColumnChange; - } - column1Width -= left / 2; - column2Width -= left - left / 2; - } else { - if (column1Width > column2Width) { - column2Width += mainColumnChange; - } else { - column1Width += mainColumnChange; - } - column1Width += left / 2; - column2Width += left - left / 2; - } - } - column1.removeListener(SWT.Resize, column1ResizeListener); - column1.setWidth(column1Width); - column2.setWidth(column2Width); - column1.addListener(SWT.Resize, column1ResizeListener); - } - }; - - private Listener column1ResizeListener = new Listener() { - public void handleEvent(Event e) { - int widthDif = column1Width - column1.getWidth(); - column1Width -= widthDif; - column2Width += widthDif; - if (column2Width < 0) { - column1Width += column2Width; - column2Width = 0; - column1.removeListener(SWT.Resize, this); - column1.setWidth(column1Width); - column1.addListener(SWT.Resize, this); - } - column2.setWidth(column2Width); - } - }; -} |